// 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  S3351C4_nt  {
  int s3351c4f0[2];
  void  mf3351c4(); // _ZN10S3351C4_nt8mf3351c4Ev
};
//SIG(-1 S3351C4_nt) C1{ m Fi[2]}


void  S3351C4_nt ::mf3351c4(){}

//skip512 S3351C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3351C3_nt  {
  int s3351c3f0;
  __tsi64 s3351c3f1;
  void *s3351c3f2[4];
  int s3351c3f3[2];
  void *s3351c3f4;
  ::S3351C4_nt s3351c3f5;
  void *s3351c3f6[2];
  virtual  ~S3351C3_nt(); // _ZN10S3351C3_ntD1Ev
  virtual void  v6(); // _ZN10S3351C3_nt2v6Ev
  virtual void  v7(); // _ZN10S3351C3_nt2v7Ev
  virtual void  v8(); // _ZN10S3351C3_nt2v8Ev
  virtual void  v9(); // _ZN10S3351C3_nt2v9Ev
  virtual void  v10(); // _ZN10S3351C3_nt3v10Ev
  virtual void  v11(); // _ZN10S3351C3_nt3v11Ev
  virtual void  v12(); // _ZN10S3351C3_nt3v12Ev
  virtual void  v13(); // _ZN10S3351C3_nt3v13Ev
  virtual void  v14(); // _ZN10S3351C3_nt3v14Ev
  virtual void  v15(); // _ZN10S3351C3_nt3v15Ev
  virtual void  v16(); // _ZN10S3351C3_nt3v16Ev
  virtual void  v17(); // _ZN10S3351C3_nt3v17Ev
  virtual void  v18(); // _ZN10S3351C3_nt3v18Ev
  virtual void  v19(); // _ZN10S3351C3_nt3v19Ev
  virtual void  v20(); // _ZN10S3351C3_nt3v20Ev
  virtual void  v21(); // _ZN10S3351C3_nt3v21Ev
  virtual void  v22(); // _ZN10S3351C3_nt3v22Ev
  virtual void  v23(); // _ZN10S3351C3_nt3v23Ev
  virtual void  v24(); // _ZN10S3351C3_nt3v24Ev
  virtual void  v25(); // _ZN10S3351C3_nt3v25Ev
  virtual void  v26(); // _ZN10S3351C3_nt3v26Ev
  virtual void  v27(); // _ZN10S3351C3_nt3v27Ev
  virtual void  v28(); // _ZN10S3351C3_nt3v28Ev
  virtual void  v29(); // _ZN10S3351C3_nt3v29Ev
  virtual void  v30(); // _ZN10S3351C3_nt3v30Ev
  virtual void  v31(); // _ZN10S3351C3_nt3v31Ev
  virtual void  v32(); // _ZN10S3351C3_nt3v32Ev
  virtual void  v33(); // _ZN10S3351C3_nt3v33Ev
  virtual void  v34(); // _ZN10S3351C3_nt3v34Ev
  virtual void  v35(); // _ZN10S3351C3_nt3v35Ev
  virtual void  v36(); // _ZN10S3351C3_nt3v36Ev
  virtual void  v37(); // _ZN10S3351C3_nt3v37Ev
  virtual void  v38(); // _ZN10S3351C3_nt3v38Ev
  virtual void  v39(); // _ZN10S3351C3_nt3v39Ev
  virtual void  v40(); // _ZN10S3351C3_nt3v40Ev
  virtual void  v41(); // _ZN10S3351C3_nt3v41Ev
  virtual void  v42(); // _ZN10S3351C3_nt3v42Ev
  virtual void  v43(); // _ZN10S3351C3_nt3v43Ev
  virtual void  v44(); // _ZN10S3351C3_nt3v44Ev
  virtual void  v45(); // _ZN10S3351C3_nt3v45Ev
  virtual void  v46(); // _ZN10S3351C3_nt3v46Ev
  virtual void  v47(); // _ZN10S3351C3_nt3v47Ev
  virtual void  v48(); // _ZN10S3351C3_nt3v48Ev
  virtual void  v49(); // _ZN10S3351C3_nt3v49Ev
  virtual void  v50(); // _ZN10S3351C3_nt3v50Ev
  virtual void  v51(); // _ZN10S3351C3_nt3v51Ev
  virtual void  v52(); // _ZN10S3351C3_nt3v52Ev
  virtual void  v53(); // _ZN10S3351C3_nt3v53Ev
  virtual void  v54(); // _ZN10S3351C3_nt3v54Ev
  virtual void  v55(); // _ZN10S3351C3_nt3v55Ev
  virtual void  v56(); // _ZN10S3351C3_nt3v56Ev
  virtual void  v57(); // _ZN10S3351C3_nt3v57Ev
  virtual void  v58(); // _ZN10S3351C3_nt3v58Ev
  virtual void  v59(); // _ZN10S3351C3_nt3v59Ev
  virtual void  v60(); // _ZN10S3351C3_nt3v60Ev
  virtual void  v61(); // _ZN10S3351C3_nt3v61Ev
  virtual void  v62(); // _ZN10S3351C3_nt3v62Ev
  virtual void  v63(); // _ZN10S3351C3_nt3v63Ev
  virtual void  v64(); // _ZN10S3351C3_nt3v64Ev
  virtual void  v65(); // _ZN10S3351C3_nt3v65Ev
  virtual void  v66(); // _ZN10S3351C3_nt3v66Ev
  virtual void  v67(); // _ZN10S3351C3_nt3v67Ev
  virtual void  v68(); // _ZN10S3351C3_nt3v68Ev
  virtual void  v69(); // _ZN10S3351C3_nt3v69Ev
  S3351C3_nt(); // tgen
};
//SIG(-1 S3351C3_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]}


 S3351C3_nt ::~S3351C3_nt(){ note_dtor("S3351C3_nt", this);}
void  S3351C3_nt ::v6(){vfunc_called(this, "_ZN10S3351C3_nt2v6Ev");}
void  S3351C3_nt ::v7(){vfunc_called(this, "_ZN10S3351C3_nt2v7Ev");}
void  S3351C3_nt ::v8(){vfunc_called(this, "_ZN10S3351C3_nt2v8Ev");}
void  S3351C3_nt ::v9(){vfunc_called(this, "_ZN10S3351C3_nt2v9Ev");}
void  S3351C3_nt ::v10(){vfunc_called(this, "_ZN10S3351C3_nt3v10Ev");}
void  S3351C3_nt ::v11(){vfunc_called(this, "_ZN10S3351C3_nt3v11Ev");}
void  S3351C3_nt ::v12(){vfunc_called(this, "_ZN10S3351C3_nt3v12Ev");}
void  S3351C3_nt ::v13(){vfunc_called(this, "_ZN10S3351C3_nt3v13Ev");}
void  S3351C3_nt ::v14(){vfunc_called(this, "_ZN10S3351C3_nt3v14Ev");}
void  S3351C3_nt ::v15(){vfunc_called(this, "_ZN10S3351C3_nt3v15Ev");}
void  S3351C3_nt ::v16(){vfunc_called(this, "_ZN10S3351C3_nt3v16Ev");}
void  S3351C3_nt ::v17(){vfunc_called(this, "_ZN10S3351C3_nt3v17Ev");}
void  S3351C3_nt ::v18(){vfunc_called(this, "_ZN10S3351C3_nt3v18Ev");}
void  S3351C3_nt ::v19(){vfunc_called(this, "_ZN10S3351C3_nt3v19Ev");}
void  S3351C3_nt ::v20(){vfunc_called(this, "_ZN10S3351C3_nt3v20Ev");}
void  S3351C3_nt ::v21(){vfunc_called(this, "_ZN10S3351C3_nt3v21Ev");}
void  S3351C3_nt ::v22(){vfunc_called(this, "_ZN10S3351C3_nt3v22Ev");}
void  S3351C3_nt ::v23(){vfunc_called(this, "_ZN10S3351C3_nt3v23Ev");}
void  S3351C3_nt ::v24(){vfunc_called(this, "_ZN10S3351C3_nt3v24Ev");}
void  S3351C3_nt ::v25(){vfunc_called(this, "_ZN10S3351C3_nt3v25Ev");}
void  S3351C3_nt ::v26(){vfunc_called(this, "_ZN10S3351C3_nt3v26Ev");}
void  S3351C3_nt ::v27(){vfunc_called(this, "_ZN10S3351C3_nt3v27Ev");}
void  S3351C3_nt ::v28(){vfunc_called(this, "_ZN10S3351C3_nt3v28Ev");}
void  S3351C3_nt ::v29(){vfunc_called(this, "_ZN10S3351C3_nt3v29Ev");}
void  S3351C3_nt ::v30(){vfunc_called(this, "_ZN10S3351C3_nt3v30Ev");}
void  S3351C3_nt ::v31(){vfunc_called(this, "_ZN10S3351C3_nt3v31Ev");}
void  S3351C3_nt ::v32(){vfunc_called(this, "_ZN10S3351C3_nt3v32Ev");}
void  S3351C3_nt ::v33(){vfunc_called(this, "_ZN10S3351C3_nt3v33Ev");}
void  S3351C3_nt ::v34(){vfunc_called(this, "_ZN10S3351C3_nt3v34Ev");}
void  S3351C3_nt ::v35(){vfunc_called(this, "_ZN10S3351C3_nt3v35Ev");}
void  S3351C3_nt ::v36(){vfunc_called(this, "_ZN10S3351C3_nt3v36Ev");}
void  S3351C3_nt ::v37(){vfunc_called(this, "_ZN10S3351C3_nt3v37Ev");}
void  S3351C3_nt ::v38(){vfunc_called(this, "_ZN10S3351C3_nt3v38Ev");}
void  S3351C3_nt ::v39(){vfunc_called(this, "_ZN10S3351C3_nt3v39Ev");}
void  S3351C3_nt ::v40(){vfunc_called(this, "_ZN10S3351C3_nt3v40Ev");}
void  S3351C3_nt ::v41(){vfunc_called(this, "_ZN10S3351C3_nt3v41Ev");}
void  S3351C3_nt ::v42(){vfunc_called(this, "_ZN10S3351C3_nt3v42Ev");}
void  S3351C3_nt ::v43(){vfunc_called(this, "_ZN10S3351C3_nt3v43Ev");}
void  S3351C3_nt ::v44(){vfunc_called(this, "_ZN10S3351C3_nt3v44Ev");}
void  S3351C3_nt ::v45(){vfunc_called(this, "_ZN10S3351C3_nt3v45Ev");}
void  S3351C3_nt ::v46(){vfunc_called(this, "_ZN10S3351C3_nt3v46Ev");}
void  S3351C3_nt ::v47(){vfunc_called(this, "_ZN10S3351C3_nt3v47Ev");}
void  S3351C3_nt ::v48(){vfunc_called(this, "_ZN10S3351C3_nt3v48Ev");}
void  S3351C3_nt ::v49(){vfunc_called(this, "_ZN10S3351C3_nt3v49Ev");}
void  S3351C3_nt ::v50(){vfunc_called(this, "_ZN10S3351C3_nt3v50Ev");}
void  S3351C3_nt ::v51(){vfunc_called(this, "_ZN10S3351C3_nt3v51Ev");}
void  S3351C3_nt ::v52(){vfunc_called(this, "_ZN10S3351C3_nt3v52Ev");}
void  S3351C3_nt ::v53(){vfunc_called(this, "_ZN10S3351C3_nt3v53Ev");}
void  S3351C3_nt ::v54(){vfunc_called(this, "_ZN10S3351C3_nt3v54Ev");}
void  S3351C3_nt ::v55(){vfunc_called(this, "_ZN10S3351C3_nt3v55Ev");}
void  S3351C3_nt ::v56(){vfunc_called(this, "_ZN10S3351C3_nt3v56Ev");}
void  S3351C3_nt ::v57(){vfunc_called(this, "_ZN10S3351C3_nt3v57Ev");}
void  S3351C3_nt ::v58(){vfunc_called(this, "_ZN10S3351C3_nt3v58Ev");}
void  S3351C3_nt ::v59(){vfunc_called(this, "_ZN10S3351C3_nt3v59Ev");}
void  S3351C3_nt ::v60(){vfunc_called(this, "_ZN10S3351C3_nt3v60Ev");}
void  S3351C3_nt ::v61(){vfunc_called(this, "_ZN10S3351C3_nt3v61Ev");}
void  S3351C3_nt ::v62(){vfunc_called(this, "_ZN10S3351C3_nt3v62Ev");}
void  S3351C3_nt ::v63(){vfunc_called(this, "_ZN10S3351C3_nt3v63Ev");}
void  S3351C3_nt ::v64(){vfunc_called(this, "_ZN10S3351C3_nt3v64Ev");}
void  S3351C3_nt ::v65(){vfunc_called(this, "_ZN10S3351C3_nt3v65Ev");}
void  S3351C3_nt ::v66(){vfunc_called(this, "_ZN10S3351C3_nt3v66Ev");}
void  S3351C3_nt ::v67(){vfunc_called(this, "_ZN10S3351C3_nt3v67Ev");}
void  S3351C3_nt ::v68(){vfunc_called(this, "_ZN10S3351C3_nt3v68Ev");}
void  S3351C3_nt ::v69(){vfunc_called(this, "_ZN10S3351C3_nt3v69Ev");}
S3351C3_nt ::S3351C3_nt(){ note_ctor("S3351C3_nt", this);} // tgen

//skip512 S3351C3_nt

#else // __cplusplus

extern void _ZN10S3351C3_ntC1Ev();
extern void _ZN10S3351C3_ntD1Ev();
Name_Map name_map_S3351C3_nt[] = {
  NSPAIR(_ZN10S3351C3_ntC1Ev),
  NSPAIR(_ZN10S3351C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S3351C3_nt[];
extern void _ZN10S3351C3_ntD1Ev();
extern void _ZN10S3351C3_ntD0Ev();
extern void _ZN10S3351C3_nt2v6Ev();
extern void _ZN10S3351C3_nt2v7Ev();
extern void _ZN10S3351C3_nt2v8Ev();
extern void _ZN10S3351C3_nt2v9Ev();
extern void _ZN10S3351C3_nt3v10Ev();
extern void _ZN10S3351C3_nt3v11Ev();
extern void _ZN10S3351C3_nt3v12Ev();
extern void _ZN10S3351C3_nt3v13Ev();
extern void _ZN10S3351C3_nt3v14Ev();
extern void _ZN10S3351C3_nt3v15Ev();
extern void _ZN10S3351C3_nt3v16Ev();
extern void _ZN10S3351C3_nt3v17Ev();
extern void _ZN10S3351C3_nt3v18Ev();
extern void _ZN10S3351C3_nt3v19Ev();
extern void _ZN10S3351C3_nt3v20Ev();
extern void _ZN10S3351C3_nt3v21Ev();
extern void _ZN10S3351C3_nt3v22Ev();
extern void _ZN10S3351C3_nt3v23Ev();
extern void _ZN10S3351C3_nt3v24Ev();
extern void _ZN10S3351C3_nt3v25Ev();
extern void _ZN10S3351C3_nt3v26Ev();
extern void _ZN10S3351C3_nt3v27Ev();
extern void _ZN10S3351C3_nt3v28Ev();
extern void _ZN10S3351C3_nt3v29Ev();
extern void _ZN10S3351C3_nt3v30Ev();
extern void _ZN10S3351C3_nt3v31Ev();
extern void _ZN10S3351C3_nt3v32Ev();
extern void _ZN10S3351C3_nt3v33Ev();
extern void _ZN10S3351C3_nt3v34Ev();
extern void _ZN10S3351C3_nt3v35Ev();
extern void _ZN10S3351C3_nt3v36Ev();
extern void _ZN10S3351C3_nt3v37Ev();
extern void _ZN10S3351C3_nt3v38Ev();
extern void _ZN10S3351C3_nt3v39Ev();
extern void _ZN10S3351C3_nt3v40Ev();
extern void _ZN10S3351C3_nt3v41Ev();
extern void _ZN10S3351C3_nt3v42Ev();
extern void _ZN10S3351C3_nt3v43Ev();
extern void _ZN10S3351C3_nt3v44Ev();
extern void _ZN10S3351C3_nt3v45Ev();
extern void _ZN10S3351C3_nt3v46Ev();
extern void _ZN10S3351C3_nt3v47Ev();
extern void _ZN10S3351C3_nt3v48Ev();
extern void _ZN10S3351C3_nt3v49Ev();
extern void _ZN10S3351C3_nt3v50Ev();
extern void _ZN10S3351C3_nt3v51Ev();
extern void _ZN10S3351C3_nt3v52Ev();
extern void _ZN10S3351C3_nt3v53Ev();
extern void _ZN10S3351C3_nt3v54Ev();
extern void _ZN10S3351C3_nt3v55Ev();
extern void _ZN10S3351C3_nt3v56Ev();
extern void _ZN10S3351C3_nt3v57Ev();
extern void _ZN10S3351C3_nt3v58Ev();
extern void _ZN10S3351C3_nt3v59Ev();
extern void _ZN10S3351C3_nt3v60Ev();
extern void _ZN10S3351C3_nt3v61Ev();
extern void _ZN10S3351C3_nt3v62Ev();
extern void _ZN10S3351C3_nt3v63Ev();
extern void _ZN10S3351C3_nt3v64Ev();
extern void _ZN10S3351C3_nt3v65Ev();
extern void _ZN10S3351C3_nt3v66Ev();
extern void _ZN10S3351C3_nt3v67Ev();
extern void _ZN10S3351C3_nt3v68Ev();
extern void _ZN10S3351C3_nt3v69Ev();
static  VTBL_ENTRY vtc_S3351C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3351C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S3351C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v69Ev,
};
extern VTBL_ENTRY _ZTI10S3351C3_nt[];
VTBL_ENTRY *P__ZTI10S3351C3_nt = _ZTI10S3351C3_nt; 
extern  VTBL_ENTRY _ZTV10S3351C3_nt[];
Class_Descriptor cd_S3351C3_nt = {  "S3351C3_nt", // class name
  0,0,//no base classes
  &(vtc_S3351C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI10S3351C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S3351C3_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  S3351C7_nt  {
  void *s3351c7f0;
  int s3351c7f1[2];
  void  mf3351c7(); // _ZN10S3351C7_nt8mf3351c7Ev
};
//SIG(-1 S3351C7_nt) C1{ m Fp Fi[2]}


void  S3351C7_nt ::mf3351c7(){}

//skip512 S3351C7_nt

#else // __cplusplus

Class_Descriptor cd_S3351C7_nt = {  "S3351C7_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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

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



//skip512 S3351C6_nt

#else // __cplusplus

extern Class_Descriptor cd_S3351C7_nt;
static Base_Class bases_S3351C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3351C7_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_S3351C6_nt = {  "S3351C6_nt", // class name
  bases_S3351C6_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  S3351C5_nt  : S3351C6_nt {
};
//SIG(-1 S3351C5_nt) C1{ BC2{ BC3{ m Fp Fi[2]}}}



//skip512 S3351C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S3351C7_nt;
extern Class_Descriptor cd_S3351C6_nt;
static Base_Class bases_S3351C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3351C7_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_S3351C6_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  S3351C8_nt  {
  int s3351c8f0;
  void  mf3351c8(); // _ZN10S3351C8_nt8mf3351c8Ev
};
//SIG(-1 S3351C8_nt) C1{ m Fi}


void  S3351C8_nt ::mf3351c8(){}

//skip512 S3351C8_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S3351C8_nt[];
VTBL_ENTRY *P__ZTI10S3351C8_nt = _ZTI10S3351C8_nt; 
Class_Descriptor cd_S3351C8_nt = {  "S3351C8_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI10S3351C8_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  S3351C12  : S3351C7_nt {
};
//SIG(-1 S3351C12) C1{ BC2{ m Fp Fi[2]}}



static void Test_S3351C12()
{
  extern Class_Descriptor cd_S3351C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3351C12, buf);
    S3351C12 &lv = *(new (buf) S3351C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3351C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3351C12)");
    check_base_class_offset(lv, (S3351C7_nt*), 0, "S3351C12");
    test_class_info(&lv, &cd_S3351C12);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3351C12(Test_S3351C12, "S3351C12", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3351C7_nt;
static Base_Class bases_S3351C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3351C7_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_S3351C12 = {  "S3351C12", // class name
  bases_S3351C12, 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  S3351C11  : S3351C12 {
};
//SIG(-1 S3351C11) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S3351C11()
{
  extern Class_Descriptor cd_S3351C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3351C11, buf);
    S3351C11 &lv = *(new (buf) S3351C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3351C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3351C11)");
    check_base_class_offset(lv, (S3351C7_nt*)(S3351C12*), 0, "S3351C11");
    check_base_class_offset(lv, (S3351C12*), 0, "S3351C11");
    test_class_info(&lv, &cd_S3351C11);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3351C11(Test_S3351C11, "S3351C11", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3351C7_nt;
extern Class_Descriptor cd_S3351C12;
static Base_Class bases_S3351C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3351C7_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_S3351C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3351C11 = {  "S3351C11", // class name
  bases_S3351C11, 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  S3351C13_nt  {
  int s3351c13f0[3];
  void  mf3351c13(); // _ZN11S3351C13_nt9mf3351c13Ev
};
//SIG(-1 S3351C13_nt) C1{ m Fi[3]}


void  S3351C13_nt ::mf3351c13(){}

//skip512 S3351C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S3351C18()
{
  extern Class_Descriptor cd_S3351C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3351C18, buf);
    S3351C18 &lv = *(new (buf) S3351C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3351C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3351C18)");
    check_base_class_offset(lv, (S3351C7_nt*), 0, "S3351C18");
    test_class_info(&lv, &cd_S3351C18);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3351C18(Test_S3351C18, "S3351C18", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3351C7_nt;
static Base_Class bases_S3351C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3351C7_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_S3351C18 = {  "S3351C18", // class name
  bases_S3351C18, 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  S3351C17  : S3351C18 {
};
//SIG(-1 S3351C17) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S3351C17()
{
  extern Class_Descriptor cd_S3351C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3351C17, buf);
    S3351C17 &lv = *(new (buf) S3351C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3351C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3351C17)");
    check_base_class_offset(lv, (S3351C7_nt*)(S3351C18*), 0, "S3351C17");
    check_base_class_offset(lv, (S3351C18*), 0, "S3351C17");
    test_class_info(&lv, &cd_S3351C17);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3351C17(Test_S3351C17, "S3351C17", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3351C7_nt;
extern Class_Descriptor cd_S3351C18;
static Base_Class bases_S3351C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3351C7_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_S3351C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3351C17 = {  "S3351C17", // class name
  bases_S3351C17, 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  S3351C2_nt  : S3351C3_nt {
  ::S3351C5_nt s3351c2f0;
  ::S3351C5_nt s3351c2f1;
  ::S3351C8_nt s3351c2f2;
  int s3351c2f3;
  char s3351c2f4[4];
  void *s3351c2f5[2];
  ::S3351C5_nt s3351c2f6;
  unsigned int s3351c2f7:1;
  unsigned int s3351c2f8:1;
  unsigned int s3351c2f9:1;
  unsigned int s3351c2f10:1;
  unsigned int s3351c2f11:1;
  unsigned int s3351c2f12:1;
  unsigned int s3351c2f13:1;
  unsigned int s3351c2f14:1;
  unsigned int s3351c2f15:1;
  unsigned int s3351c2f16:1;
  unsigned int s3351c2f17:1;
  unsigned int s3351c2f18:1;
  unsigned int s3351c2f19:1;
  unsigned int s3351c2f20:1;
  unsigned int s3351c2f21:1;
  unsigned int s3351c2f22:1;
  unsigned int s3351c2f23:1;
  unsigned int s3351c2f24:1;
  unsigned int s3351c2f25:1;
  unsigned int s3351c2f26:1;
  unsigned int s3351c2f27:1;
  unsigned int s3351c2f28:1;
  unsigned int s3351c2f29:1;
  unsigned int s3351c2f30:1;
  unsigned int s3351c2f31:1;
  unsigned int s3351c2f32:1;
  unsigned int s3351c2f33:1;
  unsigned int s3351c2f34:1;
  unsigned int s3351c2f35:1;
  unsigned int s3351c2f36:1;
  unsigned int s3351c2f37:1;
  unsigned int s3351c2f38:1;
  unsigned int s3351c2f39:1;
  unsigned int s3351c2f40:1;
  unsigned int s3351c2f41:1;
  unsigned int s3351c2f42:1;
  unsigned int s3351c2f43:1;
  unsigned int s3351c2f44:1;
  unsigned int s3351c2f45:1;
  unsigned int s3351c2f46:1;
  unsigned int s3351c2f47:1;
  unsigned int s3351c2f48:1;
  unsigned int s3351c2f49:1;
  unsigned int s3351c2f50:1;
  unsigned int s3351c2f51:1;
  unsigned int s3351c2f52:1;
  unsigned int s3351c2f53:1;
  unsigned int s3351c2f54:1;
  unsigned int s3351c2f55:1;
  unsigned int s3351c2f56:1;
  unsigned int s3351c2f57:1;
  unsigned int s3351c2f58:1;
  unsigned int s3351c2f59:1;
  unsigned int s3351c2f60:1;
  unsigned int s3351c2f61:1;
  unsigned int s3351c2f62:1;
  unsigned int s3351c2f63:1;
  unsigned int s3351c2f64:1;
  unsigned int s3351c2f65:1;
  unsigned int s3351c2f66:1;
  unsigned int s3351c2f67:1;
  unsigned int s3351c2f68:1;
  unsigned int s3351c2f69:1;
  unsigned int s3351c2f70:1;
  unsigned int s3351c2f71:1;
  unsigned int s3351c2f72:1;
  unsigned int s3351c2f73:1;
  unsigned int s3351c2f74:1;
  unsigned int s3351c2f75:1;
  unsigned int s3351c2f76:1;
  unsigned int s3351c2f77:1;
  unsigned int s3351c2f78:1;
  unsigned int s3351c2f79:1;
  unsigned int s3351c2f80:1;
  unsigned int s3351c2f81:1;
  unsigned int s3351c2f82:1;
  unsigned int s3351c2f83:1;
  int s3351c2f84[5];
  void *s3351c2f85[2];
  int s3351c2f86[3];
  ::S3351C4_nt s3351c2f87;
  ::S3351C4_nt s3351c2f88;
  ::S3351C4_nt s3351c2f89;
  ::S3351C11 s3351c2f90;
  ::S3351C11 s3351c2f91;
  int s3351c2f92;
  void *s3351c2f93[2];
  ::S3351C13_nt s3351c2f94;
  ::S3351C13_nt s3351c2f95;
  ::S3351C13_nt s3351c2f96;
  ::S3351C13_nt s3351c2f97;
  void *s3351c2f98;
  ::S3351C4_nt s3351c2f99;
  ::S3351C11 s3351c2f100;
  ::S3351C13_nt s3351c2f101;
  ::S3351C13_nt s3351c2f102;
  int s3351c2f103;
  ::S3351C13_nt s3351c2f104;
  ::S3351C13_nt s3351c2f105;
  void *s3351c2f106;
  int s3351c2f107;
  char s3351c2f108;
  ::S3351C13_nt s3351c2f109;
  ::S3351C13_nt s3351c2f110;
  void *s3351c2f111;
  int s3351c2f112;
  void *s3351c2f113;
  ::S3351C11 s3351c2f114;
  ::S3351C17 s3351c2f115;
  ::S3351C17 s3351c2f116;
  virtual  ~S3351C2_nt(); // _ZN10S3351C2_ntD1Ev
  virtual void  v70(); // _ZN10S3351C2_nt3v70Ev
  virtual void  v71(); // _ZN10S3351C2_nt3v71Ev
  virtual void  v72(); // _ZN10S3351C2_nt3v72Ev
  virtual void  v73(); // _ZN10S3351C2_nt3v73Ev
  virtual void  v74(); // _ZN10S3351C2_nt3v74Ev
  virtual void  v75(); // _ZN10S3351C2_nt3v75Ev
  virtual void  v76(); // _ZN10S3351C2_nt3v76Ev
  virtual void  v77(); // _ZN10S3351C2_nt3v77Ev
  virtual void  v78(); // _ZN10S3351C2_nt3v78Ev
  virtual void  v79(); // _ZN10S3351C2_nt3v79Ev
  virtual void  v80(); // _ZN10S3351C2_nt3v80Ev
  virtual void  v81(); // _ZN10S3351C2_nt3v81Ev
  virtual void  v82(); // _ZN10S3351C2_nt3v82Ev
  virtual void  v83(); // _ZN10S3351C2_nt3v83Ev
  virtual void  v84(); // _ZN10S3351C2_nt3v84Ev
  virtual void  v85(); // _ZN10S3351C2_nt3v85Ev
  virtual void  v86(); // _ZN10S3351C2_nt3v86Ev
  virtual void  v87(); // _ZN10S3351C2_nt3v87Ev
  virtual void  v88(); // _ZN10S3351C2_nt3v88Ev
  virtual void  v89(); // _ZN10S3351C2_nt3v89Ev
  virtual void  v90(); // _ZN10S3351C2_nt3v90Ev
  virtual void  v91(); // _ZN10S3351C2_nt3v91Ev
  virtual void  v92(); // _ZN10S3351C2_nt3v92Ev
  virtual void  v93(); // _ZN10S3351C2_nt3v93Ev
  virtual void  v94(); // _ZN10S3351C2_nt3v94Ev
  virtual void  v95(); // _ZN10S3351C2_nt3v95Ev
  virtual void  v96(); // _ZN10S3351C2_nt3v96Ev
  virtual void  v97(); // _ZN10S3351C2_nt3v97Ev
  virtual void  v98(); // _ZN10S3351C2_nt3v98Ev
  virtual void  v99(); // _ZN10S3351C2_nt3v99Ev
  virtual void  v100(); // _ZN10S3351C2_nt4v100Ev
  virtual void  v101(); // _ZN10S3351C2_nt4v101Ev
  virtual void  v102(); // _ZN10S3351C2_nt4v102Ev
  virtual void  v103(); // _ZN10S3351C2_nt4v103Ev
  virtual void  v104(); // _ZN10S3351C2_nt4v104Ev
  virtual void  v105(); // _ZN10S3351C2_nt4v105Ev
  virtual void  v106(); // _ZN10S3351C2_nt4v106Ev
  virtual void  v107(); // _ZN10S3351C2_nt4v107Ev
  virtual void  v108(); // _ZN10S3351C2_nt4v108Ev
  virtual void  v109(); // _ZN10S3351C2_nt4v109Ev
  virtual void  v110(); // _ZN10S3351C2_nt4v110Ev
  virtual void  v111(); // _ZN10S3351C2_nt4v111Ev
  virtual void  v112(); // _ZN10S3351C2_nt4v112Ev
  virtual void  v113(); // _ZN10S3351C2_nt4v113Ev
  virtual void  v114(); // _ZN10S3351C2_nt4v114Ev
  virtual void  v115(); // _ZN10S3351C2_nt4v115Ev
  virtual void  v116(); // _ZN10S3351C2_nt4v116Ev
  virtual void  v117(); // _ZN10S3351C2_nt4v117Ev
  virtual void  v118(); // _ZN10S3351C2_nt4v118Ev
  virtual void  v119(); // _ZN10S3351C2_nt4v119Ev
  virtual void  v120(); // _ZN10S3351C2_nt4v120Ev
  virtual void  v121(); // _ZN10S3351C2_nt4v121Ev
  virtual void  v122(); // _ZN10S3351C2_nt4v122Ev
  virtual void  v123(); // _ZN10S3351C2_nt4v123Ev
  virtual void  v124(); // _ZN10S3351C2_nt4v124Ev
  virtual void  v125(); // _ZN10S3351C2_nt4v125Ev
  virtual void  v126(); // _ZN10S3351C2_nt4v126Ev
  virtual void  v127(); // _ZN10S3351C2_nt4v127Ev
  virtual void  v128(); // _ZN10S3351C2_nt4v128Ev
  virtual void  v129(); // _ZN10S3351C2_nt4v129Ev
  virtual void  v130(); // _ZN10S3351C2_nt4v130Ev
  virtual void  v131(); // _ZN10S3351C2_nt4v131Ev
  virtual void  v132(); // _ZN10S3351C2_nt4v132Ev
  virtual void  v133(); // _ZN10S3351C2_nt4v133Ev
  virtual void  v134(); // _ZN10S3351C2_nt4v134Ev
  virtual void  v135(); // _ZN10S3351C2_nt4v135Ev
  virtual void  v136(); // _ZN10S3351C2_nt4v136Ev
  virtual void  v137(); // _ZN10S3351C2_nt4v137Ev
  virtual void  v138(); // _ZN10S3351C2_nt4v138Ev
  virtual void  v139(); // _ZN10S3351C2_nt4v139Ev
  virtual void  v140(); // _ZN10S3351C2_nt4v140Ev
  virtual void  v141(); // _ZN10S3351C2_nt4v141Ev
  virtual void  v142(); // _ZN10S3351C2_nt4v142Ev
  virtual void  v143(); // _ZN10S3351C2_nt4v143Ev
  virtual void  v144(); // _ZN10S3351C2_nt4v144Ev
  virtual void  v145(); // _ZN10S3351C2_nt4v145Ev
  virtual void  v146(); // _ZN10S3351C2_nt4v146Ev
  virtual void  v147(); // _ZN10S3351C2_nt4v147Ev
  virtual void  v148(); // _ZN10S3351C2_nt4v148Ev
  virtual void  v149(); // _ZN10S3351C2_nt4v149Ev
  virtual void  v150(); // _ZN10S3351C2_nt4v150Ev
  virtual void  v151(); // _ZN10S3351C2_nt4v151Ev
  virtual void  v152(); // _ZN10S3351C2_nt4v152Ev
  virtual void  v153(); // _ZN10S3351C2_nt4v153Ev
  virtual void  v154(); // _ZN10S3351C2_nt4v154Ev
  virtual void  v155(); // _ZN10S3351C2_nt4v155Ev
  virtual void  v156(); // _ZN10S3351C2_nt4v156Ev
  virtual void  v157(); // _ZN10S3351C2_nt4v157Ev
  virtual void  v158(); // _ZN10S3351C2_nt4v158Ev
  virtual void  v159(); // _ZN10S3351C2_nt4v159Ev
  virtual void  v160(); // _ZN10S3351C2_nt4v160Ev
  virtual void  v161(); // _ZN10S3351C2_nt4v161Ev
  virtual void  v162(); // _ZN10S3351C2_nt4v162Ev
  virtual void  v163(); // _ZN10S3351C2_nt4v163Ev
  virtual void  v164(); // _ZN10S3351C2_nt4v164Ev
  virtual void  v165(); // _ZN10S3351C2_nt4v165Ev
  virtual void  v166(); // _ZN10S3351C2_nt4v166Ev
  virtual void  v167(); // _ZN10S3351C2_nt4v167Ev
  virtual void  v168(); // _ZN10S3351C2_nt4v168Ev
  virtual void  v169(); // _ZN10S3351C2_nt4v169Ev
  virtual void  v170(); // _ZN10S3351C2_nt4v170Ev
  virtual void  v171(); // _ZN10S3351C2_nt4v171Ev
  virtual void  v172(); // _ZN10S3351C2_nt4v172Ev
  virtual void  v173(); // _ZN10S3351C2_nt4v173Ev
  virtual void  v174(); // _ZN10S3351C2_nt4v174Ev
  virtual void  v175(); // _ZN10S3351C2_nt4v175Ev
  virtual void  v176(); // _ZN10S3351C2_nt4v176Ev
  virtual void  v177(); // _ZN10S3351C2_nt4v177Ev
  virtual void  v178(); // _ZN10S3351C2_nt4v178Ev
  virtual void  v179(); // _ZN10S3351C2_nt4v179Ev
  virtual void  v180(); // _ZN10S3351C2_nt4v180Ev
  virtual void  v181(); // _ZN10S3351C2_nt4v181Ev
  virtual void  v182(); // _ZN10S3351C2_nt4v182Ev
  virtual void  v183(); // _ZN10S3351C2_nt4v183Ev
  virtual void  v184(); // _ZN10S3351C2_nt4v184Ev
  virtual void  v185(); // _ZN10S3351C2_nt4v185Ev
  virtual void  v186(); // _ZN10S3351C2_nt4v186Ev
  virtual void  v187(); // _ZN10S3351C2_nt4v187Ev
  virtual void  v188(); // _ZN10S3351C2_nt4v188Ev
  virtual void  v189(); // _ZN10S3351C2_nt4v189Ev
  virtual void  v190(); // _ZN10S3351C2_nt4v190Ev
  virtual void  v191(); // _ZN10S3351C2_nt4v191Ev
  virtual void  v192(); // _ZN10S3351C2_nt4v192Ev
  virtual void  v193(); // _ZN10S3351C2_nt4v193Ev
  virtual void  v194(); // _ZN10S3351C2_nt4v194Ev
  virtual void  v195(); // _ZN10S3351C2_nt4v195Ev
  virtual void  v196(); // _ZN10S3351C2_nt4v196Ev
  virtual void  v197(); // _ZN10S3351C2_nt4v197Ev
  virtual void  v198(); // _ZN10S3351C2_nt4v198Ev
  virtual void  v199(); // _ZN10S3351C2_nt4v199Ev
  virtual void  v200(); // _ZN10S3351C2_nt4v200Ev
  virtual void  v201(); // _ZN10S3351C2_nt4v201Ev
  virtual void  v202(); // _ZN10S3351C2_nt4v202Ev
  virtual void  v203(); // _ZN10S3351C2_nt4v203Ev
  virtual void  v204(); // _ZN10S3351C2_nt4v204Ev
  virtual void  v205(); // _ZN10S3351C2_nt4v205Ev
  virtual void  v206(); // _ZN10S3351C2_nt4v206Ev
  virtual void  v207(); // _ZN10S3351C2_nt4v207Ev
  virtual void  v208(); // _ZN10S3351C2_nt4v208Ev
  virtual void  v209(); // _ZN10S3351C2_nt4v209Ev
  virtual void  v210(); // _ZN10S3351C2_nt4v210Ev
  virtual void  v211(); // _ZN10S3351C2_nt4v211Ev
  virtual void  v212(); // _ZN10S3351C2_nt4v212Ev
  S3351C2_nt(); // tgen
};
//SIG(-1 S3351C2_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}


 S3351C2_nt ::~S3351C2_nt(){ note_dtor("S3351C2_nt", this);}
void  S3351C2_nt ::v70(){vfunc_called(this, "_ZN10S3351C2_nt3v70Ev");}
void  S3351C2_nt ::v71(){vfunc_called(this, "_ZN10S3351C2_nt3v71Ev");}
void  S3351C2_nt ::v72(){vfunc_called(this, "_ZN10S3351C2_nt3v72Ev");}
void  S3351C2_nt ::v73(){vfunc_called(this, "_ZN10S3351C2_nt3v73Ev");}
void  S3351C2_nt ::v74(){vfunc_called(this, "_ZN10S3351C2_nt3v74Ev");}
void  S3351C2_nt ::v75(){vfunc_called(this, "_ZN10S3351C2_nt3v75Ev");}
void  S3351C2_nt ::v76(){vfunc_called(this, "_ZN10S3351C2_nt3v76Ev");}
void  S3351C2_nt ::v77(){vfunc_called(this, "_ZN10S3351C2_nt3v77Ev");}
void  S3351C2_nt ::v78(){vfunc_called(this, "_ZN10S3351C2_nt3v78Ev");}
void  S3351C2_nt ::v79(){vfunc_called(this, "_ZN10S3351C2_nt3v79Ev");}
void  S3351C2_nt ::v80(){vfunc_called(this, "_ZN10S3351C2_nt3v80Ev");}
void  S3351C2_nt ::v81(){vfunc_called(this, "_ZN10S3351C2_nt3v81Ev");}
void  S3351C2_nt ::v82(){vfunc_called(this, "_ZN10S3351C2_nt3v82Ev");}
void  S3351C2_nt ::v83(){vfunc_called(this, "_ZN10S3351C2_nt3v83Ev");}
void  S3351C2_nt ::v84(){vfunc_called(this, "_ZN10S3351C2_nt3v84Ev");}
void  S3351C2_nt ::v85(){vfunc_called(this, "_ZN10S3351C2_nt3v85Ev");}
void  S3351C2_nt ::v86(){vfunc_called(this, "_ZN10S3351C2_nt3v86Ev");}
void  S3351C2_nt ::v87(){vfunc_called(this, "_ZN10S3351C2_nt3v87Ev");}
void  S3351C2_nt ::v88(){vfunc_called(this, "_ZN10S3351C2_nt3v88Ev");}
void  S3351C2_nt ::v89(){vfunc_called(this, "_ZN10S3351C2_nt3v89Ev");}
void  S3351C2_nt ::v90(){vfunc_called(this, "_ZN10S3351C2_nt3v90Ev");}
void  S3351C2_nt ::v91(){vfunc_called(this, "_ZN10S3351C2_nt3v91Ev");}
void  S3351C2_nt ::v92(){vfunc_called(this, "_ZN10S3351C2_nt3v92Ev");}
void  S3351C2_nt ::v93(){vfunc_called(this, "_ZN10S3351C2_nt3v93Ev");}
void  S3351C2_nt ::v94(){vfunc_called(this, "_ZN10S3351C2_nt3v94Ev");}
void  S3351C2_nt ::v95(){vfunc_called(this, "_ZN10S3351C2_nt3v95Ev");}
void  S3351C2_nt ::v96(){vfunc_called(this, "_ZN10S3351C2_nt3v96Ev");}
void  S3351C2_nt ::v97(){vfunc_called(this, "_ZN10S3351C2_nt3v97Ev");}
void  S3351C2_nt ::v98(){vfunc_called(this, "_ZN10S3351C2_nt3v98Ev");}
void  S3351C2_nt ::v99(){vfunc_called(this, "_ZN10S3351C2_nt3v99Ev");}
void  S3351C2_nt ::v100(){vfunc_called(this, "_ZN10S3351C2_nt4v100Ev");}
void  S3351C2_nt ::v101(){vfunc_called(this, "_ZN10S3351C2_nt4v101Ev");}
void  S3351C2_nt ::v102(){vfunc_called(this, "_ZN10S3351C2_nt4v102Ev");}
void  S3351C2_nt ::v103(){vfunc_called(this, "_ZN10S3351C2_nt4v103Ev");}
void  S3351C2_nt ::v104(){vfunc_called(this, "_ZN10S3351C2_nt4v104Ev");}
void  S3351C2_nt ::v105(){vfunc_called(this, "_ZN10S3351C2_nt4v105Ev");}
void  S3351C2_nt ::v106(){vfunc_called(this, "_ZN10S3351C2_nt4v106Ev");}
void  S3351C2_nt ::v107(){vfunc_called(this, "_ZN10S3351C2_nt4v107Ev");}
void  S3351C2_nt ::v108(){vfunc_called(this, "_ZN10S3351C2_nt4v108Ev");}
void  S3351C2_nt ::v109(){vfunc_called(this, "_ZN10S3351C2_nt4v109Ev");}
void  S3351C2_nt ::v110(){vfunc_called(this, "_ZN10S3351C2_nt4v110Ev");}
void  S3351C2_nt ::v111(){vfunc_called(this, "_ZN10S3351C2_nt4v111Ev");}
void  S3351C2_nt ::v112(){vfunc_called(this, "_ZN10S3351C2_nt4v112Ev");}
void  S3351C2_nt ::v113(){vfunc_called(this, "_ZN10S3351C2_nt4v113Ev");}
void  S3351C2_nt ::v114(){vfunc_called(this, "_ZN10S3351C2_nt4v114Ev");}
void  S3351C2_nt ::v115(){vfunc_called(this, "_ZN10S3351C2_nt4v115Ev");}
void  S3351C2_nt ::v116(){vfunc_called(this, "_ZN10S3351C2_nt4v116Ev");}
void  S3351C2_nt ::v117(){vfunc_called(this, "_ZN10S3351C2_nt4v117Ev");}
void  S3351C2_nt ::v118(){vfunc_called(this, "_ZN10S3351C2_nt4v118Ev");}
void  S3351C2_nt ::v119(){vfunc_called(this, "_ZN10S3351C2_nt4v119Ev");}
void  S3351C2_nt ::v120(){vfunc_called(this, "_ZN10S3351C2_nt4v120Ev");}
void  S3351C2_nt ::v121(){vfunc_called(this, "_ZN10S3351C2_nt4v121Ev");}
void  S3351C2_nt ::v122(){vfunc_called(this, "_ZN10S3351C2_nt4v122Ev");}
void  S3351C2_nt ::v123(){vfunc_called(this, "_ZN10S3351C2_nt4v123Ev");}
void  S3351C2_nt ::v124(){vfunc_called(this, "_ZN10S3351C2_nt4v124Ev");}
void  S3351C2_nt ::v125(){vfunc_called(this, "_ZN10S3351C2_nt4v125Ev");}
void  S3351C2_nt ::v126(){vfunc_called(this, "_ZN10S3351C2_nt4v126Ev");}
void  S3351C2_nt ::v127(){vfunc_called(this, "_ZN10S3351C2_nt4v127Ev");}
void  S3351C2_nt ::v128(){vfunc_called(this, "_ZN10S3351C2_nt4v128Ev");}
void  S3351C2_nt ::v129(){vfunc_called(this, "_ZN10S3351C2_nt4v129Ev");}
void  S3351C2_nt ::v130(){vfunc_called(this, "_ZN10S3351C2_nt4v130Ev");}
void  S3351C2_nt ::v131(){vfunc_called(this, "_ZN10S3351C2_nt4v131Ev");}
void  S3351C2_nt ::v132(){vfunc_called(this, "_ZN10S3351C2_nt4v132Ev");}
void  S3351C2_nt ::v133(){vfunc_called(this, "_ZN10S3351C2_nt4v133Ev");}
void  S3351C2_nt ::v134(){vfunc_called(this, "_ZN10S3351C2_nt4v134Ev");}
void  S3351C2_nt ::v135(){vfunc_called(this, "_ZN10S3351C2_nt4v135Ev");}
void  S3351C2_nt ::v136(){vfunc_called(this, "_ZN10S3351C2_nt4v136Ev");}
void  S3351C2_nt ::v137(){vfunc_called(this, "_ZN10S3351C2_nt4v137Ev");}
void  S3351C2_nt ::v138(){vfunc_called(this, "_ZN10S3351C2_nt4v138Ev");}
void  S3351C2_nt ::v139(){vfunc_called(this, "_ZN10S3351C2_nt4v139Ev");}
void  S3351C2_nt ::v140(){vfunc_called(this, "_ZN10S3351C2_nt4v140Ev");}
void  S3351C2_nt ::v141(){vfunc_called(this, "_ZN10S3351C2_nt4v141Ev");}
void  S3351C2_nt ::v142(){vfunc_called(this, "_ZN10S3351C2_nt4v142Ev");}
void  S3351C2_nt ::v143(){vfunc_called(this, "_ZN10S3351C2_nt4v143Ev");}
void  S3351C2_nt ::v144(){vfunc_called(this, "_ZN10S3351C2_nt4v144Ev");}
void  S3351C2_nt ::v145(){vfunc_called(this, "_ZN10S3351C2_nt4v145Ev");}
void  S3351C2_nt ::v146(){vfunc_called(this, "_ZN10S3351C2_nt4v146Ev");}
void  S3351C2_nt ::v147(){vfunc_called(this, "_ZN10S3351C2_nt4v147Ev");}
void  S3351C2_nt ::v148(){vfunc_called(this, "_ZN10S3351C2_nt4v148Ev");}
void  S3351C2_nt ::v149(){vfunc_called(this, "_ZN10S3351C2_nt4v149Ev");}
void  S3351C2_nt ::v150(){vfunc_called(this, "_ZN10S3351C2_nt4v150Ev");}
void  S3351C2_nt ::v151(){vfunc_called(this, "_ZN10S3351C2_nt4v151Ev");}
void  S3351C2_nt ::v152(){vfunc_called(this, "_ZN10S3351C2_nt4v152Ev");}
void  S3351C2_nt ::v153(){vfunc_called(this, "_ZN10S3351C2_nt4v153Ev");}
void  S3351C2_nt ::v154(){vfunc_called(this, "_ZN10S3351C2_nt4v154Ev");}
void  S3351C2_nt ::v155(){vfunc_called(this, "_ZN10S3351C2_nt4v155Ev");}
void  S3351C2_nt ::v156(){vfunc_called(this, "_ZN10S3351C2_nt4v156Ev");}
void  S3351C2_nt ::v157(){vfunc_called(this, "_ZN10S3351C2_nt4v157Ev");}
void  S3351C2_nt ::v158(){vfunc_called(this, "_ZN10S3351C2_nt4v158Ev");}
void  S3351C2_nt ::v159(){vfunc_called(this, "_ZN10S3351C2_nt4v159Ev");}
void  S3351C2_nt ::v160(){vfunc_called(this, "_ZN10S3351C2_nt4v160Ev");}
void  S3351C2_nt ::v161(){vfunc_called(this, "_ZN10S3351C2_nt4v161Ev");}
void  S3351C2_nt ::v162(){vfunc_called(this, "_ZN10S3351C2_nt4v162Ev");}
void  S3351C2_nt ::v163(){vfunc_called(this, "_ZN10S3351C2_nt4v163Ev");}
void  S3351C2_nt ::v164(){vfunc_called(this, "_ZN10S3351C2_nt4v164Ev");}
void  S3351C2_nt ::v165(){vfunc_called(this, "_ZN10S3351C2_nt4v165Ev");}
void  S3351C2_nt ::v166(){vfunc_called(this, "_ZN10S3351C2_nt4v166Ev");}
void  S3351C2_nt ::v167(){vfunc_called(this, "_ZN10S3351C2_nt4v167Ev");}
void  S3351C2_nt ::v168(){vfunc_called(this, "_ZN10S3351C2_nt4v168Ev");}
void  S3351C2_nt ::v169(){vfunc_called(this, "_ZN10S3351C2_nt4v169Ev");}
void  S3351C2_nt ::v170(){vfunc_called(this, "_ZN10S3351C2_nt4v170Ev");}
void  S3351C2_nt ::v171(){vfunc_called(this, "_ZN10S3351C2_nt4v171Ev");}
void  S3351C2_nt ::v172(){vfunc_called(this, "_ZN10S3351C2_nt4v172Ev");}
void  S3351C2_nt ::v173(){vfunc_called(this, "_ZN10S3351C2_nt4v173Ev");}
void  S3351C2_nt ::v174(){vfunc_called(this, "_ZN10S3351C2_nt4v174Ev");}
void  S3351C2_nt ::v175(){vfunc_called(this, "_ZN10S3351C2_nt4v175Ev");}
void  S3351C2_nt ::v176(){vfunc_called(this, "_ZN10S3351C2_nt4v176Ev");}
void  S3351C2_nt ::v177(){vfunc_called(this, "_ZN10S3351C2_nt4v177Ev");}
void  S3351C2_nt ::v178(){vfunc_called(this, "_ZN10S3351C2_nt4v178Ev");}
void  S3351C2_nt ::v179(){vfunc_called(this, "_ZN10S3351C2_nt4v179Ev");}
void  S3351C2_nt ::v180(){vfunc_called(this, "_ZN10S3351C2_nt4v180Ev");}
void  S3351C2_nt ::v181(){vfunc_called(this, "_ZN10S3351C2_nt4v181Ev");}
void  S3351C2_nt ::v182(){vfunc_called(this, "_ZN10S3351C2_nt4v182Ev");}
void  S3351C2_nt ::v183(){vfunc_called(this, "_ZN10S3351C2_nt4v183Ev");}
void  S3351C2_nt ::v184(){vfunc_called(this, "_ZN10S3351C2_nt4v184Ev");}
void  S3351C2_nt ::v185(){vfunc_called(this, "_ZN10S3351C2_nt4v185Ev");}
void  S3351C2_nt ::v186(){vfunc_called(this, "_ZN10S3351C2_nt4v186Ev");}
void  S3351C2_nt ::v187(){vfunc_called(this, "_ZN10S3351C2_nt4v187Ev");}
void  S3351C2_nt ::v188(){vfunc_called(this, "_ZN10S3351C2_nt4v188Ev");}
void  S3351C2_nt ::v189(){vfunc_called(this, "_ZN10S3351C2_nt4v189Ev");}
void  S3351C2_nt ::v190(){vfunc_called(this, "_ZN10S3351C2_nt4v190Ev");}
void  S3351C2_nt ::v191(){vfunc_called(this, "_ZN10S3351C2_nt4v191Ev");}
void  S3351C2_nt ::v192(){vfunc_called(this, "_ZN10S3351C2_nt4v192Ev");}
void  S3351C2_nt ::v193(){vfunc_called(this, "_ZN10S3351C2_nt4v193Ev");}
void  S3351C2_nt ::v194(){vfunc_called(this, "_ZN10S3351C2_nt4v194Ev");}
void  S3351C2_nt ::v195(){vfunc_called(this, "_ZN10S3351C2_nt4v195Ev");}
void  S3351C2_nt ::v196(){vfunc_called(this, "_ZN10S3351C2_nt4v196Ev");}
void  S3351C2_nt ::v197(){vfunc_called(this, "_ZN10S3351C2_nt4v197Ev");}
void  S3351C2_nt ::v198(){vfunc_called(this, "_ZN10S3351C2_nt4v198Ev");}
void  S3351C2_nt ::v199(){vfunc_called(this, "_ZN10S3351C2_nt4v199Ev");}
void  S3351C2_nt ::v200(){vfunc_called(this, "_ZN10S3351C2_nt4v200Ev");}
void  S3351C2_nt ::v201(){vfunc_called(this, "_ZN10S3351C2_nt4v201Ev");}
void  S3351C2_nt ::v202(){vfunc_called(this, "_ZN10S3351C2_nt4v202Ev");}
void  S3351C2_nt ::v203(){vfunc_called(this, "_ZN10S3351C2_nt4v203Ev");}
void  S3351C2_nt ::v204(){vfunc_called(this, "_ZN10S3351C2_nt4v204Ev");}
void  S3351C2_nt ::v205(){vfunc_called(this, "_ZN10S3351C2_nt4v205Ev");}
void  S3351C2_nt ::v206(){vfunc_called(this, "_ZN10S3351C2_nt4v206Ev");}
void  S3351C2_nt ::v207(){vfunc_called(this, "_ZN10S3351C2_nt4v207Ev");}
void  S3351C2_nt ::v208(){vfunc_called(this, "_ZN10S3351C2_nt4v208Ev");}
void  S3351C2_nt ::v209(){vfunc_called(this, "_ZN10S3351C2_nt4v209Ev");}
void  S3351C2_nt ::v210(){vfunc_called(this, "_ZN10S3351C2_nt4v210Ev");}
void  S3351C2_nt ::v211(){vfunc_called(this, "_ZN10S3351C2_nt4v211Ev");}
void  S3351C2_nt ::v212(){vfunc_called(this, "_ZN10S3351C2_nt4v212Ev");}
S3351C2_nt ::S3351C2_nt(){ note_ctor("S3351C2_nt", this);} // tgen

//skip512 S3351C2_nt

#else // __cplusplus

extern void _ZN10S3351C2_ntC1Ev();
extern void _ZN10S3351C2_ntD1Ev();
Name_Map name_map_S3351C2_nt[] = {
  NSPAIR(_ZN10S3351C2_ntC1Ev),
  NSPAIR(_ZN10S3351C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3351C3_nt;
extern VTBL_ENTRY _ZTI10S3351C3_nt[];
extern  VTBL_ENTRY _ZTV10S3351C3_nt[];
static Base_Class bases_S3351C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3351C3_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 _ZTI10S3351C2_nt[];
extern void _ZN10S3351C2_ntD1Ev();
extern void _ZN10S3351C2_ntD0Ev();
extern void _ZN10S3351C3_nt2v6Ev();
extern void _ZN10S3351C3_nt2v7Ev();
extern void _ZN10S3351C3_nt2v8Ev();
extern void _ZN10S3351C3_nt2v9Ev();
extern void _ZN10S3351C3_nt3v10Ev();
extern void _ZN10S3351C3_nt3v11Ev();
extern void _ZN10S3351C3_nt3v12Ev();
extern void _ZN10S3351C3_nt3v13Ev();
extern void _ZN10S3351C3_nt3v14Ev();
extern void _ZN10S3351C3_nt3v15Ev();
extern void _ZN10S3351C3_nt3v16Ev();
extern void _ZN10S3351C3_nt3v17Ev();
extern void _ZN10S3351C3_nt3v18Ev();
extern void _ZN10S3351C3_nt3v19Ev();
extern void _ZN10S3351C3_nt3v20Ev();
extern void _ZN10S3351C3_nt3v21Ev();
extern void _ZN10S3351C3_nt3v22Ev();
extern void _ZN10S3351C3_nt3v23Ev();
extern void _ZN10S3351C3_nt3v24Ev();
extern void _ZN10S3351C3_nt3v25Ev();
extern void _ZN10S3351C3_nt3v26Ev();
extern void _ZN10S3351C3_nt3v27Ev();
extern void _ZN10S3351C3_nt3v28Ev();
extern void _ZN10S3351C3_nt3v29Ev();
extern void _ZN10S3351C3_nt3v30Ev();
extern void _ZN10S3351C3_nt3v31Ev();
extern void _ZN10S3351C3_nt3v32Ev();
extern void _ZN10S3351C3_nt3v33Ev();
extern void _ZN10S3351C3_nt3v34Ev();
extern void _ZN10S3351C3_nt3v35Ev();
extern void _ZN10S3351C3_nt3v36Ev();
extern void _ZN10S3351C3_nt3v37Ev();
extern void _ZN10S3351C3_nt3v38Ev();
extern void _ZN10S3351C3_nt3v39Ev();
extern void _ZN10S3351C3_nt3v40Ev();
extern void _ZN10S3351C3_nt3v41Ev();
extern void _ZN10S3351C3_nt3v42Ev();
extern void _ZN10S3351C3_nt3v43Ev();
extern void _ZN10S3351C3_nt3v44Ev();
extern void _ZN10S3351C3_nt3v45Ev();
extern void _ZN10S3351C3_nt3v46Ev();
extern void _ZN10S3351C3_nt3v47Ev();
extern void _ZN10S3351C3_nt3v48Ev();
extern void _ZN10S3351C3_nt3v49Ev();
extern void _ZN10S3351C3_nt3v50Ev();
extern void _ZN10S3351C3_nt3v51Ev();
extern void _ZN10S3351C3_nt3v52Ev();
extern void _ZN10S3351C3_nt3v53Ev();
extern void _ZN10S3351C3_nt3v54Ev();
extern void _ZN10S3351C3_nt3v55Ev();
extern void _ZN10S3351C3_nt3v56Ev();
extern void _ZN10S3351C3_nt3v57Ev();
extern void _ZN10S3351C3_nt3v58Ev();
extern void _ZN10S3351C3_nt3v59Ev();
extern void _ZN10S3351C3_nt3v60Ev();
extern void _ZN10S3351C3_nt3v61Ev();
extern void _ZN10S3351C3_nt3v62Ev();
extern void _ZN10S3351C3_nt3v63Ev();
extern void _ZN10S3351C3_nt3v64Ev();
extern void _ZN10S3351C3_nt3v65Ev();
extern void _ZN10S3351C3_nt3v66Ev();
extern void _ZN10S3351C3_nt3v67Ev();
extern void _ZN10S3351C3_nt3v68Ev();
extern void _ZN10S3351C3_nt3v69Ev();
extern void _ZN10S3351C2_nt3v70Ev();
extern void _ZN10S3351C2_nt3v71Ev();
extern void _ZN10S3351C2_nt3v72Ev();
extern void _ZN10S3351C2_nt3v73Ev();
extern void _ZN10S3351C2_nt3v74Ev();
extern void _ZN10S3351C2_nt3v75Ev();
extern void _ZN10S3351C2_nt3v76Ev();
extern void _ZN10S3351C2_nt3v77Ev();
extern void _ZN10S3351C2_nt3v78Ev();
extern void _ZN10S3351C2_nt3v79Ev();
extern void _ZN10S3351C2_nt3v80Ev();
extern void _ZN10S3351C2_nt3v81Ev();
extern void _ZN10S3351C2_nt3v82Ev();
extern void _ZN10S3351C2_nt3v83Ev();
extern void _ZN10S3351C2_nt3v84Ev();
extern void _ZN10S3351C2_nt3v85Ev();
extern void _ZN10S3351C2_nt3v86Ev();
extern void _ZN10S3351C2_nt3v87Ev();
extern void _ZN10S3351C2_nt3v88Ev();
extern void _ZN10S3351C2_nt3v89Ev();
extern void _ZN10S3351C2_nt3v90Ev();
extern void _ZN10S3351C2_nt3v91Ev();
extern void _ZN10S3351C2_nt3v92Ev();
extern void _ZN10S3351C2_nt3v93Ev();
extern void _ZN10S3351C2_nt3v94Ev();
extern void _ZN10S3351C2_nt3v95Ev();
extern void _ZN10S3351C2_nt3v96Ev();
extern void _ZN10S3351C2_nt3v97Ev();
extern void _ZN10S3351C2_nt3v98Ev();
extern void _ZN10S3351C2_nt3v99Ev();
extern void _ZN10S3351C2_nt4v100Ev();
extern void _ZN10S3351C2_nt4v101Ev();
extern void _ZN10S3351C2_nt4v102Ev();
extern void _ZN10S3351C2_nt4v103Ev();
extern void _ZN10S3351C2_nt4v104Ev();
extern void _ZN10S3351C2_nt4v105Ev();
extern void _ZN10S3351C2_nt4v106Ev();
extern void _ZN10S3351C2_nt4v107Ev();
extern void _ZN10S3351C2_nt4v108Ev();
extern void _ZN10S3351C2_nt4v109Ev();
extern void _ZN10S3351C2_nt4v110Ev();
extern void _ZN10S3351C2_nt4v111Ev();
extern void _ZN10S3351C2_nt4v112Ev();
extern void _ZN10S3351C2_nt4v113Ev();
extern void _ZN10S3351C2_nt4v114Ev();
extern void _ZN10S3351C2_nt4v115Ev();
extern void _ZN10S3351C2_nt4v116Ev();
extern void _ZN10S3351C2_nt4v117Ev();
extern void _ZN10S3351C2_nt4v118Ev();
extern void _ZN10S3351C2_nt4v119Ev();
extern void _ZN10S3351C2_nt4v120Ev();
extern void _ZN10S3351C2_nt4v121Ev();
extern void _ZN10S3351C2_nt4v122Ev();
extern void _ZN10S3351C2_nt4v123Ev();
extern void _ZN10S3351C2_nt4v124Ev();
extern void _ZN10S3351C2_nt4v125Ev();
extern void _ZN10S3351C2_nt4v126Ev();
extern void _ZN10S3351C2_nt4v127Ev();
extern void _ZN10S3351C2_nt4v128Ev();
extern void _ZN10S3351C2_nt4v129Ev();
extern void _ZN10S3351C2_nt4v130Ev();
extern void _ZN10S3351C2_nt4v131Ev();
extern void _ZN10S3351C2_nt4v132Ev();
extern void _ZN10S3351C2_nt4v133Ev();
extern void _ZN10S3351C2_nt4v134Ev();
extern void _ZN10S3351C2_nt4v135Ev();
extern void _ZN10S3351C2_nt4v136Ev();
extern void _ZN10S3351C2_nt4v137Ev();
extern void _ZN10S3351C2_nt4v138Ev();
extern void _ZN10S3351C2_nt4v139Ev();
extern void _ZN10S3351C2_nt4v140Ev();
extern void _ZN10S3351C2_nt4v141Ev();
extern void _ZN10S3351C2_nt4v142Ev();
extern void _ZN10S3351C2_nt4v143Ev();
extern void _ZN10S3351C2_nt4v144Ev();
extern void _ZN10S3351C2_nt4v145Ev();
extern void _ZN10S3351C2_nt4v146Ev();
extern void _ZN10S3351C2_nt4v147Ev();
extern void _ZN10S3351C2_nt4v148Ev();
extern void _ZN10S3351C2_nt4v149Ev();
extern void _ZN10S3351C2_nt4v150Ev();
extern void _ZN10S3351C2_nt4v151Ev();
extern void _ZN10S3351C2_nt4v152Ev();
extern void _ZN10S3351C2_nt4v153Ev();
extern void _ZN10S3351C2_nt4v154Ev();
extern void _ZN10S3351C2_nt4v155Ev();
extern void _ZN10S3351C2_nt4v156Ev();
extern void _ZN10S3351C2_nt4v157Ev();
extern void _ZN10S3351C2_nt4v158Ev();
extern void _ZN10S3351C2_nt4v159Ev();
extern void _ZN10S3351C2_nt4v160Ev();
extern void _ZN10S3351C2_nt4v161Ev();
extern void _ZN10S3351C2_nt4v162Ev();
extern void _ZN10S3351C2_nt4v163Ev();
extern void _ZN10S3351C2_nt4v164Ev();
extern void _ZN10S3351C2_nt4v165Ev();
extern void _ZN10S3351C2_nt4v166Ev();
extern void _ZN10S3351C2_nt4v167Ev();
extern void _ZN10S3351C2_nt4v168Ev();
extern void _ZN10S3351C2_nt4v169Ev();
extern void _ZN10S3351C2_nt4v170Ev();
extern void _ZN10S3351C2_nt4v171Ev();
extern void _ZN10S3351C2_nt4v172Ev();
extern void _ZN10S3351C2_nt4v173Ev();
extern void _ZN10S3351C2_nt4v174Ev();
extern void _ZN10S3351C2_nt4v175Ev();
extern void _ZN10S3351C2_nt4v176Ev();
extern void _ZN10S3351C2_nt4v177Ev();
extern void _ZN10S3351C2_nt4v178Ev();
extern void _ZN10S3351C2_nt4v179Ev();
extern void _ZN10S3351C2_nt4v180Ev();
extern void _ZN10S3351C2_nt4v181Ev();
extern void _ZN10S3351C2_nt4v182Ev();
extern void _ZN10S3351C2_nt4v183Ev();
extern void _ZN10S3351C2_nt4v184Ev();
extern void _ZN10S3351C2_nt4v185Ev();
extern void _ZN10S3351C2_nt4v186Ev();
extern void _ZN10S3351C2_nt4v187Ev();
extern void _ZN10S3351C2_nt4v188Ev();
extern void _ZN10S3351C2_nt4v189Ev();
extern void _ZN10S3351C2_nt4v190Ev();
extern void _ZN10S3351C2_nt4v191Ev();
extern void _ZN10S3351C2_nt4v192Ev();
extern void _ZN10S3351C2_nt4v193Ev();
extern void _ZN10S3351C2_nt4v194Ev();
extern void _ZN10S3351C2_nt4v195Ev();
extern void _ZN10S3351C2_nt4v196Ev();
extern void _ZN10S3351C2_nt4v197Ev();
extern void _ZN10S3351C2_nt4v198Ev();
extern void _ZN10S3351C2_nt4v199Ev();
extern void _ZN10S3351C2_nt4v200Ev();
extern void _ZN10S3351C2_nt4v201Ev();
extern void _ZN10S3351C2_nt4v202Ev();
extern void _ZN10S3351C2_nt4v203Ev();
extern void _ZN10S3351C2_nt4v204Ev();
extern void _ZN10S3351C2_nt4v205Ev();
extern void _ZN10S3351C2_nt4v206Ev();
extern void _ZN10S3351C2_nt4v207Ev();
extern void _ZN10S3351C2_nt4v208Ev();
extern void _ZN10S3351C2_nt4v209Ev();
extern void _ZN10S3351C2_nt4v210Ev();
extern void _ZN10S3351C2_nt4v211Ev();
extern void _ZN10S3351C2_nt4v212Ev();
static  VTBL_ENTRY vtc_S3351C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S3351C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S3351C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v211Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v212Ev,
};
extern VTBL_ENTRY _ZTI10S3351C2_nt[];
VTBL_ENTRY *P__ZTI10S3351C2_nt = _ZTI10S3351C2_nt; 
extern  VTBL_ENTRY _ZTV10S3351C2_nt[];
Class_Descriptor cd_S3351C2_nt = {  "S3351C2_nt", // class name
  bases_S3351C2_nt, 1,
  &(vtc_S3351C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(568,436), // object size
  NSPAIRA(_ZTI10S3351C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S3351C2_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  S3351C23  : S3351C7_nt {
};
//SIG(-1 S3351C23) C1{ BC2{ m Fp Fi[2]}}



static void Test_S3351C23()
{
  extern Class_Descriptor cd_S3351C23;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3351C23, buf);
    S3351C23 &lv = *(new (buf) S3351C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3351C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3351C23)");
    check_base_class_offset(lv, (S3351C7_nt*), 0, "S3351C23");
    test_class_info(&lv, &cd_S3351C23);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3351C23(Test_S3351C23, "S3351C23", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3351C7_nt;
static Base_Class bases_S3351C23[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3351C7_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_S3351C23 = {  "S3351C23", // class name
  bases_S3351C23, 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  S3351C22_nt  {
  ::S3351C23 s3351c22f0;
  void *s3351c22f1;
  int s3351c22f2;
  void  mf3351c22(); // _ZN11S3351C22_nt9mf3351c22Ev
};
//SIG(-1 S3351C22_nt) C1{ m FC2{ BC3{ m Fp Fi[2]}} Fp Fi}


void  S3351C22_nt ::mf3351c22(){}

//skip512 S3351C22_nt

#else // __cplusplus

Class_Descriptor cd_S3351C22_nt = {  "S3351C22_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  S3351C21_nt  : S3351C22_nt {
};
//SIG(-1 S3351C21_nt) C1{ BC2{ m FC3{ BC4{ m Fp Fi[2]}} Fp Fi}}



//skip512 S3351C21_nt

#else // __cplusplus

extern Class_Descriptor cd_S3351C22_nt;
static Base_Class bases_S3351C21_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3351C22_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  S3351C25  : S3351C7_nt {
};
//SIG(-1 S3351C25) C1{ BC2{ m Fp Fi[2]}}



static void Test_S3351C25()
{
  extern Class_Descriptor cd_S3351C25;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3351C25, buf);
    S3351C25 &lv = *(new (buf) S3351C25());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3351C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3351C25)");
    check_base_class_offset(lv, (S3351C7_nt*), 0, "S3351C25");
    test_class_info(&lv, &cd_S3351C25);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3351C25(Test_S3351C25, "S3351C25", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3351C7_nt;
static Base_Class bases_S3351C25[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3351C7_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_S3351C25 = {  "S3351C25", // class name
  bases_S3351C25, 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  S3351C24  : S3351C25 {
};
//SIG(-1 S3351C24) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S3351C24()
{
  extern Class_Descriptor cd_S3351C24;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3351C24, buf);
    S3351C24 &lv = *(new (buf) S3351C24());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3351C24)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3351C24)");
    check_base_class_offset(lv, (S3351C7_nt*)(S3351C25*), 0, "S3351C24");
    check_base_class_offset(lv, (S3351C25*), 0, "S3351C24");
    test_class_info(&lv, &cd_S3351C24);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3351C24(Test_S3351C24, "S3351C24", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3351C7_nt;
extern Class_Descriptor cd_S3351C25;
static Base_Class bases_S3351C24[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3351C7_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_S3351C25,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3351C24 = {  "S3351C24", // class name
  bases_S3351C24, 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  S3351C29  : S3351C7_nt {
};
//SIG(-1 S3351C29) C1{ BC2{ m Fp Fi[2]}}



static void Test_S3351C29()
{
  extern Class_Descriptor cd_S3351C29;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3351C29, buf);
    S3351C29 &lv = *(new (buf) S3351C29());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3351C29)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3351C29)");
    check_base_class_offset(lv, (S3351C7_nt*), 0, "S3351C29");
    test_class_info(&lv, &cd_S3351C29);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3351C29(Test_S3351C29, "S3351C29", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3351C7_nt;
static Base_Class bases_S3351C29[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3351C7_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_S3351C29 = {  "S3351C29", // class name
  bases_S3351C29, 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  S3351C28  : S3351C29 {
};
//SIG(-1 S3351C28) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S3351C28()
{
  extern Class_Descriptor cd_S3351C28;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S3351C28, buf);
    S3351C28 &lv = *(new (buf) S3351C28());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S3351C28)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3351C28)");
    check_base_class_offset(lv, (S3351C7_nt*)(S3351C29*), 0, "S3351C28");
    check_base_class_offset(lv, (S3351C29*), 0, "S3351C28");
    test_class_info(&lv, &cd_S3351C28);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3351C28(Test_S3351C28, "S3351C28", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3351C7_nt;
extern Class_Descriptor cd_S3351C29;
static Base_Class bases_S3351C28[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3351C7_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_S3351C29,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3351C28 = {  "S3351C28", // class name
  bases_S3351C28, 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  S3351C1  : S3351C2_nt {
  void *s3351c1f0;
  int s3351c1f1;
  ::S3351C21_nt s3351c1f2;
  void *s3351c1f3;
  int s3351c1f4[2];
  ::S3351C24 s3351c1f5;
  ::S3351C24 s3351c1f6;
  ::S3351C24 s3351c1f7;
  ::S3351C28 s3351c1f8;
  ::S3351C21_nt s3351c1f9;
  virtual  ~S3351C1(); // _ZN7S3351C1D1Ev
  virtual void  v1(); // _ZN7S3351C12v1Ev
  virtual void  v2(); // _ZN7S3351C12v2Ev
  virtual void  v3(); // _ZN7S3351C12v3Ev
  virtual void  v4(); // _ZN7S3351C12v4Ev
  virtual void  v5(); // _ZN7S3351C12v5Ev
  S3351C1(); // tgen
};
//SIG(1 S3351C1) 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 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 v211 v212 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 v4 v5 Fp Fi FC14{ BC15{ m FC16{ BC7} Fp Fi}} Fp Fi[2] FC17{ BC18{ BC7}} FC17 FC17 FC19{ BC20{ BC7}} FC14}


 S3351C1 ::~S3351C1(){ note_dtor("S3351C1", this);}
void  S3351C1 ::v1(){vfunc_called(this, "_ZN7S3351C12v1Ev");}
void  S3351C1 ::v2(){vfunc_called(this, "_ZN7S3351C12v2Ev");}
void  S3351C1 ::v3(){vfunc_called(this, "_ZN7S3351C12v3Ev");}
void  S3351C1 ::v4(){vfunc_called(this, "_ZN7S3351C12v4Ev");}
void  S3351C1 ::v5(){vfunc_called(this, "_ZN7S3351C12v5Ev");}
S3351C1 ::S3351C1(){ note_ctor("S3351C1", this);} // tgen

static void Test_S3351C1()
{
  extern Class_Descriptor cd_S3351C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(92,137)];
    init_test(&cd_S3351C1, buf);
    S3351C1 *dp, &lv = *(dp=new (buf) S3351C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(728,544), "sizeof(S3351C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3351C1)");
    check_base_class_offset(lv, (S3351C3_nt*)(S3351C2_nt*), 0, "S3351C1");
    check_base_class_offset(lv, (S3351C2_nt*), 0, "S3351C1");
    check_field_offset(lv, s3351c1f0, ABISELECT(568,436), "S3351C1.s3351c1f0");
    check_field_offset(lv, s3351c1f1, ABISELECT(576,440), "S3351C1.s3351c1f1");
    check_field_offset(lv, s3351c1f2, ABISELECT(584,444), "S3351C1.s3351c1f2");
    check_field_offset(lv, s3351c1f3, ABISELECT(616,464), "S3351C1.s3351c1f3");
    check_field_offset(lv, s3351c1f4, ABISELECT(624,468), "S3351C1.s3351c1f4");
    check_field_offset(lv, s3351c1f5, ABISELECT(632,476), "S3351C1.s3351c1f5");
    check_field_offset(lv, s3351c1f6, ABISELECT(648,488), "S3351C1.s3351c1f6");
    check_field_offset(lv, s3351c1f7, ABISELECT(664,500), "S3351C1.s3351c1f7");
    check_field_offset(lv, s3351c1f8, ABISELECT(680,512), "S3351C1.s3351c1f8");
    check_field_offset(lv, s3351c1f9, ABISELECT(696,524), "S3351C1.s3351c1f9");
    test_class_info(&lv, &cd_S3351C1);
    dp->~S3351C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3351C1(Test_S3351C1, "S3351C1", ABISELECT(728,544));

#else // __cplusplus

extern void _ZN7S3351C1C1Ev();
extern void _ZN7S3351C1D1Ev();
Name_Map name_map_S3351C1[] = {
  NSPAIR(_ZN7S3351C1C1Ev),
  NSPAIR(_ZN7S3351C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3351C3_nt;
extern VTBL_ENTRY _ZTI10S3351C3_nt[];
extern  VTBL_ENTRY _ZTV10S3351C3_nt[];
extern Class_Descriptor cd_S3351C2_nt;
extern VTBL_ENTRY _ZTI10S3351C2_nt[];
extern  VTBL_ENTRY _ZTV10S3351C2_nt[];
static Base_Class bases_S3351C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3351C3_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_S3351C2_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 _ZTI7S3351C1[];
extern void _ZN7S3351C1D1Ev();
extern void _ZN7S3351C1D0Ev();
extern void _ZN10S3351C3_nt2v6Ev();
extern void _ZN10S3351C3_nt2v7Ev();
extern void _ZN10S3351C3_nt2v8Ev();
extern void _ZN10S3351C3_nt2v9Ev();
extern void _ZN10S3351C3_nt3v10Ev();
extern void _ZN10S3351C3_nt3v11Ev();
extern void _ZN10S3351C3_nt3v12Ev();
extern void _ZN10S3351C3_nt3v13Ev();
extern void _ZN10S3351C3_nt3v14Ev();
extern void _ZN10S3351C3_nt3v15Ev();
extern void _ZN10S3351C3_nt3v16Ev();
extern void _ZN10S3351C3_nt3v17Ev();
extern void _ZN10S3351C3_nt3v18Ev();
extern void _ZN10S3351C3_nt3v19Ev();
extern void _ZN10S3351C3_nt3v20Ev();
extern void _ZN10S3351C3_nt3v21Ev();
extern void _ZN10S3351C3_nt3v22Ev();
extern void _ZN10S3351C3_nt3v23Ev();
extern void _ZN10S3351C3_nt3v24Ev();
extern void _ZN10S3351C3_nt3v25Ev();
extern void _ZN10S3351C3_nt3v26Ev();
extern void _ZN10S3351C3_nt3v27Ev();
extern void _ZN10S3351C3_nt3v28Ev();
extern void _ZN10S3351C3_nt3v29Ev();
extern void _ZN10S3351C3_nt3v30Ev();
extern void _ZN10S3351C3_nt3v31Ev();
extern void _ZN10S3351C3_nt3v32Ev();
extern void _ZN10S3351C3_nt3v33Ev();
extern void _ZN10S3351C3_nt3v34Ev();
extern void _ZN10S3351C3_nt3v35Ev();
extern void _ZN10S3351C3_nt3v36Ev();
extern void _ZN10S3351C3_nt3v37Ev();
extern void _ZN10S3351C3_nt3v38Ev();
extern void _ZN10S3351C3_nt3v39Ev();
extern void _ZN10S3351C3_nt3v40Ev();
extern void _ZN10S3351C3_nt3v41Ev();
extern void _ZN10S3351C3_nt3v42Ev();
extern void _ZN10S3351C3_nt3v43Ev();
extern void _ZN10S3351C3_nt3v44Ev();
extern void _ZN10S3351C3_nt3v45Ev();
extern void _ZN10S3351C3_nt3v46Ev();
extern void _ZN10S3351C3_nt3v47Ev();
extern void _ZN10S3351C3_nt3v48Ev();
extern void _ZN10S3351C3_nt3v49Ev();
extern void _ZN10S3351C3_nt3v50Ev();
extern void _ZN10S3351C3_nt3v51Ev();
extern void _ZN10S3351C3_nt3v52Ev();
extern void _ZN10S3351C3_nt3v53Ev();
extern void _ZN10S3351C3_nt3v54Ev();
extern void _ZN10S3351C3_nt3v55Ev();
extern void _ZN10S3351C3_nt3v56Ev();
extern void _ZN10S3351C3_nt3v57Ev();
extern void _ZN10S3351C3_nt3v58Ev();
extern void _ZN10S3351C3_nt3v59Ev();
extern void _ZN10S3351C3_nt3v60Ev();
extern void _ZN10S3351C3_nt3v61Ev();
extern void _ZN10S3351C3_nt3v62Ev();
extern void _ZN10S3351C3_nt3v63Ev();
extern void _ZN10S3351C3_nt3v64Ev();
extern void _ZN10S3351C3_nt3v65Ev();
extern void _ZN10S3351C3_nt3v66Ev();
extern void _ZN10S3351C3_nt3v67Ev();
extern void _ZN10S3351C3_nt3v68Ev();
extern void _ZN10S3351C3_nt3v69Ev();
extern void _ZN10S3351C2_nt3v70Ev();
extern void _ZN10S3351C2_nt3v71Ev();
extern void _ZN10S3351C2_nt3v72Ev();
extern void _ZN10S3351C2_nt3v73Ev();
extern void _ZN10S3351C2_nt3v74Ev();
extern void _ZN10S3351C2_nt3v75Ev();
extern void _ZN10S3351C2_nt3v76Ev();
extern void _ZN10S3351C2_nt3v77Ev();
extern void _ZN10S3351C2_nt3v78Ev();
extern void _ZN10S3351C2_nt3v79Ev();
extern void _ZN10S3351C2_nt3v80Ev();
extern void _ZN10S3351C2_nt3v81Ev();
extern void _ZN10S3351C2_nt3v82Ev();
extern void _ZN10S3351C2_nt3v83Ev();
extern void _ZN10S3351C2_nt3v84Ev();
extern void _ZN10S3351C2_nt3v85Ev();
extern void _ZN10S3351C2_nt3v86Ev();
extern void _ZN10S3351C2_nt3v87Ev();
extern void _ZN10S3351C2_nt3v88Ev();
extern void _ZN10S3351C2_nt3v89Ev();
extern void _ZN10S3351C2_nt3v90Ev();
extern void _ZN10S3351C2_nt3v91Ev();
extern void _ZN10S3351C2_nt3v92Ev();
extern void _ZN10S3351C2_nt3v93Ev();
extern void _ZN10S3351C2_nt3v94Ev();
extern void _ZN10S3351C2_nt3v95Ev();
extern void _ZN10S3351C2_nt3v96Ev();
extern void _ZN10S3351C2_nt3v97Ev();
extern void _ZN10S3351C2_nt3v98Ev();
extern void _ZN10S3351C2_nt3v99Ev();
extern void _ZN10S3351C2_nt4v100Ev();
extern void _ZN10S3351C2_nt4v101Ev();
extern void _ZN10S3351C2_nt4v102Ev();
extern void _ZN10S3351C2_nt4v103Ev();
extern void _ZN10S3351C2_nt4v104Ev();
extern void _ZN10S3351C2_nt4v105Ev();
extern void _ZN10S3351C2_nt4v106Ev();
extern void _ZN10S3351C2_nt4v107Ev();
extern void _ZN10S3351C2_nt4v108Ev();
extern void _ZN10S3351C2_nt4v109Ev();
extern void _ZN10S3351C2_nt4v110Ev();
extern void _ZN10S3351C2_nt4v111Ev();
extern void _ZN10S3351C2_nt4v112Ev();
extern void _ZN10S3351C2_nt4v113Ev();
extern void _ZN10S3351C2_nt4v114Ev();
extern void _ZN10S3351C2_nt4v115Ev();
extern void _ZN10S3351C2_nt4v116Ev();
extern void _ZN10S3351C2_nt4v117Ev();
extern void _ZN10S3351C2_nt4v118Ev();
extern void _ZN10S3351C2_nt4v119Ev();
extern void _ZN10S3351C2_nt4v120Ev();
extern void _ZN10S3351C2_nt4v121Ev();
extern void _ZN10S3351C2_nt4v122Ev();
extern void _ZN10S3351C2_nt4v123Ev();
extern void _ZN10S3351C2_nt4v124Ev();
extern void _ZN10S3351C2_nt4v125Ev();
extern void _ZN10S3351C2_nt4v126Ev();
extern void _ZN10S3351C2_nt4v127Ev();
extern void _ZN10S3351C2_nt4v128Ev();
extern void _ZN10S3351C2_nt4v129Ev();
extern void _ZN10S3351C2_nt4v130Ev();
extern void _ZN10S3351C2_nt4v131Ev();
extern void _ZN10S3351C2_nt4v132Ev();
extern void _ZN10S3351C2_nt4v133Ev();
extern void _ZN10S3351C2_nt4v134Ev();
extern void _ZN10S3351C2_nt4v135Ev();
extern void _ZN10S3351C2_nt4v136Ev();
extern void _ZN10S3351C2_nt4v137Ev();
extern void _ZN10S3351C2_nt4v138Ev();
extern void _ZN10S3351C2_nt4v139Ev();
extern void _ZN10S3351C2_nt4v140Ev();
extern void _ZN10S3351C2_nt4v141Ev();
extern void _ZN10S3351C2_nt4v142Ev();
extern void _ZN10S3351C2_nt4v143Ev();
extern void _ZN10S3351C2_nt4v144Ev();
extern void _ZN10S3351C2_nt4v145Ev();
extern void _ZN10S3351C2_nt4v146Ev();
extern void _ZN10S3351C2_nt4v147Ev();
extern void _ZN10S3351C2_nt4v148Ev();
extern void _ZN10S3351C2_nt4v149Ev();
extern void _ZN10S3351C2_nt4v150Ev();
extern void _ZN10S3351C2_nt4v151Ev();
extern void _ZN10S3351C2_nt4v152Ev();
extern void _ZN10S3351C2_nt4v153Ev();
extern void _ZN10S3351C2_nt4v154Ev();
extern void _ZN10S3351C2_nt4v155Ev();
extern void _ZN10S3351C2_nt4v156Ev();
extern void _ZN10S3351C2_nt4v157Ev();
extern void _ZN10S3351C2_nt4v158Ev();
extern void _ZN10S3351C2_nt4v159Ev();
extern void _ZN10S3351C2_nt4v160Ev();
extern void _ZN10S3351C2_nt4v161Ev();
extern void _ZN10S3351C2_nt4v162Ev();
extern void _ZN10S3351C2_nt4v163Ev();
extern void _ZN10S3351C2_nt4v164Ev();
extern void _ZN10S3351C2_nt4v165Ev();
extern void _ZN10S3351C2_nt4v166Ev();
extern void _ZN10S3351C2_nt4v167Ev();
extern void _ZN10S3351C2_nt4v168Ev();
extern void _ZN10S3351C2_nt4v169Ev();
extern void _ZN10S3351C2_nt4v170Ev();
extern void _ZN10S3351C2_nt4v171Ev();
extern void _ZN10S3351C2_nt4v172Ev();
extern void _ZN10S3351C2_nt4v173Ev();
extern void _ZN10S3351C2_nt4v174Ev();
extern void _ZN10S3351C2_nt4v175Ev();
extern void _ZN10S3351C2_nt4v176Ev();
extern void _ZN10S3351C2_nt4v177Ev();
extern void _ZN10S3351C2_nt4v178Ev();
extern void _ZN10S3351C2_nt4v179Ev();
extern void _ZN10S3351C2_nt4v180Ev();
extern void _ZN10S3351C2_nt4v181Ev();
extern void _ZN10S3351C2_nt4v182Ev();
extern void _ZN10S3351C2_nt4v183Ev();
extern void _ZN10S3351C2_nt4v184Ev();
extern void _ZN10S3351C2_nt4v185Ev();
extern void _ZN10S3351C2_nt4v186Ev();
extern void _ZN10S3351C2_nt4v187Ev();
extern void _ZN10S3351C2_nt4v188Ev();
extern void _ZN10S3351C2_nt4v189Ev();
extern void _ZN10S3351C2_nt4v190Ev();
extern void _ZN10S3351C2_nt4v191Ev();
extern void _ZN10S3351C2_nt4v192Ev();
extern void _ZN10S3351C2_nt4v193Ev();
extern void _ZN10S3351C2_nt4v194Ev();
extern void _ZN10S3351C2_nt4v195Ev();
extern void _ZN10S3351C2_nt4v196Ev();
extern void _ZN10S3351C2_nt4v197Ev();
extern void _ZN10S3351C2_nt4v198Ev();
extern void _ZN10S3351C2_nt4v199Ev();
extern void _ZN10S3351C2_nt4v200Ev();
extern void _ZN10S3351C2_nt4v201Ev();
extern void _ZN10S3351C2_nt4v202Ev();
extern void _ZN10S3351C2_nt4v203Ev();
extern void _ZN10S3351C2_nt4v204Ev();
extern void _ZN10S3351C2_nt4v205Ev();
extern void _ZN10S3351C2_nt4v206Ev();
extern void _ZN10S3351C2_nt4v207Ev();
extern void _ZN10S3351C2_nt4v208Ev();
extern void _ZN10S3351C2_nt4v209Ev();
extern void _ZN10S3351C2_nt4v210Ev();
extern void _ZN10S3351C2_nt4v211Ev();
extern void _ZN10S3351C2_nt4v212Ev();
extern void _ZN7S3351C12v1Ev();
extern void _ZN7S3351C12v2Ev();
extern void _ZN7S3351C12v3Ev();
extern void _ZN7S3351C12v4Ev();
extern void _ZN7S3351C12v5Ev();
static  VTBL_ENTRY vtc_S3351C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3351C1[0]),
  (VTBL_ENTRY)&_ZN7S3351C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3351C1D0Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S3351C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v120Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v121Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v122Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v123Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v124Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v125Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v126Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v127Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v128Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v129Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v130Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v131Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v132Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v133Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v134Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v135Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v136Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v137Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v138Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v139Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v140Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v141Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v142Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v143Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v144Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v145Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v146Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v147Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v148Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v149Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v150Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v151Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v152Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v153Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v154Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v155Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v156Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v157Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v158Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v159Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v160Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v161Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v162Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v163Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v164Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v165Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v166Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v167Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v168Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v169Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v170Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v171Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v172Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v173Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v174Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v175Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v176Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v177Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v178Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v179Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v180Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v181Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v182Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v183Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v184Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v185Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v186Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v187Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v188Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v189Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v190Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v191Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v192Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v193Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v194Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v195Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v196Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v197Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v198Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v199Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v200Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v201Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v202Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v203Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v204Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v205Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v206Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v207Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v208Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v209Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v210Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v211Ev,
  (VTBL_ENTRY)&_ZN10S3351C2_nt4v212Ev,
  (VTBL_ENTRY)&_ZN7S3351C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3351C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3351C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3351C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3351C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S3351C1[];
extern  VTBL_ENTRY _ZTV7S3351C1[];
Class_Descriptor cd_S3351C1 = {  "S3351C1", // class name
  bases_S3351C1, 2,
  &(vtc_S3351C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(728,544), // object size
  NSPAIRA(_ZTI7S3351C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3351C1),216, //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  S2264C7_nt  {
  void  mf2264c7(); // _ZN10S2264C7_nt8mf2264c7Ev
};
//SIG(-1 S2264C7_nt) C1{ m}


void  S2264C7_nt ::mf2264c7(){}

//skip512 S2264C7_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S2264C7_nt[];
VTBL_ENTRY *P__ZTI10S2264C7_nt = _ZTI10S2264C7_nt; 
Class_Descriptor cd_S2264C7_nt = {  "S2264C7_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI10S2264C7_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  S2264C6_nt  {
  void *s2264c6f0;
  int s2264c6f1;
  ::S2264C7_nt s2264c6f2;
  ::S2264C7_nt s2264c6f3;
  void  mf2264c6(); // _ZN10S2264C6_nt8mf2264c6Ev
};
//SIG(-1 S2264C6_nt) C1{ m Fp Fi FC2{ m} FC2}


void  S2264C6_nt ::mf2264c6(){}

//skip512 S2264C6_nt

#else // __cplusplus

Class_Descriptor cd_S2264C6_nt = {  "S2264C6_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  S2264C5_nt  : S2264C6_nt {
};
//SIG(-1 S2264C5_nt) C1{ BC2{ m Fp Fi FC3{ m} FC3}}



//skip512 S2264C5_nt

#else // __cplusplus

extern Class_Descriptor cd_S2264C6_nt;
static Base_Class bases_S2264C5_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C6_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  S2264C4_nt  {
  void *s2264c4f0;
  int s2264c4f1;
  ::S2264C5_nt s2264c4f2;
  ::S2264C5_nt s2264c4f3;
  int s2264c4f4;
  virtual  ~S2264C4_nt(); // _ZN10S2264C4_ntD1Ev
  virtual void  v4(); // _ZN10S2264C4_nt2v4Ev
  virtual void  v5(); // _ZN10S2264C4_nt2v5Ev
  virtual void  v6(); // _ZN10S2264C4_nt2v6Ev
  virtual void  v7(); // _ZN10S2264C4_nt2v7Ev
  virtual void  v8(); // _ZN10S2264C4_nt2v8Ev
  virtual void  v9(); // _ZN10S2264C4_nt2v9Ev
  virtual void  v10(); // _ZN10S2264C4_nt3v10Ev
  virtual void  v11(); // _ZN10S2264C4_nt3v11Ev
  virtual void  v12(); // _ZN10S2264C4_nt3v12Ev
  virtual void  v13(); // _ZN10S2264C4_nt3v13Ev
  virtual void  v14(); // _ZN10S2264C4_nt3v14Ev
  virtual void  v15(); // _ZN10S2264C4_nt3v15Ev
  virtual void  v16(); // _ZN10S2264C4_nt3v16Ev
  virtual void  v17(); // _ZN10S2264C4_nt3v17Ev
  virtual void  v18(); // _ZN10S2264C4_nt3v18Ev
  virtual void  v19(); // _ZN10S2264C4_nt3v19Ev
  virtual void  v20(); // _ZN10S2264C4_nt3v20Ev
  virtual void  v21(); // _ZN10S2264C4_nt3v21Ev
  virtual void  v22(); // _ZN10S2264C4_nt3v22Ev
  virtual void  v23(); // _ZN10S2264C4_nt3v23Ev
  virtual void  v24(); // _ZN10S2264C4_nt3v24Ev
  virtual void  v25(); // _ZN10S2264C4_nt3v25Ev
  virtual void  v26(); // _ZN10S2264C4_nt3v26Ev
  S2264C4_nt(); // tgen
};
//SIG(-1 S2264C4_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}


 S2264C4_nt ::~S2264C4_nt(){ note_dtor("S2264C4_nt", this);}
void  S2264C4_nt ::v4(){vfunc_called(this, "_ZN10S2264C4_nt2v4Ev");}
void  S2264C4_nt ::v5(){vfunc_called(this, "_ZN10S2264C4_nt2v5Ev");}
void  S2264C4_nt ::v6(){vfunc_called(this, "_ZN10S2264C4_nt2v6Ev");}
void  S2264C4_nt ::v7(){vfunc_called(this, "_ZN10S2264C4_nt2v7Ev");}
void  S2264C4_nt ::v8(){vfunc_called(this, "_ZN10S2264C4_nt2v8Ev");}
void  S2264C4_nt ::v9(){vfunc_called(this, "_ZN10S2264C4_nt2v9Ev");}
void  S2264C4_nt ::v10(){vfunc_called(this, "_ZN10S2264C4_nt3v10Ev");}
void  S2264C4_nt ::v11(){vfunc_called(this, "_ZN10S2264C4_nt3v11Ev");}
void  S2264C4_nt ::v12(){vfunc_called(this, "_ZN10S2264C4_nt3v12Ev");}
void  S2264C4_nt ::v13(){vfunc_called(this, "_ZN10S2264C4_nt3v13Ev");}
void  S2264C4_nt ::v14(){vfunc_called(this, "_ZN10S2264C4_nt3v14Ev");}
void  S2264C4_nt ::v15(){vfunc_called(this, "_ZN10S2264C4_nt3v15Ev");}
void  S2264C4_nt ::v16(){vfunc_called(this, "_ZN10S2264C4_nt3v16Ev");}
void  S2264C4_nt ::v17(){vfunc_called(this, "_ZN10S2264C4_nt3v17Ev");}
void  S2264C4_nt ::v18(){vfunc_called(this, "_ZN10S2264C4_nt3v18Ev");}
void  S2264C4_nt ::v19(){vfunc_called(this, "_ZN10S2264C4_nt3v19Ev");}
void  S2264C4_nt ::v20(){vfunc_called(this, "_ZN10S2264C4_nt3v20Ev");}
void  S2264C4_nt ::v21(){vfunc_called(this, "_ZN10S2264C4_nt3v21Ev");}
void  S2264C4_nt ::v22(){vfunc_called(this, "_ZN10S2264C4_nt3v22Ev");}
void  S2264C4_nt ::v23(){vfunc_called(this, "_ZN10S2264C4_nt3v23Ev");}
void  S2264C4_nt ::v24(){vfunc_called(this, "_ZN10S2264C4_nt3v24Ev");}
void  S2264C4_nt ::v25(){vfunc_called(this, "_ZN10S2264C4_nt3v25Ev");}
void  S2264C4_nt ::v26(){vfunc_called(this, "_ZN10S2264C4_nt3v26Ev");}
S2264C4_nt ::S2264C4_nt(){ note_ctor("S2264C4_nt", this);} // tgen

//skip512 S2264C4_nt

#else // __cplusplus

extern void _ZN10S2264C4_ntC1Ev();
extern void _ZN10S2264C4_ntD1Ev();
Name_Map name_map_S2264C4_nt[] = {
  NSPAIR(_ZN10S2264C4_ntC1Ev),
  NSPAIR(_ZN10S2264C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2264C4_nt[];
extern void _ZN10S2264C4_ntD1Ev();
extern void _ZN10S2264C4_ntD0Ev();
extern void _ZN10S2264C4_nt2v4Ev();
extern void _ZN10S2264C4_nt2v5Ev();
extern void _ZN10S2264C4_nt2v6Ev();
extern void _ZN10S2264C4_nt2v7Ev();
extern void _ZN10S2264C4_nt2v8Ev();
extern void _ZN10S2264C4_nt2v9Ev();
extern void _ZN10S2264C4_nt3v10Ev();
extern void _ZN10S2264C4_nt3v11Ev();
extern void _ZN10S2264C4_nt3v12Ev();
extern void _ZN10S2264C4_nt3v13Ev();
extern void _ZN10S2264C4_nt3v14Ev();
extern void _ZN10S2264C4_nt3v15Ev();
extern void _ZN10S2264C4_nt3v16Ev();
extern void _ZN10S2264C4_nt3v17Ev();
extern void _ZN10S2264C4_nt3v18Ev();
extern void _ZN10S2264C4_nt3v19Ev();
extern void _ZN10S2264C4_nt3v20Ev();
extern void _ZN10S2264C4_nt3v21Ev();
extern void _ZN10S2264C4_nt3v22Ev();
extern void _ZN10S2264C4_nt3v23Ev();
extern void _ZN10S2264C4_nt3v24Ev();
extern void _ZN10S2264C4_nt3v25Ev();
extern void _ZN10S2264C4_nt3v26Ev();
static  VTBL_ENTRY vtc_S2264C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2264C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2264C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v26Ev,
};
extern VTBL_ENTRY _ZTI10S2264C4_nt[];
VTBL_ENTRY *P__ZTI10S2264C4_nt = _ZTI10S2264C4_nt; 
extern  VTBL_ENTRY _ZTV10S2264C4_nt[];
Class_Descriptor cd_S2264C4_nt = {  "S2264C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2264C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI10S2264C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2264C4_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  S2264C14_nt  {
  __tsi64 s2264c14f0[2];
  void  mf2264c14(); // _ZN11S2264C14_nt9mf2264c14Ev
};
//SIG(-1 S2264C14_nt) C1{ m FL[2]}


void  S2264C14_nt ::mf2264c14(){}

//skip512 S2264C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2264C13_nt  {
  ::S2264C14_nt s2264c13f0;
  void  mf2264c13(); // _ZN11S2264C13_nt9mf2264c13Ev
};
//SIG(-1 S2264C13_nt) C1{ m FC2{ m FL[2]}}


void  S2264C13_nt ::mf2264c13(){}

//skip512 S2264C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2264C17_nt  {
  ::S2264C13_nt s2264c17f0;
  void  mf2264c17(); // _ZN11S2264C17_nt9mf2264c17Ev
};
//SIG(-1 S2264C17_nt) C1{ m FC2{ m FC3{ m FL[2]}}}


void  S2264C17_nt ::mf2264c17(){}

//skip512 S2264C17_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2264C18_nt  {
  ::S2264C13_nt s2264c18f0;
  ::S2264C13_nt s2264c18f1;
  ::S2264C13_nt s2264c18f2;
  ::S2264C13_nt s2264c18f3;
  void  mf2264c18(); // _ZN11S2264C18_nt9mf2264c18Ev
};
//SIG(-1 S2264C18_nt) C1{ m FC2{ m FC3{ m FL[2]}} FC2 FC2 FC2}


void  S2264C18_nt ::mf2264c18(){}

//skip512 S2264C18_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2264C21  {
  void  mf2264c21(); // _ZN8S2264C219mf2264c21Ev
};
//SIG(-1 S2264C21) C1{ m}


void  S2264C21 ::mf2264c21(){}

static void Test_S2264C21()
{
  {
    init_simple_test("S2264C21");
    S2264C21 lv;
    check2(sizeof(lv), 1, "sizeof(S2264C21)");
    check2(__alignof__(lv), 1, "__alignof__(S2264C21)");
  }
}
static Arrange_To_Call_Me vS2264C21(Test_S2264C21, "S2264C21", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2264C21[];
VTBL_ENTRY *P__ZTI8S2264C21 = _ZTI8S2264C21; 
Class_Descriptor cd_S2264C21 = {  "S2264C21", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2264C21),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  S2264C20_nt  {
  void *s2264c20f0;
  int s2264c20f1;
  ::S2264C21 s2264c20f2;
  void  mf2264c20(); // _ZN11S2264C20_nt9mf2264c20Ev
};
//SIG(-1 S2264C20_nt) C1{ m Fp Fi FC2{ m}}


void  S2264C20_nt ::mf2264c20(){}

//skip512 S2264C20_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2264C19_nt  {
  ::S2264C20_nt s2264c19f0;
  int s2264c19f1;
  void  mf2264c19(); // _ZN11S2264C19_nt9mf2264c19Ev
};
//SIG(-1 S2264C19_nt) C1{ m FC2{ m Fp Fi FC3{ m}} Fi}


void  S2264C19_nt ::mf2264c19(){}

//skip512 S2264C19_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2264C24  {
  void  mf2264c24(); // _ZN8S2264C249mf2264c24Ev
};
//SIG(-1 S2264C24) C1{ m}


void  S2264C24 ::mf2264c24(){}

static void Test_S2264C24()
{
  {
    init_simple_test("S2264C24");
    S2264C24 lv;
    check2(sizeof(lv), 1, "sizeof(S2264C24)");
    check2(__alignof__(lv), 1, "__alignof__(S2264C24)");
  }
}
static Arrange_To_Call_Me vS2264C24(Test_S2264C24, "S2264C24", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2264C24[];
VTBL_ENTRY *P__ZTI8S2264C24 = _ZTI8S2264C24; 
Class_Descriptor cd_S2264C24 = {  "S2264C24", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2264C24),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  S2264C22  {
  void *s2264c22f0;
  int s2264c22f1;
  ::S2264C21 s2264c22f2;
  ::S2264C24 s2264c22f3;
  void  mf2264c22(); // _ZN8S2264C229mf2264c22Ev
};
//SIG(-1 S2264C22) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S2264C22 ::mf2264c22(){}

static void Test_S2264C22()
{
  {
    init_simple_test("S2264C22");
    S2264C22 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2264C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2264C22)");
    check_field_offset(lv, s2264c22f0, 0, "S2264C22.s2264c22f0");
    check_field_offset(lv, s2264c22f1, ABISELECT(8,4), "S2264C22.s2264c22f1");
    check_field_offset(lv, s2264c22f2, ABISELECT(12,8), "S2264C22.s2264c22f2");
    check_field_offset(lv, s2264c22f3, ABISELECT(13,9), "S2264C22.s2264c22f3");
  }
}
static Arrange_To_Call_Me vS2264C22(Test_S2264C22, "S2264C22", ABISELECT(16,12));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2264C28  {
  void  mf2264c28(); // _ZN8S2264C289mf2264c28Ev
};
//SIG(-1 S2264C28) C1{ m}


void  S2264C28 ::mf2264c28(){}

static void Test_S2264C28()
{
  {
    init_simple_test("S2264C28");
    S2264C28 lv;
    check2(sizeof(lv), 1, "sizeof(S2264C28)");
    check2(__alignof__(lv), 1, "__alignof__(S2264C28)");
  }
}
static Arrange_To_Call_Me vS2264C28(Test_S2264C28, "S2264C28", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2264C28[];
VTBL_ENTRY *P__ZTI8S2264C28 = _ZTI8S2264C28; 
Class_Descriptor cd_S2264C28 = {  "S2264C28", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2264C28),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  S2264C26  {
  void *s2264c26f0;
  int s2264c26f1;
  ::S2264C24 s2264c26f2;
  ::S2264C28 s2264c26f3;
  void  mf2264c26(); // _ZN8S2264C269mf2264c26Ev
};
//SIG(-1 S2264C26) C1{ m Fp Fi FC2{ m} FC3{ m}}


void  S2264C26 ::mf2264c26(){}

static void Test_S2264C26()
{
  {
    init_simple_test("S2264C26");
    S2264C26 lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2264C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2264C26)");
    check_field_offset(lv, s2264c26f0, 0, "S2264C26.s2264c26f0");
    check_field_offset(lv, s2264c26f1, ABISELECT(8,4), "S2264C26.s2264c26f1");
    check_field_offset(lv, s2264c26f2, ABISELECT(12,8), "S2264C26.s2264c26f2");
    check_field_offset(lv, s2264c26f3, ABISELECT(13,9), "S2264C26.s2264c26f3");
  }
}
static Arrange_To_Call_Me vS2264C26(Test_S2264C26, "S2264C26", ABISELECT(16,12));

#else // __cplusplus

Class_Descriptor cd_S2264C26 = {  "S2264C26", // 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  S2264C25  : S2264C26 {
};
//SIG(-1 S2264C25) C1{ BC2{ m Fp Fi FC3{ m} FC4{ m}}}



static void Test_S2264C25()
{
  extern Class_Descriptor cd_S2264C25;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S2264C25, buf);
    S2264C25 &lv = *(new (buf) S2264C25());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S2264C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2264C25)");
    check_base_class_offset(lv, (S2264C26*), 0, "S2264C25");
    test_class_info(&lv, &cd_S2264C25);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2264C25(Test_S2264C25, "S2264C25", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S2264C26;
static Base_Class bases_S2264C25[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C25 = {  "S2264C25", // class name
  bases_S2264C25, 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  S2264C29_nt  {
  void *s2264c29f0;
  int s2264c29f1[2];
  ::S2264C28 s2264c29f2;
  void  mf2264c29(); // _ZN11S2264C29_nt9mf2264c29Ev
};
//SIG(-1 S2264C29_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S2264C29_nt ::mf2264c29(){}

//skip512 S2264C29_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2264C38  {
  void  mf2264c38(); // _ZN8S2264C389mf2264c38Ev
};
//SIG(-1 S2264C38) C1{ m}


void  S2264C38 ::mf2264c38(){}

static void Test_S2264C38()
{
  {
    init_simple_test("S2264C38");
    S2264C38 lv;
    check2(sizeof(lv), 1, "sizeof(S2264C38)");
    check2(__alignof__(lv), 1, "__alignof__(S2264C38)");
  }
}
static Arrange_To_Call_Me vS2264C38(Test_S2264C38, "S2264C38", 1);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S2264C38[];
VTBL_ENTRY *P__ZTI8S2264C38 = _ZTI8S2264C38; 
Class_Descriptor cd_S2264C38 = {  "S2264C38", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI8S2264C38),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  S2264C37  {
  void *s2264c37f0;
  int s2264c37f1[2];
  ::S2264C38 s2264c37f2;
  void  mf2264c37(); // _ZN8S2264C379mf2264c37Ev
};
//SIG(-1 S2264C37) C1{ m Fp Fi[2] FC2{ m}}


void  S2264C37 ::mf2264c37(){}

static void Test_S2264C37()
{
  {
    init_simple_test("S2264C37");
    S2264C37 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2264C37)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2264C37)");
    check_field_offset(lv, s2264c37f0, 0, "S2264C37.s2264c37f0");
    check_field_offset(lv, s2264c37f1, ABISELECT(8,4), "S2264C37.s2264c37f1");
    check_field_offset(lv, s2264c37f2, ABISELECT(16,12), "S2264C37.s2264c37f2");
  }
}
static Arrange_To_Call_Me vS2264C37(Test_S2264C37, "S2264C37", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2264C3_nt  : S2264C4_nt {
  ::S2264C13_nt s2264c3f0;
  ::S2264C13_nt s2264c3f1;
  ::S2264C13_nt s2264c3f2;
  ::S2264C13_nt s2264c3f3;
  ::S2264C17_nt s2264c3f4;
  ::S2264C18_nt s2264c3f5;
  ::S2264C18_nt s2264c3f6;
  ::S2264C13_nt s2264c3f7;
  ::S2264C13_nt s2264c3f8;
  ::S2264C13_nt s2264c3f9;
  void *s2264c3f10;
  ::S2264C17_nt s2264c3f11;
  ::S2264C19_nt s2264c3f12;
  int s2264c3f13;
  void *s2264c3f14[7];
  ::S2264C22 s2264c3f15;
  int s2264c3f16:8;
  int s2264c3f17:8;
  int s2264c3f18:16;
  int s2264c3f19:16;
  int s2264c3f20:8;
  int s2264c3f21:8;
  int s2264c3f22:8;
  int s2264c3f23:32;
  int s2264c3f24:8;
  int s2264c3f25:4;
  int s2264c3f26:4;
  int s2264c3f27:4;
  int s2264c3f28:4;
  int s2264c3f29:4;
  int s2264c3f30:4;
  int s2264c3f31:4;
  int s2264c3f32:4;
  int s2264c3f33:4;
  int s2264c3f34:4;
  unsigned char s2264c3f35:1;
  unsigned char s2264c3f36:1;
  unsigned char s2264c3f37:1;
  unsigned char s2264c3f38:1;
  unsigned char s2264c3f39:1;
  unsigned char s2264c3f40:1;
  unsigned char s2264c3f41:1;
  unsigned char s2264c3f42:1;
  unsigned char s2264c3f43:1;
  unsigned char s2264c3f44:1;
  unsigned char s2264c3f45:1;
  unsigned char s2264c3f46:1;
  unsigned char s2264c3f47:1;
  unsigned char s2264c3f48:1;
  unsigned char s2264c3f49:1;
  unsigned char s2264c3f50:1;
  unsigned char s2264c3f51:1;
  unsigned char s2264c3f52:1;
  unsigned char s2264c3f53:1;
  unsigned char s2264c3f54:1;
  unsigned char s2264c3f55:1;
  unsigned char s2264c3f56:1;
  unsigned char s2264c3f57:1;
  unsigned char s2264c3f58:1;
  unsigned char s2264c3f59:1;
  unsigned char s2264c3f60:1;
  unsigned char s2264c3f61:1;
  unsigned char s2264c3f62:1;
  unsigned char s2264c3f63:1;
  unsigned char s2264c3f64:1;
  unsigned char s2264c3f65:1;
  unsigned char s2264c3f66:1;
  unsigned char s2264c3f67:1;
  unsigned char s2264c3f68:1;
  unsigned char s2264c3f69:1;
  unsigned char s2264c3f70:1;
  unsigned char s2264c3f71:1;
  unsigned char s2264c3f72:1;
  unsigned char s2264c3f73:1;
  unsigned char s2264c3f74:1;
  unsigned char s2264c3f75:1;
  int s2264c3f76[7];
  void *s2264c3f77[6];
  int s2264c3f78:8;
  int s2264c3f79:8;
  int s2264c3f80:8;
  int s2264c3f81:8;
  int s2264c3f82:8;
  int s2264c3f83:8;
  ::S2264C25 s2264c3f84;
  void *s2264c3f85[4];
  int s2264c3f86:8;
  int s2264c3f87:8;
  int s2264c3f88:8;
  int s2264c3f89:8;
  int s2264c3f90:8;
  int s2264c3f91:16;
  int s2264c3f92:16;
  int s2264c3f93:16;
  int s2264c3f94:4;
  int s2264c3f95:4;
  int s2264c3f96:4;
  int s2264c3f97:4;
  int s2264c3f98:4;
  int s2264c3f99:4;
  int s2264c3f100:4;
  int s2264c3f101:4;
  int s2264c3f102:4;
  int s2264c3f103:4;
  int s2264c3f104:4;
  int s2264c3f105:4;
  int s2264c3f106:8;
  int s2264c3f107:8;
  int s2264c3f108:8;
  void *s2264c3f109[7];
  ::S2264C29_nt s2264c3f110;
  void *s2264c3f111[2];
  int s2264c3f112:16;
  int s2264c3f113:16;
  ::S2264C25 s2264c3f114;
  ::S2264C29_nt s2264c3f115;
  ::S2264C37 s2264c3f116;
  void *s2264c3f117[2];
  int s2264c3f118:24;
  int s2264c3f119:8;
  void *s2264c3f120;
  virtual  ~S2264C3_nt(); // _ZN10S2264C3_ntD1Ev
  virtual void  v27(); // _ZN10S2264C3_nt3v27Ev
  virtual void  v28(); // _ZN10S2264C3_nt3v28Ev
  virtual void  v29(); // _ZN10S2264C3_nt3v29Ev
  virtual void  v30(); // _ZN10S2264C3_nt3v30Ev
  virtual void  v31(); // _ZN10S2264C3_nt3v31Ev
  virtual void  v32(); // _ZN10S2264C3_nt3v32Ev
  virtual void  v33(); // _ZN10S2264C3_nt3v33Ev
  virtual void  v34(); // _ZN10S2264C3_nt3v34Ev
  virtual void  v35(); // _ZN10S2264C3_nt3v35Ev
  virtual void  v36(); // _ZN10S2264C3_nt3v36Ev
  virtual void  v37(); // _ZN10S2264C3_nt3v37Ev
  virtual void  v38(); // _ZN10S2264C3_nt3v38Ev
  virtual void  v39(); // _ZN10S2264C3_nt3v39Ev
  virtual void  v40(); // _ZN10S2264C3_nt3v40Ev
  virtual void  v41(); // _ZN10S2264C3_nt3v41Ev
  virtual void  v42(); // _ZN10S2264C3_nt3v42Ev
  virtual void  v43(); // _ZN10S2264C3_nt3v43Ev
  virtual void  v44(); // _ZN10S2264C3_nt3v44Ev
  virtual void  v45(); // _ZN10S2264C3_nt3v45Ev
  virtual void  v46(); // _ZN10S2264C3_nt3v46Ev
  virtual void  v47(); // _ZN10S2264C3_nt3v47Ev
  virtual void  v48(); // _ZN10S2264C3_nt3v48Ev
  virtual void  v49(); // _ZN10S2264C3_nt3v49Ev
  virtual void  v50(); // _ZN10S2264C3_nt3v50Ev
  virtual void  v51(); // _ZN10S2264C3_nt3v51Ev
  virtual void  v52(); // _ZN10S2264C3_nt3v52Ev
  virtual void  v53(); // _ZN10S2264C3_nt3v53Ev
  virtual void  v54(); // _ZN10S2264C3_nt3v54Ev
  virtual void  v55(); // _ZN10S2264C3_nt3v55Ev
  virtual void  v56(); // _ZN10S2264C3_nt3v56Ev
  virtual void  v57(); // _ZN10S2264C3_nt3v57Ev
  virtual void  v58(); // _ZN10S2264C3_nt3v58Ev
  virtual void  v59(); // _ZN10S2264C3_nt3v59Ev
  virtual void  v60(); // _ZN10S2264C3_nt3v60Ev
  virtual void  v61(); // _ZN10S2264C3_nt3v61Ev
  virtual void  v62(); // _ZN10S2264C3_nt3v62Ev
  virtual void  v63(); // _ZN10S2264C3_nt3v63Ev
  virtual void  v64(); // _ZN10S2264C3_nt3v64Ev
  virtual void  v65(); // _ZN10S2264C3_nt3v65Ev
  virtual void  v66(); // _ZN10S2264C3_nt3v66Ev
  virtual void  v67(); // _ZN10S2264C3_nt3v67Ev
  virtual void  v68(); // _ZN10S2264C3_nt3v68Ev
  virtual void  v69(); // _ZN10S2264C3_nt3v69Ev
  virtual void  v70(); // _ZN10S2264C3_nt3v70Ev
  virtual void  v71(); // _ZN10S2264C3_nt3v71Ev
  virtual void  v72(); // _ZN10S2264C3_nt3v72Ev
  virtual void  v73(); // _ZN10S2264C3_nt3v73Ev
  virtual void  v74(); // _ZN10S2264C3_nt3v74Ev
  virtual void  v75(); // _ZN10S2264C3_nt3v75Ev
  virtual void  v76(); // _ZN10S2264C3_nt3v76Ev
  virtual void  v77(); // _ZN10S2264C3_nt3v77Ev
  virtual void  v78(); // _ZN10S2264C3_nt3v78Ev
  virtual void  v79(); // _ZN10S2264C3_nt3v79Ev
  virtual void  v80(); // _ZN10S2264C3_nt3v80Ev
  virtual void  v81(); // _ZN10S2264C3_nt3v81Ev
  virtual void  v82(); // _ZN10S2264C3_nt3v82Ev
  virtual void  v83(); // _ZN10S2264C3_nt3v83Ev
  virtual void  v84(); // _ZN10S2264C3_nt3v84Ev
  virtual void  v85(); // _ZN10S2264C3_nt3v85Ev
  virtual void  v86(); // _ZN10S2264C3_nt3v86Ev
  virtual void  v87(); // _ZN10S2264C3_nt3v87Ev
  virtual void  v88(); // _ZN10S2264C3_nt3v88Ev
  virtual void  v89(); // _ZN10S2264C3_nt3v89Ev
  virtual void  v90(); // _ZN10S2264C3_nt3v90Ev
  virtual void  v91(); // _ZN10S2264C3_nt3v91Ev
  virtual void  v92(); // _ZN10S2264C3_nt3v92Ev
  virtual void  v93(); // _ZN10S2264C3_nt3v93Ev
  virtual void  v94(); // _ZN10S2264C3_nt3v94Ev
  virtual void  v95(); // _ZN10S2264C3_nt3v95Ev
  virtual void  v96(); // _ZN10S2264C3_nt3v96Ev
  virtual void  v97(); // _ZN10S2264C3_nt3v97Ev
  virtual void  v98(); // _ZN10S2264C3_nt3v98Ev
  virtual void  v99(); // _ZN10S2264C3_nt3v99Ev
  virtual void  v100(); // _ZN10S2264C3_nt4v100Ev
  virtual void  v101(); // _ZN10S2264C3_nt4v101Ev
  virtual void  v102(); // _ZN10S2264C3_nt4v102Ev
  virtual void  v103(); // _ZN10S2264C3_nt4v103Ev
  virtual void  v104(); // _ZN10S2264C3_nt4v104Ev
  S2264C3_nt(); // tgen
};
//SIG(-1 S2264C3_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}


 S2264C3_nt ::~S2264C3_nt(){ note_dtor("S2264C3_nt", this);}
void  S2264C3_nt ::v27(){vfunc_called(this, "_ZN10S2264C3_nt3v27Ev");}
void  S2264C3_nt ::v28(){vfunc_called(this, "_ZN10S2264C3_nt3v28Ev");}
void  S2264C3_nt ::v29(){vfunc_called(this, "_ZN10S2264C3_nt3v29Ev");}
void  S2264C3_nt ::v30(){vfunc_called(this, "_ZN10S2264C3_nt3v30Ev");}
void  S2264C3_nt ::v31(){vfunc_called(this, "_ZN10S2264C3_nt3v31Ev");}
void  S2264C3_nt ::v32(){vfunc_called(this, "_ZN10S2264C3_nt3v32Ev");}
void  S2264C3_nt ::v33(){vfunc_called(this, "_ZN10S2264C3_nt3v33Ev");}
void  S2264C3_nt ::v34(){vfunc_called(this, "_ZN10S2264C3_nt3v34Ev");}
void  S2264C3_nt ::v35(){vfunc_called(this, "_ZN10S2264C3_nt3v35Ev");}
void  S2264C3_nt ::v36(){vfunc_called(this, "_ZN10S2264C3_nt3v36Ev");}
void  S2264C3_nt ::v37(){vfunc_called(this, "_ZN10S2264C3_nt3v37Ev");}
void  S2264C3_nt ::v38(){vfunc_called(this, "_ZN10S2264C3_nt3v38Ev");}
void  S2264C3_nt ::v39(){vfunc_called(this, "_ZN10S2264C3_nt3v39Ev");}
void  S2264C3_nt ::v40(){vfunc_called(this, "_ZN10S2264C3_nt3v40Ev");}
void  S2264C3_nt ::v41(){vfunc_called(this, "_ZN10S2264C3_nt3v41Ev");}
void  S2264C3_nt ::v42(){vfunc_called(this, "_ZN10S2264C3_nt3v42Ev");}
void  S2264C3_nt ::v43(){vfunc_called(this, "_ZN10S2264C3_nt3v43Ev");}
void  S2264C3_nt ::v44(){vfunc_called(this, "_ZN10S2264C3_nt3v44Ev");}
void  S2264C3_nt ::v45(){vfunc_called(this, "_ZN10S2264C3_nt3v45Ev");}
void  S2264C3_nt ::v46(){vfunc_called(this, "_ZN10S2264C3_nt3v46Ev");}
void  S2264C3_nt ::v47(){vfunc_called(this, "_ZN10S2264C3_nt3v47Ev");}
void  S2264C3_nt ::v48(){vfunc_called(this, "_ZN10S2264C3_nt3v48Ev");}
void  S2264C3_nt ::v49(){vfunc_called(this, "_ZN10S2264C3_nt3v49Ev");}
void  S2264C3_nt ::v50(){vfunc_called(this, "_ZN10S2264C3_nt3v50Ev");}
void  S2264C3_nt ::v51(){vfunc_called(this, "_ZN10S2264C3_nt3v51Ev");}
void  S2264C3_nt ::v52(){vfunc_called(this, "_ZN10S2264C3_nt3v52Ev");}
void  S2264C3_nt ::v53(){vfunc_called(this, "_ZN10S2264C3_nt3v53Ev");}
void  S2264C3_nt ::v54(){vfunc_called(this, "_ZN10S2264C3_nt3v54Ev");}
void  S2264C3_nt ::v55(){vfunc_called(this, "_ZN10S2264C3_nt3v55Ev");}
void  S2264C3_nt ::v56(){vfunc_called(this, "_ZN10S2264C3_nt3v56Ev");}
void  S2264C3_nt ::v57(){vfunc_called(this, "_ZN10S2264C3_nt3v57Ev");}
void  S2264C3_nt ::v58(){vfunc_called(this, "_ZN10S2264C3_nt3v58Ev");}
void  S2264C3_nt ::v59(){vfunc_called(this, "_ZN10S2264C3_nt3v59Ev");}
void  S2264C3_nt ::v60(){vfunc_called(this, "_ZN10S2264C3_nt3v60Ev");}
void  S2264C3_nt ::v61(){vfunc_called(this, "_ZN10S2264C3_nt3v61Ev");}
void  S2264C3_nt ::v62(){vfunc_called(this, "_ZN10S2264C3_nt3v62Ev");}
void  S2264C3_nt ::v63(){vfunc_called(this, "_ZN10S2264C3_nt3v63Ev");}
void  S2264C3_nt ::v64(){vfunc_called(this, "_ZN10S2264C3_nt3v64Ev");}
void  S2264C3_nt ::v65(){vfunc_called(this, "_ZN10S2264C3_nt3v65Ev");}
void  S2264C3_nt ::v66(){vfunc_called(this, "_ZN10S2264C3_nt3v66Ev");}
void  S2264C3_nt ::v67(){vfunc_called(this, "_ZN10S2264C3_nt3v67Ev");}
void  S2264C3_nt ::v68(){vfunc_called(this, "_ZN10S2264C3_nt3v68Ev");}
void  S2264C3_nt ::v69(){vfunc_called(this, "_ZN10S2264C3_nt3v69Ev");}
void  S2264C3_nt ::v70(){vfunc_called(this, "_ZN10S2264C3_nt3v70Ev");}
void  S2264C3_nt ::v71(){vfunc_called(this, "_ZN10S2264C3_nt3v71Ev");}
void  S2264C3_nt ::v72(){vfunc_called(this, "_ZN10S2264C3_nt3v72Ev");}
void  S2264C3_nt ::v73(){vfunc_called(this, "_ZN10S2264C3_nt3v73Ev");}
void  S2264C3_nt ::v74(){vfunc_called(this, "_ZN10S2264C3_nt3v74Ev");}
void  S2264C3_nt ::v75(){vfunc_called(this, "_ZN10S2264C3_nt3v75Ev");}
void  S2264C3_nt ::v76(){vfunc_called(this, "_ZN10S2264C3_nt3v76Ev");}
void  S2264C3_nt ::v77(){vfunc_called(this, "_ZN10S2264C3_nt3v77Ev");}
void  S2264C3_nt ::v78(){vfunc_called(this, "_ZN10S2264C3_nt3v78Ev");}
void  S2264C3_nt ::v79(){vfunc_called(this, "_ZN10S2264C3_nt3v79Ev");}
void  S2264C3_nt ::v80(){vfunc_called(this, "_ZN10S2264C3_nt3v80Ev");}
void  S2264C3_nt ::v81(){vfunc_called(this, "_ZN10S2264C3_nt3v81Ev");}
void  S2264C3_nt ::v82(){vfunc_called(this, "_ZN10S2264C3_nt3v82Ev");}
void  S2264C3_nt ::v83(){vfunc_called(this, "_ZN10S2264C3_nt3v83Ev");}
void  S2264C3_nt ::v84(){vfunc_called(this, "_ZN10S2264C3_nt3v84Ev");}
void  S2264C3_nt ::v85(){vfunc_called(this, "_ZN10S2264C3_nt3v85Ev");}
void  S2264C3_nt ::v86(){vfunc_called(this, "_ZN10S2264C3_nt3v86Ev");}
void  S2264C3_nt ::v87(){vfunc_called(this, "_ZN10S2264C3_nt3v87Ev");}
void  S2264C3_nt ::v88(){vfunc_called(this, "_ZN10S2264C3_nt3v88Ev");}
void  S2264C3_nt ::v89(){vfunc_called(this, "_ZN10S2264C3_nt3v89Ev");}
void  S2264C3_nt ::v90(){vfunc_called(this, "_ZN10S2264C3_nt3v90Ev");}
void  S2264C3_nt ::v91(){vfunc_called(this, "_ZN10S2264C3_nt3v91Ev");}
void  S2264C3_nt ::v92(){vfunc_called(this, "_ZN10S2264C3_nt3v92Ev");}
void  S2264C3_nt ::v93(){vfunc_called(this, "_ZN10S2264C3_nt3v93Ev");}
void  S2264C3_nt ::v94(){vfunc_called(this, "_ZN10S2264C3_nt3v94Ev");}
void  S2264C3_nt ::v95(){vfunc_called(this, "_ZN10S2264C3_nt3v95Ev");}
void  S2264C3_nt ::v96(){vfunc_called(this, "_ZN10S2264C3_nt3v96Ev");}
void  S2264C3_nt ::v97(){vfunc_called(this, "_ZN10S2264C3_nt3v97Ev");}
void  S2264C3_nt ::v98(){vfunc_called(this, "_ZN10S2264C3_nt3v98Ev");}
void  S2264C3_nt ::v99(){vfunc_called(this, "_ZN10S2264C3_nt3v99Ev");}
void  S2264C3_nt ::v100(){vfunc_called(this, "_ZN10S2264C3_nt4v100Ev");}
void  S2264C3_nt ::v101(){vfunc_called(this, "_ZN10S2264C3_nt4v101Ev");}
void  S2264C3_nt ::v102(){vfunc_called(this, "_ZN10S2264C3_nt4v102Ev");}
void  S2264C3_nt ::v103(){vfunc_called(this, "_ZN10S2264C3_nt4v103Ev");}
void  S2264C3_nt ::v104(){vfunc_called(this, "_ZN10S2264C3_nt4v104Ev");}
S2264C3_nt ::S2264C3_nt(){ note_ctor("S2264C3_nt", this);} // tgen

//skip512 S2264C3_nt

#else // __cplusplus

extern void _ZN10S2264C3_ntC1Ev();
extern void _ZN10S2264C3_ntD1Ev();
Name_Map name_map_S2264C3_nt[] = {
  NSPAIR(_ZN10S2264C3_ntC1Ev),
  NSPAIR(_ZN10S2264C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C4_nt;
extern VTBL_ENTRY _ZTI10S2264C4_nt[];
extern  VTBL_ENTRY _ZTV10S2264C4_nt[];
static Base_Class bases_S2264C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C4_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 _ZTI10S2264C3_nt[];
extern void _ZN10S2264C3_ntD1Ev();
extern void _ZN10S2264C3_ntD0Ev();
extern void _ZN10S2264C4_nt2v4Ev();
extern void _ZN10S2264C4_nt2v5Ev();
extern void _ZN10S2264C4_nt2v6Ev();
extern void _ZN10S2264C4_nt2v7Ev();
extern void _ZN10S2264C4_nt2v8Ev();
extern void _ZN10S2264C4_nt2v9Ev();
extern void _ZN10S2264C4_nt3v10Ev();
extern void _ZN10S2264C4_nt3v11Ev();
extern void _ZN10S2264C4_nt3v12Ev();
extern void _ZN10S2264C4_nt3v13Ev();
extern void _ZN10S2264C4_nt3v14Ev();
extern void _ZN10S2264C4_nt3v15Ev();
extern void _ZN10S2264C4_nt3v16Ev();
extern void _ZN10S2264C4_nt3v17Ev();
extern void _ZN10S2264C4_nt3v18Ev();
extern void _ZN10S2264C4_nt3v19Ev();
extern void _ZN10S2264C4_nt3v20Ev();
extern void _ZN10S2264C4_nt3v21Ev();
extern void _ZN10S2264C4_nt3v22Ev();
extern void _ZN10S2264C4_nt3v23Ev();
extern void _ZN10S2264C4_nt3v24Ev();
extern void _ZN10S2264C4_nt3v25Ev();
extern void _ZN10S2264C4_nt3v26Ev();
extern void _ZN10S2264C3_nt3v27Ev();
extern void _ZN10S2264C3_nt3v28Ev();
extern void _ZN10S2264C3_nt3v29Ev();
extern void _ZN10S2264C3_nt3v30Ev();
extern void _ZN10S2264C3_nt3v31Ev();
extern void _ZN10S2264C3_nt3v32Ev();
extern void _ZN10S2264C3_nt3v33Ev();
extern void _ZN10S2264C3_nt3v34Ev();
extern void _ZN10S2264C3_nt3v35Ev();
extern void _ZN10S2264C3_nt3v36Ev();
extern void _ZN10S2264C3_nt3v37Ev();
extern void _ZN10S2264C3_nt3v38Ev();
extern void _ZN10S2264C3_nt3v39Ev();
extern void _ZN10S2264C3_nt3v40Ev();
extern void _ZN10S2264C3_nt3v41Ev();
extern void _ZN10S2264C3_nt3v42Ev();
extern void _ZN10S2264C3_nt3v43Ev();
extern void _ZN10S2264C3_nt3v44Ev();
extern void _ZN10S2264C3_nt3v45Ev();
extern void _ZN10S2264C3_nt3v46Ev();
extern void _ZN10S2264C3_nt3v47Ev();
extern void _ZN10S2264C3_nt3v48Ev();
extern void _ZN10S2264C3_nt3v49Ev();
extern void _ZN10S2264C3_nt3v50Ev();
extern void _ZN10S2264C3_nt3v51Ev();
extern void _ZN10S2264C3_nt3v52Ev();
extern void _ZN10S2264C3_nt3v53Ev();
extern void _ZN10S2264C3_nt3v54Ev();
extern void _ZN10S2264C3_nt3v55Ev();
extern void _ZN10S2264C3_nt3v56Ev();
extern void _ZN10S2264C3_nt3v57Ev();
extern void _ZN10S2264C3_nt3v58Ev();
extern void _ZN10S2264C3_nt3v59Ev();
extern void _ZN10S2264C3_nt3v60Ev();
extern void _ZN10S2264C3_nt3v61Ev();
extern void _ZN10S2264C3_nt3v62Ev();
extern void _ZN10S2264C3_nt3v63Ev();
extern void _ZN10S2264C3_nt3v64Ev();
extern void _ZN10S2264C3_nt3v65Ev();
extern void _ZN10S2264C3_nt3v66Ev();
extern void _ZN10S2264C3_nt3v67Ev();
extern void _ZN10S2264C3_nt3v68Ev();
extern void _ZN10S2264C3_nt3v69Ev();
extern void _ZN10S2264C3_nt3v70Ev();
extern void _ZN10S2264C3_nt3v71Ev();
extern void _ZN10S2264C3_nt3v72Ev();
extern void _ZN10S2264C3_nt3v73Ev();
extern void _ZN10S2264C3_nt3v74Ev();
extern void _ZN10S2264C3_nt3v75Ev();
extern void _ZN10S2264C3_nt3v76Ev();
extern void _ZN10S2264C3_nt3v77Ev();
extern void _ZN10S2264C3_nt3v78Ev();
extern void _ZN10S2264C3_nt3v79Ev();
extern void _ZN10S2264C3_nt3v80Ev();
extern void _ZN10S2264C3_nt3v81Ev();
extern void _ZN10S2264C3_nt3v82Ev();
extern void _ZN10S2264C3_nt3v83Ev();
extern void _ZN10S2264C3_nt3v84Ev();
extern void _ZN10S2264C3_nt3v85Ev();
extern void _ZN10S2264C3_nt3v86Ev();
extern void _ZN10S2264C3_nt3v87Ev();
extern void _ZN10S2264C3_nt3v88Ev();
extern void _ZN10S2264C3_nt3v89Ev();
extern void _ZN10S2264C3_nt3v90Ev();
extern void _ZN10S2264C3_nt3v91Ev();
extern void _ZN10S2264C3_nt3v92Ev();
extern void _ZN10S2264C3_nt3v93Ev();
extern void _ZN10S2264C3_nt3v94Ev();
extern void _ZN10S2264C3_nt3v95Ev();
extern void _ZN10S2264C3_nt3v96Ev();
extern void _ZN10S2264C3_nt3v97Ev();
extern void _ZN10S2264C3_nt3v98Ev();
extern void _ZN10S2264C3_nt3v99Ev();
extern void _ZN10S2264C3_nt4v100Ev();
extern void _ZN10S2264C3_nt4v101Ev();
extern void _ZN10S2264C3_nt4v102Ev();
extern void _ZN10S2264C3_nt4v103Ev();
extern void _ZN10S2264C3_nt4v104Ev();
static  VTBL_ENTRY vtc_S2264C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2264C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S2264C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt4v104Ev,
};
extern VTBL_ENTRY _ZTI10S2264C3_nt[];
VTBL_ENTRY *P__ZTI10S2264C3_nt = _ZTI10S2264C3_nt; 
extern  VTBL_ENTRY _ZTV10S2264C3_nt[];
Class_Descriptor cd_S2264C3_nt = {  "S2264C3_nt", // class name
  bases_S2264C3_nt, 1,
  &(vtc_S2264C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(832,632), // object size
  NSPAIRA(_ZTI10S2264C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2264C3_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  S2264C2_nt  : S2264C3_nt {
  void *s2264c2f0;
  virtual  ~S2264C2_nt(); // _ZN10S2264C2_ntD1Ev
  virtual void  v105(); // _ZN10S2264C2_nt4v105Ev
  virtual void  v106(); // _ZN10S2264C2_nt4v106Ev
  virtual void  v107(); // _ZN10S2264C2_nt4v107Ev
  virtual void  v108(); // _ZN10S2264C2_nt4v108Ev
  virtual void  v109(); // _ZN10S2264C2_nt4v109Ev
  virtual void  v110(); // _ZN10S2264C2_nt4v110Ev
  virtual void  v111(); // _ZN10S2264C2_nt4v111Ev
  virtual void  v112(); // _ZN10S2264C2_nt4v112Ev
  virtual void  v113(); // _ZN10S2264C2_nt4v113Ev
  virtual void  v114(); // _ZN10S2264C2_nt4v114Ev
  S2264C2_nt(); // tgen
};
//SIG(-1 S2264C2_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}


 S2264C2_nt ::~S2264C2_nt(){ note_dtor("S2264C2_nt", this);}
void  S2264C2_nt ::v105(){vfunc_called(this, "_ZN10S2264C2_nt4v105Ev");}
void  S2264C2_nt ::v106(){vfunc_called(this, "_ZN10S2264C2_nt4v106Ev");}
void  S2264C2_nt ::v107(){vfunc_called(this, "_ZN10S2264C2_nt4v107Ev");}
void  S2264C2_nt ::v108(){vfunc_called(this, "_ZN10S2264C2_nt4v108Ev");}
void  S2264C2_nt ::v109(){vfunc_called(this, "_ZN10S2264C2_nt4v109Ev");}
void  S2264C2_nt ::v110(){vfunc_called(this, "_ZN10S2264C2_nt4v110Ev");}
void  S2264C2_nt ::v111(){vfunc_called(this, "_ZN10S2264C2_nt4v111Ev");}
void  S2264C2_nt ::v112(){vfunc_called(this, "_ZN10S2264C2_nt4v112Ev");}
void  S2264C2_nt ::v113(){vfunc_called(this, "_ZN10S2264C2_nt4v113Ev");}
void  S2264C2_nt ::v114(){vfunc_called(this, "_ZN10S2264C2_nt4v114Ev");}
S2264C2_nt ::S2264C2_nt(){ note_ctor("S2264C2_nt", this);} // tgen

//skip512 S2264C2_nt

#else // __cplusplus

extern void _ZN10S2264C2_ntC1Ev();
extern void _ZN10S2264C2_ntD1Ev();
Name_Map name_map_S2264C2_nt[] = {
  NSPAIR(_ZN10S2264C2_ntC1Ev),
  NSPAIR(_ZN10S2264C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C4_nt;
extern VTBL_ENTRY _ZTI10S2264C4_nt[];
extern  VTBL_ENTRY _ZTV10S2264C4_nt[];
extern Class_Descriptor cd_S2264C3_nt;
extern VTBL_ENTRY _ZTI10S2264C3_nt[];
extern  VTBL_ENTRY _ZTV10S2264C3_nt[];
static Base_Class bases_S2264C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C4_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_S2264C3_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 _ZTI10S2264C2_nt[];
extern void _ZN10S2264C2_ntD1Ev();
extern void _ZN10S2264C2_ntD0Ev();
extern void _ZN10S2264C4_nt2v4Ev();
extern void _ZN10S2264C4_nt2v5Ev();
extern void _ZN10S2264C4_nt2v6Ev();
extern void _ZN10S2264C4_nt2v7Ev();
extern void _ZN10S2264C4_nt2v8Ev();
extern void _ZN10S2264C4_nt2v9Ev();
extern void _ZN10S2264C4_nt3v10Ev();
extern void _ZN10S2264C4_nt3v11Ev();
extern void _ZN10S2264C4_nt3v12Ev();
extern void _ZN10S2264C4_nt3v13Ev();
extern void _ZN10S2264C4_nt3v14Ev();
extern void _ZN10S2264C4_nt3v15Ev();
extern void _ZN10S2264C4_nt3v16Ev();
extern void _ZN10S2264C4_nt3v17Ev();
extern void _ZN10S2264C4_nt3v18Ev();
extern void _ZN10S2264C4_nt3v19Ev();
extern void _ZN10S2264C4_nt3v20Ev();
extern void _ZN10S2264C4_nt3v21Ev();
extern void _ZN10S2264C4_nt3v22Ev();
extern void _ZN10S2264C4_nt3v23Ev();
extern void _ZN10S2264C4_nt3v24Ev();
extern void _ZN10S2264C4_nt3v25Ev();
extern void _ZN10S2264C4_nt3v26Ev();
extern void _ZN10S2264C3_nt3v27Ev();
extern void _ZN10S2264C3_nt3v28Ev();
extern void _ZN10S2264C3_nt3v29Ev();
extern void _ZN10S2264C3_nt3v30Ev();
extern void _ZN10S2264C3_nt3v31Ev();
extern void _ZN10S2264C3_nt3v32Ev();
extern void _ZN10S2264C3_nt3v33Ev();
extern void _ZN10S2264C3_nt3v34Ev();
extern void _ZN10S2264C3_nt3v35Ev();
extern void _ZN10S2264C3_nt3v36Ev();
extern void _ZN10S2264C3_nt3v37Ev();
extern void _ZN10S2264C3_nt3v38Ev();
extern void _ZN10S2264C3_nt3v39Ev();
extern void _ZN10S2264C3_nt3v40Ev();
extern void _ZN10S2264C3_nt3v41Ev();
extern void _ZN10S2264C3_nt3v42Ev();
extern void _ZN10S2264C3_nt3v43Ev();
extern void _ZN10S2264C3_nt3v44Ev();
extern void _ZN10S2264C3_nt3v45Ev();
extern void _ZN10S2264C3_nt3v46Ev();
extern void _ZN10S2264C3_nt3v47Ev();
extern void _ZN10S2264C3_nt3v48Ev();
extern void _ZN10S2264C3_nt3v49Ev();
extern void _ZN10S2264C3_nt3v50Ev();
extern void _ZN10S2264C3_nt3v51Ev();
extern void _ZN10S2264C3_nt3v52Ev();
extern void _ZN10S2264C3_nt3v53Ev();
extern void _ZN10S2264C3_nt3v54Ev();
extern void _ZN10S2264C3_nt3v55Ev();
extern void _ZN10S2264C3_nt3v56Ev();
extern void _ZN10S2264C3_nt3v57Ev();
extern void _ZN10S2264C3_nt3v58Ev();
extern void _ZN10S2264C3_nt3v59Ev();
extern void _ZN10S2264C3_nt3v60Ev();
extern void _ZN10S2264C3_nt3v61Ev();
extern void _ZN10S2264C3_nt3v62Ev();
extern void _ZN10S2264C3_nt3v63Ev();
extern void _ZN10S2264C3_nt3v64Ev();
extern void _ZN10S2264C3_nt3v65Ev();
extern void _ZN10S2264C3_nt3v66Ev();
extern void _ZN10S2264C3_nt3v67Ev();
extern void _ZN10S2264C3_nt3v68Ev();
extern void _ZN10S2264C3_nt3v69Ev();
extern void _ZN10S2264C3_nt3v70Ev();
extern void _ZN10S2264C3_nt3v71Ev();
extern void _ZN10S2264C3_nt3v72Ev();
extern void _ZN10S2264C3_nt3v73Ev();
extern void _ZN10S2264C3_nt3v74Ev();
extern void _ZN10S2264C3_nt3v75Ev();
extern void _ZN10S2264C3_nt3v76Ev();
extern void _ZN10S2264C3_nt3v77Ev();
extern void _ZN10S2264C3_nt3v78Ev();
extern void _ZN10S2264C3_nt3v79Ev();
extern void _ZN10S2264C3_nt3v80Ev();
extern void _ZN10S2264C3_nt3v81Ev();
extern void _ZN10S2264C3_nt3v82Ev();
extern void _ZN10S2264C3_nt3v83Ev();
extern void _ZN10S2264C3_nt3v84Ev();
extern void _ZN10S2264C3_nt3v85Ev();
extern void _ZN10S2264C3_nt3v86Ev();
extern void _ZN10S2264C3_nt3v87Ev();
extern void _ZN10S2264C3_nt3v88Ev();
extern void _ZN10S2264C3_nt3v89Ev();
extern void _ZN10S2264C3_nt3v90Ev();
extern void _ZN10S2264C3_nt3v91Ev();
extern void _ZN10S2264C3_nt3v92Ev();
extern void _ZN10S2264C3_nt3v93Ev();
extern void _ZN10S2264C3_nt3v94Ev();
extern void _ZN10S2264C3_nt3v95Ev();
extern void _ZN10S2264C3_nt3v96Ev();
extern void _ZN10S2264C3_nt3v97Ev();
extern void _ZN10S2264C3_nt3v98Ev();
extern void _ZN10S2264C3_nt3v99Ev();
extern void _ZN10S2264C3_nt4v100Ev();
extern void _ZN10S2264C3_nt4v101Ev();
extern void _ZN10S2264C3_nt4v102Ev();
extern void _ZN10S2264C3_nt4v103Ev();
extern void _ZN10S2264C3_nt4v104Ev();
extern void _ZN10S2264C2_nt4v105Ev();
extern void _ZN10S2264C2_nt4v106Ev();
extern void _ZN10S2264C2_nt4v107Ev();
extern void _ZN10S2264C2_nt4v108Ev();
extern void _ZN10S2264C2_nt4v109Ev();
extern void _ZN10S2264C2_nt4v110Ev();
extern void _ZN10S2264C2_nt4v111Ev();
extern void _ZN10S2264C2_nt4v112Ev();
extern void _ZN10S2264C2_nt4v113Ev();
extern void _ZN10S2264C2_nt4v114Ev();
static  VTBL_ENTRY vtc_S2264C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2264C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S2264C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2264C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S2264C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S2264C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S2264C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S2264C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S2264C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S2264C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S2264C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S2264C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S2264C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S2264C2_nt4v114Ev,
};
extern VTBL_ENTRY _ZTI10S2264C2_nt[];
VTBL_ENTRY *P__ZTI10S2264C2_nt = _ZTI10S2264C2_nt; 
extern  VTBL_ENTRY _ZTV10S2264C2_nt[];
Class_Descriptor cd_S2264C2_nt = {  "S2264C2_nt", // class name
  bases_S2264C2_nt, 2,
  &(vtc_S2264C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(840,636), // object size
  NSPAIRA(_ZTI10S2264C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2264C2_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  S2264C1  : S2264C2_nt {
  virtual  ~S2264C1(); // _ZN7S2264C1D1Ev
  virtual void  v1(); // _ZN7S2264C12v1Ev
  virtual void  v2(); // _ZN7S2264C12v2Ev
  virtual void  v3(); // _ZN7S2264C12v3Ev
  S2264C1(); // tgen
};
//SIG(1 S2264C1) 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}


 S2264C1 ::~S2264C1(){ note_dtor("S2264C1", this);}
void  S2264C1 ::v1(){vfunc_called(this, "_ZN7S2264C12v1Ev");}
void  S2264C1 ::v2(){vfunc_called(this, "_ZN7S2264C12v2Ev");}
void  S2264C1 ::v3(){vfunc_called(this, "_ZN7S2264C12v3Ev");}
S2264C1 ::S2264C1(){ note_ctor("S2264C1", this);} // tgen

static void Test_S2264C1()
{
  extern Class_Descriptor cd_S2264C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(106,160)];
    init_test(&cd_S2264C1, buf);
    S2264C1 *dp, &lv = *(dp=new (buf) S2264C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(840,636), "sizeof(S2264C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2264C1)");
    check_base_class_offset(lv, (S2264C4_nt*)(S2264C3_nt*)(S2264C2_nt*), 0, "S2264C1");
    check_base_class_offset(lv, (S2264C3_nt*)(S2264C2_nt*), 0, "S2264C1");
    check_base_class_offset(lv, (S2264C2_nt*), 0, "S2264C1");
    test_class_info(&lv, &cd_S2264C1);
    dp->~S2264C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2264C1(Test_S2264C1, "S2264C1", ABISELECT(840,636));

#else // __cplusplus

extern void _ZN7S2264C1C1Ev();
extern void _ZN7S2264C1D1Ev();
Name_Map name_map_S2264C1[] = {
  NSPAIR(_ZN7S2264C1C1Ev),
  NSPAIR(_ZN7S2264C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C4_nt;
extern VTBL_ENTRY _ZTI10S2264C4_nt[];
extern  VTBL_ENTRY _ZTV10S2264C4_nt[];
extern Class_Descriptor cd_S2264C3_nt;
extern VTBL_ENTRY _ZTI10S2264C3_nt[];
extern  VTBL_ENTRY _ZTV10S2264C3_nt[];
extern Class_Descriptor cd_S2264C2_nt;
extern VTBL_ENTRY _ZTI10S2264C2_nt[];
extern  VTBL_ENTRY _ZTV10S2264C2_nt[];
static Base_Class bases_S2264C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C4_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_S2264C3_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_S2264C2_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 _ZTI7S2264C1[];
extern void _ZN7S2264C1D1Ev();
extern void _ZN7S2264C1D0Ev();
extern void _ZN10S2264C4_nt2v4Ev();
extern void _ZN10S2264C4_nt2v5Ev();
extern void _ZN10S2264C4_nt2v6Ev();
extern void _ZN10S2264C4_nt2v7Ev();
extern void _ZN10S2264C4_nt2v8Ev();
extern void _ZN10S2264C4_nt2v9Ev();
extern void _ZN10S2264C4_nt3v10Ev();
extern void _ZN10S2264C4_nt3v11Ev();
extern void _ZN10S2264C4_nt3v12Ev();
extern void _ZN10S2264C4_nt3v13Ev();
extern void _ZN10S2264C4_nt3v14Ev();
extern void _ZN10S2264C4_nt3v15Ev();
extern void _ZN10S2264C4_nt3v16Ev();
extern void _ZN10S2264C4_nt3v17Ev();
extern void _ZN10S2264C4_nt3v18Ev();
extern void _ZN10S2264C4_nt3v19Ev();
extern void _ZN10S2264C4_nt3v20Ev();
extern void _ZN10S2264C4_nt3v21Ev();
extern void _ZN10S2264C4_nt3v22Ev();
extern void _ZN10S2264C4_nt3v23Ev();
extern void _ZN10S2264C4_nt3v24Ev();
extern void _ZN10S2264C4_nt3v25Ev();
extern void _ZN10S2264C4_nt3v26Ev();
extern void _ZN10S2264C3_nt3v27Ev();
extern void _ZN10S2264C3_nt3v28Ev();
extern void _ZN10S2264C3_nt3v29Ev();
extern void _ZN10S2264C3_nt3v30Ev();
extern void _ZN10S2264C3_nt3v31Ev();
extern void _ZN10S2264C3_nt3v32Ev();
extern void _ZN10S2264C3_nt3v33Ev();
extern void _ZN10S2264C3_nt3v34Ev();
extern void _ZN10S2264C3_nt3v35Ev();
extern void _ZN10S2264C3_nt3v36Ev();
extern void _ZN10S2264C3_nt3v37Ev();
extern void _ZN10S2264C3_nt3v38Ev();
extern void _ZN10S2264C3_nt3v39Ev();
extern void _ZN10S2264C3_nt3v40Ev();
extern void _ZN10S2264C3_nt3v41Ev();
extern void _ZN10S2264C3_nt3v42Ev();
extern void _ZN10S2264C3_nt3v43Ev();
extern void _ZN10S2264C3_nt3v44Ev();
extern void _ZN10S2264C3_nt3v45Ev();
extern void _ZN10S2264C3_nt3v46Ev();
extern void _ZN10S2264C3_nt3v47Ev();
extern void _ZN10S2264C3_nt3v48Ev();
extern void _ZN10S2264C3_nt3v49Ev();
extern void _ZN10S2264C3_nt3v50Ev();
extern void _ZN10S2264C3_nt3v51Ev();
extern void _ZN10S2264C3_nt3v52Ev();
extern void _ZN10S2264C3_nt3v53Ev();
extern void _ZN10S2264C3_nt3v54Ev();
extern void _ZN10S2264C3_nt3v55Ev();
extern void _ZN10S2264C3_nt3v56Ev();
extern void _ZN10S2264C3_nt3v57Ev();
extern void _ZN10S2264C3_nt3v58Ev();
extern void _ZN10S2264C3_nt3v59Ev();
extern void _ZN10S2264C3_nt3v60Ev();
extern void _ZN10S2264C3_nt3v61Ev();
extern void _ZN10S2264C3_nt3v62Ev();
extern void _ZN10S2264C3_nt3v63Ev();
extern void _ZN10S2264C3_nt3v64Ev();
extern void _ZN10S2264C3_nt3v65Ev();
extern void _ZN10S2264C3_nt3v66Ev();
extern void _ZN10S2264C3_nt3v67Ev();
extern void _ZN10S2264C3_nt3v68Ev();
extern void _ZN10S2264C3_nt3v69Ev();
extern void _ZN10S2264C3_nt3v70Ev();
extern void _ZN10S2264C3_nt3v71Ev();
extern void _ZN10S2264C3_nt3v72Ev();
extern void _ZN10S2264C3_nt3v73Ev();
extern void _ZN10S2264C3_nt3v74Ev();
extern void _ZN10S2264C3_nt3v75Ev();
extern void _ZN10S2264C3_nt3v76Ev();
extern void _ZN10S2264C3_nt3v77Ev();
extern void _ZN10S2264C3_nt3v78Ev();
extern void _ZN10S2264C3_nt3v79Ev();
extern void _ZN10S2264C3_nt3v80Ev();
extern void _ZN10S2264C3_nt3v81Ev();
extern void _ZN10S2264C3_nt3v82Ev();
extern void _ZN10S2264C3_nt3v83Ev();
extern void _ZN10S2264C3_nt3v84Ev();
extern void _ZN10S2264C3_nt3v85Ev();
extern void _ZN10S2264C3_nt3v86Ev();
extern void _ZN10S2264C3_nt3v87Ev();
extern void _ZN10S2264C3_nt3v88Ev();
extern void _ZN10S2264C3_nt3v89Ev();
extern void _ZN10S2264C3_nt3v90Ev();
extern void _ZN10S2264C3_nt3v91Ev();
extern void _ZN10S2264C3_nt3v92Ev();
extern void _ZN10S2264C3_nt3v93Ev();
extern void _ZN10S2264C3_nt3v94Ev();
extern void _ZN10S2264C3_nt3v95Ev();
extern void _ZN10S2264C3_nt3v96Ev();
extern void _ZN10S2264C3_nt3v97Ev();
extern void _ZN10S2264C3_nt3v98Ev();
extern void _ZN10S2264C3_nt3v99Ev();
extern void _ZN10S2264C3_nt4v100Ev();
extern void _ZN10S2264C3_nt4v101Ev();
extern void _ZN10S2264C3_nt4v102Ev();
extern void _ZN10S2264C3_nt4v103Ev();
extern void _ZN10S2264C3_nt4v104Ev();
extern void _ZN10S2264C2_nt4v105Ev();
extern void _ZN10S2264C2_nt4v106Ev();
extern void _ZN10S2264C2_nt4v107Ev();
extern void _ZN10S2264C2_nt4v108Ev();
extern void _ZN10S2264C2_nt4v109Ev();
extern void _ZN10S2264C2_nt4v110Ev();
extern void _ZN10S2264C2_nt4v111Ev();
extern void _ZN10S2264C2_nt4v112Ev();
extern void _ZN10S2264C2_nt4v113Ev();
extern void _ZN10S2264C2_nt4v114Ev();
extern void _ZN7S2264C12v1Ev();
extern void _ZN7S2264C12v2Ev();
extern void _ZN7S2264C12v3Ev();
static  VTBL_ENTRY vtc_S2264C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2264C1[0]),
  (VTBL_ENTRY)&_ZN7S2264C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2264C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt2v4Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v17Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v18Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v19Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v20Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v21Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v22Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v23Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v24Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v25Ev,
  (VTBL_ENTRY)&_ZN10S2264C4_nt3v26Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v27Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v28Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v29Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v30Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v31Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v32Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v33Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v34Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v35Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v36Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v37Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v38Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v39Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v40Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v41Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v42Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v43Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v44Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v45Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v46Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v47Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v48Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v49Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v50Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v51Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v52Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v53Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v54Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v55Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v56Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v57Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v58Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v59Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v60Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v61Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v62Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v63Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v64Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v65Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v66Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v67Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v68Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v69Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v70Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v71Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S2264C3_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S2264C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S2264C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S2264C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S2264C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S2264C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S2264C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S2264C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S2264C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S2264C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S2264C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN7S2264C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2264C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2264C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S2264C1[];
extern  VTBL_ENTRY _ZTV7S2264C1[];
Class_Descriptor cd_S2264C1 = {  "S2264C1", // class name
  bases_S2264C1, 3,
  &(vtc_S2264C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(840,636), // object size
  NSPAIRA(_ZTI7S2264C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2264C1),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  S3052C3  {
  int  :0;
  int s3052c3f1[7];
  void *s3052c3f2;
  virtual void  v2(); // _ZN7S3052C32v2Ev
  ~S3052C3(); // tgen
  S3052C3(); // tgen
};
//SIG(-1 S3052C3) C1{ v1 Fi:0 Fi[7] Fp}


void  S3052C3 ::v2(){vfunc_called(this, "_ZN7S3052C32v2Ev");}
S3052C3 ::~S3052C3(){ note_dtor("S3052C3", this);} // tgen
S3052C3 ::S3052C3(){ note_ctor("S3052C3", this);} // tgen

static void Test_S3052C3()
{
  extern Class_Descriptor cd_S3052C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S3052C3, buf);
    S3052C3 *dp, &lv = *(dp=new (buf) S3052C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S3052C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3052C3)");
    check_field_offset(lv, s3052c3f1, ABISELECT(8,4), "S3052C3.s3052c3f1");
    check_field_offset(lv, s3052c3f2, ABISELECT(40,32), "S3052C3.s3052c3f2");
    test_class_info(&lv, &cd_S3052C3);
    dp->~S3052C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3052C3(Test_S3052C3, "S3052C3", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN7S3052C3C1Ev();
extern void _ZN7S3052C3D1Ev();
Name_Map name_map_S3052C3[] = {
  NSPAIR(_ZN7S3052C3C1Ev),
  NSPAIR(_ZN7S3052C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3052C3[];
extern void _ZN7S3052C32v2Ev();
static  VTBL_ENTRY vtc_S3052C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C3[0]),
  (VTBL_ENTRY)&_ZN7S3052C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S3052C3[];
extern  VTBL_ENTRY _ZTV7S3052C3[];
Class_Descriptor cd_S3052C3 = {  "S3052C3", // class name
  0,0,//no base classes
  &(vtc_S3052C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI7S3052C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3052C3),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  S3052C6  {
  short s3052c6f0[6];
  __tsi64 s3052c6f1[8];
  int s3052c6f2;
  virtual  ~S3052C6(); // _ZN7S3052C6D1Ev
  virtual void  v3(); // _ZN7S3052C62v3Ev
  S3052C6(); // tgen
};
//SIG(-1 S3052C6) C1{ vd v1 Fs[6] FL[8] Fi}


 S3052C6 ::~S3052C6(){ note_dtor("S3052C6", this);}
void  S3052C6 ::v3(){vfunc_called(this, "_ZN7S3052C62v3Ev");}
S3052C6 ::S3052C6(){ note_ctor("S3052C6", this);} // tgen

static void Test_S3052C6()
{
  extern Class_Descriptor cd_S3052C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,22)];
    init_test(&cd_S3052C6, buf);
    S3052C6 *dp, &lv = *(dp=new (buf) S3052C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,84), "sizeof(S3052C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3052C6)");
    check_field_offset(lv, s3052c6f0, ABISELECT(8,4), "S3052C6.s3052c6f0");
    check_field_offset(lv, s3052c6f1, ABISELECT(24,16), "S3052C6.s3052c6f1");
    check_field_offset(lv, s3052c6f2, ABISELECT(88,80), "S3052C6.s3052c6f2");
    test_class_info(&lv, &cd_S3052C6);
    dp->~S3052C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3052C6(Test_S3052C6, "S3052C6", ABISELECT(96,84));

#else // __cplusplus

extern void _ZN7S3052C6C1Ev();
extern void _ZN7S3052C6D1Ev();
Name_Map name_map_S3052C6[] = {
  NSPAIR(_ZN7S3052C6C1Ev),
  NSPAIR(_ZN7S3052C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3052C6[];
extern void _ZN7S3052C6D1Ev();
extern void _ZN7S3052C6D0Ev();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY vtc_S3052C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C6[0]),
  (VTBL_ENTRY)&_ZN7S3052C6D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C6D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern VTBL_ENTRY _ZTI7S3052C6[];
extern  VTBL_ENTRY _ZTV7S3052C6[];
Class_Descriptor cd_S3052C6 = {  "S3052C6", // class name
  0,0,//no base classes
  &(vtc_S3052C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,84), // object size
  NSPAIRA(_ZTI7S3052C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3052C6),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  S3052C8  : virtual S3052C6 {
  __tsi64 s3052c8f0;
  void *s3052c8f1;
  __tsi64 s3052c8f2:54;
  ~S3052C8(); // tgen
  S3052C8(); // tgen
};
//SIG(-1 S3052C8) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} FL Fp FL:54}


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

static void Test_S3052C8()
{
  extern Class_Descriptor cd_S3052C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,28)];
    init_test(&cd_S3052C8, buf);
    S3052C8 *dp, &lv = *(dp=new (buf) S3052C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,108), "sizeof(S3052C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3052C8)");
    check_base_class_offset(lv, (S3052C6*), ABISELECT(32,24), "S3052C8");
    check_field_offset(lv, s3052c8f0, ABISELECT(8,4), "S3052C8.s3052c8f0");
    check_field_offset(lv, s3052c8f1, ABISELECT(16,12), "S3052C8.s3052c8f1");
    set_bf_and_test(lv, s3052c8f2, ABISELECT(24,16), 0, 54, 1, "S3052C8");
    set_bf_and_test(lv, s3052c8f2, ABISELECT(24,16), 0, 54, hide_sll(1LL<<53), "S3052C8");
    test_class_info(&lv, &cd_S3052C8);
    dp->~S3052C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3052C8(Test_S3052C8, "S3052C8", ABISELECT(128,108));

#else // __cplusplus

extern void _ZN7S3052C8C1Ev();
extern void _ZN7S3052C8D1Ev();
Name_Map name_map_S3052C8[] = {
  NSPAIR(_ZN7S3052C8C1Ev),
  NSPAIR(_ZN7S3052C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C6;
extern VTBL_ENTRY _ZTI7S3052C6[];
extern  VTBL_ENTRY _ZTV7S3052C6[];
static Base_Class bases_S3052C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C6,    ABISELECT(32,24), //bcp->offset
    5, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S3052C8[];
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZThn32_N7S3052C8D1Ev,_ZThn24_N7S3052C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void ABISELECT(_ZThn32_N7S3052C8D0Ev,_ZThn24_N7S3052C8D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY vtc_S3052C8[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
  0,
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern VTBL_ENTRY _ZTV7S3052C8[];
static  VTT_ENTRY vtt_S3052C8[] = {
  {&(_ZTV7S3052C8[3]),  3,12},
  {&(_ZTV7S3052C8[9]),  9,12},
};
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
static VTBL_ENTRY alt_thunk_names1[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3052C8D0Ev,_ZThn24_N7S3052C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S3052C8D1Ev,_ZThn24_N7S3052C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3052C8 = {  "S3052C8", // class name
  bases_S3052C8, 1,
  &(vtc_S3052C8[0]), // expected_vtbl_contents
  &(vtt_S3052C8[0]), // expected_vtt_contents
  ABISELECT(128,108), // object size
  NSPAIRA(_ZTI7S3052C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3052C8),12, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3052C8),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names1,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3052C7  : virtual S3052C6 , S3052C8 {
  char  :0;
  void *s3052c7f1[8];
  char s3052c7f2;
  virtual void  v4(); // _ZN7S3052C72v4Ev
  virtual void  v5(); // _ZN7S3052C72v5Ev
  ~S3052C7(); // tgen
  S3052C7(); // tgen
};
//SIG(-1 S3052C7) C1{ VBC2{ vd v3 Fs[6] FL[8] Fi} BC3{ VBC2 FL Fp FL:54} v1 v2 Fc:0 Fp[8] Fc}


void  S3052C7 ::v4(){vfunc_called(this, "_ZN7S3052C72v4Ev");}
void  S3052C7 ::v5(){vfunc_called(this, "_ZN7S3052C72v5Ev");}
S3052C7 ::~S3052C7(){ note_dtor("S3052C7", this);} // tgen
S3052C7 ::S3052C7(){ note_ctor("S3052C7", this);} // tgen

static void Test_S3052C7()
{
  extern Class_Descriptor cd_S3052C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,37)];
    init_test(&cd_S3052C7, buf);
    S3052C7 *dp, &lv = *(dp=new (buf) S3052C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,144), "sizeof(S3052C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3052C7)");
    check_base_class_offset(lv, (S3052C6*), ABISELECT(104,60), "S3052C7");
    check_base_class_offset(lv, (S3052C6*)(S3052C8*), ABISELECT(104,60), "S3052C7");
    check_base_class_offset(lv, (S3052C8*), 0, "S3052C7");
    check_field_offset(lv, s3052c7f1, ABISELECT(32,24), "S3052C7.s3052c7f1");
    check_field_offset(lv, s3052c7f2, ABISELECT(96,56), "S3052C7.s3052c7f2");
    test_class_info(&lv, &cd_S3052C7);
    dp->~S3052C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3052C7(Test_S3052C7, "S3052C7", ABISELECT(200,144));

#else // __cplusplus

extern void _ZN7S3052C7C1Ev();
extern void _ZN7S3052C7D1Ev();
Name_Map name_map_S3052C7[] = {
  NSPAIR(_ZN7S3052C7C1Ev),
  NSPAIR(_ZN7S3052C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C6;
extern VTBL_ENTRY _ZTI7S3052C6[];
extern  VTBL_ENTRY _ZTV7S3052C6[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
static Base_Class bases_S3052C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C6,    ABISELECT(104,60), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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_S3052C8,    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 _ZTI7S3052C7[];
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZThn104_N7S3052C7D1Ev,_ZThn60_N7S3052C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void ABISELECT(_ZThn104_N7S3052C7D0Ev,_ZThn60_N7S3052C7D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY vtc_S3052C7[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern VTBL_ENTRY _ZTV7S3052C7[];
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C8__7S3052C7[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZThn104_N7S3052C8D1Ev,_ZThn60_N7S3052C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void ABISELECT(_ZThn104_N7S3052C8D0Ev,_ZThn60_N7S3052C8D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C8__7S3052C7[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
static  VTT_ENTRY vtt_S3052C7[] = {
  {&(_ZTV7S3052C7[3]),  3,14},
  {&(_tg__ZTV7S3052C8__7S3052C7[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C8__7S3052C7[4]),  4,7},
  {&(_ZTV7S3052C7[11]),  11,14},
};
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
static VTBL_ENTRY alt_thunk_names2[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3052C8D0Ev,_ZThn60_N7S3052C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3052C8D1Ev,_ZThn60_N7S3052C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3052C7D0Ev,_ZThn60_N7S3052C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3052C7D1Ev,_ZThn60_N7S3052C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3052C7 = {  "S3052C7", // class name
  bases_S3052C7, 2,
  &(vtc_S3052C7[0]), // expected_vtbl_contents
  &(vtt_S3052C7[0]), // expected_vtt_contents
  ABISELECT(200,144), // object size
  NSPAIRA(_ZTI7S3052C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3052C7),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3052C7),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names2,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3052C5  : virtual S3052C6 , S3052C7 {
  void *s3052c5f0[3];
  char s3052c5f1:8;
  int s3052c5f2[2];
  char s3052c5f3;
  ::S3052C6 s3052c5f4;
  void *s3052c5f5[3];
  __tsi64 s3052c5f6[5];
  int s3052c5f7;
  ~S3052C5(); // tgen
  S3052C5(); // tgen
};
//SIG(-1 S3052C5) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} BC3{ VBC2 BC4{ VBC2 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC2 Fp[3] FL[5] Fi}


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

static void Test_S3052C5()
{
  extern Class_Descriptor cd_S3052C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(52,79)];
    init_test(&cd_S3052C5, buf);
    S3052C5 *dp, &lv = *(dp=new (buf) S3052C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(408,312), "sizeof(S3052C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3052C5)");
    check_base_class_offset(lv, (S3052C6*), ABISELECT(312,228), "S3052C5");
    check_base_class_offset(lv, (S3052C6*)(S3052C7*), ABISELECT(312,228), "S3052C5");
    check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*), ABISELECT(312,228), "S3052C5");
    check_base_class_offset(lv, (S3052C8*)(S3052C7*), 0, "S3052C5");
    check_base_class_offset(lv, (S3052C7*), 0, "S3052C5");
    check_field_offset(lv, s3052c5f0, ABISELECT(104,60), "S3052C5.s3052c5f0");
    set_bf_and_test(lv, s3052c5f1, ABISELECT(128,72), 0, 8, 1, "S3052C5");
    set_bf_and_test(lv, s3052c5f1, ABISELECT(128,72), 0, 8, hide_sll(1LL<<7), "S3052C5");
    check_field_offset(lv, s3052c5f2, ABISELECT(132,76), "S3052C5.s3052c5f2");
    check_field_offset(lv, s3052c5f3, ABISELECT(140,84), "S3052C5.s3052c5f3");
    check_field_offset(lv, s3052c5f4, ABISELECT(144,88), "S3052C5.s3052c5f4");
    check_field_offset(lv, s3052c5f5, ABISELECT(240,172), "S3052C5.s3052c5f5");
    check_field_offset(lv, s3052c5f6, ABISELECT(264,184), "S3052C5.s3052c5f6");
    check_field_offset(lv, s3052c5f7, ABISELECT(304,224), "S3052C5.s3052c5f7");
    test_class_info(&lv, &cd_S3052C5);
    dp->~S3052C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3052C5(Test_S3052C5, "S3052C5", ABISELECT(408,312));

#else // __cplusplus

extern void _ZN7S3052C5C1Ev();
extern void _ZN7S3052C5D1Ev();
Name_Map name_map_S3052C5[] = {
  NSPAIR(_ZN7S3052C5C1Ev),
  NSPAIR(_ZN7S3052C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C6;
extern VTBL_ENTRY _ZTI7S3052C6[];
extern  VTBL_ENTRY _ZTV7S3052C6[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
static Base_Class bases_S3052C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C6,    ABISELECT(312,228), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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
  1, 1},
  {&cd_S3052C8,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3052C7,    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 _ZTI7S3052C5[];
extern void _ZN7S3052C5D1Ev();
extern void _ZN7S3052C5D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev)();
extern void ABISELECT(_ZThn312_N7S3052C5D1Ev,_ZThn228_N7S3052C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev)();
extern void ABISELECT(_ZThn312_N7S3052C5D0Ev,_ZThn228_N7S3052C5D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY vtc_S3052C5[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&_ZN7S3052C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern VTBL_ENTRY _ZTV7S3052C5[];
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__7S3052C5[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C7__7S3052C5[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZThn312_N7S3052C8D1Ev,_ZThn228_N7S3052C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void ABISELECT(_ZThn312_N7S3052C8D0Ev,_ZThn228_N7S3052C8D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C7__7S3052C5[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZThn312_N7S3052C7D1Ev,_ZThn228_N7S3052C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void ABISELECT(_ZThn312_N7S3052C7D0Ev,_ZThn228_N7S3052C7D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C7__7S3052C5[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
static  VTT_ENTRY vtt_S3052C5[] = {
  {&(_ZTV7S3052C5[3]),  3,14},
  {&(_tg__ZTV7S3052C7__7S3052C5[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C7__7S3052C5[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C7__7S3052C5[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C7__7S3052C5[4]),  4,7},
  {&(_ZTV7S3052C5[11]),  11,14},
};
extern VTBL_ENTRY _ZTI7S3052C5[];
extern  VTBL_ENTRY _ZTV7S3052C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C5[];
static VTBL_ENTRY alt_thunk_names3[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S3052C7D0Ev,_ZThn228_N7S3052C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S3052C7D1Ev,_ZThn228_N7S3052C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S3052C8D0Ev,_ZThn228_N7S3052C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S3052C8D1Ev,_ZThn228_N7S3052C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S3052C5D0Ev,_ZThn228_N7S3052C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S3052C5D1Ev,_ZThn228_N7S3052C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3052C5 = {  "S3052C5", // class name
  bases_S3052C5, 3,
  &(vtc_S3052C5[0]), // expected_vtbl_contents
  &(vtt_S3052C5[0]), // expected_vtt_contents
  ABISELECT(408,312), // object size
  NSPAIRA(_ZTI7S3052C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3052C5),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3052C5),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names3,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3052C10  {
  void *s3052c10f0;
  int s3052c10f1;
  __tsi64 s3052c10f2;
  void *s3052c10f3;
  int s3052c10f4;
  void  mf3052c10(); // _ZN8S3052C109mf3052c10Ev
};
//SIG(-1 S3052C10) C1{ m Fp Fi FL Fp Fi}


void  S3052C10 ::mf3052c10(){}

static void Test_S3052C10()
{
  {
    init_simple_test("S3052C10");
    S3052C10 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S3052C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3052C10)");
    check_field_offset(lv, s3052c10f0, 0, "S3052C10.s3052c10f0");
    check_field_offset(lv, s3052c10f1, ABISELECT(8,4), "S3052C10.s3052c10f1");
    check_field_offset(lv, s3052c10f2, ABISELECT(16,8), "S3052C10.s3052c10f2");
    check_field_offset(lv, s3052c10f3, ABISELECT(24,16), "S3052C10.s3052c10f3");
    check_field_offset(lv, s3052c10f4, ABISELECT(32,20), "S3052C10.s3052c10f4");
  }
}
static Arrange_To_Call_Me vS3052C10(Test_S3052C10, "S3052C10", ABISELECT(40,24));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S3052C10[];
VTBL_ENTRY *P__ZTI8S3052C10 = _ZTI8S3052C10; 
Class_Descriptor cd_S3052C10 = {  "S3052C10", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S3052C10),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  S3052C12  {
  ::S3052C7 s3052c12f0;
  void  mf3052c12(); // _ZN8S3052C129mf3052c12Ev
  virtual  ~S3052C12(); // _ZN8S3052C12D1Ev
  S3052C12(); // tgen
};
//SIG(-1 S3052C12) C1{ vd m FC2{ VBC3{ vd v3 Fs[6] FL[8] Fi} BC4{ VBC3 FL Fp FL:54} v1 v2 Fc:0 Fp[8] Fc}}


void  S3052C12 ::mf3052c12(){}
 S3052C12 ::~S3052C12(){ note_dtor("S3052C12", this);}
S3052C12 ::S3052C12(){ note_ctor("S3052C12", this);} // tgen

static void Test_S3052C12()
{
  extern Class_Descriptor cd_S3052C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,38)];
    init_test(&cd_S3052C12, buf);
    S3052C12 *dp, &lv = *(dp=new (buf) S3052C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,148), "sizeof(S3052C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3052C12)");
    check_field_offset(lv, s3052c12f0, ABISELECT(8,4), "S3052C12.s3052c12f0");
    test_class_info(&lv, &cd_S3052C12);
    dp->~S3052C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3052C12(Test_S3052C12, "S3052C12", ABISELECT(208,148));

#else // __cplusplus

extern void _ZN8S3052C12C1Ev();
extern void _ZN8S3052C12D1Ev();
Name_Map name_map_S3052C12[] = {
  NSPAIR(_ZN8S3052C12C1Ev),
  NSPAIR(_ZN8S3052C12D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S3052C12[];
extern void _ZN8S3052C12D1Ev();
extern void _ZN8S3052C12D0Ev();
static  VTBL_ENTRY vtc_S3052C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C12[0]),
  (VTBL_ENTRY)&_ZN8S3052C12D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C12D0Ev,
};
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
Class_Descriptor cd_S3052C12 = {  "S3052C12", // class name
  0,0,//no base classes
  &(vtc_S3052C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,148), // object size
  NSPAIRA(_ZTI8S3052C12),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S3052C12),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

union  S3052C13  {
  void *s3052c13f0;
  int s3052c13f1;
  int s3052c13f2;
  int s3052c13f3;
  int s3052c13f4:19;
  void *s3052c13f5;
  char s3052c13f6;
  long double s3052c13f7;
  int s3052c13f8;
  short s3052c13f9;
  void  mf3052c13(); // _ZN8S3052C139mf3052c13Ev
};
//SIG(1 S3052C13) U1{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}

#endif // __cplusplus
#ifdef __cplusplus

struct  S3052C11  : virtual S3052C6 , S3052C7 , S3052C5 , S3052C12 , virtual S3052C8 {
  void *s3052c11f0;
  long s3052c11f1;
  ::S3052C5 s3052c11f2;
  ::S3052C12 s3052c11f3;
  ::S3052C8 s3052c11f4;
  int s3052c11f5[2];
  ::S3052C13 s3052c11f6[9];
  ~S3052C11(); // tgen
  S3052C11(); // tgen
};
//SIG(-1 S3052C11) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} BC3{ VBC2 BC4{ VBC2 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} BC5{ VBC2 BC3 Fp[3] Fc:8 Fi[2] Fc FC2 Fp[3] FL[5] Fi} BC6{ vd m FC3} VBC4 Fp Fl FC5 FC6 FC4 Fi[2] FU7{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}


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

static void Test_S3052C11()
{
  extern Class_Descriptor cd_S3052C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(105,310)];
    init_test(&cd_S3052C11, buf);
    S3052C11 *dp, &lv = *(dp=new (buf) S3052C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1664,1236), "sizeof(S3052C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3052C11)");
    check_base_class_offset(lv, (S3052C6*), ABISELECT(1536,1128), "S3052C11");
    /*is_ambiguous_... S3052C11::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C7*), ABISELECT(1536,1128), "S3052C11");
    /*is_ambiguous_... S3052C11::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*), ABISELECT(1536,1128), "S3052C11");
    check_base_class_offset(lv, (S3052C6*)(S3052C5*), ABISELECT(1536,1128), "S3052C11");
    check_base_class_offset(lv, (S3052C6*)(S3052C7*)(S3052C5*), ABISELECT(1536,1128), "S3052C11");
    check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*)(S3052C5*), ABISELECT(1536,1128), "S3052C11");
    /*is_ambiguous_... S3052C11::S3052C8 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*), ABISELECT(1536,1128), "S3052C11");
    /*is_ambiguous_... S3052C11::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C7*), 0, "S3052C11");
    /*is_ambiguous_... S3052C11::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C7*), 0, "S3052C11");
    check_base_class_offset(lv, (S3052C8*)(S3052C7*)(S3052C5*), ABISELECT(104,60), "S3052C11");
    check_base_class_offset(lv, (S3052C7*)(S3052C5*), ABISELECT(104,60), "S3052C11");
    check_base_class_offset(lv, (S3052C5*), ABISELECT(104,60), "S3052C11");
    check_base_class_offset(lv, (S3052C12*), ABISELECT(416,288), "S3052C11");
    /*is_ambiguous_... S3052C11::S3052C8 */ AMB_check_base_class_offset(lv, (S3052C8*), ABISELECT(1632,1212), "S3052C11");
    check_field_offset(lv, s3052c11f0, ABISELECT(624,436), "S3052C11.s3052c11f0");
    check_field_offset(lv, s3052c11f1, ABISELECT(632,440), "S3052C11.s3052c11f1");
    check_field_offset(lv, s3052c11f2, ABISELECT(640,444), "S3052C11.s3052c11f2");
    check_field_offset(lv, s3052c11f3, ABISELECT(1048,756), "S3052C11.s3052c11f3");
    check_field_offset(lv, s3052c11f4, ABISELECT(1256,904), "S3052C11.s3052c11f4");
    check_field_offset(lv, s3052c11f5, ABISELECT(1384,1012), "S3052C11.s3052c11f5");
    check_field_offset(lv, s3052c11f6, ABISELECT(1392,1020), "S3052C11.s3052c11f6");
    test_class_info(&lv, &cd_S3052C11);
    dp->~S3052C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3052C11(Test_S3052C11, "S3052C11", ABISELECT(1664,1236));

#else // __cplusplus

extern void _ZN8S3052C11C1Ev();
extern void _ZN8S3052C11D1Ev();
Name_Map name_map_S3052C11[] = {
  NSPAIR(_ZN8S3052C11C1Ev),
  NSPAIR(_ZN8S3052C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C6;
extern VTBL_ENTRY _ZTI7S3052C6[];
extern  VTBL_ENTRY _ZTV7S3052C6[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C5;
extern VTBL_ENTRY _ZTI7S3052C5[];
extern  VTBL_ENTRY _ZTV7S3052C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C5[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
static Base_Class bases_S3052C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C6,    ABISELECT(1536,1128), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //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
  1, 1},
  {&cd_S3052C8,    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
    3, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3052C7,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3052C8,    ABISELECT(104,60), //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
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(104,60), //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
    5, //immediately_derived
  0, 0},
  {&cd_S3052C5,    ABISELECT(104,60), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //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},
  {&cd_S3052C12,    ABISELECT(416,288), //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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3052C8,    ABISELECT(1632,1212), //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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3052C11[];
extern void _ZN8S3052C11D1Ev();
extern void _ZN8S3052C11D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZThn104_N8S3052C11D1Ev,_ZThn60_N8S3052C11D1Ev)();
extern void ABISELECT(_ZThn104_N8S3052C11D0Ev,_ZThn60_N8S3052C11D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZThn416_N8S3052C11D1Ev,_ZThn288_N8S3052C11D1Ev)();
extern void ABISELECT(_ZThn416_N8S3052C11D0Ev,_ZThn288_N8S3052C11D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3052C11D1Ev,_ZTv0_n12_N8S3052C11D1Ev)();
extern void ABISELECT(_ZThn1536_N8S3052C11D1Ev,_ZThn1128_N8S3052C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3052C11D0Ev,_ZTv0_n12_N8S3052C11D0Ev)();
extern void ABISELECT(_ZThn1536_N8S3052C11D0Ev,_ZThn1128_N8S3052C11D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
extern void ABISELECT(_ZTv0_n32_N8S3052C11D1Ev,_ZTv0_n16_N8S3052C11D1Ev)();
extern void ABISELECT(_ZThn1632_N8S3052C11D1Ev,_ZThn1212_N8S3052C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C11D0Ev,_ZTv0_n16_N8S3052C11D0Ev)();
extern void ABISELECT(_ZThn1632_N8S3052C11D0Ev,_ZThn1212_N8S3052C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3052C11[] = {
  ABISELECT(1632,1212),
  ABISELECT(1536,1128),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C11[0]),
  (VTBL_ENTRY)&_ZN8S3052C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C11D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  ABISELECT(1432,1068),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S3052C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N8S3052C11D1Ev,_ZThn60_N8S3052C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N8S3052C11D0Ev,_ZThn60_N8S3052C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  ABISELECT(-416,-288),
  (VTBL_ENTRY)&(_ZTI8S3052C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn416_N8S3052C11D1Ev,_ZThn288_N8S3052C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn416_N8S3052C11D0Ev,_ZThn288_N8S3052C11D0Ev),
  0,
  ABISELECT(-1536,-1128),
  ABISELECT(-1536,-1128),
  (VTBL_ENTRY)&(_ZTI8S3052C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C11D1Ev,_ZTv0_n12_N8S3052C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C11D0Ev,_ZTv0_n12_N8S3052C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
  ABISELECT(-1632,-1212),
  ABISELECT(-96,-84),
  ABISELECT(-1632,-1212),
  (VTBL_ENTRY)&(_ZTI8S3052C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C11D1Ev,_ZTv0_n16_N8S3052C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C11D0Ev,_ZTv0_n16_N8S3052C11D0Ev),
};
extern VTBL_ENTRY _ZTV8S3052C11[];
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__8S3052C11[] = {
  ABISELECT(1536,1128),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C7__8S3052C11[] = {
  ABISELECT(1536,1128),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZThn1536_N7S3052C8D1Ev,_ZThn1128_N7S3052C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void ABISELECT(_ZThn1536_N7S3052C8D0Ev,_ZThn1128_N7S3052C8D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C7__8S3052C11[] = {
  0,
  ABISELECT(-1536,-1128),
  ABISELECT(-1536,-1128),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZThn1536_N7S3052C7D1Ev,_ZThn1128_N7S3052C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void ABISELECT(_ZThn1536_N7S3052C7D0Ev,_ZThn1128_N7S3052C7D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C7__8S3052C11[] = {
  0,
  ABISELECT(-1536,-1128),
  ABISELECT(-1536,-1128),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN7S3052C5D1Ev();
extern void _ZN7S3052C5D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C5__8S3052C11[] = {
  ABISELECT(1432,1068),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&_ZN7S3052C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C77S3052C5__A1__8S3052C11[] = {
  ABISELECT(1432,1068),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C77S3052C5__A1__8S3052C11[] = {
  ABISELECT(1432,1068),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZThn1432_N7S3052C8D1Ev,_ZThn1068_N7S3052C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void ABISELECT(_ZThn1432_N7S3052C8D0Ev,_ZThn1068_N7S3052C8D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C77S3052C5__A1__8S3052C11[] = {
  0,
  ABISELECT(-1432,-1068),
  ABISELECT(-1432,-1068),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZThn1432_N7S3052C7D1Ev,_ZThn1068_N7S3052C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void ABISELECT(_ZThn1432_N7S3052C7D0Ev,_ZThn1068_N7S3052C7D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C77S3052C5__A1__8S3052C11[] = {
  0,
  ABISELECT(-1432,-1068),
  ABISELECT(-1432,-1068),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev)();
extern void ABISELECT(_ZThn1432_N7S3052C5D1Ev,_ZThn1068_N7S3052C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev)();
extern void ABISELECT(_ZThn1432_N7S3052C5D0Ev,_ZThn1068_N7S3052C5D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C5__8S3052C11[] = {
  0,
  ABISELECT(-1432,-1068),
  ABISELECT(-1432,-1068),
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C8__A2__8S3052C11[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C8__A2__8S3052C11[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
static  VTT_ENTRY vtt_S3052C11[] = {
  {&(_ZTV8S3052C11[4]),  4,32},
  {&(_tg__ZTV7S3052C7__8S3052C11[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C7__8S3052C11[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C7__8S3052C11[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C7__8S3052C11[4]),  4,7},
  {&(_tg__ZTV7S3052C5__8S3052C11[3]),  3,7},
  {&(_tg__ZTV7S3052C77S3052C5__A1__8S3052C11[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C77S3052C5__A1__8S3052C11[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C77S3052C5__A1__8S3052C11[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C77S3052C5__A1__8S3052C11[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C5__8S3052C11[4]),  4,7},
  {&(_ZTV8S3052C11[23]),  23,32},
  {&(_ZTV8S3052C11[11]),  11,32},
  {&(_ZTV8S3052C11[30]),  30,32},
  {&(_tg__ZTV7S3052C8__A2__8S3052C11[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C8__A2__8S3052C11[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S3052C11[];
extern  VTBL_ENTRY _ZTV8S3052C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C11[];
static VTBL_ENTRY alt_thunk_names4[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N7S3052C5D0Ev,_ZThn1068_N7S3052C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N7S3052C5D1Ev,_ZThn1068_N7S3052C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N7S3052C7D0Ev,_ZThn1068_N7S3052C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N7S3052C7D0Ev,_ZThn1128_N7S3052C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N7S3052C7D1Ev,_ZThn1068_N7S3052C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N7S3052C7D1Ev,_ZThn1128_N7S3052C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N7S3052C8D0Ev,_ZThn1068_N7S3052C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N7S3052C8D0Ev,_ZThn1128_N7S3052C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N7S3052C8D1Ev,_ZThn1068_N7S3052C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N7S3052C8D1Ev,_ZThn1128_N7S3052C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C11D0Ev,_ZTv0_n16_N8S3052C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1632_N8S3052C11D0Ev,_ZThn1212_N8S3052C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C11D1Ev,_ZTv0_n16_N8S3052C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1632_N8S3052C11D1Ev,_ZThn1212_N8S3052C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C11D0Ev,_ZTv0_n12_N8S3052C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S3052C11D0Ev,_ZThn1128_N8S3052C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C11D1Ev,_ZTv0_n12_N8S3052C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S3052C11D1Ev,_ZThn1128_N8S3052C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3052C11 = {  "S3052C11", // class name
  bases_S3052C11, 8,
  &(vtc_S3052C11[0]), // expected_vtbl_contents
  &(vtt_S3052C11[0]), // expected_vtt_contents
  ABISELECT(1664,1236), // object size
  NSPAIRA(_ZTI8S3052C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S3052C11),32, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3052C11),16, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names4,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3052C9  : S3052C10 , virtual S3052C7 {
  void *s3052c9f0;
  char s3052c9f1[4];
  int s3052c9f2:11;
  void *s3052c9f3[2];
  int s3052c9f4[6];
  ::S3052C11 s3052c9f5[6];
  ~S3052C9(); // tgen
  S3052C9(); // tgen
};
//SIG(-1 S3052C9) C1{ BC2{ m Fp Fi FL Fp Fi} VBC3{ VBC4{ vd v1 Fs[6] FL[8] Fi} BC5{ VBC4 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp Fc[4] Fi:11 Fp[2] Fi[6] FC6{ VBC4 BC3 BC7{ VBC4 BC3 Fp[3] Fc:8 Fi[2] Fc FC4 Fp[3] FL[5] Fi} BC8{ vd m FC3} VBC5 Fp Fl FC7 FC8 FC5 Fi[2] FU9{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]}


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

static void Test_S3052C9()
{
  extern Class_Descriptor cd_S3052C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(645,1909)];
    init_test(&cd_S3052C9, buf);
    S3052C9 *dp, &lv = *(dp=new (buf) S3052C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(10304,7632), "sizeof(S3052C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3052C9)");
    check_base_class_offset(lv, (S3052C10*), ABISELECT(8,4), "S3052C9");
    check_base_class_offset(lv, (S3052C6*)(S3052C7*), ABISELECT(10200,7548), "S3052C9");
    check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*), ABISELECT(10200,7548), "S3052C9");
    check_base_class_offset(lv, (S3052C8*)(S3052C7*), ABISELECT(10096,7488), "S3052C9");
    check_base_class_offset(lv, (S3052C7*), ABISELECT(10096,7488), "S3052C9");
    check_field_offset(lv, s3052c9f0, ABISELECT(48,28), "S3052C9.s3052c9f0");
    check_field_offset(lv, s3052c9f1, ABISELECT(56,32), "S3052C9.s3052c9f1");
    set_bf_and_test(lv, s3052c9f2, ABISELECT(60,36), 0, 11, 1, "S3052C9");
    set_bf_and_test(lv, s3052c9f2, ABISELECT(60,36), 0, 11, hide_sll(1LL<<10), "S3052C9");
    check_field_offset(lv, s3052c9f3, ABISELECT(64,40), "S3052C9.s3052c9f3");
    check_field_offset(lv, s3052c9f4, ABISELECT(80,48), "S3052C9.s3052c9f4");
    check_field_offset(lv, s3052c9f5, ABISELECT(112,72), "S3052C9.s3052c9f5");
    test_class_info(&lv, &cd_S3052C9);
    dp->~S3052C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3052C9(Test_S3052C9, "S3052C9", ABISELECT(10304,7632));

#else // __cplusplus

extern void _ZN7S3052C9C1Ev();
extern void _ZN7S3052C9D1Ev();
Name_Map name_map_S3052C9[] = {
  NSPAIR(_ZN7S3052C9C1Ev),
  NSPAIR(_ZN7S3052C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S3052C6;
extern VTBL_ENTRY _ZTI7S3052C6[];
extern  VTBL_ENTRY _ZTV7S3052C6[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
static Base_Class bases_S3052C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C10,    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_S3052C6,    ABISELECT(10200,7548), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //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_S3052C8,    ABISELECT(10096,7488), //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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(10096,7488), //bcp->offset
    6, //bcp->virtual_function_table_offset
    6, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S3052C9[];
extern void _ZN7S3052C9D1Ev();
extern void _ZN7S3052C9D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S3052C9D1Ev,_ZTv0_n16_N7S3052C9D1Ev)();
extern void ABISELECT(_ZThn10096_N7S3052C9D1Ev,_ZThn7488_N7S3052C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3052C9D0Ev,_ZTv0_n16_N7S3052C9D0Ev)();
extern void ABISELECT(_ZThn10096_N7S3052C9D0Ev,_ZThn7488_N7S3052C9D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTv0_n24_N7S3052C9D1Ev,_ZTv0_n12_N7S3052C9D1Ev)();
extern void ABISELECT(_ZThn10200_N7S3052C9D1Ev,_ZThn7548_N7S3052C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C9D0Ev,_ZTv0_n12_N7S3052C9D0Ev)();
extern void ABISELECT(_ZThn10200_N7S3052C9D0Ev,_ZThn7548_N7S3052C9D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY vtc_S3052C9[] = {
  ABISELECT(10200,7548),
  ABISELECT(10096,7488),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C9[0]),
  (VTBL_ENTRY)&_ZN7S3052C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C9D0Ev,
  0,
  0,
  ABISELECT(-10096,-7488),
  ABISELECT(104,60),
  ABISELECT(-10096,-7488),
  (VTBL_ENTRY)&(_ZTI7S3052C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C9D1Ev,_ZTv0_n16_N7S3052C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C9D0Ev,_ZTv0_n16_N7S3052C9D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  0,
  ABISELECT(-10200,-7548),
  ABISELECT(-10200,-7548),
  (VTBL_ENTRY)&(_ZTI7S3052C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C9D1Ev,_ZTv0_n12_N7S3052C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C9D0Ev,_ZTv0_n12_N7S3052C9D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern VTBL_ENTRY _ZTV7S3052C9[];
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__7S3052C9[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C7__7S3052C9[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZThn104_N7S3052C8D1Ev,_ZThn60_N7S3052C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void ABISELECT(_ZThn104_N7S3052C8D0Ev,_ZThn60_N7S3052C8D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C7__7S3052C9[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZThn104_N7S3052C7D1Ev,_ZThn60_N7S3052C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void ABISELECT(_ZThn104_N7S3052C7D0Ev,_ZThn60_N7S3052C7D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C7__7S3052C9[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
static  VTT_ENTRY vtt_S3052C9[] = {
  {&(_ZTV7S3052C9[4]),  4,23},
  {&(_ZTV7S3052C9[12]),  12,23},
  {&(_ZTV7S3052C9[20]),  20,23},
  {&(_tg__ZTV7S3052C7__7S3052C9[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C7__7S3052C9[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C7__7S3052C9[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C7__7S3052C9[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S3052C9[];
extern  VTBL_ENTRY _ZTV7S3052C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C9[];
static VTBL_ENTRY alt_thunk_names5[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3052C7D0Ev,_ZThn60_N7S3052C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3052C7D1Ev,_ZThn60_N7S3052C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3052C8D0Ev,_ZThn60_N7S3052C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3052C8D1Ev,_ZThn60_N7S3052C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C9D0Ev,_ZTv0_n12_N7S3052C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10200_N7S3052C9D0Ev,_ZThn7548_N7S3052C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C9D1Ev,_ZTv0_n12_N7S3052C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10200_N7S3052C9D1Ev,_ZThn7548_N7S3052C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3052C9D0Ev,_ZTv0_n16_N7S3052C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10096_N7S3052C9D0Ev,_ZThn7488_N7S3052C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3052C9D1Ev,_ZTv0_n16_N7S3052C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10096_N7S3052C9D1Ev,_ZThn7488_N7S3052C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3052C9 = {  "S3052C9", // class name
  bases_S3052C9, 4,
  &(vtc_S3052C9[0]), // expected_vtbl_contents
  &(vtt_S3052C9[0]), // expected_vtt_contents
  ABISELECT(10304,7632), // object size
  NSPAIRA(_ZTI7S3052C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3052C9),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3052C9),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names5,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3052C4  : S3052C5 , virtual S3052C7 , S3052C9 , virtual S3052C11 , virtual S3052C12 {
  ::S3052C12 s3052c4f0[2];
  int s3052c4f1;
  long double s3052c4f2;
  long double s3052c4f3;
  char  :0;
  void *s3052c4f5;
  virtual  ~S3052C4(); // _ZN7S3052C4D2Ev
  S3052C4(); // tgen
};
//SIG(-1 S3052C4) C1{ BC2{ VBC3{ vd v1 Fs[6] FL[8] Fi} BC4{ VBC3 BC5{ VBC3 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC3 Fp[3] FL[5] Fi} VBC4 BC6{ BC7{ m Fp Fi FL Fp Fi} VBC4 Fp Fc[4] Fi:11 Fp[2] Fi[6] FC8{ VBC3 BC4 BC2 BC9{ vd m FC4} VBC5 Fp Fl FC2 FC9 FC5 Fi[2] FU10{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} VBC8 VBC9 vd FC9[2] Fi FD FD Fc:0 Fp}


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

static void Test_S3052C4()
{
  extern Class_Descriptor cd_S3052C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(805,2373)];
    init_test(&cd_S3052C4, buf);
    S3052C4 *dp, &lv = *(dp=new (buf) S3052C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12864,9488), "sizeof(S3052C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3052C4)");
    /*is_ambiguous_... S3052C4::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C5*), ABISELECT(10888,8044), "S3052C4");
    /*is_ambiguous_... S3052C4::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C7*)(S3052C5*), ABISELECT(10888,8044), "S3052C4");
    /*is_ambiguous_... S3052C4::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*)(S3052C5*), ABISELECT(10888,8044), "S3052C4");
    /*is_ambiguous_... S3052C4::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C7*), ABISELECT(10888,8044), "S3052C4");
    /*is_ambiguous_... S3052C4::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*), ABISELECT(10888,8044), "S3052C4");
    check_base_class_offset(lv, (S3052C6*)(S3052C11*), ABISELECT(10888,8044), "S3052C4");
    /*is_ambiguous_... S3052C11::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C7*)(S3052C11*), ABISELECT(10888,8044), "S3052C4");
    /*is_ambiguous_... S3052C11::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*)(S3052C11*), ABISELECT(10888,8044), "S3052C4");
    check_base_class_offset(lv, (S3052C6*)(S3052C5*)(S3052C11*), ABISELECT(10888,8044), "S3052C4");
    check_base_class_offset(lv, (S3052C6*)(S3052C7*)(S3052C5*)(S3052C11*), ABISELECT(10888,8044), "S3052C4");
    check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*)(S3052C5*)(S3052C11*), ABISELECT(10888,8044), "S3052C4");
    /*is_ambiguous_... S3052C4::S3052C8 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*), ABISELECT(10888,8044), "S3052C4");
    /*is_ambiguous_... S3052C4::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C7*)(S3052C5*), 0, "S3052C4");
    /*is_ambiguous_... S3052C4::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C7*)(S3052C5*), 0, "S3052C4");
    /*is_ambiguous_... S3052C4::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C5*), 0, "S3052C4");
    /*is_ambiguous_... S3052C4::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C7*), ABISELECT(10984,8128), "S3052C4");
    /*is_ambiguous_... S3052C4::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C7*), ABISELECT(10984,8128), "S3052C4");
    check_base_class_offset(lv, (S3052C7*)(S3052C9*), ABISELECT(10984,8128), "S3052C4");
    check_base_class_offset(lv, (S3052C10*)(S3052C9*), ABISELECT(328,232), "S3052C4");
    check_base_class_offset(lv, (S3052C9*), ABISELECT(320,228), "S3052C4");
    /*is_ambiguous_... S3052C11::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C7*)(S3052C11*), ABISELECT(11088,8188), "S3052C4");
    /*is_ambiguous_... S3052C11::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C7*)(S3052C11*), ABISELECT(11088,8188), "S3052C4");
    check_base_class_offset(lv, (S3052C8*)(S3052C7*)(S3052C5*)(S3052C11*), ABISELECT(11192,8248), "S3052C4");
    check_base_class_offset(lv, (S3052C7*)(S3052C5*)(S3052C11*), ABISELECT(11192,8248), "S3052C4");
    check_base_class_offset(lv, (S3052C5*)(S3052C11*), ABISELECT(11192,8248), "S3052C4");
    check_base_class_offset(lv, (S3052C12*)(S3052C11*), ABISELECT(11504,8476), "S3052C4");
    /*is_ambiguous_... S3052C11::S3052C8 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C11*), ABISELECT(12624,9316), "S3052C4");
    check_base_class_offset(lv, (S3052C11*), ABISELECT(11088,8188), "S3052C4");
    /*is_ambiguous_... S3052C4::S3052C12 */ AMB_check_base_class_offset(lv, (S3052C12*), ABISELECT(12656,9340), "S3052C4");
    check_field_offset(lv, s3052c4f0, ABISELECT(10416,7716), "S3052C4.s3052c4f0");
    check_field_offset(lv, s3052c4f1, ABISELECT(10832,8012), "S3052C4.s3052c4f1");
    check_field_offset(lv, s3052c4f2, ABISELECT(10848,8016), "S3052C4.s3052c4f2");
    check_field_offset(lv, s3052c4f3, ABISELECT(10864,8028), "S3052C4.s3052c4f3");
    check_field_offset(lv, s3052c4f5, ABISELECT(10880,8040), "S3052C4.s3052c4f5");
    test_class_info(&lv, &cd_S3052C4);
    dp->~S3052C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3052C4(Test_S3052C4, "S3052C4", ABISELECT(12864,9488));

#else // __cplusplus

extern void _ZN7S3052C4C1Ev();
extern void _ZN7S3052C4D2Ev();
Name_Map name_map_S3052C4[] = {
  NSPAIR(_ZN7S3052C4C1Ev),
  NSPAIR(_ZN7S3052C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C6;
extern VTBL_ENTRY _ZTI7S3052C6[];
extern  VTBL_ENTRY _ZTV7S3052C6[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C5;
extern VTBL_ENTRY _ZTI7S3052C5[];
extern  VTBL_ENTRY _ZTV7S3052C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C5[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S3052C9;
extern VTBL_ENTRY _ZTI7S3052C9[];
extern  VTBL_ENTRY _ZTV7S3052C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C9[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C5;
extern VTBL_ENTRY _ZTI7S3052C5[];
extern  VTBL_ENTRY _ZTV7S3052C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C5[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C11;
extern VTBL_ENTRY _ZTI8S3052C11[];
extern  VTBL_ENTRY _ZTV8S3052C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C11[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
static Base_Class bases_S3052C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C6,    ABISELECT(10888,8044), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //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_S3052C8,    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
    13, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3052C7,    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
    3, //immediately_derived
  0, 0},
  {&cd_S3052C5,    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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3052C8,    ABISELECT(10984,8128), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(10984,8128), //bcp->offset
    24, //bcp->virtual_function_table_offset
    6, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C10,    ABISELECT(328,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
    7, //immediately_derived
  0, 0},
  {&cd_S3052C9,    ABISELECT(320,228), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3052C8,    ABISELECT(11088,8188), //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
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(11088,8188), //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
    6, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3052C8,    ABISELECT(11192,8248), //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
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(11192,8248), //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
    12, //immediately_derived
  0, 0},
  {&cd_S3052C5,    ABISELECT(11192,8248), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3052C12,    ABISELECT(11504,8476), //bcp->offset
    52, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3052C8,    ABISELECT(12624,9316), //bcp->offset
    56, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S3052C11,    ABISELECT(11088,8188), //bcp->offset
    34, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C12,    ABISELECT(12656,9340), //bcp->offset
    62, //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
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3052C4[];
extern void _ZN7S3052C4D1Ev();
extern void _ZN7S3052C4D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZThn320_N7S3052C4D1Ev,_ZThn228_N7S3052C4D1Ev)();
extern void ABISELECT(_ZThn320_N7S3052C4D0Ev,_ZThn228_N7S3052C4D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C4D1Ev,_ZTv0_n12_N7S3052C4D1Ev)();
extern void ABISELECT(_ZThn10888_N7S3052C4D1Ev,_ZThn8044_N7S3052C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C4D0Ev,_ZTv0_n12_N7S3052C4D0Ev)();
extern void ABISELECT(_ZThn10888_N7S3052C4D0Ev,_ZThn8044_N7S3052C4D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
extern void ABISELECT(_ZTv0_n32_N7S3052C4D1Ev,_ZTv0_n16_N7S3052C4D1Ev)();
extern void ABISELECT(_ZThn10984_N7S3052C4D1Ev,_ZThn8128_N7S3052C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3052C4D0Ev,_ZTv0_n16_N7S3052C4D0Ev)();
extern void ABISELECT(_ZThn10984_N7S3052C4D0Ev,_ZThn8128_N7S3052C4D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTv0_n40_N7S3052C4D1Ev,_ZTv0_n20_N7S3052C4D1Ev)();
extern void ABISELECT(_ZThn11088_N7S3052C4D1Ev,_ZThn8188_N7S3052C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3052C4D0Ev,_ZTv0_n20_N7S3052C4D0Ev)();
extern void ABISELECT(_ZThn11088_N7S3052C4D0Ev,_ZThn8188_N7S3052C4D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTvn104_n40_N7S3052C4D1Ev,_ZTvn60_n20_N7S3052C4D1Ev)();
extern void ABISELECT(_ZTvn104_n40_N7S3052C4D0Ev,_ZTvn60_n20_N7S3052C4D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTvn416_n40_N7S3052C4D1Ev,_ZTvn288_n20_N7S3052C4D1Ev)();
extern void ABISELECT(_ZTvn416_n40_N7S3052C4D0Ev,_ZTvn288_n20_N7S3052C4D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S3052C4D1Ev,_ZTv0_n16_N7S3052C4D1Ev)();
extern void ABISELECT(_ZThn12624_N7S3052C4D1Ev,_ZThn9316_N7S3052C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3052C4D0Ev,_ZTv0_n16_N7S3052C4D0Ev)();
extern void ABISELECT(_ZThn12624_N7S3052C4D0Ev,_ZThn9316_N7S3052C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C4D1Ev,_ZTv0_n12_N7S3052C4D1Ev)();
extern void ABISELECT(_ZThn12656_N7S3052C4D1Ev,_ZThn9340_N7S3052C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C4D0Ev,_ZTv0_n12_N7S3052C4D0Ev)();
extern void ABISELECT(_ZThn12656_N7S3052C4D0Ev,_ZThn9340_N7S3052C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3052C4[] = {
  ABISELECT(12656,9340),
  ABISELECT(12624,9316),
  ABISELECT(11088,8188),
  ABISELECT(10984,8128),
  ABISELECT(10888,8044),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&_ZN7S3052C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  ABISELECT(10568,7816),
  ABISELECT(10664,7900),
  ABISELECT(-320,-228),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N7S3052C4D1Ev,_ZThn228_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N7S3052C4D0Ev,_ZThn228_N7S3052C4D0Ev),
  0,
  ABISELECT(-10888,-8044),
  ABISELECT(-10888,-8044),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C4D1Ev,_ZTv0_n12_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C4D0Ev,_ZTv0_n12_N7S3052C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
  0,
  0,
  ABISELECT(-10984,-8128),
  ABISELECT(-96,-84),
  ABISELECT(-10984,-8128),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C4D1Ev,_ZTv0_n16_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C4D0Ev,_ZTv0_n16_N7S3052C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  0,
  0,
  ABISELECT(-11088,-8188),
  ABISELECT(1536,1128),
  ABISELECT(-200,-144),
  ABISELECT(-11088,-8188),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3052C4D1Ev,_ZTv0_n20_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3052C4D0Ev,_ZTv0_n20_N7S3052C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  ABISELECT(-304,-204),
  ABISELECT(-11192,-8248),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N7S3052C4D1Ev,_ZTvn60_n20_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N7S3052C4D0Ev,_ZTvn60_n20_N7S3052C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  ABISELECT(-11504,-8476),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N7S3052C4D1Ev,_ZTvn288_n20_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N7S3052C4D0Ev,_ZTvn288_n20_N7S3052C4D0Ev),
  ABISELECT(-12624,-9316),
  ABISELECT(-1736,-1272),
  ABISELECT(-12624,-9316),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C4D1Ev,_ZTv0_n16_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C4D0Ev,_ZTv0_n16_N7S3052C4D0Ev),
  ABISELECT(-12656,-9340),
  ABISELECT(-12656,-9340),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C4D1Ev,_ZTv0_n12_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C4D0Ev,_ZTv0_n12_N7S3052C4D0Ev),
};
extern VTBL_ENTRY _ZTV7S3052C4[];
extern void _ZN7S3052C5D1Ev();
extern void _ZN7S3052C5D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C5__7S3052C4[] = {
  ABISELECT(10888,8044),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&_ZN7S3052C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C77S3052C5__7S3052C4[] = {
  ABISELECT(10888,8044),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C77S3052C5__7S3052C4[] = {
  ABISELECT(10888,8044),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZThn10888_N7S3052C8D1Ev,_ZThn8044_N7S3052C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void ABISELECT(_ZThn10888_N7S3052C8D0Ev,_ZThn8044_N7S3052C8D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C77S3052C5__7S3052C4[] = {
  0,
  ABISELECT(-10888,-8044),
  ABISELECT(-10888,-8044),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZThn10888_N7S3052C7D1Ev,_ZThn8044_N7S3052C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void ABISELECT(_ZThn10888_N7S3052C7D0Ev,_ZThn8044_N7S3052C7D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C77S3052C5__7S3052C4[] = {
  0,
  ABISELECT(-10888,-8044),
  ABISELECT(-10888,-8044),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev)();
extern void ABISELECT(_ZThn10888_N7S3052C5D1Ev,_ZThn8044_N7S3052C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev)();
extern void ABISELECT(_ZThn10888_N7S3052C5D0Ev,_ZThn8044_N7S3052C5D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C5__7S3052C4[] = {
  0,
  ABISELECT(-10888,-8044),
  ABISELECT(-10888,-8044),
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN7S3052C9D1Ev();
extern void _ZN7S3052C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C9__7S3052C4[] = {
  ABISELECT(10568,7816),
  ABISELECT(10664,7900),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C9[0]),
  (VTBL_ENTRY)&_ZN7S3052C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C9D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S3052C9D1Ev,_ZTv0_n16_N7S3052C9D1Ev)();
extern void ABISELECT(_ZThn10664_N7S3052C9D1Ev,_ZThn7900_N7S3052C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3052C9D0Ev,_ZTv0_n16_N7S3052C9D0Ev)();
extern void ABISELECT(_ZThn10664_N7S3052C9D0Ev,_ZThn7900_N7S3052C9D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__7S3052C9__7S3052C4[] = {
  0,
  0,
  ABISELECT(-10664,-7900),
  ABISELECT(-96,-84),
  ABISELECT(-10664,-7900),
  (VTBL_ENTRY)&(_ZTI7S3052C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C9D1Ev,_ZTv0_n16_N7S3052C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C9D0Ev,_ZTv0_n16_N7S3052C9D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C9D1Ev,_ZTv0_n12_N7S3052C9D1Ev)();
extern void ABISELECT(_ZThn10568_N7S3052C9D1Ev,_ZThn7816_N7S3052C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C9D0Ev,_ZTv0_n12_N7S3052C9D0Ev)();
extern void ABISELECT(_ZThn10568_N7S3052C9D0Ev,_ZThn7816_N7S3052C9D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C9__7S3052C4[] = {
  0,
  ABISELECT(-10568,-7816),
  ABISELECT(-10568,-7816),
  (VTBL_ENTRY)&(_ZTI7S3052C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C9D1Ev,_ZTv0_n12_N7S3052C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C9D0Ev,_ZTv0_n12_N7S3052C9D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__A1__7S3052C4[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C7__A1__7S3052C4[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C7__A1__7S3052C4[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C7__A1__7S3052C4[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN8S3052C11D1Ev();
extern void _ZN8S3052C11D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C11__7S3052C4[] = {
  ABISELECT(1536,1128),
  ABISELECT(-200,-144),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C11[0]),
  (VTBL_ENTRY)&_ZN8S3052C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C11D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C78S3052C11__A2__7S3052C4[] = {
  ABISELECT(-200,-144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C78S3052C11__A2__7S3052C4[] = {
  ABISELECT(-200,-144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C78S3052C11__A2__7S3052C4[] = {
  0,
  ABISELECT(200,144),
  ABISELECT(200,144),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C78S3052C11__A2__7S3052C4[] = {
  0,
  ABISELECT(200,144),
  ABISELECT(200,144),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN7S3052C5D1Ev();
extern void _ZN7S3052C5D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C58S3052C11__A1__7S3052C4[] = {
  ABISELECT(-304,-204),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&_ZN7S3052C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C77S3052C58S3052C11__A3__7S3052C4[] = {
  ABISELECT(-304,-204),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C77S3052C58S3052C11__A3__7S3052C4[] = {
  ABISELECT(-304,-204),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C77S3052C58S3052C11__A3__7S3052C4[] = {
  0,
  ABISELECT(304,204),
  ABISELECT(304,204),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C77S3052C58S3052C11__A3__7S3052C4[] = {
  0,
  ABISELECT(304,204),
  ABISELECT(304,204),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C58S3052C11__A1__7S3052C4[] = {
  0,
  ABISELECT(304,204),
  ABISELECT(304,204),
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3052C11D1Ev,_ZTv0_n12_N8S3052C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3052C11D0Ev,_ZTv0_n12_N8S3052C11D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__8S3052C11__7S3052C4[] = {
  0,
  ABISELECT(200,144),
  ABISELECT(200,144),
  (VTBL_ENTRY)&(_ZTI8S3052C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C11D1Ev,_ZTv0_n12_N8S3052C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C11D0Ev,_ZTv0_n12_N8S3052C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZThn104_N8S3052C11D1Ev,_ZThn60_N8S3052C11D1Ev)();
extern void ABISELECT(_ZThn104_N8S3052C11D0Ev,_ZThn60_N8S3052C11D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C5__8S3052C11__7S3052C4[] = {
  ABISELECT(-304,-204),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S3052C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N8S3052C11D1Ev,_ZThn60_N8S3052C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N8S3052C11D0Ev,_ZThn60_N8S3052C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C11D1Ev,_ZTv0_n16_N8S3052C11D1Ev)();
extern void ABISELECT(_ZThn1536_N8S3052C11D1Ev,_ZThn1128_N8S3052C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C11D0Ev,_ZTv0_n16_N8S3052C11D0Ev)();
extern void ABISELECT(_ZThn1536_N8S3052C11D0Ev,_ZThn1128_N8S3052C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3052C8__A2__8S3052C11__7S3052C4[] = {
  ABISELECT(-1536,-1128),
  ABISELECT(-1736,-1272),
  ABISELECT(-1536,-1128),
  (VTBL_ENTRY)&(_ZTI8S3052C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C11D1Ev,_ZTv0_n16_N8S3052C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C11D0Ev,_ZTv0_n16_N8S3052C11D0Ev),
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C8__A4__7S3052C4[] = {
  ABISELECT(-1736,-1272),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C8__A4__7S3052C4[] = {
  0,
  ABISELECT(1736,1272),
  ABISELECT(1736,1272),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
static  VTT_ENTRY vtt_S3052C4[] = {
  {&(_ZTV7S3052C4[7]),  7,67},
  {&(_tg__ZTV7S3052C5__7S3052C4[3]),  3,7},
  {&(_tg__ZTV7S3052C77S3052C5__7S3052C4[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C77S3052C5__7S3052C4[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C77S3052C5__7S3052C4[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C77S3052C5__7S3052C4[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C5__7S3052C4[4]),  4,7},
  {&(_tg__ZTV7S3052C9__7S3052C4[4]),  4,6},
  {&(_tg__ZTV7S3052C7__7S3052C9__7S3052C4[6]),  6,10},
  {&(_tg__ZTV7S3052C6__7S3052C9__7S3052C4[4]),  4,7},
  {&(_ZTV7S3052C4[21]),  21,67},
  {&(_ZTV7S3052C4[30]),  30,67},
  {&(_ZTV7S3052C4[15]),  15,67},
  {&(_ZTV7S3052C4[41]),  41,67},
  {&(_ZTV7S3052C4[48]),  48,67},
  {&(_ZTV7S3052C4[54]),  54,67},
  {&(_ZTV7S3052C4[60]),  60,67},
  {&(_ZTV7S3052C4[65]),  65,67},
  {&(_tg__ZTV7S3052C7__A1__7S3052C4[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C7__A1__7S3052C4[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C7__A1__7S3052C4[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C7__A1__7S3052C4[4]),  4,7},
  {&(_tg__ZTV8S3052C11__7S3052C4[4]),  4,8},
  {&(_tg__ZTV7S3052C78S3052C11__A2__7S3052C4[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C78S3052C11__A2__7S3052C4[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C78S3052C11__A2__7S3052C4[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C78S3052C11__A2__7S3052C4[4]),  4,7},
  {&(_tg__ZTV7S3052C58S3052C11__A1__7S3052C4[3]),  3,7},
  {&(_tg__ZTV7S3052C77S3052C58S3052C11__A3__7S3052C4[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C77S3052C58S3052C11__A3__7S3052C4[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C77S3052C58S3052C11__A3__7S3052C4[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C77S3052C58S3052C11__A3__7S3052C4[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C58S3052C11__A1__7S3052C4[4]),  4,7},
  {&(_tg__ZTV7S3052C6__8S3052C11__7S3052C4[4]),  4,7},
  {&(_tg__ZTV7S3052C5__8S3052C11__7S3052C4[3]),  3,7},
  {&(_tg__ZTV7S3052C8__A2__8S3052C11__7S3052C4[4]),  4,6},
  {&(_tg__ZTV7S3052C8__A4__7S3052C4[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C8__A4__7S3052C4[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S3052C4[];
extern  VTBL_ENTRY _ZTV7S3052C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C4[];
static VTBL_ENTRY alt_thunk_names6[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C11D0Ev,_ZTv0_n16_N8S3052C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S3052C11D0Ev,_ZThn1128_N8S3052C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C11D1Ev,_ZTv0_n16_N8S3052C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S3052C11D1Ev,_ZThn1128_N8S3052C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C9D0Ev,_ZTv0_n12_N7S3052C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10568_N7S3052C9D0Ev,_ZThn7816_N7S3052C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C9D1Ev,_ZTv0_n12_N7S3052C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10568_N7S3052C9D1Ev,_ZThn7816_N7S3052C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3052C9D0Ev,_ZTv0_n16_N7S3052C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10664_N7S3052C9D0Ev,_ZThn7900_N7S3052C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3052C9D1Ev,_ZTv0_n16_N7S3052C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10664_N7S3052C9D1Ev,_ZThn7900_N7S3052C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N7S3052C5D0Ev,_ZThn8044_N7S3052C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N7S3052C5D1Ev,_ZThn8044_N7S3052C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N7S3052C7D0Ev,_ZThn8044_N7S3052C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N7S3052C7D1Ev,_ZThn8044_N7S3052C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N7S3052C8D0Ev,_ZThn8044_N7S3052C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N7S3052C8D1Ev,_ZThn8044_N7S3052C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3052C4D0Ev,_ZTv0_n20_N7S3052C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11088_N7S3052C4D0Ev,_ZThn8188_N7S3052C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3052C4D1Ev,_ZTv0_n20_N7S3052C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11088_N7S3052C4D1Ev,_ZThn8188_N7S3052C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3052C4D0Ev,_ZTv0_n16_N7S3052C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12624_N7S3052C4D0Ev,_ZThn9316_N7S3052C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10984_N7S3052C4D0Ev,_ZThn8128_N7S3052C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3052C4D1Ev,_ZTv0_n16_N7S3052C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12624_N7S3052C4D1Ev,_ZThn9316_N7S3052C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10984_N7S3052C4D1Ev,_ZThn8128_N7S3052C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C4D0Ev,_ZTv0_n12_N7S3052C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12656_N7S3052C4D0Ev,_ZThn9340_N7S3052C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N7S3052C4D0Ev,_ZThn8044_N7S3052C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C4D1Ev,_ZTv0_n12_N7S3052C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12656_N7S3052C4D1Ev,_ZThn9340_N7S3052C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N7S3052C4D1Ev,_ZThn8044_N7S3052C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3052C4 = {  "S3052C4", // class name
  bases_S3052C4, 17,
  &(vtc_S3052C4[0]), // expected_vtbl_contents
  &(vtt_S3052C4[0]), // expected_vtt_contents
  ABISELECT(12864,9488), // object size
  NSPAIRA(_ZTI7S3052C4),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S3052C4),67, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3052C4),38, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names6,
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S3052C16  {
  char s3052c16f0:2;
  char s3052c16f1;
  void *s3052c16f2;
  void *s3052c16f3;
  void *s3052c16f4;
  int s3052c16f5;
  short s3052c16f6[6];
  char s3052c16f7;
  void  mf3052c16(); // _ZN8S3052C169mf3052c16Ev
};
//SIG(1 S3052C16) U1{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc}

#endif // __cplusplus
#ifdef __cplusplus

struct  S3052C15  : S3052C12 , virtual S3052C6 , virtual S3052C7 {
  ::S3052C7 s3052c15f0[2];
  long double s3052c15f1;
  ::S3052C12 s3052c15f2;
  void *s3052c15f3[3];
  ::S3052C5 s3052c15f4;
  int s3052c15f5;
  ::S3052C16 s3052c15f6;
  int s3052c15f7;
  virtual void  v6(); // _ZN8S3052C152v6Ev
  ~S3052C15(); // tgen
  S3052C15(); // tgen
};
//SIG(-1 S3052C15) C1{ BC2{ vd m FC3{ VBC4{ vd v2 Fs[6] FL[8] Fi} BC5{ VBC4 FL Fp FL:54} v3 v4 Fc:0 Fp[8] Fc}} VBC4 VBC3 v1 FC3[2] FD FC2 Fp[3] FC6{ VBC4 BC3 Fp[3] Fc:8 Fi[2] Fc FC4 Fp[3] FL[5] Fi} Fi FU7{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi}


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

static void Test_S3052C15()
{
  extern Class_Descriptor cd_S3052C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(95,272)];
    init_test(&cd_S3052C15, buf);
    S3052C15 *dp, &lv = *(dp=new (buf) S3052C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1504,1084), "sizeof(S3052C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3052C15)");
    check_base_class_offset(lv, (S3052C12*), 0, "S3052C15");
    check_base_class_offset(lv, (S3052C6*), ABISELECT(1296,940), "S3052C15");
    check_base_class_offset(lv, (S3052C6*)(S3052C7*), ABISELECT(1296,940), "S3052C15");
    check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*), ABISELECT(1296,940), "S3052C15");
    check_base_class_offset(lv, (S3052C8*)(S3052C7*), ABISELECT(1392,1024), "S3052C15");
    check_base_class_offset(lv, (S3052C7*), ABISELECT(1392,1024), "S3052C15");
    check_field_offset(lv, s3052c15f0, ABISELECT(208,148), "S3052C15.s3052c15f0");
    check_field_offset(lv, s3052c15f1, ABISELECT(608,436), "S3052C15.s3052c15f1");
    check_field_offset(lv, s3052c15f2, ABISELECT(624,448), "S3052C15.s3052c15f2");
    check_field_offset(lv, s3052c15f3, ABISELECT(832,596), "S3052C15.s3052c15f3");
    check_field_offset(lv, s3052c15f4, ABISELECT(856,608), "S3052C15.s3052c15f4");
    check_field_offset(lv, s3052c15f5, ABISELECT(1264,920), "S3052C15.s3052c15f5");
    check_field_offset(lv, s3052c15f6, ABISELECT(1272,924), "S3052C15.s3052c15f6");
    check_field_offset(lv, s3052c15f7, ABISELECT(1288,936), "S3052C15.s3052c15f7");
    test_class_info(&lv, &cd_S3052C15);
    dp->~S3052C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3052C15(Test_S3052C15, "S3052C15", ABISELECT(1504,1084));

#else // __cplusplus

extern void _ZN8S3052C15C1Ev();
extern void _ZN8S3052C15D1Ev();
Name_Map name_map_S3052C15[] = {
  NSPAIR(_ZN8S3052C15C1Ev),
  NSPAIR(_ZN8S3052C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S3052C6;
extern VTBL_ENTRY _ZTI7S3052C6[];
extern  VTBL_ENTRY _ZTV7S3052C6[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
static Base_Class bases_S3052C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S3052C6,    ABISELECT(1296,940), //bcp->offset
    7, //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_S3052C8,    ABISELECT(1392,1024), //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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(1392,1024), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3052C15[];
extern void _ZN8S3052C15D1Ev();
extern void _ZN8S3052C15D0Ev();
extern void _ZN8S3052C152v6Ev();
extern void ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev)();
extern void ABISELECT(_ZThn1296_N8S3052C15D1Ev,_ZThn940_N8S3052C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev)();
extern void ABISELECT(_ZThn1296_N8S3052C15D0Ev,_ZThn940_N8S3052C15D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
extern void ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev)();
extern void ABISELECT(_ZThn1392_N8S3052C15D1Ev,_ZThn1024_N8S3052C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev)();
extern void ABISELECT(_ZThn1392_N8S3052C15D0Ev,_ZThn1024_N8S3052C15D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY vtc_S3052C15[] = {
  ABISELECT(1392,1024),
  ABISELECT(1296,940),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&_ZN8S3052C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C15D0Ev,
  (VTBL_ENTRY)&_ZN8S3052C152v6Ev,
  0,
  ABISELECT(-1296,-940),
  ABISELECT(-1296,-940),
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
  0,
  0,
  ABISELECT(-1392,-1024),
  ABISELECT(-96,-84),
  ABISELECT(-1392,-1024),
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern VTBL_ENTRY _ZTV8S3052C15[];
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__8S3052C15[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C7__8S3052C15[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C7__8S3052C15[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C7__8S3052C15[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
static  VTT_ENTRY vtt_S3052C15[] = {
  {&(_ZTV8S3052C15[4]),  4,24},
  {&(_ZTV8S3052C15[11]),  11,24},
  {&(_ZTV8S3052C15[20]),  20,24},
  {&(_tg__ZTV7S3052C7__8S3052C15[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C7__8S3052C15[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C7__8S3052C15[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C7__8S3052C15[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S3052C15[];
extern  VTBL_ENTRY _ZTV8S3052C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C15[];
static VTBL_ENTRY alt_thunk_names7[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N8S3052C15D0Ev,_ZThn1024_N8S3052C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N8S3052C15D1Ev,_ZThn1024_N8S3052C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1296_N8S3052C15D0Ev,_ZThn940_N8S3052C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1296_N8S3052C15D1Ev,_ZThn940_N8S3052C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3052C15 = {  "S3052C15", // class name
  bases_S3052C15, 4,
  &(vtc_S3052C15[0]), // expected_vtbl_contents
  &(vtt_S3052C15[0]), // expected_vtt_contents
  ABISELECT(1504,1084), // object size
  NSPAIRA(_ZTI8S3052C15),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3052C15),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3052C15),7, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names7,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3052C17  : virtual S3052C6 , S3052C5 , virtual S3052C8 , virtual S3052C7 {
  void *s3052c17f0;
  void *s3052c17f1[5];
  void *s3052c17f2;
  virtual  ~S3052C17(); // _ZN8S3052C17D2Ev
  S3052C17(); // tgen
};
//SIG(-1 S3052C17) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} BC3{ VBC2 BC4{ VBC2 BC5{ VBC2 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC2 Fp[3] FL[5] Fi} VBC5 VBC4 vd Fp[7]}


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

static void Test_S3052C17()
{
  extern Class_Descriptor cd_S3052C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(76,107)];
    init_test(&cd_S3052C17, buf);
    S3052C17 *dp, &lv = *(dp=new (buf) S3052C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(600,424), "sizeof(S3052C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3052C17)");
    check_base_class_offset(lv, (S3052C6*), ABISELECT(368,256), "S3052C17");
    check_base_class_offset(lv, (S3052C6*)(S3052C5*), ABISELECT(368,256), "S3052C17");
    check_base_class_offset(lv, (S3052C6*)(S3052C7*)(S3052C5*), ABISELECT(368,256), "S3052C17");
    check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*)(S3052C5*), ABISELECT(368,256), "S3052C17");
    /*is_ambiguous_... S3052C17::S3052C8 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*), ABISELECT(368,256), "S3052C17");
    /*is_ambiguous_... S3052C17::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C7*), ABISELECT(368,256), "S3052C17");
    /*is_ambiguous_... S3052C17::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*), ABISELECT(368,256), "S3052C17");
    check_base_class_offset(lv, (S3052C8*)(S3052C7*)(S3052C5*), 0, "S3052C17");
    check_base_class_offset(lv, (S3052C7*)(S3052C5*), 0, "S3052C17");
    check_base_class_offset(lv, (S3052C5*), 0, "S3052C17");
    /*is_ambiguous_... S3052C17::S3052C8 */ AMB_check_base_class_offset(lv, (S3052C8*), ABISELECT(464,340), "S3052C17");
    /*is_ambiguous_... S3052C17::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C7*), ABISELECT(496,364), "S3052C17");
    /*is_ambiguous_... S3052C17::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C7*), ABISELECT(496,364), "S3052C17");
    check_field_offset(lv, s3052c17f0, ABISELECT(312,228), "S3052C17.s3052c17f0");
    check_field_offset(lv, s3052c17f1, ABISELECT(320,232), "S3052C17.s3052c17f1");
    check_field_offset(lv, s3052c17f2, ABISELECT(360,252), "S3052C17.s3052c17f2");
    test_class_info(&lv, &cd_S3052C17);
    dp->~S3052C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3052C17(Test_S3052C17, "S3052C17", ABISELECT(600,424));

#else // __cplusplus

extern void _ZN8S3052C17C1Ev();
extern void _ZN8S3052C17D2Ev();
Name_Map name_map_S3052C17[] = {
  NSPAIR(_ZN8S3052C17C1Ev),
  NSPAIR(_ZN8S3052C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C6;
extern VTBL_ENTRY _ZTI7S3052C6[];
extern  VTBL_ENTRY _ZTV7S3052C6[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C5;
extern VTBL_ENTRY _ZTI7S3052C5[];
extern  VTBL_ENTRY _ZTV7S3052C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C5[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
static Base_Class bases_S3052C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C6,    ABISELECT(368,256), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C8,    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
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3052C7,    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
    6, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3052C5,    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_S3052C8,    ABISELECT(464,340), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C8,    ABISELECT(496,364), //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
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(496,364), //bcp->offset
    22, //bcp->virtual_function_table_offset
    6, //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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3052C17[];
extern void _ZN8S3052C17D1Ev();
extern void _ZN8S3052C17D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S3052C17D1Ev,_ZTv0_n12_N8S3052C17D1Ev)();
extern void ABISELECT(_ZThn368_N8S3052C17D1Ev,_ZThn256_N8S3052C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3052C17D0Ev,_ZTv0_n12_N8S3052C17D0Ev)();
extern void ABISELECT(_ZThn368_N8S3052C17D0Ev,_ZThn256_N8S3052C17D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
extern void ABISELECT(_ZTv0_n32_N8S3052C17D1Ev,_ZTv0_n16_N8S3052C17D1Ev)();
extern void ABISELECT(_ZThn464_N8S3052C17D1Ev,_ZThn340_N8S3052C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C17D0Ev,_ZTv0_n16_N8S3052C17D0Ev)();
extern void ABISELECT(_ZThn464_N8S3052C17D0Ev,_ZThn340_N8S3052C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C17D1Ev,_ZTv0_n16_N8S3052C17D1Ev)();
extern void ABISELECT(_ZThn496_N8S3052C17D1Ev,_ZThn364_N8S3052C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C17D0Ev,_ZTv0_n16_N8S3052C17D0Ev)();
extern void ABISELECT(_ZThn496_N8S3052C17D0Ev,_ZThn364_N8S3052C17D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY vtc_S3052C17[] = {
  ABISELECT(496,364),
  ABISELECT(464,340),
  ABISELECT(368,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C17[0]),
  (VTBL_ENTRY)&_ZN8S3052C17D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C17D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  0,
  ABISELECT(-368,-256),
  ABISELECT(-368,-256),
  (VTBL_ENTRY)&(_ZTI8S3052C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C17D1Ev,_ZTv0_n12_N8S3052C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C17D0Ev,_ZTv0_n12_N8S3052C17D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
  ABISELECT(-464,-340),
  ABISELECT(-96,-84),
  ABISELECT(-464,-340),
  (VTBL_ENTRY)&(_ZTI8S3052C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C17D1Ev,_ZTv0_n16_N8S3052C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C17D0Ev,_ZTv0_n16_N8S3052C17D0Ev),
  0,
  0,
  ABISELECT(-496,-364),
  ABISELECT(-128,-108),
  ABISELECT(-496,-364),
  (VTBL_ENTRY)&(_ZTI8S3052C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C17D1Ev,_ZTv0_n16_N8S3052C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C17D0Ev,_ZTv0_n16_N8S3052C17D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern VTBL_ENTRY _ZTV8S3052C17[];
extern void _ZN7S3052C5D1Ev();
extern void _ZN7S3052C5D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C5__8S3052C17[] = {
  ABISELECT(368,256),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&_ZN7S3052C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C77S3052C5__8S3052C17[] = {
  ABISELECT(368,256),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C77S3052C5__8S3052C17[] = {
  ABISELECT(368,256),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZThn368_N7S3052C8D1Ev,_ZThn256_N7S3052C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void ABISELECT(_ZThn368_N7S3052C8D0Ev,_ZThn256_N7S3052C8D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C77S3052C5__8S3052C17[] = {
  0,
  ABISELECT(-368,-256),
  ABISELECT(-368,-256),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZThn368_N7S3052C7D1Ev,_ZThn256_N7S3052C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void ABISELECT(_ZThn368_N7S3052C7D0Ev,_ZThn256_N7S3052C7D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C77S3052C5__8S3052C17[] = {
  0,
  ABISELECT(-368,-256),
  ABISELECT(-368,-256),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev)();
extern void ABISELECT(_ZThn368_N7S3052C5D1Ev,_ZThn256_N7S3052C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev)();
extern void ABISELECT(_ZThn368_N7S3052C5D0Ev,_ZThn256_N7S3052C5D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C5__8S3052C17[] = {
  0,
  ABISELECT(-368,-256),
  ABISELECT(-368,-256),
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C8__A1__8S3052C17[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C8__A1__8S3052C17[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__A1__8S3052C17[] = {
  ABISELECT(-128,-108),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C7__A2__8S3052C17[] = {
  ABISELECT(-128,-108),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C7__A2__8S3052C17[] = {
  0,
  ABISELECT(128,108),
  ABISELECT(128,108),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C7__A1__8S3052C17[] = {
  0,
  ABISELECT(128,108),
  ABISELECT(128,108),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
static  VTT_ENTRY vtt_S3052C17[] = {
  {&(_ZTV8S3052C17[5]),  5,32},
  {&(_tg__ZTV7S3052C5__8S3052C17[3]),  3,7},
  {&(_tg__ZTV7S3052C77S3052C5__8S3052C17[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C77S3052C5__8S3052C17[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C77S3052C5__8S3052C17[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C77S3052C5__8S3052C17[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C5__8S3052C17[4]),  4,7},
  {&(_ZTV8S3052C17[13]),  13,32},
  {&(_ZTV8S3052C17[20]),  20,32},
  {&(_ZTV8S3052C17[28]),  28,32},
  {&(_tg__ZTV7S3052C8__A1__8S3052C17[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C8__A1__8S3052C17[4]),  4,7},
  {&(_tg__ZTV7S3052C7__A1__8S3052C17[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C7__A2__8S3052C17[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C7__A2__8S3052C17[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C7__A1__8S3052C17[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S3052C17[];
extern  VTBL_ENTRY _ZTV8S3052C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C17[];
static VTBL_ENTRY alt_thunk_names8[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S3052C5D0Ev,_ZThn256_N7S3052C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S3052C5D1Ev,_ZThn256_N7S3052C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S3052C7D0Ev,_ZThn256_N7S3052C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S3052C7D1Ev,_ZThn256_N7S3052C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S3052C8D0Ev,_ZThn256_N7S3052C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N7S3052C8D1Ev,_ZThn256_N7S3052C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C17D0Ev,_ZTv0_n16_N8S3052C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S3052C17D0Ev,_ZThn364_N8S3052C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn464_N8S3052C17D0Ev,_ZThn340_N8S3052C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C17D1Ev,_ZTv0_n16_N8S3052C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S3052C17D1Ev,_ZThn364_N8S3052C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn464_N8S3052C17D1Ev,_ZThn340_N8S3052C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C17D0Ev,_ZTv0_n12_N8S3052C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S3052C17D0Ev,_ZThn256_N8S3052C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C17D1Ev,_ZTv0_n12_N8S3052C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S3052C17D1Ev,_ZThn256_N8S3052C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3052C17 = {  "S3052C17", // class name
  bases_S3052C17, 7,
  &(vtc_S3052C17[0]), // expected_vtbl_contents
  &(vtt_S3052C17[0]), // expected_vtt_contents
  ABISELECT(600,424), // object size
  NSPAIRA(_ZTI8S3052C17),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S3052C17),32, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3052C17),16, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names8,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3052C14  : S3052C15 , virtual S3052C8 , S3052C6 , S3052C17 {
  ::S3052C6 s3052c14f0[9];
  char s3052c14f1;
  int s3052c14f2;
  int s3052c14f3;
  int s3052c14f4;
  char s3052c14f5;
  virtual void  v7(); // _ZN8S3052C142v7Ev
  ~S3052C14(); // tgen
  S3052C14(); // tgen
};
//SIG(-1 S3052C14) C1{ BC2{ BC3{ vd m FC4{ VBC5{ vd v2 Fs[6] FL[8] Fi} BC6{ VBC5 FL Fp FL:54} v3 v4 Fc:0 Fp[8] Fc}} VBC5 VBC4 v5 FC4[2] FD FC3 Fp[3] FC7{ VBC5 BC4 Fp[3] Fc:8 Fi[2] Fc FC5 Fp[3] FL[5] Fi} Fi FU8{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi} VBC6 BC5 BC9{ VBC5 BC7 VBC6 VBC4 vd Fp Fp[5] Fp} v1 FC5[9] Fc Fi Fi Fi Fc}


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

static void Test_S3052C14()
{
  extern Class_Descriptor cd_S3052C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(181,557)];
    init_test(&cd_S3052C14, buf);
    S3052C14 *dp, &lv = *(dp=new (buf) S3052C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2880,2224), "sizeof(S3052C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3052C14)");
    check_base_class_offset(lv, (S3052C12*)(S3052C15*), 0, "S3052C14");
    check_base_class_offset(lv, (S3052C6*)(S3052C15*), ABISELECT(2648,2056), "S3052C14");
    /*is_ambiguous_... S3052C14::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C7*), ABISELECT(2648,2056), "S3052C14");
    /*is_ambiguous_... S3052C14::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*), ABISELECT(2648,2056), "S3052C14");
    /*is_ambiguous_... S3052C14::S3052C8 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*), ABISELECT(2648,2056), "S3052C14");
    check_base_class_offset(lv, (S3052C6*)(S3052C17*), ABISELECT(2648,2056), "S3052C14");
    check_base_class_offset(lv, (S3052C6*)(S3052C5*)(S3052C17*), ABISELECT(2648,2056), "S3052C14");
    check_base_class_offset(lv, (S3052C6*)(S3052C7*)(S3052C5*)(S3052C17*), ABISELECT(2648,2056), "S3052C14");
    check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*)(S3052C5*)(S3052C17*), ABISELECT(2648,2056), "S3052C14");
    /*is_ambiguous_... S3052C14::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C7*), ABISELECT(2744,2140), "S3052C14");
    check_base_class_offset(lv, (S3052C7*)(S3052C15*), ABISELECT(2744,2140), "S3052C14");
    /*is_ambiguous_... S3052C17::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C7*)(S3052C17*), ABISELECT(2744,2140), "S3052C14");
    check_base_class_offset(lv, (S3052C15*), 0, "S3052C14");
    /*is_ambiguous_... S3052C14::S3052C8 */ AMB_check_base_class_offset(lv, (S3052C8*), ABISELECT(2848,2200), "S3052C14");
    /*is_ambiguous_... S3052C17::S3052C8 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C17*), ABISELECT(2848,2200), "S3052C14");
    /*is_ambiguous_... S3052C14::S3052C6 */ AMB_check_base_class_offset(lv, (S3052C6*), ABISELECT(1296,940), "S3052C14");
    check_base_class_offset(lv, (S3052C8*)(S3052C7*)(S3052C5*)(S3052C17*), ABISELECT(1392,1024), "S3052C14");
    check_base_class_offset(lv, (S3052C7*)(S3052C5*)(S3052C17*), ABISELECT(1392,1024), "S3052C14");
    check_base_class_offset(lv, (S3052C5*)(S3052C17*), ABISELECT(1392,1024), "S3052C14");
    check_base_class_offset(lv, (S3052C17*), ABISELECT(1392,1024), "S3052C14");
    check_field_offset(lv, s3052c14f0, ABISELECT(1760,1280), "S3052C14.s3052c14f0");
    check_field_offset(lv, s3052c14f1, ABISELECT(2624,2036), "S3052C14.s3052c14f1");
    check_field_offset(lv, s3052c14f2, ABISELECT(2628,2040), "S3052C14.s3052c14f2");
    check_field_offset(lv, s3052c14f3, ABISELECT(2632,2044), "S3052C14.s3052c14f3");
    check_field_offset(lv, s3052c14f4, ABISELECT(2636,2048), "S3052C14.s3052c14f4");
    check_field_offset(lv, s3052c14f5, ABISELECT(2640,2052), "S3052C14.s3052c14f5");
    test_class_info(&lv, &cd_S3052C14);
    dp->~S3052C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3052C14(Test_S3052C14, "S3052C14", ABISELECT(2880,2224));

#else // __cplusplus

extern void _ZN8S3052C14C1Ev();
extern void _ZN8S3052C14D1Ev();
Name_Map name_map_S3052C14[] = {
  NSPAIR(_ZN8S3052C14C1Ev),
  NSPAIR(_ZN8S3052C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S3052C6;
extern VTBL_ENTRY _ZTI7S3052C6[];
extern  VTBL_ENTRY _ZTV7S3052C6[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C15;
extern VTBL_ENTRY _ZTI8S3052C15[];
extern  VTBL_ENTRY _ZTV8S3052C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C15[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C6;
extern VTBL_ENTRY _ZTI7S3052C6[];
extern  VTBL_ENTRY _ZTV7S3052C6[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C5;
extern VTBL_ENTRY _ZTI7S3052C5[];
extern  VTBL_ENTRY _ZTV7S3052C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C5[];
extern Class_Descriptor cd_S3052C17;
extern VTBL_ENTRY _ZTI8S3052C17[];
extern  VTBL_ENTRY _ZTV8S3052C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C17[];
static Base_Class bases_S3052C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S3052C6,    ABISELECT(2648,2056), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3052C8,    ABISELECT(2744,2140), //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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(2744,2140), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3052C15,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3052C8,    ABISELECT(2848,2200), //bcp->offset
    40, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C6,    ABISELECT(1296,940), //bcp->offset
    9, //bcp->virtual_function_table_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_S3052C8,    ABISELECT(1392,1024), //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
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(1392,1024), //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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3052C5,    ABISELECT(1392,1024), //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
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3052C17,    ABISELECT(1392,1024), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3052C14[];
extern void _ZN8S3052C14D1Ev();
extern void _ZN8S3052C14D0Ev();
extern void _ZN8S3052C152v6Ev();
extern void _ZN8S3052C142v7Ev();
extern void ABISELECT(_ZThn1296_N8S3052C14D1Ev,_ZThn940_N8S3052C14D1Ev)();
extern void ABISELECT(_ZThn1296_N8S3052C14D0Ev,_ZThn940_N8S3052C14D0Ev)();
extern void _ZN7S3052C62v3Ev();
extern void ABISELECT(_ZThn1392_N8S3052C14D1Ev,_ZThn1024_N8S3052C14D1Ev)();
extern void ABISELECT(_ZThn1392_N8S3052C14D0Ev,_ZThn1024_N8S3052C14D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S3052C14D1Ev,_ZTv0_n12_N8S3052C14D1Ev)();
extern void ABISELECT(_ZThn2648_N8S3052C14D1Ev,_ZThn2056_N8S3052C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3052C14D0Ev,_ZTv0_n12_N8S3052C14D0Ev)();
extern void ABISELECT(_ZThn2648_N8S3052C14D0Ev,_ZThn2056_N8S3052C14D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
extern void ABISELECT(_ZTv0_n32_N8S3052C14D1Ev,_ZTv0_n16_N8S3052C14D1Ev)();
extern void ABISELECT(_ZThn2744_N8S3052C14D1Ev,_ZThn2140_N8S3052C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C14D0Ev,_ZTv0_n16_N8S3052C14D0Ev)();
extern void ABISELECT(_ZThn2744_N8S3052C14D0Ev,_ZThn2140_N8S3052C14D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTv0_n32_N8S3052C14D1Ev,_ZTv0_n16_N8S3052C14D1Ev)();
extern void ABISELECT(_ZThn2848_N8S3052C14D1Ev,_ZThn2200_N8S3052C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C14D0Ev,_ZTv0_n16_N8S3052C14D0Ev)();
extern void ABISELECT(_ZThn2848_N8S3052C14D0Ev,_ZThn2200_N8S3052C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3052C14[] = {
  ABISELECT(2848,2200),
  ABISELECT(2744,2140),
  ABISELECT(2648,2056),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C14[0]),
  (VTBL_ENTRY)&_ZN8S3052C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C14D0Ev,
  (VTBL_ENTRY)&_ZN8S3052C152v6Ev,
  (VTBL_ENTRY)&_ZN8S3052C142v7Ev,
  ABISELECT(-1296,-940),
  (VTBL_ENTRY)&(_ZTI8S3052C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N8S3052C14D1Ev,_ZThn940_N8S3052C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N8S3052C14D0Ev,_ZThn940_N8S3052C14D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
  ABISELECT(1352,1116),
  ABISELECT(1456,1176),
  ABISELECT(1256,1032),
  ABISELECT(-1392,-1024),
  (VTBL_ENTRY)&(_ZTI8S3052C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N8S3052C14D1Ev,_ZThn1024_N8S3052C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N8S3052C14D0Ev,_ZThn1024_N8S3052C14D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  0,
  ABISELECT(-2648,-2056),
  ABISELECT(-2648,-2056),
  (VTBL_ENTRY)&(_ZTI8S3052C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C14D1Ev,_ZTv0_n12_N8S3052C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C14D0Ev,_ZTv0_n12_N8S3052C14D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
  0,
  0,
  ABISELECT(-2744,-2140),
  ABISELECT(-96,-84),
  ABISELECT(-2744,-2140),
  (VTBL_ENTRY)&(_ZTI8S3052C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C14D1Ev,_ZTv0_n16_N8S3052C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C14D0Ev,_ZTv0_n16_N8S3052C14D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  ABISELECT(-2848,-2200),
  ABISELECT(-200,-144),
  ABISELECT(-2848,-2200),
  (VTBL_ENTRY)&(_ZTI8S3052C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C14D1Ev,_ZTv0_n16_N8S3052C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C14D0Ev,_ZTv0_n16_N8S3052C14D0Ev),
};
extern VTBL_ENTRY _ZTV8S3052C14[];
extern void _ZN8S3052C15D1Ev();
extern void _ZN8S3052C15D0Ev();
extern void _ZN8S3052C152v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C15__8S3052C14[] = {
  ABISELECT(2744,2140),
  ABISELECT(2648,2056),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&_ZN8S3052C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C15D0Ev,
  (VTBL_ENTRY)&_ZN8S3052C152v6Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev)();
extern void ABISELECT(_ZThn2648_N8S3052C15D1Ev,_ZThn2056_N8S3052C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev)();
extern void ABISELECT(_ZThn2648_N8S3052C15D0Ev,_ZThn2056_N8S3052C15D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__8S3052C15__8S3052C14[] = {
  0,
  ABISELECT(-2648,-2056),
  ABISELECT(-2648,-2056),
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev)();
extern void ABISELECT(_ZThn2744_N8S3052C15D1Ev,_ZThn2140_N8S3052C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev)();
extern void ABISELECT(_ZThn2744_N8S3052C15D0Ev,_ZThn2140_N8S3052C15D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__8S3052C15__8S3052C14[] = {
  0,
  0,
  ABISELECT(-2744,-2140),
  ABISELECT(-96,-84),
  ABISELECT(-2744,-2140),
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN8S3052C17D1Ev();
extern void _ZN8S3052C17D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C17__8S3052C14[] = {
  ABISELECT(1352,1116),
  ABISELECT(1456,1176),
  ABISELECT(1256,1032),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C17[0]),
  (VTBL_ENTRY)&_ZN8S3052C17D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C17D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C5D1Ev();
extern void _ZN7S3052C5D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C58S3052C17__8S3052C14[] = {
  ABISELECT(1256,1032),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&_ZN7S3052C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C77S3052C58S3052C17__A1__8S3052C14[] = {
  ABISELECT(1256,1032),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C77S3052C58S3052C17__A2__8S3052C14[] = {
  ABISELECT(1256,1032),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZThn1256_N7S3052C8D1Ev,_ZThn1032_N7S3052C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void ABISELECT(_ZThn1256_N7S3052C8D0Ev,_ZThn1032_N7S3052C8D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C77S3052C58S3052C17__A2__8S3052C14[] = {
  0,
  ABISELECT(-1256,-1032),
  ABISELECT(-1256,-1032),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZThn1256_N7S3052C7D1Ev,_ZThn1032_N7S3052C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void ABISELECT(_ZThn1256_N7S3052C7D0Ev,_ZThn1032_N7S3052C7D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C77S3052C58S3052C17__A1__8S3052C14[] = {
  0,
  ABISELECT(-1256,-1032),
  ABISELECT(-1256,-1032),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev)();
extern void ABISELECT(_ZThn1256_N7S3052C5D1Ev,_ZThn1032_N7S3052C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev)();
extern void ABISELECT(_ZThn1256_N7S3052C5D0Ev,_ZThn1032_N7S3052C5D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C58S3052C17__8S3052C14[] = {
  0,
  ABISELECT(-1256,-1032),
  ABISELECT(-1256,-1032),
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3052C17D1Ev,_ZTv0_n12_N8S3052C17D1Ev)();
extern void ABISELECT(_ZThn1256_N8S3052C17D1Ev,_ZThn1032_N8S3052C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3052C17D0Ev,_ZTv0_n12_N8S3052C17D0Ev)();
extern void ABISELECT(_ZThn1256_N8S3052C17D0Ev,_ZThn1032_N8S3052C17D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__8S3052C17__8S3052C14[] = {
  0,
  ABISELECT(-1256,-1032),
  ABISELECT(-1256,-1032),
  (VTBL_ENTRY)&(_ZTI8S3052C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C17D1Ev,_ZTv0_n12_N8S3052C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C17D0Ev,_ZTv0_n12_N8S3052C17D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C17D1Ev,_ZTv0_n16_N8S3052C17D1Ev)();
extern void ABISELECT(_ZThn1456_N8S3052C17D1Ev,_ZThn1176_N8S3052C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C17D0Ev,_ZTv0_n16_N8S3052C17D0Ev)();
extern void ABISELECT(_ZThn1456_N8S3052C17D0Ev,_ZThn1176_N8S3052C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3052C8__A1__8S3052C17__8S3052C14[] = {
  ABISELECT(-1456,-1176),
  ABISELECT(-200,-144),
  ABISELECT(-1456,-1176),
  (VTBL_ENTRY)&(_ZTI8S3052C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C17D1Ev,_ZTv0_n16_N8S3052C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C17D0Ev,_ZTv0_n16_N8S3052C17D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3052C17D1Ev,_ZTv0_n16_N8S3052C17D1Ev)();
extern void ABISELECT(_ZThn1352_N8S3052C17D1Ev,_ZThn1116_N8S3052C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C17D0Ev,_ZTv0_n16_N8S3052C17D0Ev)();
extern void ABISELECT(_ZThn1352_N8S3052C17D0Ev,_ZThn1116_N8S3052C17D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__A1__8S3052C17__8S3052C14[] = {
  0,
  0,
  ABISELECT(-1352,-1116),
  ABISELECT(-96,-84),
  ABISELECT(-1352,-1116),
  (VTBL_ENTRY)&(_ZTI8S3052C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C17D1Ev,_ZTv0_n16_N8S3052C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C17D0Ev,_ZTv0_n16_N8S3052C17D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__8S3052C14[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C7__8S3052C14[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C7__8S3052C14[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C7__8S3052C14[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C8__A1__8S3052C14[] = {
  ABISELECT(-200,-144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C8__A1__8S3052C14[] = {
  0,
  ABISELECT(200,144),
  ABISELECT(200,144),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
static  VTT_ENTRY vtt_S3052C14[] = {
  {&(_ZTV8S3052C14[5]),  5,46},
  {&(_tg__ZTV8S3052C15__8S3052C14[4]),  4,7},
  {&(_tg__ZTV7S3052C6__8S3052C15__8S3052C14[4]),  4,7},
  {&(_tg__ZTV7S3052C7__8S3052C15__8S3052C14[6]),  6,10},
  {&(_tg__ZTV8S3052C17__8S3052C14[5]),  5,9},
  {&(_tg__ZTV7S3052C58S3052C17__8S3052C14[3]),  3,7},
  {&(_tg__ZTV7S3052C77S3052C58S3052C17__A1__8S3052C14[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C77S3052C58S3052C17__A2__8S3052C14[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C77S3052C58S3052C17__A2__8S3052C14[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C77S3052C58S3052C17__A1__8S3052C14[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C58S3052C17__8S3052C14[4]),  4,7},
  {&(_tg__ZTV7S3052C6__8S3052C17__8S3052C14[4]),  4,7},
  {&(_tg__ZTV7S3052C8__A1__8S3052C17__8S3052C14[4]),  4,6},
  {&(_tg__ZTV7S3052C7__A1__8S3052C17__8S3052C14[6]),  6,10},
  {&(_ZTV8S3052C14[27]),  27,46},
  {&(_ZTV8S3052C14[36]),  36,46},
  {&(_ZTV8S3052C14[44]),  44,46},
  {&(_ZTV8S3052C14[19]),  19,46},
  {&(_tg__ZTV7S3052C7__8S3052C14[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C7__8S3052C14[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C7__8S3052C14[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C7__8S3052C14[4]),  4,7},
  {&(_tg__ZTV7S3052C8__A1__8S3052C14[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C8__A1__8S3052C14[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S3052C14[];
extern  VTBL_ENTRY _ZTV8S3052C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C14[];
static VTBL_ENTRY alt_thunk_names9[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C17D0Ev,_ZTv0_n16_N8S3052C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1352_N8S3052C17D0Ev,_ZThn1116_N8S3052C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N8S3052C17D0Ev,_ZThn1176_N8S3052C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C17D1Ev,_ZTv0_n16_N8S3052C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1352_N8S3052C17D1Ev,_ZThn1116_N8S3052C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N8S3052C17D1Ev,_ZThn1176_N8S3052C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C17D0Ev,_ZTv0_n12_N8S3052C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1256_N8S3052C17D0Ev,_ZThn1032_N8S3052C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C17D1Ev,_ZTv0_n12_N8S3052C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1256_N8S3052C17D1Ev,_ZThn1032_N8S3052C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1256_N7S3052C5D0Ev,_ZThn1032_N7S3052C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1256_N7S3052C5D1Ev,_ZThn1032_N7S3052C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1256_N7S3052C7D0Ev,_ZThn1032_N7S3052C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1256_N7S3052C7D1Ev,_ZThn1032_N7S3052C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1256_N7S3052C8D0Ev,_ZThn1032_N7S3052C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1256_N7S3052C8D1Ev,_ZThn1032_N7S3052C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2744_N8S3052C15D0Ev,_ZThn2140_N8S3052C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2744_N8S3052C15D1Ev,_ZThn2140_N8S3052C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2648_N8S3052C15D0Ev,_ZThn2056_N8S3052C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2648_N8S3052C15D1Ev,_ZThn2056_N8S3052C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C14D0Ev,_ZTv0_n16_N8S3052C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2848_N8S3052C14D0Ev,_ZThn2200_N8S3052C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2744_N8S3052C14D0Ev,_ZThn2140_N8S3052C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C14D1Ev,_ZTv0_n16_N8S3052C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2848_N8S3052C14D1Ev,_ZThn2200_N8S3052C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2744_N8S3052C14D1Ev,_ZThn2140_N8S3052C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C14D0Ev,_ZTv0_n12_N8S3052C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2648_N8S3052C14D0Ev,_ZThn2056_N8S3052C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C14D1Ev,_ZTv0_n12_N8S3052C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2648_N8S3052C14D1Ev,_ZThn2056_N8S3052C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3052C14 = {  "S3052C14", // class name
  bases_S3052C14, 11,
  &(vtc_S3052C14[0]), // expected_vtbl_contents
  &(vtt_S3052C14[0]), // expected_vtt_contents
  ABISELECT(2880,2224), // object size
  NSPAIRA(_ZTI8S3052C14),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S3052C14),46, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3052C14),24, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names9,
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S3052C18  {
  short s3052c18f0;
  void *s3052c18f1[9];
  char s3052c18f2;
  int s3052c18f3[5];
  __tsi64 s3052c18f4;
  void *s3052c18f5;
  void *s3052c18f6;
  int s3052c18f7;
  long double s3052c18f8;
  int s3052c18f9[4];
  int s3052c18f10:32;
  int s3052c18f11;
  long double s3052c18f12;
  void  mf3052c18(); // _ZN8S3052C189mf3052c18Ev
};
//SIG(1 S3052C18) U1{ m Fs Fp[9] Fc Fi[5] FL Fp Fp Fi FD Fi[4] Fi:32 Fi FD}

#endif // __cplusplus
#ifdef __cplusplus

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



//skip512 S3052C22_nt

#else // __cplusplus

Class_Descriptor cd_S3052C22_nt = {  "S3052C22_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  S3052C21  : virtual S3052C7 , virtual S3052C9 , S3052C15 {
  void *s3052c21f0;
  ::S3052C22_nt s3052c21f1;
  ::S3052C6 s3052c21f2;
  __tsi64 s3052c21f3;
  ::S3052C13 s3052c21f4;
  __tsi64 s3052c21f5[6];
  __tsi64 s3052c21f6;
  ::S3052C5 s3052c21f7;
  virtual void  v9(); // _ZN8S3052C212v9Ev
  ~S3052C21(); // tgen
  S3052C21(); // tgen
};
//SIG(-1 S3052C21) C1{ VBC2{ VBC3{ vd v2 Fs[6] FL[8] Fi} BC4{ VBC3 FL Fp FL:54} v3 v4 Fc:0 Fp[8] Fc} VBC5{ BC6{ m Fp Fi FL Fp Fi} VBC2 Fp Fc[4] Fi:11 Fp[2] Fi[6] FC7{ VBC3 BC2 BC8{ VBC3 BC2 Fp[3] Fc:8 Fi[2] Fc FC3 Fp[3] FL[5] Fi} BC9{ vd m FC2} VBC4 Fp Fl FC8 FC9 FC4 Fi[2] FU10{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} BC11{ BC9 VBC3 VBC2 v5 FC2[2] FD FC9 Fp[3] FC8 Fi FU12{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi} v1 Fp FC13{} FC3 FL FU10 FL[6] FL FC8}


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

static void Test_S3052C21()
{
  extern Class_Descriptor cd_S3052C21;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(764,2264)];
    init_test(&cd_S3052C21, buf);
    S3052C21 *dp, &lv = *(dp=new (buf) S3052C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12208,9052), "sizeof(S3052C21)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3052C21)");
    check_base_class_offset(lv, (S3052C6*)(S3052C7*), ABISELECT(2008,1480), "S3052C21");
    check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*), ABISELECT(2008,1480), "S3052C21");
    check_base_class_offset(lv, (S3052C6*)(S3052C15*), ABISELECT(2008,1480), "S3052C21");
    check_base_class_offset(lv, (S3052C8*)(S3052C7*), ABISELECT(1904,1420), "S3052C21");
    check_base_class_offset(lv, (S3052C7*), ABISELECT(1904,1420), "S3052C21");
    check_base_class_offset(lv, (S3052C7*)(S3052C9*), ABISELECT(1904,1420), "S3052C21");
    check_base_class_offset(lv, (S3052C7*)(S3052C15*), ABISELECT(1904,1420), "S3052C21");
    check_base_class_offset(lv, (S3052C10*)(S3052C9*), ABISELECT(2120,1568), "S3052C21");
    check_base_class_offset(lv, (S3052C9*), ABISELECT(2112,1564), "S3052C21");
    check_base_class_offset(lv, (S3052C12*)(S3052C15*), 0, "S3052C21");
    check_base_class_offset(lv, (S3052C15*), 0, "S3052C21");
    check_field_offset(lv, s3052c21f0, ABISELECT(1296,940), "S3052C21.s3052c21f0");
    check_field_offset(lv, s3052c21f1, ABISELECT(1304,944), "S3052C21.s3052c21f1");
    check_field_offset(lv, s3052c21f2, ABISELECT(1312,948), "S3052C21.s3052c21f2");
    check_field_offset(lv, s3052c21f3, ABISELECT(1408,1032), "S3052C21.s3052c21f3");
    check_field_offset(lv, s3052c21f4, ABISELECT(1424,1040), "S3052C21.s3052c21f4");
    check_field_offset(lv, s3052c21f5, ABISELECT(1440,1052), "S3052C21.s3052c21f5");
    check_field_offset(lv, s3052c21f6, ABISELECT(1488,1100), "S3052C21.s3052c21f6");
    check_field_offset(lv, s3052c21f7, ABISELECT(1496,1108), "S3052C21.s3052c21f7");
    test_class_info(&lv, &cd_S3052C21);
    dp->~S3052C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3052C21(Test_S3052C21, "S3052C21", ABISELECT(12208,9052));

#else // __cplusplus

extern void _ZN8S3052C21C1Ev();
extern void _ZN8S3052C21D1Ev();
Name_Map name_map_S3052C21[] = {
  NSPAIR(_ZN8S3052C21C1Ev),
  NSPAIR(_ZN8S3052C21D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C6;
extern VTBL_ENTRY _ZTI7S3052C6[];
extern  VTBL_ENTRY _ZTV7S3052C6[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S3052C9;
extern VTBL_ENTRY _ZTI7S3052C9[];
extern  VTBL_ENTRY _ZTV7S3052C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C9[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S3052C15;
extern VTBL_ENTRY _ZTI8S3052C15[];
extern  VTBL_ENTRY _ZTV8S3052C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C15[];
static Base_Class bases_S3052C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C6,    ABISELECT(2008,1480), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //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_S3052C8,    ABISELECT(1904,1420), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(1904,1420), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //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},
  {&cd_S3052C10,    ABISELECT(2120,1568), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3052C9,    ABISELECT(2112,1564), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S3052C15,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3052C21[];
extern void _ZN8S3052C21D1Ev();
extern void _ZN8S3052C21D0Ev();
extern void _ZN8S3052C152v6Ev();
extern void _ZN8S3052C212v9Ev();
extern void ABISELECT(_ZTv0_n32_N8S3052C21D1Ev,_ZTv0_n16_N8S3052C21D1Ev)();
extern void ABISELECT(_ZThn1904_N8S3052C21D1Ev,_ZThn1420_N8S3052C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C21D0Ev,_ZTv0_n16_N8S3052C21D0Ev)();
extern void ABISELECT(_ZThn1904_N8S3052C21D0Ev,_ZThn1420_N8S3052C21D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S3052C21D1Ev,_ZTv0_n12_N8S3052C21D1Ev)();
extern void ABISELECT(_ZThn2008_N8S3052C21D1Ev,_ZThn1480_N8S3052C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3052C21D0Ev,_ZTv0_n12_N8S3052C21D0Ev)();
extern void ABISELECT(_ZThn2008_N8S3052C21D0Ev,_ZThn1480_N8S3052C21D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3052C21D1Ev,_ZTv0_n20_N8S3052C21D1Ev)();
extern void ABISELECT(_ZThn2112_N8S3052C21D1Ev,_ZThn1564_N8S3052C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3052C21D0Ev,_ZTv0_n20_N8S3052C21D0Ev)();
extern void ABISELECT(_ZThn2112_N8S3052C21D0Ev,_ZThn1564_N8S3052C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3052C21[] = {
  ABISELECT(2112,1564),
  ABISELECT(1904,1420),
  ABISELECT(2008,1480),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C21[0]),
  (VTBL_ENTRY)&_ZN8S3052C21D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C21D0Ev,
  (VTBL_ENTRY)&_ZN8S3052C152v6Ev,
  (VTBL_ENTRY)&_ZN8S3052C212v9Ev,
  0,
  0,
  ABISELECT(-1904,-1420),
  ABISELECT(104,60),
  ABISELECT(-1904,-1420),
  (VTBL_ENTRY)&(_ZTI8S3052C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C21D1Ev,_ZTv0_n16_N8S3052C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C21D0Ev,_ZTv0_n16_N8S3052C21D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  0,
  ABISELECT(-2008,-1480),
  ABISELECT(-2008,-1480),
  (VTBL_ENTRY)&(_ZTI8S3052C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C21D1Ev,_ZTv0_n12_N8S3052C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C21D0Ev,_ZTv0_n12_N8S3052C21D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
  ABISELECT(-2112,-1564),
  ABISELECT(-104,-84),
  ABISELECT(-208,-144),
  ABISELECT(-2112,-1564),
  (VTBL_ENTRY)&(_ZTI8S3052C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3052C21D1Ev,_ZTv0_n20_N8S3052C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3052C21D0Ev,_ZTv0_n20_N8S3052C21D0Ev),
};
extern VTBL_ENTRY _ZTV8S3052C21[];
extern void _ZN8S3052C15D1Ev();
extern void _ZN8S3052C15D0Ev();
extern void _ZN8S3052C152v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C15__8S3052C21[] = {
  ABISELECT(1904,1420),
  ABISELECT(2008,1480),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&_ZN8S3052C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C15D0Ev,
  (VTBL_ENTRY)&_ZN8S3052C152v6Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev)();
extern void ABISELECT(_ZThn2008_N8S3052C15D1Ev,_ZThn1480_N8S3052C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev)();
extern void ABISELECT(_ZThn2008_N8S3052C15D0Ev,_ZThn1480_N8S3052C15D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__8S3052C15__8S3052C21[] = {
  0,
  ABISELECT(-2008,-1480),
  ABISELECT(-2008,-1480),
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev)();
extern void ABISELECT(_ZThn1904_N8S3052C15D1Ev,_ZThn1420_N8S3052C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev)();
extern void ABISELECT(_ZThn1904_N8S3052C15D0Ev,_ZThn1420_N8S3052C15D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__8S3052C15__8S3052C21[] = {
  0,
  0,
  ABISELECT(-1904,-1420),
  ABISELECT(104,60),
  ABISELECT(-1904,-1420),
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__8S3052C21[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C7__8S3052C21[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZThn104_N7S3052C8D1Ev,_ZThn60_N7S3052C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void ABISELECT(_ZThn104_N7S3052C8D0Ev,_ZThn60_N7S3052C8D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C7__8S3052C21[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZThn104_N7S3052C7D1Ev,_ZThn60_N7S3052C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void ABISELECT(_ZThn104_N7S3052C7D0Ev,_ZThn60_N7S3052C7D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C7__8S3052C21[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN7S3052C9D1Ev();
extern void _ZN7S3052C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C9__8S3052C21[] = {
  ABISELECT(-104,-84),
  ABISELECT(-208,-144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C9[0]),
  (VTBL_ENTRY)&_ZN7S3052C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C9D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S3052C9D1Ev,_ZTv0_n16_N7S3052C9D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S3052C9D0Ev,_ZTv0_n16_N7S3052C9D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__7S3052C9__8S3052C21[] = {
  0,
  0,
  ABISELECT(208,144),
  ABISELECT(104,60),
  ABISELECT(208,144),
  (VTBL_ENTRY)&(_ZTI7S3052C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C9D1Ev,_ZTv0_n16_N7S3052C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C9D0Ev,_ZTv0_n16_N7S3052C9D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C9D1Ev,_ZTv0_n12_N7S3052C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C9D0Ev,_ZTv0_n12_N7S3052C9D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C9__8S3052C21[] = {
  0,
  ABISELECT(104,84),
  ABISELECT(104,84),
  (VTBL_ENTRY)&(_ZTI7S3052C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C9D1Ev,_ZTv0_n12_N7S3052C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C9D0Ev,_ZTv0_n12_N7S3052C9D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
static  VTT_ENTRY vtt_S3052C21[] = {
  {&(_ZTV8S3052C21[5]),  5,33},
  {&(_tg__ZTV8S3052C15__8S3052C21[4]),  4,7},
  {&(_tg__ZTV7S3052C6__8S3052C15__8S3052C21[4]),  4,7},
  {&(_tg__ZTV7S3052C7__8S3052C15__8S3052C21[6]),  6,10},
  {&(_ZTV8S3052C21[15]),  15,33},
  {&(_ZTV8S3052C21[23]),  23,33},
  {&(_ZTV8S3052C21[31]),  31,33},
  {&(_tg__ZTV7S3052C7__8S3052C21[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C7__8S3052C21[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C7__8S3052C21[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C7__8S3052C21[4]),  4,7},
  {&(_tg__ZTV7S3052C9__8S3052C21[4]),  4,6},
  {&(_tg__ZTV7S3052C7__7S3052C9__8S3052C21[6]),  6,10},
  {&(_tg__ZTV7S3052C6__7S3052C9__8S3052C21[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S3052C21[];
extern  VTBL_ENTRY _ZTV8S3052C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C21[];
static VTBL_ENTRY alt_thunk_names10[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3052C7D0Ev,_ZThn60_N7S3052C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3052C7D1Ev,_ZThn60_N7S3052C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3052C8D0Ev,_ZThn60_N7S3052C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S3052C8D1Ev,_ZThn60_N7S3052C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N8S3052C15D0Ev,_ZThn1420_N8S3052C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N8S3052C15D1Ev,_ZThn1420_N8S3052C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2008_N8S3052C15D0Ev,_ZThn1480_N8S3052C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2008_N8S3052C15D1Ev,_ZThn1480_N8S3052C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3052C21D0Ev,_ZTv0_n20_N8S3052C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N8S3052C21D0Ev,_ZThn1564_N8S3052C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3052C21D1Ev,_ZTv0_n20_N8S3052C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N8S3052C21D1Ev,_ZThn1564_N8S3052C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C21D0Ev,_ZTv0_n12_N8S3052C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2008_N8S3052C21D0Ev,_ZThn1480_N8S3052C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C21D1Ev,_ZTv0_n12_N8S3052C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2008_N8S3052C21D1Ev,_ZThn1480_N8S3052C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C21D0Ev,_ZTv0_n16_N8S3052C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N8S3052C21D0Ev,_ZThn1420_N8S3052C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C21D1Ev,_ZTv0_n16_N8S3052C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N8S3052C21D1Ev,_ZThn1420_N8S3052C21D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3052C21 = {  "S3052C21", // class name
  bases_S3052C21, 7,
  &(vtc_S3052C21[0]), // expected_vtbl_contents
  &(vtt_S3052C21[0]), // expected_vtt_contents
  ABISELECT(12208,9052), // object size
  NSPAIRA(_ZTI8S3052C21),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3052C21),33, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3052C21),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names10,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3052C20  : virtual S3052C6 , virtual S3052C21 , S3052C14 {
  ::S3052C11 s3052c20f0;
  ::S3052C13 s3052c20f1;
  int s3052c20f2;
  char s3052c20f3;
  virtual  ~S3052C20(); // _ZN8S3052C20D2Ev
  S3052C20(); // tgen
};
//SIG(-1 S3052C20) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} VBC3{ VBC4{ VBC2 BC5{ VBC2 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} VBC6{ BC7{ m Fp Fi FL Fp Fi} VBC4 Fp Fc[4] Fi:11 Fp[2] Fi[6] FC8{ VBC2 BC4 BC9{ VBC2 BC4 Fp[3] Fc:8 Fi[2] Fc FC2 Fp[3] FL[5] Fi} BC10{ vd m FC4} VBC5 Fp Fl FC9 FC10 FC5 Fi[2] FU11{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} BC12{ BC10 VBC2 VBC4 v4 FC4[2] FD FC10 Fp[3] FC9 Fi FU13{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi} v5 Fp FC14{} FC2 FL FU11 FL[6] FL FC9} BC15{ BC12 VBC5 BC2 BC16{ VBC2 BC9 VBC5 VBC4 vd Fp Fp[5] Fp} v6 FC2[9] Fc Fi Fi Fi Fc} vd FC8 FU11 Fi Fc}


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

static void Test_S3052C20()
{
  extern Class_Descriptor cd_S3052C20;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1038,3098)];
    init_test(&cd_S3052C20, buf);
    S3052C20 *dp, &lv = *(dp=new (buf) S3052C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16592,12388), "sizeof(S3052C20)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3052C20)");
    /*is_ambiguous_... S3052C20::S3052C6 */ AMB_check_base_class_offset(lv, (S3052C6*), ABISELECT(4344,3312), "S3052C20");
    /*is_ambiguous_... S3052C20::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C7*), ABISELECT(4344,3312), "S3052C20");
    /*is_ambiguous_... S3052C20::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*), ABISELECT(4344,3312), "S3052C20");
    check_base_class_offset(lv, (S3052C6*)(S3052C15*)(S3052C21*), ABISELECT(4344,3312), "S3052C20");
    check_base_class_offset(lv, (S3052C6*)(S3052C15*)(S3052C14*), ABISELECT(4344,3312), "S3052C20");
    /*is_ambiguous_... S3052C20::S3052C8 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*), ABISELECT(4344,3312), "S3052C20");
    check_base_class_offset(lv, (S3052C6*)(S3052C17*)(S3052C14*), ABISELECT(4344,3312), "S3052C20");
    check_base_class_offset(lv, (S3052C6*)(S3052C5*)(S3052C17*)(S3052C14*), ABISELECT(4344,3312), "S3052C20");
    check_base_class_offset(lv, (S3052C6*)(S3052C7*)(S3052C5*)(S3052C17*)(S3052C14*), ABISELECT(4344,3312), "S3052C20");
    check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*)(S3052C5*)(S3052C17*)(S3052C14*), ABISELECT(4344,3312), "S3052C20");
    /*is_ambiguous_... S3052C20::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C7*), ABISELECT(6352,4816), "S3052C20");
    check_base_class_offset(lv, (S3052C7*)(S3052C21*), ABISELECT(6352,4816), "S3052C20");
    check_base_class_offset(lv, (S3052C7*)(S3052C9*), ABISELECT(6352,4816), "S3052C20");
    check_base_class_offset(lv, (S3052C7*)(S3052C15*)(S3052C21*), ABISELECT(6352,4816), "S3052C20");
    check_base_class_offset(lv, (S3052C7*)(S3052C15*)(S3052C14*), ABISELECT(6352,4816), "S3052C20");
    /*is_ambiguous_... S3052C17::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C7*)(S3052C17*)(S3052C14*), ABISELECT(6352,4816), "S3052C20");
    check_base_class_offset(lv, (S3052C10*)(S3052C9*), ABISELECT(6472,4880), "S3052C20");
    check_base_class_offset(lv, (S3052C9*)(S3052C21*), ABISELECT(6464,4876), "S3052C20");
    check_base_class_offset(lv, (S3052C12*)(S3052C15*)(S3052C21*), ABISELECT(4448,3396), "S3052C20");
    check_base_class_offset(lv, (S3052C15*)(S3052C21*), ABISELECT(4448,3396), "S3052C20");
    check_base_class_offset(lv, (S3052C21*), ABISELECT(4448,3396), "S3052C20");
    check_base_class_offset(lv, (S3052C12*)(S3052C15*)(S3052C14*), 0, "S3052C20");
    check_base_class_offset(lv, (S3052C15*)(S3052C14*), 0, "S3052C20");
    /*is_ambiguous_... S3052C14::S3052C8 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C14*), ABISELECT(16560,12364), "S3052C20");
    /*is_ambiguous_... S3052C17::S3052C8 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C17*)(S3052C14*), ABISELECT(16560,12364), "S3052C20");
    /*is_ambiguous_... S3052C14::S3052C6 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C14*), ABISELECT(1296,940), "S3052C20");
    check_base_class_offset(lv, (S3052C8*)(S3052C7*)(S3052C5*)(S3052C17*)(S3052C14*), ABISELECT(1392,1024), "S3052C20");
    check_base_class_offset(lv, (S3052C7*)(S3052C5*)(S3052C17*)(S3052C14*), ABISELECT(1392,1024), "S3052C20");
    check_base_class_offset(lv, (S3052C5*)(S3052C17*)(S3052C14*), ABISELECT(1392,1024), "S3052C20");
    check_base_class_offset(lv, (S3052C17*)(S3052C14*), ABISELECT(1392,1024), "S3052C20");
    check_base_class_offset(lv, (S3052C14*), 0, "S3052C20");
    check_field_offset(lv, s3052c20f0, ABISELECT(2656,2056), "S3052C20.s3052c20f0");
    check_field_offset(lv, s3052c20f1, ABISELECT(4320,3292), "S3052C20.s3052c20f1");
    check_field_offset(lv, s3052c20f2, ABISELECT(4336,3304), "S3052C20.s3052c20f2");
    check_field_offset(lv, s3052c20f3, ABISELECT(4340,3308), "S3052C20.s3052c20f3");
    test_class_info(&lv, &cd_S3052C20);
    dp->~S3052C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3052C20(Test_S3052C20, "S3052C20", ABISELECT(16592,12388));

#else // __cplusplus

extern void _ZN8S3052C20C1Ev();
extern void _ZN8S3052C20D2Ev();
Name_Map name_map_S3052C20[] = {
  NSPAIR(_ZN8S3052C20C1Ev),
  NSPAIR(_ZN8S3052C20D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C6;
extern VTBL_ENTRY _ZTI7S3052C6[];
extern  VTBL_ENTRY _ZTV7S3052C6[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S3052C9;
extern VTBL_ENTRY _ZTI7S3052C9[];
extern  VTBL_ENTRY _ZTV7S3052C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C9[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S3052C15;
extern VTBL_ENTRY _ZTI8S3052C15[];
extern  VTBL_ENTRY _ZTV8S3052C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C15[];
extern Class_Descriptor cd_S3052C21;
extern VTBL_ENTRY _ZTI8S3052C21[];
extern  VTBL_ENTRY _ZTV8S3052C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C21[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S3052C15;
extern VTBL_ENTRY _ZTI8S3052C15[];
extern  VTBL_ENTRY _ZTV8S3052C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C15[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C6;
extern VTBL_ENTRY _ZTI7S3052C6[];
extern  VTBL_ENTRY _ZTV7S3052C6[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C5;
extern VTBL_ENTRY _ZTI7S3052C5[];
extern  VTBL_ENTRY _ZTV7S3052C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C5[];
extern Class_Descriptor cd_S3052C17;
extern VTBL_ENTRY _ZTI8S3052C17[];
extern  VTBL_ENTRY _ZTV8S3052C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C17[];
extern Class_Descriptor cd_S3052C14;
extern VTBL_ENTRY _ZTI8S3052C14[];
extern  VTBL_ENTRY _ZTV8S3052C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C14[];
static Base_Class bases_S3052C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C6,    ABISELECT(4344,3312), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C8,    ABISELECT(6352,4816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(6352,4816), //bcp->offset
    44, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3052C10,    ABISELECT(6472,4880), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3052C9,    ABISELECT(6464,4876), //bcp->offset
    54, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3052C12,    ABISELECT(4448,3396), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S3052C15,    ABISELECT(4448,3396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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_S3052C21,    ABISELECT(4448,3396), //bcp->offset
    32, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S3052C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    16, //immediately_derived
  0, 0},
  {&cd_S3052C8,    ABISELECT(16560,12364), //bcp->offset
    61, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S3052C6,    ABISELECT(1296,940), //bcp->offset
    11, //bcp->virtual_function_table_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
    16, //immediately_derived
  0, 0},
  {&cd_S3052C8,    ABISELECT(1392,1024), //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
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(1392,1024), //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
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3052C5,    ABISELECT(1392,1024), //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
    14, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3052C17,    ABISELECT(1392,1024), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3052C14,    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
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3052C20[];
extern void _ZN8S3052C20D1Ev();
extern void _ZN8S3052C20D0Ev();
extern void _ZN8S3052C152v6Ev();
extern void _ZN8S3052C142v7Ev();
extern void ABISELECT(_ZThn1296_N8S3052C20D1Ev,_ZThn940_N8S3052C20D1Ev)();
extern void ABISELECT(_ZThn1296_N8S3052C20D0Ev,_ZThn940_N8S3052C20D0Ev)();
extern void _ZN7S3052C62v3Ev();
extern void ABISELECT(_ZThn1392_N8S3052C20D1Ev,_ZThn1024_N8S3052C20D1Ev)();
extern void ABISELECT(_ZThn1392_N8S3052C20D0Ev,_ZThn1024_N8S3052C20D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S3052C20D1Ev,_ZTv0_n12_N8S3052C20D1Ev)();
extern void ABISELECT(_ZThn4344_N8S3052C20D1Ev,_ZThn3312_N8S3052C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3052C20D0Ev,_ZTv0_n12_N8S3052C20D0Ev)();
extern void ABISELECT(_ZThn4344_N8S3052C20D0Ev,_ZThn3312_N8S3052C20D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S3052C20D1Ev,_ZTv0_n24_N8S3052C20D1Ev)();
extern void ABISELECT(_ZThn4448_N8S3052C20D1Ev,_ZThn3396_N8S3052C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3052C20D0Ev,_ZTv0_n24_N8S3052C20D0Ev)();
extern void ABISELECT(_ZThn4448_N8S3052C20D0Ev,_ZThn3396_N8S3052C20D0Ev)() __attribute__((weak));
extern void _ZN8S3052C152v6Ev();
extern void _ZN8S3052C212v9Ev();
extern void ABISELECT(_ZTv0_n32_N8S3052C20D1Ev,_ZTv0_n16_N8S3052C20D1Ev)();
extern void ABISELECT(_ZThn6352_N8S3052C20D1Ev,_ZThn4816_N8S3052C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C20D0Ev,_ZTv0_n16_N8S3052C20D0Ev)();
extern void ABISELECT(_ZThn6352_N8S3052C20D0Ev,_ZThn4816_N8S3052C20D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTv0_n40_N8S3052C20D1Ev,_ZTv0_n20_N8S3052C20D1Ev)();
extern void ABISELECT(_ZThn6464_N8S3052C20D1Ev,_ZThn4876_N8S3052C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3052C20D0Ev,_ZTv0_n20_N8S3052C20D0Ev)();
extern void ABISELECT(_ZThn6464_N8S3052C20D0Ev,_ZThn4876_N8S3052C20D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C20D1Ev,_ZTv0_n16_N8S3052C20D1Ev)();
extern void ABISELECT(_ZThn16560_N8S3052C20D1Ev,_ZThn12364_N8S3052C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C20D0Ev,_ZTv0_n16_N8S3052C20D0Ev)();
extern void ABISELECT(_ZThn16560_N8S3052C20D0Ev,_ZThn12364_N8S3052C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3052C20[] = {
  ABISELECT(6464,4876),
  ABISELECT(4448,3396),
  ABISELECT(16560,12364),
  ABISELECT(6352,4816),
  ABISELECT(4344,3312),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C20[0]),
  (VTBL_ENTRY)&_ZN8S3052C20D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C20D0Ev,
  (VTBL_ENTRY)&_ZN8S3052C152v6Ev,
  (VTBL_ENTRY)&_ZN8S3052C142v7Ev,
  ABISELECT(-1296,-940),
  (VTBL_ENTRY)&(_ZTI8S3052C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N8S3052C20D1Ev,_ZThn940_N8S3052C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N8S3052C20D0Ev,_ZThn940_N8S3052C20D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
  ABISELECT(4960,3792),
  ABISELECT(15168,11340),
  ABISELECT(2952,2288),
  ABISELECT(-1392,-1024),
  (VTBL_ENTRY)&(_ZTI8S3052C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N8S3052C20D1Ev,_ZThn1024_N8S3052C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N8S3052C20D0Ev,_ZThn1024_N8S3052C20D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  0,
  ABISELECT(-4344,-3312),
  ABISELECT(-4344,-3312),
  (VTBL_ENTRY)&(_ZTI8S3052C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C20D1Ev,_ZTv0_n12_N8S3052C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C20D0Ev,_ZTv0_n12_N8S3052C20D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
  0,
  0,
  ABISELECT(-4448,-3396),
  ABISELECT(2016,1480),
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  ABISELECT(-4448,-3396),
  (VTBL_ENTRY)&(_ZTI8S3052C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3052C20D1Ev,_ZTv0_n24_N8S3052C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3052C20D0Ev,_ZTv0_n24_N8S3052C20D0Ev),
  (VTBL_ENTRY)&_ZN8S3052C152v6Ev,
  (VTBL_ENTRY)&_ZN8S3052C212v9Ev,
  0,
  0,
  ABISELECT(-6352,-4816),
  ABISELECT(-2008,-1504),
  ABISELECT(-6352,-4816),
  (VTBL_ENTRY)&(_ZTI8S3052C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C20D1Ev,_ZTv0_n16_N8S3052C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C20D0Ev,_ZTv0_n16_N8S3052C20D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  ABISELECT(-6464,-4876),
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  ABISELECT(-6464,-4876),
  (VTBL_ENTRY)&(_ZTI8S3052C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3052C20D1Ev,_ZTv0_n20_N8S3052C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3052C20D0Ev,_ZTv0_n20_N8S3052C20D0Ev),
  ABISELECT(-16560,-12364),
  ABISELECT(-12216,-9052),
  ABISELECT(-16560,-12364),
  (VTBL_ENTRY)&(_ZTI8S3052C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C20D1Ev,_ZTv0_n16_N8S3052C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C20D0Ev,_ZTv0_n16_N8S3052C20D0Ev),
};
extern VTBL_ENTRY _ZTV8S3052C20[];
extern void _ZN8S3052C14D1Ev();
extern void _ZN8S3052C14D0Ev();
extern void _ZN8S3052C152v6Ev();
extern void _ZN8S3052C142v7Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C14__8S3052C20[] = {
  ABISELECT(16560,12364),
  ABISELECT(6352,4816),
  ABISELECT(4344,3312),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C14[0]),
  (VTBL_ENTRY)&_ZN8S3052C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C14D0Ev,
  (VTBL_ENTRY)&_ZN8S3052C152v6Ev,
  (VTBL_ENTRY)&_ZN8S3052C142v7Ev,
};
extern void _ZN8S3052C15D1Ev();
extern void _ZN8S3052C15D0Ev();
extern void _ZN8S3052C152v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C158S3052C14__A1__8S3052C20[] = {
  ABISELECT(6352,4816),
  ABISELECT(4344,3312),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&_ZN8S3052C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C15D0Ev,
  (VTBL_ENTRY)&_ZN8S3052C152v6Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev)();
extern void ABISELECT(_ZThn4344_N8S3052C15D1Ev,_ZThn3312_N8S3052C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev)();
extern void ABISELECT(_ZThn4344_N8S3052C15D0Ev,_ZThn3312_N8S3052C15D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__8S3052C158S3052C14__A1__8S3052C20[] = {
  0,
  ABISELECT(-4344,-3312),
  ABISELECT(-4344,-3312),
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev)();
extern void ABISELECT(_ZThn6352_N8S3052C15D1Ev,_ZThn4816_N8S3052C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev)();
extern void ABISELECT(_ZThn6352_N8S3052C15D0Ev,_ZThn4816_N8S3052C15D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__8S3052C158S3052C14__A1__8S3052C20[] = {
  0,
  0,
  ABISELECT(-6352,-4816),
  ABISELECT(-2008,-1504),
  ABISELECT(-6352,-4816),
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN8S3052C17D1Ev();
extern void _ZN8S3052C17D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C178S3052C14__8S3052C20[] = {
  ABISELECT(4960,3792),
  ABISELECT(15168,11340),
  ABISELECT(2952,2288),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C17[0]),
  (VTBL_ENTRY)&_ZN8S3052C17D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C17D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C5D1Ev();
extern void _ZN7S3052C5D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C58S3052C178S3052C14__8S3052C20[] = {
  ABISELECT(2952,2288),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&_ZN7S3052C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C77S3052C58S3052C178S3052C14__A1__8S3052C20[] = {
  ABISELECT(2952,2288),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C77S3052C58S3052C178S3052C14__A2__8S3052C20[] = {
  ABISELECT(2952,2288),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZThn2952_N7S3052C8D1Ev,_ZThn2288_N7S3052C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void ABISELECT(_ZThn2952_N7S3052C8D0Ev,_ZThn2288_N7S3052C8D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C77S3052C58S3052C178S3052C14__A2__8S3052C20[] = {
  0,
  ABISELECT(-2952,-2288),
  ABISELECT(-2952,-2288),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZThn2952_N7S3052C7D1Ev,_ZThn2288_N7S3052C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void ABISELECT(_ZThn2952_N7S3052C7D0Ev,_ZThn2288_N7S3052C7D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C77S3052C58S3052C178S3052C14__A1__8S3052C20[] = {
  0,
  ABISELECT(-2952,-2288),
  ABISELECT(-2952,-2288),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev)();
extern void ABISELECT(_ZThn2952_N7S3052C5D1Ev,_ZThn2288_N7S3052C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev)();
extern void ABISELECT(_ZThn2952_N7S3052C5D0Ev,_ZThn2288_N7S3052C5D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C58S3052C178S3052C14__8S3052C20[] = {
  0,
  ABISELECT(-2952,-2288),
  ABISELECT(-2952,-2288),
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3052C17D1Ev,_ZTv0_n12_N8S3052C17D1Ev)();
extern void ABISELECT(_ZThn2952_N8S3052C17D1Ev,_ZThn2288_N8S3052C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3052C17D0Ev,_ZTv0_n12_N8S3052C17D0Ev)();
extern void ABISELECT(_ZThn2952_N8S3052C17D0Ev,_ZThn2288_N8S3052C17D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__8S3052C178S3052C14__8S3052C20[] = {
  0,
  ABISELECT(-2952,-2288),
  ABISELECT(-2952,-2288),
  (VTBL_ENTRY)&(_ZTI8S3052C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C17D1Ev,_ZTv0_n12_N8S3052C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C17D0Ev,_ZTv0_n12_N8S3052C17D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C17D1Ev,_ZTv0_n16_N8S3052C17D1Ev)();
extern void ABISELECT(_ZThn15168_N8S3052C17D1Ev,_ZThn11340_N8S3052C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C17D0Ev,_ZTv0_n16_N8S3052C17D0Ev)();
extern void ABISELECT(_ZThn15168_N8S3052C17D0Ev,_ZThn11340_N8S3052C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3052C8__A1__8S3052C178S3052C14__8S3052C20[] = {
  ABISELECT(-15168,-11340),
  ABISELECT(-12216,-9052),
  ABISELECT(-15168,-11340),
  (VTBL_ENTRY)&(_ZTI8S3052C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C17D1Ev,_ZTv0_n16_N8S3052C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C17D0Ev,_ZTv0_n16_N8S3052C17D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3052C17D1Ev,_ZTv0_n16_N8S3052C17D1Ev)();
extern void ABISELECT(_ZThn4960_N8S3052C17D1Ev,_ZThn3792_N8S3052C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C17D0Ev,_ZTv0_n16_N8S3052C17D0Ev)();
extern void ABISELECT(_ZThn4960_N8S3052C17D0Ev,_ZThn3792_N8S3052C17D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__A1__8S3052C178S3052C14__8S3052C20[] = {
  0,
  0,
  ABISELECT(-4960,-3792),
  ABISELECT(-2008,-1504),
  ABISELECT(-4960,-3792),
  (VTBL_ENTRY)&(_ZTI8S3052C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C17D1Ev,_ZTv0_n16_N8S3052C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C17D0Ev,_ZTv0_n16_N8S3052C17D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3052C14D1Ev,_ZTv0_n12_N8S3052C14D1Ev)();
extern void ABISELECT(_ZThn4344_N8S3052C14D1Ev,_ZThn3312_N8S3052C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3052C14D0Ev,_ZTv0_n12_N8S3052C14D0Ev)();
extern void ABISELECT(_ZThn4344_N8S3052C14D0Ev,_ZThn3312_N8S3052C14D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__8S3052C14__8S3052C20[] = {
  0,
  ABISELECT(-4344,-3312),
  ABISELECT(-4344,-3312),
  (VTBL_ENTRY)&(_ZTI8S3052C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C14D1Ev,_ZTv0_n12_N8S3052C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C14D0Ev,_ZTv0_n12_N8S3052C14D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C14D1Ev,_ZTv0_n16_N8S3052C14D1Ev)();
extern void ABISELECT(_ZThn6352_N8S3052C14D1Ev,_ZThn4816_N8S3052C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C14D0Ev,_ZTv0_n16_N8S3052C14D0Ev)();
extern void ABISELECT(_ZThn6352_N8S3052C14D0Ev,_ZThn4816_N8S3052C14D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__8S3052C14__8S3052C20[] = {
  0,
  0,
  ABISELECT(-6352,-4816),
  ABISELECT(-2008,-1504),
  ABISELECT(-6352,-4816),
  (VTBL_ENTRY)&(_ZTI8S3052C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C14D1Ev,_ZTv0_n16_N8S3052C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C14D0Ev,_ZTv0_n16_N8S3052C14D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C14D1Ev,_ZTv0_n16_N8S3052C14D1Ev)();
extern void ABISELECT(_ZThn16560_N8S3052C14D1Ev,_ZThn12364_N8S3052C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C14D0Ev,_ZTv0_n16_N8S3052C14D0Ev)();
extern void ABISELECT(_ZThn16560_N8S3052C14D0Ev,_ZThn12364_N8S3052C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3052C8__A1__8S3052C14__8S3052C20[] = {
  ABISELECT(-16560,-12364),
  ABISELECT(-12216,-9052),
  ABISELECT(-16560,-12364),
  (VTBL_ENTRY)&(_ZTI8S3052C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C14D1Ev,_ZTv0_n16_N8S3052C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C14D0Ev,_ZTv0_n16_N8S3052C14D0Ev),
};
extern void ABISELECT(_ZThn1392_N8S3052C14D1Ev,_ZThn1024_N8S3052C14D1Ev)();
extern void ABISELECT(_ZThn1392_N8S3052C14D0Ev,_ZThn1024_N8S3052C14D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C17__8S3052C14__8S3052C20[] = {
  ABISELECT(4960,3792),
  ABISELECT(15168,11340),
  ABISELECT(2952,2288),
  ABISELECT(-1392,-1024),
  (VTBL_ENTRY)&(_ZTI8S3052C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N8S3052C14D1Ev,_ZThn1024_N8S3052C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N8S3052C14D0Ev,_ZThn1024_N8S3052C14D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN8S3052C21D1Ev();
extern void _ZN8S3052C21D0Ev();
extern void _ZN8S3052C152v6Ev();
extern void _ZN8S3052C212v9Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C21__8S3052C20[] = {
  ABISELECT(2016,1480),
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C21[0]),
  (VTBL_ENTRY)&_ZN8S3052C21D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C21D0Ev,
  (VTBL_ENTRY)&_ZN8S3052C152v6Ev,
  (VTBL_ENTRY)&_ZN8S3052C212v9Ev,
};
extern void _ZN8S3052C15D1Ev();
extern void _ZN8S3052C15D0Ev();
extern void _ZN8S3052C152v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C158S3052C21__8S3052C20[] = {
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&_ZN8S3052C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C15D0Ev,
  (VTBL_ENTRY)&_ZN8S3052C152v6Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__8S3052C158S3052C21__8S3052C20[] = {
  0,
  ABISELECT(104,84),
  ABISELECT(104,84),
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev)();
extern void ABISELECT(_ZThn1904_N8S3052C15D1Ev,_ZThn1420_N8S3052C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev)();
extern void ABISELECT(_ZThn1904_N8S3052C15D0Ev,_ZThn1420_N8S3052C15D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__8S3052C158S3052C21__8S3052C20[] = {
  0,
  0,
  ABISELECT(-1904,-1420),
  ABISELECT(-2008,-1504),
  ABISELECT(-1904,-1420),
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C21D1Ev,_ZTv0_n16_N8S3052C21D1Ev)();
extern void ABISELECT(_ZThn1904_N8S3052C21D1Ev,_ZThn1420_N8S3052C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C21D0Ev,_ZTv0_n16_N8S3052C21D0Ev)();
extern void ABISELECT(_ZThn1904_N8S3052C21D0Ev,_ZThn1420_N8S3052C21D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__8S3052C21__8S3052C20[] = {
  0,
  0,
  ABISELECT(-1904,-1420),
  ABISELECT(-2008,-1504),
  ABISELECT(-1904,-1420),
  (VTBL_ENTRY)&(_ZTI8S3052C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C21D1Ev,_ZTv0_n16_N8S3052C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C21D0Ev,_ZTv0_n16_N8S3052C21D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3052C21D1Ev,_ZTv0_n12_N8S3052C21D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3052C21D0Ev,_ZTv0_n12_N8S3052C21D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__8S3052C21__8S3052C20[] = {
  0,
  ABISELECT(104,84),
  ABISELECT(104,84),
  (VTBL_ENTRY)&(_ZTI8S3052C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C21D1Ev,_ZTv0_n12_N8S3052C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C21D0Ev,_ZTv0_n12_N8S3052C21D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S3052C21D1Ev,_ZTv0_n20_N8S3052C21D1Ev)();
extern void ABISELECT(_ZThn2016_N8S3052C21D1Ev,_ZThn1480_N8S3052C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3052C21D0Ev,_ZTv0_n20_N8S3052C21D0Ev)();
extern void ABISELECT(_ZThn2016_N8S3052C21D0Ev,_ZThn1480_N8S3052C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3052C9__8S3052C21__8S3052C20[] = {
  ABISELECT(-2016,-1480),
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  ABISELECT(-2016,-1480),
  (VTBL_ENTRY)&(_ZTI8S3052C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3052C21D1Ev,_ZTv0_n20_N8S3052C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3052C21D0Ev,_ZTv0_n20_N8S3052C21D0Ev),
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__8S3052C20[] = {
  ABISELECT(-2008,-1504),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C7__8S3052C20[] = {
  ABISELECT(-2008,-1504),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C7__8S3052C20[] = {
  0,
  ABISELECT(2008,1504),
  ABISELECT(2008,1504),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C7__8S3052C20[] = {
  0,
  ABISELECT(2008,1504),
  ABISELECT(2008,1504),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN7S3052C9D1Ev();
extern void _ZN7S3052C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C9__8S3052C20[] = {
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C9[0]),
  (VTBL_ENTRY)&_ZN7S3052C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C9D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S3052C9D1Ev,_ZTv0_n16_N7S3052C9D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S3052C9D0Ev,_ZTv0_n16_N7S3052C9D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__7S3052C9__8S3052C20[] = {
  0,
  0,
  ABISELECT(112,60),
  ABISELECT(-2008,-1504),
  ABISELECT(112,60),
  (VTBL_ENTRY)&(_ZTI7S3052C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C9D1Ev,_ZTv0_n16_N7S3052C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C9D0Ev,_ZTv0_n16_N7S3052C9D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C9D1Ev,_ZTv0_n12_N7S3052C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C9D0Ev,_ZTv0_n12_N7S3052C9D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C9__8S3052C20[] = {
  0,
  ABISELECT(2120,1564),
  ABISELECT(2120,1564),
  (VTBL_ENTRY)&(_ZTI7S3052C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C9D1Ev,_ZTv0_n12_N7S3052C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C9D0Ev,_ZTv0_n12_N7S3052C9D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C8__A1__8S3052C20[] = {
  ABISELECT(-12216,-9052),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C8__A1__8S3052C20[] = {
  0,
  ABISELECT(12216,9052),
  ABISELECT(12216,9052),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
static  VTT_ENTRY vtt_S3052C20[] = {
  {&(_ZTV8S3052C20[7]),  7,67},
  {&(_tg__ZTV8S3052C14__8S3052C20[5]),  5,9},
  {&(_tg__ZTV8S3052C158S3052C14__A1__8S3052C20[4]),  4,7},
  {&(_tg__ZTV7S3052C6__8S3052C158S3052C14__A1__8S3052C20[4]),  4,7},
  {&(_tg__ZTV7S3052C7__8S3052C158S3052C14__A1__8S3052C20[6]),  6,10},
  {&(_tg__ZTV8S3052C178S3052C14__8S3052C20[5]),  5,9},
  {&(_tg__ZTV7S3052C58S3052C178S3052C14__8S3052C20[3]),  3,7},
  {&(_tg__ZTV7S3052C77S3052C58S3052C178S3052C14__A1__8S3052C20[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C77S3052C58S3052C178S3052C14__A2__8S3052C20[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C77S3052C58S3052C178S3052C14__A2__8S3052C20[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C77S3052C58S3052C178S3052C14__A1__8S3052C20[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C58S3052C178S3052C14__8S3052C20[4]),  4,7},
  {&(_tg__ZTV7S3052C6__8S3052C178S3052C14__8S3052C20[4]),  4,7},
  {&(_tg__ZTV7S3052C8__A1__8S3052C178S3052C14__8S3052C20[4]),  4,6},
  {&(_tg__ZTV7S3052C7__A1__8S3052C178S3052C14__8S3052C20[6]),  6,10},
  {&(_tg__ZTV7S3052C6__8S3052C14__8S3052C20[4]),  4,7},
  {&(_tg__ZTV7S3052C7__8S3052C14__8S3052C20[6]),  6,10},
  {&(_tg__ZTV7S3052C8__A1__8S3052C14__8S3052C20[4]),  4,6},
  {&(_tg__ZTV8S3052C17__8S3052C14__8S3052C20[5]),  5,9},
  {&(_ZTV8S3052C20[29]),  29,67},
  {&(_ZTV8S3052C20[40]),  40,67},
  {&(_ZTV8S3052C20[50]),  50,67},
  {&(_ZTV8S3052C20[59]),  59,67},
  {&(_ZTV8S3052C20[65]),  65,67},
  {&(_ZTV8S3052C20[21]),  21,67},
  {&(_tg__ZTV8S3052C21__8S3052C20[5]),  5,9},
  {&(_tg__ZTV8S3052C158S3052C21__8S3052C20[4]),  4,7},
  {&(_tg__ZTV7S3052C6__8S3052C158S3052C21__8S3052C20[4]),  4,7},
  {&(_tg__ZTV7S3052C7__8S3052C158S3052C21__8S3052C20[6]),  6,10},
  {&(_tg__ZTV7S3052C7__8S3052C21__8S3052C20[6]),  6,10},
  {&(_tg__ZTV7S3052C6__8S3052C21__8S3052C20[4]),  4,7},
  {&(_tg__ZTV7S3052C9__8S3052C21__8S3052C20[5]),  5,7},
  {&(_tg__ZTV7S3052C7__8S3052C20[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C7__8S3052C20[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C7__8S3052C20[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C7__8S3052C20[4]),  4,7},
  {&(_tg__ZTV7S3052C9__8S3052C20[4]),  4,6},
  {&(_tg__ZTV7S3052C7__7S3052C9__8S3052C20[6]),  6,10},
  {&(_tg__ZTV7S3052C6__7S3052C9__8S3052C20[4]),  4,7},
  {&(_tg__ZTV7S3052C8__A1__8S3052C20[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C8__A1__8S3052C20[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S3052C20[];
extern  VTBL_ENTRY _ZTV8S3052C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C20[];
static VTBL_ENTRY alt_thunk_names11[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3052C21D0Ev,_ZTv0_n20_N8S3052C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N8S3052C21D0Ev,_ZThn1480_N8S3052C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3052C21D1Ev,_ZTv0_n20_N8S3052C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N8S3052C21D1Ev,_ZThn1480_N8S3052C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C21D0Ev,_ZTv0_n16_N8S3052C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N8S3052C21D0Ev,_ZThn1420_N8S3052C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C21D1Ev,_ZTv0_n16_N8S3052C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N8S3052C21D1Ev,_ZThn1420_N8S3052C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C14D0Ev,_ZTv0_n16_N8S3052C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16560_N8S3052C14D0Ev,_ZThn12364_N8S3052C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N8S3052C14D0Ev,_ZThn4816_N8S3052C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C14D1Ev,_ZTv0_n16_N8S3052C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16560_N8S3052C14D1Ev,_ZThn12364_N8S3052C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N8S3052C14D1Ev,_ZThn4816_N8S3052C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C14D0Ev,_ZTv0_n12_N8S3052C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4344_N8S3052C14D0Ev,_ZThn3312_N8S3052C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C14D1Ev,_ZTv0_n12_N8S3052C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4344_N8S3052C14D1Ev,_ZThn3312_N8S3052C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C17D0Ev,_ZTv0_n16_N8S3052C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4960_N8S3052C17D0Ev,_ZThn3792_N8S3052C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn15168_N8S3052C17D0Ev,_ZThn11340_N8S3052C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C17D1Ev,_ZTv0_n16_N8S3052C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4960_N8S3052C17D1Ev,_ZThn3792_N8S3052C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn15168_N8S3052C17D1Ev,_ZThn11340_N8S3052C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C17D0Ev,_ZTv0_n12_N8S3052C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2952_N8S3052C17D0Ev,_ZThn2288_N8S3052C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C17D1Ev,_ZTv0_n12_N8S3052C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2952_N8S3052C17D1Ev,_ZThn2288_N8S3052C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2952_N7S3052C5D0Ev,_ZThn2288_N7S3052C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2952_N7S3052C5D1Ev,_ZThn2288_N7S3052C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2952_N7S3052C7D0Ev,_ZThn2288_N7S3052C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2952_N7S3052C7D1Ev,_ZThn2288_N7S3052C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2952_N7S3052C8D0Ev,_ZThn2288_N7S3052C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2952_N7S3052C8D1Ev,_ZThn2288_N7S3052C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N8S3052C15D0Ev,_ZThn1420_N8S3052C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N8S3052C15D0Ev,_ZThn4816_N8S3052C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N8S3052C15D1Ev,_ZThn1420_N8S3052C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N8S3052C15D1Ev,_ZThn4816_N8S3052C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4344_N8S3052C15D0Ev,_ZThn3312_N8S3052C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4344_N8S3052C15D1Ev,_ZThn3312_N8S3052C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3052C20D0Ev,_ZTv0_n20_N8S3052C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6464_N8S3052C20D0Ev,_ZThn4876_N8S3052C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3052C20D1Ev,_ZTv0_n20_N8S3052C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6464_N8S3052C20D1Ev,_ZThn4876_N8S3052C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C20D0Ev,_ZTv0_n16_N8S3052C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16560_N8S3052C20D0Ev,_ZThn12364_N8S3052C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N8S3052C20D0Ev,_ZThn4816_N8S3052C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C20D1Ev,_ZTv0_n16_N8S3052C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16560_N8S3052C20D1Ev,_ZThn12364_N8S3052C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N8S3052C20D1Ev,_ZThn4816_N8S3052C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3052C20D0Ev,_ZTv0_n24_N8S3052C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4448_N8S3052C20D0Ev,_ZThn3396_N8S3052C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3052C20D1Ev,_ZTv0_n24_N8S3052C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4448_N8S3052C20D1Ev,_ZThn3396_N8S3052C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C20D0Ev,_ZTv0_n12_N8S3052C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4344_N8S3052C20D0Ev,_ZThn3312_N8S3052C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C20D1Ev,_ZTv0_n12_N8S3052C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4344_N8S3052C20D1Ev,_ZThn3312_N8S3052C20D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3052C20 = {  "S3052C20", // class name
  bases_S3052C20, 17,
  &(vtc_S3052C20[0]), // expected_vtbl_contents
  &(vtt_S3052C20[0]), // expected_vtt_contents
  ABISELECT(16592,12388), // object size
  NSPAIRA(_ZTI8S3052C20),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S3052C20),67, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3052C20),41, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names11,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3052C24  : virtual S3052C5 {
  void *s3052c24f0[6];
  ~S3052C24(); // tgen
  S3052C24(); // tgen
};
//SIG(-1 S3052C24) C1{ VBC2{ VBC3{ vd v1 Fs[6] FL[8] Fi} BC4{ VBC3 BC5{ VBC3 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC3 Fp[3] FL[5] Fi} Fp[6]}


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

static void Test_S3052C24()
{
  extern Class_Descriptor cd_S3052C24;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(59,86)];
    init_test(&cd_S3052C24, buf);
    S3052C24 *dp, &lv = *(dp=new (buf) S3052C24());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,340), "sizeof(S3052C24)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3052C24)");
    check_base_class_offset(lv, (S3052C6*)(S3052C5*), ABISELECT(368,256), "S3052C24");
    check_base_class_offset(lv, (S3052C6*)(S3052C7*)(S3052C5*), ABISELECT(368,256), "S3052C24");
    check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*)(S3052C5*), ABISELECT(368,256), "S3052C24");
    check_base_class_offset(lv, (S3052C8*)(S3052C7*)(S3052C5*), ABISELECT(56,28), "S3052C24");
    check_base_class_offset(lv, (S3052C7*)(S3052C5*), ABISELECT(56,28), "S3052C24");
    check_base_class_offset(lv, (S3052C5*), ABISELECT(56,28), "S3052C24");
    check_field_offset(lv, s3052c24f0, ABISELECT(8,4), "S3052C24.s3052c24f0");
    test_class_info(&lv, &cd_S3052C24);
    dp->~S3052C24();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3052C24(Test_S3052C24, "S3052C24", ABISELECT(464,340));

#else // __cplusplus

extern void _ZN8S3052C24C1Ev();
extern void _ZN8S3052C24D1Ev();
Name_Map name_map_S3052C24[] = {
  NSPAIR(_ZN8S3052C24C1Ev),
  NSPAIR(_ZN8S3052C24D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C6;
extern VTBL_ENTRY _ZTI7S3052C6[];
extern  VTBL_ENTRY _ZTV7S3052C6[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C5;
extern VTBL_ENTRY _ZTI7S3052C5[];
extern  VTBL_ENTRY _ZTV7S3052C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C5[];
static Base_Class bases_S3052C24[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C6,    ABISELECT(368,256), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //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_S3052C8,    ABISELECT(56,28), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(56,28), //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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3052C5,    ABISELECT(56,28), //bcp->offset
    6, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S3052C24[];
extern void _ZN8S3052C24D1Ev();
extern void _ZN8S3052C24D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S3052C24D1Ev,_ZTv0_n16_N8S3052C24D1Ev)();
extern void ABISELECT(_ZThn56_N8S3052C24D1Ev,_ZThn28_N8S3052C24D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C24D0Ev,_ZTv0_n16_N8S3052C24D0Ev)();
extern void ABISELECT(_ZThn56_N8S3052C24D0Ev,_ZThn28_N8S3052C24D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S3052C24D1Ev,_ZTv0_n12_N8S3052C24D1Ev)();
extern void ABISELECT(_ZThn368_N8S3052C24D1Ev,_ZThn256_N8S3052C24D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3052C24D0Ev,_ZTv0_n12_N8S3052C24D0Ev)();
extern void ABISELECT(_ZThn368_N8S3052C24D0Ev,_ZThn256_N8S3052C24D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY vtc_S3052C24[] = {
  ABISELECT(368,256),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C24[0]),
  (VTBL_ENTRY)&_ZN8S3052C24D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C24D0Ev,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(312,228),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S3052C24[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C24D1Ev,_ZTv0_n16_N8S3052C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C24D0Ev,_ZTv0_n16_N8S3052C24D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  0,
  ABISELECT(-368,-256),
  ABISELECT(-368,-256),
  (VTBL_ENTRY)&(_ZTI8S3052C24[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C24D1Ev,_ZTv0_n12_N8S3052C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C24D0Ev,_ZTv0_n12_N8S3052C24D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern VTBL_ENTRY _ZTV8S3052C24[];
extern void _ZN7S3052C5D1Ev();
extern void _ZN7S3052C5D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C5__8S3052C24[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&_ZN7S3052C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C77S3052C5__8S3052C24[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C77S3052C5__8S3052C24[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZThn312_N7S3052C8D1Ev,_ZThn228_N7S3052C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void ABISELECT(_ZThn312_N7S3052C8D0Ev,_ZThn228_N7S3052C8D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C77S3052C5__8S3052C24[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZThn312_N7S3052C7D1Ev,_ZThn228_N7S3052C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void ABISELECT(_ZThn312_N7S3052C7D0Ev,_ZThn228_N7S3052C7D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C77S3052C5__8S3052C24[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev)();
extern void ABISELECT(_ZThn312_N7S3052C5D1Ev,_ZThn228_N7S3052C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev)();
extern void ABISELECT(_ZThn312_N7S3052C5D0Ev,_ZThn228_N7S3052C5D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C5__8S3052C24[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
static  VTT_ENTRY vtt_S3052C24[] = {
  {&(_ZTV8S3052C24[4]),  4,23},
  {&(_ZTV8S3052C24[12]),  12,23},
  {&(_ZTV8S3052C24[20]),  20,23},
  {&(_tg__ZTV7S3052C5__8S3052C24[3]),  3,7},
  {&(_tg__ZTV7S3052C77S3052C5__8S3052C24[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C77S3052C5__8S3052C24[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C77S3052C5__8S3052C24[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C77S3052C5__8S3052C24[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C5__8S3052C24[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S3052C24[];
extern  VTBL_ENTRY _ZTV8S3052C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C24[];
static VTBL_ENTRY alt_thunk_names12[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S3052C5D0Ev,_ZThn228_N7S3052C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S3052C5D1Ev,_ZThn228_N7S3052C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S3052C7D0Ev,_ZThn228_N7S3052C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S3052C7D1Ev,_ZThn228_N7S3052C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S3052C8D0Ev,_ZThn228_N7S3052C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S3052C8D1Ev,_ZThn228_N7S3052C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C24D0Ev,_ZTv0_n12_N8S3052C24D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S3052C24D0Ev,_ZThn256_N8S3052C24D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C24D1Ev,_ZTv0_n12_N8S3052C24D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S3052C24D1Ev,_ZThn256_N8S3052C24D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C24D0Ev,_ZTv0_n16_N8S3052C24D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S3052C24D0Ev,_ZThn28_N8S3052C24D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C24D1Ev,_ZTv0_n16_N8S3052C24D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S3052C24D1Ev,_ZThn28_N8S3052C24D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3052C24 = {  "S3052C24", // class name
  bases_S3052C24, 4,
  &(vtc_S3052C24[0]), // expected_vtbl_contents
  &(vtt_S3052C24[0]), // expected_vtt_contents
  ABISELECT(464,340), // object size
  NSPAIRA(_ZTI8S3052C24),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S3052C24),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3052C24),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names12,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3052C23  : virtual S3052C24 , virtual S3052C21 , virtual S3052C4 , S3052C3 , S3052C6 {
  int s3052c23f0;
  void *s3052c23f1;
  int s3052c23f2;
  ::S3052C9 s3052c23f3[2];
  ::S3052C8 s3052c23f4;
  long double s3052c23f5;
  int s3052c23f6[3];
  ::S3052C13 s3052c23f7;
  __tsi64 s3052c23f8;
  int s3052c23f9[2];
  int s3052c23f10;
  ::S3052C13 s3052c23f11;
  void *s3052c23f12;
  virtual void  v10(); // _ZN8S3052C233v10Ev
  ~S3052C23(); // tgen
  S3052C23(); // tgen
};
//SIG(1 S3052C23) C1{ VBC2{ VBC3{ VBC4{ vd v2 Fs[6] FL[8] Fi} BC5{ VBC4 BC6{ VBC4 FL Fp FL:54} v3 v4 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC4 Fp[3] FL[5] Fi} Fp[6]} VBC7{ VBC5 VBC8{ BC9{ m Fp Fi FL Fp Fi} VBC5 Fp Fc[4] Fi:11 Fp[2] Fi[6] FC10{ VBC4 BC5 BC3 BC11{ vd m FC5} VBC6 Fp Fl FC3 FC11 FC6 Fi[2] FU12{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} BC13{ BC11 VBC4 VBC5 v5 FC5[2] FD FC11 Fp[3] FC3 Fi FU14{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi} v6 Fp FC15{} FC4 FL FU12 FL[6] FL FC3} VBC16{ BC3 VBC5 BC8 VBC10 VBC11 vd FC11[2] Fi FD FD Fc:0 Fp} BC17{ v7 Fi:0 Fi[7] Fp} BC4 v1 Fi Fp Fi FC8[2] FC6 FD Fi[3] FU12 FL Fi[2] Fi FU12 Fp}


void  S3052C23 ::v10(){vfunc_called(this, "_ZN8S3052C233v10Ev");}
S3052C23 ::~S3052C23(){ note_dtor("S3052C23", this);} // tgen
S3052C23 ::S3052C23(){ note_ctor("S3052C23", this);} // tgen

static void Test_S3052C23()
{
  extern Class_Descriptor cd_S3052C23;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2892,8558)];
    init_test(&cd_S3052C23, buf);
    S3052C23 *dp, &lv = *(dp=new (buf) S3052C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(46256,34228), "sizeof(S3052C23)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3052C23)");
    /*is_ambiguous_... S3052C23::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C5*), ABISELECT(21368,15832), "S3052C23");
    /*is_ambiguous_... S3052C23::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C7*)(S3052C5*), ABISELECT(21368,15832), "S3052C23");
    /*is_ambiguous_... S3052C23::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*)(S3052C5*), ABISELECT(21368,15832), "S3052C23");
    /*is_ambiguous_... S3052C23::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C7*), ABISELECT(21368,15832), "S3052C23");
    /*is_ambiguous_... S3052C23::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*), ABISELECT(21368,15832), "S3052C23");
    check_base_class_offset(lv, (S3052C6*)(S3052C15*)(S3052C21*), ABISELECT(21368,15832), "S3052C23");
    /*is_ambiguous_... S3052C4::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C5*)(S3052C4*), ABISELECT(21368,15832), "S3052C23");
    /*is_ambiguous_... S3052C4::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C7*)(S3052C5*)(S3052C4*), ABISELECT(21368,15832), "S3052C23");
    /*is_ambiguous_... S3052C4::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*)(S3052C5*)(S3052C4*), ABISELECT(21368,15832), "S3052C23");
    check_base_class_offset(lv, (S3052C6*)(S3052C11*), ABISELECT(21368,15832), "S3052C23");
    /*is_ambiguous_... S3052C11::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C7*)(S3052C11*), ABISELECT(21368,15832), "S3052C23");
    /*is_ambiguous_... S3052C11::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*)(S3052C11*), ABISELECT(21368,15832), "S3052C23");
    check_base_class_offset(lv, (S3052C6*)(S3052C5*)(S3052C11*), ABISELECT(21368,15832), "S3052C23");
    check_base_class_offset(lv, (S3052C6*)(S3052C7*)(S3052C5*)(S3052C11*), ABISELECT(21368,15832), "S3052C23");
    check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*)(S3052C5*)(S3052C11*), ABISELECT(21368,15832), "S3052C23");
    /*is_ambiguous_... S3052C23::S3052C8 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*), ABISELECT(21368,15832), "S3052C23");
    /*is_ambiguous_... S3052C23::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C7*)(S3052C5*), ABISELECT(21056,15604), "S3052C23");
    /*is_ambiguous_... S3052C23::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C7*)(S3052C5*), ABISELECT(21056,15604), "S3052C23");
    check_base_class_offset(lv, (S3052C5*)(S3052C24*), ABISELECT(21056,15604), "S3052C23");
    check_base_class_offset(lv, (S3052C24*), ABISELECT(21000,15576), "S3052C23");
    /*is_ambiguous_... S3052C23::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C7*), ABISELECT(23376,17336), "S3052C23");
    check_base_class_offset(lv, (S3052C7*)(S3052C21*), ABISELECT(23376,17336), "S3052C23");
    /*is_ambiguous_... S3052C23::S3052C9 */ AMB_check_base_class_offset(lv, (S3052C7*)(S3052C9*), ABISELECT(23376,17336), "S3052C23");
    check_base_class_offset(lv, (S3052C7*)(S3052C15*)(S3052C21*), ABISELECT(23376,17336), "S3052C23");
    /*is_ambiguous_... S3052C4::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C7*)(S3052C4*), ABISELECT(23376,17336), "S3052C23");
    check_base_class_offset(lv, (S3052C7*)(S3052C9*)(S3052C4*), ABISELECT(23376,17336), "S3052C23");
    /*is_ambiguous_... S3052C23::S3052C9 */ AMB_check_base_class_offset(lv, (S3052C10*)(S3052C9*), ABISELECT(23496,17400), "S3052C23");
    check_base_class_offset(lv, (S3052C9*)(S3052C21*), ABISELECT(23488,17396), "S3052C23");
    check_base_class_offset(lv, (S3052C12*)(S3052C15*)(S3052C21*), ABISELECT(21472,15916), "S3052C23");
    check_base_class_offset(lv, (S3052C15*)(S3052C21*), ABISELECT(21472,15916), "S3052C23");
    check_base_class_offset(lv, (S3052C21*), ABISELECT(21472,15916), "S3052C23");
    /*is_ambiguous_... S3052C4::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C7*)(S3052C5*)(S3052C4*), ABISELECT(33584,24884), "S3052C23");
    /*is_ambiguous_... S3052C4::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C7*)(S3052C5*)(S3052C4*), ABISELECT(33584,24884), "S3052C23");
    /*is_ambiguous_... S3052C4::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C5*)(S3052C4*), ABISELECT(33584,24884), "S3052C23");
    check_base_class_offset(lv, (S3052C10*)(S3052C9*)(S3052C4*), ABISELECT(33912,25116), "S3052C23");
    check_base_class_offset(lv, (S3052C9*)(S3052C4*), ABISELECT(33904,25112), "S3052C23");
    /*is_ambiguous_... S3052C11::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C7*)(S3052C11*), ABISELECT(44480,32928), "S3052C23");
    /*is_ambiguous_... S3052C11::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C7*)(S3052C11*), ABISELECT(44480,32928), "S3052C23");
    check_base_class_offset(lv, (S3052C8*)(S3052C7*)(S3052C5*)(S3052C11*), ABISELECT(44584,32988), "S3052C23");
    check_base_class_offset(lv, (S3052C7*)(S3052C5*)(S3052C11*), ABISELECT(44584,32988), "S3052C23");
    check_base_class_offset(lv, (S3052C5*)(S3052C11*), ABISELECT(44584,32988), "S3052C23");
    check_base_class_offset(lv, (S3052C12*)(S3052C11*), ABISELECT(44896,33216), "S3052C23");
    /*is_ambiguous_... S3052C11::S3052C8 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C11*), ABISELECT(46016,34056), "S3052C23");
    check_base_class_offset(lv, (S3052C11*)(S3052C4*), ABISELECT(44480,32928), "S3052C23");
    /*is_ambiguous_... S3052C4::S3052C12 */ AMB_check_base_class_offset(lv, (S3052C12*)(S3052C4*), ABISELECT(46048,34080), "S3052C23");
    check_base_class_offset(lv, (S3052C4*), ABISELECT(33584,24884), "S3052C23");
    check_base_class_offset(lv, (S3052C3*), 0, "S3052C23");
    /*is_ambiguous_... S3052C23::S3052C6 */ AMB_check_base_class_offset(lv, (S3052C6*), ABISELECT(48,36), "S3052C23");
    check_field_offset(lv, s3052c23f0, ABISELECT(140,120), "S3052C23.s3052c23f0");
    check_field_offset(lv, s3052c23f1, ABISELECT(144,124), "S3052C23.s3052c23f1");
    check_field_offset(lv, s3052c23f2, ABISELECT(152,128), "S3052C23.s3052c23f2");
    check_field_offset(lv, s3052c23f3, ABISELECT(160,132), "S3052C23.s3052c23f3");
    check_field_offset(lv, s3052c23f4, ABISELECT(20768,15396), "S3052C23.s3052c23f4");
    check_field_offset(lv, s3052c23f5, ABISELECT(20896,15504), "S3052C23.s3052c23f5");
    check_field_offset(lv, s3052c23f6, ABISELECT(20912,15516), "S3052C23.s3052c23f6");
    check_field_offset(lv, s3052c23f7, ABISELECT(20928,15528), "S3052C23.s3052c23f7");
    check_field_offset(lv, s3052c23f8, ABISELECT(20944,15540), "S3052C23.s3052c23f8");
    check_field_offset(lv, s3052c23f9, ABISELECT(20952,15548), "S3052C23.s3052c23f9");
    check_field_offset(lv, s3052c23f10, ABISELECT(20960,15556), "S3052C23.s3052c23f10");
    check_field_offset(lv, s3052c23f11, ABISELECT(20976,15560), "S3052C23.s3052c23f11");
    check_field_offset(lv, s3052c23f12, ABISELECT(20992,15572), "S3052C23.s3052c23f12");
    test_class_info(&lv, &cd_S3052C23);
    dp->~S3052C23();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3052C23(Test_S3052C23, "S3052C23", ABISELECT(46256,34228));

#else // __cplusplus

extern void _ZN8S3052C23C1Ev();
extern void _ZN8S3052C23D1Ev();
Name_Map name_map_S3052C23[] = {
  NSPAIR(_ZN8S3052C23C1Ev),
  NSPAIR(_ZN8S3052C23D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C6;
extern VTBL_ENTRY _ZTI7S3052C6[];
extern  VTBL_ENTRY _ZTV7S3052C6[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C5;
extern VTBL_ENTRY _ZTI7S3052C5[];
extern  VTBL_ENTRY _ZTV7S3052C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C5[];
extern Class_Descriptor cd_S3052C24;
extern VTBL_ENTRY _ZTI8S3052C24[];
extern  VTBL_ENTRY _ZTV8S3052C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C24[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S3052C9;
extern VTBL_ENTRY _ZTI7S3052C9[];
extern  VTBL_ENTRY _ZTV7S3052C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C9[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S3052C15;
extern VTBL_ENTRY _ZTI8S3052C15[];
extern  VTBL_ENTRY _ZTV8S3052C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C15[];
extern Class_Descriptor cd_S3052C21;
extern VTBL_ENTRY _ZTI8S3052C21[];
extern  VTBL_ENTRY _ZTV8S3052C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C21[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C5;
extern VTBL_ENTRY _ZTI7S3052C5[];
extern  VTBL_ENTRY _ZTV7S3052C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C5[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S3052C9;
extern VTBL_ENTRY _ZTI7S3052C9[];
extern  VTBL_ENTRY _ZTV7S3052C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C9[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C5;
extern VTBL_ENTRY _ZTI7S3052C5[];
extern  VTBL_ENTRY _ZTV7S3052C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C5[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C11;
extern VTBL_ENTRY _ZTI8S3052C11[];
extern  VTBL_ENTRY _ZTV8S3052C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C11[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S3052C4;
extern VTBL_ENTRY _ZTI7S3052C4[];
extern  VTBL_ENTRY _ZTV7S3052C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C4[];
extern Class_Descriptor cd_S3052C3;
extern VTBL_ENTRY _ZTI7S3052C3[];
extern  VTBL_ENTRY _ZTV7S3052C3[];
extern Class_Descriptor cd_S3052C6;
extern VTBL_ENTRY _ZTI7S3052C6[];
extern  VTBL_ENTRY _ZTV7S3052C6[];
static Base_Class bases_S3052C23[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C6,    ABISELECT(21368,15832), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //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_S3052C8,    ABISELECT(21056,15604), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(21056,15604), //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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3052C5,    ABISELECT(21056,15604), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3052C24,    ABISELECT(21000,15576), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C8,    ABISELECT(23376,17336), //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(23376,17336), //bcp->offset
    57, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3052C10,    ABISELECT(23496,17400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3052C9,    ABISELECT(23488,17396), //bcp->offset
    67, //bcp->virtual_function_table_offset
    5, //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
    11, //immediately_derived
  0, 1},
  {&cd_S3052C12,    ABISELECT(21472,15916), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S3052C15,    ABISELECT(21472,15916), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S3052C21,    ABISELECT(21472,15916), //bcp->offset
    45, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C8,    ABISELECT(33584,24884), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(33584,24884), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S3052C5,    ABISELECT(33584,24884), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3052C10,    ABISELECT(33912,25116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3052C9,    ABISELECT(33904,25112), //bcp->offset
    88, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3052C8,    ABISELECT(44480,32928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(44480,32928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S3052C8,    ABISELECT(44584,32988), //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
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(44584,32988), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S3052C5,    ABISELECT(44584,32988), //bcp->offset
    105, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S3052C12,    ABISELECT(44896,33216), //bcp->offset
    112, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S3052C8,    ABISELECT(46016,34056), //bcp->offset
    116, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S3052C11,    ABISELECT(44480,32928), //bcp->offset
    94, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3052C12,    ABISELECT(46048,34080), //bcp->offset
    122, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3052C4,    ABISELECT(33584,24884), //bcp->offset
    74, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3052C6,    ABISELECT(48,36), //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
    27, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S3052C23[];
extern void _ZN7S3052C32v2Ev();
extern void _ZN8S3052C233v10Ev();
extern void _ZN8S3052C23D1Ev();
extern void _ZN8S3052C23D0Ev();
extern void ABISELECT(_ZThn48_N8S3052C23D1Ev,_ZThn36_N8S3052C23D1Ev)();
extern void ABISELECT(_ZThn48_N8S3052C23D0Ev,_ZThn36_N8S3052C23D0Ev)();
extern void _ZN7S3052C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S3052C23D1Ev,_ZTv0_n20_N8S3052C23D1Ev)();
extern void ABISELECT(_ZThn21000_N8S3052C23D1Ev,_ZThn15576_N8S3052C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3052C23D0Ev,_ZTv0_n20_N8S3052C23D0Ev)();
extern void ABISELECT(_ZThn21000_N8S3052C23D0Ev,_ZThn15576_N8S3052C23D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C23D1Ev,_ZTv0_n16_N8S3052C23D1Ev)();
extern void ABISELECT(_ZThn21056_N8S3052C23D1Ev,_ZThn15604_N8S3052C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C23D0Ev,_ZTv0_n16_N8S3052C23D0Ev)();
extern void ABISELECT(_ZThn21056_N8S3052C23D0Ev,_ZThn15604_N8S3052C23D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S3052C23D1Ev,_ZTv0_n12_N8S3052C23D1Ev)();
extern void ABISELECT(_ZThn21368_N8S3052C23D1Ev,_ZThn15832_N8S3052C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3052C23D0Ev,_ZTv0_n12_N8S3052C23D0Ev)();
extern void ABISELECT(_ZThn21368_N8S3052C23D0Ev,_ZThn15832_N8S3052C23D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
extern void ABISELECT(_ZTv0_n48_N8S3052C23D1Ev,_ZTv0_n24_N8S3052C23D1Ev)();
extern void ABISELECT(_ZThn21472_N8S3052C23D1Ev,_ZThn15916_N8S3052C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S3052C23D0Ev,_ZTv0_n24_N8S3052C23D0Ev)();
extern void ABISELECT(_ZThn21472_N8S3052C23D0Ev,_ZThn15916_N8S3052C23D0Ev)() __attribute__((weak));
extern void _ZN8S3052C152v6Ev();
extern void _ZN8S3052C212v9Ev();
extern void ABISELECT(_ZTv0_n32_N8S3052C23D1Ev,_ZTv0_n16_N8S3052C23D1Ev)();
extern void ABISELECT(_ZThn23376_N8S3052C23D1Ev,_ZThn17336_N8S3052C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C23D0Ev,_ZTv0_n16_N8S3052C23D0Ev)();
extern void ABISELECT(_ZThn23376_N8S3052C23D0Ev,_ZThn17336_N8S3052C23D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTv0_n40_N8S3052C23D1Ev,_ZTv0_n20_N8S3052C23D1Ev)();
extern void ABISELECT(_ZThn23488_N8S3052C23D1Ev,_ZThn17396_N8S3052C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3052C23D0Ev,_ZTv0_n20_N8S3052C23D0Ev)();
extern void ABISELECT(_ZThn23488_N8S3052C23D0Ev,_ZThn17396_N8S3052C23D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3052C23D1Ev,_ZTv0_n32_N8S3052C23D1Ev)();
extern void ABISELECT(_ZThn33584_N8S3052C23D1Ev,_ZThn24884_N8S3052C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S3052C23D0Ev,_ZTv0_n32_N8S3052C23D0Ev)();
extern void ABISELECT(_ZThn33584_N8S3052C23D0Ev,_ZThn24884_N8S3052C23D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTvn320_n64_N8S3052C23D1Ev,_ZTvn228_n32_N8S3052C23D1Ev)();
extern void ABISELECT(_ZTvn320_n64_N8S3052C23D0Ev,_ZTvn228_n32_N8S3052C23D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S3052C23D1Ev,_ZTv0_n20_N8S3052C23D1Ev)();
extern void ABISELECT(_ZThn44480_N8S3052C23D1Ev,_ZThn32928_N8S3052C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3052C23D0Ev,_ZTv0_n20_N8S3052C23D0Ev)();
extern void ABISELECT(_ZThn44480_N8S3052C23D0Ev,_ZThn32928_N8S3052C23D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTvn104_n40_N8S3052C23D1Ev,_ZTvn60_n20_N8S3052C23D1Ev)();
extern void ABISELECT(_ZTvn104_n40_N8S3052C23D0Ev,_ZTvn60_n20_N8S3052C23D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTvn416_n40_N8S3052C23D1Ev,_ZTvn288_n20_N8S3052C23D1Ev)();
extern void ABISELECT(_ZTvn416_n40_N8S3052C23D0Ev,_ZTvn288_n20_N8S3052C23D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S3052C23D1Ev,_ZTv0_n16_N8S3052C23D1Ev)();
extern void ABISELECT(_ZThn46016_N8S3052C23D1Ev,_ZThn34056_N8S3052C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C23D0Ev,_ZTv0_n16_N8S3052C23D0Ev)();
extern void ABISELECT(_ZThn46016_N8S3052C23D0Ev,_ZThn34056_N8S3052C23D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3052C23D1Ev,_ZTv0_n12_N8S3052C23D1Ev)();
extern void ABISELECT(_ZThn46048_N8S3052C23D1Ev,_ZThn34080_N8S3052C23D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3052C23D0Ev,_ZTv0_n12_N8S3052C23D0Ev)();
extern void ABISELECT(_ZThn46048_N8S3052C23D0Ev,_ZThn34080_N8S3052C23D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3052C23[] = {
  ABISELECT(46048,34080),
  ABISELECT(46016,34056),
  ABISELECT(44480,32928),
  ABISELECT(33584,24884),
  ABISELECT(23488,17396),
  ABISELECT(23376,17336),
  ABISELECT(21472,15916),
  ABISELECT(21368,15832),
  ABISELECT(21056,15604),
  ABISELECT(21000,15576),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C23[0]),
  (VTBL_ENTRY)&_ZN7S3052C32v2Ev,
  (VTBL_ENTRY)&_ZN8S3052C233v10Ev,
  (VTBL_ENTRY)&_ZN8S3052C23D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C23D0Ev,
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S3052C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S3052C23D1Ev,_ZThn36_N8S3052C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S3052C23D0Ev,_ZThn36_N8S3052C23D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
  ABISELECT(-21000,-15576),
  ABISELECT(368,256),
  ABISELECT(56,28),
  ABISELECT(-21000,-15576),
  (VTBL_ENTRY)&(_ZTI8S3052C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3052C23D1Ev,_ZTv0_n20_N8S3052C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3052C23D0Ev,_ZTv0_n20_N8S3052C23D0Ev),
  0,
  0,
  ABISELECT(-21056,-15604),
  ABISELECT(312,228),
  ABISELECT(-21056,-15604),
  (VTBL_ENTRY)&(_ZTI8S3052C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C23D1Ev,_ZTv0_n16_N8S3052C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C23D0Ev,_ZTv0_n16_N8S3052C23D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  0,
  ABISELECT(-21368,-15832),
  ABISELECT(-21368,-15832),
  (VTBL_ENTRY)&(_ZTI8S3052C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C23D1Ev,_ZTv0_n12_N8S3052C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C23D0Ev,_ZTv0_n12_N8S3052C23D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
  0,
  0,
  ABISELECT(-21472,-15916),
  ABISELECT(2016,1480),
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  ABISELECT(-21472,-15916),
  (VTBL_ENTRY)&(_ZTI8S3052C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3052C23D1Ev,_ZTv0_n24_N8S3052C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S3052C23D0Ev,_ZTv0_n24_N8S3052C23D0Ev),
  (VTBL_ENTRY)&_ZN8S3052C152v6Ev,
  (VTBL_ENTRY)&_ZN8S3052C212v9Ev,
  0,
  0,
  ABISELECT(-23376,-17336),
  ABISELECT(-2008,-1504),
  ABISELECT(-23376,-17336),
  (VTBL_ENTRY)&(_ZTI8S3052C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C23D1Ev,_ZTv0_n16_N8S3052C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C23D0Ev,_ZTv0_n16_N8S3052C23D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  ABISELECT(-23488,-17396),
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  ABISELECT(-23488,-17396),
  (VTBL_ENTRY)&(_ZTI8S3052C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3052C23D1Ev,_ZTv0_n20_N8S3052C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3052C23D0Ev,_ZTv0_n20_N8S3052C23D0Ev),
  0,
  0,
  ABISELECT(-33584,-24884),
  ABISELECT(12464,9196),
  ABISELECT(12432,9172),
  ABISELECT(10896,8044),
  ABISELECT(-10208,-7548),
  ABISELECT(-12216,-9052),
  ABISELECT(-33584,-24884),
  (VTBL_ENTRY)&(_ZTI8S3052C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3052C23D1Ev,_ZTv0_n32_N8S3052C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S3052C23D0Ev,_ZTv0_n32_N8S3052C23D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  ABISELECT(-12536,-9280),
  ABISELECT(-10528,-7776),
  ABISELECT(-33904,-25112),
  (VTBL_ENTRY)&(_ZTI8S3052C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn320_n64_N8S3052C23D1Ev,_ZTvn228_n32_N8S3052C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn320_n64_N8S3052C23D0Ev,_ZTvn228_n32_N8S3052C23D0Ev),
  0,
  0,
  ABISELECT(-44480,-32928),
  ABISELECT(1536,1128),
  ABISELECT(-23112,-17096),
  ABISELECT(-44480,-32928),
  (VTBL_ENTRY)&(_ZTI8S3052C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3052C23D1Ev,_ZTv0_n20_N8S3052C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3052C23D0Ev,_ZTv0_n20_N8S3052C23D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  ABISELECT(-23216,-17156),
  ABISELECT(-44584,-32988),
  (VTBL_ENTRY)&(_ZTI8S3052C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N8S3052C23D1Ev,_ZTvn60_n20_N8S3052C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N8S3052C23D0Ev,_ZTvn60_n20_N8S3052C23D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  ABISELECT(-44896,-33216),
  (VTBL_ENTRY)&(_ZTI8S3052C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N8S3052C23D1Ev,_ZTvn288_n20_N8S3052C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N8S3052C23D0Ev,_ZTvn288_n20_N8S3052C23D0Ev),
  ABISELECT(-46016,-34056),
  ABISELECT(-24648,-18224),
  ABISELECT(-46016,-34056),
  (VTBL_ENTRY)&(_ZTI8S3052C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C23D1Ev,_ZTv0_n16_N8S3052C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C23D0Ev,_ZTv0_n16_N8S3052C23D0Ev),
  ABISELECT(-46048,-34080),
  ABISELECT(-46048,-34080),
  (VTBL_ENTRY)&(_ZTI8S3052C23[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C23D1Ev,_ZTv0_n12_N8S3052C23D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C23D0Ev,_ZTv0_n12_N8S3052C23D0Ev),
};
extern VTBL_ENTRY _ZTV8S3052C23[];
extern void _ZN8S3052C24D1Ev();
extern void _ZN8S3052C24D0Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C24__8S3052C23[] = {
  ABISELECT(368,256),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C24[0]),
  (VTBL_ENTRY)&_ZN8S3052C24D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C24D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C24D1Ev,_ZTv0_n16_N8S3052C24D1Ev)();
extern void ABISELECT(_ZThn56_N8S3052C24D1Ev,_ZThn28_N8S3052C24D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C24D0Ev,_ZTv0_n16_N8S3052C24D0Ev)();
extern void ABISELECT(_ZThn56_N8S3052C24D0Ev,_ZThn28_N8S3052C24D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C5__8S3052C24__8S3052C23[] = {
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(312,228),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S3052C24[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C24D1Ev,_ZTv0_n16_N8S3052C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C24D0Ev,_ZTv0_n16_N8S3052C24D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3052C24D1Ev,_ZTv0_n12_N8S3052C24D1Ev)();
extern void ABISELECT(_ZThn368_N8S3052C24D1Ev,_ZThn256_N8S3052C24D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3052C24D0Ev,_ZTv0_n12_N8S3052C24D0Ev)();
extern void ABISELECT(_ZThn368_N8S3052C24D0Ev,_ZThn256_N8S3052C24D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__8S3052C24__8S3052C23[] = {
  0,
  ABISELECT(-368,-256),
  ABISELECT(-368,-256),
  (VTBL_ENTRY)&(_ZTI8S3052C24[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C24D1Ev,_ZTv0_n12_N8S3052C24D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C24D0Ev,_ZTv0_n12_N8S3052C24D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN7S3052C5D1Ev();
extern void _ZN7S3052C5D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C5__8S3052C23[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&_ZN7S3052C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C77S3052C5__8S3052C23[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C77S3052C5__8S3052C23[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZThn312_N7S3052C8D1Ev,_ZThn228_N7S3052C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void ABISELECT(_ZThn312_N7S3052C8D0Ev,_ZThn228_N7S3052C8D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C77S3052C5__8S3052C23[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZThn312_N7S3052C7D1Ev,_ZThn228_N7S3052C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void ABISELECT(_ZThn312_N7S3052C7D0Ev,_ZThn228_N7S3052C7D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C77S3052C5__8S3052C23[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev)();
extern void ABISELECT(_ZThn312_N7S3052C5D1Ev,_ZThn228_N7S3052C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev)();
extern void ABISELECT(_ZThn312_N7S3052C5D0Ev,_ZThn228_N7S3052C5D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C5__8S3052C23[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN8S3052C21D1Ev();
extern void _ZN8S3052C21D0Ev();
extern void _ZN8S3052C152v6Ev();
extern void _ZN8S3052C212v9Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C21__8S3052C23[] = {
  ABISELECT(2016,1480),
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C21[0]),
  (VTBL_ENTRY)&_ZN8S3052C21D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C21D0Ev,
  (VTBL_ENTRY)&_ZN8S3052C152v6Ev,
  (VTBL_ENTRY)&_ZN8S3052C212v9Ev,
};
extern void _ZN8S3052C15D1Ev();
extern void _ZN8S3052C15D0Ev();
extern void _ZN8S3052C152v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C158S3052C21__8S3052C23[] = {
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&_ZN8S3052C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C15D0Ev,
  (VTBL_ENTRY)&_ZN8S3052C152v6Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__8S3052C158S3052C21__8S3052C23[] = {
  0,
  ABISELECT(104,84),
  ABISELECT(104,84),
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev)();
extern void ABISELECT(_ZThn1904_N8S3052C15D1Ev,_ZThn1420_N8S3052C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev)();
extern void ABISELECT(_ZThn1904_N8S3052C15D0Ev,_ZThn1420_N8S3052C15D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__8S3052C158S3052C21__8S3052C23[] = {
  0,
  0,
  ABISELECT(-1904,-1420),
  ABISELECT(-2008,-1504),
  ABISELECT(-1904,-1420),
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C21D1Ev,_ZTv0_n16_N8S3052C21D1Ev)();
extern void ABISELECT(_ZThn1904_N8S3052C21D1Ev,_ZThn1420_N8S3052C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C21D0Ev,_ZTv0_n16_N8S3052C21D0Ev)();
extern void ABISELECT(_ZThn1904_N8S3052C21D0Ev,_ZThn1420_N8S3052C21D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__8S3052C21__8S3052C23[] = {
  0,
  0,
  ABISELECT(-1904,-1420),
  ABISELECT(-2008,-1504),
  ABISELECT(-1904,-1420),
  (VTBL_ENTRY)&(_ZTI8S3052C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C21D1Ev,_ZTv0_n16_N8S3052C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C21D0Ev,_ZTv0_n16_N8S3052C21D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3052C21D1Ev,_ZTv0_n12_N8S3052C21D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3052C21D0Ev,_ZTv0_n12_N8S3052C21D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__8S3052C21__8S3052C23[] = {
  0,
  ABISELECT(104,84),
  ABISELECT(104,84),
  (VTBL_ENTRY)&(_ZTI8S3052C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C21D1Ev,_ZTv0_n12_N8S3052C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C21D0Ev,_ZTv0_n12_N8S3052C21D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S3052C21D1Ev,_ZTv0_n20_N8S3052C21D1Ev)();
extern void ABISELECT(_ZThn2016_N8S3052C21D1Ev,_ZThn1480_N8S3052C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S3052C21D0Ev,_ZTv0_n20_N8S3052C21D0Ev)();
extern void ABISELECT(_ZThn2016_N8S3052C21D0Ev,_ZThn1480_N8S3052C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3052C9__8S3052C21__8S3052C23[] = {
  ABISELECT(-2016,-1480),
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  ABISELECT(-2016,-1480),
  (VTBL_ENTRY)&(_ZTI8S3052C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3052C21D1Ev,_ZTv0_n20_N8S3052C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S3052C21D0Ev,_ZTv0_n20_N8S3052C21D0Ev),
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__A1__8S3052C23[] = {
  ABISELECT(-2008,-1504),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C7__A1__8S3052C23[] = {
  ABISELECT(-2008,-1504),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C7__A1__8S3052C23[] = {
  0,
  ABISELECT(2008,1504),
  ABISELECT(2008,1504),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C7__A1__8S3052C23[] = {
  0,
  ABISELECT(2008,1504),
  ABISELECT(2008,1504),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN7S3052C9D1Ev();
extern void _ZN7S3052C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C9__8S3052C23[] = {
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C9[0]),
  (VTBL_ENTRY)&_ZN7S3052C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C9D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S3052C9D1Ev,_ZTv0_n16_N7S3052C9D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S3052C9D0Ev,_ZTv0_n16_N7S3052C9D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__7S3052C9__8S3052C23[] = {
  0,
  0,
  ABISELECT(112,60),
  ABISELECT(-2008,-1504),
  ABISELECT(112,60),
  (VTBL_ENTRY)&(_ZTI7S3052C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C9D1Ev,_ZTv0_n16_N7S3052C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C9D0Ev,_ZTv0_n16_N7S3052C9D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C9D1Ev,_ZTv0_n12_N7S3052C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C9D0Ev,_ZTv0_n12_N7S3052C9D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C9__8S3052C23[] = {
  0,
  ABISELECT(2120,1564),
  ABISELECT(2120,1564),
  (VTBL_ENTRY)&(_ZTI7S3052C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C9D1Ev,_ZTv0_n12_N7S3052C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C9D0Ev,_ZTv0_n12_N7S3052C9D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN7S3052C4D1Ev();
extern void _ZN7S3052C4D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C4__8S3052C23[] = {
  ABISELECT(12464,9196),
  ABISELECT(12432,9172),
  ABISELECT(10896,8044),
  ABISELECT(-10208,-7548),
  ABISELECT(-12216,-9052),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&_ZN7S3052C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C5D1Ev();
extern void _ZN7S3052C5D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C57S3052C4__A1__8S3052C23[] = {
  ABISELECT(-12216,-9052),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&_ZN7S3052C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C77S3052C57S3052C4__A2__8S3052C23[] = {
  ABISELECT(-12216,-9052),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C77S3052C57S3052C4__A2__8S3052C23[] = {
  ABISELECT(-12216,-9052),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C77S3052C57S3052C4__A2__8S3052C23[] = {
  0,
  ABISELECT(12216,9052),
  ABISELECT(12216,9052),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C77S3052C57S3052C4__A2__8S3052C23[] = {
  0,
  ABISELECT(12216,9052),
  ABISELECT(12216,9052),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C57S3052C4__A1__8S3052C23[] = {
  0,
  ABISELECT(12216,9052),
  ABISELECT(12216,9052),
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN7S3052C9D1Ev();
extern void _ZN7S3052C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C97S3052C4__A1__8S3052C23[] = {
  ABISELECT(-12536,-9280),
  ABISELECT(-10528,-7776),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C9[0]),
  (VTBL_ENTRY)&_ZN7S3052C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C9D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S3052C9D1Ev,_ZTv0_n16_N7S3052C9D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S3052C9D0Ev,_ZTv0_n16_N7S3052C9D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__7S3052C97S3052C4__A1__8S3052C23[] = {
  0,
  0,
  ABISELECT(10528,7776),
  ABISELECT(-2008,-1504),
  ABISELECT(10528,7776),
  (VTBL_ENTRY)&(_ZTI7S3052C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C9D1Ev,_ZTv0_n16_N7S3052C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C9D0Ev,_ZTv0_n16_N7S3052C9D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C9D1Ev,_ZTv0_n12_N7S3052C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C9D0Ev,_ZTv0_n12_N7S3052C9D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C97S3052C4__A1__8S3052C23[] = {
  0,
  ABISELECT(12536,9280),
  ABISELECT(12536,9280),
  (VTBL_ENTRY)&(_ZTI7S3052C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C9D1Ev,_ZTv0_n12_N7S3052C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C9D0Ev,_ZTv0_n12_N7S3052C9D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C4D1Ev,_ZTv0_n12_N7S3052C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C4D0Ev,_ZTv0_n12_N7S3052C4D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C4__8S3052C23[] = {
  0,
  ABISELECT(12216,9052),
  ABISELECT(12216,9052),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C4D1Ev,_ZTv0_n12_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C4D0Ev,_ZTv0_n12_N7S3052C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S3052C4D1Ev,_ZTv0_n16_N7S3052C4D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S3052C4D0Ev,_ZTv0_n16_N7S3052C4D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__A1__7S3052C4__8S3052C23[] = {
  0,
  0,
  ABISELECT(10208,7548),
  ABISELECT(-2008,-1504),
  ABISELECT(10208,7548),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C4D1Ev,_ZTv0_n16_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C4D0Ev,_ZTv0_n16_N7S3052C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZThn320_N7S3052C4D1Ev,_ZThn228_N7S3052C4D1Ev)();
extern void ABISELECT(_ZThn320_N7S3052C4D0Ev,_ZThn228_N7S3052C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3052C9__7S3052C4__8S3052C23[] = {
  ABISELECT(-12536,-9280),
  ABISELECT(-10528,-7776),
  ABISELECT(-320,-228),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N7S3052C4D1Ev,_ZThn228_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N7S3052C4D0Ev,_ZThn228_N7S3052C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S3052C4D1Ev,_ZTv0_n20_N7S3052C4D1Ev)();
extern void ABISELECT(_ZThn10896_N7S3052C4D1Ev,_ZThn8044_N7S3052C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3052C4D0Ev,_ZTv0_n20_N7S3052C4D0Ev)();
extern void ABISELECT(_ZThn10896_N7S3052C4D0Ev,_ZThn8044_N7S3052C4D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C11__7S3052C4__8S3052C23[] = {
  0,
  0,
  ABISELECT(-10896,-8044),
  ABISELECT(1536,1128),
  ABISELECT(-23112,-17096),
  ABISELECT(-10896,-8044),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3052C4D1Ev,_ZTv0_n20_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3052C4D0Ev,_ZTv0_n20_N7S3052C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTvn104_n40_N7S3052C4D1Ev,_ZTvn60_n20_N7S3052C4D1Ev)();
extern void ABISELECT(_ZTvn104_n40_N7S3052C4D0Ev,_ZTvn60_n20_N7S3052C4D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C58S3052C11__A1__7S3052C4__8S3052C23[] = {
  ABISELECT(-23216,-17156),
  ABISELECT(-11000,-8104),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N7S3052C4D1Ev,_ZTvn60_n20_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N7S3052C4D0Ev,_ZTvn60_n20_N7S3052C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTvn416_n40_N7S3052C4D1Ev,_ZTvn288_n20_N7S3052C4D1Ev)();
extern void ABISELECT(_ZTvn416_n40_N7S3052C4D0Ev,_ZTvn288_n20_N7S3052C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3052C128S3052C11__7S3052C4__8S3052C23[] = {
  ABISELECT(-11312,-8332),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N7S3052C4D1Ev,_ZTvn288_n20_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N7S3052C4D0Ev,_ZTvn288_n20_N7S3052C4D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3052C4D1Ev,_ZTv0_n16_N7S3052C4D1Ev)();
extern void ABISELECT(_ZThn12432_N7S3052C4D1Ev,_ZThn9172_N7S3052C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3052C4D0Ev,_ZTv0_n16_N7S3052C4D0Ev)();
extern void ABISELECT(_ZThn12432_N7S3052C4D0Ev,_ZThn9172_N7S3052C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3052C8__A4__7S3052C4__8S3052C23[] = {
  ABISELECT(-12432,-9172),
  ABISELECT(-24648,-18224),
  ABISELECT(-12432,-9172),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C4D1Ev,_ZTv0_n16_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C4D0Ev,_ZTv0_n16_N7S3052C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3052C4D1Ev,_ZTv0_n12_N7S3052C4D1Ev)();
extern void ABISELECT(_ZThn12464_N7S3052C4D1Ev,_ZThn9196_N7S3052C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C4D0Ev,_ZTv0_n12_N7S3052C4D0Ev)();
extern void ABISELECT(_ZThn12464_N7S3052C4D0Ev,_ZThn9196_N7S3052C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3052C12__A1__7S3052C4__8S3052C23[] = {
  ABISELECT(-12464,-9196),
  ABISELECT(-12464,-9196),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C4D1Ev,_ZTv0_n12_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C4D0Ev,_ZTv0_n12_N7S3052C4D0Ev),
};
extern void _ZN8S3052C11D1Ev();
extern void _ZN8S3052C11D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C11__8S3052C23[] = {
  ABISELECT(1536,1128),
  ABISELECT(-23112,-17096),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C11[0]),
  (VTBL_ENTRY)&_ZN8S3052C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C11D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C78S3052C11__A3__8S3052C23[] = {
  ABISELECT(-23112,-17096),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C78S3052C11__A3__8S3052C23[] = {
  ABISELECT(-23112,-17096),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C78S3052C11__A3__8S3052C23[] = {
  0,
  ABISELECT(23112,17096),
  ABISELECT(23112,17096),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C78S3052C11__A3__8S3052C23[] = {
  0,
  ABISELECT(23112,17096),
  ABISELECT(23112,17096),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN7S3052C5D1Ev();
extern void _ZN7S3052C5D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C58S3052C11__A2__8S3052C23[] = {
  ABISELECT(-23216,-17156),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&_ZN7S3052C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C77S3052C58S3052C11__A4__8S3052C23[] = {
  ABISELECT(-23216,-17156),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C77S3052C58S3052C11__A4__8S3052C23[] = {
  ABISELECT(-23216,-17156),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C77S3052C58S3052C11__A4__8S3052C23[] = {
  0,
  ABISELECT(23216,17156),
  ABISELECT(23216,17156),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C77S3052C58S3052C11__A4__8S3052C23[] = {
  0,
  ABISELECT(23216,17156),
  ABISELECT(23216,17156),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C58S3052C11__A2__8S3052C23[] = {
  0,
  ABISELECT(23216,17156),
  ABISELECT(23216,17156),
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3052C11D1Ev,_ZTv0_n12_N8S3052C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3052C11D0Ev,_ZTv0_n12_N8S3052C11D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__8S3052C11__8S3052C23[] = {
  0,
  ABISELECT(23112,17096),
  ABISELECT(23112,17096),
  (VTBL_ENTRY)&(_ZTI8S3052C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C11D1Ev,_ZTv0_n12_N8S3052C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C11D0Ev,_ZTv0_n12_N8S3052C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZThn104_N8S3052C11D1Ev,_ZThn60_N8S3052C11D1Ev)();
extern void ABISELECT(_ZThn104_N8S3052C11D0Ev,_ZThn60_N8S3052C11D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C5__8S3052C11__8S3052C23[] = {
  ABISELECT(-23216,-17156),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S3052C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N8S3052C11D1Ev,_ZThn60_N8S3052C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N8S3052C11D0Ev,_ZThn60_N8S3052C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C11D1Ev,_ZTv0_n16_N8S3052C11D1Ev)();
extern void ABISELECT(_ZThn1536_N8S3052C11D1Ev,_ZThn1128_N8S3052C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C11D0Ev,_ZTv0_n16_N8S3052C11D0Ev)();
extern void ABISELECT(_ZThn1536_N8S3052C11D0Ev,_ZThn1128_N8S3052C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3052C8__A2__8S3052C11__8S3052C23[] = {
  ABISELECT(-1536,-1128),
  ABISELECT(-24648,-18224),
  ABISELECT(-1536,-1128),
  (VTBL_ENTRY)&(_ZTI8S3052C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C11D1Ev,_ZTv0_n16_N8S3052C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C11D0Ev,_ZTv0_n16_N8S3052C11D0Ev),
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C8__A5__8S3052C23[] = {
  ABISELECT(-24648,-18224),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C8__A5__8S3052C23[] = {
  0,
  ABISELECT(24648,18224),
  ABISELECT(24648,18224),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
static  VTT_ENTRY vtt_S3052C23[] = {
  {&(_ZTV8S3052C23[12]),  12,127},
  {&(_ZTV8S3052C23[26]),  26,127},
  {&(_ZTV8S3052C23[34]),  34,127},
  {&(_ZTV8S3052C23[42]),  42,127},
  {&(_ZTV8S3052C23[53]),  53,127},
  {&(_ZTV8S3052C23[63]),  63,127},
  {&(_ZTV8S3052C23[72]),  72,127},
  {&(_ZTV8S3052C23[84]),  84,127},
  {&(_ZTV8S3052C23[92]),  92,127},
  {&(_ZTV8S3052C23[101]),  101,127},
  {&(_ZTV8S3052C23[108]),  108,127},
  {&(_ZTV8S3052C23[114]),  114,127},
  {&(_ZTV8S3052C23[120]),  120,127},
  {&(_ZTV8S3052C23[125]),  125,127},
  {&(_tg__ZTV8S3052C24__8S3052C23[4]),  4,6},
  {&(_tg__ZTV7S3052C5__8S3052C24__8S3052C23[6]),  6,10},
  {&(_tg__ZTV7S3052C6__8S3052C24__8S3052C23[4]),  4,7},
  {&(_tg__ZTV7S3052C5__8S3052C23[3]),  3,7},
  {&(_tg__ZTV7S3052C77S3052C5__8S3052C23[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C77S3052C5__8S3052C23[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C77S3052C5__8S3052C23[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C77S3052C5__8S3052C23[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C5__8S3052C23[4]),  4,7},
  {&(_tg__ZTV8S3052C21__8S3052C23[5]),  5,9},
  {&(_tg__ZTV8S3052C158S3052C21__8S3052C23[4]),  4,7},
  {&(_tg__ZTV7S3052C6__8S3052C158S3052C21__8S3052C23[4]),  4,7},
  {&(_tg__ZTV7S3052C7__8S3052C158S3052C21__8S3052C23[6]),  6,10},
  {&(_tg__ZTV7S3052C7__8S3052C21__8S3052C23[6]),  6,10},
  {&(_tg__ZTV7S3052C6__8S3052C21__8S3052C23[4]),  4,7},
  {&(_tg__ZTV7S3052C9__8S3052C21__8S3052C23[5]),  5,7},
  {&(_tg__ZTV7S3052C7__A1__8S3052C23[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C7__A1__8S3052C23[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C7__A1__8S3052C23[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C7__A1__8S3052C23[4]),  4,7},
  {&(_tg__ZTV7S3052C9__8S3052C23[4]),  4,6},
  {&(_tg__ZTV7S3052C7__7S3052C9__8S3052C23[6]),  6,10},
  {&(_tg__ZTV7S3052C6__7S3052C9__8S3052C23[4]),  4,7},
  {&(_tg__ZTV7S3052C4__8S3052C23[7]),  7,11},
  {&(_tg__ZTV7S3052C57S3052C4__A1__8S3052C23[3]),  3,7},
  {&(_tg__ZTV7S3052C77S3052C57S3052C4__A2__8S3052C23[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C77S3052C57S3052C4__A2__8S3052C23[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C77S3052C57S3052C4__A2__8S3052C23[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C77S3052C57S3052C4__A2__8S3052C23[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C57S3052C4__A1__8S3052C23[4]),  4,7},
  {&(_tg__ZTV7S3052C97S3052C4__A1__8S3052C23[4]),  4,6},
  {&(_tg__ZTV7S3052C7__7S3052C97S3052C4__A1__8S3052C23[6]),  6,10},
  {&(_tg__ZTV7S3052C6__7S3052C97S3052C4__A1__8S3052C23[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C4__8S3052C23[4]),  4,7},
  {&(_tg__ZTV7S3052C7__A1__7S3052C4__8S3052C23[6]),  6,10},
  {&(_tg__ZTV7S3052C9__7S3052C4__8S3052C23[4]),  4,6},
  {&(_tg__ZTV8S3052C11__7S3052C4__8S3052C23[7]),  7,11},
  {&(_tg__ZTV7S3052C58S3052C11__A1__7S3052C4__8S3052C23[3]),  3,7},
  {&(_tg__ZTV8S3052C128S3052C11__7S3052C4__8S3052C23[2]),  2,4},
  {&(_tg__ZTV7S3052C8__A4__7S3052C4__8S3052C23[4]),  4,6},
  {&(_tg__ZTV8S3052C12__A1__7S3052C4__8S3052C23[3]),  3,5},
  {&(_tg__ZTV8S3052C11__8S3052C23[4]),  4,8},
  {&(_tg__ZTV7S3052C78S3052C11__A3__8S3052C23[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C78S3052C11__A3__8S3052C23[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C78S3052C11__A3__8S3052C23[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C78S3052C11__A3__8S3052C23[4]),  4,7},
  {&(_tg__ZTV7S3052C58S3052C11__A2__8S3052C23[3]),  3,7},
  {&(_tg__ZTV7S3052C77S3052C58S3052C11__A4__8S3052C23[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C77S3052C58S3052C11__A4__8S3052C23[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C77S3052C58S3052C11__A4__8S3052C23[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C77S3052C58S3052C11__A4__8S3052C23[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C58S3052C11__A2__8S3052C23[4]),  4,7},
  {&(_tg__ZTV7S3052C6__8S3052C11__8S3052C23[4]),  4,7},
  {&(_tg__ZTV7S3052C5__8S3052C11__8S3052C23[3]),  3,7},
  {&(_tg__ZTV7S3052C8__A2__8S3052C11__8S3052C23[4]),  4,6},
  {&(_tg__ZTV7S3052C8__A5__8S3052C23[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C8__A5__8S3052C23[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S3052C23[];
extern  VTBL_ENTRY _ZTV8S3052C23[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C23[];
static VTBL_ENTRY alt_thunk_names13[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C11D0Ev,_ZTv0_n16_N8S3052C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S3052C11D0Ev,_ZThn1128_N8S3052C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C11D1Ev,_ZTv0_n16_N8S3052C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S3052C11D1Ev,_ZThn1128_N8S3052C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C4D0Ev,_ZTv0_n12_N7S3052C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12464_N7S3052C4D0Ev,_ZThn9196_N7S3052C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C4D1Ev,_ZTv0_n12_N7S3052C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12464_N7S3052C4D1Ev,_ZThn9196_N7S3052C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3052C4D0Ev,_ZTv0_n16_N7S3052C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12432_N7S3052C4D0Ev,_ZThn9172_N7S3052C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3052C4D1Ev,_ZTv0_n16_N7S3052C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12432_N7S3052C4D1Ev,_ZThn9172_N7S3052C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3052C4D0Ev,_ZTv0_n20_N7S3052C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10896_N7S3052C4D0Ev,_ZThn8044_N7S3052C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3052C4D1Ev,_ZTv0_n20_N7S3052C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10896_N7S3052C4D1Ev,_ZThn8044_N7S3052C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3052C21D0Ev,_ZTv0_n20_N8S3052C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N8S3052C21D0Ev,_ZThn1480_N8S3052C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3052C21D1Ev,_ZTv0_n20_N8S3052C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N8S3052C21D1Ev,_ZThn1480_N8S3052C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C21D0Ev,_ZTv0_n16_N8S3052C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N8S3052C21D0Ev,_ZThn1420_N8S3052C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C21D1Ev,_ZTv0_n16_N8S3052C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N8S3052C21D1Ev,_ZThn1420_N8S3052C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N8S3052C15D0Ev,_ZThn1420_N8S3052C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N8S3052C15D1Ev,_ZThn1420_N8S3052C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S3052C5D0Ev,_ZThn228_N7S3052C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S3052C5D1Ev,_ZThn228_N7S3052C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S3052C7D0Ev,_ZThn228_N7S3052C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S3052C7D1Ev,_ZThn228_N7S3052C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S3052C8D0Ev,_ZThn228_N7S3052C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S3052C8D1Ev,_ZThn228_N7S3052C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C24D0Ev,_ZTv0_n12_N8S3052C24D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S3052C24D0Ev,_ZThn256_N8S3052C24D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C24D1Ev,_ZTv0_n12_N8S3052C24D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S3052C24D1Ev,_ZThn256_N8S3052C24D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C24D0Ev,_ZTv0_n16_N8S3052C24D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S3052C24D0Ev,_ZThn28_N8S3052C24D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C24D1Ev,_ZTv0_n16_N8S3052C24D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S3052C24D1Ev,_ZThn28_N8S3052C24D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3052C23D0Ev,_ZTv0_n32_N8S3052C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33584_N8S3052C23D0Ev,_ZThn24884_N8S3052C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S3052C23D1Ev,_ZTv0_n32_N8S3052C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33584_N8S3052C23D1Ev,_ZThn24884_N8S3052C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3052C23D0Ev,_ZTv0_n24_N8S3052C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21472_N8S3052C23D0Ev,_ZThn15916_N8S3052C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S3052C23D1Ev,_ZTv0_n24_N8S3052C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21472_N8S3052C23D1Ev,_ZThn15916_N8S3052C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C23D0Ev,_ZTv0_n12_N8S3052C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46048_N8S3052C23D0Ev,_ZThn34080_N8S3052C23D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21368_N8S3052C23D0Ev,_ZThn15832_N8S3052C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C23D1Ev,_ZTv0_n12_N8S3052C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46048_N8S3052C23D1Ev,_ZThn34080_N8S3052C23D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21368_N8S3052C23D1Ev,_ZThn15832_N8S3052C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C23D0Ev,_ZTv0_n16_N8S3052C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46016_N8S3052C23D0Ev,_ZThn34056_N8S3052C23D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn23376_N8S3052C23D0Ev,_ZThn17336_N8S3052C23D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21056_N8S3052C23D0Ev,_ZThn15604_N8S3052C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C23D1Ev,_ZTv0_n16_N8S3052C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46016_N8S3052C23D1Ev,_ZThn34056_N8S3052C23D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn23376_N8S3052C23D1Ev,_ZThn17336_N8S3052C23D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21056_N8S3052C23D1Ev,_ZThn15604_N8S3052C23D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3052C23D0Ev,_ZTv0_n20_N8S3052C23D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44480_N8S3052C23D0Ev,_ZThn32928_N8S3052C23D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn23488_N8S3052C23D0Ev,_ZThn17396_N8S3052C23D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21000_N8S3052C23D0Ev,_ZThn15576_N8S3052C23D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S3052C23D1Ev,_ZTv0_n20_N8S3052C23D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44480_N8S3052C23D1Ev,_ZThn32928_N8S3052C23D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn23488_N8S3052C23D1Ev,_ZThn17396_N8S3052C23D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21000_N8S3052C23D1Ev,_ZThn15576_N8S3052C23D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3052C23 = {  "S3052C23", // class name
  bases_S3052C23, 29,
  &(vtc_S3052C23[0]), // expected_vtbl_contents
  &(vtt_S3052C23[0]), // expected_vtt_contents
  ABISELECT(46256,34228), // object size
  NSPAIRA(_ZTI8S3052C23),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S3052C23),127, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3052C23),71, //virtual table table var
  27, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names13,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3052C19  {
  ::S3052C20 s3052c19f0;
  ::S3052C21 s3052c19f1[4];
  char s3052c19f2[10];
  int s3052c19f3;
  void *s3052c19f4;
  int s3052c19f5;
  int s3052c19f6[10];
  void *s3052c19f7;
  int s3052c19f8;
  int s3052c19f9:22;
  void *s3052c19f10;
  void *s3052c19f11;
  ::S3052C23 s3052c19f12[10];
  void  mf3052c19(); // _ZN8S3052C199mf3052c19Ev
};
//SIG(-1 S3052C19) C1{ m FC2{ VBC3{ vd v1 Fs[6] FL[8] Fi} VBC4{ VBC5{ VBC3 BC6{ VBC3 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} VBC7{ BC8{ m Fp Fi FL Fp Fi} VBC5 Fp Fc[4] Fi:11 Fp[2] Fi[6] FC9{ VBC3 BC5 BC10{ VBC3 BC5 Fp[3] Fc:8 Fi[2] Fc FC3 Fp[3] FL[5] Fi} BC11{ vd m FC5} VBC6 Fp Fl FC10 FC11 FC6 Fi[2] FU12{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} BC13{ BC11 VBC3 VBC5 v4 FC5[2] FD FC11 Fp[3] FC10 Fi FU14{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi} v5 Fp FC15{} FC3 FL FU12 FL[6] FL FC10} BC16{ BC13 VBC6 BC3 BC17{ VBC3 BC10 VBC6 VBC5 vd Fp Fp[5] Fp} v6 FC3[9] Fc Fi Fi Fi Fc} vd FC9 FU12 Fi Fc} FC4[4] Fc[10] Fi Fp Fi Fi[10] Fp Fi Fi:22 Fp Fp FC18{ VBC19{ VBC10 Fp[6]} VBC4 VBC20{ BC10 VBC5 BC7 VBC9 VBC11 vd FC11[2] Fi FD FD Fc:0 Fp} BC21{ v8 Fi:0 Fi[7] Fp} BC3 v7 Fi Fp Fi FC7[2] FC6 FD Fi[3] FU12 FL Fi[2] Fi FU12 Fp}[10]}


void  S3052C19 ::mf3052c19(){}

static void Test_S3052C19()
{
  {
    init_simple_test("S3052C19");
    static S3052C19 lv;
    check2(sizeof(lv), ABISELECT(528096,390960), "sizeof(S3052C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3052C19)");
    check_field_offset(lv, s3052c19f0, 0, "S3052C19.s3052c19f0");
    check_field_offset(lv, s3052c19f1, ABISELECT(16592,12388), "S3052C19.s3052c19f1");
    check_field_offset(lv, s3052c19f2, ABISELECT(65424,48596), "S3052C19.s3052c19f2");
    check_field_offset(lv, s3052c19f3, ABISELECT(65436,48608), "S3052C19.s3052c19f3");
    check_field_offset(lv, s3052c19f4, ABISELECT(65440,48612), "S3052C19.s3052c19f4");
    check_field_offset(lv, s3052c19f5, ABISELECT(65448,48616), "S3052C19.s3052c19f5");
    check_field_offset(lv, s3052c19f6, ABISELECT(65452,48620), "S3052C19.s3052c19f6");
    check_field_offset(lv, s3052c19f7, ABISELECT(65496,48660), "S3052C19.s3052c19f7");
    check_field_offset(lv, s3052c19f8, ABISELECT(65504,48664), "S3052C19.s3052c19f8");
    set_bf_and_test(lv, s3052c19f9, ABISELECT(65508,48668), 0, 22, 1, "S3052C19");
    set_bf_and_test(lv, s3052c19f9, ABISELECT(65508,48668), 0, 22, hide_sll(1LL<<21), "S3052C19");
    check_field_offset(lv, s3052c19f10, ABISELECT(65512,48672), "S3052C19.s3052c19f10");
    check_field_offset(lv, s3052c19f11, ABISELECT(65520,48676), "S3052C19.s3052c19f11");
    check_field_offset(lv, s3052c19f12, ABISELECT(65536,48680), "S3052C19.s3052c19f12");
  }
}
static Arrange_To_Call_Me vS3052C19(Test_S3052C19, "S3052C19", ABISELECT(528096,390960));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S3052C19[];
VTBL_ENTRY *P__ZTI8S3052C19 = _ZTI8S3052C19; 
Class_Descriptor cd_S3052C19 = {  "S3052C19", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(528096,390960), // object size
  NSPAIRA(_ZTI8S3052C19),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3052C25  : S3052C7 , S3052C15 , S3052C19 , S3052C8 {
  ::S3052C13 s3052c25f0;
  int s3052c25f1;
  void *s3052c25f2;
  char s3052c25f3[7];
  void *s3052c25f4;
  int s3052c25f5;
  ::S3052C22_nt s3052c25f6;
  int s3052c25f7;
  long double s3052c25f8;
  virtual void  v11(); // _ZN8S3052C253v11Ev
  ~S3052C25(); // tgen
  S3052C25(); // tgen
};
//SIG(-1 S3052C25) C1{ BC2{ VBC3{ vd v2 Fs[6] FL[8] Fi} BC4{ VBC3 FL Fp FL:54} v3 v4 Fc:0 Fp[8] Fc} BC5{ BC6{ vd m FC2} VBC3 VBC2 v5 FC2[2] FD FC6 Fp[3] FC7{ VBC3 BC2 Fp[3] Fc:8 Fi[2] Fc FC3 Fp[3] FL[5] Fi} Fi FU8{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi} BC9{ m FC10{ VBC3 VBC11{ VBC2 VBC12{ BC13{ m Fp Fi FL Fp Fi} VBC2 Fp Fc[4] Fi:11 Fp[2] Fi[6] FC14{ VBC3 BC2 BC7 BC6 VBC4 Fp Fl FC7 FC6 FC4 Fi[2] FU15{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} BC5 v6 Fp FC16{} FC3 FL FU15 FL[6] FL FC7} BC17{ BC5 VBC4 BC3 BC18{ VBC3 BC7 VBC4 VBC2 vd Fp Fp[5] Fp} v7 FC3[9] Fc Fi Fi Fi Fc} vd FC14 FU15 Fi Fc} FC11[4] Fc[10] Fi Fp Fi Fi[10] Fp Fi Fi:22 Fp Fp FC19{ VBC20{ VBC7 Fp[6]} VBC11 VBC21{ BC7 VBC2 BC12 VBC14 VBC6 vd FC6[2] Fi FD FD Fc:0 Fp} BC22{ v9 Fi:0 Fi[7] Fp} BC3 v8 Fi Fp Fi FC12[2] FC4 FD Fi[3] FU15 FL Fi[2] Fi FU15 Fp}[10]} BC4 v1 FU15 Fi Fp Fc[7] Fp Fi FC16 Fi FD}


void  S3052C25 ::v11(){vfunc_called(this, "_ZN8S3052C253v11Ev");}
S3052C25 ::~S3052C25(){ note_dtor("S3052C25", this);} // tgen
S3052C25 ::S3052C25(){ note_ctor("S3052C25", this);} // tgen

static void Test_S3052C25()
{
  extern Class_Descriptor cd_S3052C25;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33115,98047)];
    init_test(&cd_S3052C25, buf);
    S3052C25 *dp, &lv = *(dp=new (buf) S3052C25());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(529824,392184), "sizeof(S3052C25)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3052C25)");
    /*is_ambiguous_... S3052C25::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C7*), ABISELECT(529616,392040), "S3052C25");
    /*is_ambiguous_... S3052C25::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*), ABISELECT(529616,392040), "S3052C25");
    check_base_class_offset(lv, (S3052C6*)(S3052C15*), ABISELECT(529616,392040), "S3052C25");
    /*is_ambiguous_... S3052C25::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C7*), ABISELECT(529616,392040), "S3052C25");
    /*is_ambiguous_... S3052C25::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*), ABISELECT(529616,392040), "S3052C25");
    /*is_ambiguous_... S3052C25::S3052C8 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*), ABISELECT(529616,392040), "S3052C25");
    /*is_ambiguous_... S3052C25::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C7*), 0, "S3052C25");
    /*is_ambiguous_... S3052C25::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C7*), 0, "S3052C25");
    check_base_class_offset(lv, (S3052C12*)(S3052C15*), ABISELECT(112,60), "S3052C25");
    /*is_ambiguous_... S3052C25::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C7*), ABISELECT(529712,392124), "S3052C25");
    check_base_class_offset(lv, (S3052C7*)(S3052C15*), ABISELECT(529712,392124), "S3052C25");
    check_base_class_offset(lv, (S3052C15*), ABISELECT(112,60), "S3052C25");
    check_base_class_offset(lv, (S3052C19*), ABISELECT(1408,1000), "S3052C25");
    /*is_ambiguous_... S3052C25::S3052C8 */ AMB_check_base_class_offset(lv, (S3052C8*), ABISELECT(529504,391960), "S3052C25");
    check_field_offset(lv, s3052c25f0, ABISELECT(529536,391984), "S3052C25.s3052c25f0");
    check_field_offset(lv, s3052c25f1, ABISELECT(529552,391996), "S3052C25.s3052c25f1");
    check_field_offset(lv, s3052c25f2, ABISELECT(529560,392000), "S3052C25.s3052c25f2");
    check_field_offset(lv, s3052c25f3, ABISELECT(529568,392004), "S3052C25.s3052c25f3");
    check_field_offset(lv, s3052c25f4, ABISELECT(529576,392012), "S3052C25.s3052c25f4");
    check_field_offset(lv, s3052c25f5, ABISELECT(529584,392016), "S3052C25.s3052c25f5");
    check_field_offset(lv, s3052c25f6, ABISELECT(529588,392020), "S3052C25.s3052c25f6");
    check_field_offset(lv, s3052c25f7, ABISELECT(529592,392024), "S3052C25.s3052c25f7");
    check_field_offset(lv, s3052c25f8, ABISELECT(529600,392028), "S3052C25.s3052c25f8");
    test_class_info(&lv, &cd_S3052C25);
    dp->~S3052C25();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3052C25(Test_S3052C25, "S3052C25", ABISELECT(529824,392184));

#else // __cplusplus

extern void _ZN8S3052C25C1Ev();
extern void _ZN8S3052C25D1Ev();
Name_Map name_map_S3052C25[] = {
  NSPAIR(_ZN8S3052C25C1Ev),
  NSPAIR(_ZN8S3052C25D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C6;
extern VTBL_ENTRY _ZTI7S3052C6[];
extern  VTBL_ENTRY _ZTV7S3052C6[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C15;
extern VTBL_ENTRY _ZTI8S3052C15[];
extern  VTBL_ENTRY _ZTV8S3052C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C15[];
extern Class_Descriptor cd_S3052C19;
extern VTBL_ENTRY _ZTI8S3052C19[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
static Base_Class bases_S3052C25[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C6,    ABISELECT(529616,392040), //bcp->offset
    21, //bcp->virtual_function_table_offset
    4, //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_S3052C8,    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_S3052C7,    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_S3052C12,    ABISELECT(112,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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3052C8,    ABISELECT(529712,392124), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(529712,392124), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S3052C15,    ABISELECT(112,60), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3052C19,    ABISELECT(1408,1000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3052C8,    ABISELECT(529504,391960), //bcp->offset
    16, //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 _ZTI8S3052C25[];
extern void _ZN8S3052C25D1Ev();
extern void _ZN8S3052C25D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void _ZN8S3052C253v11Ev();
extern void ABISELECT(_ZThn112_N8S3052C25D1Ev,_ZThn60_N8S3052C25D1Ev)();
extern void ABISELECT(_ZThn112_N8S3052C25D0Ev,_ZThn60_N8S3052C25D0Ev)();
extern void _ZN8S3052C152v6Ev();
extern void ABISELECT(_ZThn529504_N8S3052C25D1Ev,_ZThn391960_N8S3052C25D1Ev)();
extern void ABISELECT(_ZThn529504_N8S3052C25D0Ev,_ZThn391960_N8S3052C25D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3052C25D1Ev,_ZTv0_n12_N8S3052C25D1Ev)();
extern void ABISELECT(_ZThn529616_N8S3052C25D1Ev,_ZThn392040_N8S3052C25D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3052C25D0Ev,_ZTv0_n12_N8S3052C25D0Ev)();
extern void ABISELECT(_ZThn529616_N8S3052C25D0Ev,_ZThn392040_N8S3052C25D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
extern void ABISELECT(_ZTv0_n32_N8S3052C25D1Ev,_ZTv0_n16_N8S3052C25D1Ev)();
extern void ABISELECT(_ZThn529712_N8S3052C25D1Ev,_ZThn392124_N8S3052C25D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C25D0Ev,_ZTv0_n16_N8S3052C25D0Ev)();
extern void ABISELECT(_ZThn529712_N8S3052C25D0Ev,_ZThn392124_N8S3052C25D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY vtc_S3052C25[] = {
  ABISELECT(529712,392124),
  ABISELECT(529616,392040),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C25[0]),
  (VTBL_ENTRY)&_ZN8S3052C25D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C25D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  (VTBL_ENTRY)&_ZN8S3052C253v11Ev,
  ABISELECT(529600,392064),
  ABISELECT(529504,391980),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S3052C25[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S3052C25D1Ev,_ZThn60_N8S3052C25D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S3052C25D0Ev,_ZThn60_N8S3052C25D0Ev),
  (VTBL_ENTRY)&_ZN8S3052C152v6Ev,
  ABISELECT(112,80),
  ABISELECT(-529504,-391960),
  (VTBL_ENTRY)&(_ZTI8S3052C25[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn529504_N8S3052C25D1Ev,_ZThn391960_N8S3052C25D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn529504_N8S3052C25D0Ev,_ZThn391960_N8S3052C25D0Ev),
  0,
  ABISELECT(-529616,-392040),
  ABISELECT(-529616,-392040),
  (VTBL_ENTRY)&(_ZTI8S3052C25[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C25D1Ev,_ZTv0_n12_N8S3052C25D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C25D0Ev,_ZTv0_n12_N8S3052C25D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
  0,
  0,
  ABISELECT(-529712,-392124),
  ABISELECT(-96,-84),
  ABISELECT(-529712,-392124),
  (VTBL_ENTRY)&(_ZTI8S3052C25[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C25D1Ev,_ZTv0_n16_N8S3052C25D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C25D0Ev,_ZTv0_n16_N8S3052C25D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern VTBL_ENTRY _ZTV8S3052C25[];
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__A__8S3052C25[] = {
  ABISELECT(529616,392040),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C7__8S3052C25[] = {
  ABISELECT(529616,392040),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZThn529616_N7S3052C8D1Ev,_ZThn392040_N7S3052C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void ABISELECT(_ZThn529616_N7S3052C8D0Ev,_ZThn392040_N7S3052C8D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C7__8S3052C25[] = {
  0,
  ABISELECT(-529616,-392040),
  ABISELECT(-529616,-392040),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZThn529616_N7S3052C7D1Ev,_ZThn392040_N7S3052C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void ABISELECT(_ZThn529616_N7S3052C7D0Ev,_ZThn392040_N7S3052C7D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C7__A__8S3052C25[] = {
  0,
  ABISELECT(-529616,-392040),
  ABISELECT(-529616,-392040),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN8S3052C15D1Ev();
extern void _ZN8S3052C15D0Ev();
extern void _ZN8S3052C152v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C15__8S3052C25[] = {
  ABISELECT(529600,392064),
  ABISELECT(529504,391980),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&_ZN8S3052C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C15D0Ev,
  (VTBL_ENTRY)&_ZN8S3052C152v6Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev)();
extern void ABISELECT(_ZThn529504_N8S3052C15D1Ev,_ZThn391980_N8S3052C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev)();
extern void ABISELECT(_ZThn529504_N8S3052C15D0Ev,_ZThn391980_N8S3052C15D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__8S3052C15__8S3052C25[] = {
  0,
  ABISELECT(-529504,-391980),
  ABISELECT(-529504,-391980),
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev)();
extern void ABISELECT(_ZThn529600_N8S3052C15D1Ev,_ZThn392064_N8S3052C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev)();
extern void ABISELECT(_ZThn529600_N8S3052C15D0Ev,_ZThn392064_N8S3052C15D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__8S3052C15__8S3052C25[] = {
  0,
  0,
  ABISELECT(-529600,-392064),
  ABISELECT(-96,-84),
  ABISELECT(-529600,-392064),
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C8__A2__8S3052C25[] = {
  ABISELECT(112,80),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZThn112_N7S3052C8D1Ev,_ZThn80_N7S3052C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void ABISELECT(_ZThn112_N7S3052C8D0Ev,_ZThn80_N7S3052C8D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C8__A2__8S3052C25[] = {
  0,
  ABISELECT(-112,-80),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__A1__8S3052C25[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C7__A1__8S3052C25[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C7__A1__8S3052C25[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C7__A1__8S3052C25[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
static  VTT_ENTRY vtt_S3052C25[] = {
  {&(_ZTV8S3052C25[4]),  4,38},
  {&(_tg__ZTV7S3052C7__A__8S3052C25[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C7__8S3052C25[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C7__8S3052C25[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C7__A__8S3052C25[4]),  4,7},
  {&(_tg__ZTV8S3052C15__8S3052C25[4]),  4,7},
  {&(_tg__ZTV7S3052C6__8S3052C15__8S3052C25[4]),  4,7},
  {&(_tg__ZTV7S3052C7__8S3052C15__8S3052C25[6]),  6,10},
  {&(_tg__ZTV7S3052C8__A2__8S3052C25[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C8__A2__8S3052C25[4]),  4,7},
  {&(_ZTV8S3052C25[25]),  25,38},
  {&(_ZTV8S3052C25[13]),  13,38},
  {&(_ZTV8S3052C25[34]),  34,38},
  {&(_ZTV8S3052C25[19]),  19,38},
  {&(_tg__ZTV7S3052C7__A1__8S3052C25[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C7__A1__8S3052C25[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C7__A1__8S3052C25[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C7__A1__8S3052C25[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S3052C25[];
extern  VTBL_ENTRY _ZTV8S3052C25[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C25[];
static VTBL_ENTRY alt_thunk_names14[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529600_N8S3052C15D0Ev,_ZThn392064_N8S3052C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529600_N8S3052C15D1Ev,_ZThn392064_N8S3052C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529504_N8S3052C15D0Ev,_ZThn391980_N8S3052C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529504_N8S3052C15D1Ev,_ZThn391980_N8S3052C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529616_N7S3052C7D0Ev,_ZThn392040_N7S3052C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529616_N7S3052C7D1Ev,_ZThn392040_N7S3052C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S3052C8D0Ev,_ZThn80_N7S3052C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn529616_N7S3052C8D0Ev,_ZThn392040_N7S3052C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N7S3052C8D1Ev,_ZThn80_N7S3052C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn529616_N7S3052C8D1Ev,_ZThn392040_N7S3052C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C25D0Ev,_ZTv0_n16_N8S3052C25D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529712_N8S3052C25D0Ev,_ZThn392124_N8S3052C25D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C25D1Ev,_ZTv0_n16_N8S3052C25D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529712_N8S3052C25D1Ev,_ZThn392124_N8S3052C25D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C25D0Ev,_ZTv0_n12_N8S3052C25D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529616_N8S3052C25D0Ev,_ZThn392040_N8S3052C25D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C25D1Ev,_ZTv0_n12_N8S3052C25D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529616_N8S3052C25D1Ev,_ZThn392040_N8S3052C25D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3052C25 = {  "S3052C25", // class name
  bases_S3052C25, 9,
  &(vtc_S3052C25[0]), // expected_vtbl_contents
  &(vtt_S3052C25[0]), // expected_vtt_contents
  ABISELECT(529824,392184), // object size
  NSPAIRA(_ZTI8S3052C25),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S3052C25),38, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S3052C25),18, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names14,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3052C2  : S3052C3 , virtual S3052C4 , S3052C14 , virtual S3052C10 {
  ::S3052C18 s3052c2f0;
  ::S3052C13 s3052c2f1;
  ::S3052C19 s3052c2f2;
  ::S3052C25 s3052c2f3;
  int s3052c2f4;
  char s3052c2f5;
  int s3052c2f6;
  virtual void  v8(); // _ZN7S3052C22v8Ev
  ~S3052C2(); // tgen
  S3052C2(); // tgen
};
//SIG(-1 S3052C2) C1{ BC2{ v2 Fi:0 Fi[7] Fp} VBC3{ BC4{ VBC5{ vd v3 Fs[6] FL[8] Fi} BC6{ VBC5 BC7{ VBC5 FL Fp FL:54} v4 v5 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC5 Fp[3] FL[5] Fi} VBC6 BC8{ BC9{ m Fp Fi FL Fp Fi} VBC6 Fp Fc[4] Fi:11 Fp[2] Fi[6] FC10{ VBC5 BC6 BC4 BC11{ vd m FC6} VBC7 Fp Fl FC4 FC11 FC7 Fi[2] FU12{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} VBC10 VBC11 vd FC11[2] Fi FD FD Fc:0 Fp} BC13{ BC14{ BC11 VBC5 VBC6 v6 FC6[2] FD FC11 Fp[3] FC4 Fi FU15{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi} VBC7 BC5 BC16{ VBC5 BC4 VBC7 VBC6 vd Fp Fp[5] Fp} v7 FC5[9] Fc Fi Fi Fi Fc} VBC9 v1 FU17{ m Fs Fp[9] Fc Fi[5] FL Fp Fp Fi FD Fi[4] Fi:32 Fi FD} FU12 FC18{ m FC19{ VBC5 VBC20{ VBC6 VBC8 BC14 v8 Fp FC21{} FC5 FL FU12 FL[6] FL FC4} BC13 vd FC10 FU12 Fi Fc} FC20[4] Fc[10] Fi Fp Fi Fi[10] Fp Fi Fi:22 Fp Fp FC22{ VBC23{ VBC4 Fp[6]} VBC20 VBC3 BC2 BC5 v9 Fi Fp Fi FC8[2] FC7 FD Fi[3] FU12 FL Fi[2] Fi FU12 Fp}[10]} FC24{ BC6 BC14 BC18 BC7 v10 FU12 Fi Fp Fc[7] Fp Fi FC21 Fi FD} Fi Fc Fi}


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

static void Test_S3052C2()
{
  extern Class_Descriptor cd_S3052C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(67104,198703)];
    init_test(&cd_S3052C2, buf);
    S3052C2 *dp, &lv = *(dp=new (buf) S3052C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1073648,794808), "sizeof(S3052C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3052C2)");
    check_base_class_offset(lv, (S3052C3*), 0, "S3052C2");
    /*is_ambiguous_... S3052C4::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C5*)(S3052C4*), ABISELECT(1071624,793340), "S3052C2");
    /*is_ambiguous_... S3052C4::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C7*)(S3052C5*)(S3052C4*), ABISELECT(1071624,793340), "S3052C2");
    /*is_ambiguous_... S3052C4::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*)(S3052C5*)(S3052C4*), ABISELECT(1071624,793340), "S3052C2");
    /*is_ambiguous_... S3052C2::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C7*), ABISELECT(1071624,793340), "S3052C2");
    /*is_ambiguous_... S3052C2::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*), ABISELECT(1071624,793340), "S3052C2");
    check_base_class_offset(lv, (S3052C6*)(S3052C11*), ABISELECT(1071624,793340), "S3052C2");
    /*is_ambiguous_... S3052C11::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C7*)(S3052C11*), ABISELECT(1071624,793340), "S3052C2");
    /*is_ambiguous_... S3052C11::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*)(S3052C11*), ABISELECT(1071624,793340), "S3052C2");
    check_base_class_offset(lv, (S3052C6*)(S3052C5*)(S3052C11*), ABISELECT(1071624,793340), "S3052C2");
    check_base_class_offset(lv, (S3052C6*)(S3052C7*)(S3052C5*)(S3052C11*), ABISELECT(1071624,793340), "S3052C2");
    check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*)(S3052C5*)(S3052C11*), ABISELECT(1071624,793340), "S3052C2");
    /*is_ambiguous_... S3052C2::S3052C8 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*), ABISELECT(1071624,793340), "S3052C2");
    check_base_class_offset(lv, (S3052C6*)(S3052C15*)(S3052C14*), ABISELECT(1071624,793340), "S3052C2");
    check_base_class_offset(lv, (S3052C6*)(S3052C17*)(S3052C14*), ABISELECT(1071624,793340), "S3052C2");
    check_base_class_offset(lv, (S3052C6*)(S3052C5*)(S3052C17*)(S3052C14*), ABISELECT(1071624,793340), "S3052C2");
    check_base_class_offset(lv, (S3052C6*)(S3052C7*)(S3052C5*)(S3052C17*)(S3052C14*), ABISELECT(1071624,793340), "S3052C2");
    check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*)(S3052C5*)(S3052C17*)(S3052C14*), ABISELECT(1071624,793340), "S3052C2");
    /*is_ambiguous_... S3052C4::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C7*)(S3052C5*)(S3052C4*), ABISELECT(1060736,785296), "S3052C2");
    /*is_ambiguous_... S3052C4::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C7*)(S3052C5*)(S3052C4*), ABISELECT(1060736,785296), "S3052C2");
    /*is_ambiguous_... S3052C4::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C5*)(S3052C4*), ABISELECT(1060736,785296), "S3052C2");
    /*is_ambiguous_... S3052C2::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C7*), ABISELECT(1071720,793424), "S3052C2");
    /*is_ambiguous_... S3052C4::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C7*)(S3052C4*), ABISELECT(1071720,793424), "S3052C2");
    check_base_class_offset(lv, (S3052C7*)(S3052C9*)(S3052C4*), ABISELECT(1071720,793424), "S3052C2");
    check_base_class_offset(lv, (S3052C7*)(S3052C15*)(S3052C14*), ABISELECT(1071720,793424), "S3052C2");
    /*is_ambiguous_... S3052C17::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C7*)(S3052C17*)(S3052C14*), ABISELECT(1071720,793424), "S3052C2");
    check_base_class_offset(lv, (S3052C10*)(S3052C9*)(S3052C4*), ABISELECT(1061064,785528), "S3052C2");
    check_base_class_offset(lv, (S3052C9*)(S3052C4*), ABISELECT(1061056,785524), "S3052C2");
    /*is_ambiguous_... S3052C11::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C7*)(S3052C11*), ABISELECT(1071824,793484), "S3052C2");
    /*is_ambiguous_... S3052C11::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C7*)(S3052C11*), ABISELECT(1071824,793484), "S3052C2");
    check_base_class_offset(lv, (S3052C8*)(S3052C7*)(S3052C5*)(S3052C11*), ABISELECT(1071928,793544), "S3052C2");
    check_base_class_offset(lv, (S3052C7*)(S3052C5*)(S3052C11*), ABISELECT(1071928,793544), "S3052C2");
    check_base_class_offset(lv, (S3052C5*)(S3052C11*), ABISELECT(1071928,793544), "S3052C2");
    check_base_class_offset(lv, (S3052C12*)(S3052C11*), ABISELECT(1072240,793772), "S3052C2");
    /*is_ambiguous_... S3052C11::S3052C8 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C11*), ABISELECT(1073360,794612), "S3052C2");
    /*is_ambiguous_... S3052C14::S3052C8 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C14*), ABISELECT(1073360,794612), "S3052C2");
    /*is_ambiguous_... S3052C17::S3052C8 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C17*)(S3052C14*), ABISELECT(1073360,794612), "S3052C2");
    check_base_class_offset(lv, (S3052C11*)(S3052C4*), ABISELECT(1071824,793484), "S3052C2");
    /*is_ambiguous_... S3052C4::S3052C12 */ AMB_check_base_class_offset(lv, (S3052C12*)(S3052C4*), ABISELECT(1073392,794636), "S3052C2");
    check_base_class_offset(lv, (S3052C4*), ABISELECT(1060736,785296), "S3052C2");
    check_base_class_offset(lv, (S3052C12*)(S3052C15*)(S3052C14*), ABISELECT(48,36), "S3052C2");
    check_base_class_offset(lv, (S3052C15*)(S3052C14*), ABISELECT(48,36), "S3052C2");
    /*is_ambiguous_... S3052C14::S3052C6 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C14*), ABISELECT(1344,976), "S3052C2");
    check_base_class_offset(lv, (S3052C8*)(S3052C7*)(S3052C5*)(S3052C17*)(S3052C14*), ABISELECT(1440,1060), "S3052C2");
    check_base_class_offset(lv, (S3052C7*)(S3052C5*)(S3052C17*)(S3052C14*), ABISELECT(1440,1060), "S3052C2");
    check_base_class_offset(lv, (S3052C5*)(S3052C17*)(S3052C14*), ABISELECT(1440,1060), "S3052C2");
    check_base_class_offset(lv, (S3052C17*)(S3052C14*), ABISELECT(1440,1060), "S3052C2");
    check_base_class_offset(lv, (S3052C14*), ABISELECT(48,36), "S3052C2");
    /*is_ambiguous_... S3052C2::S3052C10 */ AMB_check_base_class_offset(lv, (S3052C10*), ABISELECT(1073600,794784), "S3052C2");
    check_field_offset(lv, s3052c2f0, ABISELECT(2704,2092), "S3052C2.s3052c2f0");
    check_field_offset(lv, s3052c2f1, ABISELECT(2784,2128), "S3052C2.s3052c2f1");
    check_field_offset(lv, s3052c2f2, ABISELECT(2800,2140), "S3052C2.s3052c2f2");
    check_field_offset(lv, s3052c2f3, ABISELECT(530896,393100), "S3052C2.s3052c2f3");
    check_field_offset(lv, s3052c2f4, ABISELECT(1060720,785284), "S3052C2.s3052c2f4");
    check_field_offset(lv, s3052c2f5, ABISELECT(1060724,785288), "S3052C2.s3052c2f5");
    check_field_offset(lv, s3052c2f6, ABISELECT(1060728,785292), "S3052C2.s3052c2f6");
    test_class_info(&lv, &cd_S3052C2);
    dp->~S3052C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3052C2(Test_S3052C2, "S3052C2", ABISELECT(1073648,794808));

#else // __cplusplus

extern void _ZN7S3052C2C1Ev();
extern void _ZN7S3052C2D1Ev();
Name_Map name_map_S3052C2[] = {
  NSPAIR(_ZN7S3052C2C1Ev),
  NSPAIR(_ZN7S3052C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C3;
extern VTBL_ENTRY _ZTI7S3052C3[];
extern  VTBL_ENTRY _ZTV7S3052C3[];
extern Class_Descriptor cd_S3052C6;
extern VTBL_ENTRY _ZTI7S3052C6[];
extern  VTBL_ENTRY _ZTV7S3052C6[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C5;
extern VTBL_ENTRY _ZTI7S3052C5[];
extern  VTBL_ENTRY _ZTV7S3052C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C5[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S3052C9;
extern VTBL_ENTRY _ZTI7S3052C9[];
extern  VTBL_ENTRY _ZTV7S3052C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C9[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C5;
extern VTBL_ENTRY _ZTI7S3052C5[];
extern  VTBL_ENTRY _ZTV7S3052C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C5[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C11;
extern VTBL_ENTRY _ZTI8S3052C11[];
extern  VTBL_ENTRY _ZTV8S3052C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C11[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S3052C4;
extern VTBL_ENTRY _ZTI7S3052C4[];
extern  VTBL_ENTRY _ZTV7S3052C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C4[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S3052C15;
extern VTBL_ENTRY _ZTI8S3052C15[];
extern  VTBL_ENTRY _ZTV8S3052C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C15[];
extern Class_Descriptor cd_S3052C6;
extern VTBL_ENTRY _ZTI7S3052C6[];
extern  VTBL_ENTRY _ZTV7S3052C6[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C5;
extern VTBL_ENTRY _ZTI7S3052C5[];
extern  VTBL_ENTRY _ZTV7S3052C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C5[];
extern Class_Descriptor cd_S3052C17;
extern VTBL_ENTRY _ZTI8S3052C17[];
extern  VTBL_ENTRY _ZTV8S3052C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C17[];
extern Class_Descriptor cd_S3052C14;
extern VTBL_ENTRY _ZTI8S3052C14[];
extern  VTBL_ENTRY _ZTV8S3052C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C14[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
static Base_Class bases_S3052C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3052C6,    ABISELECT(1071624,793340), //bcp->offset
    56, //bcp->virtual_function_table_offset
    4, //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
    2, //immediately_derived
  0, 1},
  {&cd_S3052C8,    ABISELECT(1060736,785296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(1060736,785296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3052C5,    ABISELECT(1060736,785296), //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
    15, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3052C8,    ABISELECT(1071720,793424), //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
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(1071720,793424), //bcp->offset
    63, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3052C10,    ABISELECT(1061064,785528), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3052C9,    ABISELECT(1061056,785524), //bcp->offset
    50, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3052C8,    ABISELECT(1071824,793484), //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
    10, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(1071824,793484), //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
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3052C8,    ABISELECT(1071928,793544), //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
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(1071928,793544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3052C5,    ABISELECT(1071928,793544), //bcp->offset
    84, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3052C12,    ABISELECT(1072240,793772), //bcp->offset
    91, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3052C8,    ABISELECT(1073360,794612), //bcp->offset
    95, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3052C11,    ABISELECT(1071824,793484), //bcp->offset
    73, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S3052C12,    ABISELECT(1073392,794636), //bcp->offset
    101, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S3052C4,    ABISELECT(1060736,785296), //bcp->offset
    36, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C12,    ABISELECT(48,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
    19, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3052C15,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3052C6,    ABISELECT(1344,976), //bcp->offset
    22, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3052C8,    ABISELECT(1440,1060), //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
    22, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(1440,1060), //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
    23, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S3052C5,    ABISELECT(1440,1060), //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
    24, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3052C17,    ABISELECT(1440,1060), //bcp->offset
    27, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3052C14,    ABISELECT(48,36), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3052C10,    ABISELECT(1073600,794784), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S3052C2[];
extern void _ZN7S3052C32v2Ev();
extern void _ZN7S3052C22v8Ev();
extern void _ZN7S3052C2D1Ev();
extern void _ZN7S3052C2D0Ev();
extern void ABISELECT(_ZThn48_N7S3052C2D1Ev,_ZThn36_N7S3052C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S3052C2D0Ev,_ZThn36_N7S3052C2D0Ev)();
extern void _ZN8S3052C152v6Ev();
extern void _ZN8S3052C142v7Ev();
extern void ABISELECT(_ZThn1344_N7S3052C2D1Ev,_ZThn976_N7S3052C2D1Ev)();
extern void ABISELECT(_ZThn1344_N7S3052C2D0Ev,_ZThn976_N7S3052C2D0Ev)();
extern void _ZN7S3052C62v3Ev();
extern void ABISELECT(_ZThn1440_N7S3052C2D1Ev,_ZThn1060_N7S3052C2D1Ev)();
extern void ABISELECT(_ZThn1440_N7S3052C2D0Ev,_ZThn1060_N7S3052C2D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTv0_n64_N7S3052C2D1Ev,_ZTv0_n32_N7S3052C2D1Ev)();
extern void ABISELECT(_ZThn1060736_N7S3052C2D1Ev,_ZThn785296_N7S3052C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3052C2D0Ev,_ZTv0_n32_N7S3052C2D0Ev)();
extern void ABISELECT(_ZThn1060736_N7S3052C2D0Ev,_ZThn785296_N7S3052C2D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTvn320_n64_N7S3052C2D1Ev,_ZTvn228_n32_N7S3052C2D1Ev)();
extern void ABISELECT(_ZTvn320_n64_N7S3052C2D0Ev,_ZTvn228_n32_N7S3052C2D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C2D1Ev,_ZTv0_n12_N7S3052C2D1Ev)();
extern void ABISELECT(_ZThn1071624_N7S3052C2D1Ev,_ZThn793340_N7S3052C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C2D0Ev,_ZTv0_n12_N7S3052C2D0Ev)();
extern void ABISELECT(_ZThn1071624_N7S3052C2D0Ev,_ZThn793340_N7S3052C2D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
extern void ABISELECT(_ZTv0_n32_N7S3052C2D1Ev,_ZTv0_n16_N7S3052C2D1Ev)();
extern void ABISELECT(_ZThn1071720_N7S3052C2D1Ev,_ZThn793424_N7S3052C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3052C2D0Ev,_ZTv0_n16_N7S3052C2D0Ev)();
extern void ABISELECT(_ZThn1071720_N7S3052C2D0Ev,_ZThn793424_N7S3052C2D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTv0_n40_N7S3052C2D1Ev,_ZTv0_n20_N7S3052C2D1Ev)();
extern void ABISELECT(_ZThn1071824_N7S3052C2D1Ev,_ZThn793484_N7S3052C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3052C2D0Ev,_ZTv0_n20_N7S3052C2D0Ev)();
extern void ABISELECT(_ZThn1071824_N7S3052C2D0Ev,_ZThn793484_N7S3052C2D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTvn104_n40_N7S3052C2D1Ev,_ZTvn60_n20_N7S3052C2D1Ev)();
extern void ABISELECT(_ZTvn104_n40_N7S3052C2D0Ev,_ZTvn60_n20_N7S3052C2D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTvn416_n40_N7S3052C2D1Ev,_ZTvn288_n20_N7S3052C2D1Ev)();
extern void ABISELECT(_ZTvn416_n40_N7S3052C2D0Ev,_ZTvn288_n20_N7S3052C2D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S3052C2D1Ev,_ZTv0_n16_N7S3052C2D1Ev)();
extern void ABISELECT(_ZThn1073360_N7S3052C2D1Ev,_ZThn794612_N7S3052C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3052C2D0Ev,_ZTv0_n16_N7S3052C2D0Ev)();
extern void ABISELECT(_ZThn1073360_N7S3052C2D0Ev,_ZThn794612_N7S3052C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C2D1Ev,_ZTv0_n12_N7S3052C2D1Ev)();
extern void ABISELECT(_ZThn1073392_N7S3052C2D1Ev,_ZThn794636_N7S3052C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C2D0Ev,_ZTv0_n12_N7S3052C2D0Ev)();
extern void ABISELECT(_ZThn1073392_N7S3052C2D0Ev,_ZThn794636_N7S3052C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S3052C2[] = {
  ABISELECT(1073600,794784),
  ABISELECT(1073392,794636),
  ABISELECT(1073360,794612),
  ABISELECT(1071824,793484),
  ABISELECT(1071720,793424),
  ABISELECT(1071624,793340),
  ABISELECT(1060736,785296),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C2[0]),
  (VTBL_ENTRY)&_ZN7S3052C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3052C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3052C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C2D0Ev,
  ABISELECT(1073312,794576),
  ABISELECT(1071672,793388),
  ABISELECT(1071576,793304),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S3052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3052C2D1Ev,_ZThn36_N7S3052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3052C2D0Ev,_ZThn36_N7S3052C2D0Ev),
  (VTBL_ENTRY)&_ZN8S3052C152v6Ev,
  (VTBL_ENTRY)&_ZN8S3052C142v7Ev,
  ABISELECT(-1344,-976),
  (VTBL_ENTRY)&(_ZTI7S3052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1344_N7S3052C2D1Ev,_ZThn976_N7S3052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1344_N7S3052C2D0Ev,_ZThn976_N7S3052C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
  ABISELECT(1070280,792364),
  ABISELECT(1071920,793552),
  ABISELECT(1070184,792280),
  ABISELECT(-1440,-1060),
  (VTBL_ENTRY)&(_ZTI7S3052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1440_N7S3052C2D1Ev,_ZThn1060_N7S3052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1440_N7S3052C2D0Ev,_ZThn1060_N7S3052C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  0,
  0,
  ABISELECT(-1060736,-785296),
  ABISELECT(12656,9340),
  ABISELECT(12624,9316),
  ABISELECT(11088,8188),
  ABISELECT(10984,8128),
  ABISELECT(10888,8044),
  ABISELECT(-1060736,-785296),
  (VTBL_ENTRY)&(_ZTI7S3052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3052C2D1Ev,_ZTv0_n32_N7S3052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3052C2D0Ev,_ZTv0_n32_N7S3052C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  ABISELECT(10568,7816),
  ABISELECT(10664,7900),
  ABISELECT(-1061056,-785524),
  (VTBL_ENTRY)&(_ZTI7S3052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn320_n64_N7S3052C2D1Ev,_ZTvn228_n32_N7S3052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn320_n64_N7S3052C2D0Ev,_ZTvn228_n32_N7S3052C2D0Ev),
  0,
  ABISELECT(-1071624,-793340),
  ABISELECT(-1071624,-793340),
  (VTBL_ENTRY)&(_ZTI7S3052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C2D1Ev,_ZTv0_n12_N7S3052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C2D0Ev,_ZTv0_n12_N7S3052C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
  0,
  0,
  ABISELECT(-1071720,-793424),
  ABISELECT(-96,-84),
  ABISELECT(-1071720,-793424),
  (VTBL_ENTRY)&(_ZTI7S3052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C2D1Ev,_ZTv0_n16_N7S3052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C2D0Ev,_ZTv0_n16_N7S3052C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  0,
  0,
  ABISELECT(-1071824,-793484),
  ABISELECT(1536,1128),
  ABISELECT(-200,-144),
  ABISELECT(-1071824,-793484),
  (VTBL_ENTRY)&(_ZTI7S3052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3052C2D1Ev,_ZTv0_n20_N7S3052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3052C2D0Ev,_ZTv0_n20_N7S3052C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  ABISELECT(-304,-204),
  ABISELECT(-1071928,-793544),
  (VTBL_ENTRY)&(_ZTI7S3052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N7S3052C2D1Ev,_ZTvn60_n20_N7S3052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N7S3052C2D0Ev,_ZTvn60_n20_N7S3052C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  ABISELECT(-1072240,-793772),
  (VTBL_ENTRY)&(_ZTI7S3052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N7S3052C2D1Ev,_ZTvn288_n20_N7S3052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N7S3052C2D0Ev,_ZTvn288_n20_N7S3052C2D0Ev),
  ABISELECT(-1073360,-794612),
  ABISELECT(-1736,-1272),
  ABISELECT(-1073360,-794612),
  (VTBL_ENTRY)&(_ZTI7S3052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C2D1Ev,_ZTv0_n16_N7S3052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C2D0Ev,_ZTv0_n16_N7S3052C2D0Ev),
  ABISELECT(-1073392,-794636),
  ABISELECT(-1073392,-794636),
  (VTBL_ENTRY)&(_ZTI7S3052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C2D1Ev,_ZTv0_n12_N7S3052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C2D0Ev,_ZTv0_n12_N7S3052C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S3052C2[];
extern void _ZN8S3052C14D1Ev();
extern void _ZN8S3052C14D0Ev();
extern void _ZN8S3052C152v6Ev();
extern void _ZN8S3052C142v7Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C14__7S3052C2[] = {
  ABISELECT(1073312,794576),
  ABISELECT(1071672,793388),
  ABISELECT(1071576,793304),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C14[0]),
  (VTBL_ENTRY)&_ZN8S3052C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C14D0Ev,
  (VTBL_ENTRY)&_ZN8S3052C152v6Ev,
  (VTBL_ENTRY)&_ZN8S3052C142v7Ev,
};
extern void _ZN8S3052C15D1Ev();
extern void _ZN8S3052C15D0Ev();
extern void _ZN8S3052C152v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C158S3052C14__7S3052C2[] = {
  ABISELECT(1071672,793388),
  ABISELECT(1071576,793304),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&_ZN8S3052C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C15D0Ev,
  (VTBL_ENTRY)&_ZN8S3052C152v6Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev)();
extern void ABISELECT(_ZThn1071576_N8S3052C15D1Ev,_ZThn793304_N8S3052C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev)();
extern void ABISELECT(_ZThn1071576_N8S3052C15D0Ev,_ZThn793304_N8S3052C15D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__8S3052C158S3052C14__7S3052C2[] = {
  0,
  ABISELECT(-1071576,-793304),
  ABISELECT(-1071576,-793304),
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev)();
extern void ABISELECT(_ZThn1071672_N8S3052C15D1Ev,_ZThn793388_N8S3052C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev)();
extern void ABISELECT(_ZThn1071672_N8S3052C15D0Ev,_ZThn793388_N8S3052C15D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__8S3052C158S3052C14__7S3052C2[] = {
  0,
  0,
  ABISELECT(-1071672,-793388),
  ABISELECT(-96,-84),
  ABISELECT(-1071672,-793388),
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN8S3052C17D1Ev();
extern void _ZN8S3052C17D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C178S3052C14__7S3052C2[] = {
  ABISELECT(1070280,792364),
  ABISELECT(1071920,793552),
  ABISELECT(1070184,792280),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C17[0]),
  (VTBL_ENTRY)&_ZN8S3052C17D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C17D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C5D1Ev();
extern void _ZN7S3052C5D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C58S3052C178S3052C14__A2__7S3052C2[] = {
  ABISELECT(1070184,792280),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&_ZN7S3052C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C77S3052C58S3052C178S3052C14__A4__7S3052C2[] = {
  ABISELECT(1070184,792280),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C77S3052C58S3052C178S3052C14__A5__7S3052C2[] = {
  ABISELECT(1070184,792280),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZThn1070184_N7S3052C8D1Ev,_ZThn792280_N7S3052C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void ABISELECT(_ZThn1070184_N7S3052C8D0Ev,_ZThn792280_N7S3052C8D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C77S3052C58S3052C178S3052C14__A5__7S3052C2[] = {
  0,
  ABISELECT(-1070184,-792280),
  ABISELECT(-1070184,-792280),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZThn1070184_N7S3052C7D1Ev,_ZThn792280_N7S3052C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void ABISELECT(_ZThn1070184_N7S3052C7D0Ev,_ZThn792280_N7S3052C7D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C77S3052C58S3052C178S3052C14__A4__7S3052C2[] = {
  0,
  ABISELECT(-1070184,-792280),
  ABISELECT(-1070184,-792280),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev)();
extern void ABISELECT(_ZThn1070184_N7S3052C5D1Ev,_ZThn792280_N7S3052C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev)();
extern void ABISELECT(_ZThn1070184_N7S3052C5D0Ev,_ZThn792280_N7S3052C5D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C58S3052C178S3052C14__A2__7S3052C2[] = {
  0,
  ABISELECT(-1070184,-792280),
  ABISELECT(-1070184,-792280),
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3052C17D1Ev,_ZTv0_n12_N8S3052C17D1Ev)();
extern void ABISELECT(_ZThn1070184_N8S3052C17D1Ev,_ZThn792280_N8S3052C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3052C17D0Ev,_ZTv0_n12_N8S3052C17D0Ev)();
extern void ABISELECT(_ZThn1070184_N8S3052C17D0Ev,_ZThn792280_N8S3052C17D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__8S3052C178S3052C14__7S3052C2[] = {
  0,
  ABISELECT(-1070184,-792280),
  ABISELECT(-1070184,-792280),
  (VTBL_ENTRY)&(_ZTI8S3052C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C17D1Ev,_ZTv0_n12_N8S3052C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C17D0Ev,_ZTv0_n12_N8S3052C17D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C17D1Ev,_ZTv0_n16_N8S3052C17D1Ev)();
extern void ABISELECT(_ZThn1071920_N8S3052C17D1Ev,_ZThn793552_N8S3052C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C17D0Ev,_ZTv0_n16_N8S3052C17D0Ev)();
extern void ABISELECT(_ZThn1071920_N8S3052C17D0Ev,_ZThn793552_N8S3052C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3052C8__A1__8S3052C178S3052C14__7S3052C2[] = {
  ABISELECT(-1071920,-793552),
  ABISELECT(-1736,-1272),
  ABISELECT(-1071920,-793552),
  (VTBL_ENTRY)&(_ZTI8S3052C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C17D1Ev,_ZTv0_n16_N8S3052C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C17D0Ev,_ZTv0_n16_N8S3052C17D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3052C17D1Ev,_ZTv0_n16_N8S3052C17D1Ev)();
extern void ABISELECT(_ZThn1070280_N8S3052C17D1Ev,_ZThn792364_N8S3052C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C17D0Ev,_ZTv0_n16_N8S3052C17D0Ev)();
extern void ABISELECT(_ZThn1070280_N8S3052C17D0Ev,_ZThn792364_N8S3052C17D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__A1__8S3052C178S3052C14__7S3052C2[] = {
  0,
  0,
  ABISELECT(-1070280,-792364),
  ABISELECT(-96,-84),
  ABISELECT(-1070280,-792364),
  (VTBL_ENTRY)&(_ZTI8S3052C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C17D1Ev,_ZTv0_n16_N8S3052C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C17D0Ev,_ZTv0_n16_N8S3052C17D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3052C14D1Ev,_ZTv0_n12_N8S3052C14D1Ev)();
extern void ABISELECT(_ZThn1071576_N8S3052C14D1Ev,_ZThn793304_N8S3052C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3052C14D0Ev,_ZTv0_n12_N8S3052C14D0Ev)();
extern void ABISELECT(_ZThn1071576_N8S3052C14D0Ev,_ZThn793304_N8S3052C14D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__8S3052C14__7S3052C2[] = {
  0,
  ABISELECT(-1071576,-793304),
  ABISELECT(-1071576,-793304),
  (VTBL_ENTRY)&(_ZTI8S3052C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C14D1Ev,_ZTv0_n12_N8S3052C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C14D0Ev,_ZTv0_n12_N8S3052C14D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C14D1Ev,_ZTv0_n16_N8S3052C14D1Ev)();
extern void ABISELECT(_ZThn1071672_N8S3052C14D1Ev,_ZThn793388_N8S3052C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C14D0Ev,_ZTv0_n16_N8S3052C14D0Ev)();
extern void ABISELECT(_ZThn1071672_N8S3052C14D0Ev,_ZThn793388_N8S3052C14D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__8S3052C14__7S3052C2[] = {
  0,
  0,
  ABISELECT(-1071672,-793388),
  ABISELECT(-96,-84),
  ABISELECT(-1071672,-793388),
  (VTBL_ENTRY)&(_ZTI8S3052C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C14D1Ev,_ZTv0_n16_N8S3052C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C14D0Ev,_ZTv0_n16_N8S3052C14D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C14D1Ev,_ZTv0_n16_N8S3052C14D1Ev)();
extern void ABISELECT(_ZThn1073312_N8S3052C14D1Ev,_ZThn794576_N8S3052C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C14D0Ev,_ZTv0_n16_N8S3052C14D0Ev)();
extern void ABISELECT(_ZThn1073312_N8S3052C14D0Ev,_ZThn794576_N8S3052C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3052C8__A1__8S3052C14__7S3052C2[] = {
  ABISELECT(-1073312,-794576),
  ABISELECT(-1736,-1272),
  ABISELECT(-1073312,-794576),
  (VTBL_ENTRY)&(_ZTI8S3052C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C14D1Ev,_ZTv0_n16_N8S3052C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C14D0Ev,_ZTv0_n16_N8S3052C14D0Ev),
};
extern void ABISELECT(_ZThn1392_N8S3052C14D1Ev,_ZThn1024_N8S3052C14D1Ev)();
extern void ABISELECT(_ZThn1392_N8S3052C14D0Ev,_ZThn1024_N8S3052C14D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C17__8S3052C14__7S3052C2[] = {
  ABISELECT(1070280,792364),
  ABISELECT(1071920,793552),
  ABISELECT(1070184,792280),
  ABISELECT(-1392,-1024),
  (VTBL_ENTRY)&(_ZTI8S3052C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N8S3052C14D1Ev,_ZThn1024_N8S3052C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N8S3052C14D0Ev,_ZThn1024_N8S3052C14D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C4D1Ev();
extern void _ZN7S3052C4D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C4__7S3052C2[] = {
  ABISELECT(12656,9340),
  ABISELECT(12624,9316),
  ABISELECT(11088,8188),
  ABISELECT(10984,8128),
  ABISELECT(10888,8044),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&_ZN7S3052C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C5D1Ev();
extern void _ZN7S3052C5D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C57S3052C4__7S3052C2[] = {
  ABISELECT(10888,8044),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&_ZN7S3052C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C77S3052C57S3052C4__7S3052C2[] = {
  ABISELECT(10888,8044),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C77S3052C57S3052C4__7S3052C2[] = {
  ABISELECT(10888,8044),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZThn10888_N7S3052C8D1Ev,_ZThn8044_N7S3052C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void ABISELECT(_ZThn10888_N7S3052C8D0Ev,_ZThn8044_N7S3052C8D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C77S3052C57S3052C4__7S3052C2[] = {
  0,
  ABISELECT(-10888,-8044),
  ABISELECT(-10888,-8044),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZThn10888_N7S3052C7D1Ev,_ZThn8044_N7S3052C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void ABISELECT(_ZThn10888_N7S3052C7D0Ev,_ZThn8044_N7S3052C7D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C77S3052C57S3052C4__7S3052C2[] = {
  0,
  ABISELECT(-10888,-8044),
  ABISELECT(-10888,-8044),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev)();
extern void ABISELECT(_ZThn10888_N7S3052C5D1Ev,_ZThn8044_N7S3052C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev)();
extern void ABISELECT(_ZThn10888_N7S3052C5D0Ev,_ZThn8044_N7S3052C5D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C57S3052C4__7S3052C2[] = {
  0,
  ABISELECT(-10888,-8044),
  ABISELECT(-10888,-8044),
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN7S3052C9D1Ev();
extern void _ZN7S3052C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C97S3052C4__7S3052C2[] = {
  ABISELECT(10568,7816),
  ABISELECT(10664,7900),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C9[0]),
  (VTBL_ENTRY)&_ZN7S3052C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C9D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S3052C9D1Ev,_ZTv0_n16_N7S3052C9D1Ev)();
extern void ABISELECT(_ZThn10664_N7S3052C9D1Ev,_ZThn7900_N7S3052C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3052C9D0Ev,_ZTv0_n16_N7S3052C9D0Ev)();
extern void ABISELECT(_ZThn10664_N7S3052C9D0Ev,_ZThn7900_N7S3052C9D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__7S3052C97S3052C4__7S3052C2[] = {
  0,
  0,
  ABISELECT(-10664,-7900),
  ABISELECT(-96,-84),
  ABISELECT(-10664,-7900),
  (VTBL_ENTRY)&(_ZTI7S3052C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C9D1Ev,_ZTv0_n16_N7S3052C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C9D0Ev,_ZTv0_n16_N7S3052C9D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C9D1Ev,_ZTv0_n12_N7S3052C9D1Ev)();
extern void ABISELECT(_ZThn10568_N7S3052C9D1Ev,_ZThn7816_N7S3052C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C9D0Ev,_ZTv0_n12_N7S3052C9D0Ev)();
extern void ABISELECT(_ZThn10568_N7S3052C9D0Ev,_ZThn7816_N7S3052C9D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C97S3052C4__7S3052C2[] = {
  0,
  ABISELECT(-10568,-7816),
  ABISELECT(-10568,-7816),
  (VTBL_ENTRY)&(_ZTI7S3052C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C9D1Ev,_ZTv0_n12_N7S3052C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C9D0Ev,_ZTv0_n12_N7S3052C9D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C4D1Ev,_ZTv0_n12_N7S3052C4D1Ev)();
extern void ABISELECT(_ZThn10888_N7S3052C4D1Ev,_ZThn8044_N7S3052C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C4D0Ev,_ZTv0_n12_N7S3052C4D0Ev)();
extern void ABISELECT(_ZThn10888_N7S3052C4D0Ev,_ZThn8044_N7S3052C4D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C4__7S3052C2[] = {
  0,
  ABISELECT(-10888,-8044),
  ABISELECT(-10888,-8044),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C4D1Ev,_ZTv0_n12_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C4D0Ev,_ZTv0_n12_N7S3052C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S3052C4D1Ev,_ZTv0_n16_N7S3052C4D1Ev)();
extern void ABISELECT(_ZThn10984_N7S3052C4D1Ev,_ZThn8128_N7S3052C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3052C4D0Ev,_ZTv0_n16_N7S3052C4D0Ev)();
extern void ABISELECT(_ZThn10984_N7S3052C4D0Ev,_ZThn8128_N7S3052C4D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__A1__7S3052C4__7S3052C2[] = {
  0,
  0,
  ABISELECT(-10984,-8128),
  ABISELECT(-96,-84),
  ABISELECT(-10984,-8128),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C4D1Ev,_ZTv0_n16_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C4D0Ev,_ZTv0_n16_N7S3052C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZThn320_N7S3052C4D1Ev,_ZThn228_N7S3052C4D1Ev)();
extern void ABISELECT(_ZThn320_N7S3052C4D0Ev,_ZThn228_N7S3052C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3052C9__7S3052C4__7S3052C2[] = {
  ABISELECT(10568,7816),
  ABISELECT(10664,7900),
  ABISELECT(-320,-228),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N7S3052C4D1Ev,_ZThn228_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N7S3052C4D0Ev,_ZThn228_N7S3052C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S3052C4D1Ev,_ZTv0_n20_N7S3052C4D1Ev)();
extern void ABISELECT(_ZThn11088_N7S3052C4D1Ev,_ZThn8188_N7S3052C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3052C4D0Ev,_ZTv0_n20_N7S3052C4D0Ev)();
extern void ABISELECT(_ZThn11088_N7S3052C4D0Ev,_ZThn8188_N7S3052C4D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C11__7S3052C4__7S3052C2[] = {
  0,
  0,
  ABISELECT(-11088,-8188),
  ABISELECT(1536,1128),
  ABISELECT(-200,-144),
  ABISELECT(-11088,-8188),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3052C4D1Ev,_ZTv0_n20_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3052C4D0Ev,_ZTv0_n20_N7S3052C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTvn104_n40_N7S3052C4D1Ev,_ZTvn60_n20_N7S3052C4D1Ev)();
extern void ABISELECT(_ZTvn104_n40_N7S3052C4D0Ev,_ZTvn60_n20_N7S3052C4D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C58S3052C11__A1__7S3052C4__7S3052C2[] = {
  ABISELECT(-304,-204),
  ABISELECT(-11192,-8248),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N7S3052C4D1Ev,_ZTvn60_n20_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N7S3052C4D0Ev,_ZTvn60_n20_N7S3052C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTvn416_n40_N7S3052C4D1Ev,_ZTvn288_n20_N7S3052C4D1Ev)();
extern void ABISELECT(_ZTvn416_n40_N7S3052C4D0Ev,_ZTvn288_n20_N7S3052C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3052C128S3052C11__7S3052C4__7S3052C2[] = {
  ABISELECT(-11504,-8476),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N7S3052C4D1Ev,_ZTvn288_n20_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N7S3052C4D0Ev,_ZTvn288_n20_N7S3052C4D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3052C4D1Ev,_ZTv0_n16_N7S3052C4D1Ev)();
extern void ABISELECT(_ZThn12624_N7S3052C4D1Ev,_ZThn9316_N7S3052C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3052C4D0Ev,_ZTv0_n16_N7S3052C4D0Ev)();
extern void ABISELECT(_ZThn12624_N7S3052C4D0Ev,_ZThn9316_N7S3052C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3052C8__A4__7S3052C4__7S3052C2[] = {
  ABISELECT(-12624,-9316),
  ABISELECT(-1736,-1272),
  ABISELECT(-12624,-9316),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C4D1Ev,_ZTv0_n16_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C4D0Ev,_ZTv0_n16_N7S3052C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3052C4D1Ev,_ZTv0_n12_N7S3052C4D1Ev)();
extern void ABISELECT(_ZThn12656_N7S3052C4D1Ev,_ZThn9340_N7S3052C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C4D0Ev,_ZTv0_n12_N7S3052C4D0Ev)();
extern void ABISELECT(_ZThn12656_N7S3052C4D0Ev,_ZThn9340_N7S3052C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3052C12__A1__7S3052C4__7S3052C2[] = {
  ABISELECT(-12656,-9340),
  ABISELECT(-12656,-9340),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C4D1Ev,_ZTv0_n12_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C4D0Ev,_ZTv0_n12_N7S3052C4D0Ev),
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__A1__7S3052C2[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C7__A1__7S3052C2[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C7__A1__7S3052C2[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C7__A1__7S3052C2[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN8S3052C11D1Ev();
extern void _ZN8S3052C11D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C11__7S3052C2[] = {
  ABISELECT(1536,1128),
  ABISELECT(-200,-144),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C11[0]),
  (VTBL_ENTRY)&_ZN8S3052C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C11D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C78S3052C11__A2__7S3052C2[] = {
  ABISELECT(-200,-144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C78S3052C11__A2__7S3052C2[] = {
  ABISELECT(-200,-144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C78S3052C11__A2__7S3052C2[] = {
  0,
  ABISELECT(200,144),
  ABISELECT(200,144),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C78S3052C11__A2__7S3052C2[] = {
  0,
  ABISELECT(200,144),
  ABISELECT(200,144),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN7S3052C5D1Ev();
extern void _ZN7S3052C5D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C58S3052C11__A1__7S3052C2[] = {
  ABISELECT(-304,-204),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&_ZN7S3052C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C77S3052C58S3052C11__A3__7S3052C2[] = {
  ABISELECT(-304,-204),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C77S3052C58S3052C11__A3__7S3052C2[] = {
  ABISELECT(-304,-204),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C77S3052C58S3052C11__A3__7S3052C2[] = {
  0,
  ABISELECT(304,204),
  ABISELECT(304,204),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C77S3052C58S3052C11__A3__7S3052C2[] = {
  0,
  ABISELECT(304,204),
  ABISELECT(304,204),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C58S3052C11__A1__7S3052C2[] = {
  0,
  ABISELECT(304,204),
  ABISELECT(304,204),
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3052C11D1Ev,_ZTv0_n12_N8S3052C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3052C11D0Ev,_ZTv0_n12_N8S3052C11D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__8S3052C11__7S3052C2[] = {
  0,
  ABISELECT(200,144),
  ABISELECT(200,144),
  (VTBL_ENTRY)&(_ZTI8S3052C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C11D1Ev,_ZTv0_n12_N8S3052C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C11D0Ev,_ZTv0_n12_N8S3052C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZThn104_N8S3052C11D1Ev,_ZThn60_N8S3052C11D1Ev)();
extern void ABISELECT(_ZThn104_N8S3052C11D0Ev,_ZThn60_N8S3052C11D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C5__8S3052C11__7S3052C2[] = {
  ABISELECT(-304,-204),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S3052C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N8S3052C11D1Ev,_ZThn60_N8S3052C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N8S3052C11D0Ev,_ZThn60_N8S3052C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C11D1Ev,_ZTv0_n16_N8S3052C11D1Ev)();
extern void ABISELECT(_ZThn1536_N8S3052C11D1Ev,_ZThn1128_N8S3052C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C11D0Ev,_ZTv0_n16_N8S3052C11D0Ev)();
extern void ABISELECT(_ZThn1536_N8S3052C11D0Ev,_ZThn1128_N8S3052C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3052C8__A2__8S3052C11__7S3052C2[] = {
  ABISELECT(-1536,-1128),
  ABISELECT(-1736,-1272),
  ABISELECT(-1536,-1128),
  (VTBL_ENTRY)&(_ZTI8S3052C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C11D1Ev,_ZTv0_n16_N8S3052C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C11D0Ev,_ZTv0_n16_N8S3052C11D0Ev),
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C8__A4__7S3052C2[] = {
  ABISELECT(-1736,-1272),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C8__A4__7S3052C2[] = {
  0,
  ABISELECT(1736,1272),
  ABISELECT(1736,1272),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
static  VTT_ENTRY vtt_S3052C2[] = {
  {&(_ZTV7S3052C2[9]),  9,106},
  {&(_tg__ZTV8S3052C14__7S3052C2[5]),  5,9},
  {&(_tg__ZTV8S3052C158S3052C14__7S3052C2[4]),  4,7},
  {&(_tg__ZTV7S3052C6__8S3052C158S3052C14__7S3052C2[4]),  4,7},
  {&(_tg__ZTV7S3052C7__8S3052C158S3052C14__7S3052C2[6]),  6,10},
  {&(_tg__ZTV8S3052C178S3052C14__7S3052C2[5]),  5,9},
  {&(_tg__ZTV7S3052C58S3052C178S3052C14__A2__7S3052C2[3]),  3,7},
  {&(_tg__ZTV7S3052C77S3052C58S3052C178S3052C14__A4__7S3052C2[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C77S3052C58S3052C178S3052C14__A5__7S3052C2[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C77S3052C58S3052C178S3052C14__A5__7S3052C2[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C77S3052C58S3052C178S3052C14__A4__7S3052C2[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C58S3052C178S3052C14__A2__7S3052C2[4]),  4,7},
  {&(_tg__ZTV7S3052C6__8S3052C178S3052C14__7S3052C2[4]),  4,7},
  {&(_tg__ZTV7S3052C8__A1__8S3052C178S3052C14__7S3052C2[4]),  4,6},
  {&(_tg__ZTV7S3052C7__A1__8S3052C178S3052C14__7S3052C2[6]),  6,10},
  {&(_tg__ZTV7S3052C6__8S3052C14__7S3052C2[4]),  4,7},
  {&(_tg__ZTV7S3052C7__8S3052C14__7S3052C2[6]),  6,10},
  {&(_tg__ZTV7S3052C8__A1__8S3052C14__7S3052C2[4]),  4,6},
  {&(_tg__ZTV8S3052C17__8S3052C14__7S3052C2[5]),  5,9},
  {&(_ZTV7S3052C2[46]),  46,106},
  {&(_ZTV7S3052C2[60]),  60,106},
  {&(_ZTV7S3052C2[69]),  69,106},
  {&(_ZTV7S3052C2[54]),  54,106},
  {&(_ZTV7S3052C2[80]),  80,106},
  {&(_ZTV7S3052C2[87]),  87,106},
  {&(_ZTV7S3052C2[93]),  93,106},
  {&(_ZTV7S3052C2[99]),  99,106},
  {&(_ZTV7S3052C2[104]),  104,106},
  {&(_ZTV7S3052C2[18]),  18,106},
  {&(_ZTV7S3052C2[32]),  32,106},
  {&(_tg__ZTV7S3052C4__7S3052C2[7]),  7,11},
  {&(_tg__ZTV7S3052C57S3052C4__7S3052C2[3]),  3,7},
  {&(_tg__ZTV7S3052C77S3052C57S3052C4__7S3052C2[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C77S3052C57S3052C4__7S3052C2[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C77S3052C57S3052C4__7S3052C2[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C77S3052C57S3052C4__7S3052C2[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C57S3052C4__7S3052C2[4]),  4,7},
  {&(_tg__ZTV7S3052C97S3052C4__7S3052C2[4]),  4,6},
  {&(_tg__ZTV7S3052C7__7S3052C97S3052C4__7S3052C2[6]),  6,10},
  {&(_tg__ZTV7S3052C6__7S3052C97S3052C4__7S3052C2[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C4__7S3052C2[4]),  4,7},
  {&(_tg__ZTV7S3052C7__A1__7S3052C4__7S3052C2[6]),  6,10},
  {&(_tg__ZTV7S3052C9__7S3052C4__7S3052C2[4]),  4,6},
  {&(_tg__ZTV8S3052C11__7S3052C4__7S3052C2[7]),  7,11},
  {&(_tg__ZTV7S3052C58S3052C11__A1__7S3052C4__7S3052C2[3]),  3,7},
  {&(_tg__ZTV8S3052C128S3052C11__7S3052C4__7S3052C2[2]),  2,4},
  {&(_tg__ZTV7S3052C8__A4__7S3052C4__7S3052C2[4]),  4,6},
  {&(_tg__ZTV8S3052C12__A1__7S3052C4__7S3052C2[3]),  3,5},
  {&(_tg__ZTV7S3052C7__A1__7S3052C2[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C7__A1__7S3052C2[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C7__A1__7S3052C2[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C7__A1__7S3052C2[4]),  4,7},
  {&(_tg__ZTV8S3052C11__7S3052C2[4]),  4,8},
  {&(_tg__ZTV7S3052C78S3052C11__A2__7S3052C2[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C78S3052C11__A2__7S3052C2[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C78S3052C11__A2__7S3052C2[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C78S3052C11__A2__7S3052C2[4]),  4,7},
  {&(_tg__ZTV7S3052C58S3052C11__A1__7S3052C2[3]),  3,7},
  {&(_tg__ZTV7S3052C77S3052C58S3052C11__A3__7S3052C2[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C77S3052C58S3052C11__A3__7S3052C2[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C77S3052C58S3052C11__A3__7S3052C2[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C77S3052C58S3052C11__A3__7S3052C2[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C58S3052C11__A1__7S3052C2[4]),  4,7},
  {&(_tg__ZTV7S3052C6__8S3052C11__7S3052C2[4]),  4,7},
  {&(_tg__ZTV7S3052C5__8S3052C11__7S3052C2[3]),  3,7},
  {&(_tg__ZTV7S3052C8__A2__8S3052C11__7S3052C2[4]),  4,6},
  {&(_tg__ZTV7S3052C8__A4__7S3052C2[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C8__A4__7S3052C2[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S3052C2[];
extern  VTBL_ENTRY _ZTV7S3052C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C2[];
static VTBL_ENTRY alt_thunk_names15[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C11D0Ev,_ZTv0_n16_N8S3052C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S3052C11D0Ev,_ZThn1128_N8S3052C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C11D1Ev,_ZTv0_n16_N8S3052C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S3052C11D1Ev,_ZThn1128_N8S3052C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3052C4D0Ev,_ZTv0_n20_N7S3052C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11088_N7S3052C4D0Ev,_ZThn8188_N7S3052C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3052C4D1Ev,_ZTv0_n20_N7S3052C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11088_N7S3052C4D1Ev,_ZThn8188_N7S3052C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3052C4D0Ev,_ZTv0_n16_N7S3052C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12624_N7S3052C4D0Ev,_ZThn9316_N7S3052C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10984_N7S3052C4D0Ev,_ZThn8128_N7S3052C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3052C4D1Ev,_ZTv0_n16_N7S3052C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12624_N7S3052C4D1Ev,_ZThn9316_N7S3052C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10984_N7S3052C4D1Ev,_ZThn8128_N7S3052C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C4D0Ev,_ZTv0_n12_N7S3052C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12656_N7S3052C4D0Ev,_ZThn9340_N7S3052C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N7S3052C4D0Ev,_ZThn8044_N7S3052C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C4D1Ev,_ZTv0_n12_N7S3052C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12656_N7S3052C4D1Ev,_ZThn9340_N7S3052C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N7S3052C4D1Ev,_ZThn8044_N7S3052C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C9D0Ev,_ZTv0_n12_N7S3052C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10568_N7S3052C9D0Ev,_ZThn7816_N7S3052C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C9D1Ev,_ZTv0_n12_N7S3052C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10568_N7S3052C9D1Ev,_ZThn7816_N7S3052C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3052C9D0Ev,_ZTv0_n16_N7S3052C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10664_N7S3052C9D0Ev,_ZThn7900_N7S3052C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3052C9D1Ev,_ZTv0_n16_N7S3052C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10664_N7S3052C9D1Ev,_ZThn7900_N7S3052C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C14D0Ev,_ZTv0_n16_N8S3052C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1073312_N8S3052C14D0Ev,_ZThn794576_N8S3052C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1071672_N8S3052C14D0Ev,_ZThn793388_N8S3052C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C14D1Ev,_ZTv0_n16_N8S3052C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1073312_N8S3052C14D1Ev,_ZThn794576_N8S3052C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1071672_N8S3052C14D1Ev,_ZThn793388_N8S3052C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C14D0Ev,_ZTv0_n12_N8S3052C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1071576_N8S3052C14D0Ev,_ZThn793304_N8S3052C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C14D1Ev,_ZTv0_n12_N8S3052C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1071576_N8S3052C14D1Ev,_ZThn793304_N8S3052C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C17D0Ev,_ZTv0_n16_N8S3052C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1070280_N8S3052C17D0Ev,_ZThn792364_N8S3052C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1071920_N8S3052C17D0Ev,_ZThn793552_N8S3052C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C17D1Ev,_ZTv0_n16_N8S3052C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1070280_N8S3052C17D1Ev,_ZThn792364_N8S3052C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1071920_N8S3052C17D1Ev,_ZThn793552_N8S3052C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C17D0Ev,_ZTv0_n12_N8S3052C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1070184_N8S3052C17D0Ev,_ZThn792280_N8S3052C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C17D1Ev,_ZTv0_n12_N8S3052C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1070184_N8S3052C17D1Ev,_ZThn792280_N8S3052C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N7S3052C5D0Ev,_ZThn8044_N7S3052C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1070184_N7S3052C5D0Ev,_ZThn792280_N7S3052C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N7S3052C5D1Ev,_ZThn8044_N7S3052C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1070184_N7S3052C5D1Ev,_ZThn792280_N7S3052C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N7S3052C7D0Ev,_ZThn8044_N7S3052C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1070184_N7S3052C7D0Ev,_ZThn792280_N7S3052C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N7S3052C7D1Ev,_ZThn8044_N7S3052C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1070184_N7S3052C7D1Ev,_ZThn792280_N7S3052C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N7S3052C8D0Ev,_ZThn8044_N7S3052C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1070184_N7S3052C8D0Ev,_ZThn792280_N7S3052C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N7S3052C8D1Ev,_ZThn8044_N7S3052C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1070184_N7S3052C8D1Ev,_ZThn792280_N7S3052C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1071672_N8S3052C15D0Ev,_ZThn793388_N8S3052C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1071672_N8S3052C15D1Ev,_ZThn793388_N8S3052C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1071576_N8S3052C15D0Ev,_ZThn793304_N8S3052C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1071576_N8S3052C15D1Ev,_ZThn793304_N8S3052C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3052C2D0Ev,_ZTv0_n20_N7S3052C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1071824_N7S3052C2D0Ev,_ZThn793484_N7S3052C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3052C2D1Ev,_ZTv0_n20_N7S3052C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1071824_N7S3052C2D1Ev,_ZThn793484_N7S3052C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3052C2D0Ev,_ZTv0_n16_N7S3052C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1073360_N7S3052C2D0Ev,_ZThn794612_N7S3052C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1071720_N7S3052C2D0Ev,_ZThn793424_N7S3052C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3052C2D1Ev,_ZTv0_n16_N7S3052C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1073360_N7S3052C2D1Ev,_ZThn794612_N7S3052C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1071720_N7S3052C2D1Ev,_ZThn793424_N7S3052C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C2D0Ev,_ZTv0_n12_N7S3052C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1073392_N7S3052C2D0Ev,_ZThn794636_N7S3052C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1071624_N7S3052C2D0Ev,_ZThn793340_N7S3052C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C2D1Ev,_ZTv0_n12_N7S3052C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1073392_N7S3052C2D1Ev,_ZThn794636_N7S3052C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1071624_N7S3052C2D1Ev,_ZThn793340_N7S3052C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3052C2D0Ev,_ZTv0_n32_N7S3052C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1060736_N7S3052C2D0Ev,_ZThn785296_N7S3052C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3052C2D1Ev,_ZTv0_n32_N7S3052C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1060736_N7S3052C2D1Ev,_ZThn785296_N7S3052C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3052C2 = {  "S3052C2", // class name
  bases_S3052C2, 28,
  &(vtc_S3052C2[0]), // expected_vtbl_contents
  &(vtt_S3052C2[0]), // expected_vtt_contents
  ABISELECT(1073648,794808), // object size
  NSPAIRA(_ZTI7S3052C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3052C2),106, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3052C2),68, //virtual table table var
  26, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names15,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3052C1  : S3052C2 , S3052C10 , S3052C3 , virtual S3052C15 {
  int s3052c1f0;
  long double s3052c1f1;
  int s3052c1f2[6];
  char s3052c1f3[4];
  int s3052c1f4;
  virtual  ~S3052C1(); // _ZN7S3052C1D2Ev
  virtual void  v1(); // _ZN7S3052C12v1Ev
  S3052C1(); // tgen
};
//SIG(1 S3052C1) C1{ BC2{ BC3{ v2 Fi:0 Fi[7] Fp} VBC4{ BC5{ VBC6{ vd v3 Fs[6] FL[8] Fi} BC7{ VBC6 BC8{ VBC6 FL Fp FL:54} v4 v5 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC6 Fp[3] FL[5] Fi} VBC7 BC9{ BC10{ m Fp Fi FL Fp Fi} VBC7 Fp Fc[4] Fi:11 Fp[2] Fi[6] FC11{ VBC6 BC7 BC5 BC12{ vd m FC7} VBC8 Fp Fl FC5 FC12 FC8 Fi[2] FU13{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} VBC11 VBC12 vd FC12[2] Fi FD FD Fc:0 Fp} BC14{ BC15{ BC12 VBC6 VBC7 v6 FC7[2] FD FC12 Fp[3] FC5 Fi FU16{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi} VBC8 BC6 BC17{ VBC6 BC5 VBC8 VBC7 vd Fp Fp[5] Fp} v7 FC6[9] Fc Fi Fi Fi Fc} VBC10 v8 FU18{ m Fs Fp[9] Fc Fi[5] FL Fp Fp Fi FD Fi[4] Fi:32 Fi FD} FU13 FC19{ m FC20{ VBC6 VBC21{ VBC7 VBC9 BC15 v9 Fp FC22{} FC6 FL FU13 FL[6] FL FC5} BC14 vd FC11 FU13 Fi Fc} FC21[4] Fc[10] Fi Fp Fi Fi[10] Fp Fi Fi:22 Fp Fp FC23{ VBC24{ VBC5 Fp[6]} VBC21 VBC4 BC3 BC6 v10 Fi Fp Fi FC9[2] FC8 FD Fi[3] FU13 FL Fi[2] Fi FU13 Fp}[10]} FC25{ BC7 BC15 BC19 BC8 v11 FU13 Fi Fp Fc[7] Fp Fi FC22 Fi FD} Fi Fc Fi} BC10 BC3 VBC15 vd v1 Fi FD Fi[6] Fc[4] Fi}


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

static void Test_S3052C1()
{
  extern Class_Descriptor cd_S3052C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(67194,198965)];
    init_test(&cd_S3052C1, buf);
    S3052C1 *dp, &lv = *(dp=new (buf) S3052C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1075088,795856), "sizeof(S3052C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S3052C1)");
    check_base_class_offset(lv, (S3052C3*)(S3052C2*), 0, "S3052C1");
    /*is_ambiguous_... S3052C4::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C5*)(S3052C4*), ABISELECT(1071768,793448), "S3052C1");
    /*is_ambiguous_... S3052C4::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C7*)(S3052C5*)(S3052C4*), ABISELECT(1071768,793448), "S3052C1");
    /*is_ambiguous_... S3052C4::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*)(S3052C5*)(S3052C4*), ABISELECT(1071768,793448), "S3052C1");
    /*is_ambiguous_... S3052C1::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C7*), ABISELECT(1071768,793448), "S3052C1");
    /*is_ambiguous_... S3052C1::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*), ABISELECT(1071768,793448), "S3052C1");
    check_base_class_offset(lv, (S3052C6*)(S3052C11*), ABISELECT(1071768,793448), "S3052C1");
    /*is_ambiguous_... S3052C11::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C7*)(S3052C11*), ABISELECT(1071768,793448), "S3052C1");
    /*is_ambiguous_... S3052C11::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*)(S3052C11*), ABISELECT(1071768,793448), "S3052C1");
    check_base_class_offset(lv, (S3052C6*)(S3052C5*)(S3052C11*), ABISELECT(1071768,793448), "S3052C1");
    check_base_class_offset(lv, (S3052C6*)(S3052C7*)(S3052C5*)(S3052C11*), ABISELECT(1071768,793448), "S3052C1");
    check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*)(S3052C5*)(S3052C11*), ABISELECT(1071768,793448), "S3052C1");
    /*is_ambiguous_... S3052C1::S3052C8 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C8*), ABISELECT(1071768,793448), "S3052C1");
    check_base_class_offset(lv, (S3052C6*)(S3052C15*)(S3052C14*)(S3052C2*), ABISELECT(1071768,793448), "S3052C1");
    check_base_class_offset(lv, (S3052C6*)(S3052C17*)(S3052C14*)(S3052C2*), ABISELECT(1071768,793448), "S3052C1");
    check_base_class_offset(lv, (S3052C6*)(S3052C5*)(S3052C17*)(S3052C14*)(S3052C2*), ABISELECT(1071768,793448), "S3052C1");
    check_base_class_offset(lv, (S3052C6*)(S3052C7*)(S3052C5*)(S3052C17*)(S3052C14*)(S3052C2*), ABISELECT(1071768,793448), "S3052C1");
    check_base_class_offset(lv, (S3052C6*)(S3052C8*)(S3052C7*)(S3052C5*)(S3052C17*)(S3052C14*)(S3052C2*), ABISELECT(1071768,793448), "S3052C1");
    /*is_ambiguous_... S3052C1::S3052C15 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C15*), ABISELECT(1071768,793448), "S3052C1");
    /*is_ambiguous_... S3052C4::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C7*)(S3052C5*)(S3052C4*), ABISELECT(1060880,785404), "S3052C1");
    /*is_ambiguous_... S3052C4::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C7*)(S3052C5*)(S3052C4*), ABISELECT(1060880,785404), "S3052C1");
    /*is_ambiguous_... S3052C4::S3052C5 */ AMB_check_base_class_offset(lv, (S3052C5*)(S3052C4*), ABISELECT(1060880,785404), "S3052C1");
    /*is_ambiguous_... S3052C1::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C7*), ABISELECT(1071864,793532), "S3052C1");
    /*is_ambiguous_... S3052C4::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C7*)(S3052C4*), ABISELECT(1071864,793532), "S3052C1");
    check_base_class_offset(lv, (S3052C7*)(S3052C9*)(S3052C4*), ABISELECT(1071864,793532), "S3052C1");
    check_base_class_offset(lv, (S3052C7*)(S3052C15*)(S3052C14*)(S3052C2*), ABISELECT(1071864,793532), "S3052C1");
    /*is_ambiguous_... S3052C17::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C7*)(S3052C17*)(S3052C14*)(S3052C2*), ABISELECT(1071864,793532), "S3052C1");
    /*is_ambiguous_... S3052C1::S3052C15 */ AMB_check_base_class_offset(lv, (S3052C7*)(S3052C15*), ABISELECT(1071864,793532), "S3052C1");
    check_base_class_offset(lv, (S3052C10*)(S3052C9*)(S3052C4*), ABISELECT(1061208,785636), "S3052C1");
    check_base_class_offset(lv, (S3052C9*)(S3052C4*), ABISELECT(1061200,785632), "S3052C1");
    /*is_ambiguous_... S3052C11::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C7*)(S3052C11*), ABISELECT(1071968,793592), "S3052C1");
    /*is_ambiguous_... S3052C11::S3052C7 */ AMB_check_base_class_offset(lv, (S3052C7*)(S3052C11*), ABISELECT(1071968,793592), "S3052C1");
    check_base_class_offset(lv, (S3052C8*)(S3052C7*)(S3052C5*)(S3052C11*), ABISELECT(1072072,793652), "S3052C1");
    check_base_class_offset(lv, (S3052C7*)(S3052C5*)(S3052C11*), ABISELECT(1072072,793652), "S3052C1");
    check_base_class_offset(lv, (S3052C5*)(S3052C11*), ABISELECT(1072072,793652), "S3052C1");
    check_base_class_offset(lv, (S3052C12*)(S3052C11*), ABISELECT(1072384,793880), "S3052C1");
    /*is_ambiguous_... S3052C11::S3052C8 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C11*), ABISELECT(1073504,794720), "S3052C1");
    /*is_ambiguous_... S3052C14::S3052C8 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C14*)(S3052C2*), ABISELECT(1073504,794720), "S3052C1");
    /*is_ambiguous_... S3052C17::S3052C8 */ AMB_check_base_class_offset(lv, (S3052C8*)(S3052C17*)(S3052C14*)(S3052C2*), ABISELECT(1073504,794720), "S3052C1");
    check_base_class_offset(lv, (S3052C11*)(S3052C4*), ABISELECT(1071968,793592), "S3052C1");
    /*is_ambiguous_... S3052C4::S3052C12 */ AMB_check_base_class_offset(lv, (S3052C12*)(S3052C4*), ABISELECT(1073536,794744), "S3052C1");
    check_base_class_offset(lv, (S3052C4*)(S3052C2*), ABISELECT(1060880,785404), "S3052C1");
    check_base_class_offset(lv, (S3052C12*)(S3052C15*)(S3052C14*)(S3052C2*), ABISELECT(48,36), "S3052C1");
    check_base_class_offset(lv, (S3052C15*)(S3052C14*)(S3052C2*), ABISELECT(48,36), "S3052C1");
    /*is_ambiguous_... S3052C14::S3052C6 */ AMB_check_base_class_offset(lv, (S3052C6*)(S3052C14*)(S3052C2*), ABISELECT(1344,976), "S3052C1");
    check_base_class_offset(lv, (S3052C8*)(S3052C7*)(S3052C5*)(S3052C17*)(S3052C14*)(S3052C2*), ABISELECT(1440,1060), "S3052C1");
    check_base_class_offset(lv, (S3052C7*)(S3052C5*)(S3052C17*)(S3052C14*)(S3052C2*), ABISELECT(1440,1060), "S3052C1");
    check_base_class_offset(lv, (S3052C5*)(S3052C17*)(S3052C14*)(S3052C2*), ABISELECT(1440,1060), "S3052C1");
    check_base_class_offset(lv, (S3052C17*)(S3052C14*)(S3052C2*), ABISELECT(1440,1060), "S3052C1");
    check_base_class_offset(lv, (S3052C14*)(S3052C2*), ABISELECT(48,36), "S3052C1");
    /*is_ambiguous_... S3052C2::S3052C10 */ AMB_check_base_class_offset(lv, (S3052C10*)(S3052C2*), ABISELECT(1073744,794892), "S3052C1");
    check_base_class_offset(lv, (S3052C2*), 0, "S3052C1");
    /*is_ambiguous_... S3052C1::S3052C10 */ AMB_check_base_class_offset(lv, (S3052C10*), ABISELECT(1060736,785296), "S3052C1");
    /*is_ambiguous_... S3052C1::S3052C3 */ AMB_check_base_class_offset(lv, (S3052C3*), ABISELECT(1060776,785320), "S3052C1");
    /*is_ambiguous_... S3052C1::S3052C15 */ AMB_check_base_class_offset(lv, (S3052C12*)(S3052C15*), ABISELECT(1073792,794916), "S3052C1");
    /*is_ambiguous_... S3052C1::S3052C15 */ AMB_check_base_class_offset(lv, (S3052C15*), ABISELECT(1073792,794916), "S3052C1");
    check_field_offset(lv, s3052c1f0, ABISELECT(1060824,785356), "S3052C1.s3052c1f0");
    check_field_offset(lv, s3052c1f1, ABISELECT(1060832,785360), "S3052C1.s3052c1f1");
    check_field_offset(lv, s3052c1f2, ABISELECT(1060848,785372), "S3052C1.s3052c1f2");
    check_field_offset(lv, s3052c1f3, ABISELECT(1060872,785396), "S3052C1.s3052c1f3");
    check_field_offset(lv, s3052c1f4, ABISELECT(1060876,785400), "S3052C1.s3052c1f4");
    test_class_info(&lv, &cd_S3052C1);
    dp->~S3052C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3052C1(Test_S3052C1, "S3052C1", ABISELECT(1075088,795856));

#else // __cplusplus

extern void _ZN7S3052C1C1Ev();
extern void _ZN7S3052C1D2Ev();
Name_Map name_map_S3052C1[] = {
  NSPAIR(_ZN7S3052C1C1Ev),
  NSPAIR(_ZN7S3052C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C3;
extern VTBL_ENTRY _ZTI7S3052C3[];
extern  VTBL_ENTRY _ZTV7S3052C3[];
extern Class_Descriptor cd_S3052C6;
extern VTBL_ENTRY _ZTI7S3052C6[];
extern  VTBL_ENTRY _ZTV7S3052C6[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C5;
extern VTBL_ENTRY _ZTI7S3052C5[];
extern  VTBL_ENTRY _ZTV7S3052C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C5[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S3052C9;
extern VTBL_ENTRY _ZTI7S3052C9[];
extern  VTBL_ENTRY _ZTV7S3052C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C9[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C5;
extern VTBL_ENTRY _ZTI7S3052C5[];
extern  VTBL_ENTRY _ZTV7S3052C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C5[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C11;
extern VTBL_ENTRY _ZTI8S3052C11[];
extern  VTBL_ENTRY _ZTV8S3052C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C11[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S3052C4;
extern VTBL_ENTRY _ZTI7S3052C4[];
extern  VTBL_ENTRY _ZTV7S3052C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C4[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S3052C15;
extern VTBL_ENTRY _ZTI8S3052C15[];
extern  VTBL_ENTRY _ZTV8S3052C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C15[];
extern Class_Descriptor cd_S3052C6;
extern VTBL_ENTRY _ZTI7S3052C6[];
extern  VTBL_ENTRY _ZTV7S3052C6[];
extern Class_Descriptor cd_S3052C8;
extern VTBL_ENTRY _ZTI7S3052C8[];
extern  VTBL_ENTRY _ZTV7S3052C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C8[];
extern Class_Descriptor cd_S3052C7;
extern VTBL_ENTRY _ZTI7S3052C7[];
extern  VTBL_ENTRY _ZTV7S3052C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C7[];
extern Class_Descriptor cd_S3052C5;
extern VTBL_ENTRY _ZTI7S3052C5[];
extern  VTBL_ENTRY _ZTV7S3052C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C5[];
extern Class_Descriptor cd_S3052C17;
extern VTBL_ENTRY _ZTI8S3052C17[];
extern  VTBL_ENTRY _ZTV8S3052C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C17[];
extern Class_Descriptor cd_S3052C14;
extern VTBL_ENTRY _ZTI8S3052C14[];
extern  VTBL_ENTRY _ZTV8S3052C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C14[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S3052C2;
extern VTBL_ENTRY _ZTI7S3052C2[];
extern  VTBL_ENTRY _ZTV7S3052C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C2[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S3052C3;
extern VTBL_ENTRY _ZTI7S3052C3[];
extern  VTBL_ENTRY _ZTV7S3052C3[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S3052C15;
extern VTBL_ENTRY _ZTI8S3052C15[];
extern  VTBL_ENTRY _ZTV8S3052C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S3052C15[];
static Base_Class bases_S3052C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    28, //immediately_derived
  0, 0},
  {&cd_S3052C6,    ABISELECT(1071768,793448), //bcp->offset
    61, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S3052C8,    ABISELECT(1060880,785404), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(1060880,785404), //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
    14, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3052C5,    ABISELECT(1060880,785404), //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
    15, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3052C8,    ABISELECT(1071864,793532), //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
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(1071864,793532), //bcp->offset
    68, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3052C10,    ABISELECT(1061208,785636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S3052C9,    ABISELECT(1061200,785632), //bcp->offset
    55, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S3052C8,    ABISELECT(1071968,793592), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(1071968,793592), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3052C8,    ABISELECT(1072072,793652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(1072072,793652), //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
    8, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S3052C5,    ABISELECT(1072072,793652), //bcp->offset
    89, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3052C12,    ABISELECT(1072384,793880), //bcp->offset
    96, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S3052C8,    ABISELECT(1073504,794720), //bcp->offset
    100, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    80, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S3052C11,    ABISELECT(1071968,793592), //bcp->offset
    78, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S3052C12,    ABISELECT(1073536,794744), //bcp->offset
    106, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S3052C4,    ABISELECT(1060880,785404), //bcp->offset
    41, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    28, //immediately_derived
  0, 1},
  {&cd_S3052C12,    ABISELECT(48,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
    21, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S3052C15,    ABISELECT(48,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3052C6,    ABISELECT(1344,976), //bcp->offset
    24, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3052C8,    ABISELECT(1440,1060), //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
    24, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S3052C7,    ABISELECT(1440,1060), //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
    24, //immediately_derived
  0, 0},
  {&cd_S3052C5,    ABISELECT(1440,1060), //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
    26, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3052C17,    ABISELECT(1440,1060), //bcp->offset
    29, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3052C14,    ABISELECT(48,36), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S3052C10,    ABISELECT(1073744,794892), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S3052C2,    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
    29, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3052C10,    ABISELECT(1060736,785296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3052C3,    ABISELECT(1060776,785320), //bcp->offset
    38, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3052C12,    ABISELECT(1073792,794916), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S3052C15,    ABISELECT(1073792,794916), //bcp->offset
    111, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    82, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S3052C1[];
extern void _ZN7S3052C32v2Ev();
extern void _ZN7S3052C22v8Ev();
extern void _ZN7S3052C1D1Ev();
extern void _ZN7S3052C1D0Ev();
extern void _ZN7S3052C12v1Ev();
extern void ABISELECT(_ZThn48_N7S3052C1D1Ev,_ZThn36_N7S3052C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S3052C1D0Ev,_ZThn36_N7S3052C1D0Ev)();
extern void _ZN8S3052C152v6Ev();
extern void _ZN8S3052C142v7Ev();
extern void ABISELECT(_ZThn1344_N7S3052C1D1Ev,_ZThn976_N7S3052C1D1Ev)();
extern void ABISELECT(_ZThn1344_N7S3052C1D0Ev,_ZThn976_N7S3052C1D0Ev)();
extern void _ZN7S3052C62v3Ev();
extern void ABISELECT(_ZThn1440_N7S3052C1D1Ev,_ZThn1060_N7S3052C1D1Ev)();
extern void ABISELECT(_ZThn1440_N7S3052C1D0Ev,_ZThn1060_N7S3052C1D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void _ZN7S3052C32v2Ev();
extern void ABISELECT(_ZTv0_n64_N7S3052C1D1Ev,_ZTv0_n32_N7S3052C1D1Ev)();
extern void ABISELECT(_ZThn1060880_N7S3052C1D1Ev,_ZThn785404_N7S3052C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3052C1D0Ev,_ZTv0_n32_N7S3052C1D0Ev)();
extern void ABISELECT(_ZThn1060880_N7S3052C1D0Ev,_ZThn785404_N7S3052C1D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTvn320_n64_N7S3052C1D1Ev,_ZTvn228_n32_N7S3052C1D1Ev)();
extern void ABISELECT(_ZTvn320_n64_N7S3052C1D0Ev,_ZTvn228_n32_N7S3052C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C1D1Ev,_ZTv0_n12_N7S3052C1D1Ev)();
extern void ABISELECT(_ZThn1071768_N7S3052C1D1Ev,_ZThn793448_N7S3052C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C1D0Ev,_ZTv0_n12_N7S3052C1D0Ev)();
extern void ABISELECT(_ZThn1071768_N7S3052C1D0Ev,_ZThn793448_N7S3052C1D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
extern void ABISELECT(_ZTv0_n32_N7S3052C1D1Ev,_ZTv0_n16_N7S3052C1D1Ev)();
extern void ABISELECT(_ZThn1071864_N7S3052C1D1Ev,_ZThn793532_N7S3052C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3052C1D0Ev,_ZTv0_n16_N7S3052C1D0Ev)();
extern void ABISELECT(_ZThn1071864_N7S3052C1D0Ev,_ZThn793532_N7S3052C1D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTv0_n40_N7S3052C1D1Ev,_ZTv0_n20_N7S3052C1D1Ev)();
extern void ABISELECT(_ZThn1071968_N7S3052C1D1Ev,_ZThn793592_N7S3052C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3052C1D0Ev,_ZTv0_n20_N7S3052C1D0Ev)();
extern void ABISELECT(_ZThn1071968_N7S3052C1D0Ev,_ZThn793592_N7S3052C1D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTvn104_n40_N7S3052C1D1Ev,_ZTvn60_n20_N7S3052C1D1Ev)();
extern void ABISELECT(_ZTvn104_n40_N7S3052C1D0Ev,_ZTvn60_n20_N7S3052C1D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
extern void ABISELECT(_ZTvn416_n40_N7S3052C1D1Ev,_ZTvn288_n20_N7S3052C1D1Ev)();
extern void ABISELECT(_ZTvn416_n40_N7S3052C1D0Ev,_ZTvn288_n20_N7S3052C1D0Ev)();
extern void ABISELECT(_ZTv0_n32_N7S3052C1D1Ev,_ZTv0_n16_N7S3052C1D1Ev)();
extern void ABISELECT(_ZThn1073504_N7S3052C1D1Ev,_ZThn794720_N7S3052C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3052C1D0Ev,_ZTv0_n16_N7S3052C1D0Ev)();
extern void ABISELECT(_ZThn1073504_N7S3052C1D0Ev,_ZThn794720_N7S3052C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C1D1Ev,_ZTv0_n12_N7S3052C1D1Ev)();
extern void ABISELECT(_ZThn1073536_N7S3052C1D1Ev,_ZThn794744_N7S3052C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C1D0Ev,_ZTv0_n12_N7S3052C1D0Ev)();
extern void ABISELECT(_ZThn1073536_N7S3052C1D0Ev,_ZThn794744_N7S3052C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3052C1D1Ev,_ZTv0_n20_N7S3052C1D1Ev)();
extern void ABISELECT(_ZThn1073792_N7S3052C1D1Ev,_ZThn794916_N7S3052C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3052C1D0Ev,_ZTv0_n20_N7S3052C1D0Ev)();
extern void ABISELECT(_ZThn1073792_N7S3052C1D0Ev,_ZThn794916_N7S3052C1D0Ev)() __attribute__((weak));
extern void _ZN8S3052C152v6Ev();
static  VTBL_ENTRY vtc_S3052C1[] = {
  ABISELECT(1073792,794916),
  ABISELECT(1073744,794892),
  ABISELECT(1073536,794744),
  ABISELECT(1073504,794720),
  ABISELECT(1071968,793592),
  ABISELECT(1071864,793532),
  ABISELECT(1071768,793448),
  ABISELECT(1060880,785404),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C1[0]),
  (VTBL_ENTRY)&_ZN7S3052C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3052C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3052C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C12v1Ev,
  ABISELECT(1073456,794684),
  ABISELECT(1071816,793496),
  ABISELECT(1071720,793412),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S3052C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3052C1D1Ev,_ZThn36_N7S3052C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3052C1D0Ev,_ZThn36_N7S3052C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3052C152v6Ev,
  (VTBL_ENTRY)&_ZN8S3052C142v7Ev,
  ABISELECT(-1344,-976),
  (VTBL_ENTRY)&(_ZTI7S3052C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1344_N7S3052C1D1Ev,_ZThn976_N7S3052C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1344_N7S3052C1D0Ev,_ZThn976_N7S3052C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
  ABISELECT(1070424,792472),
  ABISELECT(1072064,793660),
  ABISELECT(1070328,792388),
  ABISELECT(-1440,-1060),
  (VTBL_ENTRY)&(_ZTI7S3052C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1440_N7S3052C1D1Ev,_ZThn1060_N7S3052C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1440_N7S3052C1D0Ev,_ZThn1060_N7S3052C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  ABISELECT(-1060776,-785320),
  (VTBL_ENTRY)&(_ZTI7S3052C1[0]),
  (VTBL_ENTRY)&_ZN7S3052C32v2Ev,
  0,
  0,
  ABISELECT(-1060880,-785404),
  ABISELECT(12656,9340),
  ABISELECT(12624,9316),
  ABISELECT(11088,8188),
  ABISELECT(10984,8128),
  ABISELECT(10888,8044),
  ABISELECT(-1060880,-785404),
  (VTBL_ENTRY)&(_ZTI7S3052C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3052C1D1Ev,_ZTv0_n32_N7S3052C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3052C1D0Ev,_ZTv0_n32_N7S3052C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  ABISELECT(10568,7816),
  ABISELECT(10664,7900),
  ABISELECT(-1061200,-785632),
  (VTBL_ENTRY)&(_ZTI7S3052C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn320_n64_N7S3052C1D1Ev,_ZTvn228_n32_N7S3052C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn320_n64_N7S3052C1D0Ev,_ZTvn228_n32_N7S3052C1D0Ev),
  0,
  ABISELECT(-1071768,-793448),
  ABISELECT(-1071768,-793448),
  (VTBL_ENTRY)&(_ZTI7S3052C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C1D1Ev,_ZTv0_n12_N7S3052C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C1D0Ev,_ZTv0_n12_N7S3052C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
  0,
  0,
  ABISELECT(-1071864,-793532),
  ABISELECT(-96,-84),
  ABISELECT(-1071864,-793532),
  (VTBL_ENTRY)&(_ZTI7S3052C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C1D1Ev,_ZTv0_n16_N7S3052C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C1D0Ev,_ZTv0_n16_N7S3052C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  0,
  0,
  ABISELECT(-1071968,-793592),
  ABISELECT(1536,1128),
  ABISELECT(-200,-144),
  ABISELECT(-1071968,-793592),
  (VTBL_ENTRY)&(_ZTI7S3052C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3052C1D1Ev,_ZTv0_n20_N7S3052C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3052C1D0Ev,_ZTv0_n20_N7S3052C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  ABISELECT(-304,-204),
  ABISELECT(-1072072,-793652),
  (VTBL_ENTRY)&(_ZTI7S3052C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N7S3052C1D1Ev,_ZTvn60_n20_N7S3052C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N7S3052C1D0Ev,_ZTvn60_n20_N7S3052C1D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
  ABISELECT(-1072384,-793880),
  (VTBL_ENTRY)&(_ZTI7S3052C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N7S3052C1D1Ev,_ZTvn288_n20_N7S3052C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N7S3052C1D0Ev,_ZTvn288_n20_N7S3052C1D0Ev),
  ABISELECT(-1073504,-794720),
  ABISELECT(-1736,-1272),
  ABISELECT(-1073504,-794720),
  (VTBL_ENTRY)&(_ZTI7S3052C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C1D1Ev,_ZTv0_n16_N7S3052C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C1D0Ev,_ZTv0_n16_N7S3052C1D0Ev),
  ABISELECT(-1073536,-794744),
  ABISELECT(-1073536,-794744),
  (VTBL_ENTRY)&(_ZTI7S3052C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C1D1Ev,_ZTv0_n12_N7S3052C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C1D0Ev,_ZTv0_n12_N7S3052C1D0Ev),
  0,
  ABISELECT(-1073792,-794916),
  ABISELECT(-1928,-1384),
  ABISELECT(-2024,-1468),
  ABISELECT(-1073792,-794916),
  (VTBL_ENTRY)&(_ZTI7S3052C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3052C1D1Ev,_ZTv0_n20_N7S3052C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3052C1D0Ev,_ZTv0_n20_N7S3052C1D0Ev),
  (VTBL_ENTRY)&_ZN8S3052C152v6Ev,
};
extern VTBL_ENTRY _ZTV7S3052C1[];
extern void _ZN7S3052C32v2Ev();
extern void _ZN7S3052C22v8Ev();
extern void _ZN7S3052C2D1Ev();
extern void _ZN7S3052C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C2__7S3052C1[] = {
  ABISELECT(1073744,794892),
  ABISELECT(1073536,794744),
  ABISELECT(1073504,794720),
  ABISELECT(1071968,793592),
  ABISELECT(1071864,793532),
  ABISELECT(1071768,793448),
  ABISELECT(1060880,785404),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C2[0]),
  (VTBL_ENTRY)&_ZN7S3052C32v2Ev,
  (VTBL_ENTRY)&_ZN7S3052C22v8Ev,
  (VTBL_ENTRY)&_ZN7S3052C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C2D0Ev,
};
extern void _ZN8S3052C14D1Ev();
extern void _ZN8S3052C14D0Ev();
extern void _ZN8S3052C152v6Ev();
extern void _ZN8S3052C142v7Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C147S3052C2__7S3052C1[] = {
  ABISELECT(1073456,794684),
  ABISELECT(1071816,793496),
  ABISELECT(1071720,793412),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C14[0]),
  (VTBL_ENTRY)&_ZN8S3052C14D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C14D0Ev,
  (VTBL_ENTRY)&_ZN8S3052C152v6Ev,
  (VTBL_ENTRY)&_ZN8S3052C142v7Ev,
};
extern void _ZN8S3052C15D1Ev();
extern void _ZN8S3052C15D0Ev();
extern void _ZN8S3052C152v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C158S3052C147S3052C2__7S3052C1[] = {
  ABISELECT(1071816,793496),
  ABISELECT(1071720,793412),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&_ZN8S3052C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C15D0Ev,
  (VTBL_ENTRY)&_ZN8S3052C152v6Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev)();
extern void ABISELECT(_ZThn1071720_N8S3052C15D1Ev,_ZThn793412_N8S3052C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev)();
extern void ABISELECT(_ZThn1071720_N8S3052C15D0Ev,_ZThn793412_N8S3052C15D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__8S3052C158S3052C147S3052C2__7S3052C1[] = {
  0,
  ABISELECT(-1071720,-793412),
  ABISELECT(-1071720,-793412),
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev)();
extern void ABISELECT(_ZThn1071816_N8S3052C15D1Ev,_ZThn793496_N8S3052C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev)();
extern void ABISELECT(_ZThn1071816_N8S3052C15D0Ev,_ZThn793496_N8S3052C15D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__8S3052C158S3052C147S3052C2__7S3052C1[] = {
  0,
  0,
  ABISELECT(-1071816,-793496),
  ABISELECT(-96,-84),
  ABISELECT(-1071816,-793496),
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN8S3052C17D1Ev();
extern void _ZN8S3052C17D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C178S3052C147S3052C2__7S3052C1[] = {
  ABISELECT(1070424,792472),
  ABISELECT(1072064,793660),
  ABISELECT(1070328,792388),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C17[0]),
  (VTBL_ENTRY)&_ZN8S3052C17D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C17D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C5D1Ev();
extern void _ZN7S3052C5D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C58S3052C178S3052C147S3052C2__A2__7S3052C1[] = {
  ABISELECT(1070328,792388),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&_ZN7S3052C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C77S3052C58S3052C178S3052C147S3052C2__A4__7S3052C1[] = {
  ABISELECT(1070328,792388),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C77S3052C58S3052C178S3052C147S3052C2__A5__7S3052C1[] = {
  ABISELECT(1070328,792388),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZThn1070328_N7S3052C8D1Ev,_ZThn792388_N7S3052C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void ABISELECT(_ZThn1070328_N7S3052C8D0Ev,_ZThn792388_N7S3052C8D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C77S3052C58S3052C178S3052C147S3052C2__A5__7S3052C1[] = {
  0,
  ABISELECT(-1070328,-792388),
  ABISELECT(-1070328,-792388),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZThn1070328_N7S3052C7D1Ev,_ZThn792388_N7S3052C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void ABISELECT(_ZThn1070328_N7S3052C7D0Ev,_ZThn792388_N7S3052C7D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C77S3052C58S3052C178S3052C147S3052C2__A4__7S3052C1[] = {
  0,
  ABISELECT(-1070328,-792388),
  ABISELECT(-1070328,-792388),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev)();
extern void ABISELECT(_ZThn1070328_N7S3052C5D1Ev,_ZThn792388_N7S3052C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev)();
extern void ABISELECT(_ZThn1070328_N7S3052C5D0Ev,_ZThn792388_N7S3052C5D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C58S3052C178S3052C147S3052C2__A2__7S3052C1[] = {
  0,
  ABISELECT(-1070328,-792388),
  ABISELECT(-1070328,-792388),
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3052C17D1Ev,_ZTv0_n12_N8S3052C17D1Ev)();
extern void ABISELECT(_ZThn1070328_N8S3052C17D1Ev,_ZThn792388_N8S3052C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3052C17D0Ev,_ZTv0_n12_N8S3052C17D0Ev)();
extern void ABISELECT(_ZThn1070328_N8S3052C17D0Ev,_ZThn792388_N8S3052C17D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__8S3052C178S3052C147S3052C2__7S3052C1[] = {
  0,
  ABISELECT(-1070328,-792388),
  ABISELECT(-1070328,-792388),
  (VTBL_ENTRY)&(_ZTI8S3052C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C17D1Ev,_ZTv0_n12_N8S3052C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C17D0Ev,_ZTv0_n12_N8S3052C17D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C17D1Ev,_ZTv0_n16_N8S3052C17D1Ev)();
extern void ABISELECT(_ZThn1072064_N8S3052C17D1Ev,_ZThn793660_N8S3052C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C17D0Ev,_ZTv0_n16_N8S3052C17D0Ev)();
extern void ABISELECT(_ZThn1072064_N8S3052C17D0Ev,_ZThn793660_N8S3052C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3052C8__A1__8S3052C178S3052C147S3052C2__7S3052C1[] = {
  ABISELECT(-1072064,-793660),
  ABISELECT(-1736,-1272),
  ABISELECT(-1072064,-793660),
  (VTBL_ENTRY)&(_ZTI8S3052C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C17D1Ev,_ZTv0_n16_N8S3052C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C17D0Ev,_ZTv0_n16_N8S3052C17D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S3052C17D1Ev,_ZTv0_n16_N8S3052C17D1Ev)();
extern void ABISELECT(_ZThn1070424_N8S3052C17D1Ev,_ZThn792472_N8S3052C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C17D0Ev,_ZTv0_n16_N8S3052C17D0Ev)();
extern void ABISELECT(_ZThn1070424_N8S3052C17D0Ev,_ZThn792472_N8S3052C17D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__A1__8S3052C178S3052C147S3052C2__7S3052C1[] = {
  0,
  0,
  ABISELECT(-1070424,-792472),
  ABISELECT(-96,-84),
  ABISELECT(-1070424,-792472),
  (VTBL_ENTRY)&(_ZTI8S3052C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C17D1Ev,_ZTv0_n16_N8S3052C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C17D0Ev,_ZTv0_n16_N8S3052C17D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3052C14D1Ev,_ZTv0_n12_N8S3052C14D1Ev)();
extern void ABISELECT(_ZThn1071720_N8S3052C14D1Ev,_ZThn793412_N8S3052C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S3052C14D0Ev,_ZTv0_n12_N8S3052C14D0Ev)();
extern void ABISELECT(_ZThn1071720_N8S3052C14D0Ev,_ZThn793412_N8S3052C14D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__8S3052C147S3052C2__7S3052C1[] = {
  0,
  ABISELECT(-1071720,-793412),
  ABISELECT(-1071720,-793412),
  (VTBL_ENTRY)&(_ZTI8S3052C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C14D1Ev,_ZTv0_n12_N8S3052C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C14D0Ev,_ZTv0_n12_N8S3052C14D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C14D1Ev,_ZTv0_n16_N8S3052C14D1Ev)();
extern void ABISELECT(_ZThn1071816_N8S3052C14D1Ev,_ZThn793496_N8S3052C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C14D0Ev,_ZTv0_n16_N8S3052C14D0Ev)();
extern void ABISELECT(_ZThn1071816_N8S3052C14D0Ev,_ZThn793496_N8S3052C14D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__8S3052C147S3052C2__7S3052C1[] = {
  0,
  0,
  ABISELECT(-1071816,-793496),
  ABISELECT(-96,-84),
  ABISELECT(-1071816,-793496),
  (VTBL_ENTRY)&(_ZTI8S3052C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C14D1Ev,_ZTv0_n16_N8S3052C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C14D0Ev,_ZTv0_n16_N8S3052C14D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C14D1Ev,_ZTv0_n16_N8S3052C14D1Ev)();
extern void ABISELECT(_ZThn1073456_N8S3052C14D1Ev,_ZThn794684_N8S3052C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C14D0Ev,_ZTv0_n16_N8S3052C14D0Ev)();
extern void ABISELECT(_ZThn1073456_N8S3052C14D0Ev,_ZThn794684_N8S3052C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3052C8__A1__8S3052C147S3052C2__7S3052C1[] = {
  ABISELECT(-1073456,-794684),
  ABISELECT(-1736,-1272),
  ABISELECT(-1073456,-794684),
  (VTBL_ENTRY)&(_ZTI8S3052C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C14D1Ev,_ZTv0_n16_N8S3052C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C14D0Ev,_ZTv0_n16_N8S3052C14D0Ev),
};
extern void ABISELECT(_ZThn1392_N8S3052C14D1Ev,_ZThn1024_N8S3052C14D1Ev)();
extern void ABISELECT(_ZThn1392_N8S3052C14D0Ev,_ZThn1024_N8S3052C14D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C17__8S3052C147S3052C2__7S3052C1[] = {
  ABISELECT(1070424,792472),
  ABISELECT(1072064,793660),
  ABISELECT(1070328,792388),
  ABISELECT(-1392,-1024),
  (VTBL_ENTRY)&(_ZTI8S3052C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N8S3052C14D1Ev,_ZThn1024_N8S3052C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N8S3052C14D0Ev,_ZThn1024_N8S3052C14D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTv0_n64_N7S3052C2D1Ev,_ZTv0_n32_N7S3052C2D1Ev)();
extern void ABISELECT(_ZThn1060880_N7S3052C2D1Ev,_ZThn785404_N7S3052C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S3052C2D0Ev,_ZTv0_n32_N7S3052C2D0Ev)();
extern void ABISELECT(_ZThn1060880_N7S3052C2D0Ev,_ZThn785404_N7S3052C2D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C4__7S3052C2__7S3052C1[] = {
  0,
  0,
  ABISELECT(-1060880,-785404),
  ABISELECT(12656,9340),
  ABISELECT(12624,9316),
  ABISELECT(11088,8188),
  ABISELECT(10984,8128),
  ABISELECT(10888,8044),
  ABISELECT(-1060880,-785404),
  (VTBL_ENTRY)&(_ZTI7S3052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3052C2D1Ev,_ZTv0_n32_N7S3052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S3052C2D0Ev,_ZTv0_n32_N7S3052C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C2D1Ev,_ZTv0_n12_N7S3052C2D1Ev)();
extern void ABISELECT(_ZThn1071768_N7S3052C2D1Ev,_ZThn793448_N7S3052C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C2D0Ev,_ZTv0_n12_N7S3052C2D0Ev)();
extern void ABISELECT(_ZThn1071768_N7S3052C2D0Ev,_ZThn793448_N7S3052C2D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C2__7S3052C1[] = {
  0,
  ABISELECT(-1071768,-793448),
  ABISELECT(-1071768,-793448),
  (VTBL_ENTRY)&(_ZTI7S3052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C2D1Ev,_ZTv0_n12_N7S3052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C2D0Ev,_ZTv0_n12_N7S3052C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S3052C2D1Ev,_ZTv0_n16_N7S3052C2D1Ev)();
extern void ABISELECT(_ZThn1071864_N7S3052C2D1Ev,_ZThn793532_N7S3052C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3052C2D0Ev,_ZTv0_n16_N7S3052C2D0Ev)();
extern void ABISELECT(_ZThn1071864_N7S3052C2D0Ev,_ZThn793532_N7S3052C2D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__A1__7S3052C2__7S3052C1[] = {
  0,
  0,
  ABISELECT(-1071864,-793532),
  ABISELECT(-96,-84),
  ABISELECT(-1071864,-793532),
  (VTBL_ENTRY)&(_ZTI7S3052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C2D1Ev,_ZTv0_n16_N7S3052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C2D0Ev,_ZTv0_n16_N7S3052C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTvn320_n64_N7S3052C2D1Ev,_ZTvn228_n32_N7S3052C2D1Ev)();
extern void ABISELECT(_ZTvn320_n64_N7S3052C2D0Ev,_ZTvn228_n32_N7S3052C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3052C97S3052C4__7S3052C2__7S3052C1[] = {
  ABISELECT(10568,7816),
  ABISELECT(10664,7900),
  ABISELECT(-1061200,-785632),
  (VTBL_ENTRY)&(_ZTI7S3052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn320_n64_N7S3052C2D1Ev,_ZTvn228_n32_N7S3052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn320_n64_N7S3052C2D0Ev,_ZTvn228_n32_N7S3052C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S3052C2D1Ev,_ZTv0_n20_N7S3052C2D1Ev)();
extern void ABISELECT(_ZThn1071968_N7S3052C2D1Ev,_ZThn793592_N7S3052C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3052C2D0Ev,_ZTv0_n20_N7S3052C2D0Ev)();
extern void ABISELECT(_ZThn1071968_N7S3052C2D0Ev,_ZThn793592_N7S3052C2D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C11__7S3052C2__7S3052C1[] = {
  0,
  0,
  ABISELECT(-1071968,-793592),
  ABISELECT(1536,1128),
  ABISELECT(-200,-144),
  ABISELECT(-1071968,-793592),
  (VTBL_ENTRY)&(_ZTI7S3052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3052C2D1Ev,_ZTv0_n20_N7S3052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3052C2D0Ev,_ZTv0_n20_N7S3052C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTvn104_n40_N7S3052C2D1Ev,_ZTvn60_n20_N7S3052C2D1Ev)();
extern void ABISELECT(_ZTvn104_n40_N7S3052C2D0Ev,_ZTvn60_n20_N7S3052C2D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C58S3052C11__A1__7S3052C2__7S3052C1[] = {
  ABISELECT(-304,-204),
  ABISELECT(-1072072,-793652),
  (VTBL_ENTRY)&(_ZTI7S3052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N7S3052C2D1Ev,_ZTvn60_n20_N7S3052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N7S3052C2D0Ev,_ZTvn60_n20_N7S3052C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTvn416_n40_N7S3052C2D1Ev,_ZTvn288_n20_N7S3052C2D1Ev)();
extern void ABISELECT(_ZTvn416_n40_N7S3052C2D0Ev,_ZTvn288_n20_N7S3052C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3052C128S3052C11__7S3052C2__7S3052C1[] = {
  ABISELECT(-1072384,-793880),
  (VTBL_ENTRY)&(_ZTI7S3052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N7S3052C2D1Ev,_ZTvn288_n20_N7S3052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N7S3052C2D0Ev,_ZTvn288_n20_N7S3052C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3052C2D1Ev,_ZTv0_n16_N7S3052C2D1Ev)();
extern void ABISELECT(_ZThn1073504_N7S3052C2D1Ev,_ZThn794720_N7S3052C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3052C2D0Ev,_ZTv0_n16_N7S3052C2D0Ev)();
extern void ABISELECT(_ZThn1073504_N7S3052C2D0Ev,_ZThn794720_N7S3052C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3052C8__A4__7S3052C2__7S3052C1[] = {
  ABISELECT(-1073504,-794720),
  ABISELECT(-1736,-1272),
  ABISELECT(-1073504,-794720),
  (VTBL_ENTRY)&(_ZTI7S3052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C2D1Ev,_ZTv0_n16_N7S3052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C2D0Ev,_ZTv0_n16_N7S3052C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3052C2D1Ev,_ZTv0_n12_N7S3052C2D1Ev)();
extern void ABISELECT(_ZThn1073536_N7S3052C2D1Ev,_ZThn794744_N7S3052C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C2D0Ev,_ZTv0_n12_N7S3052C2D0Ev)();
extern void ABISELECT(_ZThn1073536_N7S3052C2D0Ev,_ZThn794744_N7S3052C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3052C12__A1__7S3052C2__7S3052C1[] = {
  ABISELECT(-1073536,-794744),
  ABISELECT(-1073536,-794744),
  (VTBL_ENTRY)&(_ZTI7S3052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C2D1Ev,_ZTv0_n12_N7S3052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C2D0Ev,_ZTv0_n12_N7S3052C2D0Ev),
};
extern void ABISELECT(_ZThn48_N7S3052C2D1Ev,_ZThn36_N7S3052C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S3052C2D0Ev,_ZThn36_N7S3052C2D0Ev)();
extern void _ZN8S3052C152v6Ev();
extern void _ZN8S3052C142v7Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C14__7S3052C2__7S3052C1[] = {
  ABISELECT(1073456,794684),
  ABISELECT(1071816,793496),
  ABISELECT(1071720,793412),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI7S3052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3052C2D1Ev,_ZThn36_N7S3052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S3052C2D0Ev,_ZThn36_N7S3052C2D0Ev),
  (VTBL_ENTRY)&_ZN8S3052C152v6Ev,
  (VTBL_ENTRY)&_ZN8S3052C142v7Ev,
};
extern void ABISELECT(_ZThn1440_N7S3052C2D1Ev,_ZThn1060_N7S3052C2D1Ev)();
extern void ABISELECT(_ZThn1440_N7S3052C2D0Ev,_ZThn1060_N7S3052C2D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C178S3052C14__7S3052C2__7S3052C1[] = {
  ABISELECT(1070424,792472),
  ABISELECT(1072064,793660),
  ABISELECT(1070328,792388),
  ABISELECT(-1440,-1060),
  (VTBL_ENTRY)&(_ZTI7S3052C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1440_N7S3052C2D1Ev,_ZThn1060_N7S3052C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1440_N7S3052C2D0Ev,_ZThn1060_N7S3052C2D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C4D1Ev();
extern void _ZN7S3052C4D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C4__7S3052C1[] = {
  ABISELECT(12656,9340),
  ABISELECT(12624,9316),
  ABISELECT(11088,8188),
  ABISELECT(10984,8128),
  ABISELECT(10888,8044),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&_ZN7S3052C4D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C4D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C5D1Ev();
extern void _ZN7S3052C5D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C57S3052C4__7S3052C1[] = {
  ABISELECT(10888,8044),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&_ZN7S3052C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C77S3052C57S3052C4__7S3052C1[] = {
  ABISELECT(10888,8044),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C77S3052C57S3052C4__7S3052C1[] = {
  ABISELECT(10888,8044),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZThn10888_N7S3052C8D1Ev,_ZThn8044_N7S3052C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void ABISELECT(_ZThn10888_N7S3052C8D0Ev,_ZThn8044_N7S3052C8D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C77S3052C57S3052C4__7S3052C1[] = {
  0,
  ABISELECT(-10888,-8044),
  ABISELECT(-10888,-8044),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZThn10888_N7S3052C7D1Ev,_ZThn8044_N7S3052C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void ABISELECT(_ZThn10888_N7S3052C7D0Ev,_ZThn8044_N7S3052C7D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C77S3052C57S3052C4__7S3052C1[] = {
  0,
  ABISELECT(-10888,-8044),
  ABISELECT(-10888,-8044),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev)();
extern void ABISELECT(_ZThn10888_N7S3052C5D1Ev,_ZThn8044_N7S3052C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev)();
extern void ABISELECT(_ZThn10888_N7S3052C5D0Ev,_ZThn8044_N7S3052C5D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C57S3052C4__7S3052C1[] = {
  0,
  ABISELECT(-10888,-8044),
  ABISELECT(-10888,-8044),
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN7S3052C9D1Ev();
extern void _ZN7S3052C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C97S3052C4__7S3052C1[] = {
  ABISELECT(10568,7816),
  ABISELECT(10664,7900),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C9[0]),
  (VTBL_ENTRY)&_ZN7S3052C9D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C9D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S3052C9D1Ev,_ZTv0_n16_N7S3052C9D1Ev)();
extern void ABISELECT(_ZThn10664_N7S3052C9D1Ev,_ZThn7900_N7S3052C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3052C9D0Ev,_ZTv0_n16_N7S3052C9D0Ev)();
extern void ABISELECT(_ZThn10664_N7S3052C9D0Ev,_ZThn7900_N7S3052C9D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__7S3052C97S3052C4__7S3052C1[] = {
  0,
  0,
  ABISELECT(-10664,-7900),
  ABISELECT(-96,-84),
  ABISELECT(-10664,-7900),
  (VTBL_ENTRY)&(_ZTI7S3052C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C9D1Ev,_ZTv0_n16_N7S3052C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C9D0Ev,_ZTv0_n16_N7S3052C9D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C9D1Ev,_ZTv0_n12_N7S3052C9D1Ev)();
extern void ABISELECT(_ZThn10568_N7S3052C9D1Ev,_ZThn7816_N7S3052C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C9D0Ev,_ZTv0_n12_N7S3052C9D0Ev)();
extern void ABISELECT(_ZThn10568_N7S3052C9D0Ev,_ZThn7816_N7S3052C9D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C97S3052C4__7S3052C1[] = {
  0,
  ABISELECT(-10568,-7816),
  ABISELECT(-10568,-7816),
  (VTBL_ENTRY)&(_ZTI7S3052C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C9D1Ev,_ZTv0_n12_N7S3052C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C9D0Ev,_ZTv0_n12_N7S3052C9D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C4D1Ev,_ZTv0_n12_N7S3052C4D1Ev)();
extern void ABISELECT(_ZThn10888_N7S3052C4D1Ev,_ZThn8044_N7S3052C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C4D0Ev,_ZTv0_n12_N7S3052C4D0Ev)();
extern void ABISELECT(_ZThn10888_N7S3052C4D0Ev,_ZThn8044_N7S3052C4D0Ev)() __attribute__((weak));
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C4__7S3052C1[] = {
  0,
  ABISELECT(-10888,-8044),
  ABISELECT(-10888,-8044),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C4D1Ev,_ZTv0_n12_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C4D0Ev,_ZTv0_n12_N7S3052C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S3052C4D1Ev,_ZTv0_n16_N7S3052C4D1Ev)();
extern void ABISELECT(_ZThn10984_N7S3052C4D1Ev,_ZThn8128_N7S3052C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3052C4D0Ev,_ZTv0_n16_N7S3052C4D0Ev)();
extern void ABISELECT(_ZThn10984_N7S3052C4D0Ev,_ZThn8128_N7S3052C4D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__A1__7S3052C4__7S3052C1[] = {
  0,
  0,
  ABISELECT(-10984,-8128),
  ABISELECT(-96,-84),
  ABISELECT(-10984,-8128),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C4D1Ev,_ZTv0_n16_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C4D0Ev,_ZTv0_n16_N7S3052C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZThn320_N7S3052C4D1Ev,_ZThn228_N7S3052C4D1Ev)();
extern void ABISELECT(_ZThn320_N7S3052C4D0Ev,_ZThn228_N7S3052C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S3052C9__7S3052C4__7S3052C1[] = {
  ABISELECT(10568,7816),
  ABISELECT(10664,7900),
  ABISELECT(-320,-228),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N7S3052C4D1Ev,_ZThn228_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N7S3052C4D0Ev,_ZThn228_N7S3052C4D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S3052C4D1Ev,_ZTv0_n20_N7S3052C4D1Ev)();
extern void ABISELECT(_ZThn11088_N7S3052C4D1Ev,_ZThn8188_N7S3052C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S3052C4D0Ev,_ZTv0_n20_N7S3052C4D0Ev)();
extern void ABISELECT(_ZThn11088_N7S3052C4D0Ev,_ZThn8188_N7S3052C4D0Ev)() __attribute__((weak));
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C11__7S3052C4__7S3052C1[] = {
  0,
  0,
  ABISELECT(-11088,-8188),
  ABISELECT(1536,1128),
  ABISELECT(-200,-144),
  ABISELECT(-11088,-8188),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3052C4D1Ev,_ZTv0_n20_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S3052C4D0Ev,_ZTv0_n20_N7S3052C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTvn104_n40_N7S3052C4D1Ev,_ZTvn60_n20_N7S3052C4D1Ev)();
extern void ABISELECT(_ZTvn104_n40_N7S3052C4D0Ev,_ZTvn60_n20_N7S3052C4D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C58S3052C11__A1__7S3052C4__7S3052C1[] = {
  ABISELECT(-304,-204),
  ABISELECT(-11192,-8248),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N7S3052C4D1Ev,_ZTvn60_n20_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N7S3052C4D0Ev,_ZTvn60_n20_N7S3052C4D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTvn416_n40_N7S3052C4D1Ev,_ZTvn288_n20_N7S3052C4D1Ev)();
extern void ABISELECT(_ZTvn416_n40_N7S3052C4D0Ev,_ZTvn288_n20_N7S3052C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3052C128S3052C11__7S3052C4__7S3052C1[] = {
  ABISELECT(-11504,-8476),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N7S3052C4D1Ev,_ZTvn288_n20_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N7S3052C4D0Ev,_ZTvn288_n20_N7S3052C4D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S3052C4D1Ev,_ZTv0_n16_N7S3052C4D1Ev)();
extern void ABISELECT(_ZThn12624_N7S3052C4D1Ev,_ZThn9316_N7S3052C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S3052C4D0Ev,_ZTv0_n16_N7S3052C4D0Ev)();
extern void ABISELECT(_ZThn12624_N7S3052C4D0Ev,_ZThn9316_N7S3052C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3052C8__A4__7S3052C4__7S3052C1[] = {
  ABISELECT(-12624,-9316),
  ABISELECT(-1736,-1272),
  ABISELECT(-12624,-9316),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C4D1Ev,_ZTv0_n16_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S3052C4D0Ev,_ZTv0_n16_N7S3052C4D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N7S3052C4D1Ev,_ZTv0_n12_N7S3052C4D1Ev)();
extern void ABISELECT(_ZThn12656_N7S3052C4D1Ev,_ZThn9340_N7S3052C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S3052C4D0Ev,_ZTv0_n12_N7S3052C4D0Ev)();
extern void ABISELECT(_ZThn12656_N7S3052C4D0Ev,_ZThn9340_N7S3052C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3052C12__A1__7S3052C4__7S3052C1[] = {
  ABISELECT(-12656,-9340),
  ABISELECT(-12656,-9340),
  (VTBL_ENTRY)&(_ZTI7S3052C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C4D1Ev,_ZTv0_n12_N7S3052C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C4D0Ev,_ZTv0_n12_N7S3052C4D0Ev),
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__A1__7S3052C1[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C7__A1__7S3052C1[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C7__A1__7S3052C1[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C7__A1__7S3052C1[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN8S3052C11D1Ev();
extern void _ZN8S3052C11D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C11__7S3052C1[] = {
  ABISELECT(1536,1128),
  ABISELECT(-200,-144),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C11[0]),
  (VTBL_ENTRY)&_ZN8S3052C11D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C11D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C78S3052C11__A2__7S3052C1[] = {
  ABISELECT(-200,-144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C78S3052C11__A2__7S3052C1[] = {
  ABISELECT(-200,-144),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C78S3052C11__A2__7S3052C1[] = {
  0,
  ABISELECT(200,144),
  ABISELECT(200,144),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C78S3052C11__A2__7S3052C1[] = {
  0,
  ABISELECT(200,144),
  ABISELECT(200,144),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN7S3052C5D1Ev();
extern void _ZN7S3052C5D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C58S3052C11__A1__7S3052C1[] = {
  ABISELECT(-304,-204),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&_ZN7S3052C5D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C5D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C7D1Ev();
extern void _ZN7S3052C7D0Ev();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C77S3052C58S3052C11__A3__7S3052C1[] = {
  ABISELECT(-304,-204),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&_ZN7S3052C7D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C7D0Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C87S3052C77S3052C58S3052C11__A3__7S3052C1[] = {
  ABISELECT(-304,-204),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C87S3052C77S3052C58S3052C11__A3__7S3052C1[] = {
  0,
  ABISELECT(304,204),
  ABISELECT(304,204),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C77S3052C58S3052C11__A3__7S3052C1[] = {
  0,
  ABISELECT(304,204),
  ABISELECT(304,204),
  (VTBL_ENTRY)&(_ZTI7S3052C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C58S3052C11__A1__7S3052C1[] = {
  0,
  ABISELECT(304,204),
  ABISELECT(304,204),
  (VTBL_ENTRY)&(_ZTI7S3052C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3052C11D1Ev,_ZTv0_n12_N8S3052C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3052C11D0Ev,_ZTv0_n12_N8S3052C11D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__8S3052C11__7S3052C1[] = {
  0,
  ABISELECT(200,144),
  ABISELECT(200,144),
  (VTBL_ENTRY)&(_ZTI8S3052C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C11D1Ev,_ZTv0_n12_N8S3052C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C11D0Ev,_ZTv0_n12_N8S3052C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZThn104_N8S3052C11D1Ev,_ZThn60_N8S3052C11D1Ev)();
extern void ABISELECT(_ZThn104_N8S3052C11D0Ev,_ZThn60_N8S3052C11D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C5__8S3052C11__7S3052C1[] = {
  ABISELECT(-304,-204),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S3052C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N8S3052C11D1Ev,_ZThn60_N8S3052C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N8S3052C11D0Ev,_ZThn60_N8S3052C11D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C11D1Ev,_ZTv0_n16_N8S3052C11D1Ev)();
extern void ABISELECT(_ZThn1536_N8S3052C11D1Ev,_ZThn1128_N8S3052C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S3052C11D0Ev,_ZTv0_n16_N8S3052C11D0Ev)();
extern void ABISELECT(_ZThn1536_N8S3052C11D0Ev,_ZThn1128_N8S3052C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S3052C8__A2__8S3052C11__7S3052C1[] = {
  ABISELECT(-1536,-1128),
  ABISELECT(-1736,-1272),
  ABISELECT(-1536,-1128),
  (VTBL_ENTRY)&(_ZTI8S3052C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C11D1Ev,_ZTv0_n16_N8S3052C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C11D0Ev,_ZTv0_n16_N8S3052C11D0Ev),
};
extern void _ZN7S3052C8D1Ev();
extern void _ZN7S3052C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C8__A4__7S3052C1[] = {
  ABISELECT(-1736,-1272),
  0,
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&_ZN7S3052C8D1Ev,
  (VTBL_ENTRY)&_ZN7S3052C8D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__7S3052C8__A4__7S3052C1[] = {
  0,
  ABISELECT(1736,1272),
  ABISELECT(1736,1272),
  (VTBL_ENTRY)&(_ZTI7S3052C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void _ZN8S3052C15D1Ev();
extern void _ZN8S3052C15D0Ev();
extern void _ZN8S3052C152v6Ev();
static  VTBL_ENTRY _tg__ZTV8S3052C15__A1__7S3052C1[] = {
  ABISELECT(-1928,-1384),
  ABISELECT(-2024,-1468),
  0,
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&_ZN8S3052C15D1Ev,
  (VTBL_ENTRY)&_ZN8S3052C15D0Ev,
  (VTBL_ENTRY)&_ZN8S3052C152v6Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev)();
extern void _ZN7S3052C62v3Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C6__8S3052C15__A1__7S3052C1[] = {
  0,
  ABISELECT(2024,1468),
  ABISELECT(2024,1468),
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev)();
extern void _ZN7S3052C72v4Ev();
extern void _ZN7S3052C72v5Ev();
static  VTBL_ENTRY _tg__ZTV7S3052C7__8S3052C15__A1__7S3052C1[] = {
  0,
  0,
  ABISELECT(1928,1384),
  ABISELECT(-96,-84),
  ABISELECT(1928,1384),
  (VTBL_ENTRY)&(_ZTI8S3052C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev),
  (VTBL_ENTRY)&_ZN7S3052C72v4Ev,
  (VTBL_ENTRY)&_ZN7S3052C72v5Ev,
};
static  VTT_ENTRY vtt_S3052C1[] = {
  {&(_ZTV7S3052C1[10]),  10,120},
  {&(_tg__ZTV7S3052C2__7S3052C1[9]),  9,13},
  {&(_tg__ZTV8S3052C147S3052C2__7S3052C1[5]),  5,9},
  {&(_tg__ZTV8S3052C158S3052C147S3052C2__7S3052C1[4]),  4,7},
  {&(_tg__ZTV7S3052C6__8S3052C158S3052C147S3052C2__7S3052C1[4]),  4,7},
  {&(_tg__ZTV7S3052C7__8S3052C158S3052C147S3052C2__7S3052C1[6]),  6,10},
  {&(_tg__ZTV8S3052C178S3052C147S3052C2__7S3052C1[5]),  5,9},
  {&(_tg__ZTV7S3052C58S3052C178S3052C147S3052C2__A2__7S3052C1[3]),  3,7},
  {&(_tg__ZTV7S3052C77S3052C58S3052C178S3052C147S3052C2__A4__7S3052C1[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C77S3052C58S3052C178S3052C147S3052C2__A5__7S3052C1[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C77S3052C58S3052C178S3052C147S3052C2__A5__7S3052C1[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C77S3052C58S3052C178S3052C147S3052C2__A4__7S3052C1[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C58S3052C178S3052C147S3052C2__A2__7S3052C1[4]),  4,7},
  {&(_tg__ZTV7S3052C6__8S3052C178S3052C147S3052C2__7S3052C1[4]),  4,7},
  {&(_tg__ZTV7S3052C8__A1__8S3052C178S3052C147S3052C2__7S3052C1[4]),  4,6},
  {&(_tg__ZTV7S3052C7__A1__8S3052C178S3052C147S3052C2__7S3052C1[6]),  6,10},
  {&(_tg__ZTV7S3052C6__8S3052C147S3052C2__7S3052C1[4]),  4,7},
  {&(_tg__ZTV7S3052C7__8S3052C147S3052C2__7S3052C1[6]),  6,10},
  {&(_tg__ZTV7S3052C8__A1__8S3052C147S3052C2__7S3052C1[4]),  4,6},
  {&(_tg__ZTV8S3052C17__8S3052C147S3052C2__7S3052C1[5]),  5,9},
  {&(_tg__ZTV7S3052C4__7S3052C2__7S3052C1[10]),  10,14},
  {&(_tg__ZTV7S3052C6__7S3052C2__7S3052C1[4]),  4,7},
  {&(_tg__ZTV7S3052C7__A1__7S3052C2__7S3052C1[6]),  6,10},
  {&(_tg__ZTV7S3052C97S3052C4__7S3052C2__7S3052C1[4]),  4,6},
  {&(_tg__ZTV8S3052C11__7S3052C2__7S3052C1[7]),  7,11},
  {&(_tg__ZTV7S3052C58S3052C11__A1__7S3052C2__7S3052C1[3]),  3,7},
  {&(_tg__ZTV8S3052C128S3052C11__7S3052C2__7S3052C1[2]),  2,4},
  {&(_tg__ZTV7S3052C8__A4__7S3052C2__7S3052C1[4]),  4,6},
  {&(_tg__ZTV8S3052C12__A1__7S3052C2__7S3052C1[3]),  3,5},
  {&(_tg__ZTV8S3052C14__7S3052C2__7S3052C1[5]),  5,9},
  {&(_tg__ZTV8S3052C178S3052C14__7S3052C2__7S3052C1[5]),  5,9},
  {&(_ZTV7S3052C1[51]),  51,120},
  {&(_ZTV7S3052C1[65]),  65,120},
  {&(_ZTV7S3052C1[74]),  74,120},
  {&(_ZTV7S3052C1[59]),  59,120},
  {&(_ZTV7S3052C1[85]),  85,120},
  {&(_ZTV7S3052C1[92]),  92,120},
  {&(_ZTV7S3052C1[98]),  98,120},
  {&(_ZTV7S3052C1[104]),  104,120},
  {&(_ZTV7S3052C1[109]),  109,120},
  {&(_ZTV7S3052C1[20]),  20,120},
  {&(_ZTV7S3052C1[34]),  34,120},
  {&(_ZTV7S3052C1[117]),  117,120},
  {&(_tg__ZTV7S3052C4__7S3052C1[7]),  7,11},
  {&(_tg__ZTV7S3052C57S3052C4__7S3052C1[3]),  3,7},
  {&(_tg__ZTV7S3052C77S3052C57S3052C4__7S3052C1[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C77S3052C57S3052C4__7S3052C1[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C77S3052C57S3052C4__7S3052C1[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C77S3052C57S3052C4__7S3052C1[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C57S3052C4__7S3052C1[4]),  4,7},
  {&(_tg__ZTV7S3052C97S3052C4__7S3052C1[4]),  4,6},
  {&(_tg__ZTV7S3052C7__7S3052C97S3052C4__7S3052C1[6]),  6,10},
  {&(_tg__ZTV7S3052C6__7S3052C97S3052C4__7S3052C1[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C4__7S3052C1[4]),  4,7},
  {&(_tg__ZTV7S3052C7__A1__7S3052C4__7S3052C1[6]),  6,10},
  {&(_tg__ZTV7S3052C9__7S3052C4__7S3052C1[4]),  4,6},
  {&(_tg__ZTV8S3052C11__7S3052C4__7S3052C1[7]),  7,11},
  {&(_tg__ZTV7S3052C58S3052C11__A1__7S3052C4__7S3052C1[3]),  3,7},
  {&(_tg__ZTV8S3052C128S3052C11__7S3052C4__7S3052C1[2]),  2,4},
  {&(_tg__ZTV7S3052C8__A4__7S3052C4__7S3052C1[4]),  4,6},
  {&(_tg__ZTV8S3052C12__A1__7S3052C4__7S3052C1[3]),  3,5},
  {&(_tg__ZTV7S3052C7__A1__7S3052C1[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C7__A1__7S3052C1[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C7__A1__7S3052C1[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C7__A1__7S3052C1[4]),  4,7},
  {&(_tg__ZTV8S3052C11__7S3052C1[4]),  4,8},
  {&(_tg__ZTV7S3052C78S3052C11__A2__7S3052C1[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C78S3052C11__A2__7S3052C1[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C78S3052C11__A2__7S3052C1[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C78S3052C11__A2__7S3052C1[4]),  4,7},
  {&(_tg__ZTV7S3052C58S3052C11__A1__7S3052C1[3]),  3,7},
  {&(_tg__ZTV7S3052C77S3052C58S3052C11__A3__7S3052C1[3]),  3,7},
  {&(_tg__ZTV7S3052C87S3052C77S3052C58S3052C11__A3__7S3052C1[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C87S3052C77S3052C58S3052C11__A3__7S3052C1[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C77S3052C58S3052C11__A3__7S3052C1[4]),  4,7},
  {&(_tg__ZTV7S3052C6__7S3052C58S3052C11__A1__7S3052C1[4]),  4,7},
  {&(_tg__ZTV7S3052C6__8S3052C11__7S3052C1[4]),  4,7},
  {&(_tg__ZTV7S3052C5__8S3052C11__7S3052C1[3]),  3,7},
  {&(_tg__ZTV7S3052C8__A2__8S3052C11__7S3052C1[4]),  4,6},
  {&(_tg__ZTV7S3052C8__A4__7S3052C1[3]),  3,5},
  {&(_tg__ZTV7S3052C6__7S3052C8__A4__7S3052C1[4]),  4,7},
  {&(_tg__ZTV8S3052C15__A1__7S3052C1[4]),  4,7},
  {&(_tg__ZTV7S3052C6__8S3052C15__A1__7S3052C1[4]),  4,7},
  {&(_tg__ZTV7S3052C7__8S3052C15__A1__7S3052C1[6]),  6,10},
};
extern VTBL_ENTRY _ZTI7S3052C1[];
extern  VTBL_ENTRY _ZTV7S3052C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3052C1[];
static VTBL_ENTRY alt_thunk_names16[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C11D0Ev,_ZTv0_n16_N8S3052C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S3052C11D0Ev,_ZThn1128_N8S3052C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C11D1Ev,_ZTv0_n16_N8S3052C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S3052C11D1Ev,_ZThn1128_N8S3052C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3052C4D0Ev,_ZTv0_n20_N7S3052C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11088_N7S3052C4D0Ev,_ZThn8188_N7S3052C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3052C4D1Ev,_ZTv0_n20_N7S3052C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11088_N7S3052C4D1Ev,_ZThn8188_N7S3052C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3052C4D0Ev,_ZTv0_n16_N7S3052C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12624_N7S3052C4D0Ev,_ZThn9316_N7S3052C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10984_N7S3052C4D0Ev,_ZThn8128_N7S3052C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3052C4D1Ev,_ZTv0_n16_N7S3052C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12624_N7S3052C4D1Ev,_ZThn9316_N7S3052C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10984_N7S3052C4D1Ev,_ZThn8128_N7S3052C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C4D0Ev,_ZTv0_n12_N7S3052C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12656_N7S3052C4D0Ev,_ZThn9340_N7S3052C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N7S3052C4D0Ev,_ZThn8044_N7S3052C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C4D1Ev,_ZTv0_n12_N7S3052C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12656_N7S3052C4D1Ev,_ZThn9340_N7S3052C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N7S3052C4D1Ev,_ZThn8044_N7S3052C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C9D0Ev,_ZTv0_n12_N7S3052C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10568_N7S3052C9D0Ev,_ZThn7816_N7S3052C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C9D1Ev,_ZTv0_n12_N7S3052C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10568_N7S3052C9D1Ev,_ZThn7816_N7S3052C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3052C9D0Ev,_ZTv0_n16_N7S3052C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10664_N7S3052C9D0Ev,_ZThn7900_N7S3052C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3052C9D1Ev,_ZTv0_n16_N7S3052C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10664_N7S3052C9D1Ev,_ZThn7900_N7S3052C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3052C2D0Ev,_ZTv0_n20_N7S3052C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1071968_N7S3052C2D0Ev,_ZThn793592_N7S3052C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3052C2D1Ev,_ZTv0_n20_N7S3052C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1071968_N7S3052C2D1Ev,_ZThn793592_N7S3052C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3052C2D0Ev,_ZTv0_n16_N7S3052C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1073504_N7S3052C2D0Ev,_ZThn794720_N7S3052C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1071864_N7S3052C2D0Ev,_ZThn793532_N7S3052C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3052C2D1Ev,_ZTv0_n16_N7S3052C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1073504_N7S3052C2D1Ev,_ZThn794720_N7S3052C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1071864_N7S3052C2D1Ev,_ZThn793532_N7S3052C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C2D0Ev,_ZTv0_n12_N7S3052C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1073536_N7S3052C2D0Ev,_ZThn794744_N7S3052C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1071768_N7S3052C2D0Ev,_ZThn793448_N7S3052C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C2D1Ev,_ZTv0_n12_N7S3052C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1073536_N7S3052C2D1Ev,_ZThn794744_N7S3052C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1071768_N7S3052C2D1Ev,_ZThn793448_N7S3052C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3052C2D0Ev,_ZTv0_n32_N7S3052C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1060880_N7S3052C2D0Ev,_ZThn785404_N7S3052C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3052C2D1Ev,_ZTv0_n32_N7S3052C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1060880_N7S3052C2D1Ev,_ZThn785404_N7S3052C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C14D0Ev,_ZTv0_n16_N8S3052C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1073456_N8S3052C14D0Ev,_ZThn794684_N8S3052C14D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1071816_N8S3052C14D0Ev,_ZThn793496_N8S3052C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C14D1Ev,_ZTv0_n16_N8S3052C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1073456_N8S3052C14D1Ev,_ZThn794684_N8S3052C14D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1071816_N8S3052C14D1Ev,_ZThn793496_N8S3052C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C14D0Ev,_ZTv0_n12_N8S3052C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1071720_N8S3052C14D0Ev,_ZThn793412_N8S3052C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C14D1Ev,_ZTv0_n12_N8S3052C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1071720_N8S3052C14D1Ev,_ZThn793412_N8S3052C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C17D0Ev,_ZTv0_n16_N8S3052C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1070424_N8S3052C17D0Ev,_ZThn792472_N8S3052C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1072064_N8S3052C17D0Ev,_ZThn793660_N8S3052C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C17D1Ev,_ZTv0_n16_N8S3052C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1070424_N8S3052C17D1Ev,_ZThn792472_N8S3052C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1072064_N8S3052C17D1Ev,_ZThn793660_N8S3052C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C17D0Ev,_ZTv0_n12_N8S3052C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1070328_N8S3052C17D0Ev,_ZThn792388_N8S3052C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C17D1Ev,_ZTv0_n12_N8S3052C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1070328_N8S3052C17D1Ev,_ZThn792388_N8S3052C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C5D0Ev,_ZTv0_n12_N7S3052C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N7S3052C5D0Ev,_ZThn8044_N7S3052C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1070328_N7S3052C5D0Ev,_ZThn792388_N7S3052C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C5D1Ev,_ZTv0_n12_N7S3052C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N7S3052C5D1Ev,_ZThn8044_N7S3052C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1070328_N7S3052C5D1Ev,_ZThn792388_N7S3052C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D0Ev,_ZTv0_n12_N7S3052C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N7S3052C7D0Ev,_ZThn8044_N7S3052C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1070328_N7S3052C7D0Ev,_ZThn792388_N7S3052C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C7D1Ev,_ZTv0_n12_N7S3052C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N7S3052C7D1Ev,_ZThn8044_N7S3052C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1070328_N7S3052C7D1Ev,_ZThn792388_N7S3052C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D0Ev,_ZTv0_n12_N7S3052C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N7S3052C8D0Ev,_ZThn8044_N7S3052C8D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1070328_N7S3052C8D0Ev,_ZThn792388_N7S3052C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C8D1Ev,_ZTv0_n12_N7S3052C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N7S3052C8D1Ev,_ZThn8044_N7S3052C8D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1070328_N7S3052C8D1Ev,_ZThn792388_N7S3052C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C15D0Ev,_ZTv0_n16_N8S3052C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1071816_N8S3052C15D0Ev,_ZThn793496_N8S3052C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S3052C15D1Ev,_ZTv0_n16_N8S3052C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1071816_N8S3052C15D1Ev,_ZThn793496_N8S3052C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C15D0Ev,_ZTv0_n12_N8S3052C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1071720_N8S3052C15D0Ev,_ZThn793412_N8S3052C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S3052C15D1Ev,_ZTv0_n12_N8S3052C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1071720_N8S3052C15D1Ev,_ZThn793412_N8S3052C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3052C1D0Ev,_ZTv0_n20_N7S3052C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1073792_N7S3052C1D0Ev,_ZThn794916_N7S3052C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1071968_N7S3052C1D0Ev,_ZThn793592_N7S3052C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S3052C1D1Ev,_ZTv0_n20_N7S3052C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1073792_N7S3052C1D1Ev,_ZThn794916_N7S3052C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1071968_N7S3052C1D1Ev,_ZThn793592_N7S3052C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3052C1D0Ev,_ZTv0_n16_N7S3052C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1073504_N7S3052C1D0Ev,_ZThn794720_N7S3052C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1071864_N7S3052C1D0Ev,_ZThn793532_N7S3052C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S3052C1D1Ev,_ZTv0_n16_N7S3052C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1073504_N7S3052C1D1Ev,_ZThn794720_N7S3052C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1071864_N7S3052C1D1Ev,_ZThn793532_N7S3052C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C1D0Ev,_ZTv0_n12_N7S3052C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1073536_N7S3052C1D0Ev,_ZThn794744_N7S3052C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1071768_N7S3052C1D0Ev,_ZThn793448_N7S3052C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S3052C1D1Ev,_ZTv0_n12_N7S3052C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1073536_N7S3052C1D1Ev,_ZThn794744_N7S3052C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1071768_N7S3052C1D1Ev,_ZThn793448_N7S3052C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3052C1D0Ev,_ZTv0_n32_N7S3052C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1060880_N7S3052C1D0Ev,_ZThn785404_N7S3052C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S3052C1D1Ev,_ZTv0_n32_N7S3052C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1060880_N7S3052C1D1Ev,_ZThn785404_N7S3052C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S3052C1 = {  "S3052C1", // class name
  bases_S3052C1, 33,
  &(vtc_S3052C1[0]), // expected_vtbl_contents
  &(vtt_S3052C1[0]), // expected_vtt_contents
  ABISELECT(1075088,795856), // object size
  NSPAIRA(_ZTI7S3052C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S3052C1),120, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3052C1),84, //virtual table table var
  30, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names16,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20846C3  {
  short s20846c3f0[6];
  __tsi64 s20846c3f1[8];
  int s20846c3f2;
  virtual  ~S20846C3(); // _ZN8S20846C3D1Ev
  virtual void  v3(); // _ZN8S20846C32v3Ev
  S20846C3(); // tgen
};
//SIG(-1 S20846C3) C1{ vd v1 Fs[6] FL[8] Fi}


 S20846C3 ::~S20846C3(){ note_dtor("S20846C3", this);}
void  S20846C3 ::v3(){vfunc_called(this, "_ZN8S20846C32v3Ev");}
S20846C3 ::S20846C3(){ note_ctor("S20846C3", this);} // tgen

static void Test_S20846C3()
{
  extern Class_Descriptor cd_S20846C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,22)];
    init_test(&cd_S20846C3, buf);
    S20846C3 *dp, &lv = *(dp=new (buf) S20846C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,84), "sizeof(S20846C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20846C3)");
    check_field_offset(lv, s20846c3f0, ABISELECT(8,4), "S20846C3.s20846c3f0");
    check_field_offset(lv, s20846c3f1, ABISELECT(24,16), "S20846C3.s20846c3f1");
    check_field_offset(lv, s20846c3f2, ABISELECT(88,80), "S20846C3.s20846c3f2");
    test_class_info(&lv, &cd_S20846C3);
    dp->~S20846C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20846C3(Test_S20846C3, "S20846C3", ABISELECT(96,84));

#else // __cplusplus

extern void _ZN8S20846C3C1Ev();
extern void _ZN8S20846C3D1Ev();
Name_Map name_map_S20846C3[] = {
  NSPAIR(_ZN8S20846C3C1Ev),
  NSPAIR(_ZN8S20846C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20846C3[];
extern void _ZN8S20846C3D1Ev();
extern void _ZN8S20846C3D0Ev();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY vtc_S20846C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C3[0]),
  (VTBL_ENTRY)&_ZN8S20846C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern VTBL_ENTRY _ZTI8S20846C3[];
extern  VTBL_ENTRY _ZTV8S20846C3[];
Class_Descriptor cd_S20846C3 = {  "S20846C3", // class name
  0,0,//no base classes
  &(vtc_S20846C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,84), // object size
  NSPAIRA(_ZTI8S20846C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20846C3),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  S20846C4  : virtual S20846C3 {
  __tsi64 s20846c4f0;
  void *s20846c4f1;
  __tsi64 s20846c4f2:54;
  ~S20846C4(); // tgen
  S20846C4(); // tgen
};
//SIG(-1 S20846C4) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} FL Fp FL:54}


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

static void Test_S20846C4()
{
  extern Class_Descriptor cd_S20846C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,28)];
    init_test(&cd_S20846C4, buf);
    S20846C4 *dp, &lv = *(dp=new (buf) S20846C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,108), "sizeof(S20846C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20846C4)");
    check_base_class_offset(lv, (S20846C3*), ABISELECT(32,24), "S20846C4");
    check_field_offset(lv, s20846c4f0, ABISELECT(8,4), "S20846C4.s20846c4f0");
    check_field_offset(lv, s20846c4f1, ABISELECT(16,12), "S20846C4.s20846c4f1");
    set_bf_and_test(lv, s20846c4f2, ABISELECT(24,16), 0, 54, 1, "S20846C4");
    set_bf_and_test(lv, s20846c4f2, ABISELECT(24,16), 0, 54, hide_sll(1LL<<53), "S20846C4");
    test_class_info(&lv, &cd_S20846C4);
    dp->~S20846C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20846C4(Test_S20846C4, "S20846C4", ABISELECT(128,108));

#else // __cplusplus

extern void _ZN8S20846C4C1Ev();
extern void _ZN8S20846C4D1Ev();
Name_Map name_map_S20846C4[] = {
  NSPAIR(_ZN8S20846C4C1Ev),
  NSPAIR(_ZN8S20846C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20846C3;
extern VTBL_ENTRY _ZTI8S20846C3[];
extern  VTBL_ENTRY _ZTV8S20846C3[];
static Base_Class bases_S20846C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20846C3,    ABISELECT(32,24), //bcp->offset
    5, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S20846C4[];
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S20846C4D1Ev,_ZThn24_N8S20846C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void ABISELECT(_ZThn32_N8S20846C4D0Ev,_ZThn24_N8S20846C4D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY vtc_S20846C4[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
  0,
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern VTBL_ENTRY _ZTV8S20846C4[];
static  VTT_ENTRY vtt_S20846C4[] = {
  {&(_ZTV8S20846C4[3]),  3,12},
  {&(_ZTV8S20846C4[9]),  9,12},
};
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
static VTBL_ENTRY alt_thunk_names17[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20846C4D0Ev,_ZThn24_N8S20846C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20846C4D1Ev,_ZThn24_N8S20846C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20846C4 = {  "S20846C4", // class name
  bases_S20846C4, 1,
  &(vtc_S20846C4[0]), // expected_vtbl_contents
  &(vtt_S20846C4[0]), // expected_vtt_contents
  ABISELECT(128,108), // object size
  NSPAIRA(_ZTI8S20846C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20846C4),12, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20846C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names17,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20846C2  : virtual S20846C3 , S20846C4 {
  char  :0;
  void *s20846c2f1[8];
  char s20846c2f2;
  virtual void  v4(); // _ZN8S20846C22v4Ev
  virtual void  v5(); // _ZN8S20846C22v5Ev
  ~S20846C2(); // tgen
  S20846C2(); // tgen
};
//SIG(-1 S20846C2) C1{ VBC2{ vd v3 Fs[6] FL[8] Fi} BC3{ VBC2 FL Fp FL:54} v1 v2 Fc:0 Fp[8] Fc}


void  S20846C2 ::v4(){vfunc_called(this, "_ZN8S20846C22v4Ev");}
void  S20846C2 ::v5(){vfunc_called(this, "_ZN8S20846C22v5Ev");}
S20846C2 ::~S20846C2(){ note_dtor("S20846C2", this);} // tgen
S20846C2 ::S20846C2(){ note_ctor("S20846C2", this);} // tgen

static void Test_S20846C2()
{
  extern Class_Descriptor cd_S20846C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,37)];
    init_test(&cd_S20846C2, buf);
    S20846C2 *dp, &lv = *(dp=new (buf) S20846C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,144), "sizeof(S20846C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20846C2)");
    check_base_class_offset(lv, (S20846C3*), ABISELECT(104,60), "S20846C2");
    check_base_class_offset(lv, (S20846C3*)(S20846C4*), ABISELECT(104,60), "S20846C2");
    check_base_class_offset(lv, (S20846C4*), 0, "S20846C2");
    check_field_offset(lv, s20846c2f1, ABISELECT(32,24), "S20846C2.s20846c2f1");
    check_field_offset(lv, s20846c2f2, ABISELECT(96,56), "S20846C2.s20846c2f2");
    test_class_info(&lv, &cd_S20846C2);
    dp->~S20846C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20846C2(Test_S20846C2, "S20846C2", ABISELECT(200,144));

#else // __cplusplus

extern void _ZN8S20846C2C1Ev();
extern void _ZN8S20846C2D1Ev();
Name_Map name_map_S20846C2[] = {
  NSPAIR(_ZN8S20846C2C1Ev),
  NSPAIR(_ZN8S20846C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20846C3;
extern VTBL_ENTRY _ZTI8S20846C3[];
extern  VTBL_ENTRY _ZTV8S20846C3[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
static Base_Class bases_S20846C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20846C3,    ABISELECT(104,60), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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_S20846C4,    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 _ZTI8S20846C2[];
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZThn104_N8S20846C2D1Ev,_ZThn60_N8S20846C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void ABISELECT(_ZThn104_N8S20846C2D0Ev,_ZThn60_N8S20846C2D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY vtc_S20846C2[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern VTBL_ENTRY _ZTV8S20846C2[];
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C4__8S20846C2[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZThn104_N8S20846C4D1Ev,_ZThn60_N8S20846C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void ABISELECT(_ZThn104_N8S20846C4D0Ev,_ZThn60_N8S20846C4D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C4__8S20846C2[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
static  VTT_ENTRY vtt_S20846C2[] = {
  {&(_ZTV8S20846C2[3]),  3,14},
  {&(_tg__ZTV8S20846C4__8S20846C2[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C4__8S20846C2[4]),  4,7},
  {&(_ZTV8S20846C2[11]),  11,14},
};
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
static VTBL_ENTRY alt_thunk_names18[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20846C4D0Ev,_ZThn60_N8S20846C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20846C4D1Ev,_ZThn60_N8S20846C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20846C2D0Ev,_ZThn60_N8S20846C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20846C2D1Ev,_ZThn60_N8S20846C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20846C2 = {  "S20846C2", // class name
  bases_S20846C2, 2,
  &(vtc_S20846C2[0]), // expected_vtbl_contents
  &(vtt_S20846C2[0]), // expected_vtt_contents
  ABISELECT(200,144), // object size
  NSPAIRA(_ZTI8S20846C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20846C2),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20846C2),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names18,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20846C6  : virtual S20846C3 , S20846C2 {
  void *s20846c6f0[3];
  char s20846c6f1:8;
  int s20846c6f2[2];
  char s20846c6f3;
  ::S20846C3 s20846c6f4;
  void *s20846c6f5[3];
  __tsi64 s20846c6f6[5];
  int s20846c6f7;
  ~S20846C6(); // tgen
  S20846C6(); // tgen
};
//SIG(-1 S20846C6) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} BC3{ VBC2 BC4{ VBC2 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC2 Fp[3] FL[5] Fi}


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

static void Test_S20846C6()
{
  extern Class_Descriptor cd_S20846C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(52,79)];
    init_test(&cd_S20846C6, buf);
    S20846C6 *dp, &lv = *(dp=new (buf) S20846C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(408,312), "sizeof(S20846C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20846C6)");
    check_base_class_offset(lv, (S20846C3*), ABISELECT(312,228), "S20846C6");
    check_base_class_offset(lv, (S20846C3*)(S20846C2*), ABISELECT(312,228), "S20846C6");
    check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*), ABISELECT(312,228), "S20846C6");
    check_base_class_offset(lv, (S20846C4*)(S20846C2*), 0, "S20846C6");
    check_base_class_offset(lv, (S20846C2*), 0, "S20846C6");
    check_field_offset(lv, s20846c6f0, ABISELECT(104,60), "S20846C6.s20846c6f0");
    set_bf_and_test(lv, s20846c6f1, ABISELECT(128,72), 0, 8, 1, "S20846C6");
    set_bf_and_test(lv, s20846c6f1, ABISELECT(128,72), 0, 8, hide_sll(1LL<<7), "S20846C6");
    check_field_offset(lv, s20846c6f2, ABISELECT(132,76), "S20846C6.s20846c6f2");
    check_field_offset(lv, s20846c6f3, ABISELECT(140,84), "S20846C6.s20846c6f3");
    check_field_offset(lv, s20846c6f4, ABISELECT(144,88), "S20846C6.s20846c6f4");
    check_field_offset(lv, s20846c6f5, ABISELECT(240,172), "S20846C6.s20846c6f5");
    check_field_offset(lv, s20846c6f6, ABISELECT(264,184), "S20846C6.s20846c6f6");
    check_field_offset(lv, s20846c6f7, ABISELECT(304,224), "S20846C6.s20846c6f7");
    test_class_info(&lv, &cd_S20846C6);
    dp->~S20846C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20846C6(Test_S20846C6, "S20846C6", ABISELECT(408,312));

#else // __cplusplus

extern void _ZN8S20846C6C1Ev();
extern void _ZN8S20846C6D1Ev();
Name_Map name_map_S20846C6[] = {
  NSPAIR(_ZN8S20846C6C1Ev),
  NSPAIR(_ZN8S20846C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20846C3;
extern VTBL_ENTRY _ZTI8S20846C3[];
extern  VTBL_ENTRY _ZTV8S20846C3[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
static Base_Class bases_S20846C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20846C3,    ABISELECT(312,228), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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
  1, 1},
  {&cd_S20846C4,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20846C2,    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 _ZTI8S20846C6[];
extern void _ZN8S20846C6D1Ev();
extern void _ZN8S20846C6D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev)();
extern void ABISELECT(_ZThn312_N8S20846C6D1Ev,_ZThn228_N8S20846C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev)();
extern void ABISELECT(_ZThn312_N8S20846C6D0Ev,_ZThn228_N8S20846C6D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY vtc_S20846C6[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&_ZN8S20846C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern VTBL_ENTRY _ZTV8S20846C6[];
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__8S20846C6[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C2__8S20846C6[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZThn312_N8S20846C4D1Ev,_ZThn228_N8S20846C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void ABISELECT(_ZThn312_N8S20846C4D0Ev,_ZThn228_N8S20846C4D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C2__8S20846C6[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZThn312_N8S20846C2D1Ev,_ZThn228_N8S20846C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void ABISELECT(_ZThn312_N8S20846C2D0Ev,_ZThn228_N8S20846C2D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C2__8S20846C6[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
static  VTT_ENTRY vtt_S20846C6[] = {
  {&(_ZTV8S20846C6[3]),  3,14},
  {&(_tg__ZTV8S20846C2__8S20846C6[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C2__8S20846C6[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C2__8S20846C6[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C2__8S20846C6[4]),  4,7},
  {&(_ZTV8S20846C6[11]),  11,14},
};
extern VTBL_ENTRY _ZTI8S20846C6[];
extern  VTBL_ENTRY _ZTV8S20846C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C6[];
static VTBL_ENTRY alt_thunk_names19[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20846C2D0Ev,_ZThn228_N8S20846C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20846C2D1Ev,_ZThn228_N8S20846C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20846C4D0Ev,_ZThn228_N8S20846C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20846C4D1Ev,_ZThn228_N8S20846C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20846C6D0Ev,_ZThn228_N8S20846C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20846C6D1Ev,_ZThn228_N8S20846C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20846C6 = {  "S20846C6", // class name
  bases_S20846C6, 3,
  &(vtc_S20846C6[0]), // expected_vtbl_contents
  &(vtt_S20846C6[0]), // expected_vtt_contents
  ABISELECT(408,312), // object size
  NSPAIRA(_ZTI8S20846C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20846C6),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20846C6),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names19,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20846C7  : virtual S20846C3 , S20846C6 , virtual S20846C4 , virtual S20846C2 {
  void *s20846c7f0[7];
  virtual  ~S20846C7(); // _ZN8S20846C7D2Ev
  S20846C7(); // tgen
};
//SIG(-1 S20846C7) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} BC3{ VBC2 BC4{ VBC2 BC5{ VBC2 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC2 Fp[3] FL[5] Fi} VBC5 VBC4 vd Fp[7]}


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

static void Test_S20846C7()
{
  extern Class_Descriptor cd_S20846C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(76,107)];
    init_test(&cd_S20846C7, buf);
    S20846C7 *dp, &lv = *(dp=new (buf) S20846C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(600,424), "sizeof(S20846C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20846C7)");
    check_base_class_offset(lv, (S20846C3*), ABISELECT(368,256), "S20846C7");
    check_base_class_offset(lv, (S20846C3*)(S20846C6*), ABISELECT(368,256), "S20846C7");
    check_base_class_offset(lv, (S20846C3*)(S20846C2*)(S20846C6*), ABISELECT(368,256), "S20846C7");
    check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*)(S20846C6*), ABISELECT(368,256), "S20846C7");
    /*is_ambiguous_... S20846C7::S20846C4 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*), ABISELECT(368,256), "S20846C7");
    /*is_ambiguous_... S20846C7::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C2*), ABISELECT(368,256), "S20846C7");
    /*is_ambiguous_... S20846C7::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*), ABISELECT(368,256), "S20846C7");
    check_base_class_offset(lv, (S20846C4*)(S20846C2*)(S20846C6*), 0, "S20846C7");
    check_base_class_offset(lv, (S20846C2*)(S20846C6*), 0, "S20846C7");
    check_base_class_offset(lv, (S20846C6*), 0, "S20846C7");
    /*is_ambiguous_... S20846C7::S20846C4 */ AMB_check_base_class_offset(lv, (S20846C4*), ABISELECT(464,340), "S20846C7");
    /*is_ambiguous_... S20846C7::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C2*), ABISELECT(496,364), "S20846C7");
    /*is_ambiguous_... S20846C7::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C2*), ABISELECT(496,364), "S20846C7");
    check_field_offset(lv, s20846c7f0, ABISELECT(312,228), "S20846C7.s20846c7f0");
    test_class_info(&lv, &cd_S20846C7);
    dp->~S20846C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20846C7(Test_S20846C7, "S20846C7", ABISELECT(600,424));

#else // __cplusplus

extern void _ZN8S20846C7C1Ev();
extern void _ZN8S20846C7D2Ev();
Name_Map name_map_S20846C7[] = {
  NSPAIR(_ZN8S20846C7C1Ev),
  NSPAIR(_ZN8S20846C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20846C3;
extern VTBL_ENTRY _ZTI8S20846C3[];
extern  VTBL_ENTRY _ZTV8S20846C3[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C6;
extern VTBL_ENTRY _ZTI8S20846C6[];
extern  VTBL_ENTRY _ZTV8S20846C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C6[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
static Base_Class bases_S20846C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20846C3,    ABISELECT(368,256), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20846C4,    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
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20846C2,    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
    6, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20846C6,    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_S20846C4,    ABISELECT(464,340), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20846C4,    ABISELECT(496,364), //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
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(496,364), //bcp->offset
    22, //bcp->virtual_function_table_offset
    6, //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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20846C7[];
extern void _ZN8S20846C7D1Ev();
extern void _ZN8S20846C7D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S20846C7D1Ev,_ZTv0_n12_N8S20846C7D1Ev)();
extern void ABISELECT(_ZThn368_N8S20846C7D1Ev,_ZThn256_N8S20846C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C7D0Ev,_ZTv0_n12_N8S20846C7D0Ev)();
extern void ABISELECT(_ZThn368_N8S20846C7D0Ev,_ZThn256_N8S20846C7D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
extern void ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev)();
extern void ABISELECT(_ZThn464_N8S20846C7D1Ev,_ZThn340_N8S20846C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev)();
extern void ABISELECT(_ZThn464_N8S20846C7D0Ev,_ZThn340_N8S20846C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev)();
extern void ABISELECT(_ZThn496_N8S20846C7D1Ev,_ZThn364_N8S20846C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev)();
extern void ABISELECT(_ZThn496_N8S20846C7D0Ev,_ZThn364_N8S20846C7D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY vtc_S20846C7[] = {
  ABISELECT(496,364),
  ABISELECT(464,340),
  ABISELECT(368,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C7[0]),
  (VTBL_ENTRY)&_ZN8S20846C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  0,
  ABISELECT(-368,-256),
  ABISELECT(-368,-256),
  (VTBL_ENTRY)&(_ZTI8S20846C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C7D1Ev,_ZTv0_n12_N8S20846C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C7D0Ev,_ZTv0_n12_N8S20846C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
  ABISELECT(-464,-340),
  ABISELECT(-96,-84),
  ABISELECT(-464,-340),
  (VTBL_ENTRY)&(_ZTI8S20846C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev),
  0,
  0,
  ABISELECT(-496,-364),
  ABISELECT(-128,-108),
  ABISELECT(-496,-364),
  (VTBL_ENTRY)&(_ZTI8S20846C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern VTBL_ENTRY _ZTV8S20846C7[];
extern void _ZN8S20846C6D1Ev();
extern void _ZN8S20846C6D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C6__8S20846C7[] = {
  ABISELECT(368,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&_ZN8S20846C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C28S20846C6__8S20846C7[] = {
  ABISELECT(368,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C28S20846C6__8S20846C7[] = {
  ABISELECT(368,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZThn368_N8S20846C4D1Ev,_ZThn256_N8S20846C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void ABISELECT(_ZThn368_N8S20846C4D0Ev,_ZThn256_N8S20846C4D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C28S20846C6__8S20846C7[] = {
  0,
  ABISELECT(-368,-256),
  ABISELECT(-368,-256),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZThn368_N8S20846C2D1Ev,_ZThn256_N8S20846C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void ABISELECT(_ZThn368_N8S20846C2D0Ev,_ZThn256_N8S20846C2D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C28S20846C6__8S20846C7[] = {
  0,
  ABISELECT(-368,-256),
  ABISELECT(-368,-256),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev)();
extern void ABISELECT(_ZThn368_N8S20846C6D1Ev,_ZThn256_N8S20846C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev)();
extern void ABISELECT(_ZThn368_N8S20846C6D0Ev,_ZThn256_N8S20846C6D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C6__8S20846C7[] = {
  0,
  ABISELECT(-368,-256),
  ABISELECT(-368,-256),
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C4__A1__8S20846C7[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C4__A1__8S20846C7[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__A1__8S20846C7[] = {
  ABISELECT(-128,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C2__A2__8S20846C7[] = {
  ABISELECT(-128,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C2__A2__8S20846C7[] = {
  0,
  ABISELECT(128,108),
  ABISELECT(128,108),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C2__A1__8S20846C7[] = {
  0,
  ABISELECT(128,108),
  ABISELECT(128,108),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
static  VTT_ENTRY vtt_S20846C7[] = {
  {&(_ZTV8S20846C7[5]),  5,32},
  {&(_tg__ZTV8S20846C6__8S20846C7[3]),  3,7},
  {&(_tg__ZTV8S20846C28S20846C6__8S20846C7[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C28S20846C6__8S20846C7[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C28S20846C6__8S20846C7[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C28S20846C6__8S20846C7[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C6__8S20846C7[4]),  4,7},
  {&(_ZTV8S20846C7[13]),  13,32},
  {&(_ZTV8S20846C7[20]),  20,32},
  {&(_ZTV8S20846C7[28]),  28,32},
  {&(_tg__ZTV8S20846C4__A1__8S20846C7[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C4__A1__8S20846C7[4]),  4,7},
  {&(_tg__ZTV8S20846C2__A1__8S20846C7[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C2__A2__8S20846C7[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C2__A2__8S20846C7[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C2__A1__8S20846C7[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S20846C7[];
extern  VTBL_ENTRY _ZTV8S20846C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C7[];
static VTBL_ENTRY alt_thunk_names20[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S20846C6D0Ev,_ZThn256_N8S20846C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S20846C6D1Ev,_ZThn256_N8S20846C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S20846C2D0Ev,_ZThn256_N8S20846C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S20846C2D1Ev,_ZThn256_N8S20846C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S20846C4D0Ev,_ZThn256_N8S20846C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S20846C4D1Ev,_ZThn256_N8S20846C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S20846C7D0Ev,_ZThn364_N8S20846C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn464_N8S20846C7D0Ev,_ZThn340_N8S20846C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S20846C7D1Ev,_ZThn364_N8S20846C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn464_N8S20846C7D1Ev,_ZThn340_N8S20846C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C7D0Ev,_ZTv0_n12_N8S20846C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S20846C7D0Ev,_ZThn256_N8S20846C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C7D1Ev,_ZTv0_n12_N8S20846C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S20846C7D1Ev,_ZThn256_N8S20846C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20846C7 = {  "S20846C7", // class name
  bases_S20846C7, 7,
  &(vtc_S20846C7[0]), // expected_vtbl_contents
  &(vtt_S20846C7[0]), // expected_vtt_contents
  ABISELECT(600,424), // object size
  NSPAIRA(_ZTI8S20846C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20846C7),32, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20846C7),16, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names20,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20846C5  : S20846C6 , virtual S20846C2 , virtual S20846C4 , virtual S20846C7 , virtual S3052C12 {
  int s20846c5f0;
  __tsi64 s20846c5f1;
  int s20846c5f2[2];
  short s20846c5f3[8];
  ::S3052C12 s20846c5f4;
  ::S3052C16 s20846c5f5;
  long double s20846c5f6[5];
  int s20846c5f7:5;
  int s20846c5f8;
  virtual  ~S20846C5(); // _ZN8S20846C5D2Ev
  virtual void  v6(); // _ZN8S20846C52v6Ev
  S20846C5(); // tgen
};
//SIG(-1 S20846C5) C1{ BC2{ VBC3{ vd v2 Fs[6] FL[8] Fi} BC4{ VBC3 BC5{ VBC3 FL Fp FL:54} v3 v4 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC3 Fp[3] FL[5] Fi} VBC4 VBC5 VBC6{ VBC3 BC2 VBC5 VBC4 vd Fp[7]} VBC7{ vd m FC8{ VBC9{ vd v7 Fs[6] FL[8] Fi} BC10{ VBC9 FL Fp FL:54} v5 v6 Fc:0 Fp[8] Fc}} vd v1 Fi FL Fi[2] Fs[8] FC7 FU11{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} FD[5] Fi:5 Fi}


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

static void Test_S20846C5()
{
  extern Class_Descriptor cd_S20846C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(93,267)];
    init_test(&cd_S20846C5, buf);
    S20846C5 *dp, &lv = *(dp=new (buf) S20846C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1472,1064), "sizeof(S20846C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20846C5)");
    /*is_ambiguous_... S20846C5::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C6*), ABISELECT(664,492), "S20846C5");
    /*is_ambiguous_... S20846C5::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C2*)(S20846C6*), ABISELECT(664,492), "S20846C5");
    /*is_ambiguous_... S20846C5::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*)(S20846C6*), ABISELECT(664,492), "S20846C5");
    /*is_ambiguous_... S20846C5::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C2*), ABISELECT(664,492), "S20846C5");
    /*is_ambiguous_... S20846C5::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*), ABISELECT(664,492), "S20846C5");
    /*is_ambiguous_... S20846C5::S20846C4 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*), ABISELECT(664,492), "S20846C5");
    check_base_class_offset(lv, (S20846C3*)(S20846C7*), ABISELECT(664,492), "S20846C5");
    check_base_class_offset(lv, (S20846C3*)(S20846C6*)(S20846C7*), ABISELECT(664,492), "S20846C5");
    check_base_class_offset(lv, (S20846C3*)(S20846C2*)(S20846C6*)(S20846C7*), ABISELECT(664,492), "S20846C5");
    check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*)(S20846C6*)(S20846C7*), ABISELECT(664,492), "S20846C5");
    /*is_ambiguous_... S20846C5::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C2*)(S20846C6*), 0, "S20846C5");
    /*is_ambiguous_... S20846C5::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C2*)(S20846C6*), 0, "S20846C5");
    /*is_ambiguous_... S20846C5::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C6*), 0, "S20846C5");
    /*is_ambiguous_... S20846C5::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C2*), ABISELECT(760,576), "S20846C5");
    /*is_ambiguous_... S20846C5::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C2*), ABISELECT(760,576), "S20846C5");
    /*is_ambiguous_... S20846C7::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C2*)(S20846C7*), ABISELECT(760,576), "S20846C5");
    /*is_ambiguous_... S20846C5::S20846C4 */ AMB_check_base_class_offset(lv, (S20846C4*), ABISELECT(864,636), "S20846C5");
    /*is_ambiguous_... S20846C7::S20846C4 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C7*), ABISELECT(864,636), "S20846C5");
    check_base_class_offset(lv, (S20846C4*)(S20846C2*)(S20846C6*)(S20846C7*), ABISELECT(896,660), "S20846C5");
    check_base_class_offset(lv, (S20846C2*)(S20846C6*)(S20846C7*), ABISELECT(896,660), "S20846C5");
    check_base_class_offset(lv, (S20846C6*)(S20846C7*), ABISELECT(896,660), "S20846C5");
    check_base_class_offset(lv, (S20846C7*), ABISELECT(896,660), "S20846C5");
    check_base_class_offset(lv, (S3052C12*), ABISELECT(1264,916), "S20846C5");
    check_field_offset(lv, s20846c5f0, ABISELECT(308,228), "S20846C5.s20846c5f0");
    check_field_offset(lv, s20846c5f1, ABISELECT(312,232), "S20846C5.s20846c5f1");
    check_field_offset(lv, s20846c5f2, ABISELECT(320,240), "S20846C5.s20846c5f2");
    check_field_offset(lv, s20846c5f3, ABISELECT(328,248), "S20846C5.s20846c5f3");
    check_field_offset(lv, s20846c5f4, ABISELECT(344,264), "S20846C5.s20846c5f4");
    check_field_offset(lv, s20846c5f5, ABISELECT(552,412), "S20846C5.s20846c5f5");
    check_field_offset(lv, s20846c5f6, ABISELECT(576,424), "S20846C5.s20846c5f6");
    set_bf_and_test(lv, s20846c5f7, ABISELECT(656,484), 0, 5, 1, "S20846C5");
    set_bf_and_test(lv, s20846c5f7, ABISELECT(656,484), 0, 5, hide_sll(1LL<<4), "S20846C5");
    check_field_offset(lv, s20846c5f8, ABISELECT(660,488), "S20846C5.s20846c5f8");
    test_class_info(&lv, &cd_S20846C5);
    dp->~S20846C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20846C5(Test_S20846C5, "S20846C5", ABISELECT(1472,1064));

#else // __cplusplus

extern void _ZN8S20846C5C1Ev();
extern void _ZN8S20846C5D2Ev();
Name_Map name_map_S20846C5[] = {
  NSPAIR(_ZN8S20846C5C1Ev),
  NSPAIR(_ZN8S20846C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20846C3;
extern VTBL_ENTRY _ZTI8S20846C3[];
extern  VTBL_ENTRY _ZTV8S20846C3[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C6;
extern VTBL_ENTRY _ZTI8S20846C6[];
extern  VTBL_ENTRY _ZTV8S20846C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C6[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C6;
extern VTBL_ENTRY _ZTI8S20846C6[];
extern  VTBL_ENTRY _ZTV8S20846C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C6[];
extern Class_Descriptor cd_S20846C7;
extern VTBL_ENTRY _ZTI8S20846C7[];
extern  VTBL_ENTRY _ZTV8S20846C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C7[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
static Base_Class bases_S20846C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20846C3,    ABISELECT(664,492), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //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
    1, //immediately_derived
  0, 1},
  {&cd_S20846C4,    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
    10, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20846C2,    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
    3, //immediately_derived
  0, 0},
  {&cd_S20846C6,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20846C4,    ABISELECT(760,576), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(760,576), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20846C4,    ABISELECT(864,636), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20846C4,    ABISELECT(896,660), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(896,660), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20846C6,    ABISELECT(896,660), //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
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20846C7,    ABISELECT(896,660), //bcp->offset
    35, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C12,    ABISELECT(1264,916), //bcp->offset
    47, //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
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20846C5[];
extern void _ZN8S20846C5D1Ev();
extern void _ZN8S20846C5D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void _ZN8S20846C52v6Ev();
extern void ABISELECT(_ZTv0_n24_N8S20846C5D1Ev,_ZTv0_n12_N8S20846C5D1Ev)();
extern void ABISELECT(_ZThn664_N8S20846C5D1Ev,_ZThn492_N8S20846C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C5D0Ev,_ZTv0_n12_N8S20846C5D0Ev)();
extern void ABISELECT(_ZThn664_N8S20846C5D0Ev,_ZThn492_N8S20846C5D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
extern void ABISELECT(_ZTv0_n32_N8S20846C5D1Ev,_ZTv0_n16_N8S20846C5D1Ev)();
extern void ABISELECT(_ZThn760_N8S20846C5D1Ev,_ZThn576_N8S20846C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20846C5D0Ev,_ZTv0_n16_N8S20846C5D0Ev)();
extern void ABISELECT(_ZThn760_N8S20846C5D0Ev,_ZThn576_N8S20846C5D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTv0_n32_N8S20846C5D1Ev,_ZTv0_n16_N8S20846C5D1Ev)();
extern void ABISELECT(_ZThn864_N8S20846C5D1Ev,_ZThn636_N8S20846C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20846C5D0Ev,_ZTv0_n16_N8S20846C5D0Ev)();
extern void ABISELECT(_ZThn864_N8S20846C5D0Ev,_ZThn636_N8S20846C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20846C5D1Ev,_ZTv0_n24_N8S20846C5D1Ev)();
extern void ABISELECT(_ZThn896_N8S20846C5D1Ev,_ZThn660_N8S20846C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20846C5D0Ev,_ZTv0_n24_N8S20846C5D0Ev)();
extern void ABISELECT(_ZThn896_N8S20846C5D0Ev,_ZThn660_N8S20846C5D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S20846C5D1Ev,_ZTv0_n12_N8S20846C5D1Ev)();
extern void ABISELECT(_ZThn1264_N8S20846C5D1Ev,_ZThn916_N8S20846C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C5D0Ev,_ZTv0_n12_N8S20846C5D0Ev)();
extern void ABISELECT(_ZThn1264_N8S20846C5D0Ev,_ZThn916_N8S20846C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20846C5[] = {
  ABISELECT(1264,916),
  ABISELECT(896,660),
  ABISELECT(864,636),
  ABISELECT(760,576),
  ABISELECT(664,492),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C5[0]),
  (VTBL_ENTRY)&_ZN8S20846C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20846C52v6Ev,
  0,
  ABISELECT(-664,-492),
  ABISELECT(-664,-492),
  (VTBL_ENTRY)&(_ZTI8S20846C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C5D1Ev,_ZTv0_n12_N8S20846C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C5D0Ev,_ZTv0_n12_N8S20846C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
  0,
  0,
  ABISELECT(-760,-576),
  ABISELECT(-96,-84),
  ABISELECT(-760,-576),
  (VTBL_ENTRY)&(_ZTI8S20846C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C5D1Ev,_ZTv0_n16_N8S20846C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C5D0Ev,_ZTv0_n16_N8S20846C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  ABISELECT(-864,-636),
  ABISELECT(-200,-144),
  ABISELECT(-864,-636),
  (VTBL_ENTRY)&(_ZTI8S20846C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C5D1Ev,_ZTv0_n16_N8S20846C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C5D0Ev,_ZTv0_n16_N8S20846C5D0Ev),
  0,
  0,
  ABISELECT(-896,-660),
  ABISELECT(-136,-84),
  ABISELECT(-32,-24),
  ABISELECT(-232,-168),
  ABISELECT(-896,-660),
  (VTBL_ENTRY)&(_ZTI8S20846C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20846C5D1Ev,_ZTv0_n24_N8S20846C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20846C5D0Ev,_ZTv0_n24_N8S20846C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  ABISELECT(-1264,-916),
  ABISELECT(-1264,-916),
  (VTBL_ENTRY)&(_ZTI8S20846C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C5D1Ev,_ZTv0_n12_N8S20846C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C5D0Ev,_ZTv0_n12_N8S20846C5D0Ev),
};
extern VTBL_ENTRY _ZTV8S20846C5[];
extern void _ZN8S20846C6D1Ev();
extern void _ZN8S20846C6D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C6__8S20846C5[] = {
  ABISELECT(664,492),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&_ZN8S20846C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C28S20846C6__8S20846C5[] = {
  ABISELECT(664,492),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C28S20846C6__8S20846C5[] = {
  ABISELECT(664,492),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZThn664_N8S20846C4D1Ev,_ZThn492_N8S20846C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void ABISELECT(_ZThn664_N8S20846C4D0Ev,_ZThn492_N8S20846C4D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C28S20846C6__8S20846C5[] = {
  0,
  ABISELECT(-664,-492),
  ABISELECT(-664,-492),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZThn664_N8S20846C2D1Ev,_ZThn492_N8S20846C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void ABISELECT(_ZThn664_N8S20846C2D0Ev,_ZThn492_N8S20846C2D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C28S20846C6__8S20846C5[] = {
  0,
  ABISELECT(-664,-492),
  ABISELECT(-664,-492),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev)();
extern void ABISELECT(_ZThn664_N8S20846C6D1Ev,_ZThn492_N8S20846C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev)();
extern void ABISELECT(_ZThn664_N8S20846C6D0Ev,_ZThn492_N8S20846C6D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C6__8S20846C5[] = {
  0,
  ABISELECT(-664,-492),
  ABISELECT(-664,-492),
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__A1__8S20846C5[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C2__A1__8S20846C5[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C2__A1__8S20846C5[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C2__A1__8S20846C5[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C4__A2__8S20846C5[] = {
  ABISELECT(-200,-144),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C4__A2__8S20846C5[] = {
  0,
  ABISELECT(200,144),
  ABISELECT(200,144),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN8S20846C7D1Ev();
extern void _ZN8S20846C7D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C7__8S20846C5[] = {
  ABISELECT(-136,-84),
  ABISELECT(-32,-24),
  ABISELECT(-232,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C7[0]),
  (VTBL_ENTRY)&_ZN8S20846C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C6D1Ev();
extern void _ZN8S20846C6D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C68S20846C7__A1__8S20846C5[] = {
  ABISELECT(-232,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&_ZN8S20846C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C28S20846C68S20846C7__A2__8S20846C5[] = {
  ABISELECT(-232,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C28S20846C68S20846C7__A3__8S20846C5[] = {
  ABISELECT(-232,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C28S20846C68S20846C7__A3__8S20846C5[] = {
  0,
  ABISELECT(232,168),
  ABISELECT(232,168),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C28S20846C68S20846C7__A2__8S20846C5[] = {
  0,
  ABISELECT(232,168),
  ABISELECT(232,168),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C68S20846C7__A1__8S20846C5[] = {
  0,
  ABISELECT(232,168),
  ABISELECT(232,168),
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C7D1Ev,_ZTv0_n12_N8S20846C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C7D0Ev,_ZTv0_n12_N8S20846C7D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C7__8S20846C5[] = {
  0,
  ABISELECT(232,168),
  ABISELECT(232,168),
  (VTBL_ENTRY)&(_ZTI8S20846C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C7D1Ev,_ZTv0_n12_N8S20846C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C7D0Ev,_ZTv0_n12_N8S20846C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20846C4__A1__8S20846C7__8S20846C5[] = {
  ABISELECT(32,24),
  ABISELECT(-200,-144),
  ABISELECT(32,24),
  (VTBL_ENTRY)&(_ZTI8S20846C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__A1__8S20846C7__8S20846C5[] = {
  0,
  0,
  ABISELECT(136,84),
  ABISELECT(-96,-84),
  ABISELECT(136,84),
  (VTBL_ENTRY)&(_ZTI8S20846C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
static  VTT_ENTRY vtt_S20846C5[] = {
  {&(_ZTV8S20846C5[7]),  7,52},
  {&(_tg__ZTV8S20846C6__8S20846C5[3]),  3,7},
  {&(_tg__ZTV8S20846C28S20846C6__8S20846C5[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C28S20846C6__8S20846C5[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C28S20846C6__8S20846C5[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C28S20846C6__8S20846C5[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C6__8S20846C5[4]),  4,7},
  {&(_ZTV8S20846C5[16]),  16,52},
  {&(_ZTV8S20846C5[25]),  25,52},
  {&(_ZTV8S20846C5[33]),  33,52},
  {&(_ZTV8S20846C5[43]),  43,52},
  {&(_ZTV8S20846C5[50]),  50,52},
  {&(_tg__ZTV8S20846C2__A1__8S20846C5[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C2__A1__8S20846C5[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C2__A1__8S20846C5[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C2__A1__8S20846C5[4]),  4,7},
  {&(_tg__ZTV8S20846C4__A2__8S20846C5[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C4__A2__8S20846C5[4]),  4,7},
  {&(_tg__ZTV8S20846C7__8S20846C5[5]),  5,9},
  {&(_tg__ZTV8S20846C68S20846C7__A1__8S20846C5[3]),  3,7},
  {&(_tg__ZTV8S20846C28S20846C68S20846C7__A2__8S20846C5[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C28S20846C68S20846C7__A3__8S20846C5[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C28S20846C68S20846C7__A3__8S20846C5[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C28S20846C68S20846C7__A2__8S20846C5[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C68S20846C7__A1__8S20846C5[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C7__8S20846C5[4]),  4,7},
  {&(_tg__ZTV8S20846C4__A1__8S20846C7__8S20846C5[4]),  4,6},
  {&(_tg__ZTV8S20846C2__A1__8S20846C7__8S20846C5[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20846C5[];
extern  VTBL_ENTRY _ZTV8S20846C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C5[];
static VTBL_ENTRY alt_thunk_names21[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N8S20846C6D0Ev,_ZThn492_N8S20846C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N8S20846C6D1Ev,_ZThn492_N8S20846C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N8S20846C2D0Ev,_ZThn492_N8S20846C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N8S20846C2D1Ev,_ZThn492_N8S20846C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N8S20846C4D0Ev,_ZThn492_N8S20846C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N8S20846C4D1Ev,_ZThn492_N8S20846C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20846C5D0Ev,_ZTv0_n24_N8S20846C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn896_N8S20846C5D0Ev,_ZThn660_N8S20846C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20846C5D1Ev,_ZTv0_n24_N8S20846C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn896_N8S20846C5D1Ev,_ZThn660_N8S20846C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20846C5D0Ev,_ZTv0_n16_N8S20846C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N8S20846C5D0Ev,_ZThn636_N8S20846C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn760_N8S20846C5D0Ev,_ZThn576_N8S20846C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20846C5D1Ev,_ZTv0_n16_N8S20846C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N8S20846C5D1Ev,_ZThn636_N8S20846C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn760_N8S20846C5D1Ev,_ZThn576_N8S20846C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C5D0Ev,_ZTv0_n12_N8S20846C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1264_N8S20846C5D0Ev,_ZThn916_N8S20846C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn664_N8S20846C5D0Ev,_ZThn492_N8S20846C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C5D1Ev,_ZTv0_n12_N8S20846C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1264_N8S20846C5D1Ev,_ZThn916_N8S20846C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn664_N8S20846C5D1Ev,_ZThn492_N8S20846C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20846C5 = {  "S20846C5", // class name
  bases_S20846C5, 12,
  &(vtc_S20846C5[0]), // expected_vtbl_contents
  &(vtt_S20846C5[0]), // expected_vtt_contents
  ABISELECT(1472,1064), // object size
  NSPAIRA(_ZTI8S20846C5),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20846C5),52, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20846C5),28, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names21,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20846C13  : virtual S20846C3 , S20846C2 , S20846C6 , S3052C12 , virtual S20846C4 {
  void *s20846c13f0;
  long s20846c13f1;
  ::S20846C6 s20846c13f2;
  ::S3052C12 s20846c13f3;
  ::S20846C4 s20846c13f4;
  int s20846c13f5;
  int s20846c13f6;
  ::S3052C13 s20846c13f7[9];
  ~S20846C13(); // tgen
  S20846C13(); // tgen
};
//SIG(-1 S20846C13) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} BC3{ VBC2 BC4{ VBC2 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} BC5{ VBC2 BC3 Fp[3] Fc:8 Fi[2] Fc FC2 Fp[3] FL[5] Fi} BC6{ vd m FC7{ VBC8{ vd v6 Fs[6] FL[8] Fi} BC9{ VBC8 FL Fp FL:54} v4 v5 Fc:0 Fp[8] Fc}} VBC4 Fp Fl FC5 FC6 FC4 Fi[2] FU10{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}


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

static void Test_S20846C13()
{
  extern Class_Descriptor cd_S20846C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(105,310)];
    init_test(&cd_S20846C13, buf);
    S20846C13 *dp, &lv = *(dp=new (buf) S20846C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1664,1236), "sizeof(S20846C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20846C13)");
    check_base_class_offset(lv, (S20846C3*), ABISELECT(1536,1128), "S20846C13");
    /*is_ambiguous_... S20846C13::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C2*), ABISELECT(1536,1128), "S20846C13");
    /*is_ambiguous_... S20846C13::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*), ABISELECT(1536,1128), "S20846C13");
    check_base_class_offset(lv, (S20846C3*)(S20846C6*), ABISELECT(1536,1128), "S20846C13");
    check_base_class_offset(lv, (S20846C3*)(S20846C2*)(S20846C6*), ABISELECT(1536,1128), "S20846C13");
    check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*)(S20846C6*), ABISELECT(1536,1128), "S20846C13");
    /*is_ambiguous_... S20846C13::S20846C4 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*), ABISELECT(1536,1128), "S20846C13");
    /*is_ambiguous_... S20846C13::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C2*), 0, "S20846C13");
    /*is_ambiguous_... S20846C13::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C2*), 0, "S20846C13");
    check_base_class_offset(lv, (S20846C4*)(S20846C2*)(S20846C6*), ABISELECT(104,60), "S20846C13");
    check_base_class_offset(lv, (S20846C2*)(S20846C6*), ABISELECT(104,60), "S20846C13");
    check_base_class_offset(lv, (S20846C6*), ABISELECT(104,60), "S20846C13");
    check_base_class_offset(lv, (S3052C12*), ABISELECT(416,288), "S20846C13");
    /*is_ambiguous_... S20846C13::S20846C4 */ AMB_check_base_class_offset(lv, (S20846C4*), ABISELECT(1632,1212), "S20846C13");
    check_field_offset(lv, s20846c13f0, ABISELECT(624,436), "S20846C13.s20846c13f0");
    check_field_offset(lv, s20846c13f1, ABISELECT(632,440), "S20846C13.s20846c13f1");
    check_field_offset(lv, s20846c13f2, ABISELECT(640,444), "S20846C13.s20846c13f2");
    check_field_offset(lv, s20846c13f3, ABISELECT(1048,756), "S20846C13.s20846c13f3");
    check_field_offset(lv, s20846c13f4, ABISELECT(1256,904), "S20846C13.s20846c13f4");
    check_field_offset(lv, s20846c13f5, ABISELECT(1384,1012), "S20846C13.s20846c13f5");
    check_field_offset(lv, s20846c13f6, ABISELECT(1388,1016), "S20846C13.s20846c13f6");
    check_field_offset(lv, s20846c13f7, ABISELECT(1392,1020), "S20846C13.s20846c13f7");
    test_class_info(&lv, &cd_S20846C13);
    dp->~S20846C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20846C13(Test_S20846C13, "S20846C13", ABISELECT(1664,1236));

#else // __cplusplus

extern void _ZN9S20846C13C1Ev();
extern void _ZN9S20846C13D1Ev();
Name_Map name_map_S20846C13[] = {
  NSPAIR(_ZN9S20846C13C1Ev),
  NSPAIR(_ZN9S20846C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20846C3;
extern VTBL_ENTRY _ZTI8S20846C3[];
extern  VTBL_ENTRY _ZTV8S20846C3[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C6;
extern VTBL_ENTRY _ZTI8S20846C6[];
extern  VTBL_ENTRY _ZTV8S20846C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C6[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
static Base_Class bases_S20846C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20846C3,    ABISELECT(1536,1128), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //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
  1, 1},
  {&cd_S20846C4,    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
    3, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20846C2,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20846C4,    ABISELECT(104,60), //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
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(104,60), //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
    5, //immediately_derived
  0, 0},
  {&cd_S20846C6,    ABISELECT(104,60), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //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},
  {&cd_S3052C12,    ABISELECT(416,288), //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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20846C4,    ABISELECT(1632,1212), //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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20846C13[];
extern void _ZN9S20846C13D1Ev();
extern void _ZN9S20846C13D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZThn104_N9S20846C13D1Ev,_ZThn60_N9S20846C13D1Ev)();
extern void ABISELECT(_ZThn104_N9S20846C13D0Ev,_ZThn60_N9S20846C13D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZThn416_N9S20846C13D1Ev,_ZThn288_N9S20846C13D1Ev)();
extern void ABISELECT(_ZThn416_N9S20846C13D0Ev,_ZThn288_N9S20846C13D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20846C13D1Ev,_ZTv0_n12_N9S20846C13D1Ev)();
extern void ABISELECT(_ZThn1536_N9S20846C13D1Ev,_ZThn1128_N9S20846C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C13D0Ev,_ZTv0_n12_N9S20846C13D0Ev)();
extern void ABISELECT(_ZThn1536_N9S20846C13D0Ev,_ZThn1128_N9S20846C13D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
extern void ABISELECT(_ZTv0_n32_N9S20846C13D1Ev,_ZTv0_n16_N9S20846C13D1Ev)();
extern void ABISELECT(_ZThn1632_N9S20846C13D1Ev,_ZThn1212_N9S20846C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C13D0Ev,_ZTv0_n16_N9S20846C13D0Ev)();
extern void ABISELECT(_ZThn1632_N9S20846C13D0Ev,_ZThn1212_N9S20846C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20846C13[] = {
  ABISELECT(1632,1212),
  ABISELECT(1536,1128),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C13[0]),
  (VTBL_ENTRY)&_ZN9S20846C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C13D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  ABISELECT(1432,1068),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI9S20846C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S20846C13D1Ev,_ZThn60_N9S20846C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S20846C13D0Ev,_ZThn60_N9S20846C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  ABISELECT(-416,-288),
  (VTBL_ENTRY)&(_ZTI9S20846C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn416_N9S20846C13D1Ev,_ZThn288_N9S20846C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn416_N9S20846C13D0Ev,_ZThn288_N9S20846C13D0Ev),
  0,
  ABISELECT(-1536,-1128),
  ABISELECT(-1536,-1128),
  (VTBL_ENTRY)&(_ZTI9S20846C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C13D1Ev,_ZTv0_n12_N9S20846C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C13D0Ev,_ZTv0_n12_N9S20846C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
  ABISELECT(-1632,-1212),
  ABISELECT(-96,-84),
  ABISELECT(-1632,-1212),
  (VTBL_ENTRY)&(_ZTI9S20846C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C13D1Ev,_ZTv0_n16_N9S20846C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C13D0Ev,_ZTv0_n16_N9S20846C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S20846C13[];
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C13[] = {
  ABISELECT(1536,1128),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C2__9S20846C13[] = {
  ABISELECT(1536,1128),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZThn1536_N8S20846C4D1Ev,_ZThn1128_N8S20846C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void ABISELECT(_ZThn1536_N8S20846C4D0Ev,_ZThn1128_N8S20846C4D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C2__9S20846C13[] = {
  0,
  ABISELECT(-1536,-1128),
  ABISELECT(-1536,-1128),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZThn1536_N8S20846C2D1Ev,_ZThn1128_N8S20846C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void ABISELECT(_ZThn1536_N8S20846C2D0Ev,_ZThn1128_N8S20846C2D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C2__9S20846C13[] = {
  0,
  ABISELECT(-1536,-1128),
  ABISELECT(-1536,-1128),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN8S20846C6D1Ev();
extern void _ZN8S20846C6D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C6__9S20846C13[] = {
  ABISELECT(1432,1068),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&_ZN8S20846C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C28S20846C6__A1__9S20846C13[] = {
  ABISELECT(1432,1068),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C28S20846C6__A1__9S20846C13[] = {
  ABISELECT(1432,1068),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZThn1432_N8S20846C4D1Ev,_ZThn1068_N8S20846C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void ABISELECT(_ZThn1432_N8S20846C4D0Ev,_ZThn1068_N8S20846C4D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C28S20846C6__A1__9S20846C13[] = {
  0,
  ABISELECT(-1432,-1068),
  ABISELECT(-1432,-1068),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZThn1432_N8S20846C2D1Ev,_ZThn1068_N8S20846C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void ABISELECT(_ZThn1432_N8S20846C2D0Ev,_ZThn1068_N8S20846C2D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C28S20846C6__A1__9S20846C13[] = {
  0,
  ABISELECT(-1432,-1068),
  ABISELECT(-1432,-1068),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev)();
extern void ABISELECT(_ZThn1432_N8S20846C6D1Ev,_ZThn1068_N8S20846C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev)();
extern void ABISELECT(_ZThn1432_N8S20846C6D0Ev,_ZThn1068_N8S20846C6D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C6__9S20846C13[] = {
  0,
  ABISELECT(-1432,-1068),
  ABISELECT(-1432,-1068),
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C4__A2__9S20846C13[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C4__A2__9S20846C13[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
static  VTT_ENTRY vtt_S20846C13[] = {
  {&(_ZTV9S20846C13[4]),  4,32},
  {&(_tg__ZTV8S20846C2__9S20846C13[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C2__9S20846C13[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C2__9S20846C13[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C2__9S20846C13[4]),  4,7},
  {&(_tg__ZTV8S20846C6__9S20846C13[3]),  3,7},
  {&(_tg__ZTV8S20846C28S20846C6__A1__9S20846C13[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C28S20846C6__A1__9S20846C13[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C28S20846C6__A1__9S20846C13[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C28S20846C6__A1__9S20846C13[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C6__9S20846C13[4]),  4,7},
  {&(_ZTV9S20846C13[23]),  23,32},
  {&(_ZTV9S20846C13[11]),  11,32},
  {&(_ZTV9S20846C13[30]),  30,32},
  {&(_tg__ZTV8S20846C4__A2__9S20846C13[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C4__A2__9S20846C13[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S20846C13[];
extern  VTBL_ENTRY _ZTV9S20846C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C13[];
static VTBL_ENTRY alt_thunk_names22[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S20846C6D0Ev,_ZThn1068_N8S20846C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S20846C6D1Ev,_ZThn1068_N8S20846C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S20846C2D0Ev,_ZThn1068_N8S20846C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S20846C2D0Ev,_ZThn1128_N8S20846C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S20846C2D1Ev,_ZThn1068_N8S20846C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S20846C2D1Ev,_ZThn1128_N8S20846C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S20846C4D0Ev,_ZThn1068_N8S20846C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S20846C4D0Ev,_ZThn1128_N8S20846C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S20846C4D1Ev,_ZThn1068_N8S20846C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S20846C4D1Ev,_ZThn1128_N8S20846C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C13D0Ev,_ZTv0_n16_N9S20846C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1632_N9S20846C13D0Ev,_ZThn1212_N9S20846C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C13D1Ev,_ZTv0_n16_N9S20846C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1632_N9S20846C13D1Ev,_ZThn1212_N9S20846C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C13D0Ev,_ZTv0_n12_N9S20846C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N9S20846C13D0Ev,_ZThn1128_N9S20846C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C13D1Ev,_ZTv0_n12_N9S20846C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N9S20846C13D1Ev,_ZThn1128_N9S20846C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20846C13 = {  "S20846C13", // class name
  bases_S20846C13, 8,
  &(vtc_S20846C13[0]), // expected_vtbl_contents
  &(vtt_S20846C13[0]), // expected_vtt_contents
  ABISELECT(1664,1236), // object size
  NSPAIRA(_ZTI9S20846C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20846C13),32, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20846C13),16, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names22,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20846C11  : S3052C10 , virtual S20846C2 {
  void *s20846c11f0;
  char s20846c11f1[4];
  int s20846c11f2:11;
  void *s20846c11f3;
  void *s20846c11f4;
  int s20846c11f5[6];
  ::S20846C13 s20846c11f6[6];
  ~S20846C11(); // tgen
  S20846C11(); // tgen
};
//SIG(-1 S20846C11) C1{ BC2{ m Fp Fi FL Fp Fi} VBC3{ VBC4{ vd v1 Fs[6] FL[8] Fi} BC5{ VBC4 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp Fc[4] Fi:11 Fp[2] Fi[6] FC6{ VBC4 BC3 BC7{ VBC4 BC3 Fp[3] Fc:8 Fi[2] Fc FC4 Fp[3] FL[5] Fi} BC8{ vd m FC9{ VBC10{ vd v6 Fs[6] FL[8] Fi} BC11{ VBC10 FL Fp FL:54} v4 v5 Fc:0 Fp[8] Fc}} VBC5 Fp Fl FC7 FC8 FC5 Fi[2] FU12{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]}


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

static void Test_S20846C11()
{
  extern Class_Descriptor cd_S20846C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(645,1909)];
    init_test(&cd_S20846C11, buf);
    S20846C11 *dp, &lv = *(dp=new (buf) S20846C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(10304,7632), "sizeof(S20846C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20846C11)");
    check_base_class_offset(lv, (S3052C10*), ABISELECT(8,4), "S20846C11");
    check_base_class_offset(lv, (S20846C3*)(S20846C2*), ABISELECT(10200,7548), "S20846C11");
    check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*), ABISELECT(10200,7548), "S20846C11");
    check_base_class_offset(lv, (S20846C4*)(S20846C2*), ABISELECT(10096,7488), "S20846C11");
    check_base_class_offset(lv, (S20846C2*), ABISELECT(10096,7488), "S20846C11");
    check_field_offset(lv, s20846c11f0, ABISELECT(48,28), "S20846C11.s20846c11f0");
    check_field_offset(lv, s20846c11f1, ABISELECT(56,32), "S20846C11.s20846c11f1");
    set_bf_and_test(lv, s20846c11f2, ABISELECT(60,36), 0, 11, 1, "S20846C11");
    set_bf_and_test(lv, s20846c11f2, ABISELECT(60,36), 0, 11, hide_sll(1LL<<10), "S20846C11");
    check_field_offset(lv, s20846c11f3, ABISELECT(64,40), "S20846C11.s20846c11f3");
    check_field_offset(lv, s20846c11f4, ABISELECT(72,44), "S20846C11.s20846c11f4");
    check_field_offset(lv, s20846c11f5, ABISELECT(80,48), "S20846C11.s20846c11f5");
    check_field_offset(lv, s20846c11f6, ABISELECT(112,72), "S20846C11.s20846c11f6");
    test_class_info(&lv, &cd_S20846C11);
    dp->~S20846C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20846C11(Test_S20846C11, "S20846C11", ABISELECT(10304,7632));

#else // __cplusplus

extern void _ZN9S20846C11C1Ev();
extern void _ZN9S20846C11D1Ev();
Name_Map name_map_S20846C11[] = {
  NSPAIR(_ZN9S20846C11C1Ev),
  NSPAIR(_ZN9S20846C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S20846C3;
extern VTBL_ENTRY _ZTI8S20846C3[];
extern  VTBL_ENTRY _ZTV8S20846C3[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
static Base_Class bases_S20846C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C10,    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_S20846C3,    ABISELECT(10200,7548), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //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_S20846C4,    ABISELECT(10096,7488), //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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(10096,7488), //bcp->offset
    6, //bcp->virtual_function_table_offset
    6, //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},
  {0}};
extern VTBL_ENTRY _ZTI9S20846C11[];
extern void _ZN9S20846C11D1Ev();
extern void _ZN9S20846C11D0Ev();
extern void ABISELECT(_ZTv0_n32_N9S20846C11D1Ev,_ZTv0_n16_N9S20846C11D1Ev)();
extern void ABISELECT(_ZThn10096_N9S20846C11D1Ev,_ZThn7488_N9S20846C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C11D0Ev,_ZTv0_n16_N9S20846C11D0Ev)();
extern void ABISELECT(_ZThn10096_N9S20846C11D0Ev,_ZThn7488_N9S20846C11D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTv0_n24_N9S20846C11D1Ev,_ZTv0_n12_N9S20846C11D1Ev)();
extern void ABISELECT(_ZThn10200_N9S20846C11D1Ev,_ZThn7548_N9S20846C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C11D0Ev,_ZTv0_n12_N9S20846C11D0Ev)();
extern void ABISELECT(_ZThn10200_N9S20846C11D0Ev,_ZThn7548_N9S20846C11D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY vtc_S20846C11[] = {
  ABISELECT(10200,7548),
  ABISELECT(10096,7488),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&_ZN9S20846C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C11D0Ev,
  0,
  0,
  ABISELECT(-10096,-7488),
  ABISELECT(104,60),
  ABISELECT(-10096,-7488),
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C11D1Ev,_ZTv0_n16_N9S20846C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C11D0Ev,_ZTv0_n16_N9S20846C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  0,
  ABISELECT(-10200,-7548),
  ABISELECT(-10200,-7548),
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C11D1Ev,_ZTv0_n12_N9S20846C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C11D0Ev,_ZTv0_n12_N9S20846C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern VTBL_ENTRY _ZTV9S20846C11[];
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C11[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C2__9S20846C11[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZThn104_N8S20846C4D1Ev,_ZThn60_N8S20846C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void ABISELECT(_ZThn104_N8S20846C4D0Ev,_ZThn60_N8S20846C4D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C2__9S20846C11[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZThn104_N8S20846C2D1Ev,_ZThn60_N8S20846C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void ABISELECT(_ZThn104_N8S20846C2D0Ev,_ZThn60_N8S20846C2D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C2__9S20846C11[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
static  VTT_ENTRY vtt_S20846C11[] = {
  {&(_ZTV9S20846C11[4]),  4,23},
  {&(_ZTV9S20846C11[12]),  12,23},
  {&(_ZTV9S20846C11[20]),  20,23},
  {&(_tg__ZTV8S20846C2__9S20846C11[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C2__9S20846C11[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C2__9S20846C11[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C2__9S20846C11[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S20846C11[];
extern  VTBL_ENTRY _ZTV9S20846C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C11[];
static VTBL_ENTRY alt_thunk_names23[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20846C2D0Ev,_ZThn60_N8S20846C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20846C2D1Ev,_ZThn60_N8S20846C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20846C4D0Ev,_ZThn60_N8S20846C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20846C4D1Ev,_ZThn60_N8S20846C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C11D0Ev,_ZTv0_n12_N9S20846C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10200_N9S20846C11D0Ev,_ZThn7548_N9S20846C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C11D1Ev,_ZTv0_n12_N9S20846C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10200_N9S20846C11D1Ev,_ZThn7548_N9S20846C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C11D0Ev,_ZTv0_n16_N9S20846C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10096_N9S20846C11D0Ev,_ZThn7488_N9S20846C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C11D1Ev,_ZTv0_n16_N9S20846C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10096_N9S20846C11D1Ev,_ZThn7488_N9S20846C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20846C11 = {  "S20846C11", // class name
  bases_S20846C11, 4,
  &(vtc_S20846C11[0]), // expected_vtbl_contents
  &(vtt_S20846C11[0]), // expected_vtt_contents
  ABISELECT(10304,7632), // object size
  NSPAIRA(_ZTI9S20846C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20846C11),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20846C11),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names23,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20846C10  : S20846C6 , virtual S20846C2 , S20846C11 , virtual S20846C13 , virtual S3052C12 {
  ::S3052C12 s20846c10f0[2];
  int s20846c10f1;
  long double s20846c10f2;
  long double s20846c10f3;
  char  :0;
  void *s20846c10f5;
  virtual  ~S20846C10(); // _ZN9S20846C10D2Ev
  S20846C10(); // tgen
};
//SIG(-1 S20846C10) C1{ BC2{ VBC3{ vd v1 Fs[6] FL[8] Fi} BC4{ VBC3 BC5{ VBC3 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC3 Fp[3] FL[5] Fi} VBC4 BC6{ BC7{ m Fp Fi FL Fp Fi} VBC4 Fp Fc[4] Fi:11 Fp[2] Fi[6] FC8{ VBC3 BC4 BC2 BC9{ vd m FC10{ VBC11{ vd v6 Fs[6] FL[8] Fi} BC12{ VBC11 FL Fp FL:54} v4 v5 Fc:0 Fp[8] Fc}} VBC5 Fp Fl FC2 FC9 FC5 Fi[2] FU13{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} VBC8 VBC9 vd FC9[2] Fi FD FD Fc:0 Fp}


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

static void Test_S20846C10()
{
  extern Class_Descriptor cd_S20846C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(805,2373)];
    init_test(&cd_S20846C10, buf);
    S20846C10 *dp, &lv = *(dp=new (buf) S20846C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12864,9488), "sizeof(S20846C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20846C10)");
    /*is_ambiguous_... S20846C10::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C6*), ABISELECT(10888,8044), "S20846C10");
    /*is_ambiguous_... S20846C10::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C2*)(S20846C6*), ABISELECT(10888,8044), "S20846C10");
    /*is_ambiguous_... S20846C10::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*)(S20846C6*), ABISELECT(10888,8044), "S20846C10");
    /*is_ambiguous_... S20846C10::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C2*), ABISELECT(10888,8044), "S20846C10");
    /*is_ambiguous_... S20846C10::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*), ABISELECT(10888,8044), "S20846C10");
    check_base_class_offset(lv, (S20846C3*)(S20846C13*), ABISELECT(10888,8044), "S20846C10");
    /*is_ambiguous_... S20846C13::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C2*)(S20846C13*), ABISELECT(10888,8044), "S20846C10");
    /*is_ambiguous_... S20846C13::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*)(S20846C13*), ABISELECT(10888,8044), "S20846C10");
    check_base_class_offset(lv, (S20846C3*)(S20846C6*)(S20846C13*), ABISELECT(10888,8044), "S20846C10");
    check_base_class_offset(lv, (S20846C3*)(S20846C2*)(S20846C6*)(S20846C13*), ABISELECT(10888,8044), "S20846C10");
    check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*)(S20846C6*)(S20846C13*), ABISELECT(10888,8044), "S20846C10");
    /*is_ambiguous_... S20846C10::S20846C4 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*), ABISELECT(10888,8044), "S20846C10");
    /*is_ambiguous_... S20846C10::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C2*)(S20846C6*), 0, "S20846C10");
    /*is_ambiguous_... S20846C10::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C2*)(S20846C6*), 0, "S20846C10");
    /*is_ambiguous_... S20846C10::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C6*), 0, "S20846C10");
    /*is_ambiguous_... S20846C10::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C2*), ABISELECT(10984,8128), "S20846C10");
    /*is_ambiguous_... S20846C10::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C2*), ABISELECT(10984,8128), "S20846C10");
    check_base_class_offset(lv, (S20846C2*)(S20846C11*), ABISELECT(10984,8128), "S20846C10");
    check_base_class_offset(lv, (S3052C10*)(S20846C11*), ABISELECT(328,232), "S20846C10");
    check_base_class_offset(lv, (S20846C11*), ABISELECT(320,228), "S20846C10");
    /*is_ambiguous_... S20846C13::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C2*)(S20846C13*), ABISELECT(11088,8188), "S20846C10");
    /*is_ambiguous_... S20846C13::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C2*)(S20846C13*), ABISELECT(11088,8188), "S20846C10");
    check_base_class_offset(lv, (S20846C4*)(S20846C2*)(S20846C6*)(S20846C13*), ABISELECT(11192,8248), "S20846C10");
    check_base_class_offset(lv, (S20846C2*)(S20846C6*)(S20846C13*), ABISELECT(11192,8248), "S20846C10");
    check_base_class_offset(lv, (S20846C6*)(S20846C13*), ABISELECT(11192,8248), "S20846C10");
    check_base_class_offset(lv, (S3052C12*)(S20846C13*), ABISELECT(11504,8476), "S20846C10");
    /*is_ambiguous_... S20846C13::S20846C4 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C13*), ABISELECT(12624,9316), "S20846C10");
    check_base_class_offset(lv, (S20846C13*), ABISELECT(11088,8188), "S20846C10");
    /*is_ambiguous_... S20846C10::S3052C12 */ AMB_check_base_class_offset(lv, (S3052C12*), ABISELECT(12656,9340), "S20846C10");
    check_field_offset(lv, s20846c10f0, ABISELECT(10416,7716), "S20846C10.s20846c10f0");
    check_field_offset(lv, s20846c10f1, ABISELECT(10832,8012), "S20846C10.s20846c10f1");
    check_field_offset(lv, s20846c10f2, ABISELECT(10848,8016), "S20846C10.s20846c10f2");
    check_field_offset(lv, s20846c10f3, ABISELECT(10864,8028), "S20846C10.s20846c10f3");
    check_field_offset(lv, s20846c10f5, ABISELECT(10880,8040), "S20846C10.s20846c10f5");
    test_class_info(&lv, &cd_S20846C10);
    dp->~S20846C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20846C10(Test_S20846C10, "S20846C10", ABISELECT(12864,9488));

#else // __cplusplus

extern void _ZN9S20846C10C1Ev();
extern void _ZN9S20846C10D2Ev();
Name_Map name_map_S20846C10[] = {
  NSPAIR(_ZN9S20846C10C1Ev),
  NSPAIR(_ZN9S20846C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20846C3;
extern VTBL_ENTRY _ZTI8S20846C3[];
extern  VTBL_ENTRY _ZTV8S20846C3[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C6;
extern VTBL_ENTRY _ZTI8S20846C6[];
extern  VTBL_ENTRY _ZTV8S20846C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C6[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S20846C11;
extern VTBL_ENTRY _ZTI9S20846C11[];
extern  VTBL_ENTRY _ZTV9S20846C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C11[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C6;
extern VTBL_ENTRY _ZTI8S20846C6[];
extern  VTBL_ENTRY _ZTV8S20846C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C6[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C13;
extern VTBL_ENTRY _ZTI9S20846C13[];
extern  VTBL_ENTRY _ZTV9S20846C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C13[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
static Base_Class bases_S20846C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20846C3,    ABISELECT(10888,8044), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //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_S20846C4,    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
    13, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20846C2,    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
    3, //immediately_derived
  0, 0},
  {&cd_S20846C6,    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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20846C4,    ABISELECT(10984,8128), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(10984,8128), //bcp->offset
    24, //bcp->virtual_function_table_offset
    6, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C10,    ABISELECT(328,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
    7, //immediately_derived
  0, 0},
  {&cd_S20846C11,    ABISELECT(320,228), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20846C4,    ABISELECT(11088,8188), //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
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(11088,8188), //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
    6, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20846C4,    ABISELECT(11192,8248), //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
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(11192,8248), //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
    12, //immediately_derived
  0, 0},
  {&cd_S20846C6,    ABISELECT(11192,8248), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3052C12,    ABISELECT(11504,8476), //bcp->offset
    52, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20846C4,    ABISELECT(12624,9316), //bcp->offset
    56, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20846C13,    ABISELECT(11088,8188), //bcp->offset
    34, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C12,    ABISELECT(12656,9340), //bcp->offset
    62, //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
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20846C10[];
extern void _ZN9S20846C10D1Ev();
extern void _ZN9S20846C10D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZThn320_N9S20846C10D1Ev,_ZThn228_N9S20846C10D1Ev)();
extern void ABISELECT(_ZThn320_N9S20846C10D0Ev,_ZThn228_N9S20846C10D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20846C10D1Ev,_ZTv0_n12_N9S20846C10D1Ev)();
extern void ABISELECT(_ZThn10888_N9S20846C10D1Ev,_ZThn8044_N9S20846C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C10D0Ev,_ZTv0_n12_N9S20846C10D0Ev)();
extern void ABISELECT(_ZThn10888_N9S20846C10D0Ev,_ZThn8044_N9S20846C10D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
extern void ABISELECT(_ZTv0_n32_N9S20846C10D1Ev,_ZTv0_n16_N9S20846C10D1Ev)();
extern void ABISELECT(_ZThn10984_N9S20846C10D1Ev,_ZThn8128_N9S20846C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C10D0Ev,_ZTv0_n16_N9S20846C10D0Ev)();
extern void ABISELECT(_ZThn10984_N9S20846C10D0Ev,_ZThn8128_N9S20846C10D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTv0_n40_N9S20846C10D1Ev,_ZTv0_n20_N9S20846C10D1Ev)();
extern void ABISELECT(_ZThn11088_N9S20846C10D1Ev,_ZThn8188_N9S20846C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20846C10D0Ev,_ZTv0_n20_N9S20846C10D0Ev)();
extern void ABISELECT(_ZThn11088_N9S20846C10D0Ev,_ZThn8188_N9S20846C10D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTvn104_n40_N9S20846C10D1Ev,_ZTvn60_n20_N9S20846C10D1Ev)();
extern void ABISELECT(_ZTvn104_n40_N9S20846C10D0Ev,_ZTvn60_n20_N9S20846C10D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTvn416_n40_N9S20846C10D1Ev,_ZTvn288_n20_N9S20846C10D1Ev)();
extern void ABISELECT(_ZTvn416_n40_N9S20846C10D0Ev,_ZTvn288_n20_N9S20846C10D0Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20846C10D1Ev,_ZTv0_n16_N9S20846C10D1Ev)();
extern void ABISELECT(_ZThn12624_N9S20846C10D1Ev,_ZThn9316_N9S20846C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C10D0Ev,_ZTv0_n16_N9S20846C10D0Ev)();
extern void ABISELECT(_ZThn12624_N9S20846C10D0Ev,_ZThn9316_N9S20846C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C10D1Ev,_ZTv0_n12_N9S20846C10D1Ev)();
extern void ABISELECT(_ZThn12656_N9S20846C10D1Ev,_ZThn9340_N9S20846C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C10D0Ev,_ZTv0_n12_N9S20846C10D0Ev)();
extern void ABISELECT(_ZThn12656_N9S20846C10D0Ev,_ZThn9340_N9S20846C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20846C10[] = {
  ABISELECT(12656,9340),
  ABISELECT(12624,9316),
  ABISELECT(11088,8188),
  ABISELECT(10984,8128),
  ABISELECT(10888,8044),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&_ZN9S20846C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C10D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  ABISELECT(10568,7816),
  ABISELECT(10664,7900),
  ABISELECT(-320,-228),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N9S20846C10D1Ev,_ZThn228_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N9S20846C10D0Ev,_ZThn228_N9S20846C10D0Ev),
  0,
  ABISELECT(-10888,-8044),
  ABISELECT(-10888,-8044),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C10D1Ev,_ZTv0_n12_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C10D0Ev,_ZTv0_n12_N9S20846C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
  0,
  0,
  ABISELECT(-10984,-8128),
  ABISELECT(-96,-84),
  ABISELECT(-10984,-8128),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C10D1Ev,_ZTv0_n16_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C10D0Ev,_ZTv0_n16_N9S20846C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  0,
  0,
  ABISELECT(-11088,-8188),
  ABISELECT(1536,1128),
  ABISELECT(-200,-144),
  ABISELECT(-11088,-8188),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C10D1Ev,_ZTv0_n20_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C10D0Ev,_ZTv0_n20_N9S20846C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  ABISELECT(-304,-204),
  ABISELECT(-11192,-8248),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N9S20846C10D1Ev,_ZTvn60_n20_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N9S20846C10D0Ev,_ZTvn60_n20_N9S20846C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  ABISELECT(-11504,-8476),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N9S20846C10D1Ev,_ZTvn288_n20_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N9S20846C10D0Ev,_ZTvn288_n20_N9S20846C10D0Ev),
  ABISELECT(-12624,-9316),
  ABISELECT(-1736,-1272),
  ABISELECT(-12624,-9316),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C10D1Ev,_ZTv0_n16_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C10D0Ev,_ZTv0_n16_N9S20846C10D0Ev),
  ABISELECT(-12656,-9340),
  ABISELECT(-12656,-9340),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C10D1Ev,_ZTv0_n12_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C10D0Ev,_ZTv0_n12_N9S20846C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S20846C10[];
extern void _ZN8S20846C6D1Ev();
extern void _ZN8S20846C6D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C6__9S20846C10[] = {
  ABISELECT(10888,8044),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&_ZN8S20846C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C28S20846C6__9S20846C10[] = {
  ABISELECT(10888,8044),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C28S20846C6__9S20846C10[] = {
  ABISELECT(10888,8044),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZThn10888_N8S20846C4D1Ev,_ZThn8044_N8S20846C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void ABISELECT(_ZThn10888_N8S20846C4D0Ev,_ZThn8044_N8S20846C4D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C28S20846C6__9S20846C10[] = {
  0,
  ABISELECT(-10888,-8044),
  ABISELECT(-10888,-8044),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZThn10888_N8S20846C2D1Ev,_ZThn8044_N8S20846C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void ABISELECT(_ZThn10888_N8S20846C2D0Ev,_ZThn8044_N8S20846C2D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C28S20846C6__9S20846C10[] = {
  0,
  ABISELECT(-10888,-8044),
  ABISELECT(-10888,-8044),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev)();
extern void ABISELECT(_ZThn10888_N8S20846C6D1Ev,_ZThn8044_N8S20846C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev)();
extern void ABISELECT(_ZThn10888_N8S20846C6D0Ev,_ZThn8044_N8S20846C6D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C6__9S20846C10[] = {
  0,
  ABISELECT(-10888,-8044),
  ABISELECT(-10888,-8044),
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN9S20846C11D1Ev();
extern void _ZN9S20846C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C11__9S20846C10[] = {
  ABISELECT(10568,7816),
  ABISELECT(10664,7900),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&_ZN9S20846C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C11D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C11D1Ev,_ZTv0_n16_N9S20846C11D1Ev)();
extern void ABISELECT(_ZThn10664_N9S20846C11D1Ev,_ZThn7900_N9S20846C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C11D0Ev,_ZTv0_n16_N9S20846C11D0Ev)();
extern void ABISELECT(_ZThn10664_N9S20846C11D0Ev,_ZThn7900_N9S20846C11D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C11__9S20846C10[] = {
  0,
  0,
  ABISELECT(-10664,-7900),
  ABISELECT(-96,-84),
  ABISELECT(-10664,-7900),
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C11D1Ev,_ZTv0_n16_N9S20846C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C11D0Ev,_ZTv0_n16_N9S20846C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C11D1Ev,_ZTv0_n12_N9S20846C11D1Ev)();
extern void ABISELECT(_ZThn10568_N9S20846C11D1Ev,_ZThn7816_N9S20846C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C11D0Ev,_ZTv0_n12_N9S20846C11D0Ev)();
extern void ABISELECT(_ZThn10568_N9S20846C11D0Ev,_ZThn7816_N9S20846C11D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C11__9S20846C10[] = {
  0,
  ABISELECT(-10568,-7816),
  ABISELECT(-10568,-7816),
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C11D1Ev,_ZTv0_n12_N9S20846C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C11D0Ev,_ZTv0_n12_N9S20846C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__A1__9S20846C10[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C2__A1__9S20846C10[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C2__A1__9S20846C10[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C2__A1__9S20846C10[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN9S20846C13D1Ev();
extern void _ZN9S20846C13D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C13__9S20846C10[] = {
  ABISELECT(1536,1128),
  ABISELECT(-200,-144),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C13[0]),
  (VTBL_ENTRY)&_ZN9S20846C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C13D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C29S20846C13__A2__9S20846C10[] = {
  ABISELECT(-200,-144),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C29S20846C13__A2__9S20846C10[] = {
  ABISELECT(-200,-144),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C29S20846C13__A2__9S20846C10[] = {
  0,
  ABISELECT(200,144),
  ABISELECT(200,144),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C29S20846C13__A2__9S20846C10[] = {
  0,
  ABISELECT(200,144),
  ABISELECT(200,144),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN8S20846C6D1Ev();
extern void _ZN8S20846C6D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C69S20846C13__A1__9S20846C10[] = {
  ABISELECT(-304,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&_ZN8S20846C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C28S20846C69S20846C13__A3__9S20846C10[] = {
  ABISELECT(-304,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C28S20846C69S20846C13__A3__9S20846C10[] = {
  ABISELECT(-304,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C28S20846C69S20846C13__A3__9S20846C10[] = {
  0,
  ABISELECT(304,204),
  ABISELECT(304,204),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C28S20846C69S20846C13__A3__9S20846C10[] = {
  0,
  ABISELECT(304,204),
  ABISELECT(304,204),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C69S20846C13__A1__9S20846C10[] = {
  0,
  ABISELECT(304,204),
  ABISELECT(304,204),
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C13D1Ev,_ZTv0_n12_N9S20846C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20846C13D0Ev,_ZTv0_n12_N9S20846C13D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C13__9S20846C10[] = {
  0,
  ABISELECT(200,144),
  ABISELECT(200,144),
  (VTBL_ENTRY)&(_ZTI9S20846C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C13D1Ev,_ZTv0_n12_N9S20846C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C13D0Ev,_ZTv0_n12_N9S20846C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZThn104_N9S20846C13D1Ev,_ZThn60_N9S20846C13D1Ev)();
extern void ABISELECT(_ZThn104_N9S20846C13D0Ev,_ZThn60_N9S20846C13D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C6__9S20846C13__9S20846C10[] = {
  ABISELECT(-304,-204),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI9S20846C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S20846C13D1Ev,_ZThn60_N9S20846C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S20846C13D0Ev,_ZThn60_N9S20846C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C13D1Ev,_ZTv0_n16_N9S20846C13D1Ev)();
extern void ABISELECT(_ZThn1536_N9S20846C13D1Ev,_ZThn1128_N9S20846C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C13D0Ev,_ZTv0_n16_N9S20846C13D0Ev)();
extern void ABISELECT(_ZThn1536_N9S20846C13D0Ev,_ZThn1128_N9S20846C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20846C4__A2__9S20846C13__9S20846C10[] = {
  ABISELECT(-1536,-1128),
  ABISELECT(-1736,-1272),
  ABISELECT(-1536,-1128),
  (VTBL_ENTRY)&(_ZTI9S20846C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C13D1Ev,_ZTv0_n16_N9S20846C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C13D0Ev,_ZTv0_n16_N9S20846C13D0Ev),
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C4__A4__9S20846C10[] = {
  ABISELECT(-1736,-1272),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C4__A4__9S20846C10[] = {
  0,
  ABISELECT(1736,1272),
  ABISELECT(1736,1272),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
static  VTT_ENTRY vtt_S20846C10[] = {
  {&(_ZTV9S20846C10[7]),  7,67},
  {&(_tg__ZTV8S20846C6__9S20846C10[3]),  3,7},
  {&(_tg__ZTV8S20846C28S20846C6__9S20846C10[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C28S20846C6__9S20846C10[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C28S20846C6__9S20846C10[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C28S20846C6__9S20846C10[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C6__9S20846C10[4]),  4,7},
  {&(_tg__ZTV9S20846C11__9S20846C10[4]),  4,6},
  {&(_tg__ZTV8S20846C2__9S20846C11__9S20846C10[6]),  6,10},
  {&(_tg__ZTV8S20846C3__9S20846C11__9S20846C10[4]),  4,7},
  {&(_ZTV9S20846C10[21]),  21,67},
  {&(_ZTV9S20846C10[30]),  30,67},
  {&(_ZTV9S20846C10[15]),  15,67},
  {&(_ZTV9S20846C10[41]),  41,67},
  {&(_ZTV9S20846C10[48]),  48,67},
  {&(_ZTV9S20846C10[54]),  54,67},
  {&(_ZTV9S20846C10[60]),  60,67},
  {&(_ZTV9S20846C10[65]),  65,67},
  {&(_tg__ZTV8S20846C2__A1__9S20846C10[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C2__A1__9S20846C10[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C2__A1__9S20846C10[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C2__A1__9S20846C10[4]),  4,7},
  {&(_tg__ZTV9S20846C13__9S20846C10[4]),  4,8},
  {&(_tg__ZTV8S20846C29S20846C13__A2__9S20846C10[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C29S20846C13__A2__9S20846C10[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C29S20846C13__A2__9S20846C10[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C29S20846C13__A2__9S20846C10[4]),  4,7},
  {&(_tg__ZTV8S20846C69S20846C13__A1__9S20846C10[3]),  3,7},
  {&(_tg__ZTV8S20846C28S20846C69S20846C13__A3__9S20846C10[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C28S20846C69S20846C13__A3__9S20846C10[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C28S20846C69S20846C13__A3__9S20846C10[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C28S20846C69S20846C13__A3__9S20846C10[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C69S20846C13__A1__9S20846C10[4]),  4,7},
  {&(_tg__ZTV8S20846C3__9S20846C13__9S20846C10[4]),  4,7},
  {&(_tg__ZTV8S20846C6__9S20846C13__9S20846C10[3]),  3,7},
  {&(_tg__ZTV8S20846C4__A2__9S20846C13__9S20846C10[4]),  4,6},
  {&(_tg__ZTV8S20846C4__A4__9S20846C10[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C4__A4__9S20846C10[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S20846C10[];
extern  VTBL_ENTRY _ZTV9S20846C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C10[];
static VTBL_ENTRY alt_thunk_names24[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C13D0Ev,_ZTv0_n16_N9S20846C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N9S20846C13D0Ev,_ZThn1128_N9S20846C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C13D1Ev,_ZTv0_n16_N9S20846C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N9S20846C13D1Ev,_ZThn1128_N9S20846C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C11D0Ev,_ZTv0_n12_N9S20846C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10568_N9S20846C11D0Ev,_ZThn7816_N9S20846C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C11D1Ev,_ZTv0_n12_N9S20846C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10568_N9S20846C11D1Ev,_ZThn7816_N9S20846C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C11D0Ev,_ZTv0_n16_N9S20846C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10664_N9S20846C11D0Ev,_ZThn7900_N9S20846C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C11D1Ev,_ZTv0_n16_N9S20846C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10664_N9S20846C11D1Ev,_ZThn7900_N9S20846C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N8S20846C6D0Ev,_ZThn8044_N8S20846C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N8S20846C6D1Ev,_ZThn8044_N8S20846C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N8S20846C2D0Ev,_ZThn8044_N8S20846C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N8S20846C2D1Ev,_ZThn8044_N8S20846C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N8S20846C4D0Ev,_ZThn8044_N8S20846C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N8S20846C4D1Ev,_ZThn8044_N8S20846C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C10D0Ev,_ZTv0_n20_N9S20846C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11088_N9S20846C10D0Ev,_ZThn8188_N9S20846C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C10D1Ev,_ZTv0_n20_N9S20846C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11088_N9S20846C10D1Ev,_ZThn8188_N9S20846C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C10D0Ev,_ZTv0_n16_N9S20846C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12624_N9S20846C10D0Ev,_ZThn9316_N9S20846C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10984_N9S20846C10D0Ev,_ZThn8128_N9S20846C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C10D1Ev,_ZTv0_n16_N9S20846C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12624_N9S20846C10D1Ev,_ZThn9316_N9S20846C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10984_N9S20846C10D1Ev,_ZThn8128_N9S20846C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C10D0Ev,_ZTv0_n12_N9S20846C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12656_N9S20846C10D0Ev,_ZThn9340_N9S20846C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N9S20846C10D0Ev,_ZThn8044_N9S20846C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C10D1Ev,_ZTv0_n12_N9S20846C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12656_N9S20846C10D1Ev,_ZThn9340_N9S20846C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N9S20846C10D1Ev,_ZThn8044_N9S20846C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20846C10 = {  "S20846C10", // class name
  bases_S20846C10, 17,
  &(vtc_S20846C10[0]), // expected_vtbl_contents
  &(vtt_S20846C10[0]), // expected_vtt_contents
  ABISELECT(12864,9488), // object size
  NSPAIRA(_ZTI9S20846C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20846C10),67, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20846C10),38, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names24,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20846C18  : S3052C12 , virtual S20846C3 , virtual S20846C2 {
  ::S20846C2 s20846c18f0[2];
  long double s20846c18f1;
  ::S3052C12 s20846c18f2;
  void *s20846c18f3[3];
  ::S20846C6 s20846c18f4;
  int s20846c18f5;
  ::S3052C16 s20846c18f6;
  int s20846c18f7;
  virtual void  v7(); // _ZN9S20846C182v7Ev
  ~S20846C18(); // tgen
  S20846C18(); // tgen
};
//SIG(-1 S20846C18) C1{ BC2{ vd m FC3{ VBC4{ vd v7 Fs[6] FL[8] Fi} BC5{ VBC4 FL Fp FL:54} v5 v6 Fc:0 Fp[8] Fc}} VBC6{ vd v2 Fs[6] FL[8] Fi} VBC7{ VBC6 BC8{ VBC6 FL Fp FL:54} v3 v4 Fc:0 Fp[8] Fc} v1 FC7[2] FD FC2 Fp[3] FC9{ VBC6 BC7 Fp[3] Fc:8 Fi[2] Fc FC6 Fp[3] FL[5] Fi} Fi FU10{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi}


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

static void Test_S20846C18()
{
  extern Class_Descriptor cd_S20846C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(95,272)];
    init_test(&cd_S20846C18, buf);
    S20846C18 *dp, &lv = *(dp=new (buf) S20846C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1504,1084), "sizeof(S20846C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20846C18)");
    check_base_class_offset(lv, (S3052C12*), 0, "S20846C18");
    check_base_class_offset(lv, (S20846C3*), ABISELECT(1296,940), "S20846C18");
    check_base_class_offset(lv, (S20846C3*)(S20846C2*), ABISELECT(1296,940), "S20846C18");
    check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*), ABISELECT(1296,940), "S20846C18");
    check_base_class_offset(lv, (S20846C4*)(S20846C2*), ABISELECT(1392,1024), "S20846C18");
    check_base_class_offset(lv, (S20846C2*), ABISELECT(1392,1024), "S20846C18");
    check_field_offset(lv, s20846c18f0, ABISELECT(208,148), "S20846C18.s20846c18f0");
    check_field_offset(lv, s20846c18f1, ABISELECT(608,436), "S20846C18.s20846c18f1");
    check_field_offset(lv, s20846c18f2, ABISELECT(624,448), "S20846C18.s20846c18f2");
    check_field_offset(lv, s20846c18f3, ABISELECT(832,596), "S20846C18.s20846c18f3");
    check_field_offset(lv, s20846c18f4, ABISELECT(856,608), "S20846C18.s20846c18f4");
    check_field_offset(lv, s20846c18f5, ABISELECT(1264,920), "S20846C18.s20846c18f5");
    check_field_offset(lv, s20846c18f6, ABISELECT(1272,924), "S20846C18.s20846c18f6");
    check_field_offset(lv, s20846c18f7, ABISELECT(1288,936), "S20846C18.s20846c18f7");
    test_class_info(&lv, &cd_S20846C18);
    dp->~S20846C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20846C18(Test_S20846C18, "S20846C18", ABISELECT(1504,1084));

#else // __cplusplus

extern void _ZN9S20846C18C1Ev();
extern void _ZN9S20846C18D1Ev();
Name_Map name_map_S20846C18[] = {
  NSPAIR(_ZN9S20846C18C1Ev),
  NSPAIR(_ZN9S20846C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S20846C3;
extern VTBL_ENTRY _ZTI8S20846C3[];
extern  VTBL_ENTRY _ZTV8S20846C3[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
static Base_Class bases_S20846C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20846C3,    ABISELECT(1296,940), //bcp->offset
    7, //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_S20846C4,    ABISELECT(1392,1024), //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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(1392,1024), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20846C18[];
extern void _ZN9S20846C18D1Ev();
extern void _ZN9S20846C18D0Ev();
extern void _ZN9S20846C182v7Ev();
extern void ABISELECT(_ZTv0_n24_N9S20846C18D1Ev,_ZTv0_n12_N9S20846C18D1Ev)();
extern void ABISELECT(_ZThn1296_N9S20846C18D1Ev,_ZThn940_N9S20846C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C18D0Ev,_ZTv0_n12_N9S20846C18D0Ev)();
extern void ABISELECT(_ZThn1296_N9S20846C18D0Ev,_ZThn940_N9S20846C18D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
extern void ABISELECT(_ZTv0_n32_N9S20846C18D1Ev,_ZTv0_n16_N9S20846C18D1Ev)();
extern void ABISELECT(_ZThn1392_N9S20846C18D1Ev,_ZThn1024_N9S20846C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C18D0Ev,_ZTv0_n16_N9S20846C18D0Ev)();
extern void ABISELECT(_ZThn1392_N9S20846C18D0Ev,_ZThn1024_N9S20846C18D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY vtc_S20846C18[] = {
  ABISELECT(1392,1024),
  ABISELECT(1296,940),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C18[0]),
  (VTBL_ENTRY)&_ZN9S20846C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C18D0Ev,
  (VTBL_ENTRY)&_ZN9S20846C182v7Ev,
  0,
  ABISELECT(-1296,-940),
  ABISELECT(-1296,-940),
  (VTBL_ENTRY)&(_ZTI9S20846C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C18D1Ev,_ZTv0_n12_N9S20846C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C18D0Ev,_ZTv0_n12_N9S20846C18D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
  0,
  0,
  ABISELECT(-1392,-1024),
  ABISELECT(-96,-84),
  ABISELECT(-1392,-1024),
  (VTBL_ENTRY)&(_ZTI9S20846C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C18D1Ev,_ZTv0_n16_N9S20846C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C18D0Ev,_ZTv0_n16_N9S20846C18D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern VTBL_ENTRY _ZTV9S20846C18[];
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C18[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C2__9S20846C18[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C2__9S20846C18[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C2__9S20846C18[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
static  VTT_ENTRY vtt_S20846C18[] = {
  {&(_ZTV9S20846C18[4]),  4,24},
  {&(_ZTV9S20846C18[11]),  11,24},
  {&(_ZTV9S20846C18[20]),  20,24},
  {&(_tg__ZTV8S20846C2__9S20846C18[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C2__9S20846C18[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C2__9S20846C18[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C2__9S20846C18[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S20846C18[];
extern  VTBL_ENTRY _ZTV9S20846C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C18[];
static VTBL_ENTRY alt_thunk_names25[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C18D0Ev,_ZTv0_n16_N9S20846C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N9S20846C18D0Ev,_ZThn1024_N9S20846C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C18D1Ev,_ZTv0_n16_N9S20846C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N9S20846C18D1Ev,_ZThn1024_N9S20846C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C18D0Ev,_ZTv0_n12_N9S20846C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1296_N9S20846C18D0Ev,_ZThn940_N9S20846C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C18D1Ev,_ZTv0_n12_N9S20846C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1296_N9S20846C18D1Ev,_ZThn940_N9S20846C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20846C18 = {  "S20846C18", // class name
  bases_S20846C18, 4,
  &(vtc_S20846C18[0]), // expected_vtbl_contents
  &(vtt_S20846C18[0]), // expected_vtt_contents
  ABISELECT(1504,1084), // object size
  NSPAIRA(_ZTI9S20846C18),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20846C18),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20846C18),7, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names25,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20846C17  : virtual S20846C2 , virtual S20846C11 , S20846C18 {
  void *s20846c17f0;
  ::S3052C22_nt s20846c17f1;
  ::S20846C3 s20846c17f2;
  __tsi64 s20846c17f3;
  ::S3052C13 s20846c17f4;
  __tsi64 s20846c17f5[6];
  __tsi64 s20846c17f6;
  ::S20846C6 s20846c17f7;
  virtual void  v8(); // _ZN9S20846C172v8Ev
  ~S20846C17(); // tgen
  S20846C17(); // tgen
};
//SIG(-1 S20846C17) C1{ VBC2{ VBC3{ vd v2 Fs[6] FL[8] Fi} BC4{ VBC3 FL Fp FL:54} v3 v4 Fc:0 Fp[8] Fc} VBC5{ BC6{ m Fp Fi FL Fp Fi} VBC2 Fp Fc[4] Fi:11 Fp[2] Fi[6] FC7{ VBC3 BC2 BC8{ VBC3 BC2 Fp[3] Fc:8 Fi[2] Fc FC3 Fp[3] FL[5] Fi} BC9{ vd m FC10{ VBC11{ vd v8 Fs[6] FL[8] Fi} BC12{ VBC11 FL Fp FL:54} v6 v7 Fc:0 Fp[8] Fc}} VBC4 Fp Fl FC8 FC9 FC4 Fi[2] FU13{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} BC14{ BC9 VBC3 VBC2 v5 FC2[2] FD FC9 Fp[3] FC8 Fi FU15{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi} v1 Fp FC16{} FC3 FL FU13 FL[6] FL FC8}


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

static void Test_S20846C17()
{
  extern Class_Descriptor cd_S20846C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(764,2264)];
    init_test(&cd_S20846C17, buf);
    S20846C17 *dp, &lv = *(dp=new (buf) S20846C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12208,9052), "sizeof(S20846C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20846C17)");
    check_base_class_offset(lv, (S20846C3*)(S20846C2*), ABISELECT(2008,1480), "S20846C17");
    check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*), ABISELECT(2008,1480), "S20846C17");
    check_base_class_offset(lv, (S20846C3*)(S20846C18*), ABISELECT(2008,1480), "S20846C17");
    check_base_class_offset(lv, (S20846C4*)(S20846C2*), ABISELECT(1904,1420), "S20846C17");
    check_base_class_offset(lv, (S20846C2*), ABISELECT(1904,1420), "S20846C17");
    check_base_class_offset(lv, (S20846C2*)(S20846C11*), ABISELECT(1904,1420), "S20846C17");
    check_base_class_offset(lv, (S20846C2*)(S20846C18*), ABISELECT(1904,1420), "S20846C17");
    check_base_class_offset(lv, (S3052C10*)(S20846C11*), ABISELECT(2120,1568), "S20846C17");
    check_base_class_offset(lv, (S20846C11*), ABISELECT(2112,1564), "S20846C17");
    check_base_class_offset(lv, (S3052C12*)(S20846C18*), 0, "S20846C17");
    check_base_class_offset(lv, (S20846C18*), 0, "S20846C17");
    check_field_offset(lv, s20846c17f0, ABISELECT(1296,940), "S20846C17.s20846c17f0");
    check_field_offset(lv, s20846c17f1, ABISELECT(1304,944), "S20846C17.s20846c17f1");
    check_field_offset(lv, s20846c17f2, ABISELECT(1312,948), "S20846C17.s20846c17f2");
    check_field_offset(lv, s20846c17f3, ABISELECT(1408,1032), "S20846C17.s20846c17f3");
    check_field_offset(lv, s20846c17f4, ABISELECT(1424,1040), "S20846C17.s20846c17f4");
    check_field_offset(lv, s20846c17f5, ABISELECT(1440,1052), "S20846C17.s20846c17f5");
    check_field_offset(lv, s20846c17f6, ABISELECT(1488,1100), "S20846C17.s20846c17f6");
    check_field_offset(lv, s20846c17f7, ABISELECT(1496,1108), "S20846C17.s20846c17f7");
    test_class_info(&lv, &cd_S20846C17);
    dp->~S20846C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20846C17(Test_S20846C17, "S20846C17", ABISELECT(12208,9052));

#else // __cplusplus

extern void _ZN9S20846C17C1Ev();
extern void _ZN9S20846C17D1Ev();
Name_Map name_map_S20846C17[] = {
  NSPAIR(_ZN9S20846C17C1Ev),
  NSPAIR(_ZN9S20846C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20846C3;
extern VTBL_ENTRY _ZTI8S20846C3[];
extern  VTBL_ENTRY _ZTV8S20846C3[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S20846C11;
extern VTBL_ENTRY _ZTI9S20846C11[];
extern  VTBL_ENTRY _ZTV9S20846C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C11[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S20846C18;
extern VTBL_ENTRY _ZTI9S20846C18[];
extern  VTBL_ENTRY _ZTV9S20846C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C18[];
static Base_Class bases_S20846C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20846C3,    ABISELECT(2008,1480), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //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_S20846C4,    ABISELECT(1904,1420), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(1904,1420), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //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},
  {&cd_S3052C10,    ABISELECT(2120,1568), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20846C11,    ABISELECT(2112,1564), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S20846C18,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20846C17[];
extern void _ZN9S20846C17D1Ev();
extern void _ZN9S20846C17D0Ev();
extern void _ZN9S20846C182v7Ev();
extern void _ZN9S20846C172v8Ev();
extern void ABISELECT(_ZTv0_n32_N9S20846C17D1Ev,_ZTv0_n16_N9S20846C17D1Ev)();
extern void ABISELECT(_ZThn1904_N9S20846C17D1Ev,_ZThn1420_N9S20846C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C17D0Ev,_ZTv0_n16_N9S20846C17D0Ev)();
extern void ABISELECT(_ZThn1904_N9S20846C17D0Ev,_ZThn1420_N9S20846C17D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTv0_n24_N9S20846C17D1Ev,_ZTv0_n12_N9S20846C17D1Ev)();
extern void ABISELECT(_ZThn2008_N9S20846C17D1Ev,_ZThn1480_N9S20846C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C17D0Ev,_ZTv0_n12_N9S20846C17D0Ev)();
extern void ABISELECT(_ZThn2008_N9S20846C17D0Ev,_ZThn1480_N9S20846C17D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S20846C17D1Ev,_ZTv0_n20_N9S20846C17D1Ev)();
extern void ABISELECT(_ZThn2112_N9S20846C17D1Ev,_ZThn1564_N9S20846C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20846C17D0Ev,_ZTv0_n20_N9S20846C17D0Ev)();
extern void ABISELECT(_ZThn2112_N9S20846C17D0Ev,_ZThn1564_N9S20846C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20846C17[] = {
  ABISELECT(2112,1564),
  ABISELECT(1904,1420),
  ABISELECT(2008,1480),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C17[0]),
  (VTBL_ENTRY)&_ZN9S20846C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C17D0Ev,
  (VTBL_ENTRY)&_ZN9S20846C182v7Ev,
  (VTBL_ENTRY)&_ZN9S20846C172v8Ev,
  0,
  0,
  ABISELECT(-1904,-1420),
  ABISELECT(104,60),
  ABISELECT(-1904,-1420),
  (VTBL_ENTRY)&(_ZTI9S20846C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C17D1Ev,_ZTv0_n16_N9S20846C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C17D0Ev,_ZTv0_n16_N9S20846C17D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  0,
  ABISELECT(-2008,-1480),
  ABISELECT(-2008,-1480),
  (VTBL_ENTRY)&(_ZTI9S20846C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C17D1Ev,_ZTv0_n12_N9S20846C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C17D0Ev,_ZTv0_n12_N9S20846C17D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
  ABISELECT(-2112,-1564),
  ABISELECT(-104,-84),
  ABISELECT(-208,-144),
  ABISELECT(-2112,-1564),
  (VTBL_ENTRY)&(_ZTI9S20846C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C17D1Ev,_ZTv0_n20_N9S20846C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C17D0Ev,_ZTv0_n20_N9S20846C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S20846C17[];
extern void _ZN9S20846C18D1Ev();
extern void _ZN9S20846C18D0Ev();
extern void _ZN9S20846C182v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C18__9S20846C17[] = {
  ABISELECT(1904,1420),
  ABISELECT(2008,1480),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C18[0]),
  (VTBL_ENTRY)&_ZN9S20846C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C18D0Ev,
  (VTBL_ENTRY)&_ZN9S20846C182v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C18D1Ev,_ZTv0_n12_N9S20846C18D1Ev)();
extern void ABISELECT(_ZThn2008_N9S20846C18D1Ev,_ZThn1480_N9S20846C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C18D0Ev,_ZTv0_n12_N9S20846C18D0Ev)();
extern void ABISELECT(_ZThn2008_N9S20846C18D0Ev,_ZThn1480_N9S20846C18D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C18__9S20846C17[] = {
  0,
  ABISELECT(-2008,-1480),
  ABISELECT(-2008,-1480),
  (VTBL_ENTRY)&(_ZTI9S20846C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C18D1Ev,_ZTv0_n12_N9S20846C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C18D0Ev,_ZTv0_n12_N9S20846C18D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C18D1Ev,_ZTv0_n16_N9S20846C18D1Ev)();
extern void ABISELECT(_ZThn1904_N9S20846C18D1Ev,_ZThn1420_N9S20846C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C18D0Ev,_ZTv0_n16_N9S20846C18D0Ev)();
extern void ABISELECT(_ZThn1904_N9S20846C18D0Ev,_ZThn1420_N9S20846C18D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C18__9S20846C17[] = {
  0,
  0,
  ABISELECT(-1904,-1420),
  ABISELECT(104,60),
  ABISELECT(-1904,-1420),
  (VTBL_ENTRY)&(_ZTI9S20846C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C18D1Ev,_ZTv0_n16_N9S20846C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C18D0Ev,_ZTv0_n16_N9S20846C18D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C17[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C2__9S20846C17[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZThn104_N8S20846C4D1Ev,_ZThn60_N8S20846C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void ABISELECT(_ZThn104_N8S20846C4D0Ev,_ZThn60_N8S20846C4D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C2__9S20846C17[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZThn104_N8S20846C2D1Ev,_ZThn60_N8S20846C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void ABISELECT(_ZThn104_N8S20846C2D0Ev,_ZThn60_N8S20846C2D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C2__9S20846C17[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN9S20846C11D1Ev();
extern void _ZN9S20846C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C11__9S20846C17[] = {
  ABISELECT(-104,-84),
  ABISELECT(-208,-144),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&_ZN9S20846C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C11D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C11D1Ev,_ZTv0_n16_N9S20846C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20846C11D0Ev,_ZTv0_n16_N9S20846C11D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C11__9S20846C17[] = {
  0,
  0,
  ABISELECT(208,144),
  ABISELECT(104,60),
  ABISELECT(208,144),
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C11D1Ev,_ZTv0_n16_N9S20846C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C11D0Ev,_ZTv0_n16_N9S20846C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C11D1Ev,_ZTv0_n12_N9S20846C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20846C11D0Ev,_ZTv0_n12_N9S20846C11D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C11__9S20846C17[] = {
  0,
  ABISELECT(104,84),
  ABISELECT(104,84),
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C11D1Ev,_ZTv0_n12_N9S20846C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C11D0Ev,_ZTv0_n12_N9S20846C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
static  VTT_ENTRY vtt_S20846C17[] = {
  {&(_ZTV9S20846C17[5]),  5,33},
  {&(_tg__ZTV9S20846C18__9S20846C17[4]),  4,7},
  {&(_tg__ZTV8S20846C3__9S20846C18__9S20846C17[4]),  4,7},
  {&(_tg__ZTV8S20846C2__9S20846C18__9S20846C17[6]),  6,10},
  {&(_ZTV9S20846C17[15]),  15,33},
  {&(_ZTV9S20846C17[23]),  23,33},
  {&(_ZTV9S20846C17[31]),  31,33},
  {&(_tg__ZTV8S20846C2__9S20846C17[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C2__9S20846C17[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C2__9S20846C17[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C2__9S20846C17[4]),  4,7},
  {&(_tg__ZTV9S20846C11__9S20846C17[4]),  4,6},
  {&(_tg__ZTV8S20846C2__9S20846C11__9S20846C17[6]),  6,10},
  {&(_tg__ZTV8S20846C3__9S20846C11__9S20846C17[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S20846C17[];
extern  VTBL_ENTRY _ZTV9S20846C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C17[];
static VTBL_ENTRY alt_thunk_names26[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20846C2D0Ev,_ZThn60_N8S20846C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20846C2D1Ev,_ZThn60_N8S20846C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20846C4D0Ev,_ZThn60_N8S20846C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20846C4D1Ev,_ZThn60_N8S20846C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C18D0Ev,_ZTv0_n16_N9S20846C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S20846C18D0Ev,_ZThn1420_N9S20846C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C18D1Ev,_ZTv0_n16_N9S20846C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S20846C18D1Ev,_ZThn1420_N9S20846C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C18D0Ev,_ZTv0_n12_N9S20846C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2008_N9S20846C18D0Ev,_ZThn1480_N9S20846C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C18D1Ev,_ZTv0_n12_N9S20846C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2008_N9S20846C18D1Ev,_ZThn1480_N9S20846C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C17D0Ev,_ZTv0_n20_N9S20846C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N9S20846C17D0Ev,_ZThn1564_N9S20846C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C17D1Ev,_ZTv0_n20_N9S20846C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N9S20846C17D1Ev,_ZThn1564_N9S20846C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C17D0Ev,_ZTv0_n12_N9S20846C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2008_N9S20846C17D0Ev,_ZThn1480_N9S20846C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C17D1Ev,_ZTv0_n12_N9S20846C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2008_N9S20846C17D1Ev,_ZThn1480_N9S20846C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C17D0Ev,_ZTv0_n16_N9S20846C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S20846C17D0Ev,_ZThn1420_N9S20846C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C17D1Ev,_ZTv0_n16_N9S20846C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S20846C17D1Ev,_ZThn1420_N9S20846C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20846C17 = {  "S20846C17", // class name
  bases_S20846C17, 7,
  &(vtc_S20846C17[0]), // expected_vtbl_contents
  &(vtt_S20846C17[0]), // expected_vtt_contents
  ABISELECT(12208,9052), // object size
  NSPAIRA(_ZTI9S20846C17),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20846C17),33, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20846C17),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names26,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20846C20  : S20846C18 , virtual S20846C4 , S20846C3 , S20846C7 {
  ::S20846C3 s20846c20f0[9];
  char s20846c20f1;
  int s20846c20f2;
  int s20846c20f3;
  int s20846c20f4;
  char s20846c20f5;
  virtual void  v9(); // _ZN9S20846C202v9Ev
  ~S20846C20(); // tgen
  S20846C20(); // tgen
};
//SIG(-1 S20846C20) C1{ BC2{ BC3{ vd m FC4{ VBC5{ vd v8 Fs[6] FL[8] Fi} BC6{ VBC5 FL Fp FL:54} v6 v7 Fc:0 Fp[8] Fc}} VBC7{ vd v2 Fs[6] FL[8] Fi} VBC8{ VBC7 BC9{ VBC7 FL Fp FL:54} v3 v4 Fc:0 Fp[8] Fc} v5 FC8[2] FD FC3 Fp[3] FC10{ VBC7 BC8 Fp[3] Fc:8 Fi[2] Fc FC7 Fp[3] FL[5] Fi} Fi FU11{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi} VBC9 BC7 BC12{ VBC7 BC10 VBC9 VBC8 vd Fp[7]} v1 FC7[9] Fc Fi Fi Fi Fc}


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

static void Test_S20846C20()
{
  extern Class_Descriptor cd_S20846C20;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(181,557)];
    init_test(&cd_S20846C20, buf);
    S20846C20 *dp, &lv = *(dp=new (buf) S20846C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2880,2224), "sizeof(S20846C20)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20846C20)");
    check_base_class_offset(lv, (S3052C12*)(S20846C18*), 0, "S20846C20");
    check_base_class_offset(lv, (S20846C3*)(S20846C18*), ABISELECT(2648,2056), "S20846C20");
    /*is_ambiguous_... S20846C20::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C2*), ABISELECT(2648,2056), "S20846C20");
    /*is_ambiguous_... S20846C20::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*), ABISELECT(2648,2056), "S20846C20");
    /*is_ambiguous_... S20846C20::S20846C4 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*), ABISELECT(2648,2056), "S20846C20");
    check_base_class_offset(lv, (S20846C3*)(S20846C7*), ABISELECT(2648,2056), "S20846C20");
    check_base_class_offset(lv, (S20846C3*)(S20846C6*)(S20846C7*), ABISELECT(2648,2056), "S20846C20");
    check_base_class_offset(lv, (S20846C3*)(S20846C2*)(S20846C6*)(S20846C7*), ABISELECT(2648,2056), "S20846C20");
    check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*)(S20846C6*)(S20846C7*), ABISELECT(2648,2056), "S20846C20");
    /*is_ambiguous_... S20846C20::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C2*), ABISELECT(2744,2140), "S20846C20");
    check_base_class_offset(lv, (S20846C2*)(S20846C18*), ABISELECT(2744,2140), "S20846C20");
    /*is_ambiguous_... S20846C7::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C2*)(S20846C7*), ABISELECT(2744,2140), "S20846C20");
    check_base_class_offset(lv, (S20846C18*), 0, "S20846C20");
    /*is_ambiguous_... S20846C20::S20846C4 */ AMB_check_base_class_offset(lv, (S20846C4*), ABISELECT(2848,2200), "S20846C20");
    /*is_ambiguous_... S20846C7::S20846C4 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C7*), ABISELECT(2848,2200), "S20846C20");
    /*is_ambiguous_... S20846C20::S20846C3 */ AMB_check_base_class_offset(lv, (S20846C3*), ABISELECT(1296,940), "S20846C20");
    check_base_class_offset(lv, (S20846C4*)(S20846C2*)(S20846C6*)(S20846C7*), ABISELECT(1392,1024), "S20846C20");
    check_base_class_offset(lv, (S20846C2*)(S20846C6*)(S20846C7*), ABISELECT(1392,1024), "S20846C20");
    check_base_class_offset(lv, (S20846C6*)(S20846C7*), ABISELECT(1392,1024), "S20846C20");
    check_base_class_offset(lv, (S20846C7*), ABISELECT(1392,1024), "S20846C20");
    check_field_offset(lv, s20846c20f0, ABISELECT(1760,1280), "S20846C20.s20846c20f0");
    check_field_offset(lv, s20846c20f1, ABISELECT(2624,2036), "S20846C20.s20846c20f1");
    check_field_offset(lv, s20846c20f2, ABISELECT(2628,2040), "S20846C20.s20846c20f2");
    check_field_offset(lv, s20846c20f3, ABISELECT(2632,2044), "S20846C20.s20846c20f3");
    check_field_offset(lv, s20846c20f4, ABISELECT(2636,2048), "S20846C20.s20846c20f4");
    check_field_offset(lv, s20846c20f5, ABISELECT(2640,2052), "S20846C20.s20846c20f5");
    test_class_info(&lv, &cd_S20846C20);
    dp->~S20846C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20846C20(Test_S20846C20, "S20846C20", ABISELECT(2880,2224));

#else // __cplusplus

extern void _ZN9S20846C20C1Ev();
extern void _ZN9S20846C20D1Ev();
Name_Map name_map_S20846C20[] = {
  NSPAIR(_ZN9S20846C20C1Ev),
  NSPAIR(_ZN9S20846C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S20846C3;
extern VTBL_ENTRY _ZTI8S20846C3[];
extern  VTBL_ENTRY _ZTV8S20846C3[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C18;
extern VTBL_ENTRY _ZTI9S20846C18[];
extern  VTBL_ENTRY _ZTV9S20846C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C18[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C3;
extern VTBL_ENTRY _ZTI8S20846C3[];
extern  VTBL_ENTRY _ZTV8S20846C3[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C6;
extern VTBL_ENTRY _ZTI8S20846C6[];
extern  VTBL_ENTRY _ZTV8S20846C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C6[];
extern Class_Descriptor cd_S20846C7;
extern VTBL_ENTRY _ZTI8S20846C7[];
extern  VTBL_ENTRY _ZTV8S20846C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C7[];
static Base_Class bases_S20846C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S20846C3,    ABISELECT(2648,2056), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20846C4,    ABISELECT(2744,2140), //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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(2744,2140), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20846C18,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20846C4,    ABISELECT(2848,2200), //bcp->offset
    40, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20846C3,    ABISELECT(1296,940), //bcp->offset
    9, //bcp->virtual_function_table_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_S20846C4,    ABISELECT(1392,1024), //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
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(1392,1024), //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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20846C6,    ABISELECT(1392,1024), //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
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20846C7,    ABISELECT(1392,1024), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20846C20[];
extern void _ZN9S20846C20D1Ev();
extern void _ZN9S20846C20D0Ev();
extern void _ZN9S20846C182v7Ev();
extern void _ZN9S20846C202v9Ev();
extern void ABISELECT(_ZThn1296_N9S20846C20D1Ev,_ZThn940_N9S20846C20D1Ev)();
extern void ABISELECT(_ZThn1296_N9S20846C20D0Ev,_ZThn940_N9S20846C20D0Ev)();
extern void _ZN8S20846C32v3Ev();
extern void ABISELECT(_ZThn1392_N9S20846C20D1Ev,_ZThn1024_N9S20846C20D1Ev)();
extern void ABISELECT(_ZThn1392_N9S20846C20D0Ev,_ZThn1024_N9S20846C20D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTv0_n24_N9S20846C20D1Ev,_ZTv0_n12_N9S20846C20D1Ev)();
extern void ABISELECT(_ZThn2648_N9S20846C20D1Ev,_ZThn2056_N9S20846C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C20D0Ev,_ZTv0_n12_N9S20846C20D0Ev)();
extern void ABISELECT(_ZThn2648_N9S20846C20D0Ev,_ZThn2056_N9S20846C20D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
extern void ABISELECT(_ZTv0_n32_N9S20846C20D1Ev,_ZTv0_n16_N9S20846C20D1Ev)();
extern void ABISELECT(_ZThn2744_N9S20846C20D1Ev,_ZThn2140_N9S20846C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C20D0Ev,_ZTv0_n16_N9S20846C20D0Ev)();
extern void ABISELECT(_ZThn2744_N9S20846C20D0Ev,_ZThn2140_N9S20846C20D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTv0_n32_N9S20846C20D1Ev,_ZTv0_n16_N9S20846C20D1Ev)();
extern void ABISELECT(_ZThn2848_N9S20846C20D1Ev,_ZThn2200_N9S20846C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C20D0Ev,_ZTv0_n16_N9S20846C20D0Ev)();
extern void ABISELECT(_ZThn2848_N9S20846C20D0Ev,_ZThn2200_N9S20846C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20846C20[] = {
  ABISELECT(2848,2200),
  ABISELECT(2744,2140),
  ABISELECT(2648,2056),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C20[0]),
  (VTBL_ENTRY)&_ZN9S20846C20D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C20D0Ev,
  (VTBL_ENTRY)&_ZN9S20846C182v7Ev,
  (VTBL_ENTRY)&_ZN9S20846C202v9Ev,
  ABISELECT(-1296,-940),
  (VTBL_ENTRY)&(_ZTI9S20846C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N9S20846C20D1Ev,_ZThn940_N9S20846C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N9S20846C20D0Ev,_ZThn940_N9S20846C20D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
  ABISELECT(1352,1116),
  ABISELECT(1456,1176),
  ABISELECT(1256,1032),
  ABISELECT(-1392,-1024),
  (VTBL_ENTRY)&(_ZTI9S20846C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N9S20846C20D1Ev,_ZThn1024_N9S20846C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N9S20846C20D0Ev,_ZThn1024_N9S20846C20D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  0,
  ABISELECT(-2648,-2056),
  ABISELECT(-2648,-2056),
  (VTBL_ENTRY)&(_ZTI9S20846C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C20D1Ev,_ZTv0_n12_N9S20846C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C20D0Ev,_ZTv0_n12_N9S20846C20D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
  0,
  0,
  ABISELECT(-2744,-2140),
  ABISELECT(-96,-84),
  ABISELECT(-2744,-2140),
  (VTBL_ENTRY)&(_ZTI9S20846C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C20D1Ev,_ZTv0_n16_N9S20846C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C20D0Ev,_ZTv0_n16_N9S20846C20D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  ABISELECT(-2848,-2200),
  ABISELECT(-200,-144),
  ABISELECT(-2848,-2200),
  (VTBL_ENTRY)&(_ZTI9S20846C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C20D1Ev,_ZTv0_n16_N9S20846C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C20D0Ev,_ZTv0_n16_N9S20846C20D0Ev),
};
extern VTBL_ENTRY _ZTV9S20846C20[];
extern void _ZN9S20846C18D1Ev();
extern void _ZN9S20846C18D0Ev();
extern void _ZN9S20846C182v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C18__9S20846C20[] = {
  ABISELECT(2744,2140),
  ABISELECT(2648,2056),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C18[0]),
  (VTBL_ENTRY)&_ZN9S20846C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C18D0Ev,
  (VTBL_ENTRY)&_ZN9S20846C182v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C18D1Ev,_ZTv0_n12_N9S20846C18D1Ev)();
extern void ABISELECT(_ZThn2648_N9S20846C18D1Ev,_ZThn2056_N9S20846C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C18D0Ev,_ZTv0_n12_N9S20846C18D0Ev)();
extern void ABISELECT(_ZThn2648_N9S20846C18D0Ev,_ZThn2056_N9S20846C18D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C18__9S20846C20[] = {
  0,
  ABISELECT(-2648,-2056),
  ABISELECT(-2648,-2056),
  (VTBL_ENTRY)&(_ZTI9S20846C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C18D1Ev,_ZTv0_n12_N9S20846C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C18D0Ev,_ZTv0_n12_N9S20846C18D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C18D1Ev,_ZTv0_n16_N9S20846C18D1Ev)();
extern void ABISELECT(_ZThn2744_N9S20846C18D1Ev,_ZThn2140_N9S20846C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C18D0Ev,_ZTv0_n16_N9S20846C18D0Ev)();
extern void ABISELECT(_ZThn2744_N9S20846C18D0Ev,_ZThn2140_N9S20846C18D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C18__9S20846C20[] = {
  0,
  0,
  ABISELECT(-2744,-2140),
  ABISELECT(-96,-84),
  ABISELECT(-2744,-2140),
  (VTBL_ENTRY)&(_ZTI9S20846C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C18D1Ev,_ZTv0_n16_N9S20846C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C18D0Ev,_ZTv0_n16_N9S20846C18D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C7D1Ev();
extern void _ZN8S20846C7D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C7__9S20846C20[] = {
  ABISELECT(1352,1116),
  ABISELECT(1456,1176),
  ABISELECT(1256,1032),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C7[0]),
  (VTBL_ENTRY)&_ZN8S20846C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C6D1Ev();
extern void _ZN8S20846C6D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C68S20846C7__9S20846C20[] = {
  ABISELECT(1256,1032),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&_ZN8S20846C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C28S20846C68S20846C7__A1__9S20846C20[] = {
  ABISELECT(1256,1032),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C28S20846C68S20846C7__A2__9S20846C20[] = {
  ABISELECT(1256,1032),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZThn1256_N8S20846C4D1Ev,_ZThn1032_N8S20846C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void ABISELECT(_ZThn1256_N8S20846C4D0Ev,_ZThn1032_N8S20846C4D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C28S20846C68S20846C7__A2__9S20846C20[] = {
  0,
  ABISELECT(-1256,-1032),
  ABISELECT(-1256,-1032),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZThn1256_N8S20846C2D1Ev,_ZThn1032_N8S20846C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void ABISELECT(_ZThn1256_N8S20846C2D0Ev,_ZThn1032_N8S20846C2D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C28S20846C68S20846C7__A1__9S20846C20[] = {
  0,
  ABISELECT(-1256,-1032),
  ABISELECT(-1256,-1032),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev)();
extern void ABISELECT(_ZThn1256_N8S20846C6D1Ev,_ZThn1032_N8S20846C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev)();
extern void ABISELECT(_ZThn1256_N8S20846C6D0Ev,_ZThn1032_N8S20846C6D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C68S20846C7__9S20846C20[] = {
  0,
  ABISELECT(-1256,-1032),
  ABISELECT(-1256,-1032),
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C7D1Ev,_ZTv0_n12_N8S20846C7D1Ev)();
extern void ABISELECT(_ZThn1256_N8S20846C7D1Ev,_ZThn1032_N8S20846C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C7D0Ev,_ZTv0_n12_N8S20846C7D0Ev)();
extern void ABISELECT(_ZThn1256_N8S20846C7D0Ev,_ZThn1032_N8S20846C7D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C7__9S20846C20[] = {
  0,
  ABISELECT(-1256,-1032),
  ABISELECT(-1256,-1032),
  (VTBL_ENTRY)&(_ZTI8S20846C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C7D1Ev,_ZTv0_n12_N8S20846C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C7D0Ev,_ZTv0_n12_N8S20846C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev)();
extern void ABISELECT(_ZThn1456_N8S20846C7D1Ev,_ZThn1176_N8S20846C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev)();
extern void ABISELECT(_ZThn1456_N8S20846C7D0Ev,_ZThn1176_N8S20846C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20846C4__A1__8S20846C7__9S20846C20[] = {
  ABISELECT(-1456,-1176),
  ABISELECT(-200,-144),
  ABISELECT(-1456,-1176),
  (VTBL_ENTRY)&(_ZTI8S20846C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev)();
extern void ABISELECT(_ZThn1352_N8S20846C7D1Ev,_ZThn1116_N8S20846C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev)();
extern void ABISELECT(_ZThn1352_N8S20846C7D0Ev,_ZThn1116_N8S20846C7D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__A1__8S20846C7__9S20846C20[] = {
  0,
  0,
  ABISELECT(-1352,-1116),
  ABISELECT(-96,-84),
  ABISELECT(-1352,-1116),
  (VTBL_ENTRY)&(_ZTI8S20846C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C20[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C2__9S20846C20[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C2__9S20846C20[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C2__9S20846C20[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C4__A1__9S20846C20[] = {
  ABISELECT(-200,-144),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C4__A1__9S20846C20[] = {
  0,
  ABISELECT(200,144),
  ABISELECT(200,144),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
static  VTT_ENTRY vtt_S20846C20[] = {
  {&(_ZTV9S20846C20[5]),  5,46},
  {&(_tg__ZTV9S20846C18__9S20846C20[4]),  4,7},
  {&(_tg__ZTV8S20846C3__9S20846C18__9S20846C20[4]),  4,7},
  {&(_tg__ZTV8S20846C2__9S20846C18__9S20846C20[6]),  6,10},
  {&(_tg__ZTV8S20846C7__9S20846C20[5]),  5,9},
  {&(_tg__ZTV8S20846C68S20846C7__9S20846C20[3]),  3,7},
  {&(_tg__ZTV8S20846C28S20846C68S20846C7__A1__9S20846C20[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C28S20846C68S20846C7__A2__9S20846C20[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C28S20846C68S20846C7__A2__9S20846C20[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C28S20846C68S20846C7__A1__9S20846C20[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C68S20846C7__9S20846C20[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C7__9S20846C20[4]),  4,7},
  {&(_tg__ZTV8S20846C4__A1__8S20846C7__9S20846C20[4]),  4,6},
  {&(_tg__ZTV8S20846C2__A1__8S20846C7__9S20846C20[6]),  6,10},
  {&(_ZTV9S20846C20[27]),  27,46},
  {&(_ZTV9S20846C20[36]),  36,46},
  {&(_ZTV9S20846C20[44]),  44,46},
  {&(_ZTV9S20846C20[19]),  19,46},
  {&(_tg__ZTV8S20846C2__9S20846C20[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C2__9S20846C20[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C2__9S20846C20[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C2__9S20846C20[4]),  4,7},
  {&(_tg__ZTV8S20846C4__A1__9S20846C20[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C4__A1__9S20846C20[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S20846C20[];
extern  VTBL_ENTRY _ZTV9S20846C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C20[];
static VTBL_ENTRY alt_thunk_names27[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1352_N8S20846C7D0Ev,_ZThn1116_N8S20846C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N8S20846C7D0Ev,_ZThn1176_N8S20846C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1352_N8S20846C7D1Ev,_ZThn1116_N8S20846C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N8S20846C7D1Ev,_ZThn1176_N8S20846C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C7D0Ev,_ZTv0_n12_N8S20846C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1256_N8S20846C7D0Ev,_ZThn1032_N8S20846C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C7D1Ev,_ZTv0_n12_N8S20846C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1256_N8S20846C7D1Ev,_ZThn1032_N8S20846C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1256_N8S20846C6D0Ev,_ZThn1032_N8S20846C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1256_N8S20846C6D1Ev,_ZThn1032_N8S20846C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1256_N8S20846C2D0Ev,_ZThn1032_N8S20846C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1256_N8S20846C2D1Ev,_ZThn1032_N8S20846C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1256_N8S20846C4D0Ev,_ZThn1032_N8S20846C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1256_N8S20846C4D1Ev,_ZThn1032_N8S20846C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C18D0Ev,_ZTv0_n16_N9S20846C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2744_N9S20846C18D0Ev,_ZThn2140_N9S20846C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C18D1Ev,_ZTv0_n16_N9S20846C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2744_N9S20846C18D1Ev,_ZThn2140_N9S20846C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C18D0Ev,_ZTv0_n12_N9S20846C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2648_N9S20846C18D0Ev,_ZThn2056_N9S20846C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C18D1Ev,_ZTv0_n12_N9S20846C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2648_N9S20846C18D1Ev,_ZThn2056_N9S20846C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C20D0Ev,_ZTv0_n16_N9S20846C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2848_N9S20846C20D0Ev,_ZThn2200_N9S20846C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2744_N9S20846C20D0Ev,_ZThn2140_N9S20846C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C20D1Ev,_ZTv0_n16_N9S20846C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2848_N9S20846C20D1Ev,_ZThn2200_N9S20846C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2744_N9S20846C20D1Ev,_ZThn2140_N9S20846C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C20D0Ev,_ZTv0_n12_N9S20846C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2648_N9S20846C20D0Ev,_ZThn2056_N9S20846C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C20D1Ev,_ZTv0_n12_N9S20846C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2648_N9S20846C20D1Ev,_ZThn2056_N9S20846C20D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20846C20 = {  "S20846C20", // class name
  bases_S20846C20, 11,
  &(vtc_S20846C20[0]), // expected_vtbl_contents
  &(vtt_S20846C20[0]), // expected_vtt_contents
  ABISELECT(2880,2224), // object size
  NSPAIRA(_ZTI9S20846C20),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20846C20),46, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20846C20),24, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names27,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20846C16  : virtual S20846C3 , virtual S20846C17 , S20846C20 {
  ::S20846C13 s20846c16f0;
  ::S3052C13 s20846c16f1;
  int s20846c16f2;
  char s20846c16f3;
  virtual  ~S20846C16(); // _ZN9S20846C16D2Ev
  S20846C16(); // tgen
};
//SIG(-1 S20846C16) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} VBC3{ VBC4{ VBC2 BC5{ VBC2 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} VBC6{ BC7{ m Fp Fi FL Fp Fi} VBC4 Fp Fc[4] Fi:11 Fp[2] Fi[6] FC8{ VBC2 BC4 BC9{ VBC2 BC4 Fp[3] Fc:8 Fi[2] Fc FC2 Fp[3] FL[5] Fi} BC10{ vd m FC11{ VBC12{ vd v9 Fs[6] FL[8] Fi} BC13{ VBC12 FL Fp FL:54} v7 v8 Fc:0 Fp[8] Fc}} VBC5 Fp Fl FC9 FC10 FC5 Fi[2] FU14{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} BC15{ BC10 VBC2 VBC4 v4 FC4[2] FD FC10 Fp[3] FC9 Fi FU16{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi} v5 Fp FC17{} FC2 FL FU14 FL[6] FL FC9} BC18{ BC15 VBC5 BC2 BC19{ VBC2 BC9 VBC5 VBC4 vd Fp[7]} v6 FC2[9] Fc Fi Fi Fi Fc} vd FC8 FU14 Fi Fc}


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

static void Test_S20846C16()
{
  extern Class_Descriptor cd_S20846C16;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1038,3098)];
    init_test(&cd_S20846C16, buf);
    S20846C16 *dp, &lv = *(dp=new (buf) S20846C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16592,12388), "sizeof(S20846C16)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20846C16)");
    /*is_ambiguous_... S20846C16::S20846C3 */ AMB_check_base_class_offset(lv, (S20846C3*), ABISELECT(4344,3312), "S20846C16");
    /*is_ambiguous_... S20846C16::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C2*), ABISELECT(4344,3312), "S20846C16");
    /*is_ambiguous_... S20846C16::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*), ABISELECT(4344,3312), "S20846C16");
    check_base_class_offset(lv, (S20846C3*)(S20846C18*)(S20846C17*), ABISELECT(4344,3312), "S20846C16");
    check_base_class_offset(lv, (S20846C3*)(S20846C18*)(S20846C20*), ABISELECT(4344,3312), "S20846C16");
    /*is_ambiguous_... S20846C16::S20846C4 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*), ABISELECT(4344,3312), "S20846C16");
    check_base_class_offset(lv, (S20846C3*)(S20846C7*)(S20846C20*), ABISELECT(4344,3312), "S20846C16");
    check_base_class_offset(lv, (S20846C3*)(S20846C6*)(S20846C7*)(S20846C20*), ABISELECT(4344,3312), "S20846C16");
    check_base_class_offset(lv, (S20846C3*)(S20846C2*)(S20846C6*)(S20846C7*)(S20846C20*), ABISELECT(4344,3312), "S20846C16");
    check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*)(S20846C6*)(S20846C7*)(S20846C20*), ABISELECT(4344,3312), "S20846C16");
    /*is_ambiguous_... S20846C16::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C2*), ABISELECT(6352,4816), "S20846C16");
    check_base_class_offset(lv, (S20846C2*)(S20846C17*), ABISELECT(6352,4816), "S20846C16");
    check_base_class_offset(lv, (S20846C2*)(S20846C11*), ABISELECT(6352,4816), "S20846C16");
    check_base_class_offset(lv, (S20846C2*)(S20846C18*)(S20846C17*), ABISELECT(6352,4816), "S20846C16");
    check_base_class_offset(lv, (S20846C2*)(S20846C18*)(S20846C20*), ABISELECT(6352,4816), "S20846C16");
    /*is_ambiguous_... S20846C7::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C2*)(S20846C7*)(S20846C20*), ABISELECT(6352,4816), "S20846C16");
    check_base_class_offset(lv, (S3052C10*)(S20846C11*), ABISELECT(6472,4880), "S20846C16");
    check_base_class_offset(lv, (S20846C11*)(S20846C17*), ABISELECT(6464,4876), "S20846C16");
    check_base_class_offset(lv, (S3052C12*)(S20846C18*)(S20846C17*), ABISELECT(4448,3396), "S20846C16");
    check_base_class_offset(lv, (S20846C18*)(S20846C17*), ABISELECT(4448,3396), "S20846C16");
    check_base_class_offset(lv, (S20846C17*), ABISELECT(4448,3396), "S20846C16");
    check_base_class_offset(lv, (S3052C12*)(S20846C18*)(S20846C20*), 0, "S20846C16");
    check_base_class_offset(lv, (S20846C18*)(S20846C20*), 0, "S20846C16");
    /*is_ambiguous_... S20846C20::S20846C4 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C20*), ABISELECT(16560,12364), "S20846C16");
    /*is_ambiguous_... S20846C7::S20846C4 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C7*)(S20846C20*), ABISELECT(16560,12364), "S20846C16");
    /*is_ambiguous_... S20846C20::S20846C3 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C20*), ABISELECT(1296,940), "S20846C16");
    check_base_class_offset(lv, (S20846C4*)(S20846C2*)(S20846C6*)(S20846C7*)(S20846C20*), ABISELECT(1392,1024), "S20846C16");
    check_base_class_offset(lv, (S20846C2*)(S20846C6*)(S20846C7*)(S20846C20*), ABISELECT(1392,1024), "S20846C16");
    check_base_class_offset(lv, (S20846C6*)(S20846C7*)(S20846C20*), ABISELECT(1392,1024), "S20846C16");
    check_base_class_offset(lv, (S20846C7*)(S20846C20*), ABISELECT(1392,1024), "S20846C16");
    check_base_class_offset(lv, (S20846C20*), 0, "S20846C16");
    check_field_offset(lv, s20846c16f0, ABISELECT(2656,2056), "S20846C16.s20846c16f0");
    check_field_offset(lv, s20846c16f1, ABISELECT(4320,3292), "S20846C16.s20846c16f1");
    check_field_offset(lv, s20846c16f2, ABISELECT(4336,3304), "S20846C16.s20846c16f2");
    check_field_offset(lv, s20846c16f3, ABISELECT(4340,3308), "S20846C16.s20846c16f3");
    test_class_info(&lv, &cd_S20846C16);
    dp->~S20846C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20846C16(Test_S20846C16, "S20846C16", ABISELECT(16592,12388));

#else // __cplusplus

extern void _ZN9S20846C16C1Ev();
extern void _ZN9S20846C16D2Ev();
Name_Map name_map_S20846C16[] = {
  NSPAIR(_ZN9S20846C16C1Ev),
  NSPAIR(_ZN9S20846C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20846C3;
extern VTBL_ENTRY _ZTI8S20846C3[];
extern  VTBL_ENTRY _ZTV8S20846C3[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S20846C11;
extern VTBL_ENTRY _ZTI9S20846C11[];
extern  VTBL_ENTRY _ZTV9S20846C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C11[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S20846C18;
extern VTBL_ENTRY _ZTI9S20846C18[];
extern  VTBL_ENTRY _ZTV9S20846C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C18[];
extern Class_Descriptor cd_S20846C17;
extern VTBL_ENTRY _ZTI9S20846C17[];
extern  VTBL_ENTRY _ZTV9S20846C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C17[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S20846C18;
extern VTBL_ENTRY _ZTI9S20846C18[];
extern  VTBL_ENTRY _ZTV9S20846C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C18[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C3;
extern VTBL_ENTRY _ZTI8S20846C3[];
extern  VTBL_ENTRY _ZTV8S20846C3[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C6;
extern VTBL_ENTRY _ZTI8S20846C6[];
extern  VTBL_ENTRY _ZTV8S20846C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C6[];
extern Class_Descriptor cd_S20846C7;
extern VTBL_ENTRY _ZTI8S20846C7[];
extern  VTBL_ENTRY _ZTV8S20846C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C7[];
extern Class_Descriptor cd_S20846C20;
extern VTBL_ENTRY _ZTI9S20846C20[];
extern  VTBL_ENTRY _ZTV9S20846C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C20[];
static Base_Class bases_S20846C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20846C3,    ABISELECT(4344,3312), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20846C4,    ABISELECT(6352,4816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(6352,4816), //bcp->offset
    44, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3052C10,    ABISELECT(6472,4880), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20846C11,    ABISELECT(6464,4876), //bcp->offset
    54, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3052C12,    ABISELECT(4448,3396), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S20846C18,    ABISELECT(4448,3396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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_S20846C17,    ABISELECT(4448,3396), //bcp->offset
    32, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S20846C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    16, //immediately_derived
  0, 0},
  {&cd_S20846C4,    ABISELECT(16560,12364), //bcp->offset
    61, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20846C3,    ABISELECT(1296,940), //bcp->offset
    11, //bcp->virtual_function_table_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
    16, //immediately_derived
  0, 0},
  {&cd_S20846C4,    ABISELECT(1392,1024), //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
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(1392,1024), //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
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20846C6,    ABISELECT(1392,1024), //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
    14, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20846C7,    ABISELECT(1392,1024), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20846C20,    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
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20846C16[];
extern void _ZN9S20846C16D1Ev();
extern void _ZN9S20846C16D0Ev();
extern void _ZN9S20846C182v7Ev();
extern void _ZN9S20846C202v9Ev();
extern void ABISELECT(_ZThn1296_N9S20846C16D1Ev,_ZThn940_N9S20846C16D1Ev)();
extern void ABISELECT(_ZThn1296_N9S20846C16D0Ev,_ZThn940_N9S20846C16D0Ev)();
extern void _ZN8S20846C32v3Ev();
extern void ABISELECT(_ZThn1392_N9S20846C16D1Ev,_ZThn1024_N9S20846C16D1Ev)();
extern void ABISELECT(_ZThn1392_N9S20846C16D0Ev,_ZThn1024_N9S20846C16D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTv0_n24_N9S20846C16D1Ev,_ZTv0_n12_N9S20846C16D1Ev)();
extern void ABISELECT(_ZThn4344_N9S20846C16D1Ev,_ZThn3312_N9S20846C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C16D0Ev,_ZTv0_n12_N9S20846C16D0Ev)();
extern void ABISELECT(_ZThn4344_N9S20846C16D0Ev,_ZThn3312_N9S20846C16D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S20846C16D1Ev,_ZTv0_n24_N9S20846C16D1Ev)();
extern void ABISELECT(_ZThn4448_N9S20846C16D1Ev,_ZThn3396_N9S20846C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20846C16D0Ev,_ZTv0_n24_N9S20846C16D0Ev)();
extern void ABISELECT(_ZThn4448_N9S20846C16D0Ev,_ZThn3396_N9S20846C16D0Ev)() __attribute__((weak));
extern void _ZN9S20846C182v7Ev();
extern void _ZN9S20846C172v8Ev();
extern void ABISELECT(_ZTv0_n32_N9S20846C16D1Ev,_ZTv0_n16_N9S20846C16D1Ev)();
extern void ABISELECT(_ZThn6352_N9S20846C16D1Ev,_ZThn4816_N9S20846C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C16D0Ev,_ZTv0_n16_N9S20846C16D0Ev)();
extern void ABISELECT(_ZThn6352_N9S20846C16D0Ev,_ZThn4816_N9S20846C16D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTv0_n40_N9S20846C16D1Ev,_ZTv0_n20_N9S20846C16D1Ev)();
extern void ABISELECT(_ZThn6464_N9S20846C16D1Ev,_ZThn4876_N9S20846C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20846C16D0Ev,_ZTv0_n20_N9S20846C16D0Ev)();
extern void ABISELECT(_ZThn6464_N9S20846C16D0Ev,_ZThn4876_N9S20846C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C16D1Ev,_ZTv0_n16_N9S20846C16D1Ev)();
extern void ABISELECT(_ZThn16560_N9S20846C16D1Ev,_ZThn12364_N9S20846C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C16D0Ev,_ZTv0_n16_N9S20846C16D0Ev)();
extern void ABISELECT(_ZThn16560_N9S20846C16D0Ev,_ZThn12364_N9S20846C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20846C16[] = {
  ABISELECT(6464,4876),
  ABISELECT(4448,3396),
  ABISELECT(16560,12364),
  ABISELECT(6352,4816),
  ABISELECT(4344,3312),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C16[0]),
  (VTBL_ENTRY)&_ZN9S20846C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C16D0Ev,
  (VTBL_ENTRY)&_ZN9S20846C182v7Ev,
  (VTBL_ENTRY)&_ZN9S20846C202v9Ev,
  ABISELECT(-1296,-940),
  (VTBL_ENTRY)&(_ZTI9S20846C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N9S20846C16D1Ev,_ZThn940_N9S20846C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N9S20846C16D0Ev,_ZThn940_N9S20846C16D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
  ABISELECT(4960,3792),
  ABISELECT(15168,11340),
  ABISELECT(2952,2288),
  ABISELECT(-1392,-1024),
  (VTBL_ENTRY)&(_ZTI9S20846C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N9S20846C16D1Ev,_ZThn1024_N9S20846C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N9S20846C16D0Ev,_ZThn1024_N9S20846C16D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  0,
  ABISELECT(-4344,-3312),
  ABISELECT(-4344,-3312),
  (VTBL_ENTRY)&(_ZTI9S20846C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C16D1Ev,_ZTv0_n12_N9S20846C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C16D0Ev,_ZTv0_n12_N9S20846C16D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
  0,
  0,
  ABISELECT(-4448,-3396),
  ABISELECT(2016,1480),
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  ABISELECT(-4448,-3396),
  (VTBL_ENTRY)&(_ZTI9S20846C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20846C16D1Ev,_ZTv0_n24_N9S20846C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20846C16D0Ev,_ZTv0_n24_N9S20846C16D0Ev),
  (VTBL_ENTRY)&_ZN9S20846C182v7Ev,
  (VTBL_ENTRY)&_ZN9S20846C172v8Ev,
  0,
  0,
  ABISELECT(-6352,-4816),
  ABISELECT(-2008,-1504),
  ABISELECT(-6352,-4816),
  (VTBL_ENTRY)&(_ZTI9S20846C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C16D1Ev,_ZTv0_n16_N9S20846C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C16D0Ev,_ZTv0_n16_N9S20846C16D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  ABISELECT(-6464,-4876),
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  ABISELECT(-6464,-4876),
  (VTBL_ENTRY)&(_ZTI9S20846C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C16D1Ev,_ZTv0_n20_N9S20846C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C16D0Ev,_ZTv0_n20_N9S20846C16D0Ev),
  ABISELECT(-16560,-12364),
  ABISELECT(-12216,-9052),
  ABISELECT(-16560,-12364),
  (VTBL_ENTRY)&(_ZTI9S20846C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C16D1Ev,_ZTv0_n16_N9S20846C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C16D0Ev,_ZTv0_n16_N9S20846C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S20846C16[];
extern void _ZN9S20846C20D1Ev();
extern void _ZN9S20846C20D0Ev();
extern void _ZN9S20846C182v7Ev();
extern void _ZN9S20846C202v9Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C20__9S20846C16[] = {
  ABISELECT(16560,12364),
  ABISELECT(6352,4816),
  ABISELECT(4344,3312),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C20[0]),
  (VTBL_ENTRY)&_ZN9S20846C20D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C20D0Ev,
  (VTBL_ENTRY)&_ZN9S20846C182v7Ev,
  (VTBL_ENTRY)&_ZN9S20846C202v9Ev,
};
extern void _ZN9S20846C18D1Ev();
extern void _ZN9S20846C18D0Ev();
extern void _ZN9S20846C182v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C189S20846C20__A1__9S20846C16[] = {
  ABISELECT(6352,4816),
  ABISELECT(4344,3312),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C18[0]),
  (VTBL_ENTRY)&_ZN9S20846C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C18D0Ev,
  (VTBL_ENTRY)&_ZN9S20846C182v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C18D1Ev,_ZTv0_n12_N9S20846C18D1Ev)();
extern void ABISELECT(_ZThn4344_N9S20846C18D1Ev,_ZThn3312_N9S20846C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C18D0Ev,_ZTv0_n12_N9S20846C18D0Ev)();
extern void ABISELECT(_ZThn4344_N9S20846C18D0Ev,_ZThn3312_N9S20846C18D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C189S20846C20__A1__9S20846C16[] = {
  0,
  ABISELECT(-4344,-3312),
  ABISELECT(-4344,-3312),
  (VTBL_ENTRY)&(_ZTI9S20846C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C18D1Ev,_ZTv0_n12_N9S20846C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C18D0Ev,_ZTv0_n12_N9S20846C18D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C18D1Ev,_ZTv0_n16_N9S20846C18D1Ev)();
extern void ABISELECT(_ZThn6352_N9S20846C18D1Ev,_ZThn4816_N9S20846C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C18D0Ev,_ZTv0_n16_N9S20846C18D0Ev)();
extern void ABISELECT(_ZThn6352_N9S20846C18D0Ev,_ZThn4816_N9S20846C18D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C189S20846C20__A1__9S20846C16[] = {
  0,
  0,
  ABISELECT(-6352,-4816),
  ABISELECT(-2008,-1504),
  ABISELECT(-6352,-4816),
  (VTBL_ENTRY)&(_ZTI9S20846C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C18D1Ev,_ZTv0_n16_N9S20846C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C18D0Ev,_ZTv0_n16_N9S20846C18D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C7D1Ev();
extern void _ZN8S20846C7D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C79S20846C20__9S20846C16[] = {
  ABISELECT(4960,3792),
  ABISELECT(15168,11340),
  ABISELECT(2952,2288),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C7[0]),
  (VTBL_ENTRY)&_ZN8S20846C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C6D1Ev();
extern void _ZN8S20846C6D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C68S20846C79S20846C20__9S20846C16[] = {
  ABISELECT(2952,2288),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&_ZN8S20846C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C28S20846C68S20846C79S20846C20__A1__9S20846C16[] = {
  ABISELECT(2952,2288),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C28S20846C68S20846C79S20846C20__A2__9S20846C16[] = {
  ABISELECT(2952,2288),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZThn2952_N8S20846C4D1Ev,_ZThn2288_N8S20846C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void ABISELECT(_ZThn2952_N8S20846C4D0Ev,_ZThn2288_N8S20846C4D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C28S20846C68S20846C79S20846C20__A2__9S20846C16[] = {
  0,
  ABISELECT(-2952,-2288),
  ABISELECT(-2952,-2288),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZThn2952_N8S20846C2D1Ev,_ZThn2288_N8S20846C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void ABISELECT(_ZThn2952_N8S20846C2D0Ev,_ZThn2288_N8S20846C2D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C28S20846C68S20846C79S20846C20__A1__9S20846C16[] = {
  0,
  ABISELECT(-2952,-2288),
  ABISELECT(-2952,-2288),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev)();
extern void ABISELECT(_ZThn2952_N8S20846C6D1Ev,_ZThn2288_N8S20846C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev)();
extern void ABISELECT(_ZThn2952_N8S20846C6D0Ev,_ZThn2288_N8S20846C6D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C68S20846C79S20846C20__9S20846C16[] = {
  0,
  ABISELECT(-2952,-2288),
  ABISELECT(-2952,-2288),
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C7D1Ev,_ZTv0_n12_N8S20846C7D1Ev)();
extern void ABISELECT(_ZThn2952_N8S20846C7D1Ev,_ZThn2288_N8S20846C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C7D0Ev,_ZTv0_n12_N8S20846C7D0Ev)();
extern void ABISELECT(_ZThn2952_N8S20846C7D0Ev,_ZThn2288_N8S20846C7D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C79S20846C20__9S20846C16[] = {
  0,
  ABISELECT(-2952,-2288),
  ABISELECT(-2952,-2288),
  (VTBL_ENTRY)&(_ZTI8S20846C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C7D1Ev,_ZTv0_n12_N8S20846C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C7D0Ev,_ZTv0_n12_N8S20846C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev)();
extern void ABISELECT(_ZThn15168_N8S20846C7D1Ev,_ZThn11340_N8S20846C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev)();
extern void ABISELECT(_ZThn15168_N8S20846C7D0Ev,_ZThn11340_N8S20846C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20846C4__A1__8S20846C79S20846C20__9S20846C16[] = {
  ABISELECT(-15168,-11340),
  ABISELECT(-12216,-9052),
  ABISELECT(-15168,-11340),
  (VTBL_ENTRY)&(_ZTI8S20846C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev)();
extern void ABISELECT(_ZThn4960_N8S20846C7D1Ev,_ZThn3792_N8S20846C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev)();
extern void ABISELECT(_ZThn4960_N8S20846C7D0Ev,_ZThn3792_N8S20846C7D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__A1__8S20846C79S20846C20__9S20846C16[] = {
  0,
  0,
  ABISELECT(-4960,-3792),
  ABISELECT(-2008,-1504),
  ABISELECT(-4960,-3792),
  (VTBL_ENTRY)&(_ZTI8S20846C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C20D1Ev,_ZTv0_n12_N9S20846C20D1Ev)();
extern void ABISELECT(_ZThn4344_N9S20846C20D1Ev,_ZThn3312_N9S20846C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C20D0Ev,_ZTv0_n12_N9S20846C20D0Ev)();
extern void ABISELECT(_ZThn4344_N9S20846C20D0Ev,_ZThn3312_N9S20846C20D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C20__9S20846C16[] = {
  0,
  ABISELECT(-4344,-3312),
  ABISELECT(-4344,-3312),
  (VTBL_ENTRY)&(_ZTI9S20846C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C20D1Ev,_ZTv0_n12_N9S20846C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C20D0Ev,_ZTv0_n12_N9S20846C20D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C20D1Ev,_ZTv0_n16_N9S20846C20D1Ev)();
extern void ABISELECT(_ZThn6352_N9S20846C20D1Ev,_ZThn4816_N9S20846C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C20D0Ev,_ZTv0_n16_N9S20846C20D0Ev)();
extern void ABISELECT(_ZThn6352_N9S20846C20D0Ev,_ZThn4816_N9S20846C20D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C20__9S20846C16[] = {
  0,
  0,
  ABISELECT(-6352,-4816),
  ABISELECT(-2008,-1504),
  ABISELECT(-6352,-4816),
  (VTBL_ENTRY)&(_ZTI9S20846C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C20D1Ev,_ZTv0_n16_N9S20846C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C20D0Ev,_ZTv0_n16_N9S20846C20D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C20D1Ev,_ZTv0_n16_N9S20846C20D1Ev)();
extern void ABISELECT(_ZThn16560_N9S20846C20D1Ev,_ZThn12364_N9S20846C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C20D0Ev,_ZTv0_n16_N9S20846C20D0Ev)();
extern void ABISELECT(_ZThn16560_N9S20846C20D0Ev,_ZThn12364_N9S20846C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20846C4__A1__9S20846C20__9S20846C16[] = {
  ABISELECT(-16560,-12364),
  ABISELECT(-12216,-9052),
  ABISELECT(-16560,-12364),
  (VTBL_ENTRY)&(_ZTI9S20846C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C20D1Ev,_ZTv0_n16_N9S20846C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C20D0Ev,_ZTv0_n16_N9S20846C20D0Ev),
};
extern void ABISELECT(_ZThn1392_N9S20846C20D1Ev,_ZThn1024_N9S20846C20D1Ev)();
extern void ABISELECT(_ZThn1392_N9S20846C20D0Ev,_ZThn1024_N9S20846C20D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C7__9S20846C20__9S20846C16[] = {
  ABISELECT(4960,3792),
  ABISELECT(15168,11340),
  ABISELECT(2952,2288),
  ABISELECT(-1392,-1024),
  (VTBL_ENTRY)&(_ZTI9S20846C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N9S20846C20D1Ev,_ZThn1024_N9S20846C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N9S20846C20D0Ev,_ZThn1024_N9S20846C20D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN9S20846C17D1Ev();
extern void _ZN9S20846C17D0Ev();
extern void _ZN9S20846C182v7Ev();
extern void _ZN9S20846C172v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C17__9S20846C16[] = {
  ABISELECT(2016,1480),
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C17[0]),
  (VTBL_ENTRY)&_ZN9S20846C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C17D0Ev,
  (VTBL_ENTRY)&_ZN9S20846C182v7Ev,
  (VTBL_ENTRY)&_ZN9S20846C172v8Ev,
};
extern void _ZN9S20846C18D1Ev();
extern void _ZN9S20846C18D0Ev();
extern void _ZN9S20846C182v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C189S20846C17__9S20846C16[] = {
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C18[0]),
  (VTBL_ENTRY)&_ZN9S20846C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C18D0Ev,
  (VTBL_ENTRY)&_ZN9S20846C182v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C18D1Ev,_ZTv0_n12_N9S20846C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20846C18D0Ev,_ZTv0_n12_N9S20846C18D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C189S20846C17__9S20846C16[] = {
  0,
  ABISELECT(104,84),
  ABISELECT(104,84),
  (VTBL_ENTRY)&(_ZTI9S20846C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C18D1Ev,_ZTv0_n12_N9S20846C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C18D0Ev,_ZTv0_n12_N9S20846C18D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C18D1Ev,_ZTv0_n16_N9S20846C18D1Ev)();
extern void ABISELECT(_ZThn1904_N9S20846C18D1Ev,_ZThn1420_N9S20846C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C18D0Ev,_ZTv0_n16_N9S20846C18D0Ev)();
extern void ABISELECT(_ZThn1904_N9S20846C18D0Ev,_ZThn1420_N9S20846C18D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C189S20846C17__9S20846C16[] = {
  0,
  0,
  ABISELECT(-1904,-1420),
  ABISELECT(-2008,-1504),
  ABISELECT(-1904,-1420),
  (VTBL_ENTRY)&(_ZTI9S20846C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C18D1Ev,_ZTv0_n16_N9S20846C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C18D0Ev,_ZTv0_n16_N9S20846C18D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C17D1Ev,_ZTv0_n16_N9S20846C17D1Ev)();
extern void ABISELECT(_ZThn1904_N9S20846C17D1Ev,_ZThn1420_N9S20846C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C17D0Ev,_ZTv0_n16_N9S20846C17D0Ev)();
extern void ABISELECT(_ZThn1904_N9S20846C17D0Ev,_ZThn1420_N9S20846C17D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C17__9S20846C16[] = {
  0,
  0,
  ABISELECT(-1904,-1420),
  ABISELECT(-2008,-1504),
  ABISELECT(-1904,-1420),
  (VTBL_ENTRY)&(_ZTI9S20846C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C17D1Ev,_ZTv0_n16_N9S20846C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C17D0Ev,_ZTv0_n16_N9S20846C17D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C17D1Ev,_ZTv0_n12_N9S20846C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20846C17D0Ev,_ZTv0_n12_N9S20846C17D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C17__9S20846C16[] = {
  0,
  ABISELECT(104,84),
  ABISELECT(104,84),
  (VTBL_ENTRY)&(_ZTI9S20846C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C17D1Ev,_ZTv0_n12_N9S20846C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C17D0Ev,_ZTv0_n12_N9S20846C17D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20846C17D1Ev,_ZTv0_n20_N9S20846C17D1Ev)();
extern void ABISELECT(_ZThn2016_N9S20846C17D1Ev,_ZThn1480_N9S20846C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20846C17D0Ev,_ZTv0_n20_N9S20846C17D0Ev)();
extern void ABISELECT(_ZThn2016_N9S20846C17D0Ev,_ZThn1480_N9S20846C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20846C11__9S20846C17__9S20846C16[] = {
  ABISELECT(-2016,-1480),
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  ABISELECT(-2016,-1480),
  (VTBL_ENTRY)&(_ZTI9S20846C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C17D1Ev,_ZTv0_n20_N9S20846C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C17D0Ev,_ZTv0_n20_N9S20846C17D0Ev),
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C16[] = {
  ABISELECT(-2008,-1504),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C2__9S20846C16[] = {
  ABISELECT(-2008,-1504),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C2__9S20846C16[] = {
  0,
  ABISELECT(2008,1504),
  ABISELECT(2008,1504),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C2__9S20846C16[] = {
  0,
  ABISELECT(2008,1504),
  ABISELECT(2008,1504),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN9S20846C11D1Ev();
extern void _ZN9S20846C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C11__9S20846C16[] = {
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&_ZN9S20846C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C11D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C11D1Ev,_ZTv0_n16_N9S20846C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20846C11D0Ev,_ZTv0_n16_N9S20846C11D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C11__9S20846C16[] = {
  0,
  0,
  ABISELECT(112,60),
  ABISELECT(-2008,-1504),
  ABISELECT(112,60),
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C11D1Ev,_ZTv0_n16_N9S20846C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C11D0Ev,_ZTv0_n16_N9S20846C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C11D1Ev,_ZTv0_n12_N9S20846C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20846C11D0Ev,_ZTv0_n12_N9S20846C11D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C11__9S20846C16[] = {
  0,
  ABISELECT(2120,1564),
  ABISELECT(2120,1564),
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C11D1Ev,_ZTv0_n12_N9S20846C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C11D0Ev,_ZTv0_n12_N9S20846C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C4__A1__9S20846C16[] = {
  ABISELECT(-12216,-9052),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C4__A1__9S20846C16[] = {
  0,
  ABISELECT(12216,9052),
  ABISELECT(12216,9052),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
static  VTT_ENTRY vtt_S20846C16[] = {
  {&(_ZTV9S20846C16[7]),  7,67},
  {&(_tg__ZTV9S20846C20__9S20846C16[5]),  5,9},
  {&(_tg__ZTV9S20846C189S20846C20__A1__9S20846C16[4]),  4,7},
  {&(_tg__ZTV8S20846C3__9S20846C189S20846C20__A1__9S20846C16[4]),  4,7},
  {&(_tg__ZTV8S20846C2__9S20846C189S20846C20__A1__9S20846C16[6]),  6,10},
  {&(_tg__ZTV8S20846C79S20846C20__9S20846C16[5]),  5,9},
  {&(_tg__ZTV8S20846C68S20846C79S20846C20__9S20846C16[3]),  3,7},
  {&(_tg__ZTV8S20846C28S20846C68S20846C79S20846C20__A1__9S20846C16[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C28S20846C68S20846C79S20846C20__A2__9S20846C16[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C28S20846C68S20846C79S20846C20__A2__9S20846C16[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C28S20846C68S20846C79S20846C20__A1__9S20846C16[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C68S20846C79S20846C20__9S20846C16[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C79S20846C20__9S20846C16[4]),  4,7},
  {&(_tg__ZTV8S20846C4__A1__8S20846C79S20846C20__9S20846C16[4]),  4,6},
  {&(_tg__ZTV8S20846C2__A1__8S20846C79S20846C20__9S20846C16[6]),  6,10},
  {&(_tg__ZTV8S20846C3__9S20846C20__9S20846C16[4]),  4,7},
  {&(_tg__ZTV8S20846C2__9S20846C20__9S20846C16[6]),  6,10},
  {&(_tg__ZTV8S20846C4__A1__9S20846C20__9S20846C16[4]),  4,6},
  {&(_tg__ZTV8S20846C7__9S20846C20__9S20846C16[5]),  5,9},
  {&(_ZTV9S20846C16[29]),  29,67},
  {&(_ZTV9S20846C16[40]),  40,67},
  {&(_ZTV9S20846C16[50]),  50,67},
  {&(_ZTV9S20846C16[59]),  59,67},
  {&(_ZTV9S20846C16[65]),  65,67},
  {&(_ZTV9S20846C16[21]),  21,67},
  {&(_tg__ZTV9S20846C17__9S20846C16[5]),  5,9},
  {&(_tg__ZTV9S20846C189S20846C17__9S20846C16[4]),  4,7},
  {&(_tg__ZTV8S20846C3__9S20846C189S20846C17__9S20846C16[4]),  4,7},
  {&(_tg__ZTV8S20846C2__9S20846C189S20846C17__9S20846C16[6]),  6,10},
  {&(_tg__ZTV8S20846C2__9S20846C17__9S20846C16[6]),  6,10},
  {&(_tg__ZTV8S20846C3__9S20846C17__9S20846C16[4]),  4,7},
  {&(_tg__ZTV9S20846C11__9S20846C17__9S20846C16[5]),  5,7},
  {&(_tg__ZTV8S20846C2__9S20846C16[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C2__9S20846C16[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C2__9S20846C16[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C2__9S20846C16[4]),  4,7},
  {&(_tg__ZTV9S20846C11__9S20846C16[4]),  4,6},
  {&(_tg__ZTV8S20846C2__9S20846C11__9S20846C16[6]),  6,10},
  {&(_tg__ZTV8S20846C3__9S20846C11__9S20846C16[4]),  4,7},
  {&(_tg__ZTV8S20846C4__A1__9S20846C16[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C4__A1__9S20846C16[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S20846C16[];
extern  VTBL_ENTRY _ZTV9S20846C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C16[];
static VTBL_ENTRY alt_thunk_names28[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C17D0Ev,_ZTv0_n20_N9S20846C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N9S20846C17D0Ev,_ZThn1480_N9S20846C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C17D1Ev,_ZTv0_n20_N9S20846C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N9S20846C17D1Ev,_ZThn1480_N9S20846C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C17D0Ev,_ZTv0_n16_N9S20846C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S20846C17D0Ev,_ZThn1420_N9S20846C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C17D1Ev,_ZTv0_n16_N9S20846C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S20846C17D1Ev,_ZThn1420_N9S20846C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C20D0Ev,_ZTv0_n16_N9S20846C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16560_N9S20846C20D0Ev,_ZThn12364_N9S20846C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N9S20846C20D0Ev,_ZThn4816_N9S20846C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C20D1Ev,_ZTv0_n16_N9S20846C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16560_N9S20846C20D1Ev,_ZThn12364_N9S20846C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N9S20846C20D1Ev,_ZThn4816_N9S20846C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C20D0Ev,_ZTv0_n12_N9S20846C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4344_N9S20846C20D0Ev,_ZThn3312_N9S20846C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C20D1Ev,_ZTv0_n12_N9S20846C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4344_N9S20846C20D1Ev,_ZThn3312_N9S20846C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4960_N8S20846C7D0Ev,_ZThn3792_N8S20846C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn15168_N8S20846C7D0Ev,_ZThn11340_N8S20846C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4960_N8S20846C7D1Ev,_ZThn3792_N8S20846C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn15168_N8S20846C7D1Ev,_ZThn11340_N8S20846C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C7D0Ev,_ZTv0_n12_N8S20846C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2952_N8S20846C7D0Ev,_ZThn2288_N8S20846C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C7D1Ev,_ZTv0_n12_N8S20846C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2952_N8S20846C7D1Ev,_ZThn2288_N8S20846C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2952_N8S20846C6D0Ev,_ZThn2288_N8S20846C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2952_N8S20846C6D1Ev,_ZThn2288_N8S20846C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2952_N8S20846C2D0Ev,_ZThn2288_N8S20846C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2952_N8S20846C2D1Ev,_ZThn2288_N8S20846C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2952_N8S20846C4D0Ev,_ZThn2288_N8S20846C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2952_N8S20846C4D1Ev,_ZThn2288_N8S20846C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C18D0Ev,_ZTv0_n16_N9S20846C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S20846C18D0Ev,_ZThn1420_N9S20846C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N9S20846C18D0Ev,_ZThn4816_N9S20846C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C18D1Ev,_ZTv0_n16_N9S20846C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S20846C18D1Ev,_ZThn1420_N9S20846C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N9S20846C18D1Ev,_ZThn4816_N9S20846C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C18D0Ev,_ZTv0_n12_N9S20846C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4344_N9S20846C18D0Ev,_ZThn3312_N9S20846C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C18D1Ev,_ZTv0_n12_N9S20846C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4344_N9S20846C18D1Ev,_ZThn3312_N9S20846C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C16D0Ev,_ZTv0_n20_N9S20846C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6464_N9S20846C16D0Ev,_ZThn4876_N9S20846C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C16D1Ev,_ZTv0_n20_N9S20846C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6464_N9S20846C16D1Ev,_ZThn4876_N9S20846C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C16D0Ev,_ZTv0_n16_N9S20846C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16560_N9S20846C16D0Ev,_ZThn12364_N9S20846C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N9S20846C16D0Ev,_ZThn4816_N9S20846C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C16D1Ev,_ZTv0_n16_N9S20846C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16560_N9S20846C16D1Ev,_ZThn12364_N9S20846C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N9S20846C16D1Ev,_ZThn4816_N9S20846C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20846C16D0Ev,_ZTv0_n24_N9S20846C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4448_N9S20846C16D0Ev,_ZThn3396_N9S20846C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20846C16D1Ev,_ZTv0_n24_N9S20846C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4448_N9S20846C16D1Ev,_ZThn3396_N9S20846C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C16D0Ev,_ZTv0_n12_N9S20846C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4344_N9S20846C16D0Ev,_ZThn3312_N9S20846C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C16D1Ev,_ZTv0_n12_N9S20846C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4344_N9S20846C16D1Ev,_ZThn3312_N9S20846C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20846C16 = {  "S20846C16", // class name
  bases_S20846C16, 17,
  &(vtc_S20846C16[0]), // expected_vtbl_contents
  &(vtt_S20846C16[0]), // expected_vtt_contents
  ABISELECT(16592,12388), // object size
  NSPAIRA(_ZTI9S20846C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20846C16),67, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20846C16),41, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names28,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20846C21  : virtual S20846C6 {
  void *s20846c21f0[6];
  ~S20846C21(); // tgen
  S20846C21(); // tgen
};
//SIG(-1 S20846C21) C1{ VBC2{ VBC3{ vd v1 Fs[6] FL[8] Fi} BC4{ VBC3 BC5{ VBC3 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC3 Fp[3] FL[5] Fi} Fp[6]}


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

static void Test_S20846C21()
{
  extern Class_Descriptor cd_S20846C21;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(59,86)];
    init_test(&cd_S20846C21, buf);
    S20846C21 *dp, &lv = *(dp=new (buf) S20846C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,340), "sizeof(S20846C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20846C21)");
    check_base_class_offset(lv, (S20846C3*)(S20846C6*), ABISELECT(368,256), "S20846C21");
    check_base_class_offset(lv, (S20846C3*)(S20846C2*)(S20846C6*), ABISELECT(368,256), "S20846C21");
    check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*)(S20846C6*), ABISELECT(368,256), "S20846C21");
    check_base_class_offset(lv, (S20846C4*)(S20846C2*)(S20846C6*), ABISELECT(56,28), "S20846C21");
    check_base_class_offset(lv, (S20846C2*)(S20846C6*), ABISELECT(56,28), "S20846C21");
    check_base_class_offset(lv, (S20846C6*), ABISELECT(56,28), "S20846C21");
    check_field_offset(lv, s20846c21f0, ABISELECT(8,4), "S20846C21.s20846c21f0");
    test_class_info(&lv, &cd_S20846C21);
    dp->~S20846C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20846C21(Test_S20846C21, "S20846C21", ABISELECT(464,340));

#else // __cplusplus

extern void _ZN9S20846C21C1Ev();
extern void _ZN9S20846C21D1Ev();
Name_Map name_map_S20846C21[] = {
  NSPAIR(_ZN9S20846C21C1Ev),
  NSPAIR(_ZN9S20846C21D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20846C3;
extern VTBL_ENTRY _ZTI8S20846C3[];
extern  VTBL_ENTRY _ZTV8S20846C3[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C6;
extern VTBL_ENTRY _ZTI8S20846C6[];
extern  VTBL_ENTRY _ZTV8S20846C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C6[];
static Base_Class bases_S20846C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20846C3,    ABISELECT(368,256), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //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_S20846C4,    ABISELECT(56,28), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(56,28), //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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20846C6,    ABISELECT(56,28), //bcp->offset
    6, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20846C21[];
extern void _ZN9S20846C21D1Ev();
extern void _ZN9S20846C21D0Ev();
extern void ABISELECT(_ZTv0_n32_N9S20846C21D1Ev,_ZTv0_n16_N9S20846C21D1Ev)();
extern void ABISELECT(_ZThn56_N9S20846C21D1Ev,_ZThn28_N9S20846C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C21D0Ev,_ZTv0_n16_N9S20846C21D0Ev)();
extern void ABISELECT(_ZThn56_N9S20846C21D0Ev,_ZThn28_N9S20846C21D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTv0_n24_N9S20846C21D1Ev,_ZTv0_n12_N9S20846C21D1Ev)();
extern void ABISELECT(_ZThn368_N9S20846C21D1Ev,_ZThn256_N9S20846C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C21D0Ev,_ZTv0_n12_N9S20846C21D0Ev)();
extern void ABISELECT(_ZThn368_N9S20846C21D0Ev,_ZThn256_N9S20846C21D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY vtc_S20846C21[] = {
  ABISELECT(368,256),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C21[0]),
  (VTBL_ENTRY)&_ZN9S20846C21D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C21D0Ev,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(312,228),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S20846C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C21D1Ev,_ZTv0_n16_N9S20846C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C21D0Ev,_ZTv0_n16_N9S20846C21D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  0,
  ABISELECT(-368,-256),
  ABISELECT(-368,-256),
  (VTBL_ENTRY)&(_ZTI9S20846C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C21D1Ev,_ZTv0_n12_N9S20846C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C21D0Ev,_ZTv0_n12_N9S20846C21D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern VTBL_ENTRY _ZTV9S20846C21[];
extern void _ZN8S20846C6D1Ev();
extern void _ZN8S20846C6D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C6__9S20846C21[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&_ZN8S20846C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C28S20846C6__9S20846C21[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C28S20846C6__9S20846C21[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZThn312_N8S20846C4D1Ev,_ZThn228_N8S20846C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void ABISELECT(_ZThn312_N8S20846C4D0Ev,_ZThn228_N8S20846C4D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C28S20846C6__9S20846C21[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZThn312_N8S20846C2D1Ev,_ZThn228_N8S20846C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void ABISELECT(_ZThn312_N8S20846C2D0Ev,_ZThn228_N8S20846C2D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C28S20846C6__9S20846C21[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev)();
extern void ABISELECT(_ZThn312_N8S20846C6D1Ev,_ZThn228_N8S20846C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev)();
extern void ABISELECT(_ZThn312_N8S20846C6D0Ev,_ZThn228_N8S20846C6D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C6__9S20846C21[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
static  VTT_ENTRY vtt_S20846C21[] = {
  {&(_ZTV9S20846C21[4]),  4,23},
  {&(_ZTV9S20846C21[12]),  12,23},
  {&(_ZTV9S20846C21[20]),  20,23},
  {&(_tg__ZTV8S20846C6__9S20846C21[3]),  3,7},
  {&(_tg__ZTV8S20846C28S20846C6__9S20846C21[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C28S20846C6__9S20846C21[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C28S20846C6__9S20846C21[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C28S20846C6__9S20846C21[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C6__9S20846C21[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S20846C21[];
extern  VTBL_ENTRY _ZTV9S20846C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C21[];
static VTBL_ENTRY alt_thunk_names29[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20846C6D0Ev,_ZThn228_N8S20846C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20846C6D1Ev,_ZThn228_N8S20846C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20846C2D0Ev,_ZThn228_N8S20846C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20846C2D1Ev,_ZThn228_N8S20846C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20846C4D0Ev,_ZThn228_N8S20846C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20846C4D1Ev,_ZThn228_N8S20846C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C21D0Ev,_ZTv0_n12_N9S20846C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S20846C21D0Ev,_ZThn256_N9S20846C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C21D1Ev,_ZTv0_n12_N9S20846C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S20846C21D1Ev,_ZThn256_N9S20846C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C21D0Ev,_ZTv0_n16_N9S20846C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20846C21D0Ev,_ZThn28_N9S20846C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C21D1Ev,_ZTv0_n16_N9S20846C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20846C21D1Ev,_ZThn28_N9S20846C21D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20846C21 = {  "S20846C21", // class name
  bases_S20846C21, 4,
  &(vtc_S20846C21[0]), // expected_vtbl_contents
  &(vtt_S20846C21[0]), // expected_vtt_contents
  ABISELECT(464,340), // object size
  NSPAIRA(_ZTI9S20846C21),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20846C21),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20846C21),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names29,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20846C23  {
  int  :0;
  int s20846c23f1[6];
  int s20846c23f2;
  void *s20846c23f3;
  virtual void  v10(); // _ZN9S20846C233v10Ev
  ~S20846C23(); // tgen
  S20846C23(); // tgen
};
//SIG(-1 S20846C23) C1{ v1 Fi:0 Fi[7] Fp}


void  S20846C23 ::v10(){vfunc_called(this, "_ZN9S20846C233v10Ev");}
S20846C23 ::~S20846C23(){ note_dtor("S20846C23", this);} // tgen
S20846C23 ::S20846C23(){ note_ctor("S20846C23", this);} // tgen

static void Test_S20846C23()
{
  extern Class_Descriptor cd_S20846C23;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S20846C23, buf);
    S20846C23 *dp, &lv = *(dp=new (buf) S20846C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S20846C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20846C23)");
    check_field_offset(lv, s20846c23f1, ABISELECT(8,4), "S20846C23.s20846c23f1");
    check_field_offset(lv, s20846c23f2, ABISELECT(32,28), "S20846C23.s20846c23f2");
    check_field_offset(lv, s20846c23f3, ABISELECT(40,32), "S20846C23.s20846c23f3");
    test_class_info(&lv, &cd_S20846C23);
    dp->~S20846C23();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20846C23(Test_S20846C23, "S20846C23", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN9S20846C23C1Ev();
extern void _ZN9S20846C23D1Ev();
Name_Map name_map_S20846C23[] = {
  NSPAIR(_ZN9S20846C23C1Ev),
  NSPAIR(_ZN9S20846C23D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20846C23[];
extern void _ZN9S20846C233v10Ev();
static  VTBL_ENTRY vtc_S20846C23[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C23[0]),
  (VTBL_ENTRY)&_ZN9S20846C233v10Ev,
};
extern VTBL_ENTRY _ZTI9S20846C23[];
extern  VTBL_ENTRY _ZTV9S20846C23[];
Class_Descriptor cd_S20846C23 = {  "S20846C23", // class name
  0,0,//no base classes
  &(vtc_S20846C23[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI9S20846C23),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20846C23),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  S20846C22  : virtual S20846C21 , virtual S20846C17 , virtual S20846C10 , S20846C23 , S20846C3 {
  int s20846c22f0;
  void *s20846c22f1;
  int s20846c22f2;
  ::S20846C11 s20846c22f3[2];
  ::S20846C4 s20846c22f4;
  long double s20846c22f5;
  int s20846c22f6[3];
  ::S3052C13 s20846c22f7;
  __tsi64 s20846c22f8;
  int s20846c22f9[2];
  int s20846c22f10;
  ::S3052C13 s20846c22f11;
  void *s20846c22f12;
  virtual void  v11(); // _ZN9S20846C223v11Ev
  ~S20846C22(); // tgen
  S20846C22(); // tgen
};
//SIG(-1 S20846C22) C1{ VBC2{ VBC3{ VBC4{ vd v2 Fs[6] FL[8] Fi} BC5{ VBC4 BC6{ VBC4 FL Fp FL:54} v3 v4 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC4 Fp[3] FL[5] Fi} Fp[6]} VBC7{ VBC5 VBC8{ BC9{ m Fp Fi FL Fp Fi} VBC5 Fp Fc[4] Fi:11 Fp[2] Fi[6] FC10{ VBC4 BC5 BC3 BC11{ vd m FC12{ VBC13{ vd v10 Fs[6] FL[8] Fi} BC14{ VBC13 FL Fp FL:54} v8 v9 Fc:0 Fp[8] Fc}} VBC6 Fp Fl FC3 FC11 FC6 Fi[2] FU15{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} BC16{ BC11 VBC4 VBC5 v5 FC5[2] FD FC11 Fp[3] FC3 Fi FU17{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi} v6 Fp FC18{} FC4 FL FU15 FL[6] FL FC3} VBC19{ BC3 VBC5 BC8 VBC10 VBC11 vd FC11[2] Fi FD FD Fc:0 Fp} BC20{ v7 Fi:0 Fi[6] Fi Fp} BC4 v1 Fi Fp Fi FC8[2] FC6 FD Fi[3] FU15 FL Fi[2] Fi FU15 Fp}


void  S20846C22 ::v11(){vfunc_called(this, "_ZN9S20846C223v11Ev");}
S20846C22 ::~S20846C22(){ note_dtor("S20846C22", this);} // tgen
S20846C22 ::S20846C22(){ note_ctor("S20846C22", this);} // tgen

static void Test_S20846C22()
{
  extern Class_Descriptor cd_S20846C22;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2892,8558)];
    init_test(&cd_S20846C22, buf);
    S20846C22 *dp, &lv = *(dp=new (buf) S20846C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(46256,34228), "sizeof(S20846C22)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20846C22)");
    /*is_ambiguous_... S20846C22::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C6*), ABISELECT(21368,15832), "S20846C22");
    /*is_ambiguous_... S20846C22::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C2*)(S20846C6*), ABISELECT(21368,15832), "S20846C22");
    /*is_ambiguous_... S20846C22::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*)(S20846C6*), ABISELECT(21368,15832), "S20846C22");
    /*is_ambiguous_... S20846C22::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C2*), ABISELECT(21368,15832), "S20846C22");
    /*is_ambiguous_... S20846C22::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*), ABISELECT(21368,15832), "S20846C22");
    check_base_class_offset(lv, (S20846C3*)(S20846C18*)(S20846C17*), ABISELECT(21368,15832), "S20846C22");
    /*is_ambiguous_... S20846C10::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C6*)(S20846C10*), ABISELECT(21368,15832), "S20846C22");
    /*is_ambiguous_... S20846C10::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C2*)(S20846C6*)(S20846C10*), ABISELECT(21368,15832), "S20846C22");
    /*is_ambiguous_... S20846C10::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*)(S20846C6*)(S20846C10*), ABISELECT(21368,15832), "S20846C22");
    check_base_class_offset(lv, (S20846C3*)(S20846C13*), ABISELECT(21368,15832), "S20846C22");
    /*is_ambiguous_... S20846C13::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C2*)(S20846C13*), ABISELECT(21368,15832), "S20846C22");
    /*is_ambiguous_... S20846C13::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*)(S20846C13*), ABISELECT(21368,15832), "S20846C22");
    check_base_class_offset(lv, (S20846C3*)(S20846C6*)(S20846C13*), ABISELECT(21368,15832), "S20846C22");
    check_base_class_offset(lv, (S20846C3*)(S20846C2*)(S20846C6*)(S20846C13*), ABISELECT(21368,15832), "S20846C22");
    check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*)(S20846C6*)(S20846C13*), ABISELECT(21368,15832), "S20846C22");
    /*is_ambiguous_... S20846C22::S20846C4 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*), ABISELECT(21368,15832), "S20846C22");
    /*is_ambiguous_... S20846C22::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C2*)(S20846C6*), ABISELECT(21056,15604), "S20846C22");
    /*is_ambiguous_... S20846C22::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C2*)(S20846C6*), ABISELECT(21056,15604), "S20846C22");
    check_base_class_offset(lv, (S20846C6*)(S20846C21*), ABISELECT(21056,15604), "S20846C22");
    check_base_class_offset(lv, (S20846C21*), ABISELECT(21000,15576), "S20846C22");
    /*is_ambiguous_... S20846C22::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C2*), ABISELECT(23376,17336), "S20846C22");
    check_base_class_offset(lv, (S20846C2*)(S20846C17*), ABISELECT(23376,17336), "S20846C22");
    /*is_ambiguous_... S20846C22::S20846C11 */ AMB_check_base_class_offset(lv, (S20846C2*)(S20846C11*), ABISELECT(23376,17336), "S20846C22");
    check_base_class_offset(lv, (S20846C2*)(S20846C18*)(S20846C17*), ABISELECT(23376,17336), "S20846C22");
    /*is_ambiguous_... S20846C10::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C2*)(S20846C10*), ABISELECT(23376,17336), "S20846C22");
    check_base_class_offset(lv, (S20846C2*)(S20846C11*)(S20846C10*), ABISELECT(23376,17336), "S20846C22");
    /*is_ambiguous_... S20846C22::S20846C11 */ AMB_check_base_class_offset(lv, (S3052C10*)(S20846C11*), ABISELECT(23496,17400), "S20846C22");
    check_base_class_offset(lv, (S20846C11*)(S20846C17*), ABISELECT(23488,17396), "S20846C22");
    check_base_class_offset(lv, (S3052C12*)(S20846C18*)(S20846C17*), ABISELECT(21472,15916), "S20846C22");
    check_base_class_offset(lv, (S20846C18*)(S20846C17*), ABISELECT(21472,15916), "S20846C22");
    check_base_class_offset(lv, (S20846C17*), ABISELECT(21472,15916), "S20846C22");
    /*is_ambiguous_... S20846C10::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C2*)(S20846C6*)(S20846C10*), ABISELECT(33584,24884), "S20846C22");
    /*is_ambiguous_... S20846C10::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C2*)(S20846C6*)(S20846C10*), ABISELECT(33584,24884), "S20846C22");
    /*is_ambiguous_... S20846C10::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C6*)(S20846C10*), ABISELECT(33584,24884), "S20846C22");
    check_base_class_offset(lv, (S3052C10*)(S20846C11*)(S20846C10*), ABISELECT(33912,25116), "S20846C22");
    check_base_class_offset(lv, (S20846C11*)(S20846C10*), ABISELECT(33904,25112), "S20846C22");
    /*is_ambiguous_... S20846C13::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C2*)(S20846C13*), ABISELECT(44480,32928), "S20846C22");
    /*is_ambiguous_... S20846C13::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C2*)(S20846C13*), ABISELECT(44480,32928), "S20846C22");
    check_base_class_offset(lv, (S20846C4*)(S20846C2*)(S20846C6*)(S20846C13*), ABISELECT(44584,32988), "S20846C22");
    check_base_class_offset(lv, (S20846C2*)(S20846C6*)(S20846C13*), ABISELECT(44584,32988), "S20846C22");
    check_base_class_offset(lv, (S20846C6*)(S20846C13*), ABISELECT(44584,32988), "S20846C22");
    check_base_class_offset(lv, (S3052C12*)(S20846C13*), ABISELECT(44896,33216), "S20846C22");
    /*is_ambiguous_... S20846C13::S20846C4 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C13*), ABISELECT(46016,34056), "S20846C22");
    check_base_class_offset(lv, (S20846C13*)(S20846C10*), ABISELECT(44480,32928), "S20846C22");
    /*is_ambiguous_... S20846C10::S3052C12 */ AMB_check_base_class_offset(lv, (S3052C12*)(S20846C10*), ABISELECT(46048,34080), "S20846C22");
    check_base_class_offset(lv, (S20846C10*), ABISELECT(33584,24884), "S20846C22");
    check_base_class_offset(lv, (S20846C23*), 0, "S20846C22");
    /*is_ambiguous_... S20846C22::S20846C3 */ AMB_check_base_class_offset(lv, (S20846C3*), ABISELECT(48,36), "S20846C22");
    check_field_offset(lv, s20846c22f0, ABISELECT(140,120), "S20846C22.s20846c22f0");
    check_field_offset(lv, s20846c22f1, ABISELECT(144,124), "S20846C22.s20846c22f1");
    check_field_offset(lv, s20846c22f2, ABISELECT(152,128), "S20846C22.s20846c22f2");
    check_field_offset(lv, s20846c22f3, ABISELECT(160,132), "S20846C22.s20846c22f3");
    check_field_offset(lv, s20846c22f4, ABISELECT(20768,15396), "S20846C22.s20846c22f4");
    check_field_offset(lv, s20846c22f5, ABISELECT(20896,15504), "S20846C22.s20846c22f5");
    check_field_offset(lv, s20846c22f6, ABISELECT(20912,15516), "S20846C22.s20846c22f6");
    check_field_offset(lv, s20846c22f7, ABISELECT(20928,15528), "S20846C22.s20846c22f7");
    check_field_offset(lv, s20846c22f8, ABISELECT(20944,15540), "S20846C22.s20846c22f8");
    check_field_offset(lv, s20846c22f9, ABISELECT(20952,15548), "S20846C22.s20846c22f9");
    check_field_offset(lv, s20846c22f10, ABISELECT(20960,15556), "S20846C22.s20846c22f10");
    check_field_offset(lv, s20846c22f11, ABISELECT(20976,15560), "S20846C22.s20846c22f11");
    check_field_offset(lv, s20846c22f12, ABISELECT(20992,15572), "S20846C22.s20846c22f12");
    test_class_info(&lv, &cd_S20846C22);
    dp->~S20846C22();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20846C22(Test_S20846C22, "S20846C22", ABISELECT(46256,34228));

#else // __cplusplus

extern void _ZN9S20846C22C1Ev();
extern void _ZN9S20846C22D1Ev();
Name_Map name_map_S20846C22[] = {
  NSPAIR(_ZN9S20846C22C1Ev),
  NSPAIR(_ZN9S20846C22D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20846C3;
extern VTBL_ENTRY _ZTI8S20846C3[];
extern  VTBL_ENTRY _ZTV8S20846C3[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C6;
extern VTBL_ENTRY _ZTI8S20846C6[];
extern  VTBL_ENTRY _ZTV8S20846C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C6[];
extern Class_Descriptor cd_S20846C21;
extern VTBL_ENTRY _ZTI9S20846C21[];
extern  VTBL_ENTRY _ZTV9S20846C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C21[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S20846C11;
extern VTBL_ENTRY _ZTI9S20846C11[];
extern  VTBL_ENTRY _ZTV9S20846C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C11[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S20846C18;
extern VTBL_ENTRY _ZTI9S20846C18[];
extern  VTBL_ENTRY _ZTV9S20846C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C18[];
extern Class_Descriptor cd_S20846C17;
extern VTBL_ENTRY _ZTI9S20846C17[];
extern  VTBL_ENTRY _ZTV9S20846C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C17[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C6;
extern VTBL_ENTRY _ZTI8S20846C6[];
extern  VTBL_ENTRY _ZTV8S20846C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C6[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S20846C11;
extern VTBL_ENTRY _ZTI9S20846C11[];
extern  VTBL_ENTRY _ZTV9S20846C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C11[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C6;
extern VTBL_ENTRY _ZTI8S20846C6[];
extern  VTBL_ENTRY _ZTV8S20846C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C6[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C13;
extern VTBL_ENTRY _ZTI9S20846C13[];
extern  VTBL_ENTRY _ZTV9S20846C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C13[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S20846C10;
extern VTBL_ENTRY _ZTI9S20846C10[];
extern  VTBL_ENTRY _ZTV9S20846C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C10[];
extern Class_Descriptor cd_S20846C23;
extern VTBL_ENTRY _ZTI9S20846C23[];
extern  VTBL_ENTRY _ZTV9S20846C23[];
extern Class_Descriptor cd_S20846C3;
extern VTBL_ENTRY _ZTI8S20846C3[];
extern  VTBL_ENTRY _ZTV8S20846C3[];
static Base_Class bases_S20846C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20846C3,    ABISELECT(21368,15832), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //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_S20846C4,    ABISELECT(21056,15604), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(21056,15604), //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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20846C6,    ABISELECT(21056,15604), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20846C21,    ABISELECT(21000,15576), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20846C4,    ABISELECT(23376,17336), //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(23376,17336), //bcp->offset
    57, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3052C10,    ABISELECT(23496,17400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20846C11,    ABISELECT(23488,17396), //bcp->offset
    67, //bcp->virtual_function_table_offset
    5, //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
    11, //immediately_derived
  0, 1},
  {&cd_S3052C12,    ABISELECT(21472,15916), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S20846C18,    ABISELECT(21472,15916), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20846C17,    ABISELECT(21472,15916), //bcp->offset
    45, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20846C4,    ABISELECT(33584,24884), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(33584,24884), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20846C6,    ABISELECT(33584,24884), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3052C10,    ABISELECT(33912,25116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20846C11,    ABISELECT(33904,25112), //bcp->offset
    88, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20846C4,    ABISELECT(44480,32928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(44480,32928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20846C4,    ABISELECT(44584,32988), //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
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(44584,32988), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20846C6,    ABISELECT(44584,32988), //bcp->offset
    105, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S3052C12,    ABISELECT(44896,33216), //bcp->offset
    112, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20846C4,    ABISELECT(46016,34056), //bcp->offset
    116, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S20846C13,    ABISELECT(44480,32928), //bcp->offset
    94, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3052C12,    ABISELECT(46048,34080), //bcp->offset
    122, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S20846C10,    ABISELECT(33584,24884), //bcp->offset
    74, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20846C23,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20846C3,    ABISELECT(48,36), //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
    27, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20846C22[];
extern void _ZN9S20846C233v10Ev();
extern void _ZN9S20846C223v11Ev();
extern void _ZN9S20846C22D1Ev();
extern void _ZN9S20846C22D0Ev();
extern void ABISELECT(_ZThn48_N9S20846C22D1Ev,_ZThn36_N9S20846C22D1Ev)();
extern void ABISELECT(_ZThn48_N9S20846C22D0Ev,_ZThn36_N9S20846C22D0Ev)();
extern void _ZN8S20846C32v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S20846C22D1Ev,_ZTv0_n20_N9S20846C22D1Ev)();
extern void ABISELECT(_ZThn21000_N9S20846C22D1Ev,_ZThn15576_N9S20846C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20846C22D0Ev,_ZTv0_n20_N9S20846C22D0Ev)();
extern void ABISELECT(_ZThn21000_N9S20846C22D0Ev,_ZThn15576_N9S20846C22D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C22D1Ev,_ZTv0_n16_N9S20846C22D1Ev)();
extern void ABISELECT(_ZThn21056_N9S20846C22D1Ev,_ZThn15604_N9S20846C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C22D0Ev,_ZTv0_n16_N9S20846C22D0Ev)();
extern void ABISELECT(_ZThn21056_N9S20846C22D0Ev,_ZThn15604_N9S20846C22D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTv0_n24_N9S20846C22D1Ev,_ZTv0_n12_N9S20846C22D1Ev)();
extern void ABISELECT(_ZThn21368_N9S20846C22D1Ev,_ZThn15832_N9S20846C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C22D0Ev,_ZTv0_n12_N9S20846C22D0Ev)();
extern void ABISELECT(_ZThn21368_N9S20846C22D0Ev,_ZThn15832_N9S20846C22D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S20846C22D1Ev,_ZTv0_n24_N9S20846C22D1Ev)();
extern void ABISELECT(_ZThn21472_N9S20846C22D1Ev,_ZThn15916_N9S20846C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20846C22D0Ev,_ZTv0_n24_N9S20846C22D0Ev)();
extern void ABISELECT(_ZThn21472_N9S20846C22D0Ev,_ZThn15916_N9S20846C22D0Ev)() __attribute__((weak));
extern void _ZN9S20846C182v7Ev();
extern void _ZN9S20846C172v8Ev();
extern void ABISELECT(_ZTv0_n32_N9S20846C22D1Ev,_ZTv0_n16_N9S20846C22D1Ev)();
extern void ABISELECT(_ZThn23376_N9S20846C22D1Ev,_ZThn17336_N9S20846C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C22D0Ev,_ZTv0_n16_N9S20846C22D0Ev)();
extern void ABISELECT(_ZThn23376_N9S20846C22D0Ev,_ZThn17336_N9S20846C22D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTv0_n40_N9S20846C22D1Ev,_ZTv0_n20_N9S20846C22D1Ev)();
extern void ABISELECT(_ZThn23488_N9S20846C22D1Ev,_ZThn17396_N9S20846C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20846C22D0Ev,_ZTv0_n20_N9S20846C22D0Ev)();
extern void ABISELECT(_ZThn23488_N9S20846C22D0Ev,_ZThn17396_N9S20846C22D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20846C22D1Ev,_ZTv0_n32_N9S20846C22D1Ev)();
extern void ABISELECT(_ZThn33584_N9S20846C22D1Ev,_ZThn24884_N9S20846C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20846C22D0Ev,_ZTv0_n32_N9S20846C22D0Ev)();
extern void ABISELECT(_ZThn33584_N9S20846C22D0Ev,_ZThn24884_N9S20846C22D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTvn320_n64_N9S20846C22D1Ev,_ZTvn228_n32_N9S20846C22D1Ev)();
extern void ABISELECT(_ZTvn320_n64_N9S20846C22D0Ev,_ZTvn228_n32_N9S20846C22D0Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20846C22D1Ev,_ZTv0_n20_N9S20846C22D1Ev)();
extern void ABISELECT(_ZThn44480_N9S20846C22D1Ev,_ZThn32928_N9S20846C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20846C22D0Ev,_ZTv0_n20_N9S20846C22D0Ev)();
extern void ABISELECT(_ZThn44480_N9S20846C22D0Ev,_ZThn32928_N9S20846C22D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTvn104_n40_N9S20846C22D1Ev,_ZTvn60_n20_N9S20846C22D1Ev)();
extern void ABISELECT(_ZTvn104_n40_N9S20846C22D0Ev,_ZTvn60_n20_N9S20846C22D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTvn416_n40_N9S20846C22D1Ev,_ZTvn288_n20_N9S20846C22D1Ev)();
extern void ABISELECT(_ZTvn416_n40_N9S20846C22D0Ev,_ZTvn288_n20_N9S20846C22D0Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20846C22D1Ev,_ZTv0_n16_N9S20846C22D1Ev)();
extern void ABISELECT(_ZThn46016_N9S20846C22D1Ev,_ZThn34056_N9S20846C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C22D0Ev,_ZTv0_n16_N9S20846C22D0Ev)();
extern void ABISELECT(_ZThn46016_N9S20846C22D0Ev,_ZThn34056_N9S20846C22D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C22D1Ev,_ZTv0_n12_N9S20846C22D1Ev)();
extern void ABISELECT(_ZThn46048_N9S20846C22D1Ev,_ZThn34080_N9S20846C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C22D0Ev,_ZTv0_n12_N9S20846C22D0Ev)();
extern void ABISELECT(_ZThn46048_N9S20846C22D0Ev,_ZThn34080_N9S20846C22D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20846C22[] = {
  ABISELECT(46048,34080),
  ABISELECT(46016,34056),
  ABISELECT(44480,32928),
  ABISELECT(33584,24884),
  ABISELECT(23488,17396),
  ABISELECT(23376,17336),
  ABISELECT(21472,15916),
  ABISELECT(21368,15832),
  ABISELECT(21056,15604),
  ABISELECT(21000,15576),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&_ZN9S20846C233v10Ev,
  (VTBL_ENTRY)&_ZN9S20846C223v11Ev,
  (VTBL_ENTRY)&_ZN9S20846C22D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C22D0Ev,
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S20846C22D1Ev,_ZThn36_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N9S20846C22D0Ev,_ZThn36_N9S20846C22D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
  ABISELECT(-21000,-15576),
  ABISELECT(368,256),
  ABISELECT(56,28),
  ABISELECT(-21000,-15576),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C22D1Ev,_ZTv0_n20_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C22D0Ev,_ZTv0_n20_N9S20846C22D0Ev),
  0,
  0,
  ABISELECT(-21056,-15604),
  ABISELECT(312,228),
  ABISELECT(-21056,-15604),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C22D1Ev,_ZTv0_n16_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C22D0Ev,_ZTv0_n16_N9S20846C22D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  0,
  ABISELECT(-21368,-15832),
  ABISELECT(-21368,-15832),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C22D1Ev,_ZTv0_n12_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C22D0Ev,_ZTv0_n12_N9S20846C22D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
  0,
  0,
  ABISELECT(-21472,-15916),
  ABISELECT(2016,1480),
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  ABISELECT(-21472,-15916),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20846C22D1Ev,_ZTv0_n24_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20846C22D0Ev,_ZTv0_n24_N9S20846C22D0Ev),
  (VTBL_ENTRY)&_ZN9S20846C182v7Ev,
  (VTBL_ENTRY)&_ZN9S20846C172v8Ev,
  0,
  0,
  ABISELECT(-23376,-17336),
  ABISELECT(-2008,-1504),
  ABISELECT(-23376,-17336),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C22D1Ev,_ZTv0_n16_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C22D0Ev,_ZTv0_n16_N9S20846C22D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  ABISELECT(-23488,-17396),
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  ABISELECT(-23488,-17396),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C22D1Ev,_ZTv0_n20_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C22D0Ev,_ZTv0_n20_N9S20846C22D0Ev),
  0,
  0,
  ABISELECT(-33584,-24884),
  ABISELECT(12464,9196),
  ABISELECT(12432,9172),
  ABISELECT(10896,8044),
  ABISELECT(-10208,-7548),
  ABISELECT(-12216,-9052),
  ABISELECT(-33584,-24884),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20846C22D1Ev,_ZTv0_n32_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20846C22D0Ev,_ZTv0_n32_N9S20846C22D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  ABISELECT(-12536,-9280),
  ABISELECT(-10528,-7776),
  ABISELECT(-33904,-25112),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn320_n64_N9S20846C22D1Ev,_ZTvn228_n32_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn320_n64_N9S20846C22D0Ev,_ZTvn228_n32_N9S20846C22D0Ev),
  0,
  0,
  ABISELECT(-44480,-32928),
  ABISELECT(1536,1128),
  ABISELECT(-23112,-17096),
  ABISELECT(-44480,-32928),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C22D1Ev,_ZTv0_n20_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C22D0Ev,_ZTv0_n20_N9S20846C22D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  ABISELECT(-23216,-17156),
  ABISELECT(-44584,-32988),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N9S20846C22D1Ev,_ZTvn60_n20_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N9S20846C22D0Ev,_ZTvn60_n20_N9S20846C22D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  ABISELECT(-44896,-33216),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N9S20846C22D1Ev,_ZTvn288_n20_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N9S20846C22D0Ev,_ZTvn288_n20_N9S20846C22D0Ev),
  ABISELECT(-46016,-34056),
  ABISELECT(-24648,-18224),
  ABISELECT(-46016,-34056),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C22D1Ev,_ZTv0_n16_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C22D0Ev,_ZTv0_n16_N9S20846C22D0Ev),
  ABISELECT(-46048,-34080),
  ABISELECT(-46048,-34080),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C22D1Ev,_ZTv0_n12_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C22D0Ev,_ZTv0_n12_N9S20846C22D0Ev),
};
extern VTBL_ENTRY _ZTV9S20846C22[];
extern void _ZN9S20846C21D1Ev();
extern void _ZN9S20846C21D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C21__9S20846C22[] = {
  ABISELECT(368,256),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C21[0]),
  (VTBL_ENTRY)&_ZN9S20846C21D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C21D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C21D1Ev,_ZTv0_n16_N9S20846C21D1Ev)();
extern void ABISELECT(_ZThn56_N9S20846C21D1Ev,_ZThn28_N9S20846C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C21D0Ev,_ZTv0_n16_N9S20846C21D0Ev)();
extern void ABISELECT(_ZThn56_N9S20846C21D0Ev,_ZThn28_N9S20846C21D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C6__9S20846C21__9S20846C22[] = {
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(312,228),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S20846C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C21D1Ev,_ZTv0_n16_N9S20846C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C21D0Ev,_ZTv0_n16_N9S20846C21D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C21D1Ev,_ZTv0_n12_N9S20846C21D1Ev)();
extern void ABISELECT(_ZThn368_N9S20846C21D1Ev,_ZThn256_N9S20846C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C21D0Ev,_ZTv0_n12_N9S20846C21D0Ev)();
extern void ABISELECT(_ZThn368_N9S20846C21D0Ev,_ZThn256_N9S20846C21D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C21__9S20846C22[] = {
  0,
  ABISELECT(-368,-256),
  ABISELECT(-368,-256),
  (VTBL_ENTRY)&(_ZTI9S20846C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C21D1Ev,_ZTv0_n12_N9S20846C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C21D0Ev,_ZTv0_n12_N9S20846C21D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN8S20846C6D1Ev();
extern void _ZN8S20846C6D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C6__9S20846C22[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&_ZN8S20846C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C28S20846C6__9S20846C22[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C28S20846C6__9S20846C22[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZThn312_N8S20846C4D1Ev,_ZThn228_N8S20846C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void ABISELECT(_ZThn312_N8S20846C4D0Ev,_ZThn228_N8S20846C4D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C28S20846C6__9S20846C22[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZThn312_N8S20846C2D1Ev,_ZThn228_N8S20846C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void ABISELECT(_ZThn312_N8S20846C2D0Ev,_ZThn228_N8S20846C2D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C28S20846C6__9S20846C22[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev)();
extern void ABISELECT(_ZThn312_N8S20846C6D1Ev,_ZThn228_N8S20846C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev)();
extern void ABISELECT(_ZThn312_N8S20846C6D0Ev,_ZThn228_N8S20846C6D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C6__9S20846C22[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN9S20846C17D1Ev();
extern void _ZN9S20846C17D0Ev();
extern void _ZN9S20846C182v7Ev();
extern void _ZN9S20846C172v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C17__9S20846C22[] = {
  ABISELECT(2016,1480),
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C17[0]),
  (VTBL_ENTRY)&_ZN9S20846C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C17D0Ev,
  (VTBL_ENTRY)&_ZN9S20846C182v7Ev,
  (VTBL_ENTRY)&_ZN9S20846C172v8Ev,
};
extern void _ZN9S20846C18D1Ev();
extern void _ZN9S20846C18D0Ev();
extern void _ZN9S20846C182v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C189S20846C17__9S20846C22[] = {
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C18[0]),
  (VTBL_ENTRY)&_ZN9S20846C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C18D0Ev,
  (VTBL_ENTRY)&_ZN9S20846C182v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C18D1Ev,_ZTv0_n12_N9S20846C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20846C18D0Ev,_ZTv0_n12_N9S20846C18D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C189S20846C17__9S20846C22[] = {
  0,
  ABISELECT(104,84),
  ABISELECT(104,84),
  (VTBL_ENTRY)&(_ZTI9S20846C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C18D1Ev,_ZTv0_n12_N9S20846C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C18D0Ev,_ZTv0_n12_N9S20846C18D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C18D1Ev,_ZTv0_n16_N9S20846C18D1Ev)();
extern void ABISELECT(_ZThn1904_N9S20846C18D1Ev,_ZThn1420_N9S20846C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C18D0Ev,_ZTv0_n16_N9S20846C18D0Ev)();
extern void ABISELECT(_ZThn1904_N9S20846C18D0Ev,_ZThn1420_N9S20846C18D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C189S20846C17__9S20846C22[] = {
  0,
  0,
  ABISELECT(-1904,-1420),
  ABISELECT(-2008,-1504),
  ABISELECT(-1904,-1420),
  (VTBL_ENTRY)&(_ZTI9S20846C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C18D1Ev,_ZTv0_n16_N9S20846C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C18D0Ev,_ZTv0_n16_N9S20846C18D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C17D1Ev,_ZTv0_n16_N9S20846C17D1Ev)();
extern void ABISELECT(_ZThn1904_N9S20846C17D1Ev,_ZThn1420_N9S20846C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C17D0Ev,_ZTv0_n16_N9S20846C17D0Ev)();
extern void ABISELECT(_ZThn1904_N9S20846C17D0Ev,_ZThn1420_N9S20846C17D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C17__9S20846C22[] = {
  0,
  0,
  ABISELECT(-1904,-1420),
  ABISELECT(-2008,-1504),
  ABISELECT(-1904,-1420),
  (VTBL_ENTRY)&(_ZTI9S20846C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C17D1Ev,_ZTv0_n16_N9S20846C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C17D0Ev,_ZTv0_n16_N9S20846C17D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C17D1Ev,_ZTv0_n12_N9S20846C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20846C17D0Ev,_ZTv0_n12_N9S20846C17D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C17__9S20846C22[] = {
  0,
  ABISELECT(104,84),
  ABISELECT(104,84),
  (VTBL_ENTRY)&(_ZTI9S20846C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C17D1Ev,_ZTv0_n12_N9S20846C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C17D0Ev,_ZTv0_n12_N9S20846C17D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20846C17D1Ev,_ZTv0_n20_N9S20846C17D1Ev)();
extern void ABISELECT(_ZThn2016_N9S20846C17D1Ev,_ZThn1480_N9S20846C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20846C17D0Ev,_ZTv0_n20_N9S20846C17D0Ev)();
extern void ABISELECT(_ZThn2016_N9S20846C17D0Ev,_ZThn1480_N9S20846C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20846C11__9S20846C17__9S20846C22[] = {
  ABISELECT(-2016,-1480),
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  ABISELECT(-2016,-1480),
  (VTBL_ENTRY)&(_ZTI9S20846C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C17D1Ev,_ZTv0_n20_N9S20846C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C17D0Ev,_ZTv0_n20_N9S20846C17D0Ev),
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__A1__9S20846C22[] = {
  ABISELECT(-2008,-1504),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C2__A1__9S20846C22[] = {
  ABISELECT(-2008,-1504),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C2__A1__9S20846C22[] = {
  0,
  ABISELECT(2008,1504),
  ABISELECT(2008,1504),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C2__A1__9S20846C22[] = {
  0,
  ABISELECT(2008,1504),
  ABISELECT(2008,1504),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN9S20846C11D1Ev();
extern void _ZN9S20846C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C11__9S20846C22[] = {
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&_ZN9S20846C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C11D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C11D1Ev,_ZTv0_n16_N9S20846C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20846C11D0Ev,_ZTv0_n16_N9S20846C11D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C11__9S20846C22[] = {
  0,
  0,
  ABISELECT(112,60),
  ABISELECT(-2008,-1504),
  ABISELECT(112,60),
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C11D1Ev,_ZTv0_n16_N9S20846C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C11D0Ev,_ZTv0_n16_N9S20846C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C11D1Ev,_ZTv0_n12_N9S20846C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20846C11D0Ev,_ZTv0_n12_N9S20846C11D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C11__9S20846C22[] = {
  0,
  ABISELECT(2120,1564),
  ABISELECT(2120,1564),
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C11D1Ev,_ZTv0_n12_N9S20846C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C11D0Ev,_ZTv0_n12_N9S20846C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN9S20846C10D1Ev();
extern void _ZN9S20846C10D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C10__9S20846C22[] = {
  ABISELECT(12464,9196),
  ABISELECT(12432,9172),
  ABISELECT(10896,8044),
  ABISELECT(-10208,-7548),
  ABISELECT(-12216,-9052),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&_ZN9S20846C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C10D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C6D1Ev();
extern void _ZN8S20846C6D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C69S20846C10__A1__9S20846C22[] = {
  ABISELECT(-12216,-9052),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&_ZN8S20846C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C28S20846C69S20846C10__A2__9S20846C22[] = {
  ABISELECT(-12216,-9052),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C28S20846C69S20846C10__A2__9S20846C22[] = {
  ABISELECT(-12216,-9052),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C28S20846C69S20846C10__A2__9S20846C22[] = {
  0,
  ABISELECT(12216,9052),
  ABISELECT(12216,9052),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C28S20846C69S20846C10__A2__9S20846C22[] = {
  0,
  ABISELECT(12216,9052),
  ABISELECT(12216,9052),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C69S20846C10__A1__9S20846C22[] = {
  0,
  ABISELECT(12216,9052),
  ABISELECT(12216,9052),
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN9S20846C11D1Ev();
extern void _ZN9S20846C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C119S20846C10__A1__9S20846C22[] = {
  ABISELECT(-12536,-9280),
  ABISELECT(-10528,-7776),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&_ZN9S20846C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C11D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C11D1Ev,_ZTv0_n16_N9S20846C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20846C11D0Ev,_ZTv0_n16_N9S20846C11D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C119S20846C10__A1__9S20846C22[] = {
  0,
  0,
  ABISELECT(10528,7776),
  ABISELECT(-2008,-1504),
  ABISELECT(10528,7776),
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C11D1Ev,_ZTv0_n16_N9S20846C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C11D0Ev,_ZTv0_n16_N9S20846C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C11D1Ev,_ZTv0_n12_N9S20846C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20846C11D0Ev,_ZTv0_n12_N9S20846C11D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C119S20846C10__A1__9S20846C22[] = {
  0,
  ABISELECT(12536,9280),
  ABISELECT(12536,9280),
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C11D1Ev,_ZTv0_n12_N9S20846C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C11D0Ev,_ZTv0_n12_N9S20846C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C10D1Ev,_ZTv0_n12_N9S20846C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20846C10D0Ev,_ZTv0_n12_N9S20846C10D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C10__9S20846C22[] = {
  0,
  ABISELECT(12216,9052),
  ABISELECT(12216,9052),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C10D1Ev,_ZTv0_n12_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C10D0Ev,_ZTv0_n12_N9S20846C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C10D1Ev,_ZTv0_n16_N9S20846C10D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20846C10D0Ev,_ZTv0_n16_N9S20846C10D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__A1__9S20846C10__9S20846C22[] = {
  0,
  0,
  ABISELECT(10208,7548),
  ABISELECT(-2008,-1504),
  ABISELECT(10208,7548),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C10D1Ev,_ZTv0_n16_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C10D0Ev,_ZTv0_n16_N9S20846C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZThn320_N9S20846C10D1Ev,_ZThn228_N9S20846C10D1Ev)();
extern void ABISELECT(_ZThn320_N9S20846C10D0Ev,_ZThn228_N9S20846C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20846C11__9S20846C10__9S20846C22[] = {
  ABISELECT(-12536,-9280),
  ABISELECT(-10528,-7776),
  ABISELECT(-320,-228),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N9S20846C10D1Ev,_ZThn228_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N9S20846C10D0Ev,_ZThn228_N9S20846C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20846C10D1Ev,_ZTv0_n20_N9S20846C10D1Ev)();
extern void ABISELECT(_ZThn10896_N9S20846C10D1Ev,_ZThn8044_N9S20846C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20846C10D0Ev,_ZTv0_n20_N9S20846C10D0Ev)();
extern void ABISELECT(_ZThn10896_N9S20846C10D0Ev,_ZThn8044_N9S20846C10D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C13__9S20846C10__9S20846C22[] = {
  0,
  0,
  ABISELECT(-10896,-8044),
  ABISELECT(1536,1128),
  ABISELECT(-23112,-17096),
  ABISELECT(-10896,-8044),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C10D1Ev,_ZTv0_n20_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C10D0Ev,_ZTv0_n20_N9S20846C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTvn104_n40_N9S20846C10D1Ev,_ZTvn60_n20_N9S20846C10D1Ev)();
extern void ABISELECT(_ZTvn104_n40_N9S20846C10D0Ev,_ZTvn60_n20_N9S20846C10D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C69S20846C13__A1__9S20846C10__9S20846C22[] = {
  ABISELECT(-23216,-17156),
  ABISELECT(-11000,-8104),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N9S20846C10D1Ev,_ZTvn60_n20_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N9S20846C10D0Ev,_ZTvn60_n20_N9S20846C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTvn416_n40_N9S20846C10D1Ev,_ZTvn288_n20_N9S20846C10D1Ev)();
extern void ABISELECT(_ZTvn416_n40_N9S20846C10D0Ev,_ZTvn288_n20_N9S20846C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3052C129S20846C13__9S20846C10__9S20846C22[] = {
  ABISELECT(-11312,-8332),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N9S20846C10D1Ev,_ZTvn288_n20_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N9S20846C10D0Ev,_ZTvn288_n20_N9S20846C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20846C10D1Ev,_ZTv0_n16_N9S20846C10D1Ev)();
extern void ABISELECT(_ZThn12432_N9S20846C10D1Ev,_ZThn9172_N9S20846C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C10D0Ev,_ZTv0_n16_N9S20846C10D0Ev)();
extern void ABISELECT(_ZThn12432_N9S20846C10D0Ev,_ZThn9172_N9S20846C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20846C4__A4__9S20846C10__9S20846C22[] = {
  ABISELECT(-12432,-9172),
  ABISELECT(-24648,-18224),
  ABISELECT(-12432,-9172),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C10D1Ev,_ZTv0_n16_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C10D0Ev,_ZTv0_n16_N9S20846C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20846C10D1Ev,_ZTv0_n12_N9S20846C10D1Ev)();
extern void ABISELECT(_ZThn12464_N9S20846C10D1Ev,_ZThn9196_N9S20846C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C10D0Ev,_ZTv0_n12_N9S20846C10D0Ev)();
extern void ABISELECT(_ZThn12464_N9S20846C10D0Ev,_ZThn9196_N9S20846C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3052C12__A1__9S20846C10__9S20846C22[] = {
  ABISELECT(-12464,-9196),
  ABISELECT(-12464,-9196),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C10D1Ev,_ZTv0_n12_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C10D0Ev,_ZTv0_n12_N9S20846C10D0Ev),
};
extern void _ZN9S20846C13D1Ev();
extern void _ZN9S20846C13D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C13__9S20846C22[] = {
  ABISELECT(1536,1128),
  ABISELECT(-23112,-17096),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C13[0]),
  (VTBL_ENTRY)&_ZN9S20846C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C13D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C29S20846C13__A3__9S20846C22[] = {
  ABISELECT(-23112,-17096),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C29S20846C13__A3__9S20846C22[] = {
  ABISELECT(-23112,-17096),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C29S20846C13__A3__9S20846C22[] = {
  0,
  ABISELECT(23112,17096),
  ABISELECT(23112,17096),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C29S20846C13__A3__9S20846C22[] = {
  0,
  ABISELECT(23112,17096),
  ABISELECT(23112,17096),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN8S20846C6D1Ev();
extern void _ZN8S20846C6D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C69S20846C13__A2__9S20846C22[] = {
  ABISELECT(-23216,-17156),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&_ZN8S20846C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C28S20846C69S20846C13__A4__9S20846C22[] = {
  ABISELECT(-23216,-17156),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C28S20846C69S20846C13__A4__9S20846C22[] = {
  ABISELECT(-23216,-17156),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C28S20846C69S20846C13__A4__9S20846C22[] = {
  0,
  ABISELECT(23216,17156),
  ABISELECT(23216,17156),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C28S20846C69S20846C13__A4__9S20846C22[] = {
  0,
  ABISELECT(23216,17156),
  ABISELECT(23216,17156),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C69S20846C13__A2__9S20846C22[] = {
  0,
  ABISELECT(23216,17156),
  ABISELECT(23216,17156),
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C13D1Ev,_ZTv0_n12_N9S20846C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20846C13D0Ev,_ZTv0_n12_N9S20846C13D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C13__9S20846C22[] = {
  0,
  ABISELECT(23112,17096),
  ABISELECT(23112,17096),
  (VTBL_ENTRY)&(_ZTI9S20846C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C13D1Ev,_ZTv0_n12_N9S20846C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C13D0Ev,_ZTv0_n12_N9S20846C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZThn104_N9S20846C13D1Ev,_ZThn60_N9S20846C13D1Ev)();
extern void ABISELECT(_ZThn104_N9S20846C13D0Ev,_ZThn60_N9S20846C13D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C6__9S20846C13__9S20846C22[] = {
  ABISELECT(-23216,-17156),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI9S20846C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S20846C13D1Ev,_ZThn60_N9S20846C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S20846C13D0Ev,_ZThn60_N9S20846C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C13D1Ev,_ZTv0_n16_N9S20846C13D1Ev)();
extern void ABISELECT(_ZThn1536_N9S20846C13D1Ev,_ZThn1128_N9S20846C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C13D0Ev,_ZTv0_n16_N9S20846C13D0Ev)();
extern void ABISELECT(_ZThn1536_N9S20846C13D0Ev,_ZThn1128_N9S20846C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20846C4__A2__9S20846C13__9S20846C22[] = {
  ABISELECT(-1536,-1128),
  ABISELECT(-24648,-18224),
  ABISELECT(-1536,-1128),
  (VTBL_ENTRY)&(_ZTI9S20846C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C13D1Ev,_ZTv0_n16_N9S20846C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C13D0Ev,_ZTv0_n16_N9S20846C13D0Ev),
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C4__A5__9S20846C22[] = {
  ABISELECT(-24648,-18224),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C4__A5__9S20846C22[] = {
  0,
  ABISELECT(24648,18224),
  ABISELECT(24648,18224),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
static  VTT_ENTRY vtt_S20846C22[] = {
  {&(_ZTV9S20846C22[12]),  12,127},
  {&(_ZTV9S20846C22[26]),  26,127},
  {&(_ZTV9S20846C22[34]),  34,127},
  {&(_ZTV9S20846C22[42]),  42,127},
  {&(_ZTV9S20846C22[53]),  53,127},
  {&(_ZTV9S20846C22[63]),  63,127},
  {&(_ZTV9S20846C22[72]),  72,127},
  {&(_ZTV9S20846C22[84]),  84,127},
  {&(_ZTV9S20846C22[92]),  92,127},
  {&(_ZTV9S20846C22[101]),  101,127},
  {&(_ZTV9S20846C22[108]),  108,127},
  {&(_ZTV9S20846C22[114]),  114,127},
  {&(_ZTV9S20846C22[120]),  120,127},
  {&(_ZTV9S20846C22[125]),  125,127},
  {&(_tg__ZTV9S20846C21__9S20846C22[4]),  4,6},
  {&(_tg__ZTV8S20846C6__9S20846C21__9S20846C22[6]),  6,10},
  {&(_tg__ZTV8S20846C3__9S20846C21__9S20846C22[4]),  4,7},
  {&(_tg__ZTV8S20846C6__9S20846C22[3]),  3,7},
  {&(_tg__ZTV8S20846C28S20846C6__9S20846C22[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C28S20846C6__9S20846C22[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C28S20846C6__9S20846C22[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C28S20846C6__9S20846C22[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C6__9S20846C22[4]),  4,7},
  {&(_tg__ZTV9S20846C17__9S20846C22[5]),  5,9},
  {&(_tg__ZTV9S20846C189S20846C17__9S20846C22[4]),  4,7},
  {&(_tg__ZTV8S20846C3__9S20846C189S20846C17__9S20846C22[4]),  4,7},
  {&(_tg__ZTV8S20846C2__9S20846C189S20846C17__9S20846C22[6]),  6,10},
  {&(_tg__ZTV8S20846C2__9S20846C17__9S20846C22[6]),  6,10},
  {&(_tg__ZTV8S20846C3__9S20846C17__9S20846C22[4]),  4,7},
  {&(_tg__ZTV9S20846C11__9S20846C17__9S20846C22[5]),  5,7},
  {&(_tg__ZTV8S20846C2__A1__9S20846C22[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C2__A1__9S20846C22[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C2__A1__9S20846C22[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C2__A1__9S20846C22[4]),  4,7},
  {&(_tg__ZTV9S20846C11__9S20846C22[4]),  4,6},
  {&(_tg__ZTV8S20846C2__9S20846C11__9S20846C22[6]),  6,10},
  {&(_tg__ZTV8S20846C3__9S20846C11__9S20846C22[4]),  4,7},
  {&(_tg__ZTV9S20846C10__9S20846C22[7]),  7,11},
  {&(_tg__ZTV8S20846C69S20846C10__A1__9S20846C22[3]),  3,7},
  {&(_tg__ZTV8S20846C28S20846C69S20846C10__A2__9S20846C22[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C28S20846C69S20846C10__A2__9S20846C22[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C28S20846C69S20846C10__A2__9S20846C22[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C28S20846C69S20846C10__A2__9S20846C22[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C69S20846C10__A1__9S20846C22[4]),  4,7},
  {&(_tg__ZTV9S20846C119S20846C10__A1__9S20846C22[4]),  4,6},
  {&(_tg__ZTV8S20846C2__9S20846C119S20846C10__A1__9S20846C22[6]),  6,10},
  {&(_tg__ZTV8S20846C3__9S20846C119S20846C10__A1__9S20846C22[4]),  4,7},
  {&(_tg__ZTV8S20846C3__9S20846C10__9S20846C22[4]),  4,7},
  {&(_tg__ZTV8S20846C2__A1__9S20846C10__9S20846C22[6]),  6,10},
  {&(_tg__ZTV9S20846C11__9S20846C10__9S20846C22[4]),  4,6},
  {&(_tg__ZTV9S20846C13__9S20846C10__9S20846C22[7]),  7,11},
  {&(_tg__ZTV8S20846C69S20846C13__A1__9S20846C10__9S20846C22[3]),  3,7},
  {&(_tg__ZTV8S3052C129S20846C13__9S20846C10__9S20846C22[2]),  2,4},
  {&(_tg__ZTV8S20846C4__A4__9S20846C10__9S20846C22[4]),  4,6},
  {&(_tg__ZTV8S3052C12__A1__9S20846C10__9S20846C22[3]),  3,5},
  {&(_tg__ZTV9S20846C13__9S20846C22[4]),  4,8},
  {&(_tg__ZTV8S20846C29S20846C13__A3__9S20846C22[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C29S20846C13__A3__9S20846C22[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C29S20846C13__A3__9S20846C22[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C29S20846C13__A3__9S20846C22[4]),  4,7},
  {&(_tg__ZTV8S20846C69S20846C13__A2__9S20846C22[3]),  3,7},
  {&(_tg__ZTV8S20846C28S20846C69S20846C13__A4__9S20846C22[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C28S20846C69S20846C13__A4__9S20846C22[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C28S20846C69S20846C13__A4__9S20846C22[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C28S20846C69S20846C13__A4__9S20846C22[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C69S20846C13__A2__9S20846C22[4]),  4,7},
  {&(_tg__ZTV8S20846C3__9S20846C13__9S20846C22[4]),  4,7},
  {&(_tg__ZTV8S20846C6__9S20846C13__9S20846C22[3]),  3,7},
  {&(_tg__ZTV8S20846C4__A2__9S20846C13__9S20846C22[4]),  4,6},
  {&(_tg__ZTV8S20846C4__A5__9S20846C22[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C4__A5__9S20846C22[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S20846C22[];
extern  VTBL_ENTRY _ZTV9S20846C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C22[];
static VTBL_ENTRY alt_thunk_names30[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C13D0Ev,_ZTv0_n16_N9S20846C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N9S20846C13D0Ev,_ZThn1128_N9S20846C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C13D1Ev,_ZTv0_n16_N9S20846C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N9S20846C13D1Ev,_ZThn1128_N9S20846C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C10D0Ev,_ZTv0_n12_N9S20846C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12464_N9S20846C10D0Ev,_ZThn9196_N9S20846C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C10D1Ev,_ZTv0_n12_N9S20846C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12464_N9S20846C10D1Ev,_ZThn9196_N9S20846C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C10D0Ev,_ZTv0_n16_N9S20846C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12432_N9S20846C10D0Ev,_ZThn9172_N9S20846C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C10D1Ev,_ZTv0_n16_N9S20846C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12432_N9S20846C10D1Ev,_ZThn9172_N9S20846C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C10D0Ev,_ZTv0_n20_N9S20846C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10896_N9S20846C10D0Ev,_ZThn8044_N9S20846C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C10D1Ev,_ZTv0_n20_N9S20846C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10896_N9S20846C10D1Ev,_ZThn8044_N9S20846C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C17D0Ev,_ZTv0_n20_N9S20846C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N9S20846C17D0Ev,_ZThn1480_N9S20846C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C17D1Ev,_ZTv0_n20_N9S20846C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N9S20846C17D1Ev,_ZThn1480_N9S20846C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C17D0Ev,_ZTv0_n16_N9S20846C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S20846C17D0Ev,_ZThn1420_N9S20846C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C17D1Ev,_ZTv0_n16_N9S20846C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S20846C17D1Ev,_ZThn1420_N9S20846C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C18D0Ev,_ZTv0_n16_N9S20846C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S20846C18D0Ev,_ZThn1420_N9S20846C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C18D1Ev,_ZTv0_n16_N9S20846C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S20846C18D1Ev,_ZThn1420_N9S20846C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20846C6D0Ev,_ZThn228_N8S20846C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20846C6D1Ev,_ZThn228_N8S20846C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20846C2D0Ev,_ZThn228_N8S20846C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20846C2D1Ev,_ZThn228_N8S20846C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20846C4D0Ev,_ZThn228_N8S20846C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20846C4D1Ev,_ZThn228_N8S20846C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C21D0Ev,_ZTv0_n12_N9S20846C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S20846C21D0Ev,_ZThn256_N9S20846C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C21D1Ev,_ZTv0_n12_N9S20846C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S20846C21D1Ev,_ZThn256_N9S20846C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C21D0Ev,_ZTv0_n16_N9S20846C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20846C21D0Ev,_ZThn28_N9S20846C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C21D1Ev,_ZTv0_n16_N9S20846C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20846C21D1Ev,_ZThn28_N9S20846C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20846C22D0Ev,_ZTv0_n32_N9S20846C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33584_N9S20846C22D0Ev,_ZThn24884_N9S20846C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20846C22D1Ev,_ZTv0_n32_N9S20846C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33584_N9S20846C22D1Ev,_ZThn24884_N9S20846C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20846C22D0Ev,_ZTv0_n24_N9S20846C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21472_N9S20846C22D0Ev,_ZThn15916_N9S20846C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20846C22D1Ev,_ZTv0_n24_N9S20846C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21472_N9S20846C22D1Ev,_ZThn15916_N9S20846C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C22D0Ev,_ZTv0_n12_N9S20846C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46048_N9S20846C22D0Ev,_ZThn34080_N9S20846C22D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21368_N9S20846C22D0Ev,_ZThn15832_N9S20846C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C22D1Ev,_ZTv0_n12_N9S20846C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46048_N9S20846C22D1Ev,_ZThn34080_N9S20846C22D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21368_N9S20846C22D1Ev,_ZThn15832_N9S20846C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C22D0Ev,_ZTv0_n16_N9S20846C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46016_N9S20846C22D0Ev,_ZThn34056_N9S20846C22D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn23376_N9S20846C22D0Ev,_ZThn17336_N9S20846C22D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21056_N9S20846C22D0Ev,_ZThn15604_N9S20846C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C22D1Ev,_ZTv0_n16_N9S20846C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46016_N9S20846C22D1Ev,_ZThn34056_N9S20846C22D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn23376_N9S20846C22D1Ev,_ZThn17336_N9S20846C22D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21056_N9S20846C22D1Ev,_ZThn15604_N9S20846C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C22D0Ev,_ZTv0_n20_N9S20846C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44480_N9S20846C22D0Ev,_ZThn32928_N9S20846C22D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn23488_N9S20846C22D0Ev,_ZThn17396_N9S20846C22D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21000_N9S20846C22D0Ev,_ZThn15576_N9S20846C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C22D1Ev,_ZTv0_n20_N9S20846C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44480_N9S20846C22D1Ev,_ZThn32928_N9S20846C22D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn23488_N9S20846C22D1Ev,_ZThn17396_N9S20846C22D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21000_N9S20846C22D1Ev,_ZThn15576_N9S20846C22D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20846C22 = {  "S20846C22", // class name
  bases_S20846C22, 29,
  &(vtc_S20846C22[0]), // expected_vtbl_contents
  &(vtt_S20846C22[0]), // expected_vtt_contents
  ABISELECT(46256,34228), // object size
  NSPAIRA(_ZTI9S20846C22),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20846C22),127, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20846C22),71, //virtual table table var
  27, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names30,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20846C15  : virtual S20846C3 , S20846C16 , S20846C21 , S20846C22 , S3052C10 {
  int s20846c15f0;
  ::S3052C13 s20846c15f1;
  long double s20846c15f2;
  int s20846c15f3;
  short s20846c15f4;
  int s20846c15f5;
  int s20846c15f6;
  int s20846c15f7;
  int s20846c15f8;
  int s20846c15f9;
  int s20846c15f10;
  ::S20846C23 s20846c15f11;
  int s20846c15f12;
  ::S3052C22_nt s20846c15f13;
  ~S20846C15(); // tgen
  S20846C15(); // tgen
};
//SIG(-1 S20846C15) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} BC3{ VBC2 VBC4{ VBC5{ VBC2 BC6{ VBC2 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} VBC7{ BC8{ m Fp Fi FL Fp Fi} VBC5 Fp Fc[4] Fi:11 Fp[2] Fi[6] FC9{ VBC2 BC5 BC10{ VBC2 BC5 Fp[3] Fc:8 Fi[2] Fc FC2 Fp[3] FL[5] Fi} BC11{ vd m FC12{ VBC13{ vd v11 Fs[6] FL[8] Fi} BC14{ VBC13 FL Fp FL:54} v9 v10 Fc:0 Fp[8] Fc}} VBC6 Fp Fl FC10 FC11 FC6 Fi[2] FU15{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} BC16{ BC11 VBC2 VBC5 v4 FC5[2] FD FC11 Fp[3] FC10 Fi FU17{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi} v5 Fp FC18{} FC2 FL FU15 FL[6] FL FC10} BC19{ BC16 VBC6 BC2 BC20{ VBC2 BC10 VBC6 VBC5 vd Fp[7]} v6 FC2[9] Fc Fi Fi Fi Fc} vd FC9 FU15 Fi Fc} BC21{ VBC10 Fp[6]} BC22{ VBC21 VBC4 VBC23{ BC10 VBC5 BC7 VBC9 VBC11 vd FC11[2] Fi FD FD Fc:0 Fp} BC24{ v7 Fi:0 Fi[6] Fi Fp} BC2 v8 Fi Fp Fi FC7[2] FC6 FD Fi[3] FU15 FL Fi[2] Fi FU15 Fp} BC8 Fi FU15 FD Fi Fs Fi Fi Fi Fi Fi Fi FC24 Fi FC18}


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

static void Test_S20846C15()
{
  extern Class_Descriptor cd_S20846C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(3178,9425)];
    init_test(&cd_S20846C15, buf);
    S20846C15 *dp, &lv = *(dp=new (buf) S20846C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(50832,37696), "sizeof(S20846C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20846C15)");
    /*is_ambiguous_... S20846C15::S20846C3 */ AMB_check_base_class_offset(lv, (S20846C3*), ABISELECT(25576,19044), "S20846C15");
    /*is_ambiguous_... S20846C16::S20846C3 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C16*), ABISELECT(25576,19044), "S20846C15");
    /*is_ambiguous_... S20846C15::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C2*), ABISELECT(25576,19044), "S20846C15");
    /*is_ambiguous_... S20846C15::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*), ABISELECT(25576,19044), "S20846C15");
    check_base_class_offset(lv, (S20846C3*)(S20846C18*)(S20846C17*), ABISELECT(25576,19044), "S20846C15");
    check_base_class_offset(lv, (S20846C3*)(S20846C18*)(S20846C20*)(S20846C16*), ABISELECT(25576,19044), "S20846C15");
    /*is_ambiguous_... S20846C15::S20846C4 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*), ABISELECT(25576,19044), "S20846C15");
    check_base_class_offset(lv, (S20846C3*)(S20846C7*)(S20846C20*)(S20846C16*), ABISELECT(25576,19044), "S20846C15");
    check_base_class_offset(lv, (S20846C3*)(S20846C6*)(S20846C7*)(S20846C20*)(S20846C16*), ABISELECT(25576,19044), "S20846C15");
    check_base_class_offset(lv, (S20846C3*)(S20846C2*)(S20846C6*)(S20846C7*)(S20846C20*)(S20846C16*), ABISELECT(25576,19044), "S20846C15");
    check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*)(S20846C6*)(S20846C7*)(S20846C20*)(S20846C16*), ABISELECT(25576,19044), "S20846C15");
    /*is_ambiguous_... S20846C15::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C6*), ABISELECT(25576,19044), "S20846C15");
    /*is_ambiguous_... S20846C15::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C2*)(S20846C6*), ABISELECT(25576,19044), "S20846C15");
    /*is_ambiguous_... S20846C15::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*)(S20846C6*), ABISELECT(25576,19044), "S20846C15");
    /*is_ambiguous_... S20846C10::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C6*)(S20846C10*), ABISELECT(25576,19044), "S20846C15");
    /*is_ambiguous_... S20846C10::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C2*)(S20846C6*)(S20846C10*), ABISELECT(25576,19044), "S20846C15");
    /*is_ambiguous_... S20846C10::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*)(S20846C6*)(S20846C10*), ABISELECT(25576,19044), "S20846C15");
    check_base_class_offset(lv, (S20846C3*)(S20846C13*), ABISELECT(25576,19044), "S20846C15");
    /*is_ambiguous_... S20846C13::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C2*)(S20846C13*), ABISELECT(25576,19044), "S20846C15");
    /*is_ambiguous_... S20846C13::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*)(S20846C13*), ABISELECT(25576,19044), "S20846C15");
    check_base_class_offset(lv, (S20846C3*)(S20846C6*)(S20846C13*), ABISELECT(25576,19044), "S20846C15");
    check_base_class_offset(lv, (S20846C3*)(S20846C2*)(S20846C6*)(S20846C13*), ABISELECT(25576,19044), "S20846C15");
    check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*)(S20846C6*)(S20846C13*), ABISELECT(25576,19044), "S20846C15");
    /*is_ambiguous_... S20846C15::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C2*), ABISELECT(27584,20548), "S20846C15");
    check_base_class_offset(lv, (S20846C2*)(S20846C17*), ABISELECT(27584,20548), "S20846C15");
    /*is_ambiguous_... S20846C15::S20846C11 */ AMB_check_base_class_offset(lv, (S20846C2*)(S20846C11*), ABISELECT(27584,20548), "S20846C15");
    check_base_class_offset(lv, (S20846C2*)(S20846C18*)(S20846C17*), ABISELECT(27584,20548), "S20846C15");
    check_base_class_offset(lv, (S20846C2*)(S20846C18*)(S20846C20*)(S20846C16*), ABISELECT(27584,20548), "S20846C15");
    /*is_ambiguous_... S20846C7::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C2*)(S20846C7*)(S20846C20*)(S20846C16*), ABISELECT(27584,20548), "S20846C15");
    /*is_ambiguous_... S20846C10::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C2*)(S20846C10*), ABISELECT(27584,20548), "S20846C15");
    check_base_class_offset(lv, (S20846C2*)(S20846C11*)(S20846C10*), ABISELECT(27584,20548), "S20846C15");
    /*is_ambiguous_... S20846C15::S20846C11 */ AMB_check_base_class_offset(lv, (S3052C10*)(S20846C11*), ABISELECT(27704,20612), "S20846C15");
    check_base_class_offset(lv, (S20846C11*)(S20846C17*), ABISELECT(27696,20608), "S20846C15");
    check_base_class_offset(lv, (S3052C12*)(S20846C18*)(S20846C17*), ABISELECT(25680,19128), "S20846C15");
    check_base_class_offset(lv, (S20846C18*)(S20846C17*), ABISELECT(25680,19128), "S20846C15");
    check_base_class_offset(lv, (S20846C17*)(S20846C16*), ABISELECT(25680,19128), "S20846C15");
    check_base_class_offset(lv, (S20846C17*)(S20846C22*), ABISELECT(25680,19128), "S20846C15");
    check_base_class_offset(lv, (S3052C12*)(S20846C18*)(S20846C20*)(S20846C16*), 0, "S20846C15");
    check_base_class_offset(lv, (S20846C18*)(S20846C20*)(S20846C16*), 0, "S20846C15");
    /*is_ambiguous_... S20846C20::S20846C4 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C20*)(S20846C16*), ABISELECT(37792,28096), "S20846C15");
    /*is_ambiguous_... S20846C7::S20846C4 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C7*)(S20846C20*)(S20846C16*), ABISELECT(37792,28096), "S20846C15");
    /*is_ambiguous_... S20846C13::S20846C4 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C13*), ABISELECT(37792,28096), "S20846C15");
    /*is_ambiguous_... S20846C20::S20846C3 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C20*)(S20846C16*), ABISELECT(1296,940), "S20846C15");
    check_base_class_offset(lv, (S20846C4*)(S20846C2*)(S20846C6*)(S20846C7*)(S20846C20*)(S20846C16*), ABISELECT(1392,1024), "S20846C15");
    check_base_class_offset(lv, (S20846C2*)(S20846C6*)(S20846C7*)(S20846C20*)(S20846C16*), ABISELECT(1392,1024), "S20846C15");
    check_base_class_offset(lv, (S20846C6*)(S20846C7*)(S20846C20*)(S20846C16*), ABISELECT(1392,1024), "S20846C15");
    check_base_class_offset(lv, (S20846C7*)(S20846C20*)(S20846C16*), ABISELECT(1392,1024), "S20846C15");
    check_base_class_offset(lv, (S20846C20*)(S20846C16*), 0, "S20846C15");
    check_base_class_offset(lv, (S20846C16*), 0, "S20846C15");
    /*is_ambiguous_... S20846C15::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C2*)(S20846C6*), ABISELECT(37824,28120), "S20846C15");
    /*is_ambiguous_... S20846C15::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C2*)(S20846C6*), ABISELECT(37824,28120), "S20846C15");
    /*is_ambiguous_... S20846C15::S20846C21 */ AMB_check_base_class_offset(lv, (S20846C6*)(S20846C21*), ABISELECT(37824,28120), "S20846C15");
    /*is_ambiguous_... S20846C15::S20846C21 */ AMB_check_base_class_offset(lv, (S20846C6*)(S20846C21*), ABISELECT(37824,28120), "S20846C15");
    /*is_ambiguous_... S20846C15::S20846C21 */ AMB_check_base_class_offset(lv, (S20846C21*), ABISELECT(4344,3312), "S20846C15");
    check_base_class_offset(lv, (S20846C21*)(S20846C22*), ABISELECT(38136,28348), "S20846C15");
    /*is_ambiguous_... S20846C10::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C2*)(S20846C6*)(S20846C10*), ABISELECT(38192,28376), "S20846C15");
    /*is_ambiguous_... S20846C10::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C2*)(S20846C6*)(S20846C10*), ABISELECT(38192,28376), "S20846C15");
    /*is_ambiguous_... S20846C10::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C6*)(S20846C10*), ABISELECT(38192,28376), "S20846C15");
    check_base_class_offset(lv, (S3052C10*)(S20846C11*)(S20846C10*), ABISELECT(38520,28608), "S20846C15");
    check_base_class_offset(lv, (S20846C11*)(S20846C10*), ABISELECT(38512,28604), "S20846C15");
    /*is_ambiguous_... S20846C13::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C2*)(S20846C13*), ABISELECT(49088,36420), "S20846C15");
    /*is_ambiguous_... S20846C13::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C2*)(S20846C13*), ABISELECT(49088,36420), "S20846C15");
    check_base_class_offset(lv, (S20846C4*)(S20846C2*)(S20846C6*)(S20846C13*), ABISELECT(49192,36480), "S20846C15");
    check_base_class_offset(lv, (S20846C2*)(S20846C6*)(S20846C13*), ABISELECT(49192,36480), "S20846C15");
    check_base_class_offset(lv, (S20846C6*)(S20846C13*), ABISELECT(49192,36480), "S20846C15");
    check_base_class_offset(lv, (S3052C12*)(S20846C13*), ABISELECT(49504,36708), "S20846C15");
    check_base_class_offset(lv, (S20846C13*)(S20846C10*), ABISELECT(49088,36420), "S20846C15");
    /*is_ambiguous_... S20846C10::S3052C12 */ AMB_check_base_class_offset(lv, (S3052C12*)(S20846C10*), ABISELECT(50624,37548), "S20846C15");
    check_base_class_offset(lv, (S20846C10*)(S20846C22*), ABISELECT(38192,28376), "S20846C15");
    check_base_class_offset(lv, (S20846C23*)(S20846C22*), ABISELECT(4400,3340), "S20846C15");
    /*is_ambiguous_... S20846C22::S20846C3 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C22*), ABISELECT(4448,3376), "S20846C15");
    check_base_class_offset(lv, (S20846C22*), ABISELECT(4400,3340), "S20846C15");
    /*is_ambiguous_... S20846C15::S3052C10 */ AMB_check_base_class_offset(lv, (S3052C10*), ABISELECT(25400,18916), "S20846C15");
    check_field_offset(lv, s20846c15f0, ABISELECT(25440,18940), "S20846C15.s20846c15f0");
    check_field_offset(lv, s20846c15f1, ABISELECT(25456,18944), "S20846C15.s20846c15f1");
    check_field_offset(lv, s20846c15f2, ABISELECT(25472,18956), "S20846C15.s20846c15f2");
    check_field_offset(lv, s20846c15f3, ABISELECT(25488,18968), "S20846C15.s20846c15f3");
    check_field_offset(lv, s20846c15f4, ABISELECT(25492,18972), "S20846C15.s20846c15f4");
    check_field_offset(lv, s20846c15f5, ABISELECT(25496,18976), "S20846C15.s20846c15f5");
    check_field_offset(lv, s20846c15f6, ABISELECT(25500,18980), "S20846C15.s20846c15f6");
    check_field_offset(lv, s20846c15f7, ABISELECT(25504,18984), "S20846C15.s20846c15f7");
    check_field_offset(lv, s20846c15f8, ABISELECT(25508,18988), "S20846C15.s20846c15f8");
    check_field_offset(lv, s20846c15f9, ABISELECT(25512,18992), "S20846C15.s20846c15f9");
    check_field_offset(lv, s20846c15f10, ABISELECT(25516,18996), "S20846C15.s20846c15f10");
    check_field_offset(lv, s20846c15f11, ABISELECT(25520,19000), "S20846C15.s20846c15f11");
    check_field_offset(lv, s20846c15f12, ABISELECT(25568,19036), "S20846C15.s20846c15f12");
    check_field_offset(lv, s20846c15f13, ABISELECT(25572,19040), "S20846C15.s20846c15f13");
    test_class_info(&lv, &cd_S20846C15);
    dp->~S20846C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20846C15(Test_S20846C15, "S20846C15", ABISELECT(50832,37696));

#else // __cplusplus

extern void _ZN9S20846C15C1Ev();
extern void _ZN9S20846C15D1Ev();
Name_Map name_map_S20846C15[] = {
  NSPAIR(_ZN9S20846C15C1Ev),
  NSPAIR(_ZN9S20846C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20846C3;
extern VTBL_ENTRY _ZTI8S20846C3[];
extern  VTBL_ENTRY _ZTV8S20846C3[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S20846C11;
extern VTBL_ENTRY _ZTI9S20846C11[];
extern  VTBL_ENTRY _ZTV9S20846C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C11[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S20846C18;
extern VTBL_ENTRY _ZTI9S20846C18[];
extern  VTBL_ENTRY _ZTV9S20846C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C18[];
extern Class_Descriptor cd_S20846C17;
extern VTBL_ENTRY _ZTI9S20846C17[];
extern  VTBL_ENTRY _ZTV9S20846C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C17[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S20846C18;
extern VTBL_ENTRY _ZTI9S20846C18[];
extern  VTBL_ENTRY _ZTV9S20846C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C18[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C3;
extern VTBL_ENTRY _ZTI8S20846C3[];
extern  VTBL_ENTRY _ZTV8S20846C3[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C6;
extern VTBL_ENTRY _ZTI8S20846C6[];
extern  VTBL_ENTRY _ZTV8S20846C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C6[];
extern Class_Descriptor cd_S20846C7;
extern VTBL_ENTRY _ZTI8S20846C7[];
extern  VTBL_ENTRY _ZTV8S20846C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C7[];
extern Class_Descriptor cd_S20846C20;
extern VTBL_ENTRY _ZTI9S20846C20[];
extern  VTBL_ENTRY _ZTV9S20846C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C20[];
extern Class_Descriptor cd_S20846C16;
extern VTBL_ENTRY _ZTI9S20846C16[];
extern  VTBL_ENTRY _ZTV9S20846C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C16[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C6;
extern VTBL_ENTRY _ZTI8S20846C6[];
extern  VTBL_ENTRY _ZTV8S20846C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C6[];
extern Class_Descriptor cd_S20846C21;
extern VTBL_ENTRY _ZTI9S20846C21[];
extern  VTBL_ENTRY _ZTV9S20846C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C21[];
extern Class_Descriptor cd_S20846C21;
extern VTBL_ENTRY _ZTI9S20846C21[];
extern  VTBL_ENTRY _ZTV9S20846C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C21[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C6;
extern VTBL_ENTRY _ZTI8S20846C6[];
extern  VTBL_ENTRY _ZTV8S20846C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C6[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S20846C11;
extern VTBL_ENTRY _ZTI9S20846C11[];
extern  VTBL_ENTRY _ZTV9S20846C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C11[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C6;
extern VTBL_ENTRY _ZTI8S20846C6[];
extern  VTBL_ENTRY _ZTV8S20846C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C6[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S20846C13;
extern VTBL_ENTRY _ZTI9S20846C13[];
extern  VTBL_ENTRY _ZTV9S20846C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C13[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S20846C10;
extern VTBL_ENTRY _ZTI9S20846C10[];
extern  VTBL_ENTRY _ZTV9S20846C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C10[];
extern Class_Descriptor cd_S20846C23;
extern VTBL_ENTRY _ZTI9S20846C23[];
extern  VTBL_ENTRY _ZTV9S20846C23[];
extern Class_Descriptor cd_S20846C3;
extern VTBL_ENTRY _ZTI8S20846C3[];
extern  VTBL_ENTRY _ZTV8S20846C3[];
extern Class_Descriptor cd_S20846C22;
extern VTBL_ENTRY _ZTI9S20846C22[];
extern  VTBL_ENTRY _ZTV9S20846C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C22[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
static Base_Class bases_S20846C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20846C3,    ABISELECT(25576,19044), //bcp->offset
    57, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20846C4,    ABISELECT(27584,20548), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(27584,20548), //bcp->offset
    76, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3052C10,    ABISELECT(27704,20612), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20846C11,    ABISELECT(27696,20608), //bcp->offset
    86, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3052C12,    ABISELECT(25680,19128), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S20846C18,    ABISELECT(25680,19128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20846C17,    ABISELECT(25680,19128), //bcp->offset
    64, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S3052C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20846C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20846C4,    ABISELECT(37792,28096), //bcp->offset
    93, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20846C3,    ABISELECT(1296,940), //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
    28, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20846C4,    ABISELECT(1392,1024), //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
    29, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(1392,1024), //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
    30, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20846C6,    ABISELECT(1392,1024), //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
    31, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20846C7,    ABISELECT(1392,1024), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20846C20,    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
    33, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20846C16,    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
    34, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20846C4,    ABISELECT(37824,28120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(37824,28120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20846C6,    ABISELECT(37824,28120), //bcp->offset
    99, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S20846C21,    ABISELECT(4344,3312), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20846C21,    ABISELECT(38136,28348), //bcp->offset
    109, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    53, //bcp->index_in_construction_vtbl_array
    82, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    39, //immediately_derived
  0, 1},
  {&cd_S20846C4,    ABISELECT(38192,28376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    88, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(38192,28376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    87, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S20846C6,    ABISELECT(38192,28376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    86, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S3052C10,    ABISELECT(38520,28608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20846C11,    ABISELECT(38512,28604), //bcp->offset
    130, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S20846C4,    ABISELECT(49088,36420), //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
    13, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(49088,36420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    104, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S20846C4,    ABISELECT(49192,36480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    110, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(49192,36480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    109, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S20846C6,    ABISELECT(49192,36480), //bcp->offset
    147, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    108, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S3052C12,    ABISELECT(49504,36708), //bcp->offset
    154, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    58, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S20846C13,    ABISELECT(49088,36420), //bcp->offset
    136, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    103, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    36, //immediately_derived
  0, 1},
  {&cd_S3052C12,    ABISELECT(50624,37548), //bcp->offset
    158, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    59, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    36, //immediately_derived
  0, 1},
  {&cd_S20846C10,    ABISELECT(38192,28376), //bcp->offset
    116, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    85, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    39, //immediately_derived
  0, 1},
  {&cd_S20846C23,    ABISELECT(4400,3340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S20846C3,    ABISELECT(4448,3376), //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
    37, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S20846C22,    ABISELECT(4400,3340), //bcp->offset
    36, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3052C10,    ABISELECT(25400,18916), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI9S20846C15[];
extern void _ZN9S20846C15D1Ev();
extern void _ZN9S20846C15D0Ev();
extern void _ZN9S20846C182v7Ev();
extern void _ZN9S20846C202v9Ev();
extern void ABISELECT(_ZThn1296_N9S20846C15D1Ev,_ZThn940_N9S20846C15D1Ev)();
extern void ABISELECT(_ZThn1296_N9S20846C15D0Ev,_ZThn940_N9S20846C15D0Ev)();
extern void _ZN8S20846C32v3Ev();
extern void ABISELECT(_ZThn1392_N9S20846C15D1Ev,_ZThn1024_N9S20846C15D1Ev)();
extern void ABISELECT(_ZThn1392_N9S20846C15D0Ev,_ZThn1024_N9S20846C15D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZThn4344_N9S20846C15D1Ev,_ZThn3312_N9S20846C15D1Ev)();
extern void ABISELECT(_ZThn4344_N9S20846C15D0Ev,_ZThn3312_N9S20846C15D0Ev)();
extern void _ZN9S20846C233v10Ev();
extern void _ZN9S20846C223v11Ev();
extern void ABISELECT(_ZThn4400_N9S20846C15D1Ev,_ZThn3340_N9S20846C15D1Ev)();
extern void ABISELECT(_ZThn4400_N9S20846C15D0Ev,_ZThn3340_N9S20846C15D0Ev)();
extern void ABISELECT(_ZThn4448_N9S20846C15D1Ev,_ZThn3376_N9S20846C15D1Ev)();
extern void ABISELECT(_ZThn4448_N9S20846C15D0Ev,_ZThn3376_N9S20846C15D0Ev)();
extern void _ZN8S20846C32v3Ev();
extern void ABISELECT(_ZTv0_n24_N9S20846C15D1Ev,_ZTv0_n12_N9S20846C15D1Ev)();
extern void ABISELECT(_ZThn25576_N9S20846C15D1Ev,_ZThn19044_N9S20846C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C15D0Ev,_ZTv0_n12_N9S20846C15D0Ev)();
extern void ABISELECT(_ZThn25576_N9S20846C15D0Ev,_ZThn19044_N9S20846C15D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
extern void ABISELECT(_ZTv0_n48_N9S20846C15D1Ev,_ZTv0_n24_N9S20846C15D1Ev)();
extern void ABISELECT(_ZThn25680_N9S20846C15D1Ev,_ZThn19128_N9S20846C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20846C15D0Ev,_ZTv0_n24_N9S20846C15D0Ev)();
extern void ABISELECT(_ZThn25680_N9S20846C15D0Ev,_ZThn19128_N9S20846C15D0Ev)() __attribute__((weak));
extern void _ZN9S20846C182v7Ev();
extern void _ZN9S20846C172v8Ev();
extern void ABISELECT(_ZTv0_n32_N9S20846C15D1Ev,_ZTv0_n16_N9S20846C15D1Ev)();
extern void ABISELECT(_ZThn27584_N9S20846C15D1Ev,_ZThn20548_N9S20846C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C15D0Ev,_ZTv0_n16_N9S20846C15D0Ev)();
extern void ABISELECT(_ZThn27584_N9S20846C15D0Ev,_ZThn20548_N9S20846C15D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTv0_n40_N9S20846C15D1Ev,_ZTv0_n20_N9S20846C15D1Ev)();
extern void ABISELECT(_ZThn27696_N9S20846C15D1Ev,_ZThn20608_N9S20846C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20846C15D0Ev,_ZTv0_n20_N9S20846C15D0Ev)();
extern void ABISELECT(_ZThn27696_N9S20846C15D0Ev,_ZThn20608_N9S20846C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C15D1Ev,_ZTv0_n16_N9S20846C15D1Ev)();
extern void ABISELECT(_ZThn37792_N9S20846C15D1Ev,_ZThn28096_N9S20846C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C15D0Ev,_ZTv0_n16_N9S20846C15D0Ev)();
extern void ABISELECT(_ZThn37792_N9S20846C15D0Ev,_ZThn28096_N9S20846C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C15D1Ev,_ZTv0_n16_N9S20846C15D1Ev)();
extern void ABISELECT(_ZThn37824_N9S20846C15D1Ev,_ZThn28120_N9S20846C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C15D0Ev,_ZTv0_n16_N9S20846C15D0Ev)();
extern void ABISELECT(_ZThn37824_N9S20846C15D0Ev,_ZThn28120_N9S20846C15D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTv0_n40_N9S20846C15D1Ev,_ZTv0_n20_N9S20846C15D1Ev)();
extern void ABISELECT(_ZThn38136_N9S20846C15D1Ev,_ZThn28348_N9S20846C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20846C15D0Ev,_ZTv0_n20_N9S20846C15D0Ev)();
extern void ABISELECT(_ZThn38136_N9S20846C15D0Ev,_ZThn28348_N9S20846C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20846C15D1Ev,_ZTv0_n32_N9S20846C15D1Ev)();
extern void ABISELECT(_ZThn38192_N9S20846C15D1Ev,_ZThn28376_N9S20846C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20846C15D0Ev,_ZTv0_n32_N9S20846C15D0Ev)();
extern void ABISELECT(_ZThn38192_N9S20846C15D0Ev,_ZThn28376_N9S20846C15D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTvn320_n64_N9S20846C15D1Ev,_ZTvn228_n32_N9S20846C15D1Ev)();
extern void ABISELECT(_ZTvn320_n64_N9S20846C15D0Ev,_ZTvn228_n32_N9S20846C15D0Ev)();
extern void ABISELECT(_ZTv0_n40_N9S20846C15D1Ev,_ZTv0_n20_N9S20846C15D1Ev)();
extern void ABISELECT(_ZThn49088_N9S20846C15D1Ev,_ZThn36420_N9S20846C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20846C15D0Ev,_ZTv0_n20_N9S20846C15D0Ev)();
extern void ABISELECT(_ZThn49088_N9S20846C15D0Ev,_ZThn36420_N9S20846C15D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTvn104_n40_N9S20846C15D1Ev,_ZTvn60_n20_N9S20846C15D1Ev)();
extern void ABISELECT(_ZTvn104_n40_N9S20846C15D0Ev,_ZTvn60_n20_N9S20846C15D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTvn416_n40_N9S20846C15D1Ev,_ZTvn288_n20_N9S20846C15D1Ev)();
extern void ABISELECT(_ZTvn416_n40_N9S20846C15D0Ev,_ZTvn288_n20_N9S20846C15D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20846C15D1Ev,_ZTv0_n12_N9S20846C15D1Ev)();
extern void ABISELECT(_ZThn50624_N9S20846C15D1Ev,_ZThn37548_N9S20846C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C15D0Ev,_ZTv0_n12_N9S20846C15D0Ev)();
extern void ABISELECT(_ZThn50624_N9S20846C15D0Ev,_ZThn37548_N9S20846C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20846C15[] = {
  ABISELECT(50624,37548),
  ABISELECT(49088,36420),
  ABISELECT(38192,28376),
  ABISELECT(38136,28348),
  ABISELECT(37824,28120),
  ABISELECT(27696,20608),
  ABISELECT(25680,19128),
  ABISELECT(37792,28096),
  ABISELECT(27584,20548),
  ABISELECT(25576,19044),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C15[0]),
  (VTBL_ENTRY)&_ZN9S20846C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C15D0Ev,
  (VTBL_ENTRY)&_ZN9S20846C182v7Ev,
  (VTBL_ENTRY)&_ZN9S20846C202v9Ev,
  ABISELECT(-1296,-940),
  (VTBL_ENTRY)&(_ZTI9S20846C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N9S20846C15D1Ev,_ZThn940_N9S20846C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N9S20846C15D0Ev,_ZThn940_N9S20846C15D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
  ABISELECT(26192,19524),
  ABISELECT(36400,27072),
  ABISELECT(24184,18020),
  ABISELECT(-1392,-1024),
  (VTBL_ENTRY)&(_ZTI9S20846C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N9S20846C15D1Ev,_ZThn1024_N9S20846C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N9S20846C15D0Ev,_ZThn1024_N9S20846C15D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  ABISELECT(21232,15732),
  ABISELECT(33480,24808),
  ABISELECT(-4344,-3312),
  (VTBL_ENTRY)&(_ZTI9S20846C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4344_N9S20846C15D1Ev,_ZThn3312_N9S20846C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4344_N9S20846C15D0Ev,_ZThn3312_N9S20846C15D0Ev),
  ABISELECT(46224,34208),
  ABISELECT(33392,24756),
  ABISELECT(44688,33080),
  ABISELECT(33792,25036),
  ABISELECT(23296,17268),
  ABISELECT(23184,17208),
  ABISELECT(21280,15788),
  ABISELECT(21176,15704),
  ABISELECT(33424,24780),
  ABISELECT(33736,25008),
  ABISELECT(-4400,-3340),
  (VTBL_ENTRY)&(_ZTI9S20846C15[0]),
  (VTBL_ENTRY)&_ZN9S20846C233v10Ev,
  (VTBL_ENTRY)&_ZN9S20846C223v11Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn4400_N9S20846C15D1Ev,_ZThn3340_N9S20846C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4400_N9S20846C15D0Ev,_ZThn3340_N9S20846C15D0Ev),
  ABISELECT(-4448,-3376),
  (VTBL_ENTRY)&(_ZTI9S20846C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn4448_N9S20846C15D1Ev,_ZThn3376_N9S20846C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn4448_N9S20846C15D0Ev,_ZThn3376_N9S20846C15D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
  0,
  ABISELECT(-25576,-19044),
  ABISELECT(-25576,-19044),
  (VTBL_ENTRY)&(_ZTI9S20846C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C15D1Ev,_ZTv0_n12_N9S20846C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C15D0Ev,_ZTv0_n12_N9S20846C15D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
  0,
  0,
  ABISELECT(-25680,-19128),
  ABISELECT(2016,1480),
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  ABISELECT(-25680,-19128),
  (VTBL_ENTRY)&(_ZTI9S20846C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20846C15D1Ev,_ZTv0_n24_N9S20846C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20846C15D0Ev,_ZTv0_n24_N9S20846C15D0Ev),
  (VTBL_ENTRY)&_ZN9S20846C182v7Ev,
  (VTBL_ENTRY)&_ZN9S20846C172v8Ev,
  0,
  0,
  ABISELECT(-27584,-20548),
  ABISELECT(-2008,-1504),
  ABISELECT(-27584,-20548),
  (VTBL_ENTRY)&(_ZTI9S20846C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C15D1Ev,_ZTv0_n16_N9S20846C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C15D0Ev,_ZTv0_n16_N9S20846C15D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  ABISELECT(-27696,-20608),
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  ABISELECT(-27696,-20608),
  (VTBL_ENTRY)&(_ZTI9S20846C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C15D1Ev,_ZTv0_n20_N9S20846C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C15D0Ev,_ZTv0_n20_N9S20846C15D0Ev),
  ABISELECT(-37792,-28096),
  ABISELECT(-12216,-9052),
  ABISELECT(-37792,-28096),
  (VTBL_ENTRY)&(_ZTI9S20846C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C15D1Ev,_ZTv0_n16_N9S20846C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C15D0Ev,_ZTv0_n16_N9S20846C15D0Ev),
  0,
  0,
  ABISELECT(-37824,-28120),
  ABISELECT(-12248,-9076),
  ABISELECT(-37824,-28120),
  (VTBL_ENTRY)&(_ZTI9S20846C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C15D1Ev,_ZTv0_n16_N9S20846C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C15D0Ev,_ZTv0_n16_N9S20846C15D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  ABISELECT(-38136,-28348),
  ABISELECT(-12560,-9304),
  ABISELECT(-312,-228),
  ABISELECT(-38136,-28348),
  (VTBL_ENTRY)&(_ZTI9S20846C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C15D1Ev,_ZTv0_n20_N9S20846C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C15D0Ev,_ZTv0_n20_N9S20846C15D0Ev),
  0,
  0,
  ABISELECT(-38192,-28376),
  ABISELECT(12432,9172),
  ABISELECT(-400,-280),
  ABISELECT(10896,8044),
  ABISELECT(-10608,-7828),
  ABISELECT(-12616,-9332),
  ABISELECT(-38192,-28376),
  (VTBL_ENTRY)&(_ZTI9S20846C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20846C15D1Ev,_ZTv0_n32_N9S20846C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20846C15D0Ev,_ZTv0_n32_N9S20846C15D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  ABISELECT(-12936,-9560),
  ABISELECT(-10928,-8056),
  ABISELECT(-38512,-28604),
  (VTBL_ENTRY)&(_ZTI9S20846C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn320_n64_N9S20846C15D1Ev,_ZTvn228_n32_N9S20846C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn320_n64_N9S20846C15D0Ev,_ZTvn228_n32_N9S20846C15D0Ev),
  0,
  0,
  ABISELECT(-49088,-36420),
  ABISELECT(-11296,-8324),
  ABISELECT(-23512,-17376),
  ABISELECT(-49088,-36420),
  (VTBL_ENTRY)&(_ZTI9S20846C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C15D1Ev,_ZTv0_n20_N9S20846C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C15D0Ev,_ZTv0_n20_N9S20846C15D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  ABISELECT(-23616,-17436),
  ABISELECT(-49192,-36480),
  (VTBL_ENTRY)&(_ZTI9S20846C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N9S20846C15D1Ev,_ZTvn60_n20_N9S20846C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N9S20846C15D0Ev,_ZTvn60_n20_N9S20846C15D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  ABISELECT(-49504,-36708),
  (VTBL_ENTRY)&(_ZTI9S20846C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N9S20846C15D1Ev,_ZTvn288_n20_N9S20846C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N9S20846C15D0Ev,_ZTvn288_n20_N9S20846C15D0Ev),
  ABISELECT(-50624,-37548),
  ABISELECT(-50624,-37548),
  (VTBL_ENTRY)&(_ZTI9S20846C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C15D1Ev,_ZTv0_n12_N9S20846C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C15D0Ev,_ZTv0_n12_N9S20846C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S20846C15[];
extern void _ZN9S20846C16D1Ev();
extern void _ZN9S20846C16D0Ev();
extern void _ZN9S20846C182v7Ev();
extern void _ZN9S20846C202v9Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C16__9S20846C15[] = {
  ABISELECT(27696,20608),
  ABISELECT(25680,19128),
  ABISELECT(37792,28096),
  ABISELECT(27584,20548),
  ABISELECT(25576,19044),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C16[0]),
  (VTBL_ENTRY)&_ZN9S20846C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C16D0Ev,
  (VTBL_ENTRY)&_ZN9S20846C182v7Ev,
  (VTBL_ENTRY)&_ZN9S20846C202v9Ev,
};
extern void _ZN9S20846C20D1Ev();
extern void _ZN9S20846C20D0Ev();
extern void _ZN9S20846C182v7Ev();
extern void _ZN9S20846C202v9Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C209S20846C16__9S20846C15[] = {
  ABISELECT(37792,28096),
  ABISELECT(27584,20548),
  ABISELECT(25576,19044),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C20[0]),
  (VTBL_ENTRY)&_ZN9S20846C20D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C20D0Ev,
  (VTBL_ENTRY)&_ZN9S20846C182v7Ev,
  (VTBL_ENTRY)&_ZN9S20846C202v9Ev,
};
extern void _ZN9S20846C18D1Ev();
extern void _ZN9S20846C18D0Ev();
extern void _ZN9S20846C182v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C189S20846C209S20846C16__A1__9S20846C15[] = {
  ABISELECT(27584,20548),
  ABISELECT(25576,19044),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C18[0]),
  (VTBL_ENTRY)&_ZN9S20846C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C18D0Ev,
  (VTBL_ENTRY)&_ZN9S20846C182v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C18D1Ev,_ZTv0_n12_N9S20846C18D1Ev)();
extern void ABISELECT(_ZThn25576_N9S20846C18D1Ev,_ZThn19044_N9S20846C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C18D0Ev,_ZTv0_n12_N9S20846C18D0Ev)();
extern void ABISELECT(_ZThn25576_N9S20846C18D0Ev,_ZThn19044_N9S20846C18D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C189S20846C209S20846C16__A1__9S20846C15[] = {
  0,
  ABISELECT(-25576,-19044),
  ABISELECT(-25576,-19044),
  (VTBL_ENTRY)&(_ZTI9S20846C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C18D1Ev,_ZTv0_n12_N9S20846C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C18D0Ev,_ZTv0_n12_N9S20846C18D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C18D1Ev,_ZTv0_n16_N9S20846C18D1Ev)();
extern void ABISELECT(_ZThn27584_N9S20846C18D1Ev,_ZThn20548_N9S20846C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C18D0Ev,_ZTv0_n16_N9S20846C18D0Ev)();
extern void ABISELECT(_ZThn27584_N9S20846C18D0Ev,_ZThn20548_N9S20846C18D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C189S20846C209S20846C16__A1__9S20846C15[] = {
  0,
  0,
  ABISELECT(-27584,-20548),
  ABISELECT(-2008,-1504),
  ABISELECT(-27584,-20548),
  (VTBL_ENTRY)&(_ZTI9S20846C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C18D1Ev,_ZTv0_n16_N9S20846C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C18D0Ev,_ZTv0_n16_N9S20846C18D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C7D1Ev();
extern void _ZN8S20846C7D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C79S20846C209S20846C16__9S20846C15[] = {
  ABISELECT(26192,19524),
  ABISELECT(36400,27072),
  ABISELECT(24184,18020),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C7[0]),
  (VTBL_ENTRY)&_ZN8S20846C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C6D1Ev();
extern void _ZN8S20846C6D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C68S20846C79S20846C209S20846C16__9S20846C15[] = {
  ABISELECT(24184,18020),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&_ZN8S20846C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C28S20846C68S20846C79S20846C209S20846C16__A1__9S20846C15[] = {
  ABISELECT(24184,18020),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C28S20846C68S20846C79S20846C209S20846C16__A2__9S20846C15[] = {
  ABISELECT(24184,18020),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZThn24184_N8S20846C4D1Ev,_ZThn18020_N8S20846C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void ABISELECT(_ZThn24184_N8S20846C4D0Ev,_ZThn18020_N8S20846C4D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C28S20846C68S20846C79S20846C209S20846C16__A2__9S20846C15[] = {
  0,
  ABISELECT(-24184,-18020),
  ABISELECT(-24184,-18020),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZThn24184_N8S20846C2D1Ev,_ZThn18020_N8S20846C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void ABISELECT(_ZThn24184_N8S20846C2D0Ev,_ZThn18020_N8S20846C2D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C28S20846C68S20846C79S20846C209S20846C16__A1__9S20846C15[] = {
  0,
  ABISELECT(-24184,-18020),
  ABISELECT(-24184,-18020),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev)();
extern void ABISELECT(_ZThn24184_N8S20846C6D1Ev,_ZThn18020_N8S20846C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev)();
extern void ABISELECT(_ZThn24184_N8S20846C6D0Ev,_ZThn18020_N8S20846C6D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C68S20846C79S20846C209S20846C16__9S20846C15[] = {
  0,
  ABISELECT(-24184,-18020),
  ABISELECT(-24184,-18020),
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C7D1Ev,_ZTv0_n12_N8S20846C7D1Ev)();
extern void ABISELECT(_ZThn24184_N8S20846C7D1Ev,_ZThn18020_N8S20846C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C7D0Ev,_ZTv0_n12_N8S20846C7D0Ev)();
extern void ABISELECT(_ZThn24184_N8S20846C7D0Ev,_ZThn18020_N8S20846C7D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C79S20846C209S20846C16__9S20846C15[] = {
  0,
  ABISELECT(-24184,-18020),
  ABISELECT(-24184,-18020),
  (VTBL_ENTRY)&(_ZTI8S20846C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C7D1Ev,_ZTv0_n12_N8S20846C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C7D0Ev,_ZTv0_n12_N8S20846C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev)();
extern void ABISELECT(_ZThn36400_N8S20846C7D1Ev,_ZThn27072_N8S20846C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev)();
extern void ABISELECT(_ZThn36400_N8S20846C7D0Ev,_ZThn27072_N8S20846C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20846C4__A1__8S20846C79S20846C209S20846C16__9S20846C15[] = {
  ABISELECT(-36400,-27072),
  ABISELECT(-12216,-9052),
  ABISELECT(-36400,-27072),
  (VTBL_ENTRY)&(_ZTI8S20846C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev)();
extern void ABISELECT(_ZThn26192_N8S20846C7D1Ev,_ZThn19524_N8S20846C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev)();
extern void ABISELECT(_ZThn26192_N8S20846C7D0Ev,_ZThn19524_N8S20846C7D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__A1__8S20846C79S20846C209S20846C16__9S20846C15[] = {
  0,
  0,
  ABISELECT(-26192,-19524),
  ABISELECT(-2008,-1504),
  ABISELECT(-26192,-19524),
  (VTBL_ENTRY)&(_ZTI8S20846C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C20D1Ev,_ZTv0_n12_N9S20846C20D1Ev)();
extern void ABISELECT(_ZThn25576_N9S20846C20D1Ev,_ZThn19044_N9S20846C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C20D0Ev,_ZTv0_n12_N9S20846C20D0Ev)();
extern void ABISELECT(_ZThn25576_N9S20846C20D0Ev,_ZThn19044_N9S20846C20D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C209S20846C16__9S20846C15[] = {
  0,
  ABISELECT(-25576,-19044),
  ABISELECT(-25576,-19044),
  (VTBL_ENTRY)&(_ZTI9S20846C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C20D1Ev,_ZTv0_n12_N9S20846C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C20D0Ev,_ZTv0_n12_N9S20846C20D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C20D1Ev,_ZTv0_n16_N9S20846C20D1Ev)();
extern void ABISELECT(_ZThn27584_N9S20846C20D1Ev,_ZThn20548_N9S20846C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C20D0Ev,_ZTv0_n16_N9S20846C20D0Ev)();
extern void ABISELECT(_ZThn27584_N9S20846C20D0Ev,_ZThn20548_N9S20846C20D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C209S20846C16__9S20846C15[] = {
  0,
  0,
  ABISELECT(-27584,-20548),
  ABISELECT(-2008,-1504),
  ABISELECT(-27584,-20548),
  (VTBL_ENTRY)&(_ZTI9S20846C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C20D1Ev,_ZTv0_n16_N9S20846C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C20D0Ev,_ZTv0_n16_N9S20846C20D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C20D1Ev,_ZTv0_n16_N9S20846C20D1Ev)();
extern void ABISELECT(_ZThn37792_N9S20846C20D1Ev,_ZThn28096_N9S20846C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C20D0Ev,_ZTv0_n16_N9S20846C20D0Ev)();
extern void ABISELECT(_ZThn37792_N9S20846C20D0Ev,_ZThn28096_N9S20846C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20846C4__A1__9S20846C209S20846C16__9S20846C15[] = {
  ABISELECT(-37792,-28096),
  ABISELECT(-12216,-9052),
  ABISELECT(-37792,-28096),
  (VTBL_ENTRY)&(_ZTI9S20846C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C20D1Ev,_ZTv0_n16_N9S20846C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C20D0Ev,_ZTv0_n16_N9S20846C20D0Ev),
};
extern void ABISELECT(_ZThn1392_N9S20846C20D1Ev,_ZThn1024_N9S20846C20D1Ev)();
extern void ABISELECT(_ZThn1392_N9S20846C20D0Ev,_ZThn1024_N9S20846C20D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C7__9S20846C209S20846C16__9S20846C15[] = {
  ABISELECT(26192,19524),
  ABISELECT(36400,27072),
  ABISELECT(24184,18020),
  ABISELECT(-1392,-1024),
  (VTBL_ENTRY)&(_ZTI9S20846C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N9S20846C20D1Ev,_ZThn1024_N9S20846C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N9S20846C20D0Ev,_ZThn1024_N9S20846C20D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C16D1Ev,_ZTv0_n12_N9S20846C16D1Ev)();
extern void ABISELECT(_ZThn25576_N9S20846C16D1Ev,_ZThn19044_N9S20846C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C16D0Ev,_ZTv0_n12_N9S20846C16D0Ev)();
extern void ABISELECT(_ZThn25576_N9S20846C16D0Ev,_ZThn19044_N9S20846C16D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C16__9S20846C15[] = {
  0,
  ABISELECT(-25576,-19044),
  ABISELECT(-25576,-19044),
  (VTBL_ENTRY)&(_ZTI9S20846C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C16D1Ev,_ZTv0_n12_N9S20846C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C16D0Ev,_ZTv0_n12_N9S20846C16D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20846C16D1Ev,_ZTv0_n24_N9S20846C16D1Ev)();
extern void ABISELECT(_ZThn25680_N9S20846C16D1Ev,_ZThn19128_N9S20846C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20846C16D0Ev,_ZTv0_n24_N9S20846C16D0Ev)();
extern void ABISELECT(_ZThn25680_N9S20846C16D0Ev,_ZThn19128_N9S20846C16D0Ev)() __attribute__((weak));
extern void _ZN9S20846C182v7Ev();
extern void _ZN9S20846C172v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C17__9S20846C16__9S20846C15[] = {
  0,
  0,
  ABISELECT(-25680,-19128),
  ABISELECT(2016,1480),
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  ABISELECT(-25680,-19128),
  (VTBL_ENTRY)&(_ZTI9S20846C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20846C16D1Ev,_ZTv0_n24_N9S20846C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20846C16D0Ev,_ZTv0_n24_N9S20846C16D0Ev),
  (VTBL_ENTRY)&_ZN9S20846C182v7Ev,
  (VTBL_ENTRY)&_ZN9S20846C172v8Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C16D1Ev,_ZTv0_n16_N9S20846C16D1Ev)();
extern void ABISELECT(_ZThn27584_N9S20846C16D1Ev,_ZThn20548_N9S20846C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C16D0Ev,_ZTv0_n16_N9S20846C16D0Ev)();
extern void ABISELECT(_ZThn27584_N9S20846C16D0Ev,_ZThn20548_N9S20846C16D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C16__9S20846C15[] = {
  0,
  0,
  ABISELECT(-27584,-20548),
  ABISELECT(-2008,-1504),
  ABISELECT(-27584,-20548),
  (VTBL_ENTRY)&(_ZTI9S20846C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C16D1Ev,_ZTv0_n16_N9S20846C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C16D0Ev,_ZTv0_n16_N9S20846C16D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20846C16D1Ev,_ZTv0_n20_N9S20846C16D1Ev)();
extern void ABISELECT(_ZThn27696_N9S20846C16D1Ev,_ZThn20608_N9S20846C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20846C16D0Ev,_ZTv0_n20_N9S20846C16D0Ev)();
extern void ABISELECT(_ZThn27696_N9S20846C16D0Ev,_ZThn20608_N9S20846C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20846C11__9S20846C16__9S20846C15[] = {
  ABISELECT(-27696,-20608),
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  ABISELECT(-27696,-20608),
  (VTBL_ENTRY)&(_ZTI9S20846C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C16D1Ev,_ZTv0_n20_N9S20846C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C16D0Ev,_ZTv0_n20_N9S20846C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20846C16D1Ev,_ZTv0_n16_N9S20846C16D1Ev)();
extern void ABISELECT(_ZThn37792_N9S20846C16D1Ev,_ZThn28096_N9S20846C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C16D0Ev,_ZTv0_n16_N9S20846C16D0Ev)();
extern void ABISELECT(_ZThn37792_N9S20846C16D0Ev,_ZThn28096_N9S20846C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20846C4__A1__9S20846C16__9S20846C15[] = {
  ABISELECT(-37792,-28096),
  ABISELECT(-12216,-9052),
  ABISELECT(-37792,-28096),
  (VTBL_ENTRY)&(_ZTI9S20846C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C16D1Ev,_ZTv0_n16_N9S20846C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C16D0Ev,_ZTv0_n16_N9S20846C16D0Ev),
};
extern void ABISELECT(_ZThn1392_N9S20846C16D1Ev,_ZThn1024_N9S20846C16D1Ev)();
extern void ABISELECT(_ZThn1392_N9S20846C16D0Ev,_ZThn1024_N9S20846C16D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C79S20846C20__9S20846C16__9S20846C15[] = {
  ABISELECT(26192,19524),
  ABISELECT(36400,27072),
  ABISELECT(24184,18020),
  ABISELECT(-1392,-1024),
  (VTBL_ENTRY)&(_ZTI9S20846C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N9S20846C16D1Ev,_ZThn1024_N9S20846C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N9S20846C16D0Ev,_ZThn1024_N9S20846C16D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN9S20846C21D1Ev();
extern void _ZN9S20846C21D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C21__A__9S20846C15[] = {
  ABISELECT(21232,15732),
  ABISELECT(33480,24808),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C21[0]),
  (VTBL_ENTRY)&_ZN9S20846C21D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C21D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C21D1Ev,_ZTv0_n16_N9S20846C21D1Ev)();
extern void ABISELECT(_ZThn33480_N9S20846C21D1Ev,_ZThn24808_N9S20846C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C21D0Ev,_ZTv0_n16_N9S20846C21D0Ev)();
extern void ABISELECT(_ZThn33480_N9S20846C21D0Ev,_ZThn24808_N9S20846C21D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C6__9S20846C21__A__9S20846C15[] = {
  0,
  0,
  ABISELECT(-33480,-24808),
  ABISELECT(-12248,-9076),
  ABISELECT(-33480,-24808),
  (VTBL_ENTRY)&(_ZTI9S20846C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C21D1Ev,_ZTv0_n16_N9S20846C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C21D0Ev,_ZTv0_n16_N9S20846C21D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C21D1Ev,_ZTv0_n12_N9S20846C21D1Ev)();
extern void ABISELECT(_ZThn21232_N9S20846C21D1Ev,_ZThn15732_N9S20846C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C21D0Ev,_ZTv0_n12_N9S20846C21D0Ev)();
extern void ABISELECT(_ZThn21232_N9S20846C21D0Ev,_ZThn15732_N9S20846C21D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C21__A__9S20846C15[] = {
  0,
  ABISELECT(-21232,-15732),
  ABISELECT(-21232,-15732),
  (VTBL_ENTRY)&(_ZTI9S20846C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C21D1Ev,_ZTv0_n12_N9S20846C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C21D0Ev,_ZTv0_n12_N9S20846C21D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN9S20846C233v10Ev();
extern void _ZN9S20846C223v11Ev();
extern void _ZN9S20846C22D1Ev();
extern void _ZN9S20846C22D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C22__9S20846C15[] = {
  ABISELECT(46224,34208),
  ABISELECT(33392,24756),
  ABISELECT(44688,33080),
  ABISELECT(33792,25036),
  ABISELECT(23296,17268),
  ABISELECT(23184,17208),
  ABISELECT(21280,15788),
  ABISELECT(21176,15704),
  ABISELECT(33424,24780),
  ABISELECT(33736,25008),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&_ZN9S20846C233v10Ev,
  (VTBL_ENTRY)&_ZN9S20846C223v11Ev,
  (VTBL_ENTRY)&_ZN9S20846C22D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C22D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20846C22D1Ev,_ZTv0_n20_N9S20846C22D1Ev)();
extern void ABISELECT(_ZThn33736_N9S20846C22D1Ev,_ZThn25008_N9S20846C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20846C22D0Ev,_ZTv0_n20_N9S20846C22D0Ev)();
extern void ABISELECT(_ZThn33736_N9S20846C22D0Ev,_ZThn25008_N9S20846C22D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20846C21__9S20846C22__9S20846C15[] = {
  ABISELECT(-33736,-25008),
  ABISELECT(-12560,-9304),
  ABISELECT(-312,-228),
  ABISELECT(-33736,-25008),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C22D1Ev,_ZTv0_n20_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C22D0Ev,_ZTv0_n20_N9S20846C22D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20846C22D1Ev,_ZTv0_n16_N9S20846C22D1Ev)();
extern void ABISELECT(_ZThn33424_N9S20846C22D1Ev,_ZThn24780_N9S20846C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C22D0Ev,_ZTv0_n16_N9S20846C22D0Ev)();
extern void ABISELECT(_ZThn33424_N9S20846C22D0Ev,_ZThn24780_N9S20846C22D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C6__9S20846C22__9S20846C15[] = {
  0,
  0,
  ABISELECT(-33424,-24780),
  ABISELECT(-12248,-9076),
  ABISELECT(-33424,-24780),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C22D1Ev,_ZTv0_n16_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C22D0Ev,_ZTv0_n16_N9S20846C22D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C22D1Ev,_ZTv0_n12_N9S20846C22D1Ev)();
extern void ABISELECT(_ZThn21176_N9S20846C22D1Ev,_ZThn15704_N9S20846C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C22D0Ev,_ZTv0_n12_N9S20846C22D0Ev)();
extern void ABISELECT(_ZThn21176_N9S20846C22D0Ev,_ZThn15704_N9S20846C22D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C22__9S20846C15[] = {
  0,
  ABISELECT(-21176,-15704),
  ABISELECT(-21176,-15704),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C22D1Ev,_ZTv0_n12_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C22D0Ev,_ZTv0_n12_N9S20846C22D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20846C22D1Ev,_ZTv0_n24_N9S20846C22D1Ev)();
extern void ABISELECT(_ZThn21280_N9S20846C22D1Ev,_ZThn15788_N9S20846C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20846C22D0Ev,_ZTv0_n24_N9S20846C22D0Ev)();
extern void ABISELECT(_ZThn21280_N9S20846C22D0Ev,_ZThn15788_N9S20846C22D0Ev)() __attribute__((weak));
extern void _ZN9S20846C182v7Ev();
extern void _ZN9S20846C172v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C17__9S20846C22__9S20846C15[] = {
  0,
  0,
  ABISELECT(-21280,-15788),
  ABISELECT(2016,1480),
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  ABISELECT(-21280,-15788),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20846C22D1Ev,_ZTv0_n24_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20846C22D0Ev,_ZTv0_n24_N9S20846C22D0Ev),
  (VTBL_ENTRY)&_ZN9S20846C182v7Ev,
  (VTBL_ENTRY)&_ZN9S20846C172v8Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C22D1Ev,_ZTv0_n16_N9S20846C22D1Ev)();
extern void ABISELECT(_ZThn23184_N9S20846C22D1Ev,_ZThn17208_N9S20846C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C22D0Ev,_ZTv0_n16_N9S20846C22D0Ev)();
extern void ABISELECT(_ZThn23184_N9S20846C22D0Ev,_ZThn17208_N9S20846C22D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__A1__9S20846C22__9S20846C15[] = {
  0,
  0,
  ABISELECT(-23184,-17208),
  ABISELECT(-2008,-1504),
  ABISELECT(-23184,-17208),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C22D1Ev,_ZTv0_n16_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C22D0Ev,_ZTv0_n16_N9S20846C22D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20846C22D1Ev,_ZTv0_n20_N9S20846C22D1Ev)();
extern void ABISELECT(_ZThn23296_N9S20846C22D1Ev,_ZThn17268_N9S20846C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20846C22D0Ev,_ZTv0_n20_N9S20846C22D0Ev)();
extern void ABISELECT(_ZThn23296_N9S20846C22D0Ev,_ZThn17268_N9S20846C22D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20846C11__9S20846C22__9S20846C15[] = {
  ABISELECT(-23296,-17268),
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  ABISELECT(-23296,-17268),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C22D1Ev,_ZTv0_n20_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C22D0Ev,_ZTv0_n20_N9S20846C22D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N9S20846C22D1Ev,_ZTv0_n32_N9S20846C22D1Ev)();
extern void ABISELECT(_ZThn33792_N9S20846C22D1Ev,_ZThn25036_N9S20846C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20846C22D0Ev,_ZTv0_n32_N9S20846C22D0Ev)();
extern void ABISELECT(_ZThn33792_N9S20846C22D0Ev,_ZThn25036_N9S20846C22D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C10__9S20846C22__9S20846C15[] = {
  0,
  0,
  ABISELECT(-33792,-25036),
  ABISELECT(12432,9172),
  ABISELECT(-400,-280),
  ABISELECT(10896,8044),
  ABISELECT(-10608,-7828),
  ABISELECT(-12616,-9332),
  ABISELECT(-33792,-25036),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20846C22D1Ev,_ZTv0_n32_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20846C22D0Ev,_ZTv0_n32_N9S20846C22D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTvn320_n64_N9S20846C22D1Ev,_ZTvn228_n32_N9S20846C22D1Ev)();
extern void ABISELECT(_ZTvn320_n64_N9S20846C22D0Ev,_ZTvn228_n32_N9S20846C22D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20846C119S20846C10__A1__9S20846C22__9S20846C15[] = {
  ABISELECT(-12936,-9560),
  ABISELECT(-10928,-8056),
  ABISELECT(-34112,-25264),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn320_n64_N9S20846C22D1Ev,_ZTvn228_n32_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn320_n64_N9S20846C22D0Ev,_ZTvn228_n32_N9S20846C22D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20846C22D1Ev,_ZTv0_n20_N9S20846C22D1Ev)();
extern void ABISELECT(_ZThn44688_N9S20846C22D1Ev,_ZThn33080_N9S20846C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20846C22D0Ev,_ZTv0_n20_N9S20846C22D0Ev)();
extern void ABISELECT(_ZThn44688_N9S20846C22D0Ev,_ZThn33080_N9S20846C22D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C13__9S20846C22__9S20846C15[] = {
  0,
  0,
  ABISELECT(-44688,-33080),
  ABISELECT(-11296,-8324),
  ABISELECT(-23512,-17376),
  ABISELECT(-44688,-33080),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C22D1Ev,_ZTv0_n20_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C22D0Ev,_ZTv0_n20_N9S20846C22D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTvn104_n40_N9S20846C22D1Ev,_ZTvn60_n20_N9S20846C22D1Ev)();
extern void ABISELECT(_ZTvn104_n40_N9S20846C22D0Ev,_ZTvn60_n20_N9S20846C22D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C69S20846C13__A2__9S20846C22__9S20846C15[] = {
  ABISELECT(-23616,-17436),
  ABISELECT(-44792,-33140),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N9S20846C22D1Ev,_ZTvn60_n20_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N9S20846C22D0Ev,_ZTvn60_n20_N9S20846C22D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTvn416_n40_N9S20846C22D1Ev,_ZTvn288_n20_N9S20846C22D1Ev)();
extern void ABISELECT(_ZTvn416_n40_N9S20846C22D0Ev,_ZTvn288_n20_N9S20846C22D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3052C129S20846C13__A1__9S20846C22__9S20846C15[] = {
  ABISELECT(-45104,-33368),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N9S20846C22D1Ev,_ZTvn288_n20_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N9S20846C22D0Ev,_ZTvn288_n20_N9S20846C22D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20846C22D1Ev,_ZTv0_n16_N9S20846C22D1Ev)();
extern void ABISELECT(_ZThn33392_N9S20846C22D1Ev,_ZThn24756_N9S20846C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C22D0Ev,_ZTv0_n16_N9S20846C22D0Ev)();
extern void ABISELECT(_ZThn33392_N9S20846C22D0Ev,_ZThn24756_N9S20846C22D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20846C4__A5__9S20846C22__9S20846C15[] = {
  ABISELECT(-33392,-24756),
  ABISELECT(-12216,-9052),
  ABISELECT(-33392,-24756),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C22D1Ev,_ZTv0_n16_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C22D0Ev,_ZTv0_n16_N9S20846C22D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20846C22D1Ev,_ZTv0_n12_N9S20846C22D1Ev)();
extern void ABISELECT(_ZThn46224_N9S20846C22D1Ev,_ZThn34208_N9S20846C22D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C22D0Ev,_ZTv0_n12_N9S20846C22D0Ev)();
extern void ABISELECT(_ZThn46224_N9S20846C22D0Ev,_ZThn34208_N9S20846C22D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3052C12__A2__9S20846C22__9S20846C15[] = {
  ABISELECT(-46224,-34208),
  ABISELECT(-46224,-34208),
  (VTBL_ENTRY)&(_ZTI9S20846C22[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C22D1Ev,_ZTv0_n12_N9S20846C22D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C22D0Ev,_ZTv0_n12_N9S20846C22D0Ev),
};
extern void _ZN9S20846C17D1Ev();
extern void _ZN9S20846C17D0Ev();
extern void _ZN9S20846C182v7Ev();
extern void _ZN9S20846C172v8Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C17__9S20846C15[] = {
  ABISELECT(2016,1480),
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C17[0]),
  (VTBL_ENTRY)&_ZN9S20846C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C17D0Ev,
  (VTBL_ENTRY)&_ZN9S20846C182v7Ev,
  (VTBL_ENTRY)&_ZN9S20846C172v8Ev,
};
extern void _ZN9S20846C18D1Ev();
extern void _ZN9S20846C18D0Ev();
extern void _ZN9S20846C182v7Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C189S20846C17__9S20846C15[] = {
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C18[0]),
  (VTBL_ENTRY)&_ZN9S20846C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C18D0Ev,
  (VTBL_ENTRY)&_ZN9S20846C182v7Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C18D1Ev,_ZTv0_n12_N9S20846C18D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20846C18D0Ev,_ZTv0_n12_N9S20846C18D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C189S20846C17__9S20846C15[] = {
  0,
  ABISELECT(104,84),
  ABISELECT(104,84),
  (VTBL_ENTRY)&(_ZTI9S20846C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C18D1Ev,_ZTv0_n12_N9S20846C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C18D0Ev,_ZTv0_n12_N9S20846C18D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C18D1Ev,_ZTv0_n16_N9S20846C18D1Ev)();
extern void ABISELECT(_ZThn1904_N9S20846C18D1Ev,_ZThn1420_N9S20846C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C18D0Ev,_ZTv0_n16_N9S20846C18D0Ev)();
extern void ABISELECT(_ZThn1904_N9S20846C18D0Ev,_ZThn1420_N9S20846C18D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C189S20846C17__9S20846C15[] = {
  0,
  0,
  ABISELECT(-1904,-1420),
  ABISELECT(-2008,-1504),
  ABISELECT(-1904,-1420),
  (VTBL_ENTRY)&(_ZTI9S20846C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C18D1Ev,_ZTv0_n16_N9S20846C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C18D0Ev,_ZTv0_n16_N9S20846C18D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C17D1Ev,_ZTv0_n16_N9S20846C17D1Ev)();
extern void ABISELECT(_ZThn1904_N9S20846C17D1Ev,_ZThn1420_N9S20846C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20846C17D0Ev,_ZTv0_n16_N9S20846C17D0Ev)();
extern void ABISELECT(_ZThn1904_N9S20846C17D0Ev,_ZThn1420_N9S20846C17D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C17__9S20846C15[] = {
  0,
  0,
  ABISELECT(-1904,-1420),
  ABISELECT(-2008,-1504),
  ABISELECT(-1904,-1420),
  (VTBL_ENTRY)&(_ZTI9S20846C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C17D1Ev,_ZTv0_n16_N9S20846C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C17D0Ev,_ZTv0_n16_N9S20846C17D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C17D1Ev,_ZTv0_n12_N9S20846C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20846C17D0Ev,_ZTv0_n12_N9S20846C17D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C17__9S20846C15[] = {
  0,
  ABISELECT(104,84),
  ABISELECT(104,84),
  (VTBL_ENTRY)&(_ZTI9S20846C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C17D1Ev,_ZTv0_n12_N9S20846C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C17D0Ev,_ZTv0_n12_N9S20846C17D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20846C17D1Ev,_ZTv0_n20_N9S20846C17D1Ev)();
extern void ABISELECT(_ZThn2016_N9S20846C17D1Ev,_ZThn1480_N9S20846C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20846C17D0Ev,_ZTv0_n20_N9S20846C17D0Ev)();
extern void ABISELECT(_ZThn2016_N9S20846C17D0Ev,_ZThn1480_N9S20846C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20846C11__9S20846C17__9S20846C15[] = {
  ABISELECT(-2016,-1480),
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  ABISELECT(-2016,-1480),
  (VTBL_ENTRY)&(_ZTI9S20846C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C17D1Ev,_ZTv0_n20_N9S20846C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C17D0Ev,_ZTv0_n20_N9S20846C17D0Ev),
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C15[] = {
  ABISELECT(-2008,-1504),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C2__9S20846C15[] = {
  ABISELECT(-2008,-1504),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C2__9S20846C15[] = {
  0,
  ABISELECT(2008,1504),
  ABISELECT(2008,1504),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C2__9S20846C15[] = {
  0,
  ABISELECT(2008,1504),
  ABISELECT(2008,1504),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN9S20846C11D1Ev();
extern void _ZN9S20846C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C11__9S20846C15[] = {
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&_ZN9S20846C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C11D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C11D1Ev,_ZTv0_n16_N9S20846C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20846C11D0Ev,_ZTv0_n16_N9S20846C11D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C11__9S20846C15[] = {
  0,
  0,
  ABISELECT(112,60),
  ABISELECT(-2008,-1504),
  ABISELECT(112,60),
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C11D1Ev,_ZTv0_n16_N9S20846C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C11D0Ev,_ZTv0_n16_N9S20846C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C11D1Ev,_ZTv0_n12_N9S20846C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20846C11D0Ev,_ZTv0_n12_N9S20846C11D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C11__9S20846C15[] = {
  0,
  ABISELECT(2120,1564),
  ABISELECT(2120,1564),
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C11D1Ev,_ZTv0_n12_N9S20846C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C11D0Ev,_ZTv0_n12_N9S20846C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C4__A1__9S20846C15[] = {
  ABISELECT(-12216,-9052),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C4__A1__9S20846C15[] = {
  0,
  ABISELECT(12216,9052),
  ABISELECT(12216,9052),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN8S20846C6D1Ev();
extern void _ZN8S20846C6D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C6__A1__9S20846C15[] = {
  ABISELECT(-12248,-9076),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&_ZN8S20846C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C28S20846C6__A2__9S20846C15[] = {
  ABISELECT(-12248,-9076),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C28S20846C6__A3__9S20846C15[] = {
  ABISELECT(-12248,-9076),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C28S20846C6__A3__9S20846C15[] = {
  0,
  ABISELECT(12248,9076),
  ABISELECT(12248,9076),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C28S20846C6__A2__9S20846C15[] = {
  0,
  ABISELECT(12248,9076),
  ABISELECT(12248,9076),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C6__A1__9S20846C15[] = {
  0,
  ABISELECT(12248,9076),
  ABISELECT(12248,9076),
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN9S20846C21D1Ev();
extern void _ZN9S20846C21D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C21__A1__9S20846C15[] = {
  ABISELECT(-12560,-9304),
  ABISELECT(-312,-228),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C21[0]),
  (VTBL_ENTRY)&_ZN9S20846C21D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C21D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C21D1Ev,_ZTv0_n16_N9S20846C21D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20846C21D0Ev,_ZTv0_n16_N9S20846C21D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C6__9S20846C21__A1__9S20846C15[] = {
  0,
  0,
  ABISELECT(312,228),
  ABISELECT(-12248,-9076),
  ABISELECT(312,228),
  (VTBL_ENTRY)&(_ZTI9S20846C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C21D1Ev,_ZTv0_n16_N9S20846C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C21D0Ev,_ZTv0_n16_N9S20846C21D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C21D1Ev,_ZTv0_n12_N9S20846C21D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20846C21D0Ev,_ZTv0_n12_N9S20846C21D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C21__A1__9S20846C15[] = {
  0,
  ABISELECT(12560,9304),
  ABISELECT(12560,9304),
  (VTBL_ENTRY)&(_ZTI9S20846C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C21D1Ev,_ZTv0_n12_N9S20846C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C21D0Ev,_ZTv0_n12_N9S20846C21D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN9S20846C10D1Ev();
extern void _ZN9S20846C10D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C10__9S20846C15[] = {
  ABISELECT(12432,9172),
  ABISELECT(-400,-280),
  ABISELECT(10896,8044),
  ABISELECT(-10608,-7828),
  ABISELECT(-12616,-9332),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&_ZN9S20846C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C10D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C6D1Ev();
extern void _ZN8S20846C6D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C69S20846C10__A2__9S20846C15[] = {
  ABISELECT(-12616,-9332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&_ZN8S20846C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C28S20846C69S20846C10__A3__9S20846C15[] = {
  ABISELECT(-12616,-9332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C28S20846C69S20846C10__A4__9S20846C15[] = {
  ABISELECT(-12616,-9332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C28S20846C69S20846C10__A4__9S20846C15[] = {
  0,
  ABISELECT(12616,9332),
  ABISELECT(12616,9332),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C28S20846C69S20846C10__A3__9S20846C15[] = {
  0,
  ABISELECT(12616,9332),
  ABISELECT(12616,9332),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C69S20846C10__A2__9S20846C15[] = {
  0,
  ABISELECT(12616,9332),
  ABISELECT(12616,9332),
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN9S20846C11D1Ev();
extern void _ZN9S20846C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C119S20846C10__A1__9S20846C15[] = {
  ABISELECT(-12936,-9560),
  ABISELECT(-10928,-8056),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&_ZN9S20846C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C11D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C11D1Ev,_ZTv0_n16_N9S20846C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20846C11D0Ev,_ZTv0_n16_N9S20846C11D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C119S20846C10__A1__9S20846C15[] = {
  0,
  0,
  ABISELECT(10928,8056),
  ABISELECT(-2008,-1504),
  ABISELECT(10928,8056),
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C11D1Ev,_ZTv0_n16_N9S20846C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C11D0Ev,_ZTv0_n16_N9S20846C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C11D1Ev,_ZTv0_n12_N9S20846C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20846C11D0Ev,_ZTv0_n12_N9S20846C11D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C119S20846C10__A1__9S20846C15[] = {
  0,
  ABISELECT(12936,9560),
  ABISELECT(12936,9560),
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C11D1Ev,_ZTv0_n12_N9S20846C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C11D0Ev,_ZTv0_n12_N9S20846C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C10D1Ev,_ZTv0_n12_N9S20846C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20846C10D0Ev,_ZTv0_n12_N9S20846C10D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C10__9S20846C15[] = {
  0,
  ABISELECT(12616,9332),
  ABISELECT(12616,9332),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C10D1Ev,_ZTv0_n12_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C10D0Ev,_ZTv0_n12_N9S20846C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C10D1Ev,_ZTv0_n16_N9S20846C10D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20846C10D0Ev,_ZTv0_n16_N9S20846C10D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__A1__9S20846C10__9S20846C15[] = {
  0,
  0,
  ABISELECT(10608,7828),
  ABISELECT(-2008,-1504),
  ABISELECT(10608,7828),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C10D1Ev,_ZTv0_n16_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C10D0Ev,_ZTv0_n16_N9S20846C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZThn320_N9S20846C10D1Ev,_ZThn228_N9S20846C10D1Ev)();
extern void ABISELECT(_ZThn320_N9S20846C10D0Ev,_ZThn228_N9S20846C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20846C11__9S20846C10__9S20846C15[] = {
  ABISELECT(-12936,-9560),
  ABISELECT(-10928,-8056),
  ABISELECT(-320,-228),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N9S20846C10D1Ev,_ZThn228_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N9S20846C10D0Ev,_ZThn228_N9S20846C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20846C10D1Ev,_ZTv0_n20_N9S20846C10D1Ev)();
extern void ABISELECT(_ZThn10896_N9S20846C10D1Ev,_ZThn8044_N9S20846C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20846C10D0Ev,_ZTv0_n20_N9S20846C10D0Ev)();
extern void ABISELECT(_ZThn10896_N9S20846C10D0Ev,_ZThn8044_N9S20846C10D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C13__9S20846C10__9S20846C15[] = {
  0,
  0,
  ABISELECT(-10896,-8044),
  ABISELECT(-11296,-8324),
  ABISELECT(-23512,-17376),
  ABISELECT(-10896,-8044),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C10D1Ev,_ZTv0_n20_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C10D0Ev,_ZTv0_n20_N9S20846C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTvn104_n40_N9S20846C10D1Ev,_ZTvn60_n20_N9S20846C10D1Ev)();
extern void ABISELECT(_ZTvn104_n40_N9S20846C10D0Ev,_ZTvn60_n20_N9S20846C10D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C69S20846C13__A1__9S20846C10__9S20846C15[] = {
  ABISELECT(-23616,-17436),
  ABISELECT(-11000,-8104),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N9S20846C10D1Ev,_ZTvn60_n20_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N9S20846C10D0Ev,_ZTvn60_n20_N9S20846C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTvn416_n40_N9S20846C10D1Ev,_ZTvn288_n20_N9S20846C10D1Ev)();
extern void ABISELECT(_ZTvn416_n40_N9S20846C10D0Ev,_ZTvn288_n20_N9S20846C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3052C129S20846C13__9S20846C10__9S20846C15[] = {
  ABISELECT(-11312,-8332),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N9S20846C10D1Ev,_ZTvn288_n20_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N9S20846C10D0Ev,_ZTvn288_n20_N9S20846C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20846C10D1Ev,_ZTv0_n16_N9S20846C10D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20846C10D0Ev,_ZTv0_n16_N9S20846C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20846C4__A4__9S20846C10__9S20846C15[] = {
  ABISELECT(400,280),
  ABISELECT(-12216,-9052),
  ABISELECT(400,280),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C10D1Ev,_ZTv0_n16_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C10D0Ev,_ZTv0_n16_N9S20846C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20846C10D1Ev,_ZTv0_n12_N9S20846C10D1Ev)();
extern void ABISELECT(_ZThn12432_N9S20846C10D1Ev,_ZThn9172_N9S20846C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20846C10D0Ev,_ZTv0_n12_N9S20846C10D0Ev)();
extern void ABISELECT(_ZThn12432_N9S20846C10D0Ev,_ZThn9172_N9S20846C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3052C12__A1__9S20846C10__9S20846C15[] = {
  ABISELECT(-12432,-9172),
  ABISELECT(-12432,-9172),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C10D1Ev,_ZTv0_n12_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C10D0Ev,_ZTv0_n12_N9S20846C10D0Ev),
};
extern void _ZN9S20846C13D1Ev();
extern void _ZN9S20846C13D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C13__9S20846C15[] = {
  ABISELECT(-11296,-8324),
  ABISELECT(-23512,-17376),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C13[0]),
  (VTBL_ENTRY)&_ZN9S20846C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C13D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C29S20846C13__A4__9S20846C15[] = {
  ABISELECT(-23512,-17376),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C29S20846C13__A5__9S20846C15[] = {
  ABISELECT(-23512,-17376),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C29S20846C13__A5__9S20846C15[] = {
  0,
  ABISELECT(23512,17376),
  ABISELECT(23512,17376),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C29S20846C13__A4__9S20846C15[] = {
  0,
  ABISELECT(23512,17376),
  ABISELECT(23512,17376),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN8S20846C6D1Ev();
extern void _ZN8S20846C6D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C69S20846C13__A3__9S20846C15[] = {
  ABISELECT(-23616,-17436),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&_ZN8S20846C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C28S20846C69S20846C13__A5__9S20846C15[] = {
  ABISELECT(-23616,-17436),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C28S20846C69S20846C13__A6__9S20846C15[] = {
  ABISELECT(-23616,-17436),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C28S20846C69S20846C13__A6__9S20846C15[] = {
  0,
  ABISELECT(23616,17436),
  ABISELECT(23616,17436),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C28S20846C69S20846C13__A5__9S20846C15[] = {
  0,
  ABISELECT(23616,17436),
  ABISELECT(23616,17436),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C69S20846C13__A3__9S20846C15[] = {
  0,
  ABISELECT(23616,17436),
  ABISELECT(23616,17436),
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C13D1Ev,_ZTv0_n12_N9S20846C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20846C13D0Ev,_ZTv0_n12_N9S20846C13D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C13__9S20846C15[] = {
  0,
  ABISELECT(23512,17376),
  ABISELECT(23512,17376),
  (VTBL_ENTRY)&(_ZTI9S20846C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C13D1Ev,_ZTv0_n12_N9S20846C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C13D0Ev,_ZTv0_n12_N9S20846C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZThn104_N9S20846C13D1Ev,_ZThn60_N9S20846C13D1Ev)();
extern void ABISELECT(_ZThn104_N9S20846C13D0Ev,_ZThn60_N9S20846C13D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C6__9S20846C13__9S20846C15[] = {
  ABISELECT(-23616,-17436),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI9S20846C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S20846C13D1Ev,_ZThn60_N9S20846C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S20846C13D0Ev,_ZThn60_N9S20846C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C13D1Ev,_ZTv0_n16_N9S20846C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20846C13D0Ev,_ZTv0_n16_N9S20846C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20846C4__A2__9S20846C13__9S20846C15[] = {
  ABISELECT(11296,8324),
  ABISELECT(-12216,-9052),
  ABISELECT(11296,8324),
  (VTBL_ENTRY)&(_ZTI9S20846C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C13D1Ev,_ZTv0_n16_N9S20846C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C13D0Ev,_ZTv0_n16_N9S20846C13D0Ev),
};
static  VTT_ENTRY vtt_S20846C15[] = {
  {&(_ZTV9S20846C15[12]),  12,163},
  {&(_tg__ZTV9S20846C16__9S20846C15[7]),  7,11},
  {&(_tg__ZTV9S20846C209S20846C16__9S20846C15[5]),  5,9},
  {&(_tg__ZTV9S20846C189S20846C209S20846C16__A1__9S20846C15[4]),  4,7},
  {&(_tg__ZTV8S20846C3__9S20846C189S20846C209S20846C16__A1__9S20846C15[4]),  4,7},
  {&(_tg__ZTV8S20846C2__9S20846C189S20846C209S20846C16__A1__9S20846C15[6]),  6,10},
  {&(_tg__ZTV8S20846C79S20846C209S20846C16__9S20846C15[5]),  5,9},
  {&(_tg__ZTV8S20846C68S20846C79S20846C209S20846C16__9S20846C15[3]),  3,7},
  {&(_tg__ZTV8S20846C28S20846C68S20846C79S20846C209S20846C16__A1__9S20846C15[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C28S20846C68S20846C79S20846C209S20846C16__A2__9S20846C15[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C28S20846C68S20846C79S20846C209S20846C16__A2__9S20846C15[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C28S20846C68S20846C79S20846C209S20846C16__A1__9S20846C15[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C68S20846C79S20846C209S20846C16__9S20846C15[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C79S20846C209S20846C16__9S20846C15[4]),  4,7},
  {&(_tg__ZTV8S20846C4__A1__8S20846C79S20846C209S20846C16__9S20846C15[4]),  4,6},
  {&(_tg__ZTV8S20846C2__A1__8S20846C79S20846C209S20846C16__9S20846C15[6]),  6,10},
  {&(_tg__ZTV8S20846C3__9S20846C209S20846C16__9S20846C15[4]),  4,7},
  {&(_tg__ZTV8S20846C2__9S20846C209S20846C16__9S20846C15[6]),  6,10},
  {&(_tg__ZTV8S20846C4__A1__9S20846C209S20846C16__9S20846C15[4]),  4,6},
  {&(_tg__ZTV8S20846C7__9S20846C209S20846C16__9S20846C15[5]),  5,9},
  {&(_tg__ZTV8S20846C3__9S20846C16__9S20846C15[4]),  4,7},
  {&(_tg__ZTV9S20846C17__9S20846C16__9S20846C15[8]),  8,12},
  {&(_tg__ZTV8S20846C2__9S20846C16__9S20846C15[6]),  6,10},
  {&(_tg__ZTV9S20846C11__9S20846C16__9S20846C15[5]),  5,7},
  {&(_tg__ZTV8S20846C4__A1__9S20846C16__9S20846C15[4]),  4,6},
  {&(_tg__ZTV8S20846C79S20846C20__9S20846C16__9S20846C15[5]),  5,9},
  {&(_tg__ZTV9S20846C21__A__9S20846C15[4]),  4,6},
  {&(_tg__ZTV8S20846C6__9S20846C21__A__9S20846C15[6]),  6,10},
  {&(_tg__ZTV8S20846C3__9S20846C21__A__9S20846C15[4]),  4,7},
  {&(_tg__ZTV9S20846C22__9S20846C15[12]),  12,16},
  {&(_tg__ZTV9S20846C21__9S20846C22__9S20846C15[5]),  5,7},
  {&(_tg__ZTV8S20846C6__9S20846C22__9S20846C15[6]),  6,10},
  {&(_tg__ZTV8S20846C3__9S20846C22__9S20846C15[4]),  4,7},
  {&(_tg__ZTV9S20846C17__9S20846C22__9S20846C15[8]),  8,12},
  {&(_tg__ZTV8S20846C2__A1__9S20846C22__9S20846C15[6]),  6,10},
  {&(_tg__ZTV9S20846C11__9S20846C22__9S20846C15[5]),  5,7},
  {&(_tg__ZTV9S20846C10__9S20846C22__9S20846C15[10]),  10,14},
  {&(_tg__ZTV9S20846C119S20846C10__A1__9S20846C22__9S20846C15[4]),  4,6},
  {&(_tg__ZTV9S20846C13__9S20846C22__9S20846C15[7]),  7,11},
  {&(_tg__ZTV8S20846C69S20846C13__A2__9S20846C22__9S20846C15[3]),  3,7},
  {&(_tg__ZTV8S3052C129S20846C13__A1__9S20846C22__9S20846C15[2]),  2,4},
  {&(_tg__ZTV8S20846C4__A5__9S20846C22__9S20846C15[4]),  4,6},
  {&(_tg__ZTV8S3052C12__A2__9S20846C22__9S20846C15[3]),  3,5},
  {&(_ZTV9S20846C15[61]),  61,163},
  {&(_ZTV9S20846C15[72]),  72,163},
  {&(_ZTV9S20846C15[82]),  82,163},
  {&(_ZTV9S20846C15[91]),  91,163},
  {&(_ZTV9S20846C15[97]),  97,163},
  {&(_ZTV9S20846C15[26]),  26,163},
  {&(_ZTV9S20846C15[34]),  34,163},
  {&(_ZTV9S20846C15[105]),  105,163},
  {&(_ZTV9S20846C15[48]),  48,163},
  {&(_ZTV9S20846C15[114]),  114,163},
  {&(_ZTV9S20846C15[126]),  126,163},
  {&(_ZTV9S20846C15[134]),  134,163},
  {&(_ZTV9S20846C15[143]),  143,163},
  {&(_ZTV9S20846C15[150]),  150,163},
  {&(_ZTV9S20846C15[156]),  156,163},
  {&(_ZTV9S20846C15[161]),  161,163},
  {&(_tg__ZTV9S20846C17__9S20846C15[5]),  5,9},
  {&(_tg__ZTV9S20846C189S20846C17__9S20846C15[4]),  4,7},
  {&(_tg__ZTV8S20846C3__9S20846C189S20846C17__9S20846C15[4]),  4,7},
  {&(_tg__ZTV8S20846C2__9S20846C189S20846C17__9S20846C15[6]),  6,10},
  {&(_tg__ZTV8S20846C2__9S20846C17__9S20846C15[6]),  6,10},
  {&(_tg__ZTV8S20846C3__9S20846C17__9S20846C15[4]),  4,7},
  {&(_tg__ZTV9S20846C11__9S20846C17__9S20846C15[5]),  5,7},
  {&(_tg__ZTV8S20846C2__9S20846C15[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C2__9S20846C15[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C2__9S20846C15[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C2__9S20846C15[4]),  4,7},
  {&(_tg__ZTV9S20846C11__9S20846C15[4]),  4,6},
  {&(_tg__ZTV8S20846C2__9S20846C11__9S20846C15[6]),  6,10},
  {&(_tg__ZTV8S20846C3__9S20846C11__9S20846C15[4]),  4,7},
  {&(_tg__ZTV8S20846C4__A1__9S20846C15[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C4__A1__9S20846C15[4]),  4,7},
  {&(_tg__ZTV8S20846C6__A1__9S20846C15[3]),  3,7},
  {&(_tg__ZTV8S20846C28S20846C6__A2__9S20846C15[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C28S20846C6__A3__9S20846C15[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C28S20846C6__A3__9S20846C15[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C28S20846C6__A2__9S20846C15[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C6__A1__9S20846C15[4]),  4,7},
  {&(_tg__ZTV9S20846C21__A1__9S20846C15[4]),  4,6},
  {&(_tg__ZTV8S20846C6__9S20846C21__A1__9S20846C15[6]),  6,10},
  {&(_tg__ZTV8S20846C3__9S20846C21__A1__9S20846C15[4]),  4,7},
  {&(_tg__ZTV9S20846C10__9S20846C15[7]),  7,11},
  {&(_tg__ZTV8S20846C69S20846C10__A2__9S20846C15[3]),  3,7},
  {&(_tg__ZTV8S20846C28S20846C69S20846C10__A3__9S20846C15[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C28S20846C69S20846C10__A4__9S20846C15[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C28S20846C69S20846C10__A4__9S20846C15[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C28S20846C69S20846C10__A3__9S20846C15[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C69S20846C10__A2__9S20846C15[4]),  4,7},
  {&(_tg__ZTV9S20846C119S20846C10__A1__9S20846C15[4]),  4,6},
  {&(_tg__ZTV8S20846C2__9S20846C119S20846C10__A1__9S20846C15[6]),  6,10},
  {&(_tg__ZTV8S20846C3__9S20846C119S20846C10__A1__9S20846C15[4]),  4,7},
  {&(_tg__ZTV8S20846C3__9S20846C10__9S20846C15[4]),  4,7},
  {&(_tg__ZTV8S20846C2__A1__9S20846C10__9S20846C15[6]),  6,10},
  {&(_tg__ZTV9S20846C11__9S20846C10__9S20846C15[4]),  4,6},
  {&(_tg__ZTV9S20846C13__9S20846C10__9S20846C15[7]),  7,11},
  {&(_tg__ZTV8S20846C69S20846C13__A1__9S20846C10__9S20846C15[3]),  3,7},
  {&(_tg__ZTV8S3052C129S20846C13__9S20846C10__9S20846C15[2]),  2,4},
  {&(_tg__ZTV8S20846C4__A4__9S20846C10__9S20846C15[4]),  4,6},
  {&(_tg__ZTV8S3052C12__A1__9S20846C10__9S20846C15[3]),  3,5},
  {&(_tg__ZTV9S20846C13__9S20846C15[4]),  4,8},
  {&(_tg__ZTV8S20846C29S20846C13__A4__9S20846C15[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C29S20846C13__A5__9S20846C15[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C29S20846C13__A5__9S20846C15[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C29S20846C13__A4__9S20846C15[4]),  4,7},
  {&(_tg__ZTV8S20846C69S20846C13__A3__9S20846C15[3]),  3,7},
  {&(_tg__ZTV8S20846C28S20846C69S20846C13__A5__9S20846C15[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C28S20846C69S20846C13__A6__9S20846C15[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C28S20846C69S20846C13__A6__9S20846C15[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C28S20846C69S20846C13__A5__9S20846C15[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C69S20846C13__A3__9S20846C15[4]),  4,7},
  {&(_tg__ZTV8S20846C3__9S20846C13__9S20846C15[4]),  4,7},
  {&(_tg__ZTV8S20846C6__9S20846C13__9S20846C15[3]),  3,7},
  {&(_tg__ZTV8S20846C4__A2__9S20846C13__9S20846C15[4]),  4,6},
};
extern VTBL_ENTRY _ZTI9S20846C15[];
extern  VTBL_ENTRY _ZTV9S20846C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C15[];
static VTBL_ENTRY alt_thunk_names31[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C10D0Ev,_ZTv0_n12_N9S20846C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12432_N9S20846C10D0Ev,_ZThn9172_N9S20846C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C10D1Ev,_ZTv0_n12_N9S20846C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12432_N9S20846C10D1Ev,_ZThn9172_N9S20846C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C10D0Ev,_ZTv0_n20_N9S20846C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10896_N9S20846C10D0Ev,_ZThn8044_N9S20846C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C10D1Ev,_ZTv0_n20_N9S20846C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10896_N9S20846C10D1Ev,_ZThn8044_N9S20846C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C17D0Ev,_ZTv0_n20_N9S20846C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N9S20846C17D0Ev,_ZThn1480_N9S20846C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C17D1Ev,_ZTv0_n20_N9S20846C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N9S20846C17D1Ev,_ZThn1480_N9S20846C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C17D0Ev,_ZTv0_n16_N9S20846C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S20846C17D0Ev,_ZThn1420_N9S20846C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C17D1Ev,_ZTv0_n16_N9S20846C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S20846C17D1Ev,_ZThn1420_N9S20846C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20846C22D0Ev,_ZTv0_n32_N9S20846C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33792_N9S20846C22D0Ev,_ZThn25036_N9S20846C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20846C22D1Ev,_ZTv0_n32_N9S20846C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33792_N9S20846C22D1Ev,_ZThn25036_N9S20846C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20846C22D0Ev,_ZTv0_n24_N9S20846C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21280_N9S20846C22D0Ev,_ZThn15788_N9S20846C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20846C22D1Ev,_ZTv0_n24_N9S20846C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21280_N9S20846C22D1Ev,_ZThn15788_N9S20846C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C22D0Ev,_ZTv0_n12_N9S20846C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46224_N9S20846C22D0Ev,_ZThn34208_N9S20846C22D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21176_N9S20846C22D0Ev,_ZThn15704_N9S20846C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C22D1Ev,_ZTv0_n12_N9S20846C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46224_N9S20846C22D1Ev,_ZThn34208_N9S20846C22D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21176_N9S20846C22D1Ev,_ZThn15704_N9S20846C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C22D0Ev,_ZTv0_n16_N9S20846C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33392_N9S20846C22D0Ev,_ZThn24756_N9S20846C22D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn23184_N9S20846C22D0Ev,_ZThn17208_N9S20846C22D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn33424_N9S20846C22D0Ev,_ZThn24780_N9S20846C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C22D1Ev,_ZTv0_n16_N9S20846C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33392_N9S20846C22D1Ev,_ZThn24756_N9S20846C22D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn23184_N9S20846C22D1Ev,_ZThn17208_N9S20846C22D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn33424_N9S20846C22D1Ev,_ZThn24780_N9S20846C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C22D0Ev,_ZTv0_n20_N9S20846C22D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44688_N9S20846C22D0Ev,_ZThn33080_N9S20846C22D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn23296_N9S20846C22D0Ev,_ZThn17268_N9S20846C22D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn33736_N9S20846C22D0Ev,_ZThn25008_N9S20846C22D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C22D1Ev,_ZTv0_n20_N9S20846C22D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44688_N9S20846C22D1Ev,_ZThn33080_N9S20846C22D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn23296_N9S20846C22D1Ev,_ZThn17268_N9S20846C22D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn33736_N9S20846C22D1Ev,_ZThn25008_N9S20846C22D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C21D0Ev,_ZTv0_n12_N9S20846C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21232_N9S20846C21D0Ev,_ZThn15732_N9S20846C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C21D1Ev,_ZTv0_n12_N9S20846C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21232_N9S20846C21D1Ev,_ZThn15732_N9S20846C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C21D0Ev,_ZTv0_n16_N9S20846C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33480_N9S20846C21D0Ev,_ZThn24808_N9S20846C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C21D1Ev,_ZTv0_n16_N9S20846C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33480_N9S20846C21D1Ev,_ZThn24808_N9S20846C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C16D0Ev,_ZTv0_n20_N9S20846C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn27696_N9S20846C16D0Ev,_ZThn20608_N9S20846C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C16D1Ev,_ZTv0_n20_N9S20846C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn27696_N9S20846C16D1Ev,_ZThn20608_N9S20846C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C16D0Ev,_ZTv0_n16_N9S20846C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn37792_N9S20846C16D0Ev,_ZThn28096_N9S20846C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn27584_N9S20846C16D0Ev,_ZThn20548_N9S20846C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C16D1Ev,_ZTv0_n16_N9S20846C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn37792_N9S20846C16D1Ev,_ZThn28096_N9S20846C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn27584_N9S20846C16D1Ev,_ZThn20548_N9S20846C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20846C16D0Ev,_ZTv0_n24_N9S20846C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25680_N9S20846C16D0Ev,_ZThn19128_N9S20846C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20846C16D1Ev,_ZTv0_n24_N9S20846C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25680_N9S20846C16D1Ev,_ZThn19128_N9S20846C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C16D0Ev,_ZTv0_n12_N9S20846C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25576_N9S20846C16D0Ev,_ZThn19044_N9S20846C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C16D1Ev,_ZTv0_n12_N9S20846C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25576_N9S20846C16D1Ev,_ZThn19044_N9S20846C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C20D0Ev,_ZTv0_n16_N9S20846C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn37792_N9S20846C20D0Ev,_ZThn28096_N9S20846C20D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn27584_N9S20846C20D0Ev,_ZThn20548_N9S20846C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C20D1Ev,_ZTv0_n16_N9S20846C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn37792_N9S20846C20D1Ev,_ZThn28096_N9S20846C20D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn27584_N9S20846C20D1Ev,_ZThn20548_N9S20846C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C20D0Ev,_ZTv0_n12_N9S20846C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25576_N9S20846C20D0Ev,_ZThn19044_N9S20846C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C20D1Ev,_ZTv0_n12_N9S20846C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25576_N9S20846C20D1Ev,_ZThn19044_N9S20846C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26192_N8S20846C7D0Ev,_ZThn19524_N8S20846C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn36400_N8S20846C7D0Ev,_ZThn27072_N8S20846C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26192_N8S20846C7D1Ev,_ZThn19524_N8S20846C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn36400_N8S20846C7D1Ev,_ZThn27072_N8S20846C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C7D0Ev,_ZTv0_n12_N8S20846C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24184_N8S20846C7D0Ev,_ZThn18020_N8S20846C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C7D1Ev,_ZTv0_n12_N8S20846C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24184_N8S20846C7D1Ev,_ZThn18020_N8S20846C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24184_N8S20846C6D0Ev,_ZThn18020_N8S20846C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24184_N8S20846C6D1Ev,_ZThn18020_N8S20846C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24184_N8S20846C2D0Ev,_ZThn18020_N8S20846C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24184_N8S20846C2D1Ev,_ZThn18020_N8S20846C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24184_N8S20846C4D0Ev,_ZThn18020_N8S20846C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24184_N8S20846C4D1Ev,_ZThn18020_N8S20846C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C18D0Ev,_ZTv0_n16_N9S20846C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S20846C18D0Ev,_ZThn1420_N9S20846C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn27584_N9S20846C18D0Ev,_ZThn20548_N9S20846C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C18D1Ev,_ZTv0_n16_N9S20846C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S20846C18D1Ev,_ZThn1420_N9S20846C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn27584_N9S20846C18D1Ev,_ZThn20548_N9S20846C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C18D0Ev,_ZTv0_n12_N9S20846C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25576_N9S20846C18D0Ev,_ZThn19044_N9S20846C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C18D1Ev,_ZTv0_n12_N9S20846C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25576_N9S20846C18D1Ev,_ZThn19044_N9S20846C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20846C15D0Ev,_ZTv0_n32_N9S20846C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn38192_N9S20846C15D0Ev,_ZThn28376_N9S20846C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20846C15D1Ev,_ZTv0_n32_N9S20846C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn38192_N9S20846C15D1Ev,_ZThn28376_N9S20846C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C15D0Ev,_ZTv0_n20_N9S20846C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn49088_N9S20846C15D0Ev,_ZThn36420_N9S20846C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn38136_N9S20846C15D0Ev,_ZThn28348_N9S20846C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn27696_N9S20846C15D0Ev,_ZThn20608_N9S20846C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C15D1Ev,_ZTv0_n20_N9S20846C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn49088_N9S20846C15D1Ev,_ZThn36420_N9S20846C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn38136_N9S20846C15D1Ev,_ZThn28348_N9S20846C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn27696_N9S20846C15D1Ev,_ZThn20608_N9S20846C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C15D0Ev,_ZTv0_n16_N9S20846C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn37824_N9S20846C15D0Ev,_ZThn28120_N9S20846C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn37792_N9S20846C15D0Ev,_ZThn28096_N9S20846C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn27584_N9S20846C15D0Ev,_ZThn20548_N9S20846C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20846C15D1Ev,_ZTv0_n16_N9S20846C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn37824_N9S20846C15D1Ev,_ZThn28120_N9S20846C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn37792_N9S20846C15D1Ev,_ZThn28096_N9S20846C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn27584_N9S20846C15D1Ev,_ZThn20548_N9S20846C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20846C15D0Ev,_ZTv0_n24_N9S20846C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25680_N9S20846C15D0Ev,_ZThn19128_N9S20846C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20846C15D1Ev,_ZTv0_n24_N9S20846C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25680_N9S20846C15D1Ev,_ZThn19128_N9S20846C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C15D0Ev,_ZTv0_n12_N9S20846C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn50624_N9S20846C15D0Ev,_ZThn37548_N9S20846C15D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn25576_N9S20846C15D0Ev,_ZThn19044_N9S20846C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20846C15D1Ev,_ZTv0_n12_N9S20846C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn50624_N9S20846C15D1Ev,_ZThn37548_N9S20846C15D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn25576_N9S20846C15D1Ev,_ZThn19044_N9S20846C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20846C15 = {  "S20846C15", // class name
  bases_S20846C15, 41,
  &(vtc_S20846C15[0]), // expected_vtbl_contents
  &(vtt_S20846C15[0]), // expected_vtt_contents
  ABISELECT(50832,37696), // object size
  NSPAIRA(_ZTI9S20846C15),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20846C15),163, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20846C15),116, //virtual table table var
  38, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names31,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20846C1  : virtual S20846C2 , virtual S20846C5 , virtual S20846C10 {
  int s20846c1f0[9];
  int s20846c1f1;
  ::S20846C15 s20846c1f2;
  char  :0;
  __tsi64 s20846c1f4;
  int s20846c1f5;
  int s20846c1f6:13;
  ::S3052C13 s20846c1f7;
  char s20846c1f8;
  virtual void  v1(); // _ZN8S20846C12v1Ev
  virtual void  v2(); // _ZN8S20846C12v2Ev
  ~S20846C1(); // tgen
  S20846C1(); // tgen
};
//SIG(1 S20846C1) C1{ VBC2{ VBC3{ vd v3 Fs[6] FL[8] Fi} BC4{ VBC3 FL Fp FL:54} v4 v5 Fc:0 Fp[8] Fc} VBC5{ BC6{ VBC3 BC2 Fp[3] Fc:8 Fi[2] Fc FC3 Fp[3] FL[5] Fi} VBC2 VBC4 VBC7{ VBC3 BC6 VBC4 VBC2 vd Fp[7]} VBC8{ vd m FC9{ VBC10{ vd v14 Fs[6] FL[8] Fi} BC11{ VBC10 FL Fp FL:54} v12 v13 Fc:0 Fp[8] Fc}} vd v6 Fi FL Fi[2] Fs[8] FC8 FU12{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} FD[5] Fi:5 Fi} VBC13{ BC6 VBC2 BC14{ BC15{ m Fp Fi FL Fp Fi} VBC2 Fp Fc[4] Fi:11 Fp Fp Fi[6] FC16{ VBC3 BC2 BC6 BC8 VBC4 Fp Fl FC6 FC8 FC4 Fi Fi FU17{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} VBC16 VBC8 vd FC8[2] Fi FD FD Fc:0 Fp} v1 v2 Fi[9] Fi FC18{ VBC3 BC19{ VBC3 VBC20{ VBC2 VBC14 BC21{ BC8 VBC3 VBC2 v7 FC2[2] FD FC8 Fp[3] FC6 Fi FU12 Fi} v8 Fp FC22{} FC3 FL FU17 FL[6] FL FC6} BC23{ BC21 VBC4 BC3 BC7 v9 FC3[9] Fc Fi Fi Fi Fc} vd FC16 FU17 Fi Fc} BC24{ VBC6 Fp[6]} BC25{ VBC24 VBC20 VBC13 BC26{ v10 Fi:0 Fi[6] Fi Fp} BC3 v11 Fi Fp Fi FC14[2] FC4 FD Fi[3] FU17 FL Fi[2] Fi FU17 Fp} BC15 Fi FU17 FD Fi Fs Fi Fi Fi Fi Fi Fi FC26 Fi FC22} Fc:0 FL Fi Fi:13 FU17 Fc}


void  S20846C1 ::v1(){vfunc_called(this, "_ZN8S20846C12v1Ev");}
void  S20846C1 ::v2(){vfunc_called(this, "_ZN8S20846C12v2Ev");}
S20846C1 ::~S20846C1(){ note_dtor("S20846C1", this);} // tgen
S20846C1 ::S20846C1(){ note_ctor("S20846C1", this);} // tgen

static void Test_S20846C1()
{
  extern Class_Descriptor cd_S20846C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4053,12003)];
    init_test(&cd_S20846C1, buf);
    S20846C1 *dp, &lv = *(dp=new (buf) S20846C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64832,48008), "sizeof(S20846C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20846C1)");
    /*is_ambiguous_... S20846C1::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C2*), ABISELECT(51024,37832), "S20846C1");
    /*is_ambiguous_... S20846C1::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*), ABISELECT(51024,37832), "S20846C1");
    /*is_ambiguous_... S20846C5::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C6*)(S20846C5*), ABISELECT(51024,37832), "S20846C1");
    /*is_ambiguous_... S20846C5::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C2*)(S20846C6*)(S20846C5*), ABISELECT(51024,37832), "S20846C1");
    /*is_ambiguous_... S20846C5::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*)(S20846C6*)(S20846C5*), ABISELECT(51024,37832), "S20846C1");
    /*is_ambiguous_... S20846C1::S20846C4 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*), ABISELECT(51024,37832), "S20846C1");
    check_base_class_offset(lv, (S20846C3*)(S20846C7*), ABISELECT(51024,37832), "S20846C1");
    check_base_class_offset(lv, (S20846C3*)(S20846C6*)(S20846C7*), ABISELECT(51024,37832), "S20846C1");
    check_base_class_offset(lv, (S20846C3*)(S20846C2*)(S20846C6*)(S20846C7*), ABISELECT(51024,37832), "S20846C1");
    check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*)(S20846C6*)(S20846C7*), ABISELECT(51024,37832), "S20846C1");
    /*is_ambiguous_... S20846C10::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C6*)(S20846C10*), ABISELECT(51024,37832), "S20846C1");
    /*is_ambiguous_... S20846C10::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C2*)(S20846C6*)(S20846C10*), ABISELECT(51024,37832), "S20846C1");
    /*is_ambiguous_... S20846C10::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*)(S20846C6*)(S20846C10*), ABISELECT(51024,37832), "S20846C1");
    check_base_class_offset(lv, (S20846C3*)(S20846C13*), ABISELECT(51024,37832), "S20846C1");
    /*is_ambiguous_... S20846C13::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C2*)(S20846C13*), ABISELECT(51024,37832), "S20846C1");
    /*is_ambiguous_... S20846C13::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*)(S20846C13*), ABISELECT(51024,37832), "S20846C1");
    check_base_class_offset(lv, (S20846C3*)(S20846C6*)(S20846C13*), ABISELECT(51024,37832), "S20846C1");
    check_base_class_offset(lv, (S20846C3*)(S20846C2*)(S20846C6*)(S20846C13*), ABISELECT(51024,37832), "S20846C1");
    check_base_class_offset(lv, (S20846C3*)(S20846C4*)(S20846C2*)(S20846C6*)(S20846C13*), ABISELECT(51024,37832), "S20846C1");
    /*is_ambiguous_... S20846C1::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C2*), ABISELECT(50920,37772), "S20846C1");
    /*is_ambiguous_... S20846C1::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C2*), ABISELECT(50920,37772), "S20846C1");
    /*is_ambiguous_... S20846C5::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C2*)(S20846C5*), ABISELECT(50920,37772), "S20846C1");
    /*is_ambiguous_... S20846C7::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C2*)(S20846C7*), ABISELECT(50920,37772), "S20846C1");
    /*is_ambiguous_... S20846C10::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C2*)(S20846C10*), ABISELECT(50920,37772), "S20846C1");
    check_base_class_offset(lv, (S20846C2*)(S20846C11*)(S20846C10*), ABISELECT(50920,37772), "S20846C1");
    /*is_ambiguous_... S20846C5::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C2*)(S20846C6*)(S20846C5*), ABISELECT(51120,37916), "S20846C1");
    /*is_ambiguous_... S20846C5::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C2*)(S20846C6*)(S20846C5*), ABISELECT(51120,37916), "S20846C1");
    /*is_ambiguous_... S20846C5::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C6*)(S20846C5*), ABISELECT(51120,37916), "S20846C1");
    /*is_ambiguous_... S20846C5::S20846C4 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C5*), ABISELECT(51784,38408), "S20846C1");
    /*is_ambiguous_... S20846C7::S20846C4 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C7*), ABISELECT(51784,38408), "S20846C1");
    /*is_ambiguous_... S20846C13::S20846C4 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C13*), ABISELECT(51784,38408), "S20846C1");
    check_base_class_offset(lv, (S20846C4*)(S20846C2*)(S20846C6*)(S20846C7*), ABISELECT(51816,38432), "S20846C1");
    check_base_class_offset(lv, (S20846C2*)(S20846C6*)(S20846C7*), ABISELECT(51816,38432), "S20846C1");
    check_base_class_offset(lv, (S20846C6*)(S20846C7*), ABISELECT(51816,38432), "S20846C1");
    check_base_class_offset(lv, (S20846C7*)(S20846C5*), ABISELECT(51816,38432), "S20846C1");
    check_base_class_offset(lv, (S3052C12*)(S20846C5*), ABISELECT(52184,38688), "S20846C1");
    /*is_ambiguous_... S20846C10::S3052C12 */ AMB_check_base_class_offset(lv, (S3052C12*)(S20846C10*), ABISELECT(52184,38688), "S20846C1");
    check_base_class_offset(lv, (S20846C5*), ABISELECT(51120,37916), "S20846C1");
    /*is_ambiguous_... S20846C10::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C2*)(S20846C6*)(S20846C10*), ABISELECT(52400,38836), "S20846C1");
    /*is_ambiguous_... S20846C10::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C2*)(S20846C6*)(S20846C10*), ABISELECT(52400,38836), "S20846C1");
    /*is_ambiguous_... S20846C10::S20846C6 */ AMB_check_base_class_offset(lv, (S20846C6*)(S20846C10*), ABISELECT(52400,38836), "S20846C1");
    check_base_class_offset(lv, (S3052C10*)(S20846C11*)(S20846C10*), ABISELECT(52728,39068), "S20846C1");
    check_base_class_offset(lv, (S20846C11*)(S20846C10*), ABISELECT(52720,39064), "S20846C1");
    /*is_ambiguous_... S20846C13::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C4*)(S20846C2*)(S20846C13*), ABISELECT(63296,46880), "S20846C1");
    /*is_ambiguous_... S20846C13::S20846C2 */ AMB_check_base_class_offset(lv, (S20846C2*)(S20846C13*), ABISELECT(63296,46880), "S20846C1");
    check_base_class_offset(lv, (S20846C4*)(S20846C2*)(S20846C6*)(S20846C13*), ABISELECT(63400,46940), "S20846C1");
    check_base_class_offset(lv, (S20846C2*)(S20846C6*)(S20846C13*), ABISELECT(63400,46940), "S20846C1");
    check_base_class_offset(lv, (S20846C6*)(S20846C13*), ABISELECT(63400,46940), "S20846C1");
    check_base_class_offset(lv, (S3052C12*)(S20846C13*), ABISELECT(63712,47168), "S20846C1");
    check_base_class_offset(lv, (S20846C13*)(S20846C10*), ABISELECT(63296,46880), "S20846C1");
    check_base_class_offset(lv, (S20846C10*), ABISELECT(52400,38836), "S20846C1");
    check_field_offset(lv, s20846c1f0, ABISELECT(8,4), "S20846C1.s20846c1f0");
    check_field_offset(lv, s20846c1f1, ABISELECT(44,40), "S20846C1.s20846c1f1");
    check_field_offset(lv, s20846c1f2, ABISELECT(48,44), "S20846C1.s20846c1f2");
    check_field_offset(lv, s20846c1f4, ABISELECT(50880,37740), "S20846C1.s20846c1f4");
    check_field_offset(lv, s20846c1f5, ABISELECT(50888,37748), "S20846C1.s20846c1f5");
    set_bf_and_test(lv, s20846c1f6, ABISELECT(50892,37752), 0, 13, 1, "S20846C1");
    set_bf_and_test(lv, s20846c1f6, ABISELECT(50892,37752), 0, 13, hide_sll(1LL<<12), "S20846C1");
    check_field_offset(lv, s20846c1f7, ABISELECT(50896,37756), "S20846C1.s20846c1f7");
    check_field_offset(lv, s20846c1f8, ABISELECT(50912,37768), "S20846C1.s20846c1f8");
    test_class_info(&lv, &cd_S20846C1);
    dp->~S20846C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20846C1(Test_S20846C1, "S20846C1", ABISELECT(64832,48008));

#else // __cplusplus

extern void _ZN8S20846C1C1Ev();
extern void _ZN8S20846C1D1Ev();
Name_Map name_map_S20846C1[] = {
  NSPAIR(_ZN8S20846C1C1Ev),
  NSPAIR(_ZN8S20846C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20846C3;
extern VTBL_ENTRY _ZTI8S20846C3[];
extern  VTBL_ENTRY _ZTV8S20846C3[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C6;
extern VTBL_ENTRY _ZTI8S20846C6[];
extern  VTBL_ENTRY _ZTV8S20846C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C6[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C6;
extern VTBL_ENTRY _ZTI8S20846C6[];
extern  VTBL_ENTRY _ZTV8S20846C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C6[];
extern Class_Descriptor cd_S20846C7;
extern VTBL_ENTRY _ZTI8S20846C7[];
extern  VTBL_ENTRY _ZTV8S20846C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C7[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S20846C5;
extern VTBL_ENTRY _ZTI8S20846C5[];
extern  VTBL_ENTRY _ZTV8S20846C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C5[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C6;
extern VTBL_ENTRY _ZTI8S20846C6[];
extern  VTBL_ENTRY _ZTV8S20846C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C6[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S20846C11;
extern VTBL_ENTRY _ZTI9S20846C11[];
extern  VTBL_ENTRY _ZTV9S20846C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C11[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C4;
extern VTBL_ENTRY _ZTI8S20846C4[];
extern  VTBL_ENTRY _ZTV8S20846C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C4[];
extern Class_Descriptor cd_S20846C2;
extern VTBL_ENTRY _ZTI8S20846C2[];
extern  VTBL_ENTRY _ZTV8S20846C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C2[];
extern Class_Descriptor cd_S20846C6;
extern VTBL_ENTRY _ZTI8S20846C6[];
extern  VTBL_ENTRY _ZTV8S20846C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C6[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S20846C13;
extern VTBL_ENTRY _ZTI9S20846C13[];
extern  VTBL_ENTRY _ZTV9S20846C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C13[];
extern Class_Descriptor cd_S20846C10;
extern VTBL_ENTRY _ZTI9S20846C10[];
extern  VTBL_ENTRY _ZTV9S20846C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20846C10[];
static Base_Class bases_S20846C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20846C3,    ABISELECT(51024,37832), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //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_S20846C4,    ABISELECT(50920,37772), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(50920,37772), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20846C4,    ABISELECT(51120,37916), //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
    10, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(51120,37916), //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
    5, //immediately_derived
  0, 0},
  {&cd_S20846C6,    ABISELECT(51120,37916), //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
    12, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20846C4,    ABISELECT(51784,38408), //bcp->offset
    47, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20846C4,    ABISELECT(51816,38432), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(51816,38432), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20846C6,    ABISELECT(51816,38432), //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
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20846C7,    ABISELECT(51816,38432), //bcp->offset
    53, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S3052C12,    ABISELECT(52184,38688), //bcp->offset
    65, //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
    9, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20846C5,    ABISELECT(51120,37916), //bcp->offset
    31, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20846C4,    ABISELECT(52400,38836), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(52400,38836), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20846C6,    ABISELECT(52400,38836), //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
    23, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S3052C10,    ABISELECT(52728,39068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20846C11,    ABISELECT(52720,39064), //bcp->offset
    84, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S20846C4,    ABISELECT(63296,46880), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(63296,46880), //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
    15, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20846C4,    ABISELECT(63400,46940), //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
    16, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20846C2,    ABISELECT(63400,46940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20846C6,    ABISELECT(63400,46940), //bcp->offset
    101, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S3052C12,    ABISELECT(63712,47168), //bcp->offset
    108, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20846C13,    ABISELECT(63296,46880), //bcp->offset
    90, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S20846C10,    ABISELECT(52400,38836), //bcp->offset
    70, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20846C1[];
extern void _ZN8S20846C12v1Ev();
extern void _ZN8S20846C12v2Ev();
extern void _ZN8S20846C1D1Ev();
extern void _ZN8S20846C1D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S20846C1D1Ev,_ZTv0_n16_N8S20846C1D1Ev)();
extern void ABISELECT(_ZThn50920_N8S20846C1D1Ev,_ZThn37772_N8S20846C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20846C1D0Ev,_ZTv0_n16_N8S20846C1D0Ev)();
extern void ABISELECT(_ZThn50920_N8S20846C1D0Ev,_ZThn37772_N8S20846C1D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S20846C1D1Ev,_ZTv0_n12_N8S20846C1D1Ev)();
extern void ABISELECT(_ZThn51024_N8S20846C1D1Ev,_ZThn37832_N8S20846C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C1D0Ev,_ZTv0_n12_N8S20846C1D0Ev)();
extern void ABISELECT(_ZThn51024_N8S20846C1D0Ev,_ZThn37832_N8S20846C1D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S20846C1D1Ev,_ZTv0_n32_N8S20846C1D1Ev)();
extern void ABISELECT(_ZThn51120_N8S20846C1D1Ev,_ZThn37916_N8S20846C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20846C1D0Ev,_ZTv0_n32_N8S20846C1D0Ev)();
extern void ABISELECT(_ZThn51120_N8S20846C1D0Ev,_ZThn37916_N8S20846C1D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void _ZN8S20846C52v6Ev();
extern void ABISELECT(_ZTv0_n32_N8S20846C1D1Ev,_ZTv0_n16_N8S20846C1D1Ev)();
extern void ABISELECT(_ZThn51784_N8S20846C1D1Ev,_ZThn38408_N8S20846C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20846C1D0Ev,_ZTv0_n16_N8S20846C1D0Ev)();
extern void ABISELECT(_ZThn51784_N8S20846C1D0Ev,_ZThn38408_N8S20846C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20846C1D1Ev,_ZTv0_n24_N8S20846C1D1Ev)();
extern void ABISELECT(_ZThn51816_N8S20846C1D1Ev,_ZThn38432_N8S20846C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20846C1D0Ev,_ZTv0_n24_N8S20846C1D0Ev)();
extern void ABISELECT(_ZThn51816_N8S20846C1D0Ev,_ZThn38432_N8S20846C1D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S20846C1D1Ev,_ZTv0_n12_N8S20846C1D1Ev)();
extern void ABISELECT(_ZThn52184_N8S20846C1D1Ev,_ZThn38688_N8S20846C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C1D0Ev,_ZTv0_n12_N8S20846C1D0Ev)();
extern void ABISELECT(_ZThn52184_N8S20846C1D0Ev,_ZThn38688_N8S20846C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20846C1D1Ev,_ZTv0_n32_N8S20846C1D1Ev)();
extern void ABISELECT(_ZThn52400_N8S20846C1D1Ev,_ZThn38836_N8S20846C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20846C1D0Ev,_ZTv0_n32_N8S20846C1D0Ev)();
extern void ABISELECT(_ZThn52400_N8S20846C1D0Ev,_ZThn38836_N8S20846C1D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTvn320_n64_N8S20846C1D1Ev,_ZTvn228_n32_N8S20846C1D1Ev)();
extern void ABISELECT(_ZTvn320_n64_N8S20846C1D0Ev,_ZTvn228_n32_N8S20846C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20846C1D1Ev,_ZTv0_n20_N8S20846C1D1Ev)();
extern void ABISELECT(_ZThn63296_N8S20846C1D1Ev,_ZThn46880_N8S20846C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20846C1D0Ev,_ZTv0_n20_N8S20846C1D0Ev)();
extern void ABISELECT(_ZThn63296_N8S20846C1D0Ev,_ZThn46880_N8S20846C1D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTvn104_n40_N8S20846C1D1Ev,_ZTvn60_n20_N8S20846C1D1Ev)();
extern void ABISELECT(_ZTvn104_n40_N8S20846C1D0Ev,_ZTvn60_n20_N8S20846C1D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void ABISELECT(_ZTvn416_n40_N8S20846C1D1Ev,_ZTvn288_n20_N8S20846C1D1Ev)();
extern void ABISELECT(_ZTvn416_n40_N8S20846C1D0Ev,_ZTvn288_n20_N8S20846C1D0Ev)();
static  VTBL_ENTRY vtc_S20846C1[] = {
  ABISELECT(63296,46880),
  ABISELECT(52400,38836),
  ABISELECT(52184,38688),
  ABISELECT(51816,38432),
  ABISELECT(51784,38408),
  ABISELECT(51120,37916),
  ABISELECT(51024,37832),
  ABISELECT(50920,37772),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C1[0]),
  (VTBL_ENTRY)&_ZN8S20846C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20846C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20846C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C1D0Ev,
  0,
  0,
  ABISELECT(-50920,-37772),
  ABISELECT(104,60),
  ABISELECT(-50920,-37772),
  (VTBL_ENTRY)&(_ZTI8S20846C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C1D1Ev,_ZTv0_n16_N8S20846C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C1D0Ev,_ZTv0_n16_N8S20846C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  0,
  ABISELECT(-51024,-37832),
  ABISELECT(-51024,-37832),
  (VTBL_ENTRY)&(_ZTI8S20846C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C1D1Ev,_ZTv0_n12_N8S20846C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C1D0Ev,_ZTv0_n12_N8S20846C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
  0,
  0,
  0,
  ABISELECT(-51120,-37916),
  ABISELECT(1064,772),
  ABISELECT(696,516),
  ABISELECT(664,492),
  ABISELECT(-200,-144),
  ABISELECT(-96,-84),
  ABISELECT(-51120,-37916),
  (VTBL_ENTRY)&(_ZTI8S20846C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20846C1D1Ev,_ZTv0_n32_N8S20846C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20846C1D0Ev,_ZTv0_n32_N8S20846C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20846C52v6Ev,
  ABISELECT(-51784,-38408),
  ABISELECT(-760,-576),
  ABISELECT(-51784,-38408),
  (VTBL_ENTRY)&(_ZTI8S20846C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C1D1Ev,_ZTv0_n16_N8S20846C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C1D0Ev,_ZTv0_n16_N8S20846C1D0Ev),
  0,
  0,
  ABISELECT(-51816,-38432),
  ABISELECT(-896,-660),
  ABISELECT(-32,-24),
  ABISELECT(-792,-600),
  ABISELECT(-51816,-38432),
  (VTBL_ENTRY)&(_ZTI8S20846C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20846C1D1Ev,_ZTv0_n24_N8S20846C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20846C1D0Ev,_ZTv0_n24_N8S20846C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  ABISELECT(-52184,-38688),
  ABISELECT(-52184,-38688),
  (VTBL_ENTRY)&(_ZTI8S20846C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C1D1Ev,_ZTv0_n12_N8S20846C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C1D0Ev,_ZTv0_n12_N8S20846C1D0Ev),
  0,
  0,
  ABISELECT(-52400,-38836),
  ABISELECT(-216,-148),
  ABISELECT(-616,-428),
  ABISELECT(10896,8044),
  ABISELECT(-1480,-1064),
  ABISELECT(-1376,-1004),
  ABISELECT(-52400,-38836),
  (VTBL_ENTRY)&(_ZTI8S20846C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20846C1D1Ev,_ZTv0_n32_N8S20846C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20846C1D0Ev,_ZTv0_n32_N8S20846C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  ABISELECT(-1696,-1232),
  ABISELECT(-1800,-1292),
  ABISELECT(-52720,-39064),
  (VTBL_ENTRY)&(_ZTI8S20846C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn320_n64_N8S20846C1D1Ev,_ZTvn228_n32_N8S20846C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn320_n64_N8S20846C1D0Ev,_ZTvn228_n32_N8S20846C1D0Ev),
  0,
  0,
  ABISELECT(-63296,-46880),
  ABISELECT(-11512,-8472),
  ABISELECT(-12272,-9048),
  ABISELECT(-63296,-46880),
  (VTBL_ENTRY)&(_ZTI8S20846C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20846C1D1Ev,_ZTv0_n20_N8S20846C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20846C1D0Ev,_ZTv0_n20_N8S20846C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  ABISELECT(-12376,-9108),
  ABISELECT(-63400,-46940),
  (VTBL_ENTRY)&(_ZTI8S20846C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N8S20846C1D1Ev,_ZTvn60_n20_N8S20846C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N8S20846C1D0Ev,_ZTvn60_n20_N8S20846C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  ABISELECT(-63712,-47168),
  (VTBL_ENTRY)&(_ZTI8S20846C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N8S20846C1D1Ev,_ZTvn288_n20_N8S20846C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N8S20846C1D0Ev,_ZTvn288_n20_N8S20846C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20846C1[];
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__8S20846C1[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C2__8S20846C1[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZThn104_N8S20846C4D1Ev,_ZThn60_N8S20846C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void ABISELECT(_ZThn104_N8S20846C4D0Ev,_ZThn60_N8S20846C4D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C2__8S20846C1[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZThn104_N8S20846C2D1Ev,_ZThn60_N8S20846C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void ABISELECT(_ZThn104_N8S20846C2D0Ev,_ZThn60_N8S20846C2D0Ev)() __attribute__((weak));
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C2__8S20846C1[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN8S20846C5D1Ev();
extern void _ZN8S20846C5D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
extern void _ZN8S20846C52v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C5__8S20846C1[] = {
  ABISELECT(1064,772),
  ABISELECT(696,516),
  ABISELECT(664,492),
  ABISELECT(-200,-144),
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C5[0]),
  (VTBL_ENTRY)&_ZN8S20846C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20846C52v6Ev,
};
extern void _ZN8S20846C6D1Ev();
extern void _ZN8S20846C6D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C68S20846C5__8S20846C1[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&_ZN8S20846C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C28S20846C68S20846C5__A1__8S20846C1[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C28S20846C68S20846C5__A1__8S20846C1[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C28S20846C68S20846C5__A1__8S20846C1[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C28S20846C68S20846C5__A1__8S20846C1[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C68S20846C5__8S20846C1[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C5D1Ev,_ZTv0_n12_N8S20846C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C5D0Ev,_ZTv0_n12_N8S20846C5D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C5__8S20846C1[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S20846C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C5D1Ev,_ZTv0_n12_N8S20846C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C5D0Ev,_ZTv0_n12_N8S20846C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20846C5D1Ev,_ZTv0_n16_N8S20846C5D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S20846C5D0Ev,_ZTv0_n16_N8S20846C5D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__A1__8S20846C5__8S20846C1[] = {
  0,
  0,
  ABISELECT(200,144),
  ABISELECT(104,60),
  ABISELECT(200,144),
  (VTBL_ENTRY)&(_ZTI8S20846C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C5D1Ev,_ZTv0_n16_N8S20846C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C5D0Ev,_ZTv0_n16_N8S20846C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20846C5D1Ev,_ZTv0_n16_N8S20846C5D1Ev)();
extern void ABISELECT(_ZThn664_N8S20846C5D1Ev,_ZThn492_N8S20846C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20846C5D0Ev,_ZTv0_n16_N8S20846C5D0Ev)();
extern void ABISELECT(_ZThn664_N8S20846C5D0Ev,_ZThn492_N8S20846C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20846C4__A2__8S20846C5__8S20846C1[] = {
  ABISELECT(-664,-492),
  ABISELECT(-760,-576),
  ABISELECT(-664,-492),
  (VTBL_ENTRY)&(_ZTI8S20846C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C5D1Ev,_ZTv0_n16_N8S20846C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C5D0Ev,_ZTv0_n16_N8S20846C5D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20846C5D1Ev,_ZTv0_n24_N8S20846C5D1Ev)();
extern void ABISELECT(_ZThn696_N8S20846C5D1Ev,_ZThn516_N8S20846C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20846C5D0Ev,_ZTv0_n24_N8S20846C5D0Ev)();
extern void ABISELECT(_ZThn696_N8S20846C5D0Ev,_ZThn516_N8S20846C5D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C7__8S20846C5__8S20846C1[] = {
  0,
  0,
  ABISELECT(-696,-516),
  ABISELECT(-896,-660),
  ABISELECT(-32,-24),
  ABISELECT(-792,-600),
  ABISELECT(-696,-516),
  (VTBL_ENTRY)&(_ZTI8S20846C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20846C5D1Ev,_ZTv0_n24_N8S20846C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20846C5D0Ev,_ZTv0_n24_N8S20846C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C5D1Ev,_ZTv0_n12_N8S20846C5D1Ev)();
extern void ABISELECT(_ZThn1064_N8S20846C5D1Ev,_ZThn772_N8S20846C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20846C5D0Ev,_ZTv0_n12_N8S20846C5D0Ev)();
extern void ABISELECT(_ZThn1064_N8S20846C5D0Ev,_ZThn772_N8S20846C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3052C12__8S20846C5__8S20846C1[] = {
  ABISELECT(-1064,-772),
  ABISELECT(-1064,-772),
  (VTBL_ENTRY)&(_ZTI8S20846C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C5D1Ev,_ZTv0_n12_N8S20846C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C5D0Ev,_ZTv0_n12_N8S20846C5D0Ev),
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C4__A2__8S20846C1[] = {
  ABISELECT(-760,-576),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C4__A2__8S20846C1[] = {
  0,
  ABISELECT(760,576),
  ABISELECT(760,576),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN8S20846C7D1Ev();
extern void _ZN8S20846C7D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C7__8S20846C1[] = {
  ABISELECT(-896,-660),
  ABISELECT(-32,-24),
  ABISELECT(-792,-600),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C7[0]),
  (VTBL_ENTRY)&_ZN8S20846C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C6D1Ev();
extern void _ZN8S20846C6D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C68S20846C7__A1__8S20846C1[] = {
  ABISELECT(-792,-600),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&_ZN8S20846C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C28S20846C68S20846C7__A2__8S20846C1[] = {
  ABISELECT(-792,-600),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C28S20846C68S20846C7__A3__8S20846C1[] = {
  ABISELECT(-792,-600),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C28S20846C68S20846C7__A3__8S20846C1[] = {
  0,
  ABISELECT(792,600),
  ABISELECT(792,600),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C28S20846C68S20846C7__A2__8S20846C1[] = {
  0,
  ABISELECT(792,600),
  ABISELECT(792,600),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C68S20846C7__A1__8S20846C1[] = {
  0,
  ABISELECT(792,600),
  ABISELECT(792,600),
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C7D1Ev,_ZTv0_n12_N8S20846C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C7D0Ev,_ZTv0_n12_N8S20846C7D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C7__8S20846C1[] = {
  0,
  ABISELECT(792,600),
  ABISELECT(792,600),
  (VTBL_ENTRY)&(_ZTI8S20846C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C7D1Ev,_ZTv0_n12_N8S20846C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C7D0Ev,_ZTv0_n12_N8S20846C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20846C4__A1__8S20846C7__8S20846C1[] = {
  ABISELECT(32,24),
  ABISELECT(-760,-576),
  ABISELECT(32,24),
  (VTBL_ENTRY)&(_ZTI8S20846C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__A1__8S20846C7__8S20846C1[] = {
  0,
  0,
  ABISELECT(896,660),
  ABISELECT(104,60),
  ABISELECT(896,660),
  (VTBL_ENTRY)&(_ZTI8S20846C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C7D1Ev,_ZTv0_n16_N8S20846C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20846C7D0Ev,_ZTv0_n16_N8S20846C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN9S20846C10D1Ev();
extern void _ZN9S20846C10D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C10__8S20846C1[] = {
  ABISELECT(-216,-148),
  ABISELECT(-616,-428),
  ABISELECT(10896,8044),
  ABISELECT(-1480,-1064),
  ABISELECT(-1376,-1004),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&_ZN9S20846C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C10D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C6D1Ev();
extern void _ZN8S20846C6D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C69S20846C10__A2__8S20846C1[] = {
  ABISELECT(-1376,-1004),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&_ZN8S20846C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C28S20846C69S20846C10__A3__8S20846C1[] = {
  ABISELECT(-1376,-1004),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C28S20846C69S20846C10__A4__8S20846C1[] = {
  ABISELECT(-1376,-1004),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C28S20846C69S20846C10__A4__8S20846C1[] = {
  0,
  ABISELECT(1376,1004),
  ABISELECT(1376,1004),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C28S20846C69S20846C10__A3__8S20846C1[] = {
  0,
  ABISELECT(1376,1004),
  ABISELECT(1376,1004),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C69S20846C10__A2__8S20846C1[] = {
  0,
  ABISELECT(1376,1004),
  ABISELECT(1376,1004),
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN9S20846C11D1Ev();
extern void _ZN9S20846C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C119S20846C10__8S20846C1[] = {
  ABISELECT(-1696,-1232),
  ABISELECT(-1800,-1292),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&_ZN9S20846C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C11D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C11D1Ev,_ZTv0_n16_N9S20846C11D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20846C11D0Ev,_ZTv0_n16_N9S20846C11D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__9S20846C119S20846C10__8S20846C1[] = {
  0,
  0,
  ABISELECT(1800,1292),
  ABISELECT(104,60),
  ABISELECT(1800,1292),
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C11D1Ev,_ZTv0_n16_N9S20846C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C11D0Ev,_ZTv0_n16_N9S20846C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C11D1Ev,_ZTv0_n12_N9S20846C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20846C11D0Ev,_ZTv0_n12_N9S20846C11D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C119S20846C10__8S20846C1[] = {
  0,
  ABISELECT(1696,1232),
  ABISELECT(1696,1232),
  (VTBL_ENTRY)&(_ZTI9S20846C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C11D1Ev,_ZTv0_n12_N9S20846C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C11D0Ev,_ZTv0_n12_N9S20846C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C10D1Ev,_ZTv0_n12_N9S20846C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20846C10D0Ev,_ZTv0_n12_N9S20846C10D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C10__8S20846C1[] = {
  0,
  ABISELECT(1376,1004),
  ABISELECT(1376,1004),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C10D1Ev,_ZTv0_n12_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C10D0Ev,_ZTv0_n12_N9S20846C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C10D1Ev,_ZTv0_n16_N9S20846C10D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20846C10D0Ev,_ZTv0_n16_N9S20846C10D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C2__A1__9S20846C10__8S20846C1[] = {
  0,
  0,
  ABISELECT(1480,1064),
  ABISELECT(104,60),
  ABISELECT(1480,1064),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C10D1Ev,_ZTv0_n16_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C10D0Ev,_ZTv0_n16_N9S20846C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZThn320_N9S20846C10D1Ev,_ZThn228_N9S20846C10D1Ev)();
extern void ABISELECT(_ZThn320_N9S20846C10D0Ev,_ZThn228_N9S20846C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20846C11__9S20846C10__8S20846C1[] = {
  ABISELECT(-1696,-1232),
  ABISELECT(-1800,-1292),
  ABISELECT(-320,-228),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N9S20846C10D1Ev,_ZThn228_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N9S20846C10D0Ev,_ZThn228_N9S20846C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20846C10D1Ev,_ZTv0_n20_N9S20846C10D1Ev)();
extern void ABISELECT(_ZThn10896_N9S20846C10D1Ev,_ZThn8044_N9S20846C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20846C10D0Ev,_ZTv0_n20_N9S20846C10D0Ev)();
extern void ABISELECT(_ZThn10896_N9S20846C10D0Ev,_ZThn8044_N9S20846C10D0Ev)() __attribute__((weak));
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C13__9S20846C10__8S20846C1[] = {
  0,
  0,
  ABISELECT(-10896,-8044),
  ABISELECT(-11512,-8472),
  ABISELECT(-12272,-9048),
  ABISELECT(-10896,-8044),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C10D1Ev,_ZTv0_n20_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20846C10D0Ev,_ZTv0_n20_N9S20846C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTvn104_n40_N9S20846C10D1Ev,_ZTvn60_n20_N9S20846C10D1Ev)();
extern void ABISELECT(_ZTvn104_n40_N9S20846C10D0Ev,_ZTvn60_n20_N9S20846C10D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C69S20846C13__A1__9S20846C10__8S20846C1[] = {
  ABISELECT(-12376,-9108),
  ABISELECT(-11000,-8104),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N9S20846C10D1Ev,_ZTvn60_n20_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N9S20846C10D0Ev,_ZTvn60_n20_N9S20846C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTvn416_n40_N9S20846C10D1Ev,_ZTvn288_n20_N9S20846C10D1Ev)();
extern void ABISELECT(_ZTvn416_n40_N9S20846C10D0Ev,_ZTvn288_n20_N9S20846C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3052C129S20846C13__9S20846C10__8S20846C1[] = {
  ABISELECT(-11312,-8332),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N9S20846C10D1Ev,_ZTvn288_n20_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N9S20846C10D0Ev,_ZTvn288_n20_N9S20846C10D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20846C10D1Ev,_ZTv0_n16_N9S20846C10D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20846C10D0Ev,_ZTv0_n16_N9S20846C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20846C4__A4__9S20846C10__8S20846C1[] = {
  ABISELECT(616,428),
  ABISELECT(-760,-576),
  ABISELECT(616,428),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C10D1Ev,_ZTv0_n16_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C10D0Ev,_ZTv0_n16_N9S20846C10D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20846C10D1Ev,_ZTv0_n12_N9S20846C10D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20846C10D0Ev,_ZTv0_n12_N9S20846C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3052C12__A1__9S20846C10__8S20846C1[] = {
  ABISELECT(216,148),
  ABISELECT(216,148),
  (VTBL_ENTRY)&(_ZTI9S20846C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C10D1Ev,_ZTv0_n12_N9S20846C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C10D0Ev,_ZTv0_n12_N9S20846C10D0Ev),
};
extern void _ZN9S20846C13D1Ev();
extern void _ZN9S20846C13D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV9S20846C13__8S20846C1[] = {
  ABISELECT(-11512,-8472),
  ABISELECT(-12272,-9048),
  0,
  (VTBL_ENTRY)&(_ZTI9S20846C13[0]),
  (VTBL_ENTRY)&_ZN9S20846C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20846C13D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C29S20846C13__A4__8S20846C1[] = {
  ABISELECT(-12272,-9048),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C29S20846C13__A5__8S20846C1[] = {
  ABISELECT(-12272,-9048),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C29S20846C13__A5__8S20846C1[] = {
  0,
  ABISELECT(12272,9048),
  ABISELECT(12272,9048),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C29S20846C13__A4__8S20846C1[] = {
  0,
  ABISELECT(12272,9048),
  ABISELECT(12272,9048),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void _ZN8S20846C6D1Ev();
extern void _ZN8S20846C6D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C69S20846C13__A3__8S20846C1[] = {
  ABISELECT(-12376,-9108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&_ZN8S20846C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C2D1Ev();
extern void _ZN8S20846C2D0Ev();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C28S20846C69S20846C13__A5__8S20846C1[] = {
  ABISELECT(-12376,-9108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&_ZN8S20846C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void _ZN8S20846C4D1Ev();
extern void _ZN8S20846C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C48S20846C28S20846C69S20846C13__A6__8S20846C1[] = {
  ABISELECT(-12376,-9108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&_ZN8S20846C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20846C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C48S20846C28S20846C69S20846C13__A6__8S20846C1[] = {
  0,
  ABISELECT(12376,9108),
  ABISELECT(12376,9108),
  (VTBL_ENTRY)&(_ZTI8S20846C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C28S20846C69S20846C13__A5__8S20846C1[] = {
  0,
  ABISELECT(12376,9108),
  ABISELECT(12376,9108),
  (VTBL_ENTRY)&(_ZTI8S20846C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__8S20846C69S20846C13__A3__8S20846C1[] = {
  0,
  ABISELECT(12376,9108),
  ABISELECT(12376,9108),
  (VTBL_ENTRY)&(_ZTI8S20846C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D1Ev,_ZTv0_n12_N8S20846C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20846C6D0Ev,_ZTv0_n12_N8S20846C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20846C13D1Ev,_ZTv0_n12_N9S20846C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20846C13D0Ev,_ZTv0_n12_N9S20846C13D0Ev)();
extern void _ZN8S20846C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C3__9S20846C13__8S20846C1[] = {
  0,
  ABISELECT(12272,9048),
  ABISELECT(12272,9048),
  (VTBL_ENTRY)&(_ZTI9S20846C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C13D1Ev,_ZTv0_n12_N9S20846C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20846C13D0Ev,_ZTv0_n12_N9S20846C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C32v3Ev,
};
extern void ABISELECT(_ZThn104_N9S20846C13D1Ev,_ZThn60_N9S20846C13D1Ev)();
extern void ABISELECT(_ZThn104_N9S20846C13D0Ev,_ZThn60_N9S20846C13D0Ev)();
extern void _ZN8S20846C22v4Ev();
extern void _ZN8S20846C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20846C6__9S20846C13__8S20846C1[] = {
  ABISELECT(-12376,-9108),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI9S20846C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S20846C13D1Ev,_ZThn60_N9S20846C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S20846C13D0Ev,_ZThn60_N9S20846C13D0Ev),
  (VTBL_ENTRY)&_ZN8S20846C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20846C22v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20846C13D1Ev,_ZTv0_n16_N9S20846C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20846C13D0Ev,_ZTv0_n16_N9S20846C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20846C4__A2__9S20846C13__8S20846C1[] = {
  ABISELECT(11512,8472),
  ABISELECT(-760,-576),
  ABISELECT(11512,8472),
  (VTBL_ENTRY)&(_ZTI9S20846C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C13D1Ev,_ZTv0_n16_N9S20846C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20846C13D0Ev,_ZTv0_n16_N9S20846C13D0Ev),
};
static  VTT_ENTRY vtt_S20846C1[] = {
  {&(_ZTV8S20846C1[10]),  10,112},
  {&(_ZTV8S20846C1[20]),  20,112},
  {&(_ZTV8S20846C1[28]),  28,112},
  {&(_ZTV8S20846C1[42]),  42,112},
  {&(_ZTV8S20846C1[51]),  51,112},
  {&(_ZTV8S20846C1[61]),  61,112},
  {&(_ZTV8S20846C1[68]),  68,112},
  {&(_ZTV8S20846C1[80]),  80,112},
  {&(_ZTV8S20846C1[88]),  88,112},
  {&(_ZTV8S20846C1[97]),  97,112},
  {&(_ZTV8S20846C1[104]),  104,112},
  {&(_ZTV8S20846C1[110]),  110,112},
  {&(_tg__ZTV8S20846C2__8S20846C1[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C2__8S20846C1[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C2__8S20846C1[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C2__8S20846C1[4]),  4,7},
  {&(_tg__ZTV8S20846C5__8S20846C1[7]),  7,12},
  {&(_tg__ZTV8S20846C68S20846C5__8S20846C1[3]),  3,7},
  {&(_tg__ZTV8S20846C28S20846C68S20846C5__A1__8S20846C1[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C28S20846C68S20846C5__A1__8S20846C1[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C28S20846C68S20846C5__A1__8S20846C1[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C28S20846C68S20846C5__A1__8S20846C1[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C68S20846C5__8S20846C1[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C5__8S20846C1[4]),  4,7},
  {&(_tg__ZTV8S20846C2__A1__8S20846C5__8S20846C1[6]),  6,10},
  {&(_tg__ZTV8S20846C4__A2__8S20846C5__8S20846C1[4]),  4,6},
  {&(_tg__ZTV8S20846C7__8S20846C5__8S20846C1[8]),  8,12},
  {&(_tg__ZTV8S3052C12__8S20846C5__8S20846C1[3]),  3,5},
  {&(_tg__ZTV8S20846C4__A2__8S20846C1[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C4__A2__8S20846C1[4]),  4,7},
  {&(_tg__ZTV8S20846C7__8S20846C1[5]),  5,9},
  {&(_tg__ZTV8S20846C68S20846C7__A1__8S20846C1[3]),  3,7},
  {&(_tg__ZTV8S20846C28S20846C68S20846C7__A2__8S20846C1[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C28S20846C68S20846C7__A3__8S20846C1[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C28S20846C68S20846C7__A3__8S20846C1[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C28S20846C68S20846C7__A2__8S20846C1[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C68S20846C7__A1__8S20846C1[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C7__8S20846C1[4]),  4,7},
  {&(_tg__ZTV8S20846C4__A1__8S20846C7__8S20846C1[4]),  4,6},
  {&(_tg__ZTV8S20846C2__A1__8S20846C7__8S20846C1[6]),  6,10},
  {&(_tg__ZTV9S20846C10__8S20846C1[7]),  7,11},
  {&(_tg__ZTV8S20846C69S20846C10__A2__8S20846C1[3]),  3,7},
  {&(_tg__ZTV8S20846C28S20846C69S20846C10__A3__8S20846C1[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C28S20846C69S20846C10__A4__8S20846C1[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C28S20846C69S20846C10__A4__8S20846C1[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C28S20846C69S20846C10__A3__8S20846C1[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C69S20846C10__A2__8S20846C1[4]),  4,7},
  {&(_tg__ZTV9S20846C119S20846C10__8S20846C1[4]),  4,6},
  {&(_tg__ZTV8S20846C2__9S20846C119S20846C10__8S20846C1[6]),  6,10},
  {&(_tg__ZTV8S20846C3__9S20846C119S20846C10__8S20846C1[4]),  4,7},
  {&(_tg__ZTV8S20846C3__9S20846C10__8S20846C1[4]),  4,7},
  {&(_tg__ZTV8S20846C2__A1__9S20846C10__8S20846C1[6]),  6,10},
  {&(_tg__ZTV9S20846C11__9S20846C10__8S20846C1[4]),  4,6},
  {&(_tg__ZTV9S20846C13__9S20846C10__8S20846C1[7]),  7,11},
  {&(_tg__ZTV8S20846C69S20846C13__A1__9S20846C10__8S20846C1[3]),  3,7},
  {&(_tg__ZTV8S3052C129S20846C13__9S20846C10__8S20846C1[2]),  2,4},
  {&(_tg__ZTV8S20846C4__A4__9S20846C10__8S20846C1[4]),  4,6},
  {&(_tg__ZTV8S3052C12__A1__9S20846C10__8S20846C1[3]),  3,5},
  {&(_tg__ZTV9S20846C13__8S20846C1[4]),  4,8},
  {&(_tg__ZTV8S20846C29S20846C13__A4__8S20846C1[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C29S20846C13__A5__8S20846C1[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C29S20846C13__A5__8S20846C1[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C29S20846C13__A4__8S20846C1[4]),  4,7},
  {&(_tg__ZTV8S20846C69S20846C13__A3__8S20846C1[3]),  3,7},
  {&(_tg__ZTV8S20846C28S20846C69S20846C13__A5__8S20846C1[3]),  3,7},
  {&(_tg__ZTV8S20846C48S20846C28S20846C69S20846C13__A6__8S20846C1[3]),  3,5},
  {&(_tg__ZTV8S20846C3__8S20846C48S20846C28S20846C69S20846C13__A6__8S20846C1[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C28S20846C69S20846C13__A5__8S20846C1[4]),  4,7},
  {&(_tg__ZTV8S20846C3__8S20846C69S20846C13__A3__8S20846C1[4]),  4,7},
  {&(_tg__ZTV8S20846C3__9S20846C13__8S20846C1[4]),  4,7},
  {&(_tg__ZTV8S20846C6__9S20846C13__8S20846C1[3]),  3,7},
  {&(_tg__ZTV8S20846C4__A2__9S20846C13__8S20846C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20846C1[];
extern  VTBL_ENTRY _ZTV8S20846C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20846C1[];
static VTBL_ENTRY alt_thunk_names32[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C10D0Ev,_ZTv0_n20_N9S20846C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10896_N9S20846C10D0Ev,_ZThn8044_N9S20846C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20846C10D1Ev,_ZTv0_n20_N9S20846C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10896_N9S20846C10D1Ev,_ZThn8044_N9S20846C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C5D0Ev,_ZTv0_n12_N8S20846C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1064_N8S20846C5D0Ev,_ZThn772_N8S20846C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C5D1Ev,_ZTv0_n12_N8S20846C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1064_N8S20846C5D1Ev,_ZThn772_N8S20846C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20846C5D0Ev,_ZTv0_n24_N8S20846C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn696_N8S20846C5D0Ev,_ZThn516_N8S20846C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20846C5D1Ev,_ZTv0_n24_N8S20846C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn696_N8S20846C5D1Ev,_ZThn516_N8S20846C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20846C5D0Ev,_ZTv0_n16_N8S20846C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N8S20846C5D0Ev,_ZThn492_N8S20846C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20846C5D1Ev,_ZTv0_n16_N8S20846C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N8S20846C5D1Ev,_ZThn492_N8S20846C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D0Ev,_ZTv0_n12_N8S20846C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20846C2D0Ev,_ZThn60_N8S20846C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C2D1Ev,_ZTv0_n12_N8S20846C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20846C2D1Ev,_ZThn60_N8S20846C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D0Ev,_ZTv0_n12_N8S20846C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20846C4D0Ev,_ZThn60_N8S20846C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C4D1Ev,_ZTv0_n12_N8S20846C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20846C4D1Ev,_ZThn60_N8S20846C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20846C1D0Ev,_ZTv0_n20_N8S20846C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn63296_N8S20846C1D0Ev,_ZThn46880_N8S20846C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20846C1D1Ev,_ZTv0_n20_N8S20846C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn63296_N8S20846C1D1Ev,_ZThn46880_N8S20846C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20846C1D0Ev,_ZTv0_n24_N8S20846C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn51816_N8S20846C1D0Ev,_ZThn38432_N8S20846C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20846C1D1Ev,_ZTv0_n24_N8S20846C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn51816_N8S20846C1D1Ev,_ZThn38432_N8S20846C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20846C1D0Ev,_ZTv0_n32_N8S20846C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52400_N8S20846C1D0Ev,_ZThn38836_N8S20846C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn51120_N8S20846C1D0Ev,_ZThn37916_N8S20846C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20846C1D1Ev,_ZTv0_n32_N8S20846C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52400_N8S20846C1D1Ev,_ZThn38836_N8S20846C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn51120_N8S20846C1D1Ev,_ZThn37916_N8S20846C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C1D0Ev,_ZTv0_n12_N8S20846C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52184_N8S20846C1D0Ev,_ZThn38688_N8S20846C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn51024_N8S20846C1D0Ev,_ZThn37832_N8S20846C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20846C1D1Ev,_ZTv0_n12_N8S20846C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn52184_N8S20846C1D1Ev,_ZThn38688_N8S20846C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn51024_N8S20846C1D1Ev,_ZThn37832_N8S20846C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20846C1D0Ev,_ZTv0_n16_N8S20846C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn51784_N8S20846C1D0Ev,_ZThn38408_N8S20846C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn50920_N8S20846C1D0Ev,_ZThn37772_N8S20846C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20846C1D1Ev,_ZTv0_n16_N8S20846C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn51784_N8S20846C1D1Ev,_ZThn38408_N8S20846C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn50920_N8S20846C1D1Ev,_ZThn37772_N8S20846C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20846C1 = {  "S20846C1", // class name
  bases_S20846C1, 26,
  &(vtc_S20846C1[0]), // expected_vtbl_contents
  &(vtt_S20846C1[0]), // expected_vtt_contents
  ABISELECT(64832,48008), // object size
  NSPAIRA(_ZTI8S20846C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20846C1),112, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20846C1),72, //virtual table table var
  25, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names32,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19505C4  {
  short s19505c4f0[6];
  __tsi64 s19505c4f1[8];
  int s19505c4f2;
  virtual  ~S19505C4(); // _ZN8S19505C4D1Ev
  virtual void  v1(); // _ZN8S19505C42v1Ev
  S19505C4(); // tgen
};
//SIG(-1 S19505C4) C1{ vd v1 Fs[6] FL[8] Fi}


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

static void Test_S19505C4()
{
  extern Class_Descriptor cd_S19505C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,22)];
    init_test(&cd_S19505C4, buf);
    S19505C4 *dp, &lv = *(dp=new (buf) S19505C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,84), "sizeof(S19505C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19505C4)");
    check_field_offset(lv, s19505c4f0, ABISELECT(8,4), "S19505C4.s19505c4f0");
    check_field_offset(lv, s19505c4f1, ABISELECT(24,16), "S19505C4.s19505c4f1");
    check_field_offset(lv, s19505c4f2, ABISELECT(88,80), "S19505C4.s19505c4f2");
    test_class_info(&lv, &cd_S19505C4);
    dp->~S19505C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19505C4(Test_S19505C4, "S19505C4", ABISELECT(96,84));

#else // __cplusplus

extern void _ZN8S19505C4C1Ev();
extern void _ZN8S19505C4D1Ev();
Name_Map name_map_S19505C4[] = {
  NSPAIR(_ZN8S19505C4C1Ev),
  NSPAIR(_ZN8S19505C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19505C4[];
extern void _ZN8S19505C4D1Ev();
extern void _ZN8S19505C4D0Ev();
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY vtc_S19505C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C4[0]),
  (VTBL_ENTRY)&_ZN8S19505C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern VTBL_ENTRY _ZTI8S19505C4[];
extern  VTBL_ENTRY _ZTV8S19505C4[];
Class_Descriptor cd_S19505C4 = {  "S19505C4", // class name
  0,0,//no base classes
  &(vtc_S19505C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,84), // object size
  NSPAIRA(_ZTI8S19505C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19505C4),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  S19505C5  : virtual S19505C4 {
  __tsi64 s19505c5f0;
  void *s19505c5f1;
  __tsi64 s19505c5f2:54;
  ~S19505C5(); // tgen
  S19505C5(); // tgen
};
//SIG(-1 S19505C5) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} FL Fp FL:54}


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

static void Test_S19505C5()
{
  extern Class_Descriptor cd_S19505C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,28)];
    init_test(&cd_S19505C5, buf);
    S19505C5 *dp, &lv = *(dp=new (buf) S19505C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,108), "sizeof(S19505C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19505C5)");
    check_base_class_offset(lv, (S19505C4*), ABISELECT(32,24), "S19505C5");
    check_field_offset(lv, s19505c5f0, ABISELECT(8,4), "S19505C5.s19505c5f0");
    check_field_offset(lv, s19505c5f1, ABISELECT(16,12), "S19505C5.s19505c5f1");
    set_bf_and_test(lv, s19505c5f2, ABISELECT(24,16), 0, 54, 1, "S19505C5");
    set_bf_and_test(lv, s19505c5f2, ABISELECT(24,16), 0, 54, hide_sll(1LL<<53), "S19505C5");
    test_class_info(&lv, &cd_S19505C5);
    dp->~S19505C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19505C5(Test_S19505C5, "S19505C5", ABISELECT(128,108));

#else // __cplusplus

extern void _ZN8S19505C5C1Ev();
extern void _ZN8S19505C5D1Ev();
Name_Map name_map_S19505C5[] = {
  NSPAIR(_ZN8S19505C5C1Ev),
  NSPAIR(_ZN8S19505C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19505C4;
extern VTBL_ENTRY _ZTI8S19505C4[];
extern  VTBL_ENTRY _ZTV8S19505C4[];
static Base_Class bases_S19505C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19505C4,    ABISELECT(32,24), //bcp->offset
    5, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S19505C5[];
extern void _ZN8S19505C5D1Ev();
extern void _ZN8S19505C5D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev)();
extern void ABISELECT(_ZThn32_N8S19505C5D1Ev,_ZThn24_N8S19505C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev)();
extern void ABISELECT(_ZThn32_N8S19505C5D0Ev,_ZThn24_N8S19505C5D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY vtc_S19505C5[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&_ZN8S19505C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C5D0Ev,
  0,
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern VTBL_ENTRY _ZTV8S19505C5[];
static  VTT_ENTRY vtt_S19505C5[] = {
  {&(_ZTV8S19505C5[3]),  3,12},
  {&(_ZTV8S19505C5[9]),  9,12},
};
extern VTBL_ENTRY _ZTI8S19505C5[];
extern  VTBL_ENTRY _ZTV8S19505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C5[];
static VTBL_ENTRY alt_thunk_names33[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19505C5D0Ev,_ZThn24_N8S19505C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19505C5D1Ev,_ZThn24_N8S19505C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19505C5 = {  "S19505C5", // class name
  bases_S19505C5, 1,
  &(vtc_S19505C5[0]), // expected_vtbl_contents
  &(vtt_S19505C5[0]), // expected_vtt_contents
  ABISELECT(128,108), // object size
  NSPAIRA(_ZTI8S19505C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19505C5),12, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19505C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names33,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19505C3  : virtual S19505C4 , S19505C5 {
  char  :0;
  void *s19505c3f1[8];
  char s19505c3f2;
  virtual void  v2(); // _ZN8S19505C32v2Ev
  virtual void  v3(); // _ZN8S19505C32v3Ev
  ~S19505C3(); // tgen
  S19505C3(); // tgen
};
//SIG(-1 S19505C3) C1{ VBC2{ vd v3 Fs[6] FL[8] Fi} BC3{ VBC2 FL Fp FL:54} v1 v2 Fc:0 Fp[8] Fc}


void  S19505C3 ::v2(){vfunc_called(this, "_ZN8S19505C32v2Ev");}
void  S19505C3 ::v3(){vfunc_called(this, "_ZN8S19505C32v3Ev");}
S19505C3 ::~S19505C3(){ note_dtor("S19505C3", this);} // tgen
S19505C3 ::S19505C3(){ note_ctor("S19505C3", this);} // tgen

static void Test_S19505C3()
{
  extern Class_Descriptor cd_S19505C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,37)];
    init_test(&cd_S19505C3, buf);
    S19505C3 *dp, &lv = *(dp=new (buf) S19505C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,144), "sizeof(S19505C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19505C3)");
    check_base_class_offset(lv, (S19505C4*), ABISELECT(104,60), "S19505C3");
    check_base_class_offset(lv, (S19505C4*)(S19505C5*), ABISELECT(104,60), "S19505C3");
    check_base_class_offset(lv, (S19505C5*), 0, "S19505C3");
    check_field_offset(lv, s19505c3f1, ABISELECT(32,24), "S19505C3.s19505c3f1");
    check_field_offset(lv, s19505c3f2, ABISELECT(96,56), "S19505C3.s19505c3f2");
    test_class_info(&lv, &cd_S19505C3);
    dp->~S19505C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19505C3(Test_S19505C3, "S19505C3", ABISELECT(200,144));

#else // __cplusplus

extern void _ZN8S19505C3C1Ev();
extern void _ZN8S19505C3D1Ev();
Name_Map name_map_S19505C3[] = {
  NSPAIR(_ZN8S19505C3C1Ev),
  NSPAIR(_ZN8S19505C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19505C4;
extern VTBL_ENTRY _ZTI8S19505C4[];
extern  VTBL_ENTRY _ZTV8S19505C4[];
extern Class_Descriptor cd_S19505C5;
extern VTBL_ENTRY _ZTI8S19505C5[];
extern  VTBL_ENTRY _ZTV8S19505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C5[];
static Base_Class bases_S19505C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19505C4,    ABISELECT(104,60), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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_S19505C5,    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 _ZTI8S19505C3[];
extern void _ZN8S19505C3D1Ev();
extern void _ZN8S19505C3D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev)();
extern void ABISELECT(_ZThn104_N8S19505C3D1Ev,_ZThn60_N8S19505C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev)();
extern void ABISELECT(_ZThn104_N8S19505C3D0Ev,_ZThn60_N8S19505C3D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY vtc_S19505C3[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&_ZN8S19505C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern VTBL_ENTRY _ZTV8S19505C3[];
extern void _ZN8S19505C5D1Ev();
extern void _ZN8S19505C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C5__8S19505C3[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&_ZN8S19505C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev)();
extern void ABISELECT(_ZThn104_N8S19505C5D1Ev,_ZThn60_N8S19505C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev)();
extern void ABISELECT(_ZThn104_N8S19505C5D0Ev,_ZThn60_N8S19505C5D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C5__8S19505C3[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
static  VTT_ENTRY vtt_S19505C3[] = {
  {&(_ZTV8S19505C3[3]),  3,14},
  {&(_tg__ZTV8S19505C5__8S19505C3[3]),  3,5},
  {&(_tg__ZTV8S19505C4__8S19505C5__8S19505C3[4]),  4,7},
  {&(_ZTV8S19505C3[11]),  11,14},
};
extern VTBL_ENTRY _ZTI8S19505C3[];
extern  VTBL_ENTRY _ZTV8S19505C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C3[];
static VTBL_ENTRY alt_thunk_names34[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19505C5D0Ev,_ZThn60_N8S19505C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19505C5D1Ev,_ZThn60_N8S19505C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19505C3D0Ev,_ZThn60_N8S19505C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19505C3D1Ev,_ZThn60_N8S19505C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19505C3 = {  "S19505C3", // class name
  bases_S19505C3, 2,
  &(vtc_S19505C3[0]), // expected_vtbl_contents
  &(vtt_S19505C3[0]), // expected_vtt_contents
  ABISELECT(200,144), // object size
  NSPAIRA(_ZTI8S19505C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19505C3),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19505C3),4, //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  S19505C8  : virtual S19505C4 , S19505C3 {
  void *s19505c8f0[3];
  char s19505c8f1:8;
  int s19505c8f2[2];
  char s19505c8f3;
  ::S19505C4 s19505c8f4;
  void *s19505c8f5[3];
  __tsi64 s19505c8f6[5];
  int s19505c8f7;
  ~S19505C8(); // tgen
  S19505C8(); // tgen
};
//SIG(-1 S19505C8) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} BC3{ VBC2 BC4{ VBC2 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC2 Fp[3] FL[5] Fi}


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

static void Test_S19505C8()
{
  extern Class_Descriptor cd_S19505C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(52,79)];
    init_test(&cd_S19505C8, buf);
    S19505C8 *dp, &lv = *(dp=new (buf) S19505C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(408,312), "sizeof(S19505C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19505C8)");
    check_base_class_offset(lv, (S19505C4*), ABISELECT(312,228), "S19505C8");
    check_base_class_offset(lv, (S19505C4*)(S19505C3*), ABISELECT(312,228), "S19505C8");
    check_base_class_offset(lv, (S19505C4*)(S19505C5*)(S19505C3*), ABISELECT(312,228), "S19505C8");
    check_base_class_offset(lv, (S19505C5*)(S19505C3*), 0, "S19505C8");
    check_base_class_offset(lv, (S19505C3*), 0, "S19505C8");
    check_field_offset(lv, s19505c8f0, ABISELECT(104,60), "S19505C8.s19505c8f0");
    set_bf_and_test(lv, s19505c8f1, ABISELECT(128,72), 0, 8, 1, "S19505C8");
    set_bf_and_test(lv, s19505c8f1, ABISELECT(128,72), 0, 8, hide_sll(1LL<<7), "S19505C8");
    check_field_offset(lv, s19505c8f2, ABISELECT(132,76), "S19505C8.s19505c8f2");
    check_field_offset(lv, s19505c8f3, ABISELECT(140,84), "S19505C8.s19505c8f3");
    check_field_offset(lv, s19505c8f4, ABISELECT(144,88), "S19505C8.s19505c8f4");
    check_field_offset(lv, s19505c8f5, ABISELECT(240,172), "S19505C8.s19505c8f5");
    check_field_offset(lv, s19505c8f6, ABISELECT(264,184), "S19505C8.s19505c8f6");
    check_field_offset(lv, s19505c8f7, ABISELECT(304,224), "S19505C8.s19505c8f7");
    test_class_info(&lv, &cd_S19505C8);
    dp->~S19505C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19505C8(Test_S19505C8, "S19505C8", ABISELECT(408,312));

#else // __cplusplus

extern void _ZN8S19505C8C1Ev();
extern void _ZN8S19505C8D1Ev();
Name_Map name_map_S19505C8[] = {
  NSPAIR(_ZN8S19505C8C1Ev),
  NSPAIR(_ZN8S19505C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19505C4;
extern VTBL_ENTRY _ZTI8S19505C4[];
extern  VTBL_ENTRY _ZTV8S19505C4[];
extern Class_Descriptor cd_S19505C5;
extern VTBL_ENTRY _ZTI8S19505C5[];
extern  VTBL_ENTRY _ZTV8S19505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C5[];
extern Class_Descriptor cd_S19505C3;
extern VTBL_ENTRY _ZTI8S19505C3[];
extern  VTBL_ENTRY _ZTV8S19505C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C3[];
static Base_Class bases_S19505C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19505C4,    ABISELECT(312,228), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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
  1, 1},
  {&cd_S19505C5,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19505C3,    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 _ZTI8S19505C8[];
extern void _ZN8S19505C8D1Ev();
extern void _ZN8S19505C8D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S19505C8D1Ev,_ZTv0_n12_N8S19505C8D1Ev)();
extern void ABISELECT(_ZThn312_N8S19505C8D1Ev,_ZThn228_N8S19505C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C8D0Ev,_ZTv0_n12_N8S19505C8D0Ev)();
extern void ABISELECT(_ZThn312_N8S19505C8D0Ev,_ZThn228_N8S19505C8D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY vtc_S19505C8[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C8[0]),
  (VTBL_ENTRY)&_ZN8S19505C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S19505C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C8D1Ev,_ZTv0_n12_N8S19505C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C8D0Ev,_ZTv0_n12_N8S19505C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern VTBL_ENTRY _ZTV8S19505C8[];
extern void _ZN8S19505C3D1Ev();
extern void _ZN8S19505C3D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C3__8S19505C8[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&_ZN8S19505C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C5D1Ev();
extern void _ZN8S19505C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C58S19505C3__8S19505C8[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&_ZN8S19505C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev)();
extern void ABISELECT(_ZThn312_N8S19505C5D1Ev,_ZThn228_N8S19505C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev)();
extern void ABISELECT(_ZThn312_N8S19505C5D0Ev,_ZThn228_N8S19505C5D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C58S19505C3__8S19505C8[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev)();
extern void ABISELECT(_ZThn312_N8S19505C3D1Ev,_ZThn228_N8S19505C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev)();
extern void ABISELECT(_ZThn312_N8S19505C3D0Ev,_ZThn228_N8S19505C3D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C3__8S19505C8[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
static  VTT_ENTRY vtt_S19505C8[] = {
  {&(_ZTV8S19505C8[3]),  3,14},
  {&(_tg__ZTV8S19505C3__8S19505C8[3]),  3,7},
  {&(_tg__ZTV8S19505C58S19505C3__8S19505C8[3]),  3,5},
  {&(_tg__ZTV8S19505C4__8S19505C58S19505C3__8S19505C8[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C3__8S19505C8[4]),  4,7},
  {&(_ZTV8S19505C8[11]),  11,14},
};
extern VTBL_ENTRY _ZTI8S19505C8[];
extern  VTBL_ENTRY _ZTV8S19505C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C8[];
static VTBL_ENTRY alt_thunk_names35[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S19505C3D0Ev,_ZThn228_N8S19505C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S19505C3D1Ev,_ZThn228_N8S19505C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S19505C5D0Ev,_ZThn228_N8S19505C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S19505C5D1Ev,_ZThn228_N8S19505C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C8D0Ev,_ZTv0_n12_N8S19505C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S19505C8D0Ev,_ZThn228_N8S19505C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C8D1Ev,_ZTv0_n12_N8S19505C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S19505C8D1Ev,_ZThn228_N8S19505C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19505C8 = {  "S19505C8", // class name
  bases_S19505C8, 3,
  &(vtc_S19505C8[0]), // expected_vtbl_contents
  &(vtt_S19505C8[0]), // expected_vtt_contents
  ABISELECT(408,312), // object size
  NSPAIRA(_ZTI8S19505C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19505C8),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19505C8),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names35,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19505C6  : S3052C12 , virtual S19505C4 , virtual S19505C3 {
  ::S19505C3 s19505c6f0[2];
  long double s19505c6f1;
  ::S3052C12 s19505c6f2;
  void *s19505c6f3[3];
  ::S19505C8 s19505c6f4;
  int s19505c6f5;
  ::S3052C16 s19505c6f6;
  int s19505c6f7;
  virtual void  v4(); // _ZN8S19505C62v4Ev
  ~S19505C6(); // tgen
  S19505C6(); // tgen
};
//SIG(-1 S19505C6) C1{ BC2{ vd m FC3{ VBC4{ vd v7 Fs[6] FL[8] Fi} BC5{ VBC4 FL Fp FL:54} v5 v6 Fc:0 Fp[8] Fc}} VBC6{ vd v2 Fs[6] FL[8] Fi} VBC7{ VBC6 BC8{ VBC6 FL Fp FL:54} v3 v4 Fc:0 Fp[8] Fc} v1 FC7[2] FD FC2 Fp[3] FC9{ VBC6 BC7 Fp[3] Fc:8 Fi[2] Fc FC6 Fp[3] FL[5] Fi} Fi FU10{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi}


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

static void Test_S19505C6()
{
  extern Class_Descriptor cd_S19505C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(95,272)];
    init_test(&cd_S19505C6, buf);
    S19505C6 *dp, &lv = *(dp=new (buf) S19505C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1504,1084), "sizeof(S19505C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19505C6)");
    check_base_class_offset(lv, (S3052C12*), 0, "S19505C6");
    check_base_class_offset(lv, (S19505C4*), ABISELECT(1296,940), "S19505C6");
    check_base_class_offset(lv, (S19505C4*)(S19505C3*), ABISELECT(1296,940), "S19505C6");
    check_base_class_offset(lv, (S19505C4*)(S19505C5*)(S19505C3*), ABISELECT(1296,940), "S19505C6");
    check_base_class_offset(lv, (S19505C5*)(S19505C3*), ABISELECT(1392,1024), "S19505C6");
    check_base_class_offset(lv, (S19505C3*), ABISELECT(1392,1024), "S19505C6");
    check_field_offset(lv, s19505c6f0, ABISELECT(208,148), "S19505C6.s19505c6f0");
    check_field_offset(lv, s19505c6f1, ABISELECT(608,436), "S19505C6.s19505c6f1");
    check_field_offset(lv, s19505c6f2, ABISELECT(624,448), "S19505C6.s19505c6f2");
    check_field_offset(lv, s19505c6f3, ABISELECT(832,596), "S19505C6.s19505c6f3");
    check_field_offset(lv, s19505c6f4, ABISELECT(856,608), "S19505C6.s19505c6f4");
    check_field_offset(lv, s19505c6f5, ABISELECT(1264,920), "S19505C6.s19505c6f5");
    check_field_offset(lv, s19505c6f6, ABISELECT(1272,924), "S19505C6.s19505c6f6");
    check_field_offset(lv, s19505c6f7, ABISELECT(1288,936), "S19505C6.s19505c6f7");
    test_class_info(&lv, &cd_S19505C6);
    dp->~S19505C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19505C6(Test_S19505C6, "S19505C6", ABISELECT(1504,1084));

#else // __cplusplus

extern void _ZN8S19505C6C1Ev();
extern void _ZN8S19505C6D1Ev();
Name_Map name_map_S19505C6[] = {
  NSPAIR(_ZN8S19505C6C1Ev),
  NSPAIR(_ZN8S19505C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S19505C4;
extern VTBL_ENTRY _ZTI8S19505C4[];
extern  VTBL_ENTRY _ZTV8S19505C4[];
extern Class_Descriptor cd_S19505C5;
extern VTBL_ENTRY _ZTI8S19505C5[];
extern  VTBL_ENTRY _ZTV8S19505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C5[];
extern Class_Descriptor cd_S19505C3;
extern VTBL_ENTRY _ZTI8S19505C3[];
extern  VTBL_ENTRY _ZTV8S19505C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C3[];
static Base_Class bases_S19505C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19505C4,    ABISELECT(1296,940), //bcp->offset
    7, //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_S19505C5,    ABISELECT(1392,1024), //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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19505C3,    ABISELECT(1392,1024), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19505C6[];
extern void _ZN8S19505C6D1Ev();
extern void _ZN8S19505C6D0Ev();
extern void _ZN8S19505C62v4Ev();
extern void ABISELECT(_ZTv0_n24_N8S19505C6D1Ev,_ZTv0_n12_N8S19505C6D1Ev)();
extern void ABISELECT(_ZThn1296_N8S19505C6D1Ev,_ZThn940_N8S19505C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C6D0Ev,_ZTv0_n12_N8S19505C6D0Ev)();
extern void ABISELECT(_ZThn1296_N8S19505C6D0Ev,_ZThn940_N8S19505C6D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19505C6D1Ev,_ZTv0_n16_N8S19505C6D1Ev)();
extern void ABISELECT(_ZThn1392_N8S19505C6D1Ev,_ZThn1024_N8S19505C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19505C6D0Ev,_ZTv0_n16_N8S19505C6D0Ev)();
extern void ABISELECT(_ZThn1392_N8S19505C6D0Ev,_ZThn1024_N8S19505C6D0Ev)() __attribute__((weak));
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY vtc_S19505C6[] = {
  ABISELECT(1392,1024),
  ABISELECT(1296,940),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C6[0]),
  (VTBL_ENTRY)&_ZN8S19505C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C62v4Ev,
  0,
  ABISELECT(-1296,-940),
  ABISELECT(-1296,-940),
  (VTBL_ENTRY)&(_ZTI8S19505C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C6D1Ev,_ZTv0_n12_N8S19505C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C6D0Ev,_ZTv0_n12_N8S19505C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
  0,
  0,
  ABISELECT(-1392,-1024),
  ABISELECT(-96,-84),
  ABISELECT(-1392,-1024),
  (VTBL_ENTRY)&(_ZTI8S19505C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19505C6D1Ev,_ZTv0_n16_N8S19505C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19505C6D0Ev,_ZTv0_n16_N8S19505C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern VTBL_ENTRY _ZTV8S19505C6[];
extern void _ZN8S19505C3D1Ev();
extern void _ZN8S19505C3D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C3__8S19505C6[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&_ZN8S19505C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C5D1Ev();
extern void _ZN8S19505C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C58S19505C3__8S19505C6[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&_ZN8S19505C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev)();
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C58S19505C3__8S19505C6[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev)();
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C3__8S19505C6[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
static  VTT_ENTRY vtt_S19505C6[] = {
  {&(_ZTV8S19505C6[4]),  4,24},
  {&(_ZTV8S19505C6[11]),  11,24},
  {&(_ZTV8S19505C6[20]),  20,24},
  {&(_tg__ZTV8S19505C3__8S19505C6[3]),  3,7},
  {&(_tg__ZTV8S19505C58S19505C3__8S19505C6[3]),  3,5},
  {&(_tg__ZTV8S19505C4__8S19505C58S19505C3__8S19505C6[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C3__8S19505C6[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19505C6[];
extern  VTBL_ENTRY _ZTV8S19505C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C6[];
static VTBL_ENTRY alt_thunk_names36[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19505C6D0Ev,_ZTv0_n16_N8S19505C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N8S19505C6D0Ev,_ZThn1024_N8S19505C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19505C6D1Ev,_ZTv0_n16_N8S19505C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N8S19505C6D1Ev,_ZThn1024_N8S19505C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C6D0Ev,_ZTv0_n12_N8S19505C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1296_N8S19505C6D0Ev,_ZThn940_N8S19505C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C6D1Ev,_ZTv0_n12_N8S19505C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1296_N8S19505C6D1Ev,_ZThn940_N8S19505C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19505C6 = {  "S19505C6", // class name
  bases_S19505C6, 4,
  &(vtc_S19505C6[0]), // expected_vtbl_contents
  &(vtt_S19505C6[0]), // expected_vtt_contents
  ABISELECT(1504,1084), // object size
  NSPAIRA(_ZTI8S19505C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19505C6),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19505C6),7, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names36,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19505C15  : virtual S19505C4 , S19505C3 , S19505C8 , S3052C12 , virtual S19505C5 {
  void *s19505c15f0;
  long s19505c15f1;
  ::S19505C8 s19505c15f2;
  ::S3052C12 s19505c15f3;
  ::S19505C5 s19505c15f4;
  int s19505c15f5;
  int s19505c15f6;
  ::S3052C13 s19505c15f7[9];
  ~S19505C15(); // tgen
  S19505C15(); // tgen
};
//SIG(-1 S19505C15) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} BC3{ VBC2 BC4{ VBC2 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} BC5{ VBC2 BC3 Fp[3] Fc:8 Fi[2] Fc FC2 Fp[3] FL[5] Fi} BC6{ vd m FC7{ VBC8{ vd v6 Fs[6] FL[8] Fi} BC9{ VBC8 FL Fp FL:54} v4 v5 Fc:0 Fp[8] Fc}} VBC4 Fp Fl FC5 FC6 FC4 Fi[2] FU10{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}


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

static void Test_S19505C15()
{
  extern Class_Descriptor cd_S19505C15;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(105,310)];
    init_test(&cd_S19505C15, buf);
    S19505C15 *dp, &lv = *(dp=new (buf) S19505C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1664,1236), "sizeof(S19505C15)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19505C15)");
    check_base_class_offset(lv, (S19505C4*), ABISELECT(1536,1128), "S19505C15");
    /*is_ambiguous_... S19505C15::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C4*)(S19505C3*), ABISELECT(1536,1128), "S19505C15");
    /*is_ambiguous_... S19505C15::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C4*)(S19505C5*)(S19505C3*), ABISELECT(1536,1128), "S19505C15");
    check_base_class_offset(lv, (S19505C4*)(S19505C8*), ABISELECT(1536,1128), "S19505C15");
    check_base_class_offset(lv, (S19505C4*)(S19505C3*)(S19505C8*), ABISELECT(1536,1128), "S19505C15");
    check_base_class_offset(lv, (S19505C4*)(S19505C5*)(S19505C3*)(S19505C8*), ABISELECT(1536,1128), "S19505C15");
    /*is_ambiguous_... S19505C15::S19505C5 */ AMB_check_base_class_offset(lv, (S19505C4*)(S19505C5*), ABISELECT(1536,1128), "S19505C15");
    /*is_ambiguous_... S19505C15::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C5*)(S19505C3*), 0, "S19505C15");
    /*is_ambiguous_... S19505C15::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C3*), 0, "S19505C15");
    check_base_class_offset(lv, (S19505C5*)(S19505C3*)(S19505C8*), ABISELECT(104,60), "S19505C15");
    check_base_class_offset(lv, (S19505C3*)(S19505C8*), ABISELECT(104,60), "S19505C15");
    check_base_class_offset(lv, (S19505C8*), ABISELECT(104,60), "S19505C15");
    check_base_class_offset(lv, (S3052C12*), ABISELECT(416,288), "S19505C15");
    /*is_ambiguous_... S19505C15::S19505C5 */ AMB_check_base_class_offset(lv, (S19505C5*), ABISELECT(1632,1212), "S19505C15");
    check_field_offset(lv, s19505c15f0, ABISELECT(624,436), "S19505C15.s19505c15f0");
    check_field_offset(lv, s19505c15f1, ABISELECT(632,440), "S19505C15.s19505c15f1");
    check_field_offset(lv, s19505c15f2, ABISELECT(640,444), "S19505C15.s19505c15f2");
    check_field_offset(lv, s19505c15f3, ABISELECT(1048,756), "S19505C15.s19505c15f3");
    check_field_offset(lv, s19505c15f4, ABISELECT(1256,904), "S19505C15.s19505c15f4");
    check_field_offset(lv, s19505c15f5, ABISELECT(1384,1012), "S19505C15.s19505c15f5");
    check_field_offset(lv, s19505c15f6, ABISELECT(1388,1016), "S19505C15.s19505c15f6");
    check_field_offset(lv, s19505c15f7, ABISELECT(1392,1020), "S19505C15.s19505c15f7");
    test_class_info(&lv, &cd_S19505C15);
    dp->~S19505C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19505C15(Test_S19505C15, "S19505C15", ABISELECT(1664,1236));

#else // __cplusplus

extern void _ZN9S19505C15C1Ev();
extern void _ZN9S19505C15D1Ev();
Name_Map name_map_S19505C15[] = {
  NSPAIR(_ZN9S19505C15C1Ev),
  NSPAIR(_ZN9S19505C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19505C4;
extern VTBL_ENTRY _ZTI8S19505C4[];
extern  VTBL_ENTRY _ZTV8S19505C4[];
extern Class_Descriptor cd_S19505C5;
extern VTBL_ENTRY _ZTI8S19505C5[];
extern  VTBL_ENTRY _ZTV8S19505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C5[];
extern Class_Descriptor cd_S19505C3;
extern VTBL_ENTRY _ZTI8S19505C3[];
extern  VTBL_ENTRY _ZTV8S19505C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C3[];
extern Class_Descriptor cd_S19505C5;
extern VTBL_ENTRY _ZTI8S19505C5[];
extern  VTBL_ENTRY _ZTV8S19505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C5[];
extern Class_Descriptor cd_S19505C3;
extern VTBL_ENTRY _ZTI8S19505C3[];
extern  VTBL_ENTRY _ZTV8S19505C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C3[];
extern Class_Descriptor cd_S19505C8;
extern VTBL_ENTRY _ZTI8S19505C8[];
extern  VTBL_ENTRY _ZTV8S19505C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C8[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S19505C5;
extern VTBL_ENTRY _ZTI8S19505C5[];
extern  VTBL_ENTRY _ZTV8S19505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C5[];
static Base_Class bases_S19505C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19505C4,    ABISELECT(1536,1128), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //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
  1, 1},
  {&cd_S19505C5,    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
    3, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19505C3,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19505C5,    ABISELECT(104,60), //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
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19505C3,    ABISELECT(104,60), //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
    5, //immediately_derived
  0, 0},
  {&cd_S19505C8,    ABISELECT(104,60), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //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},
  {&cd_S3052C12,    ABISELECT(416,288), //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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19505C5,    ABISELECT(1632,1212), //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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19505C15[];
extern void _ZN9S19505C15D1Ev();
extern void _ZN9S19505C15D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
extern void ABISELECT(_ZThn104_N9S19505C15D1Ev,_ZThn60_N9S19505C15D1Ev)();
extern void ABISELECT(_ZThn104_N9S19505C15D0Ev,_ZThn60_N9S19505C15D0Ev)();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
extern void ABISELECT(_ZThn416_N9S19505C15D1Ev,_ZThn288_N9S19505C15D1Ev)();
extern void ABISELECT(_ZThn416_N9S19505C15D0Ev,_ZThn288_N9S19505C15D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19505C15D1Ev,_ZTv0_n12_N9S19505C15D1Ev)();
extern void ABISELECT(_ZThn1536_N9S19505C15D1Ev,_ZThn1128_N9S19505C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19505C15D0Ev,_ZTv0_n12_N9S19505C15D0Ev)();
extern void ABISELECT(_ZThn1536_N9S19505C15D0Ev,_ZThn1128_N9S19505C15D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19505C15D1Ev,_ZTv0_n16_N9S19505C15D1Ev)();
extern void ABISELECT(_ZThn1632_N9S19505C15D1Ev,_ZThn1212_N9S19505C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19505C15D0Ev,_ZTv0_n16_N9S19505C15D0Ev)();
extern void ABISELECT(_ZThn1632_N9S19505C15D0Ev,_ZThn1212_N9S19505C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19505C15[] = {
  ABISELECT(1632,1212),
  ABISELECT(1536,1128),
  0,
  (VTBL_ENTRY)&(_ZTI9S19505C15[0]),
  (VTBL_ENTRY)&_ZN9S19505C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19505C15D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
  ABISELECT(1432,1068),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI9S19505C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S19505C15D1Ev,_ZThn60_N9S19505C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S19505C15D0Ev,_ZThn60_N9S19505C15D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
  ABISELECT(-416,-288),
  (VTBL_ENTRY)&(_ZTI9S19505C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn416_N9S19505C15D1Ev,_ZThn288_N9S19505C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn416_N9S19505C15D0Ev,_ZThn288_N9S19505C15D0Ev),
  0,
  ABISELECT(-1536,-1128),
  ABISELECT(-1536,-1128),
  (VTBL_ENTRY)&(_ZTI9S19505C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C15D1Ev,_ZTv0_n12_N9S19505C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C15D0Ev,_ZTv0_n12_N9S19505C15D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
  ABISELECT(-1632,-1212),
  ABISELECT(-96,-84),
  ABISELECT(-1632,-1212),
  (VTBL_ENTRY)&(_ZTI9S19505C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C15D1Ev,_ZTv0_n16_N9S19505C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C15D0Ev,_ZTv0_n16_N9S19505C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S19505C15[];
extern void _ZN8S19505C3D1Ev();
extern void _ZN8S19505C3D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C3__9S19505C15[] = {
  ABISELECT(1536,1128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&_ZN8S19505C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C5D1Ev();
extern void _ZN8S19505C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C58S19505C3__9S19505C15[] = {
  ABISELECT(1536,1128),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&_ZN8S19505C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev)();
extern void ABISELECT(_ZThn1536_N8S19505C5D1Ev,_ZThn1128_N8S19505C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev)();
extern void ABISELECT(_ZThn1536_N8S19505C5D0Ev,_ZThn1128_N8S19505C5D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C58S19505C3__9S19505C15[] = {
  0,
  ABISELECT(-1536,-1128),
  ABISELECT(-1536,-1128),
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev)();
extern void ABISELECT(_ZThn1536_N8S19505C3D1Ev,_ZThn1128_N8S19505C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev)();
extern void ABISELECT(_ZThn1536_N8S19505C3D0Ev,_ZThn1128_N8S19505C3D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C3__9S19505C15[] = {
  0,
  ABISELECT(-1536,-1128),
  ABISELECT(-1536,-1128),
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void _ZN8S19505C8D1Ev();
extern void _ZN8S19505C8D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C8__9S19505C15[] = {
  ABISELECT(1432,1068),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C8[0]),
  (VTBL_ENTRY)&_ZN8S19505C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C3D1Ev();
extern void _ZN8S19505C3D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C38S19505C8__A1__9S19505C15[] = {
  ABISELECT(1432,1068),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&_ZN8S19505C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C5D1Ev();
extern void _ZN8S19505C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C58S19505C38S19505C8__A1__9S19505C15[] = {
  ABISELECT(1432,1068),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&_ZN8S19505C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev)();
extern void ABISELECT(_ZThn1432_N8S19505C5D1Ev,_ZThn1068_N8S19505C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev)();
extern void ABISELECT(_ZThn1432_N8S19505C5D0Ev,_ZThn1068_N8S19505C5D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C58S19505C38S19505C8__A1__9S19505C15[] = {
  0,
  ABISELECT(-1432,-1068),
  ABISELECT(-1432,-1068),
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev)();
extern void ABISELECT(_ZThn1432_N8S19505C3D1Ev,_ZThn1068_N8S19505C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev)();
extern void ABISELECT(_ZThn1432_N8S19505C3D0Ev,_ZThn1068_N8S19505C3D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C38S19505C8__A1__9S19505C15[] = {
  0,
  ABISELECT(-1432,-1068),
  ABISELECT(-1432,-1068),
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C8D1Ev,_ZTv0_n12_N8S19505C8D1Ev)();
extern void ABISELECT(_ZThn1432_N8S19505C8D1Ev,_ZThn1068_N8S19505C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C8D0Ev,_ZTv0_n12_N8S19505C8D0Ev)();
extern void ABISELECT(_ZThn1432_N8S19505C8D0Ev,_ZThn1068_N8S19505C8D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C8__9S19505C15[] = {
  0,
  ABISELECT(-1432,-1068),
  ABISELECT(-1432,-1068),
  (VTBL_ENTRY)&(_ZTI8S19505C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C8D1Ev,_ZTv0_n12_N8S19505C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C8D0Ev,_ZTv0_n12_N8S19505C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void _ZN8S19505C5D1Ev();
extern void _ZN8S19505C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C5__A2__9S19505C15[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&_ZN8S19505C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev)();
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C5__A2__9S19505C15[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
static  VTT_ENTRY vtt_S19505C15[] = {
  {&(_ZTV9S19505C15[4]),  4,32},
  {&(_tg__ZTV8S19505C3__9S19505C15[3]),  3,7},
  {&(_tg__ZTV8S19505C58S19505C3__9S19505C15[3]),  3,5},
  {&(_tg__ZTV8S19505C4__8S19505C58S19505C3__9S19505C15[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C3__9S19505C15[4]),  4,7},
  {&(_tg__ZTV8S19505C8__9S19505C15[3]),  3,7},
  {&(_tg__ZTV8S19505C38S19505C8__A1__9S19505C15[3]),  3,7},
  {&(_tg__ZTV8S19505C58S19505C38S19505C8__A1__9S19505C15[3]),  3,5},
  {&(_tg__ZTV8S19505C4__8S19505C58S19505C38S19505C8__A1__9S19505C15[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C38S19505C8__A1__9S19505C15[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C8__9S19505C15[4]),  4,7},
  {&(_ZTV9S19505C15[23]),  23,32},
  {&(_ZTV9S19505C15[11]),  11,32},
  {&(_ZTV9S19505C15[30]),  30,32},
  {&(_tg__ZTV8S19505C5__A2__9S19505C15[3]),  3,5},
  {&(_tg__ZTV8S19505C4__8S19505C5__A2__9S19505C15[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S19505C15[];
extern  VTBL_ENTRY _ZTV9S19505C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19505C15[];
static VTBL_ENTRY alt_thunk_names37[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C8D0Ev,_ZTv0_n12_N8S19505C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S19505C8D0Ev,_ZThn1068_N8S19505C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C8D1Ev,_ZTv0_n12_N8S19505C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S19505C8D1Ev,_ZThn1068_N8S19505C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S19505C3D0Ev,_ZThn1068_N8S19505C3D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S19505C3D0Ev,_ZThn1128_N8S19505C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S19505C3D1Ev,_ZThn1068_N8S19505C3D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S19505C3D1Ev,_ZThn1128_N8S19505C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S19505C5D0Ev,_ZThn1068_N8S19505C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S19505C5D0Ev,_ZThn1128_N8S19505C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S19505C5D1Ev,_ZThn1068_N8S19505C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S19505C5D1Ev,_ZThn1128_N8S19505C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19505C15D0Ev,_ZTv0_n16_N9S19505C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1632_N9S19505C15D0Ev,_ZThn1212_N9S19505C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19505C15D1Ev,_ZTv0_n16_N9S19505C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1632_N9S19505C15D1Ev,_ZThn1212_N9S19505C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19505C15D0Ev,_ZTv0_n12_N9S19505C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N9S19505C15D0Ev,_ZThn1128_N9S19505C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19505C15D1Ev,_ZTv0_n12_N9S19505C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N9S19505C15D1Ev,_ZThn1128_N9S19505C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19505C15 = {  "S19505C15", // class name
  bases_S19505C15, 8,
  &(vtc_S19505C15[0]), // expected_vtbl_contents
  &(vtt_S19505C15[0]), // expected_vtt_contents
  ABISELECT(1664,1236), // object size
  NSPAIRA(_ZTI9S19505C15),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19505C15),32, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19505C15),16, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names37,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19505C13  : S3052C10 , virtual S19505C3 {
  void *s19505c13f0;
  char s19505c13f1[4];
  int s19505c13f2:11;
  void *s19505c13f3;
  void *s19505c13f4;
  int s19505c13f5[6];
  ::S19505C15 s19505c13f6[6];
  ~S19505C13(); // tgen
  S19505C13(); // tgen
};
//SIG(-1 S19505C13) C1{ BC2{ m Fp Fi FL Fp Fi} VBC3{ VBC4{ vd v1 Fs[6] FL[8] Fi} BC5{ VBC4 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp Fc[4] Fi:11 Fp[2] Fi[6] FC6{ VBC4 BC3 BC7{ VBC4 BC3 Fp[3] Fc:8 Fi[2] Fc FC4 Fp[3] FL[5] Fi} BC8{ vd m FC9{ VBC10{ vd v6 Fs[6] FL[8] Fi} BC11{ VBC10 FL Fp FL:54} v4 v5 Fc:0 Fp[8] Fc}} VBC5 Fp Fl FC7 FC8 FC5 Fi[2] FU12{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]}


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

static void Test_S19505C13()
{
  extern Class_Descriptor cd_S19505C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(645,1909)];
    init_test(&cd_S19505C13, buf);
    S19505C13 *dp, &lv = *(dp=new (buf) S19505C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(10304,7632), "sizeof(S19505C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19505C13)");
    check_base_class_offset(lv, (S3052C10*), ABISELECT(8,4), "S19505C13");
    check_base_class_offset(lv, (S19505C4*)(S19505C3*), ABISELECT(10200,7548), "S19505C13");
    check_base_class_offset(lv, (S19505C4*)(S19505C5*)(S19505C3*), ABISELECT(10200,7548), "S19505C13");
    check_base_class_offset(lv, (S19505C5*)(S19505C3*), ABISELECT(10096,7488), "S19505C13");
    check_base_class_offset(lv, (S19505C3*), ABISELECT(10096,7488), "S19505C13");
    check_field_offset(lv, s19505c13f0, ABISELECT(48,28), "S19505C13.s19505c13f0");
    check_field_offset(lv, s19505c13f1, ABISELECT(56,32), "S19505C13.s19505c13f1");
    set_bf_and_test(lv, s19505c13f2, ABISELECT(60,36), 0, 11, 1, "S19505C13");
    set_bf_and_test(lv, s19505c13f2, ABISELECT(60,36), 0, 11, hide_sll(1LL<<10), "S19505C13");
    check_field_offset(lv, s19505c13f3, ABISELECT(64,40), "S19505C13.s19505c13f3");
    check_field_offset(lv, s19505c13f4, ABISELECT(72,44), "S19505C13.s19505c13f4");
    check_field_offset(lv, s19505c13f5, ABISELECT(80,48), "S19505C13.s19505c13f5");
    check_field_offset(lv, s19505c13f6, ABISELECT(112,72), "S19505C13.s19505c13f6");
    test_class_info(&lv, &cd_S19505C13);
    dp->~S19505C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19505C13(Test_S19505C13, "S19505C13", ABISELECT(10304,7632));

#else // __cplusplus

extern void _ZN9S19505C13C1Ev();
extern void _ZN9S19505C13D1Ev();
Name_Map name_map_S19505C13[] = {
  NSPAIR(_ZN9S19505C13C1Ev),
  NSPAIR(_ZN9S19505C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S19505C4;
extern VTBL_ENTRY _ZTI8S19505C4[];
extern  VTBL_ENTRY _ZTV8S19505C4[];
extern Class_Descriptor cd_S19505C5;
extern VTBL_ENTRY _ZTI8S19505C5[];
extern  VTBL_ENTRY _ZTV8S19505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C5[];
extern Class_Descriptor cd_S19505C3;
extern VTBL_ENTRY _ZTI8S19505C3[];
extern  VTBL_ENTRY _ZTV8S19505C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C3[];
static Base_Class bases_S19505C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C10,    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_S19505C4,    ABISELECT(10200,7548), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //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_S19505C5,    ABISELECT(10096,7488), //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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19505C3,    ABISELECT(10096,7488), //bcp->offset
    6, //bcp->virtual_function_table_offset
    6, //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},
  {0}};
extern VTBL_ENTRY _ZTI9S19505C13[];
extern void _ZN9S19505C13D1Ev();
extern void _ZN9S19505C13D0Ev();
extern void ABISELECT(_ZTv0_n32_N9S19505C13D1Ev,_ZTv0_n16_N9S19505C13D1Ev)();
extern void ABISELECT(_ZThn10096_N9S19505C13D1Ev,_ZThn7488_N9S19505C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19505C13D0Ev,_ZTv0_n16_N9S19505C13D0Ev)();
extern void ABISELECT(_ZThn10096_N9S19505C13D0Ev,_ZThn7488_N9S19505C13D0Ev)() __attribute__((weak));
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
extern void ABISELECT(_ZTv0_n24_N9S19505C13D1Ev,_ZTv0_n12_N9S19505C13D1Ev)();
extern void ABISELECT(_ZThn10200_N9S19505C13D1Ev,_ZThn7548_N9S19505C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19505C13D0Ev,_ZTv0_n12_N9S19505C13D0Ev)();
extern void ABISELECT(_ZThn10200_N9S19505C13D0Ev,_ZThn7548_N9S19505C13D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY vtc_S19505C13[] = {
  ABISELECT(10200,7548),
  ABISELECT(10096,7488),
  0,
  (VTBL_ENTRY)&(_ZTI9S19505C13[0]),
  (VTBL_ENTRY)&_ZN9S19505C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19505C13D0Ev,
  0,
  0,
  ABISELECT(-10096,-7488),
  ABISELECT(104,60),
  ABISELECT(-10096,-7488),
  (VTBL_ENTRY)&(_ZTI9S19505C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C13D1Ev,_ZTv0_n16_N9S19505C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C13D0Ev,_ZTv0_n16_N9S19505C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
  0,
  ABISELECT(-10200,-7548),
  ABISELECT(-10200,-7548),
  (VTBL_ENTRY)&(_ZTI9S19505C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C13D1Ev,_ZTv0_n12_N9S19505C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C13D0Ev,_ZTv0_n12_N9S19505C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern VTBL_ENTRY _ZTV9S19505C13[];
extern void _ZN8S19505C3D1Ev();
extern void _ZN8S19505C3D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C3__9S19505C13[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&_ZN8S19505C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C5D1Ev();
extern void _ZN8S19505C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C58S19505C3__9S19505C13[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&_ZN8S19505C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev)();
extern void ABISELECT(_ZThn104_N8S19505C5D1Ev,_ZThn60_N8S19505C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev)();
extern void ABISELECT(_ZThn104_N8S19505C5D0Ev,_ZThn60_N8S19505C5D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C58S19505C3__9S19505C13[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev)();
extern void ABISELECT(_ZThn104_N8S19505C3D1Ev,_ZThn60_N8S19505C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev)();
extern void ABISELECT(_ZThn104_N8S19505C3D0Ev,_ZThn60_N8S19505C3D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C3__9S19505C13[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
static  VTT_ENTRY vtt_S19505C13[] = {
  {&(_ZTV9S19505C13[4]),  4,23},
  {&(_ZTV9S19505C13[12]),  12,23},
  {&(_ZTV9S19505C13[20]),  20,23},
  {&(_tg__ZTV8S19505C3__9S19505C13[3]),  3,7},
  {&(_tg__ZTV8S19505C58S19505C3__9S19505C13[3]),  3,5},
  {&(_tg__ZTV8S19505C4__8S19505C58S19505C3__9S19505C13[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C3__9S19505C13[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S19505C13[];
extern  VTBL_ENTRY _ZTV9S19505C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19505C13[];
static VTBL_ENTRY alt_thunk_names38[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19505C3D0Ev,_ZThn60_N8S19505C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19505C3D1Ev,_ZThn60_N8S19505C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19505C5D0Ev,_ZThn60_N8S19505C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19505C5D1Ev,_ZThn60_N8S19505C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19505C13D0Ev,_ZTv0_n12_N9S19505C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10200_N9S19505C13D0Ev,_ZThn7548_N9S19505C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19505C13D1Ev,_ZTv0_n12_N9S19505C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10200_N9S19505C13D1Ev,_ZThn7548_N9S19505C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19505C13D0Ev,_ZTv0_n16_N9S19505C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10096_N9S19505C13D0Ev,_ZThn7488_N9S19505C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19505C13D1Ev,_ZTv0_n16_N9S19505C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10096_N9S19505C13D1Ev,_ZThn7488_N9S19505C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19505C13 = {  "S19505C13", // class name
  bases_S19505C13, 4,
  &(vtc_S19505C13[0]), // expected_vtbl_contents
  &(vtt_S19505C13[0]), // expected_vtt_contents
  ABISELECT(10304,7632), // object size
  NSPAIRA(_ZTI9S19505C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19505C13),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19505C13),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names38,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19505C12  : virtual S19505C3 , virtual S19505C13 , S19505C6 {
  void *s19505c12f0;
  ::S3052C22_nt s19505c12f1;
  ::S19505C4 s19505c12f2;
  __tsi64 s19505c12f3;
  ::S3052C13 s19505c12f4;
  __tsi64 s19505c12f5[6];
  __tsi64 s19505c12f6;
  ::S19505C8 s19505c12f7;
  virtual void  v7(); // _ZN9S19505C122v7Ev
  ~S19505C12(); // tgen
  S19505C12(); // tgen
};
//SIG(-1 S19505C12) C1{ VBC2{ VBC3{ vd v2 Fs[6] FL[8] Fi} BC4{ VBC3 FL Fp FL:54} v3 v4 Fc:0 Fp[8] Fc} VBC5{ BC6{ m Fp Fi FL Fp Fi} VBC2 Fp Fc[4] Fi:11 Fp[2] Fi[6] FC7{ VBC3 BC2 BC8{ VBC3 BC2 Fp[3] Fc:8 Fi[2] Fc FC3 Fp[3] FL[5] Fi} BC9{ vd m FC10{ VBC11{ vd v8 Fs[6] FL[8] Fi} BC12{ VBC11 FL Fp FL:54} v6 v7 Fc:0 Fp[8] Fc}} VBC4 Fp Fl FC8 FC9 FC4 Fi[2] FU13{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} BC14{ BC9 VBC3 VBC2 v5 FC2[2] FD FC9 Fp[3] FC8 Fi FU15{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi} v1 Fp FC16{} FC3 FL FU13 FL[6] FL FC8}


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

static void Test_S19505C12()
{
  extern Class_Descriptor cd_S19505C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(764,2264)];
    init_test(&cd_S19505C12, buf);
    S19505C12 *dp, &lv = *(dp=new (buf) S19505C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12208,9052), "sizeof(S19505C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19505C12)");
    check_base_class_offset(lv, (S19505C4*)(S19505C3*), ABISELECT(2008,1480), "S19505C12");
    check_base_class_offset(lv, (S19505C4*)(S19505C5*)(S19505C3*), ABISELECT(2008,1480), "S19505C12");
    check_base_class_offset(lv, (S19505C4*)(S19505C6*), ABISELECT(2008,1480), "S19505C12");
    check_base_class_offset(lv, (S19505C5*)(S19505C3*), ABISELECT(1904,1420), "S19505C12");
    check_base_class_offset(lv, (S19505C3*), ABISELECT(1904,1420), "S19505C12");
    check_base_class_offset(lv, (S19505C3*)(S19505C13*), ABISELECT(1904,1420), "S19505C12");
    check_base_class_offset(lv, (S19505C3*)(S19505C6*), ABISELECT(1904,1420), "S19505C12");
    check_base_class_offset(lv, (S3052C10*)(S19505C13*), ABISELECT(2120,1568), "S19505C12");
    check_base_class_offset(lv, (S19505C13*), ABISELECT(2112,1564), "S19505C12");
    check_base_class_offset(lv, (S3052C12*)(S19505C6*), 0, "S19505C12");
    check_base_class_offset(lv, (S19505C6*), 0, "S19505C12");
    check_field_offset(lv, s19505c12f0, ABISELECT(1296,940), "S19505C12.s19505c12f0");
    check_field_offset(lv, s19505c12f1, ABISELECT(1304,944), "S19505C12.s19505c12f1");
    check_field_offset(lv, s19505c12f2, ABISELECT(1312,948), "S19505C12.s19505c12f2");
    check_field_offset(lv, s19505c12f3, ABISELECT(1408,1032), "S19505C12.s19505c12f3");
    check_field_offset(lv, s19505c12f4, ABISELECT(1424,1040), "S19505C12.s19505c12f4");
    check_field_offset(lv, s19505c12f5, ABISELECT(1440,1052), "S19505C12.s19505c12f5");
    check_field_offset(lv, s19505c12f6, ABISELECT(1488,1100), "S19505C12.s19505c12f6");
    check_field_offset(lv, s19505c12f7, ABISELECT(1496,1108), "S19505C12.s19505c12f7");
    test_class_info(&lv, &cd_S19505C12);
    dp->~S19505C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19505C12(Test_S19505C12, "S19505C12", ABISELECT(12208,9052));

#else // __cplusplus

extern void _ZN9S19505C12C1Ev();
extern void _ZN9S19505C12D1Ev();
Name_Map name_map_S19505C12[] = {
  NSPAIR(_ZN9S19505C12C1Ev),
  NSPAIR(_ZN9S19505C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19505C4;
extern VTBL_ENTRY _ZTI8S19505C4[];
extern  VTBL_ENTRY _ZTV8S19505C4[];
extern Class_Descriptor cd_S19505C5;
extern VTBL_ENTRY _ZTI8S19505C5[];
extern  VTBL_ENTRY _ZTV8S19505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C5[];
extern Class_Descriptor cd_S19505C3;
extern VTBL_ENTRY _ZTI8S19505C3[];
extern  VTBL_ENTRY _ZTV8S19505C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C3[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S19505C13;
extern VTBL_ENTRY _ZTI9S19505C13[];
extern  VTBL_ENTRY _ZTV9S19505C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19505C13[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S19505C6;
extern VTBL_ENTRY _ZTI8S19505C6[];
extern  VTBL_ENTRY _ZTV8S19505C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C6[];
static Base_Class bases_S19505C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19505C4,    ABISELECT(2008,1480), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //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_S19505C5,    ABISELECT(1904,1420), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19505C3,    ABISELECT(1904,1420), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //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},
  {&cd_S3052C10,    ABISELECT(2120,1568), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19505C13,    ABISELECT(2112,1564), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S19505C6,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19505C12[];
extern void _ZN9S19505C12D1Ev();
extern void _ZN9S19505C12D0Ev();
extern void _ZN8S19505C62v4Ev();
extern void _ZN9S19505C122v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19505C12D1Ev,_ZTv0_n16_N9S19505C12D1Ev)();
extern void ABISELECT(_ZThn1904_N9S19505C12D1Ev,_ZThn1420_N9S19505C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19505C12D0Ev,_ZTv0_n16_N9S19505C12D0Ev)();
extern void ABISELECT(_ZThn1904_N9S19505C12D0Ev,_ZThn1420_N9S19505C12D0Ev)() __attribute__((weak));
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
extern void ABISELECT(_ZTv0_n24_N9S19505C12D1Ev,_ZTv0_n12_N9S19505C12D1Ev)();
extern void ABISELECT(_ZThn2008_N9S19505C12D1Ev,_ZThn1480_N9S19505C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19505C12D0Ev,_ZTv0_n12_N9S19505C12D0Ev)();
extern void ABISELECT(_ZThn2008_N9S19505C12D0Ev,_ZThn1480_N9S19505C12D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
extern void ABISELECT(_ZTv0_n40_N9S19505C12D1Ev,_ZTv0_n20_N9S19505C12D1Ev)();
extern void ABISELECT(_ZThn2112_N9S19505C12D1Ev,_ZThn1564_N9S19505C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19505C12D0Ev,_ZTv0_n20_N9S19505C12D0Ev)();
extern void ABISELECT(_ZThn2112_N9S19505C12D0Ev,_ZThn1564_N9S19505C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19505C12[] = {
  ABISELECT(2112,1564),
  ABISELECT(1904,1420),
  ABISELECT(2008,1480),
  0,
  (VTBL_ENTRY)&(_ZTI9S19505C12[0]),
  (VTBL_ENTRY)&_ZN9S19505C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19505C12D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C62v4Ev,
  (VTBL_ENTRY)&_ZN9S19505C122v7Ev,
  0,
  0,
  ABISELECT(-1904,-1420),
  ABISELECT(104,60),
  ABISELECT(-1904,-1420),
  (VTBL_ENTRY)&(_ZTI9S19505C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C12D1Ev,_ZTv0_n16_N9S19505C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C12D0Ev,_ZTv0_n16_N9S19505C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
  0,
  ABISELECT(-2008,-1480),
  ABISELECT(-2008,-1480),
  (VTBL_ENTRY)&(_ZTI9S19505C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C12D1Ev,_ZTv0_n12_N9S19505C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C12D0Ev,_ZTv0_n12_N9S19505C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
  ABISELECT(-2112,-1564),
  ABISELECT(-104,-84),
  ABISELECT(-208,-144),
  ABISELECT(-2112,-1564),
  (VTBL_ENTRY)&(_ZTI9S19505C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19505C12D1Ev,_ZTv0_n20_N9S19505C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19505C12D0Ev,_ZTv0_n20_N9S19505C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S19505C12[];
extern void _ZN8S19505C6D1Ev();
extern void _ZN8S19505C6D0Ev();
extern void _ZN8S19505C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C6__9S19505C12[] = {
  ABISELECT(1904,1420),
  ABISELECT(2008,1480),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C6[0]),
  (VTBL_ENTRY)&_ZN8S19505C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C62v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C6D1Ev,_ZTv0_n12_N8S19505C6D1Ev)();
extern void ABISELECT(_ZThn2008_N8S19505C6D1Ev,_ZThn1480_N8S19505C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C6D0Ev,_ZTv0_n12_N8S19505C6D0Ev)();
extern void ABISELECT(_ZThn2008_N8S19505C6D0Ev,_ZThn1480_N8S19505C6D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C6__9S19505C12[] = {
  0,
  ABISELECT(-2008,-1480),
  ABISELECT(-2008,-1480),
  (VTBL_ENTRY)&(_ZTI8S19505C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C6D1Ev,_ZTv0_n12_N8S19505C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C6D0Ev,_ZTv0_n12_N8S19505C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19505C6D1Ev,_ZTv0_n16_N8S19505C6D1Ev)();
extern void ABISELECT(_ZThn1904_N8S19505C6D1Ev,_ZThn1420_N8S19505C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19505C6D0Ev,_ZTv0_n16_N8S19505C6D0Ev)();
extern void ABISELECT(_ZThn1904_N8S19505C6D0Ev,_ZThn1420_N8S19505C6D0Ev)() __attribute__((weak));
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C3__8S19505C6__9S19505C12[] = {
  0,
  0,
  ABISELECT(-1904,-1420),
  ABISELECT(104,60),
  ABISELECT(-1904,-1420),
  (VTBL_ENTRY)&(_ZTI8S19505C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19505C6D1Ev,_ZTv0_n16_N8S19505C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19505C6D0Ev,_ZTv0_n16_N8S19505C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C3D1Ev();
extern void _ZN8S19505C3D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C3__9S19505C12[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&_ZN8S19505C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C5D1Ev();
extern void _ZN8S19505C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C58S19505C3__9S19505C12[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&_ZN8S19505C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev)();
extern void ABISELECT(_ZThn104_N8S19505C5D1Ev,_ZThn60_N8S19505C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev)();
extern void ABISELECT(_ZThn104_N8S19505C5D0Ev,_ZThn60_N8S19505C5D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C58S19505C3__9S19505C12[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev)();
extern void ABISELECT(_ZThn104_N8S19505C3D1Ev,_ZThn60_N8S19505C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev)();
extern void ABISELECT(_ZThn104_N8S19505C3D0Ev,_ZThn60_N8S19505C3D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C3__9S19505C12[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void _ZN9S19505C13D1Ev();
extern void _ZN9S19505C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19505C13__9S19505C12[] = {
  ABISELECT(-104,-84),
  ABISELECT(-208,-144),
  0,
  (VTBL_ENTRY)&(_ZTI9S19505C13[0]),
  (VTBL_ENTRY)&_ZN9S19505C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19505C13D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19505C13D1Ev,_ZTv0_n16_N9S19505C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19505C13D0Ev,_ZTv0_n16_N9S19505C13D0Ev)();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C3__9S19505C13__9S19505C12[] = {
  0,
  0,
  ABISELECT(208,144),
  ABISELECT(104,60),
  ABISELECT(208,144),
  (VTBL_ENTRY)&(_ZTI9S19505C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C13D1Ev,_ZTv0_n16_N9S19505C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C13D0Ev,_ZTv0_n16_N9S19505C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19505C13D1Ev,_ZTv0_n12_N9S19505C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19505C13D0Ev,_ZTv0_n12_N9S19505C13D0Ev)();
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__9S19505C13__9S19505C12[] = {
  0,
  ABISELECT(104,84),
  ABISELECT(104,84),
  (VTBL_ENTRY)&(_ZTI9S19505C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C13D1Ev,_ZTv0_n12_N9S19505C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C13D0Ev,_ZTv0_n12_N9S19505C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
static  VTT_ENTRY vtt_S19505C12[] = {
  {&(_ZTV9S19505C12[5]),  5,33},
  {&(_tg__ZTV8S19505C6__9S19505C12[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C6__9S19505C12[4]),  4,7},
  {&(_tg__ZTV8S19505C3__8S19505C6__9S19505C12[6]),  6,10},
  {&(_ZTV9S19505C12[15]),  15,33},
  {&(_ZTV9S19505C12[23]),  23,33},
  {&(_ZTV9S19505C12[31]),  31,33},
  {&(_tg__ZTV8S19505C3__9S19505C12[3]),  3,7},
  {&(_tg__ZTV8S19505C58S19505C3__9S19505C12[3]),  3,5},
  {&(_tg__ZTV8S19505C4__8S19505C58S19505C3__9S19505C12[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C3__9S19505C12[4]),  4,7},
  {&(_tg__ZTV9S19505C13__9S19505C12[4]),  4,6},
  {&(_tg__ZTV8S19505C3__9S19505C13__9S19505C12[6]),  6,10},
  {&(_tg__ZTV8S19505C4__9S19505C13__9S19505C12[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S19505C12[];
extern  VTBL_ENTRY _ZTV9S19505C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19505C12[];
static VTBL_ENTRY alt_thunk_names39[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19505C3D0Ev,_ZThn60_N8S19505C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19505C3D1Ev,_ZThn60_N8S19505C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19505C5D0Ev,_ZThn60_N8S19505C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19505C5D1Ev,_ZThn60_N8S19505C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19505C6D0Ev,_ZTv0_n16_N8S19505C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N8S19505C6D0Ev,_ZThn1420_N8S19505C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19505C6D1Ev,_ZTv0_n16_N8S19505C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N8S19505C6D1Ev,_ZThn1420_N8S19505C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C6D0Ev,_ZTv0_n12_N8S19505C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2008_N8S19505C6D0Ev,_ZThn1480_N8S19505C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C6D1Ev,_ZTv0_n12_N8S19505C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2008_N8S19505C6D1Ev,_ZThn1480_N8S19505C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19505C12D0Ev,_ZTv0_n20_N9S19505C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N9S19505C12D0Ev,_ZThn1564_N9S19505C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19505C12D1Ev,_ZTv0_n20_N9S19505C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N9S19505C12D1Ev,_ZThn1564_N9S19505C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19505C12D0Ev,_ZTv0_n12_N9S19505C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2008_N9S19505C12D0Ev,_ZThn1480_N9S19505C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19505C12D1Ev,_ZTv0_n12_N9S19505C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2008_N9S19505C12D1Ev,_ZThn1480_N9S19505C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19505C12D0Ev,_ZTv0_n16_N9S19505C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S19505C12D0Ev,_ZThn1420_N9S19505C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19505C12D1Ev,_ZTv0_n16_N9S19505C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S19505C12D1Ev,_ZThn1420_N9S19505C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19505C12 = {  "S19505C12", // class name
  bases_S19505C12, 7,
  &(vtc_S19505C12[0]), // expected_vtbl_contents
  &(vtt_S19505C12[0]), // expected_vtt_contents
  ABISELECT(12208,9052), // object size
  NSPAIRA(_ZTI9S19505C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19505C12),33, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19505C12),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names39,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19505C19  : virtual S19505C4 , S19505C8 , virtual S19505C5 , virtual S19505C3 {
  void *s19505c19f0;
  void *s19505c19f1[5];
  void *s19505c19f2;
  virtual  ~S19505C19(); // _ZN9S19505C19D2Ev
  S19505C19(); // tgen
};
//SIG(-1 S19505C19) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} BC3{ VBC2 BC4{ VBC2 BC5{ VBC2 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC2 Fp[3] FL[5] Fi} VBC5 VBC4 vd Fp[7]}


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

static void Test_S19505C19()
{
  extern Class_Descriptor cd_S19505C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(76,107)];
    init_test(&cd_S19505C19, buf);
    S19505C19 *dp, &lv = *(dp=new (buf) S19505C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(600,424), "sizeof(S19505C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19505C19)");
    check_base_class_offset(lv, (S19505C4*), ABISELECT(368,256), "S19505C19");
    check_base_class_offset(lv, (S19505C4*)(S19505C8*), ABISELECT(368,256), "S19505C19");
    check_base_class_offset(lv, (S19505C4*)(S19505C3*)(S19505C8*), ABISELECT(368,256), "S19505C19");
    check_base_class_offset(lv, (S19505C4*)(S19505C5*)(S19505C3*)(S19505C8*), ABISELECT(368,256), "S19505C19");
    /*is_ambiguous_... S19505C19::S19505C5 */ AMB_check_base_class_offset(lv, (S19505C4*)(S19505C5*), ABISELECT(368,256), "S19505C19");
    /*is_ambiguous_... S19505C19::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C4*)(S19505C3*), ABISELECT(368,256), "S19505C19");
    /*is_ambiguous_... S19505C19::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C4*)(S19505C5*)(S19505C3*), ABISELECT(368,256), "S19505C19");
    check_base_class_offset(lv, (S19505C5*)(S19505C3*)(S19505C8*), 0, "S19505C19");
    check_base_class_offset(lv, (S19505C3*)(S19505C8*), 0, "S19505C19");
    check_base_class_offset(lv, (S19505C8*), 0, "S19505C19");
    /*is_ambiguous_... S19505C19::S19505C5 */ AMB_check_base_class_offset(lv, (S19505C5*), ABISELECT(464,340), "S19505C19");
    /*is_ambiguous_... S19505C19::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C5*)(S19505C3*), ABISELECT(496,364), "S19505C19");
    /*is_ambiguous_... S19505C19::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C3*), ABISELECT(496,364), "S19505C19");
    check_field_offset(lv, s19505c19f0, ABISELECT(312,228), "S19505C19.s19505c19f0");
    check_field_offset(lv, s19505c19f1, ABISELECT(320,232), "S19505C19.s19505c19f1");
    check_field_offset(lv, s19505c19f2, ABISELECT(360,252), "S19505C19.s19505c19f2");
    test_class_info(&lv, &cd_S19505C19);
    dp->~S19505C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19505C19(Test_S19505C19, "S19505C19", ABISELECT(600,424));

#else // __cplusplus

extern void _ZN9S19505C19C1Ev();
extern void _ZN9S19505C19D2Ev();
Name_Map name_map_S19505C19[] = {
  NSPAIR(_ZN9S19505C19C1Ev),
  NSPAIR(_ZN9S19505C19D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19505C4;
extern VTBL_ENTRY _ZTI8S19505C4[];
extern  VTBL_ENTRY _ZTV8S19505C4[];
extern Class_Descriptor cd_S19505C5;
extern VTBL_ENTRY _ZTI8S19505C5[];
extern  VTBL_ENTRY _ZTV8S19505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C5[];
extern Class_Descriptor cd_S19505C3;
extern VTBL_ENTRY _ZTI8S19505C3[];
extern  VTBL_ENTRY _ZTV8S19505C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C3[];
extern Class_Descriptor cd_S19505C8;
extern VTBL_ENTRY _ZTI8S19505C8[];
extern  VTBL_ENTRY _ZTV8S19505C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C8[];
extern Class_Descriptor cd_S19505C5;
extern VTBL_ENTRY _ZTI8S19505C5[];
extern  VTBL_ENTRY _ZTV8S19505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C5[];
extern Class_Descriptor cd_S19505C5;
extern VTBL_ENTRY _ZTI8S19505C5[];
extern  VTBL_ENTRY _ZTV8S19505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C5[];
extern Class_Descriptor cd_S19505C3;
extern VTBL_ENTRY _ZTI8S19505C3[];
extern  VTBL_ENTRY _ZTV8S19505C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C3[];
static Base_Class bases_S19505C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19505C4,    ABISELECT(368,256), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S19505C5,    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
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19505C3,    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
    6, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19505C8,    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_S19505C5,    ABISELECT(464,340), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19505C5,    ABISELECT(496,364), //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
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19505C3,    ABISELECT(496,364), //bcp->offset
    22, //bcp->virtual_function_table_offset
    6, //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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19505C19[];
extern void _ZN9S19505C19D1Ev();
extern void _ZN9S19505C19D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
extern void ABISELECT(_ZTv0_n24_N9S19505C19D1Ev,_ZTv0_n12_N9S19505C19D1Ev)();
extern void ABISELECT(_ZThn368_N9S19505C19D1Ev,_ZThn256_N9S19505C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19505C19D0Ev,_ZTv0_n12_N9S19505C19D0Ev)();
extern void ABISELECT(_ZThn368_N9S19505C19D0Ev,_ZThn256_N9S19505C19D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19505C19D1Ev,_ZTv0_n16_N9S19505C19D1Ev)();
extern void ABISELECT(_ZThn464_N9S19505C19D1Ev,_ZThn340_N9S19505C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19505C19D0Ev,_ZTv0_n16_N9S19505C19D0Ev)();
extern void ABISELECT(_ZThn464_N9S19505C19D0Ev,_ZThn340_N9S19505C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19505C19D1Ev,_ZTv0_n16_N9S19505C19D1Ev)();
extern void ABISELECT(_ZThn496_N9S19505C19D1Ev,_ZThn364_N9S19505C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19505C19D0Ev,_ZTv0_n16_N9S19505C19D0Ev)();
extern void ABISELECT(_ZThn496_N9S19505C19D0Ev,_ZThn364_N9S19505C19D0Ev)() __attribute__((weak));
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY vtc_S19505C19[] = {
  ABISELECT(496,364),
  ABISELECT(464,340),
  ABISELECT(368,256),
  0,
  (VTBL_ENTRY)&(_ZTI9S19505C19[0]),
  (VTBL_ENTRY)&_ZN9S19505C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19505C19D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
  0,
  ABISELECT(-368,-256),
  ABISELECT(-368,-256),
  (VTBL_ENTRY)&(_ZTI9S19505C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C19D1Ev,_ZTv0_n12_N9S19505C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C19D0Ev,_ZTv0_n12_N9S19505C19D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
  ABISELECT(-464,-340),
  ABISELECT(-96,-84),
  ABISELECT(-464,-340),
  (VTBL_ENTRY)&(_ZTI9S19505C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C19D1Ev,_ZTv0_n16_N9S19505C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C19D0Ev,_ZTv0_n16_N9S19505C19D0Ev),
  0,
  0,
  ABISELECT(-496,-364),
  ABISELECT(-128,-108),
  ABISELECT(-496,-364),
  (VTBL_ENTRY)&(_ZTI9S19505C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C19D1Ev,_ZTv0_n16_N9S19505C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C19D0Ev,_ZTv0_n16_N9S19505C19D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern VTBL_ENTRY _ZTV9S19505C19[];
extern void _ZN8S19505C8D1Ev();
extern void _ZN8S19505C8D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C8__9S19505C19[] = {
  ABISELECT(368,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C8[0]),
  (VTBL_ENTRY)&_ZN8S19505C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C3D1Ev();
extern void _ZN8S19505C3D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C38S19505C8__9S19505C19[] = {
  ABISELECT(368,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&_ZN8S19505C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C5D1Ev();
extern void _ZN8S19505C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C58S19505C38S19505C8__9S19505C19[] = {
  ABISELECT(368,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&_ZN8S19505C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev)();
extern void ABISELECT(_ZThn368_N8S19505C5D1Ev,_ZThn256_N8S19505C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev)();
extern void ABISELECT(_ZThn368_N8S19505C5D0Ev,_ZThn256_N8S19505C5D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C58S19505C38S19505C8__9S19505C19[] = {
  0,
  ABISELECT(-368,-256),
  ABISELECT(-368,-256),
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev)();
extern void ABISELECT(_ZThn368_N8S19505C3D1Ev,_ZThn256_N8S19505C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev)();
extern void ABISELECT(_ZThn368_N8S19505C3D0Ev,_ZThn256_N8S19505C3D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C38S19505C8__9S19505C19[] = {
  0,
  ABISELECT(-368,-256),
  ABISELECT(-368,-256),
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C8D1Ev,_ZTv0_n12_N8S19505C8D1Ev)();
extern void ABISELECT(_ZThn368_N8S19505C8D1Ev,_ZThn256_N8S19505C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C8D0Ev,_ZTv0_n12_N8S19505C8D0Ev)();
extern void ABISELECT(_ZThn368_N8S19505C8D0Ev,_ZThn256_N8S19505C8D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C8__9S19505C19[] = {
  0,
  ABISELECT(-368,-256),
  ABISELECT(-368,-256),
  (VTBL_ENTRY)&(_ZTI8S19505C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C8D1Ev,_ZTv0_n12_N8S19505C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C8D0Ev,_ZTv0_n12_N8S19505C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void _ZN8S19505C5D1Ev();
extern void _ZN8S19505C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C5__A1__9S19505C19[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&_ZN8S19505C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev)();
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C5__A1__9S19505C19[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void _ZN8S19505C3D1Ev();
extern void _ZN8S19505C3D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C3__A1__9S19505C19[] = {
  ABISELECT(-128,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&_ZN8S19505C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C5D1Ev();
extern void _ZN8S19505C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C58S19505C3__A2__9S19505C19[] = {
  ABISELECT(-128,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&_ZN8S19505C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev)();
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C58S19505C3__A2__9S19505C19[] = {
  0,
  ABISELECT(128,108),
  ABISELECT(128,108),
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev)();
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C3__A1__9S19505C19[] = {
  0,
  ABISELECT(128,108),
  ABISELECT(128,108),
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
static  VTT_ENTRY vtt_S19505C19[] = {
  {&(_ZTV9S19505C19[5]),  5,32},
  {&(_tg__ZTV8S19505C8__9S19505C19[3]),  3,7},
  {&(_tg__ZTV8S19505C38S19505C8__9S19505C19[3]),  3,7},
  {&(_tg__ZTV8S19505C58S19505C38S19505C8__9S19505C19[3]),  3,5},
  {&(_tg__ZTV8S19505C4__8S19505C58S19505C38S19505C8__9S19505C19[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C38S19505C8__9S19505C19[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C8__9S19505C19[4]),  4,7},
  {&(_ZTV9S19505C19[13]),  13,32},
  {&(_ZTV9S19505C19[20]),  20,32},
  {&(_ZTV9S19505C19[28]),  28,32},
  {&(_tg__ZTV8S19505C5__A1__9S19505C19[3]),  3,5},
  {&(_tg__ZTV8S19505C4__8S19505C5__A1__9S19505C19[4]),  4,7},
  {&(_tg__ZTV8S19505C3__A1__9S19505C19[3]),  3,7},
  {&(_tg__ZTV8S19505C58S19505C3__A2__9S19505C19[3]),  3,5},
  {&(_tg__ZTV8S19505C4__8S19505C58S19505C3__A2__9S19505C19[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C3__A1__9S19505C19[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S19505C19[];
extern  VTBL_ENTRY _ZTV9S19505C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19505C19[];
static VTBL_ENTRY alt_thunk_names40[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C8D0Ev,_ZTv0_n12_N8S19505C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S19505C8D0Ev,_ZThn256_N8S19505C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C8D1Ev,_ZTv0_n12_N8S19505C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S19505C8D1Ev,_ZThn256_N8S19505C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S19505C3D0Ev,_ZThn256_N8S19505C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S19505C3D1Ev,_ZThn256_N8S19505C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S19505C5D0Ev,_ZThn256_N8S19505C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S19505C5D1Ev,_ZThn256_N8S19505C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19505C19D0Ev,_ZTv0_n16_N9S19505C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N9S19505C19D0Ev,_ZThn364_N9S19505C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn464_N9S19505C19D0Ev,_ZThn340_N9S19505C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19505C19D1Ev,_ZTv0_n16_N9S19505C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N9S19505C19D1Ev,_ZThn364_N9S19505C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn464_N9S19505C19D1Ev,_ZThn340_N9S19505C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19505C19D0Ev,_ZTv0_n12_N9S19505C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S19505C19D0Ev,_ZThn256_N9S19505C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19505C19D1Ev,_ZTv0_n12_N9S19505C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N9S19505C19D1Ev,_ZThn256_N9S19505C19D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19505C19 = {  "S19505C19", // class name
  bases_S19505C19, 7,
  &(vtc_S19505C19[0]), // expected_vtbl_contents
  &(vtt_S19505C19[0]), // expected_vtt_contents
  ABISELECT(600,424), // object size
  NSPAIRA(_ZTI9S19505C19),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19505C19),32, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19505C19),16, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names40,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19505C18  : S19505C6 , virtual S19505C5 , S19505C4 , S19505C19 {
  ::S19505C4 s19505c18f0[9];
  char s19505c18f1;
  int s19505c18f2;
  int s19505c18f3;
  int s19505c18f4;
  char s19505c18f5;
  virtual void  v8(); // _ZN9S19505C182v8Ev
  ~S19505C18(); // tgen
  S19505C18(); // tgen
};
//SIG(-1 S19505C18) C1{ BC2{ BC3{ vd m FC4{ VBC5{ vd v8 Fs[6] FL[8] Fi} BC6{ VBC5 FL Fp FL:54} v6 v7 Fc:0 Fp[8] Fc}} VBC7{ vd v2 Fs[6] FL[8] Fi} VBC8{ VBC7 BC9{ VBC7 FL Fp FL:54} v3 v4 Fc:0 Fp[8] Fc} v5 FC8[2] FD FC3 Fp[3] FC10{ VBC7 BC8 Fp[3] Fc:8 Fi[2] Fc FC7 Fp[3] FL[5] Fi} Fi FU11{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi} VBC9 BC7 BC12{ VBC7 BC10 VBC9 VBC8 vd Fp Fp[5] Fp} v1 FC7[9] Fc Fi Fi Fi Fc}


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

static void Test_S19505C18()
{
  extern Class_Descriptor cd_S19505C18;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(181,557)];
    init_test(&cd_S19505C18, buf);
    S19505C18 *dp, &lv = *(dp=new (buf) S19505C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2880,2224), "sizeof(S19505C18)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19505C18)");
    check_base_class_offset(lv, (S3052C12*)(S19505C6*), 0, "S19505C18");
    check_base_class_offset(lv, (S19505C4*)(S19505C6*), ABISELECT(2648,2056), "S19505C18");
    /*is_ambiguous_... S19505C18::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C4*)(S19505C3*), ABISELECT(2648,2056), "S19505C18");
    /*is_ambiguous_... S19505C18::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C4*)(S19505C5*)(S19505C3*), ABISELECT(2648,2056), "S19505C18");
    /*is_ambiguous_... S19505C18::S19505C5 */ AMB_check_base_class_offset(lv, (S19505C4*)(S19505C5*), ABISELECT(2648,2056), "S19505C18");
    check_base_class_offset(lv, (S19505C4*)(S19505C19*), ABISELECT(2648,2056), "S19505C18");
    check_base_class_offset(lv, (S19505C4*)(S19505C8*)(S19505C19*), ABISELECT(2648,2056), "S19505C18");
    check_base_class_offset(lv, (S19505C4*)(S19505C3*)(S19505C8*)(S19505C19*), ABISELECT(2648,2056), "S19505C18");
    check_base_class_offset(lv, (S19505C4*)(S19505C5*)(S19505C3*)(S19505C8*)(S19505C19*), ABISELECT(2648,2056), "S19505C18");
    /*is_ambiguous_... S19505C18::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C5*)(S19505C3*), ABISELECT(2744,2140), "S19505C18");
    check_base_class_offset(lv, (S19505C3*)(S19505C6*), ABISELECT(2744,2140), "S19505C18");
    /*is_ambiguous_... S19505C19::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C3*)(S19505C19*), ABISELECT(2744,2140), "S19505C18");
    check_base_class_offset(lv, (S19505C6*), 0, "S19505C18");
    /*is_ambiguous_... S19505C18::S19505C5 */ AMB_check_base_class_offset(lv, (S19505C5*), ABISELECT(2848,2200), "S19505C18");
    /*is_ambiguous_... S19505C19::S19505C5 */ AMB_check_base_class_offset(lv, (S19505C5*)(S19505C19*), ABISELECT(2848,2200), "S19505C18");
    /*is_ambiguous_... S19505C18::S19505C4 */ AMB_check_base_class_offset(lv, (S19505C4*), ABISELECT(1296,940), "S19505C18");
    check_base_class_offset(lv, (S19505C5*)(S19505C3*)(S19505C8*)(S19505C19*), ABISELECT(1392,1024), "S19505C18");
    check_base_class_offset(lv, (S19505C3*)(S19505C8*)(S19505C19*), ABISELECT(1392,1024), "S19505C18");
    check_base_class_offset(lv, (S19505C8*)(S19505C19*), ABISELECT(1392,1024), "S19505C18");
    check_base_class_offset(lv, (S19505C19*), ABISELECT(1392,1024), "S19505C18");
    check_field_offset(lv, s19505c18f0, ABISELECT(1760,1280), "S19505C18.s19505c18f0");
    check_field_offset(lv, s19505c18f1, ABISELECT(2624,2036), "S19505C18.s19505c18f1");
    check_field_offset(lv, s19505c18f2, ABISELECT(2628,2040), "S19505C18.s19505c18f2");
    check_field_offset(lv, s19505c18f3, ABISELECT(2632,2044), "S19505C18.s19505c18f3");
    check_field_offset(lv, s19505c18f4, ABISELECT(2636,2048), "S19505C18.s19505c18f4");
    check_field_offset(lv, s19505c18f5, ABISELECT(2640,2052), "S19505C18.s19505c18f5");
    test_class_info(&lv, &cd_S19505C18);
    dp->~S19505C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19505C18(Test_S19505C18, "S19505C18", ABISELECT(2880,2224));

#else // __cplusplus

extern void _ZN9S19505C18C1Ev();
extern void _ZN9S19505C18D1Ev();
Name_Map name_map_S19505C18[] = {
  NSPAIR(_ZN9S19505C18C1Ev),
  NSPAIR(_ZN9S19505C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S19505C4;
extern VTBL_ENTRY _ZTI8S19505C4[];
extern  VTBL_ENTRY _ZTV8S19505C4[];
extern Class_Descriptor cd_S19505C5;
extern VTBL_ENTRY _ZTI8S19505C5[];
extern  VTBL_ENTRY _ZTV8S19505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C5[];
extern Class_Descriptor cd_S19505C3;
extern VTBL_ENTRY _ZTI8S19505C3[];
extern  VTBL_ENTRY _ZTV8S19505C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C3[];
extern Class_Descriptor cd_S19505C6;
extern VTBL_ENTRY _ZTI8S19505C6[];
extern  VTBL_ENTRY _ZTV8S19505C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C6[];
extern Class_Descriptor cd_S19505C5;
extern VTBL_ENTRY _ZTI8S19505C5[];
extern  VTBL_ENTRY _ZTV8S19505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C5[];
extern Class_Descriptor cd_S19505C4;
extern VTBL_ENTRY _ZTI8S19505C4[];
extern  VTBL_ENTRY _ZTV8S19505C4[];
extern Class_Descriptor cd_S19505C5;
extern VTBL_ENTRY _ZTI8S19505C5[];
extern  VTBL_ENTRY _ZTV8S19505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C5[];
extern Class_Descriptor cd_S19505C3;
extern VTBL_ENTRY _ZTI8S19505C3[];
extern  VTBL_ENTRY _ZTV8S19505C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C3[];
extern Class_Descriptor cd_S19505C8;
extern VTBL_ENTRY _ZTI8S19505C8[];
extern  VTBL_ENTRY _ZTV8S19505C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C8[];
extern Class_Descriptor cd_S19505C19;
extern VTBL_ENTRY _ZTI9S19505C19[];
extern  VTBL_ENTRY _ZTV9S19505C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19505C19[];
static Base_Class bases_S19505C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    4, //immediately_derived
  0, 0},
  {&cd_S19505C4,    ABISELECT(2648,2056), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S19505C5,    ABISELECT(2744,2140), //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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S19505C3,    ABISELECT(2744,2140), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19505C6,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19505C5,    ABISELECT(2848,2200), //bcp->offset
    40, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19505C4,    ABISELECT(1296,940), //bcp->offset
    9, //bcp->virtual_function_table_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_S19505C5,    ABISELECT(1392,1024), //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
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19505C3,    ABISELECT(1392,1024), //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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19505C8,    ABISELECT(1392,1024), //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
    10, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19505C19,    ABISELECT(1392,1024), //bcp->offset
    14, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19505C18[];
extern void _ZN9S19505C18D1Ev();
extern void _ZN9S19505C18D0Ev();
extern void _ZN8S19505C62v4Ev();
extern void _ZN9S19505C182v8Ev();
extern void ABISELECT(_ZThn1296_N9S19505C18D1Ev,_ZThn940_N9S19505C18D1Ev)();
extern void ABISELECT(_ZThn1296_N9S19505C18D0Ev,_ZThn940_N9S19505C18D0Ev)();
extern void _ZN8S19505C42v1Ev();
extern void ABISELECT(_ZThn1392_N9S19505C18D1Ev,_ZThn1024_N9S19505C18D1Ev)();
extern void ABISELECT(_ZThn1392_N9S19505C18D0Ev,_ZThn1024_N9S19505C18D0Ev)();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
extern void ABISELECT(_ZTv0_n24_N9S19505C18D1Ev,_ZTv0_n12_N9S19505C18D1Ev)();
extern void ABISELECT(_ZThn2648_N9S19505C18D1Ev,_ZThn2056_N9S19505C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19505C18D0Ev,_ZTv0_n12_N9S19505C18D0Ev)();
extern void ABISELECT(_ZThn2648_N9S19505C18D0Ev,_ZThn2056_N9S19505C18D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S19505C18D1Ev,_ZTv0_n16_N9S19505C18D1Ev)();
extern void ABISELECT(_ZThn2744_N9S19505C18D1Ev,_ZThn2140_N9S19505C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19505C18D0Ev,_ZTv0_n16_N9S19505C18D0Ev)();
extern void ABISELECT(_ZThn2744_N9S19505C18D0Ev,_ZThn2140_N9S19505C18D0Ev)() __attribute__((weak));
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
extern void ABISELECT(_ZTv0_n32_N9S19505C18D1Ev,_ZTv0_n16_N9S19505C18D1Ev)();
extern void ABISELECT(_ZThn2848_N9S19505C18D1Ev,_ZThn2200_N9S19505C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19505C18D0Ev,_ZTv0_n16_N9S19505C18D0Ev)();
extern void ABISELECT(_ZThn2848_N9S19505C18D0Ev,_ZThn2200_N9S19505C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19505C18[] = {
  ABISELECT(2848,2200),
  ABISELECT(2744,2140),
  ABISELECT(2648,2056),
  0,
  (VTBL_ENTRY)&(_ZTI9S19505C18[0]),
  (VTBL_ENTRY)&_ZN9S19505C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19505C18D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C62v4Ev,
  (VTBL_ENTRY)&_ZN9S19505C182v8Ev,
  ABISELECT(-1296,-940),
  (VTBL_ENTRY)&(_ZTI9S19505C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N9S19505C18D1Ev,_ZThn940_N9S19505C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N9S19505C18D0Ev,_ZThn940_N9S19505C18D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
  ABISELECT(1352,1116),
  ABISELECT(1456,1176),
  ABISELECT(1256,1032),
  ABISELECT(-1392,-1024),
  (VTBL_ENTRY)&(_ZTI9S19505C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N9S19505C18D1Ev,_ZThn1024_N9S19505C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N9S19505C18D0Ev,_ZThn1024_N9S19505C18D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
  0,
  ABISELECT(-2648,-2056),
  ABISELECT(-2648,-2056),
  (VTBL_ENTRY)&(_ZTI9S19505C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C18D1Ev,_ZTv0_n12_N9S19505C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C18D0Ev,_ZTv0_n12_N9S19505C18D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
  0,
  0,
  ABISELECT(-2744,-2140),
  ABISELECT(-96,-84),
  ABISELECT(-2744,-2140),
  (VTBL_ENTRY)&(_ZTI9S19505C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C18D1Ev,_ZTv0_n16_N9S19505C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C18D0Ev,_ZTv0_n16_N9S19505C18D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
  ABISELECT(-2848,-2200),
  ABISELECT(-200,-144),
  ABISELECT(-2848,-2200),
  (VTBL_ENTRY)&(_ZTI9S19505C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C18D1Ev,_ZTv0_n16_N9S19505C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C18D0Ev,_ZTv0_n16_N9S19505C18D0Ev),
};
extern VTBL_ENTRY _ZTV9S19505C18[];
extern void _ZN8S19505C6D1Ev();
extern void _ZN8S19505C6D0Ev();
extern void _ZN8S19505C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C6__9S19505C18[] = {
  ABISELECT(2744,2140),
  ABISELECT(2648,2056),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C6[0]),
  (VTBL_ENTRY)&_ZN8S19505C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C62v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C6D1Ev,_ZTv0_n12_N8S19505C6D1Ev)();
extern void ABISELECT(_ZThn2648_N8S19505C6D1Ev,_ZThn2056_N8S19505C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C6D0Ev,_ZTv0_n12_N8S19505C6D0Ev)();
extern void ABISELECT(_ZThn2648_N8S19505C6D0Ev,_ZThn2056_N8S19505C6D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C6__9S19505C18[] = {
  0,
  ABISELECT(-2648,-2056),
  ABISELECT(-2648,-2056),
  (VTBL_ENTRY)&(_ZTI8S19505C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C6D1Ev,_ZTv0_n12_N8S19505C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C6D0Ev,_ZTv0_n12_N8S19505C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19505C6D1Ev,_ZTv0_n16_N8S19505C6D1Ev)();
extern void ABISELECT(_ZThn2744_N8S19505C6D1Ev,_ZThn2140_N8S19505C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19505C6D0Ev,_ZTv0_n16_N8S19505C6D0Ev)();
extern void ABISELECT(_ZThn2744_N8S19505C6D0Ev,_ZThn2140_N8S19505C6D0Ev)() __attribute__((weak));
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C3__8S19505C6__9S19505C18[] = {
  0,
  0,
  ABISELECT(-2744,-2140),
  ABISELECT(-96,-84),
  ABISELECT(-2744,-2140),
  (VTBL_ENTRY)&(_ZTI8S19505C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19505C6D1Ev,_ZTv0_n16_N8S19505C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19505C6D0Ev,_ZTv0_n16_N8S19505C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN9S19505C19D1Ev();
extern void _ZN9S19505C19D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV9S19505C19__9S19505C18[] = {
  ABISELECT(1352,1116),
  ABISELECT(1456,1176),
  ABISELECT(1256,1032),
  0,
  (VTBL_ENTRY)&(_ZTI9S19505C19[0]),
  (VTBL_ENTRY)&_ZN9S19505C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19505C19D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C8D1Ev();
extern void _ZN8S19505C8D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C89S19505C19__9S19505C18[] = {
  ABISELECT(1256,1032),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C8[0]),
  (VTBL_ENTRY)&_ZN8S19505C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C3D1Ev();
extern void _ZN8S19505C3D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C38S19505C89S19505C19__A1__9S19505C18[] = {
  ABISELECT(1256,1032),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&_ZN8S19505C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C5D1Ev();
extern void _ZN8S19505C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C58S19505C38S19505C89S19505C19__A2__9S19505C18[] = {
  ABISELECT(1256,1032),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&_ZN8S19505C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev)();
extern void ABISELECT(_ZThn1256_N8S19505C5D1Ev,_ZThn1032_N8S19505C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev)();
extern void ABISELECT(_ZThn1256_N8S19505C5D0Ev,_ZThn1032_N8S19505C5D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C58S19505C38S19505C89S19505C19__A2__9S19505C18[] = {
  0,
  ABISELECT(-1256,-1032),
  ABISELECT(-1256,-1032),
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev)();
extern void ABISELECT(_ZThn1256_N8S19505C3D1Ev,_ZThn1032_N8S19505C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev)();
extern void ABISELECT(_ZThn1256_N8S19505C3D0Ev,_ZThn1032_N8S19505C3D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C38S19505C89S19505C19__A1__9S19505C18[] = {
  0,
  ABISELECT(-1256,-1032),
  ABISELECT(-1256,-1032),
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C8D1Ev,_ZTv0_n12_N8S19505C8D1Ev)();
extern void ABISELECT(_ZThn1256_N8S19505C8D1Ev,_ZThn1032_N8S19505C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C8D0Ev,_ZTv0_n12_N8S19505C8D0Ev)();
extern void ABISELECT(_ZThn1256_N8S19505C8D0Ev,_ZThn1032_N8S19505C8D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C89S19505C19__9S19505C18[] = {
  0,
  ABISELECT(-1256,-1032),
  ABISELECT(-1256,-1032),
  (VTBL_ENTRY)&(_ZTI8S19505C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C8D1Ev,_ZTv0_n12_N8S19505C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C8D0Ev,_ZTv0_n12_N8S19505C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19505C19D1Ev,_ZTv0_n12_N9S19505C19D1Ev)();
extern void ABISELECT(_ZThn1256_N9S19505C19D1Ev,_ZThn1032_N9S19505C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19505C19D0Ev,_ZTv0_n12_N9S19505C19D0Ev)();
extern void ABISELECT(_ZThn1256_N9S19505C19D0Ev,_ZThn1032_N9S19505C19D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__9S19505C19__9S19505C18[] = {
  0,
  ABISELECT(-1256,-1032),
  ABISELECT(-1256,-1032),
  (VTBL_ENTRY)&(_ZTI9S19505C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C19D1Ev,_ZTv0_n12_N9S19505C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C19D0Ev,_ZTv0_n12_N9S19505C19D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19505C19D1Ev,_ZTv0_n16_N9S19505C19D1Ev)();
extern void ABISELECT(_ZThn1456_N9S19505C19D1Ev,_ZThn1176_N9S19505C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19505C19D0Ev,_ZTv0_n16_N9S19505C19D0Ev)();
extern void ABISELECT(_ZThn1456_N9S19505C19D0Ev,_ZThn1176_N9S19505C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19505C5__A1__9S19505C19__9S19505C18[] = {
  ABISELECT(-1456,-1176),
  ABISELECT(-200,-144),
  ABISELECT(-1456,-1176),
  (VTBL_ENTRY)&(_ZTI9S19505C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C19D1Ev,_ZTv0_n16_N9S19505C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C19D0Ev,_ZTv0_n16_N9S19505C19D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19505C19D1Ev,_ZTv0_n16_N9S19505C19D1Ev)();
extern void ABISELECT(_ZThn1352_N9S19505C19D1Ev,_ZThn1116_N9S19505C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19505C19D0Ev,_ZTv0_n16_N9S19505C19D0Ev)();
extern void ABISELECT(_ZThn1352_N9S19505C19D0Ev,_ZThn1116_N9S19505C19D0Ev)() __attribute__((weak));
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C3__A1__9S19505C19__9S19505C18[] = {
  0,
  0,
  ABISELECT(-1352,-1116),
  ABISELECT(-96,-84),
  ABISELECT(-1352,-1116),
  (VTBL_ENTRY)&(_ZTI9S19505C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C19D1Ev,_ZTv0_n16_N9S19505C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C19D0Ev,_ZTv0_n16_N9S19505C19D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C3D1Ev();
extern void _ZN8S19505C3D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C3__9S19505C18[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&_ZN8S19505C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C5D1Ev();
extern void _ZN8S19505C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C58S19505C3__9S19505C18[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&_ZN8S19505C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev)();
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C58S19505C3__9S19505C18[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev)();
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C3__9S19505C18[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void _ZN8S19505C5D1Ev();
extern void _ZN8S19505C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C5__A1__9S19505C18[] = {
  ABISELECT(-200,-144),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&_ZN8S19505C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev)();
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C5__A1__9S19505C18[] = {
  0,
  ABISELECT(200,144),
  ABISELECT(200,144),
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
static  VTT_ENTRY vtt_S19505C18[] = {
  {&(_ZTV9S19505C18[5]),  5,46},
  {&(_tg__ZTV8S19505C6__9S19505C18[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C6__9S19505C18[4]),  4,7},
  {&(_tg__ZTV8S19505C3__8S19505C6__9S19505C18[6]),  6,10},
  {&(_tg__ZTV9S19505C19__9S19505C18[5]),  5,9},
  {&(_tg__ZTV8S19505C89S19505C19__9S19505C18[3]),  3,7},
  {&(_tg__ZTV8S19505C38S19505C89S19505C19__A1__9S19505C18[3]),  3,7},
  {&(_tg__ZTV8S19505C58S19505C38S19505C89S19505C19__A2__9S19505C18[3]),  3,5},
  {&(_tg__ZTV8S19505C4__8S19505C58S19505C38S19505C89S19505C19__A2__9S19505C18[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C38S19505C89S19505C19__A1__9S19505C18[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C89S19505C19__9S19505C18[4]),  4,7},
  {&(_tg__ZTV8S19505C4__9S19505C19__9S19505C18[4]),  4,7},
  {&(_tg__ZTV8S19505C5__A1__9S19505C19__9S19505C18[4]),  4,6},
  {&(_tg__ZTV8S19505C3__A1__9S19505C19__9S19505C18[6]),  6,10},
  {&(_ZTV9S19505C18[27]),  27,46},
  {&(_ZTV9S19505C18[36]),  36,46},
  {&(_ZTV9S19505C18[44]),  44,46},
  {&(_ZTV9S19505C18[19]),  19,46},
  {&(_tg__ZTV8S19505C3__9S19505C18[3]),  3,7},
  {&(_tg__ZTV8S19505C58S19505C3__9S19505C18[3]),  3,5},
  {&(_tg__ZTV8S19505C4__8S19505C58S19505C3__9S19505C18[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C3__9S19505C18[4]),  4,7},
  {&(_tg__ZTV8S19505C5__A1__9S19505C18[3]),  3,5},
  {&(_tg__ZTV8S19505C4__8S19505C5__A1__9S19505C18[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S19505C18[];
extern  VTBL_ENTRY _ZTV9S19505C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19505C18[];
static VTBL_ENTRY alt_thunk_names41[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19505C19D0Ev,_ZTv0_n16_N9S19505C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1352_N9S19505C19D0Ev,_ZThn1116_N9S19505C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N9S19505C19D0Ev,_ZThn1176_N9S19505C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19505C19D1Ev,_ZTv0_n16_N9S19505C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1352_N9S19505C19D1Ev,_ZThn1116_N9S19505C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1456_N9S19505C19D1Ev,_ZThn1176_N9S19505C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19505C19D0Ev,_ZTv0_n12_N9S19505C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1256_N9S19505C19D0Ev,_ZThn1032_N9S19505C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19505C19D1Ev,_ZTv0_n12_N9S19505C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1256_N9S19505C19D1Ev,_ZThn1032_N9S19505C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C8D0Ev,_ZTv0_n12_N8S19505C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1256_N8S19505C8D0Ev,_ZThn1032_N8S19505C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C8D1Ev,_ZTv0_n12_N8S19505C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1256_N8S19505C8D1Ev,_ZThn1032_N8S19505C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1256_N8S19505C3D0Ev,_ZThn1032_N8S19505C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1256_N8S19505C3D1Ev,_ZThn1032_N8S19505C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1256_N8S19505C5D0Ev,_ZThn1032_N8S19505C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1256_N8S19505C5D1Ev,_ZThn1032_N8S19505C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19505C6D0Ev,_ZTv0_n16_N8S19505C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2744_N8S19505C6D0Ev,_ZThn2140_N8S19505C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19505C6D1Ev,_ZTv0_n16_N8S19505C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2744_N8S19505C6D1Ev,_ZThn2140_N8S19505C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C6D0Ev,_ZTv0_n12_N8S19505C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2648_N8S19505C6D0Ev,_ZThn2056_N8S19505C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C6D1Ev,_ZTv0_n12_N8S19505C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2648_N8S19505C6D1Ev,_ZThn2056_N8S19505C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19505C18D0Ev,_ZTv0_n16_N9S19505C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2848_N9S19505C18D0Ev,_ZThn2200_N9S19505C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2744_N9S19505C18D0Ev,_ZThn2140_N9S19505C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19505C18D1Ev,_ZTv0_n16_N9S19505C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2848_N9S19505C18D1Ev,_ZThn2200_N9S19505C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn2744_N9S19505C18D1Ev,_ZThn2140_N9S19505C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19505C18D0Ev,_ZTv0_n12_N9S19505C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2648_N9S19505C18D0Ev,_ZThn2056_N9S19505C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19505C18D1Ev,_ZTv0_n12_N9S19505C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2648_N9S19505C18D1Ev,_ZThn2056_N9S19505C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19505C18 = {  "S19505C18", // class name
  bases_S19505C18, 11,
  &(vtc_S19505C18[0]), // expected_vtbl_contents
  &(vtt_S19505C18[0]), // expected_vtt_contents
  ABISELECT(2880,2224), // object size
  NSPAIRA(_ZTI9S19505C18),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19505C18),46, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19505C18),24, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names41,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19505C11  : virtual S19505C4 , virtual S19505C12 , S19505C18 {
  ::S19505C15 s19505c11f0;
  ::S3052C13 s19505c11f1;
  int s19505c11f2;
  char s19505c11f3;
  virtual  ~S19505C11(); // _ZN9S19505C11D2Ev
  S19505C11(); // tgen
};
//SIG(-1 S19505C11) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} VBC3{ VBC4{ VBC2 BC5{ VBC2 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} VBC6{ BC7{ m Fp Fi FL Fp Fi} VBC4 Fp Fc[4] Fi:11 Fp[2] Fi[6] FC8{ VBC2 BC4 BC9{ VBC2 BC4 Fp[3] Fc:8 Fi[2] Fc FC2 Fp[3] FL[5] Fi} BC10{ vd m FC11{ VBC12{ vd v9 Fs[6] FL[8] Fi} BC13{ VBC12 FL Fp FL:54} v7 v8 Fc:0 Fp[8] Fc}} VBC5 Fp Fl FC9 FC10 FC5 Fi[2] FU14{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} BC15{ BC10 VBC2 VBC4 v4 FC4[2] FD FC10 Fp[3] FC9 Fi FU16{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi} v5 Fp FC17{} FC2 FL FU14 FL[6] FL FC9} BC18{ BC15 VBC5 BC2 BC19{ VBC2 BC9 VBC5 VBC4 vd Fp Fp[5] Fp} v6 FC2[9] Fc Fi Fi Fi Fc} vd FC8 FU14 Fi Fc}


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

static void Test_S19505C11()
{
  extern Class_Descriptor cd_S19505C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1038,3098)];
    init_test(&cd_S19505C11, buf);
    S19505C11 *dp, &lv = *(dp=new (buf) S19505C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16592,12388), "sizeof(S19505C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19505C11)");
    /*is_ambiguous_... S19505C11::S19505C4 */ AMB_check_base_class_offset(lv, (S19505C4*), ABISELECT(4344,3312), "S19505C11");
    /*is_ambiguous_... S19505C11::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C4*)(S19505C3*), ABISELECT(4344,3312), "S19505C11");
    /*is_ambiguous_... S19505C11::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C4*)(S19505C5*)(S19505C3*), ABISELECT(4344,3312), "S19505C11");
    check_base_class_offset(lv, (S19505C4*)(S19505C6*)(S19505C12*), ABISELECT(4344,3312), "S19505C11");
    check_base_class_offset(lv, (S19505C4*)(S19505C6*)(S19505C18*), ABISELECT(4344,3312), "S19505C11");
    /*is_ambiguous_... S19505C11::S19505C5 */ AMB_check_base_class_offset(lv, (S19505C4*)(S19505C5*), ABISELECT(4344,3312), "S19505C11");
    check_base_class_offset(lv, (S19505C4*)(S19505C19*)(S19505C18*), ABISELECT(4344,3312), "S19505C11");
    check_base_class_offset(lv, (S19505C4*)(S19505C8*)(S19505C19*)(S19505C18*), ABISELECT(4344,3312), "S19505C11");
    check_base_class_offset(lv, (S19505C4*)(S19505C3*)(S19505C8*)(S19505C19*)(S19505C18*), ABISELECT(4344,3312), "S19505C11");
    check_base_class_offset(lv, (S19505C4*)(S19505C5*)(S19505C3*)(S19505C8*)(S19505C19*)(S19505C18*), ABISELECT(4344,3312), "S19505C11");
    /*is_ambiguous_... S19505C11::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C5*)(S19505C3*), ABISELECT(6352,4816), "S19505C11");
    check_base_class_offset(lv, (S19505C3*)(S19505C12*), ABISELECT(6352,4816), "S19505C11");
    check_base_class_offset(lv, (S19505C3*)(S19505C13*), ABISELECT(6352,4816), "S19505C11");
    check_base_class_offset(lv, (S19505C3*)(S19505C6*)(S19505C12*), ABISELECT(6352,4816), "S19505C11");
    check_base_class_offset(lv, (S19505C3*)(S19505C6*)(S19505C18*), ABISELECT(6352,4816), "S19505C11");
    /*is_ambiguous_... S19505C19::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C3*)(S19505C19*)(S19505C18*), ABISELECT(6352,4816), "S19505C11");
    check_base_class_offset(lv, (S3052C10*)(S19505C13*), ABISELECT(6472,4880), "S19505C11");
    check_base_class_offset(lv, (S19505C13*)(S19505C12*), ABISELECT(6464,4876), "S19505C11");
    check_base_class_offset(lv, (S3052C12*)(S19505C6*)(S19505C12*), ABISELECT(4448,3396), "S19505C11");
    check_base_class_offset(lv, (S19505C6*)(S19505C12*), ABISELECT(4448,3396), "S19505C11");
    check_base_class_offset(lv, (S19505C12*), ABISELECT(4448,3396), "S19505C11");
    check_base_class_offset(lv, (S3052C12*)(S19505C6*)(S19505C18*), 0, "S19505C11");
    check_base_class_offset(lv, (S19505C6*)(S19505C18*), 0, "S19505C11");
    /*is_ambiguous_... S19505C18::S19505C5 */ AMB_check_base_class_offset(lv, (S19505C5*)(S19505C18*), ABISELECT(16560,12364), "S19505C11");
    /*is_ambiguous_... S19505C19::S19505C5 */ AMB_check_base_class_offset(lv, (S19505C5*)(S19505C19*)(S19505C18*), ABISELECT(16560,12364), "S19505C11");
    /*is_ambiguous_... S19505C18::S19505C4 */ AMB_check_base_class_offset(lv, (S19505C4*)(S19505C18*), ABISELECT(1296,940), "S19505C11");
    check_base_class_offset(lv, (S19505C5*)(S19505C3*)(S19505C8*)(S19505C19*)(S19505C18*), ABISELECT(1392,1024), "S19505C11");
    check_base_class_offset(lv, (S19505C3*)(S19505C8*)(S19505C19*)(S19505C18*), ABISELECT(1392,1024), "S19505C11");
    check_base_class_offset(lv, (S19505C8*)(S19505C19*)(S19505C18*), ABISELECT(1392,1024), "S19505C11");
    check_base_class_offset(lv, (S19505C19*)(S19505C18*), ABISELECT(1392,1024), "S19505C11");
    check_base_class_offset(lv, (S19505C18*), 0, "S19505C11");
    check_field_offset(lv, s19505c11f0, ABISELECT(2656,2056), "S19505C11.s19505c11f0");
    check_field_offset(lv, s19505c11f1, ABISELECT(4320,3292), "S19505C11.s19505c11f1");
    check_field_offset(lv, s19505c11f2, ABISELECT(4336,3304), "S19505C11.s19505c11f2");
    check_field_offset(lv, s19505c11f3, ABISELECT(4340,3308), "S19505C11.s19505c11f3");
    test_class_info(&lv, &cd_S19505C11);
    dp->~S19505C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19505C11(Test_S19505C11, "S19505C11", ABISELECT(16592,12388));

#else // __cplusplus

extern void _ZN9S19505C11C1Ev();
extern void _ZN9S19505C11D2Ev();
Name_Map name_map_S19505C11[] = {
  NSPAIR(_ZN9S19505C11C1Ev),
  NSPAIR(_ZN9S19505C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19505C4;
extern VTBL_ENTRY _ZTI8S19505C4[];
extern  VTBL_ENTRY _ZTV8S19505C4[];
extern Class_Descriptor cd_S19505C5;
extern VTBL_ENTRY _ZTI8S19505C5[];
extern  VTBL_ENTRY _ZTV8S19505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C5[];
extern Class_Descriptor cd_S19505C3;
extern VTBL_ENTRY _ZTI8S19505C3[];
extern  VTBL_ENTRY _ZTV8S19505C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C3[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S19505C13;
extern VTBL_ENTRY _ZTI9S19505C13[];
extern  VTBL_ENTRY _ZTV9S19505C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19505C13[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S19505C6;
extern VTBL_ENTRY _ZTI8S19505C6[];
extern  VTBL_ENTRY _ZTV8S19505C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C6[];
extern Class_Descriptor cd_S19505C12;
extern VTBL_ENTRY _ZTI9S19505C12[];
extern  VTBL_ENTRY _ZTV9S19505C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19505C12[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S19505C6;
extern VTBL_ENTRY _ZTI8S19505C6[];
extern  VTBL_ENTRY _ZTV8S19505C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C6[];
extern Class_Descriptor cd_S19505C5;
extern VTBL_ENTRY _ZTI8S19505C5[];
extern  VTBL_ENTRY _ZTV8S19505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C5[];
extern Class_Descriptor cd_S19505C4;
extern VTBL_ENTRY _ZTI8S19505C4[];
extern  VTBL_ENTRY _ZTV8S19505C4[];
extern Class_Descriptor cd_S19505C5;
extern VTBL_ENTRY _ZTI8S19505C5[];
extern  VTBL_ENTRY _ZTV8S19505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C5[];
extern Class_Descriptor cd_S19505C3;
extern VTBL_ENTRY _ZTI8S19505C3[];
extern  VTBL_ENTRY _ZTV8S19505C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C3[];
extern Class_Descriptor cd_S19505C8;
extern VTBL_ENTRY _ZTI8S19505C8[];
extern  VTBL_ENTRY _ZTV8S19505C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C8[];
extern Class_Descriptor cd_S19505C19;
extern VTBL_ENTRY _ZTI9S19505C19[];
extern  VTBL_ENTRY _ZTV9S19505C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19505C19[];
extern Class_Descriptor cd_S19505C18;
extern VTBL_ENTRY _ZTI9S19505C18[];
extern  VTBL_ENTRY _ZTV9S19505C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19505C18[];
static Base_Class bases_S19505C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19505C4,    ABISELECT(4344,3312), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19505C5,    ABISELECT(6352,4816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19505C3,    ABISELECT(6352,4816), //bcp->offset
    44, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S3052C10,    ABISELECT(6472,4880), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19505C13,    ABISELECT(6464,4876), //bcp->offset
    54, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S3052C12,    ABISELECT(4448,3396), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S19505C6,    ABISELECT(4448,3396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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_S19505C12,    ABISELECT(4448,3396), //bcp->offset
    32, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S19505C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    16, //immediately_derived
  0, 0},
  {&cd_S19505C5,    ABISELECT(16560,12364), //bcp->offset
    61, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19505C4,    ABISELECT(1296,940), //bcp->offset
    11, //bcp->virtual_function_table_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
    16, //immediately_derived
  0, 0},
  {&cd_S19505C5,    ABISELECT(1392,1024), //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
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19505C3,    ABISELECT(1392,1024), //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
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S19505C8,    ABISELECT(1392,1024), //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
    14, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19505C19,    ABISELECT(1392,1024), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S19505C18,    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
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19505C11[];
extern void _ZN9S19505C11D1Ev();
extern void _ZN9S19505C11D0Ev();
extern void _ZN8S19505C62v4Ev();
extern void _ZN9S19505C182v8Ev();
extern void ABISELECT(_ZThn1296_N9S19505C11D1Ev,_ZThn940_N9S19505C11D1Ev)();
extern void ABISELECT(_ZThn1296_N9S19505C11D0Ev,_ZThn940_N9S19505C11D0Ev)();
extern void _ZN8S19505C42v1Ev();
extern void ABISELECT(_ZThn1392_N9S19505C11D1Ev,_ZThn1024_N9S19505C11D1Ev)();
extern void ABISELECT(_ZThn1392_N9S19505C11D0Ev,_ZThn1024_N9S19505C11D0Ev)();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
extern void ABISELECT(_ZTv0_n24_N9S19505C11D1Ev,_ZTv0_n12_N9S19505C11D1Ev)();
extern void ABISELECT(_ZThn4344_N9S19505C11D1Ev,_ZThn3312_N9S19505C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19505C11D0Ev,_ZTv0_n12_N9S19505C11D0Ev)();
extern void ABISELECT(_ZThn4344_N9S19505C11D0Ev,_ZThn3312_N9S19505C11D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
extern void ABISELECT(_ZTv0_n48_N9S19505C11D1Ev,_ZTv0_n24_N9S19505C11D1Ev)();
extern void ABISELECT(_ZThn4448_N9S19505C11D1Ev,_ZThn3396_N9S19505C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19505C11D0Ev,_ZTv0_n24_N9S19505C11D0Ev)();
extern void ABISELECT(_ZThn4448_N9S19505C11D0Ev,_ZThn3396_N9S19505C11D0Ev)() __attribute__((weak));
extern void _ZN8S19505C62v4Ev();
extern void _ZN9S19505C122v7Ev();
extern void ABISELECT(_ZTv0_n32_N9S19505C11D1Ev,_ZTv0_n16_N9S19505C11D1Ev)();
extern void ABISELECT(_ZThn6352_N9S19505C11D1Ev,_ZThn4816_N9S19505C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19505C11D0Ev,_ZTv0_n16_N9S19505C11D0Ev)();
extern void ABISELECT(_ZThn6352_N9S19505C11D0Ev,_ZThn4816_N9S19505C11D0Ev)() __attribute__((weak));
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S19505C11D1Ev,_ZTv0_n20_N9S19505C11D1Ev)();
extern void ABISELECT(_ZThn6464_N9S19505C11D1Ev,_ZThn4876_N9S19505C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19505C11D0Ev,_ZTv0_n20_N9S19505C11D0Ev)();
extern void ABISELECT(_ZThn6464_N9S19505C11D0Ev,_ZThn4876_N9S19505C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19505C11D1Ev,_ZTv0_n16_N9S19505C11D1Ev)();
extern void ABISELECT(_ZThn16560_N9S19505C11D1Ev,_ZThn12364_N9S19505C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19505C11D0Ev,_ZTv0_n16_N9S19505C11D0Ev)();
extern void ABISELECT(_ZThn16560_N9S19505C11D0Ev,_ZThn12364_N9S19505C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19505C11[] = {
  ABISELECT(6464,4876),
  ABISELECT(4448,3396),
  ABISELECT(16560,12364),
  ABISELECT(6352,4816),
  ABISELECT(4344,3312),
  0,
  (VTBL_ENTRY)&(_ZTI9S19505C11[0]),
  (VTBL_ENTRY)&_ZN9S19505C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19505C11D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C62v4Ev,
  (VTBL_ENTRY)&_ZN9S19505C182v8Ev,
  ABISELECT(-1296,-940),
  (VTBL_ENTRY)&(_ZTI9S19505C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N9S19505C11D1Ev,_ZThn940_N9S19505C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1296_N9S19505C11D0Ev,_ZThn940_N9S19505C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
  ABISELECT(4960,3792),
  ABISELECT(15168,11340),
  ABISELECT(2952,2288),
  ABISELECT(-1392,-1024),
  (VTBL_ENTRY)&(_ZTI9S19505C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N9S19505C11D1Ev,_ZThn1024_N9S19505C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N9S19505C11D0Ev,_ZThn1024_N9S19505C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
  0,
  ABISELECT(-4344,-3312),
  ABISELECT(-4344,-3312),
  (VTBL_ENTRY)&(_ZTI9S19505C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C11D1Ev,_ZTv0_n12_N9S19505C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C11D0Ev,_ZTv0_n12_N9S19505C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
  0,
  0,
  ABISELECT(-4448,-3396),
  ABISELECT(2016,1480),
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  ABISELECT(-4448,-3396),
  (VTBL_ENTRY)&(_ZTI9S19505C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19505C11D1Ev,_ZTv0_n24_N9S19505C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19505C11D0Ev,_ZTv0_n24_N9S19505C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C62v4Ev,
  (VTBL_ENTRY)&_ZN9S19505C122v7Ev,
  0,
  0,
  ABISELECT(-6352,-4816),
  ABISELECT(-2008,-1504),
  ABISELECT(-6352,-4816),
  (VTBL_ENTRY)&(_ZTI9S19505C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C11D1Ev,_ZTv0_n16_N9S19505C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C11D0Ev,_ZTv0_n16_N9S19505C11D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
  ABISELECT(-6464,-4876),
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  ABISELECT(-6464,-4876),
  (VTBL_ENTRY)&(_ZTI9S19505C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19505C11D1Ev,_ZTv0_n20_N9S19505C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19505C11D0Ev,_ZTv0_n20_N9S19505C11D0Ev),
  ABISELECT(-16560,-12364),
  ABISELECT(-12216,-9052),
  ABISELECT(-16560,-12364),
  (VTBL_ENTRY)&(_ZTI9S19505C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C11D1Ev,_ZTv0_n16_N9S19505C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C11D0Ev,_ZTv0_n16_N9S19505C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S19505C11[];
extern void _ZN9S19505C18D1Ev();
extern void _ZN9S19505C18D0Ev();
extern void _ZN8S19505C62v4Ev();
extern void _ZN9S19505C182v8Ev();
static  VTBL_ENTRY _tg__ZTV9S19505C18__9S19505C11[] = {
  ABISELECT(16560,12364),
  ABISELECT(6352,4816),
  ABISELECT(4344,3312),
  0,
  (VTBL_ENTRY)&(_ZTI9S19505C18[0]),
  (VTBL_ENTRY)&_ZN9S19505C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19505C18D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C62v4Ev,
  (VTBL_ENTRY)&_ZN9S19505C182v8Ev,
};
extern void _ZN8S19505C6D1Ev();
extern void _ZN8S19505C6D0Ev();
extern void _ZN8S19505C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C69S19505C18__A1__9S19505C11[] = {
  ABISELECT(6352,4816),
  ABISELECT(4344,3312),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C6[0]),
  (VTBL_ENTRY)&_ZN8S19505C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C62v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C6D1Ev,_ZTv0_n12_N8S19505C6D1Ev)();
extern void ABISELECT(_ZThn4344_N8S19505C6D1Ev,_ZThn3312_N8S19505C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C6D0Ev,_ZTv0_n12_N8S19505C6D0Ev)();
extern void ABISELECT(_ZThn4344_N8S19505C6D0Ev,_ZThn3312_N8S19505C6D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C69S19505C18__A1__9S19505C11[] = {
  0,
  ABISELECT(-4344,-3312),
  ABISELECT(-4344,-3312),
  (VTBL_ENTRY)&(_ZTI8S19505C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C6D1Ev,_ZTv0_n12_N8S19505C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C6D0Ev,_ZTv0_n12_N8S19505C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19505C6D1Ev,_ZTv0_n16_N8S19505C6D1Ev)();
extern void ABISELECT(_ZThn6352_N8S19505C6D1Ev,_ZThn4816_N8S19505C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19505C6D0Ev,_ZTv0_n16_N8S19505C6D0Ev)();
extern void ABISELECT(_ZThn6352_N8S19505C6D0Ev,_ZThn4816_N8S19505C6D0Ev)() __attribute__((weak));
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C3__8S19505C69S19505C18__A1__9S19505C11[] = {
  0,
  0,
  ABISELECT(-6352,-4816),
  ABISELECT(-2008,-1504),
  ABISELECT(-6352,-4816),
  (VTBL_ENTRY)&(_ZTI8S19505C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19505C6D1Ev,_ZTv0_n16_N8S19505C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19505C6D0Ev,_ZTv0_n16_N8S19505C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN9S19505C19D1Ev();
extern void _ZN9S19505C19D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV9S19505C199S19505C18__9S19505C11[] = {
  ABISELECT(4960,3792),
  ABISELECT(15168,11340),
  ABISELECT(2952,2288),
  0,
  (VTBL_ENTRY)&(_ZTI9S19505C19[0]),
  (VTBL_ENTRY)&_ZN9S19505C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19505C19D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C8D1Ev();
extern void _ZN8S19505C8D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C89S19505C199S19505C18__9S19505C11[] = {
  ABISELECT(2952,2288),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C8[0]),
  (VTBL_ENTRY)&_ZN8S19505C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C3D1Ev();
extern void _ZN8S19505C3D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C38S19505C89S19505C199S19505C18__A1__9S19505C11[] = {
  ABISELECT(2952,2288),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&_ZN8S19505C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C5D1Ev();
extern void _ZN8S19505C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C58S19505C38S19505C89S19505C199S19505C18__A2__9S19505C11[] = {
  ABISELECT(2952,2288),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&_ZN8S19505C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev)();
extern void ABISELECT(_ZThn2952_N8S19505C5D1Ev,_ZThn2288_N8S19505C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev)();
extern void ABISELECT(_ZThn2952_N8S19505C5D0Ev,_ZThn2288_N8S19505C5D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C58S19505C38S19505C89S19505C199S19505C18__A2__9S19505C11[] = {
  0,
  ABISELECT(-2952,-2288),
  ABISELECT(-2952,-2288),
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev)();
extern void ABISELECT(_ZThn2952_N8S19505C3D1Ev,_ZThn2288_N8S19505C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev)();
extern void ABISELECT(_ZThn2952_N8S19505C3D0Ev,_ZThn2288_N8S19505C3D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C38S19505C89S19505C199S19505C18__A1__9S19505C11[] = {
  0,
  ABISELECT(-2952,-2288),
  ABISELECT(-2952,-2288),
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C8D1Ev,_ZTv0_n12_N8S19505C8D1Ev)();
extern void ABISELECT(_ZThn2952_N8S19505C8D1Ev,_ZThn2288_N8S19505C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C8D0Ev,_ZTv0_n12_N8S19505C8D0Ev)();
extern void ABISELECT(_ZThn2952_N8S19505C8D0Ev,_ZThn2288_N8S19505C8D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C89S19505C199S19505C18__9S19505C11[] = {
  0,
  ABISELECT(-2952,-2288),
  ABISELECT(-2952,-2288),
  (VTBL_ENTRY)&(_ZTI8S19505C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C8D1Ev,_ZTv0_n12_N8S19505C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C8D0Ev,_ZTv0_n12_N8S19505C8D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19505C19D1Ev,_ZTv0_n12_N9S19505C19D1Ev)();
extern void ABISELECT(_ZThn2952_N9S19505C19D1Ev,_ZThn2288_N9S19505C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19505C19D0Ev,_ZTv0_n12_N9S19505C19D0Ev)();
extern void ABISELECT(_ZThn2952_N9S19505C19D0Ev,_ZThn2288_N9S19505C19D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__9S19505C199S19505C18__9S19505C11[] = {
  0,
  ABISELECT(-2952,-2288),
  ABISELECT(-2952,-2288),
  (VTBL_ENTRY)&(_ZTI9S19505C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C19D1Ev,_ZTv0_n12_N9S19505C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C19D0Ev,_ZTv0_n12_N9S19505C19D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19505C19D1Ev,_ZTv0_n16_N9S19505C19D1Ev)();
extern void ABISELECT(_ZThn15168_N9S19505C19D1Ev,_ZThn11340_N9S19505C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19505C19D0Ev,_ZTv0_n16_N9S19505C19D0Ev)();
extern void ABISELECT(_ZThn15168_N9S19505C19D0Ev,_ZThn11340_N9S19505C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19505C5__A1__9S19505C199S19505C18__9S19505C11[] = {
  ABISELECT(-15168,-11340),
  ABISELECT(-12216,-9052),
  ABISELECT(-15168,-11340),
  (VTBL_ENTRY)&(_ZTI9S19505C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C19D1Ev,_ZTv0_n16_N9S19505C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C19D0Ev,_ZTv0_n16_N9S19505C19D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19505C19D1Ev,_ZTv0_n16_N9S19505C19D1Ev)();
extern void ABISELECT(_ZThn4960_N9S19505C19D1Ev,_ZThn3792_N9S19505C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19505C19D0Ev,_ZTv0_n16_N9S19505C19D0Ev)();
extern void ABISELECT(_ZThn4960_N9S19505C19D0Ev,_ZThn3792_N9S19505C19D0Ev)() __attribute__((weak));
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C3__A1__9S19505C199S19505C18__9S19505C11[] = {
  0,
  0,
  ABISELECT(-4960,-3792),
  ABISELECT(-2008,-1504),
  ABISELECT(-4960,-3792),
  (VTBL_ENTRY)&(_ZTI9S19505C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C19D1Ev,_ZTv0_n16_N9S19505C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C19D0Ev,_ZTv0_n16_N9S19505C19D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19505C18D1Ev,_ZTv0_n12_N9S19505C18D1Ev)();
extern void ABISELECT(_ZThn4344_N9S19505C18D1Ev,_ZThn3312_N9S19505C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19505C18D0Ev,_ZTv0_n12_N9S19505C18D0Ev)();
extern void ABISELECT(_ZThn4344_N9S19505C18D0Ev,_ZThn3312_N9S19505C18D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__9S19505C18__9S19505C11[] = {
  0,
  ABISELECT(-4344,-3312),
  ABISELECT(-4344,-3312),
  (VTBL_ENTRY)&(_ZTI9S19505C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C18D1Ev,_ZTv0_n12_N9S19505C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C18D0Ev,_ZTv0_n12_N9S19505C18D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19505C18D1Ev,_ZTv0_n16_N9S19505C18D1Ev)();
extern void ABISELECT(_ZThn6352_N9S19505C18D1Ev,_ZThn4816_N9S19505C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19505C18D0Ev,_ZTv0_n16_N9S19505C18D0Ev)();
extern void ABISELECT(_ZThn6352_N9S19505C18D0Ev,_ZThn4816_N9S19505C18D0Ev)() __attribute__((weak));
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C3__9S19505C18__9S19505C11[] = {
  0,
  0,
  ABISELECT(-6352,-4816),
  ABISELECT(-2008,-1504),
  ABISELECT(-6352,-4816),
  (VTBL_ENTRY)&(_ZTI9S19505C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C18D1Ev,_ZTv0_n16_N9S19505C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C18D0Ev,_ZTv0_n16_N9S19505C18D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19505C18D1Ev,_ZTv0_n16_N9S19505C18D1Ev)();
extern void ABISELECT(_ZThn16560_N9S19505C18D1Ev,_ZThn12364_N9S19505C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19505C18D0Ev,_ZTv0_n16_N9S19505C18D0Ev)();
extern void ABISELECT(_ZThn16560_N9S19505C18D0Ev,_ZThn12364_N9S19505C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19505C5__A1__9S19505C18__9S19505C11[] = {
  ABISELECT(-16560,-12364),
  ABISELECT(-12216,-9052),
  ABISELECT(-16560,-12364),
  (VTBL_ENTRY)&(_ZTI9S19505C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C18D1Ev,_ZTv0_n16_N9S19505C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C18D0Ev,_ZTv0_n16_N9S19505C18D0Ev),
};
extern void ABISELECT(_ZThn1392_N9S19505C18D1Ev,_ZThn1024_N9S19505C18D1Ev)();
extern void ABISELECT(_ZThn1392_N9S19505C18D0Ev,_ZThn1024_N9S19505C18D0Ev)();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV9S19505C19__9S19505C18__9S19505C11[] = {
  ABISELECT(4960,3792),
  ABISELECT(15168,11340),
  ABISELECT(2952,2288),
  ABISELECT(-1392,-1024),
  (VTBL_ENTRY)&(_ZTI9S19505C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N9S19505C18D1Ev,_ZThn1024_N9S19505C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn1392_N9S19505C18D0Ev,_ZThn1024_N9S19505C18D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN9S19505C12D1Ev();
extern void _ZN9S19505C12D0Ev();
extern void _ZN8S19505C62v4Ev();
extern void _ZN9S19505C122v7Ev();
static  VTBL_ENTRY _tg__ZTV9S19505C12__9S19505C11[] = {
  ABISELECT(2016,1480),
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  0,
  (VTBL_ENTRY)&(_ZTI9S19505C12[0]),
  (VTBL_ENTRY)&_ZN9S19505C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19505C12D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C62v4Ev,
  (VTBL_ENTRY)&_ZN9S19505C122v7Ev,
};
extern void _ZN8S19505C6D1Ev();
extern void _ZN8S19505C6D0Ev();
extern void _ZN8S19505C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C69S19505C12__9S19505C11[] = {
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C6[0]),
  (VTBL_ENTRY)&_ZN8S19505C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C62v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C6D1Ev,_ZTv0_n12_N8S19505C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19505C6D0Ev,_ZTv0_n12_N8S19505C6D0Ev)();
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C69S19505C12__9S19505C11[] = {
  0,
  ABISELECT(104,84),
  ABISELECT(104,84),
  (VTBL_ENTRY)&(_ZTI8S19505C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C6D1Ev,_ZTv0_n12_N8S19505C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C6D0Ev,_ZTv0_n12_N8S19505C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19505C6D1Ev,_ZTv0_n16_N8S19505C6D1Ev)();
extern void ABISELECT(_ZThn1904_N8S19505C6D1Ev,_ZThn1420_N8S19505C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19505C6D0Ev,_ZTv0_n16_N8S19505C6D0Ev)();
extern void ABISELECT(_ZThn1904_N8S19505C6D0Ev,_ZThn1420_N8S19505C6D0Ev)() __attribute__((weak));
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C3__8S19505C69S19505C12__9S19505C11[] = {
  0,
  0,
  ABISELECT(-1904,-1420),
  ABISELECT(-2008,-1504),
  ABISELECT(-1904,-1420),
  (VTBL_ENTRY)&(_ZTI8S19505C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19505C6D1Ev,_ZTv0_n16_N8S19505C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19505C6D0Ev,_ZTv0_n16_N8S19505C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19505C12D1Ev,_ZTv0_n16_N9S19505C12D1Ev)();
extern void ABISELECT(_ZThn1904_N9S19505C12D1Ev,_ZThn1420_N9S19505C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19505C12D0Ev,_ZTv0_n16_N9S19505C12D0Ev)();
extern void ABISELECT(_ZThn1904_N9S19505C12D0Ev,_ZThn1420_N9S19505C12D0Ev)() __attribute__((weak));
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C3__9S19505C12__9S19505C11[] = {
  0,
  0,
  ABISELECT(-1904,-1420),
  ABISELECT(-2008,-1504),
  ABISELECT(-1904,-1420),
  (VTBL_ENTRY)&(_ZTI9S19505C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C12D1Ev,_ZTv0_n16_N9S19505C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C12D0Ev,_ZTv0_n16_N9S19505C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19505C12D1Ev,_ZTv0_n12_N9S19505C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19505C12D0Ev,_ZTv0_n12_N9S19505C12D0Ev)();
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__9S19505C12__9S19505C11[] = {
  0,
  ABISELECT(104,84),
  ABISELECT(104,84),
  (VTBL_ENTRY)&(_ZTI9S19505C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C12D1Ev,_ZTv0_n12_N9S19505C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C12D0Ev,_ZTv0_n12_N9S19505C12D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19505C12D1Ev,_ZTv0_n20_N9S19505C12D1Ev)();
extern void ABISELECT(_ZThn2016_N9S19505C12D1Ev,_ZThn1480_N9S19505C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19505C12D0Ev,_ZTv0_n20_N9S19505C12D0Ev)();
extern void ABISELECT(_ZThn2016_N9S19505C12D0Ev,_ZThn1480_N9S19505C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19505C13__9S19505C12__9S19505C11[] = {
  ABISELECT(-2016,-1480),
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  ABISELECT(-2016,-1480),
  (VTBL_ENTRY)&(_ZTI9S19505C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19505C12D1Ev,_ZTv0_n20_N9S19505C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19505C12D0Ev,_ZTv0_n20_N9S19505C12D0Ev),
};
extern void _ZN8S19505C3D1Ev();
extern void _ZN8S19505C3D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C3__9S19505C11[] = {
  ABISELECT(-2008,-1504),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&_ZN8S19505C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C5D1Ev();
extern void _ZN8S19505C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C58S19505C3__9S19505C11[] = {
  ABISELECT(-2008,-1504),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&_ZN8S19505C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev)();
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C58S19505C3__9S19505C11[] = {
  0,
  ABISELECT(2008,1504),
  ABISELECT(2008,1504),
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev)();
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C3__9S19505C11[] = {
  0,
  ABISELECT(2008,1504),
  ABISELECT(2008,1504),
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void _ZN9S19505C13D1Ev();
extern void _ZN9S19505C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19505C13__9S19505C11[] = {
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S19505C13[0]),
  (VTBL_ENTRY)&_ZN9S19505C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19505C13D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19505C13D1Ev,_ZTv0_n16_N9S19505C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19505C13D0Ev,_ZTv0_n16_N9S19505C13D0Ev)();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C3__9S19505C13__9S19505C11[] = {
  0,
  0,
  ABISELECT(112,60),
  ABISELECT(-2008,-1504),
  ABISELECT(112,60),
  (VTBL_ENTRY)&(_ZTI9S19505C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C13D1Ev,_ZTv0_n16_N9S19505C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C13D0Ev,_ZTv0_n16_N9S19505C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19505C13D1Ev,_ZTv0_n12_N9S19505C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19505C13D0Ev,_ZTv0_n12_N9S19505C13D0Ev)();
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__9S19505C13__9S19505C11[] = {
  0,
  ABISELECT(2120,1564),
  ABISELECT(2120,1564),
  (VTBL_ENTRY)&(_ZTI9S19505C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C13D1Ev,_ZTv0_n12_N9S19505C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C13D0Ev,_ZTv0_n12_N9S19505C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void _ZN8S19505C5D1Ev();
extern void _ZN8S19505C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C5__A1__9S19505C11[] = {
  ABISELECT(-12216,-9052),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&_ZN8S19505C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev)();
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C5__A1__9S19505C11[] = {
  0,
  ABISELECT(12216,9052),
  ABISELECT(12216,9052),
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
static  VTT_ENTRY vtt_S19505C11[] = {
  {&(_ZTV9S19505C11[7]),  7,67},
  {&(_tg__ZTV9S19505C18__9S19505C11[5]),  5,9},
  {&(_tg__ZTV8S19505C69S19505C18__A1__9S19505C11[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C69S19505C18__A1__9S19505C11[4]),  4,7},
  {&(_tg__ZTV8S19505C3__8S19505C69S19505C18__A1__9S19505C11[6]),  6,10},
  {&(_tg__ZTV9S19505C199S19505C18__9S19505C11[5]),  5,9},
  {&(_tg__ZTV8S19505C89S19505C199S19505C18__9S19505C11[3]),  3,7},
  {&(_tg__ZTV8S19505C38S19505C89S19505C199S19505C18__A1__9S19505C11[3]),  3,7},
  {&(_tg__ZTV8S19505C58S19505C38S19505C89S19505C199S19505C18__A2__9S19505C11[3]),  3,5},
  {&(_tg__ZTV8S19505C4__8S19505C58S19505C38S19505C89S19505C199S19505C18__A2__9S19505C11[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C38S19505C89S19505C199S19505C18__A1__9S19505C11[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C89S19505C199S19505C18__9S19505C11[4]),  4,7},
  {&(_tg__ZTV8S19505C4__9S19505C199S19505C18__9S19505C11[4]),  4,7},
  {&(_tg__ZTV8S19505C5__A1__9S19505C199S19505C18__9S19505C11[4]),  4,6},
  {&(_tg__ZTV8S19505C3__A1__9S19505C199S19505C18__9S19505C11[6]),  6,10},
  {&(_tg__ZTV8S19505C4__9S19505C18__9S19505C11[4]),  4,7},
  {&(_tg__ZTV8S19505C3__9S19505C18__9S19505C11[6]),  6,10},
  {&(_tg__ZTV8S19505C5__A1__9S19505C18__9S19505C11[4]),  4,6},
  {&(_tg__ZTV9S19505C19__9S19505C18__9S19505C11[5]),  5,9},
  {&(_ZTV9S19505C11[29]),  29,67},
  {&(_ZTV9S19505C11[40]),  40,67},
  {&(_ZTV9S19505C11[50]),  50,67},
  {&(_ZTV9S19505C11[59]),  59,67},
  {&(_ZTV9S19505C11[65]),  65,67},
  {&(_ZTV9S19505C11[21]),  21,67},
  {&(_tg__ZTV9S19505C12__9S19505C11[5]),  5,9},
  {&(_tg__ZTV8S19505C69S19505C12__9S19505C11[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C69S19505C12__9S19505C11[4]),  4,7},
  {&(_tg__ZTV8S19505C3__8S19505C69S19505C12__9S19505C11[6]),  6,10},
  {&(_tg__ZTV8S19505C3__9S19505C12__9S19505C11[6]),  6,10},
  {&(_tg__ZTV8S19505C4__9S19505C12__9S19505C11[4]),  4,7},
  {&(_tg__ZTV9S19505C13__9S19505C12__9S19505C11[5]),  5,7},
  {&(_tg__ZTV8S19505C3__9S19505C11[3]),  3,7},
  {&(_tg__ZTV8S19505C58S19505C3__9S19505C11[3]),  3,5},
  {&(_tg__ZTV8S19505C4__8S19505C58S19505C3__9S19505C11[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C3__9S19505C11[4]),  4,7},
  {&(_tg__ZTV9S19505C13__9S19505C11[4]),  4,6},
  {&(_tg__ZTV8S19505C3__9S19505C13__9S19505C11[6]),  6,10},
  {&(_tg__ZTV8S19505C4__9S19505C13__9S19505C11[4]),  4,7},
  {&(_tg__ZTV8S19505C5__A1__9S19505C11[3]),  3,5},
  {&(_tg__ZTV8S19505C4__8S19505C5__A1__9S19505C11[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S19505C11[];
extern  VTBL_ENTRY _ZTV9S19505C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19505C11[];
static VTBL_ENTRY alt_thunk_names42[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19505C12D0Ev,_ZTv0_n20_N9S19505C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N9S19505C12D0Ev,_ZThn1480_N9S19505C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19505C12D1Ev,_ZTv0_n20_N9S19505C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N9S19505C12D1Ev,_ZThn1480_N9S19505C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19505C12D0Ev,_ZTv0_n16_N9S19505C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S19505C12D0Ev,_ZThn1420_N9S19505C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19505C12D1Ev,_ZTv0_n16_N9S19505C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S19505C12D1Ev,_ZThn1420_N9S19505C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19505C18D0Ev,_ZTv0_n16_N9S19505C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16560_N9S19505C18D0Ev,_ZThn12364_N9S19505C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N9S19505C18D0Ev,_ZThn4816_N9S19505C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19505C18D1Ev,_ZTv0_n16_N9S19505C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16560_N9S19505C18D1Ev,_ZThn12364_N9S19505C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N9S19505C18D1Ev,_ZThn4816_N9S19505C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19505C18D0Ev,_ZTv0_n12_N9S19505C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4344_N9S19505C18D0Ev,_ZThn3312_N9S19505C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19505C18D1Ev,_ZTv0_n12_N9S19505C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4344_N9S19505C18D1Ev,_ZThn3312_N9S19505C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19505C19D0Ev,_ZTv0_n16_N9S19505C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4960_N9S19505C19D0Ev,_ZThn3792_N9S19505C19D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn15168_N9S19505C19D0Ev,_ZThn11340_N9S19505C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19505C19D1Ev,_ZTv0_n16_N9S19505C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4960_N9S19505C19D1Ev,_ZThn3792_N9S19505C19D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn15168_N9S19505C19D1Ev,_ZThn11340_N9S19505C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19505C19D0Ev,_ZTv0_n12_N9S19505C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2952_N9S19505C19D0Ev,_ZThn2288_N9S19505C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19505C19D1Ev,_ZTv0_n12_N9S19505C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2952_N9S19505C19D1Ev,_ZThn2288_N9S19505C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C8D0Ev,_ZTv0_n12_N8S19505C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2952_N8S19505C8D0Ev,_ZThn2288_N8S19505C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C8D1Ev,_ZTv0_n12_N8S19505C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2952_N8S19505C8D1Ev,_ZThn2288_N8S19505C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2952_N8S19505C3D0Ev,_ZThn2288_N8S19505C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2952_N8S19505C3D1Ev,_ZThn2288_N8S19505C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2952_N8S19505C5D0Ev,_ZThn2288_N8S19505C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2952_N8S19505C5D1Ev,_ZThn2288_N8S19505C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19505C6D0Ev,_ZTv0_n16_N8S19505C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N8S19505C6D0Ev,_ZThn1420_N8S19505C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N8S19505C6D0Ev,_ZThn4816_N8S19505C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19505C6D1Ev,_ZTv0_n16_N8S19505C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N8S19505C6D1Ev,_ZThn1420_N8S19505C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N8S19505C6D1Ev,_ZThn4816_N8S19505C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C6D0Ev,_ZTv0_n12_N8S19505C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4344_N8S19505C6D0Ev,_ZThn3312_N8S19505C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C6D1Ev,_ZTv0_n12_N8S19505C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4344_N8S19505C6D1Ev,_ZThn3312_N8S19505C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19505C11D0Ev,_ZTv0_n20_N9S19505C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6464_N9S19505C11D0Ev,_ZThn4876_N9S19505C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19505C11D1Ev,_ZTv0_n20_N9S19505C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6464_N9S19505C11D1Ev,_ZThn4876_N9S19505C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19505C11D0Ev,_ZTv0_n16_N9S19505C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16560_N9S19505C11D0Ev,_ZThn12364_N9S19505C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N9S19505C11D0Ev,_ZThn4816_N9S19505C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19505C11D1Ev,_ZTv0_n16_N9S19505C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16560_N9S19505C11D1Ev,_ZThn12364_N9S19505C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N9S19505C11D1Ev,_ZThn4816_N9S19505C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19505C11D0Ev,_ZTv0_n24_N9S19505C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4448_N9S19505C11D0Ev,_ZThn3396_N9S19505C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19505C11D1Ev,_ZTv0_n24_N9S19505C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4448_N9S19505C11D1Ev,_ZThn3396_N9S19505C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19505C11D0Ev,_ZTv0_n12_N9S19505C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4344_N9S19505C11D0Ev,_ZThn3312_N9S19505C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19505C11D1Ev,_ZTv0_n12_N9S19505C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4344_N9S19505C11D1Ev,_ZThn3312_N9S19505C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19505C11 = {  "S19505C11", // class name
  bases_S19505C11, 17,
  &(vtc_S19505C11[0]), // expected_vtbl_contents
  &(vtt_S19505C11[0]), // expected_vtt_contents
  ABISELECT(16592,12388), // object size
  NSPAIRA(_ZTI9S19505C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19505C11),67, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19505C11),41, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names42,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19505C10  {
  ::S19505C11 s19505c10f0;
  ::S19505C12 s19505c10f1[4];
  char s19505c10f2[10];
  int s19505c10f3;
  void *s19505c10f4;
  int s19505c10f5;
  int s19505c10f6[10];
  void *s19505c10f7;
  int s19505c10f8;
  int s19505c10f9:22;
  void *s19505c10f10;
  void *s19505c10f11;
  ::S20846C22 s19505c10f12[10];
  void  mf19505c10(); // _ZN9S19505C1010mf19505c10Ev
};
//SIG(-1 S19505C10) C1{ m FC2{ VBC3{ vd v1 Fs[6] FL[8] Fi} VBC4{ VBC5{ VBC3 BC6{ VBC3 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} VBC7{ BC8{ m Fp Fi FL Fp Fi} VBC5 Fp Fc[4] Fi:11 Fp[2] Fi[6] FC9{ VBC3 BC5 BC10{ VBC3 BC5 Fp[3] Fc:8 Fi[2] Fc FC3 Fp[3] FL[5] Fi} BC11{ vd m FC12{ VBC13{ vd v9 Fs[6] FL[8] Fi} BC14{ VBC13 FL Fp FL:54} v7 v8 Fc:0 Fp[8] Fc}} VBC6 Fp Fl FC10 FC11 FC6 Fi[2] FU15{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} BC16{ BC11 VBC3 VBC5 v4 FC5[2] FD FC11 Fp[3] FC10 Fi FU17{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi} v5 Fp FC18{} FC3 FL FU15 FL[6] FL FC10} BC19{ BC16 VBC6 BC3 BC20{ VBC3 BC10 VBC6 VBC5 vd Fp Fp[5] Fp} v6 FC3[9] Fc Fi Fi Fi Fc} vd FC9 FU15 Fi Fc} FC4[4] Fc[10] Fi Fp Fi Fi[10] Fp Fi Fi:22 Fp Fp FC21{ VBC22{ VBC23{ VBC24{ vd v11 Fs[6] FL[8] Fi} BC25{ VBC24 BC26{ VBC24 FL Fp FL:54} v12 v13 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC24 Fp[3] FL[5] Fi} Fp[6]} VBC27{ VBC25 VBC28{ BC8 VBC25 Fp Fc[4] Fi:11 Fp Fp Fi[6] FC29{ VBC24 BC25 BC23 BC11 VBC26 Fp Fl FC23 FC11 FC26 Fi Fi FU15[9]}[6]} BC30{ BC11 VBC24 VBC25 v14 FC25[2] FD FC11 Fp[3] FC23 Fi FU17 Fi} v15 Fp FC18 FC24 FL FU15 FL[6] FL FC23} VBC31{ BC23 VBC25 BC28 VBC29 VBC11 vd FC11[2] Fi FD FD Fc:0 Fp} BC32{ v16 Fi:0 Fi[6] Fi Fp} BC24 v10 Fi Fp Fi FC28[2] FC26 FD Fi[3] FU15 FL Fi[2] Fi FU15 Fp}[10]}


void  S19505C10 ::mf19505c10(){}

static void Test_S19505C10()
{
  {
    init_simple_test("S19505C10");
    static S19505C10 lv;
    check2(sizeof(lv), ABISELECT(528096,390960), "sizeof(S19505C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19505C10)");
    check_field_offset(lv, s19505c10f0, 0, "S19505C10.s19505c10f0");
    check_field_offset(lv, s19505c10f1, ABISELECT(16592,12388), "S19505C10.s19505c10f1");
    check_field_offset(lv, s19505c10f2, ABISELECT(65424,48596), "S19505C10.s19505c10f2");
    check_field_offset(lv, s19505c10f3, ABISELECT(65436,48608), "S19505C10.s19505c10f3");
    check_field_offset(lv, s19505c10f4, ABISELECT(65440,48612), "S19505C10.s19505c10f4");
    check_field_offset(lv, s19505c10f5, ABISELECT(65448,48616), "S19505C10.s19505c10f5");
    check_field_offset(lv, s19505c10f6, ABISELECT(65452,48620), "S19505C10.s19505c10f6");
    check_field_offset(lv, s19505c10f7, ABISELECT(65496,48660), "S19505C10.s19505c10f7");
    check_field_offset(lv, s19505c10f8, ABISELECT(65504,48664), "S19505C10.s19505c10f8");
    set_bf_and_test(lv, s19505c10f9, ABISELECT(65508,48668), 0, 22, 1, "S19505C10");
    set_bf_and_test(lv, s19505c10f9, ABISELECT(65508,48668), 0, 22, hide_sll(1LL<<21), "S19505C10");
    check_field_offset(lv, s19505c10f10, ABISELECT(65512,48672), "S19505C10.s19505c10f10");
    check_field_offset(lv, s19505c10f11, ABISELECT(65520,48676), "S19505C10.s19505c10f11");
    check_field_offset(lv, s19505c10f12, ABISELECT(65536,48680), "S19505C10.s19505c10f12");
  }
}
static Arrange_To_Call_Me vS19505C10(Test_S19505C10, "S19505C10", ABISELECT(528096,390960));

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S19505C10[];
VTBL_ENTRY *P__ZTI9S19505C10 = _ZTI9S19505C10; 
Class_Descriptor cd_S19505C10 = {  "S19505C10", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(528096,390960), // object size
  NSPAIRA(_ZTI9S19505C10),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19505C2  : S19505C3 , S19505C6 , S19505C10 , S19505C5 {
  ::S3052C13 s19505c2f0;
  int s19505c2f1;
  void *s19505c2f2;
  char s19505c2f3[7];
  void *s19505c2f4;
  int s19505c2f5;
  ::S3052C22_nt s19505c2f6;
  int s19505c2f7;
  long double s19505c2f8;
  virtual void  v5(); // _ZN8S19505C22v5Ev
  ~S19505C2(); // tgen
  S19505C2(); // tgen
};
//SIG(-1 S19505C2) C1{ BC2{ VBC3{ vd v2 Fs[6] FL[8] Fi} BC4{ VBC3 FL Fp FL:54} v3 v4 Fc:0 Fp[8] Fc} BC5{ BC6{ vd m FC7{ VBC8{ vd v8 Fs[6] FL[8] Fi} BC9{ VBC8 FL Fp FL:54} v6 v7 Fc:0 Fp[8] Fc}} VBC3 VBC2 v5 FC2[2] FD FC6 Fp[3] FC10{ VBC3 BC2 Fp[3] Fc:8 Fi[2] Fc FC3 Fp[3] FL[5] Fi} Fi FU11{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi} BC12{ m FC13{ VBC3 VBC14{ VBC2 VBC15{ BC16{ m Fp Fi FL Fp Fi} VBC2 Fp Fc[4] Fi:11 Fp Fp Fi[6] FC17{ VBC3 BC2 BC10 BC6 VBC4 Fp Fl FC10 FC6 FC4 Fi Fi FU18{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} BC5 v9 Fp FC19{} FC3 FL FU18 FL[6] FL FC10} BC20{ BC5 VBC4 BC3 BC21{ VBC3 BC10 VBC4 VBC2 vd Fp Fp[5] Fp} v10 FC3[9] Fc Fi Fi Fi Fc} vd FC17 FU18 Fi Fc} FC14[4] Fc[10] Fi Fp Fi Fi[10] Fp Fi Fi:22 Fp Fp FC22{ VBC23{ VBC24{ VBC25{ vd v12 Fs[6] FL[8] Fi} BC26{ VBC25 BC27{ VBC25 FL Fp FL:54} v13 v14 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC25 Fp[3] FL[5] Fi} Fp[6]} VBC28{ VBC26 VBC29{ BC16 VBC26 Fp Fc[4] Fi:11 Fp Fp Fi[6] FC30{ VBC25 BC26 BC24 BC6 VBC27 Fp Fl FC24 FC6 FC27 Fi Fi FU18[9]}[6]} BC31{ BC6 VBC25 VBC26 v15 FC26[2] FD FC6 Fp[3] FC24 Fi FU11 Fi} v16 Fp FC19 FC25 FL FU18 FL[6] FL FC24} VBC32{ BC24 VBC26 BC29 VBC30 VBC6 vd FC6[2] Fi FD FD Fc:0 Fp} BC33{ v17 Fi:0 Fi[6] Fi Fp} BC25 v11 Fi Fp Fi FC29[2] FC27 FD Fi[3] FU18 FL Fi[2] Fi FU18 Fp}[10]} BC4 v1 FU18 Fi Fp Fc[7] Fp Fi FC19 Fi FD}


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

static void Test_S19505C2()
{
  extern Class_Descriptor cd_S19505C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33115,98047)];
    init_test(&cd_S19505C2, buf);
    S19505C2 *dp, &lv = *(dp=new (buf) S19505C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(529824,392184), "sizeof(S19505C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19505C2)");
    /*is_ambiguous_... S19505C2::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C4*)(S19505C3*), ABISELECT(529616,392040), "S19505C2");
    /*is_ambiguous_... S19505C2::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C4*)(S19505C5*)(S19505C3*), ABISELECT(529616,392040), "S19505C2");
    check_base_class_offset(lv, (S19505C4*)(S19505C6*), ABISELECT(529616,392040), "S19505C2");
    /*is_ambiguous_... S19505C2::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C4*)(S19505C3*), ABISELECT(529616,392040), "S19505C2");
    /*is_ambiguous_... S19505C2::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C4*)(S19505C5*)(S19505C3*), ABISELECT(529616,392040), "S19505C2");
    /*is_ambiguous_... S19505C2::S19505C5 */ AMB_check_base_class_offset(lv, (S19505C4*)(S19505C5*), ABISELECT(529616,392040), "S19505C2");
    /*is_ambiguous_... S19505C2::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C5*)(S19505C3*), 0, "S19505C2");
    /*is_ambiguous_... S19505C2::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C3*), 0, "S19505C2");
    check_base_class_offset(lv, (S3052C12*)(S19505C6*), ABISELECT(112,60), "S19505C2");
    /*is_ambiguous_... S19505C2::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C5*)(S19505C3*), ABISELECT(529712,392124), "S19505C2");
    check_base_class_offset(lv, (S19505C3*)(S19505C6*), ABISELECT(529712,392124), "S19505C2");
    check_base_class_offset(lv, (S19505C6*), ABISELECT(112,60), "S19505C2");
    check_base_class_offset(lv, (S19505C10*), ABISELECT(1408,1000), "S19505C2");
    /*is_ambiguous_... S19505C2::S19505C5 */ AMB_check_base_class_offset(lv, (S19505C5*), ABISELECT(529504,391960), "S19505C2");
    check_field_offset(lv, s19505c2f0, ABISELECT(529536,391984), "S19505C2.s19505c2f0");
    check_field_offset(lv, s19505c2f1, ABISELECT(529552,391996), "S19505C2.s19505c2f1");
    check_field_offset(lv, s19505c2f2, ABISELECT(529560,392000), "S19505C2.s19505c2f2");
    check_field_offset(lv, s19505c2f3, ABISELECT(529568,392004), "S19505C2.s19505c2f3");
    check_field_offset(lv, s19505c2f4, ABISELECT(529576,392012), "S19505C2.s19505c2f4");
    check_field_offset(lv, s19505c2f5, ABISELECT(529584,392016), "S19505C2.s19505c2f5");
    check_field_offset(lv, s19505c2f6, ABISELECT(529588,392020), "S19505C2.s19505c2f6");
    check_field_offset(lv, s19505c2f7, ABISELECT(529592,392024), "S19505C2.s19505c2f7");
    check_field_offset(lv, s19505c2f8, ABISELECT(529600,392028), "S19505C2.s19505c2f8");
    test_class_info(&lv, &cd_S19505C2);
    dp->~S19505C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19505C2(Test_S19505C2, "S19505C2", ABISELECT(529824,392184));

#else // __cplusplus

extern void _ZN8S19505C2C1Ev();
extern void _ZN8S19505C2D1Ev();
Name_Map name_map_S19505C2[] = {
  NSPAIR(_ZN8S19505C2C1Ev),
  NSPAIR(_ZN8S19505C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19505C4;
extern VTBL_ENTRY _ZTI8S19505C4[];
extern  VTBL_ENTRY _ZTV8S19505C4[];
extern Class_Descriptor cd_S19505C5;
extern VTBL_ENTRY _ZTI8S19505C5[];
extern  VTBL_ENTRY _ZTV8S19505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C5[];
extern Class_Descriptor cd_S19505C3;
extern VTBL_ENTRY _ZTI8S19505C3[];
extern  VTBL_ENTRY _ZTV8S19505C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C3[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S19505C5;
extern VTBL_ENTRY _ZTI8S19505C5[];
extern  VTBL_ENTRY _ZTV8S19505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C5[];
extern Class_Descriptor cd_S19505C3;
extern VTBL_ENTRY _ZTI8S19505C3[];
extern  VTBL_ENTRY _ZTV8S19505C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C3[];
extern Class_Descriptor cd_S19505C6;
extern VTBL_ENTRY _ZTI8S19505C6[];
extern  VTBL_ENTRY _ZTV8S19505C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C6[];
extern Class_Descriptor cd_S19505C10;
extern VTBL_ENTRY _ZTI9S19505C10[];
extern Class_Descriptor cd_S19505C5;
extern VTBL_ENTRY _ZTI8S19505C5[];
extern  VTBL_ENTRY _ZTV8S19505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C5[];
static Base_Class bases_S19505C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19505C4,    ABISELECT(529616,392040), //bcp->offset
    21, //bcp->virtual_function_table_offset
    4, //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_S19505C5,    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_S19505C3,    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_S3052C12,    ABISELECT(112,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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S19505C5,    ABISELECT(529712,392124), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19505C3,    ABISELECT(529712,392124), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19505C6,    ABISELECT(112,60), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19505C10,    ABISELECT(1408,1000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19505C5,    ABISELECT(529504,391960), //bcp->offset
    16, //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 _ZTI8S19505C2[];
extern void _ZN8S19505C2D1Ev();
extern void _ZN8S19505C2D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
extern void _ZN8S19505C22v5Ev();
extern void ABISELECT(_ZThn112_N8S19505C2D1Ev,_ZThn60_N8S19505C2D1Ev)();
extern void ABISELECT(_ZThn112_N8S19505C2D0Ev,_ZThn60_N8S19505C2D0Ev)();
extern void _ZN8S19505C62v4Ev();
extern void ABISELECT(_ZThn529504_N8S19505C2D1Ev,_ZThn391960_N8S19505C2D1Ev)();
extern void ABISELECT(_ZThn529504_N8S19505C2D0Ev,_ZThn391960_N8S19505C2D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19505C2D1Ev,_ZTv0_n12_N8S19505C2D1Ev)();
extern void ABISELECT(_ZThn529616_N8S19505C2D1Ev,_ZThn392040_N8S19505C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C2D0Ev,_ZTv0_n12_N8S19505C2D0Ev)();
extern void ABISELECT(_ZThn529616_N8S19505C2D0Ev,_ZThn392040_N8S19505C2D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19505C2D1Ev,_ZTv0_n16_N8S19505C2D1Ev)();
extern void ABISELECT(_ZThn529712_N8S19505C2D1Ev,_ZThn392124_N8S19505C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19505C2D0Ev,_ZTv0_n16_N8S19505C2D0Ev)();
extern void ABISELECT(_ZThn529712_N8S19505C2D0Ev,_ZThn392124_N8S19505C2D0Ev)() __attribute__((weak));
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY vtc_S19505C2[] = {
  ABISELECT(529712,392124),
  ABISELECT(529616,392040),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C2[0]),
  (VTBL_ENTRY)&_ZN8S19505C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19505C22v5Ev,
  ABISELECT(529600,392064),
  ABISELECT(529504,391980),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S19505C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S19505C2D1Ev,_ZThn60_N8S19505C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S19505C2D0Ev,_ZThn60_N8S19505C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C62v4Ev,
  ABISELECT(112,80),
  ABISELECT(-529504,-391960),
  (VTBL_ENTRY)&(_ZTI8S19505C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn529504_N8S19505C2D1Ev,_ZThn391960_N8S19505C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn529504_N8S19505C2D0Ev,_ZThn391960_N8S19505C2D0Ev),
  0,
  ABISELECT(-529616,-392040),
  ABISELECT(-529616,-392040),
  (VTBL_ENTRY)&(_ZTI8S19505C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C2D1Ev,_ZTv0_n12_N8S19505C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C2D0Ev,_ZTv0_n12_N8S19505C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
  0,
  0,
  ABISELECT(-529712,-392124),
  ABISELECT(-96,-84),
  ABISELECT(-529712,-392124),
  (VTBL_ENTRY)&(_ZTI8S19505C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19505C2D1Ev,_ZTv0_n16_N8S19505C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19505C2D0Ev,_ZTv0_n16_N8S19505C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern VTBL_ENTRY _ZTV8S19505C2[];
extern void _ZN8S19505C3D1Ev();
extern void _ZN8S19505C3D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C3__A__8S19505C2[] = {
  ABISELECT(529616,392040),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&_ZN8S19505C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C5D1Ev();
extern void _ZN8S19505C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C58S19505C3__8S19505C2[] = {
  ABISELECT(529616,392040),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&_ZN8S19505C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev)();
extern void ABISELECT(_ZThn529616_N8S19505C5D1Ev,_ZThn392040_N8S19505C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev)();
extern void ABISELECT(_ZThn529616_N8S19505C5D0Ev,_ZThn392040_N8S19505C5D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C58S19505C3__8S19505C2[] = {
  0,
  ABISELECT(-529616,-392040),
  ABISELECT(-529616,-392040),
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev)();
extern void ABISELECT(_ZThn529616_N8S19505C3D1Ev,_ZThn392040_N8S19505C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev)();
extern void ABISELECT(_ZThn529616_N8S19505C3D0Ev,_ZThn392040_N8S19505C3D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C3__A__8S19505C2[] = {
  0,
  ABISELECT(-529616,-392040),
  ABISELECT(-529616,-392040),
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void _ZN8S19505C6D1Ev();
extern void _ZN8S19505C6D0Ev();
extern void _ZN8S19505C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C6__8S19505C2[] = {
  ABISELECT(529600,392064),
  ABISELECT(529504,391980),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C6[0]),
  (VTBL_ENTRY)&_ZN8S19505C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C62v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C6D1Ev,_ZTv0_n12_N8S19505C6D1Ev)();
extern void ABISELECT(_ZThn529504_N8S19505C6D1Ev,_ZThn391980_N8S19505C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C6D0Ev,_ZTv0_n12_N8S19505C6D0Ev)();
extern void ABISELECT(_ZThn529504_N8S19505C6D0Ev,_ZThn391980_N8S19505C6D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C6__8S19505C2[] = {
  0,
  ABISELECT(-529504,-391980),
  ABISELECT(-529504,-391980),
  (VTBL_ENTRY)&(_ZTI8S19505C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C6D1Ev,_ZTv0_n12_N8S19505C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C6D0Ev,_ZTv0_n12_N8S19505C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19505C6D1Ev,_ZTv0_n16_N8S19505C6D1Ev)();
extern void ABISELECT(_ZThn529600_N8S19505C6D1Ev,_ZThn392064_N8S19505C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19505C6D0Ev,_ZTv0_n16_N8S19505C6D0Ev)();
extern void ABISELECT(_ZThn529600_N8S19505C6D0Ev,_ZThn392064_N8S19505C6D0Ev)() __attribute__((weak));
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C3__8S19505C6__8S19505C2[] = {
  0,
  0,
  ABISELECT(-529600,-392064),
  ABISELECT(-96,-84),
  ABISELECT(-529600,-392064),
  (VTBL_ENTRY)&(_ZTI8S19505C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19505C6D1Ev,_ZTv0_n16_N8S19505C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19505C6D0Ev,_ZTv0_n16_N8S19505C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C5D1Ev();
extern void _ZN8S19505C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C5__A2__8S19505C2[] = {
  ABISELECT(112,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&_ZN8S19505C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev)();
extern void ABISELECT(_ZThn112_N8S19505C5D1Ev,_ZThn80_N8S19505C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev)();
extern void ABISELECT(_ZThn112_N8S19505C5D0Ev,_ZThn80_N8S19505C5D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C5__A2__8S19505C2[] = {
  0,
  ABISELECT(-112,-80),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void _ZN8S19505C3D1Ev();
extern void _ZN8S19505C3D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C3__A1__8S19505C2[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&_ZN8S19505C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C5D1Ev();
extern void _ZN8S19505C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C58S19505C3__A1__8S19505C2[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&_ZN8S19505C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev)();
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C58S19505C3__A1__8S19505C2[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev)();
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C3__A1__8S19505C2[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
static  VTT_ENTRY vtt_S19505C2[] = {
  {&(_ZTV8S19505C2[4]),  4,38},
  {&(_tg__ZTV8S19505C3__A__8S19505C2[3]),  3,7},
  {&(_tg__ZTV8S19505C58S19505C3__8S19505C2[3]),  3,5},
  {&(_tg__ZTV8S19505C4__8S19505C58S19505C3__8S19505C2[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C3__A__8S19505C2[4]),  4,7},
  {&(_tg__ZTV8S19505C6__8S19505C2[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C6__8S19505C2[4]),  4,7},
  {&(_tg__ZTV8S19505C3__8S19505C6__8S19505C2[6]),  6,10},
  {&(_tg__ZTV8S19505C5__A2__8S19505C2[3]),  3,5},
  {&(_tg__ZTV8S19505C4__8S19505C5__A2__8S19505C2[4]),  4,7},
  {&(_ZTV8S19505C2[25]),  25,38},
  {&(_ZTV8S19505C2[13]),  13,38},
  {&(_ZTV8S19505C2[34]),  34,38},
  {&(_ZTV8S19505C2[19]),  19,38},
  {&(_tg__ZTV8S19505C3__A1__8S19505C2[3]),  3,7},
  {&(_tg__ZTV8S19505C58S19505C3__A1__8S19505C2[3]),  3,5},
  {&(_tg__ZTV8S19505C4__8S19505C58S19505C3__A1__8S19505C2[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C3__A1__8S19505C2[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19505C2[];
extern  VTBL_ENTRY _ZTV8S19505C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C2[];
static VTBL_ENTRY alt_thunk_names43[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19505C6D0Ev,_ZTv0_n16_N8S19505C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529600_N8S19505C6D0Ev,_ZThn392064_N8S19505C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19505C6D1Ev,_ZTv0_n16_N8S19505C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529600_N8S19505C6D1Ev,_ZThn392064_N8S19505C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C6D0Ev,_ZTv0_n12_N8S19505C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529504_N8S19505C6D0Ev,_ZThn391980_N8S19505C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C6D1Ev,_ZTv0_n12_N8S19505C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529504_N8S19505C6D1Ev,_ZThn391980_N8S19505C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529616_N8S19505C3D0Ev,_ZThn392040_N8S19505C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529616_N8S19505C3D1Ev,_ZThn392040_N8S19505C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19505C5D0Ev,_ZThn80_N8S19505C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn529616_N8S19505C5D0Ev,_ZThn392040_N8S19505C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19505C5D1Ev,_ZThn80_N8S19505C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn529616_N8S19505C5D1Ev,_ZThn392040_N8S19505C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19505C2D0Ev,_ZTv0_n16_N8S19505C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529712_N8S19505C2D0Ev,_ZThn392124_N8S19505C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19505C2D1Ev,_ZTv0_n16_N8S19505C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529712_N8S19505C2D1Ev,_ZThn392124_N8S19505C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C2D0Ev,_ZTv0_n12_N8S19505C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529616_N8S19505C2D0Ev,_ZThn392040_N8S19505C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C2D1Ev,_ZTv0_n12_N8S19505C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529616_N8S19505C2D1Ev,_ZThn392040_N8S19505C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19505C2 = {  "S19505C2", // class name
  bases_S19505C2, 9,
  &(vtc_S19505C2[0]), // expected_vtbl_contents
  &(vtt_S19505C2[0]), // expected_vtt_contents
  ABISELECT(529824,392184), // object size
  NSPAIRA(_ZTI8S19505C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19505C2),38, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19505C2),18, //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  S19505C23  {
  int  :0;
  int s19505c23f1[6];
  int s19505c23f2;
  void *s19505c23f3;
  virtual void  v6(); // _ZN9S19505C232v6Ev
  ~S19505C23(); // tgen
  S19505C23(); // tgen
};
//SIG(-1 S19505C23) C1{ v1 Fi:0 Fi[7] Fp}


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

static void Test_S19505C23()
{
  extern Class_Descriptor cd_S19505C23;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S19505C23, buf);
    S19505C23 *dp, &lv = *(dp=new (buf) S19505C23());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S19505C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19505C23)");
    check_field_offset(lv, s19505c23f1, ABISELECT(8,4), "S19505C23.s19505c23f1");
    check_field_offset(lv, s19505c23f2, ABISELECT(32,28), "S19505C23.s19505c23f2");
    check_field_offset(lv, s19505c23f3, ABISELECT(40,32), "S19505C23.s19505c23f3");
    test_class_info(&lv, &cd_S19505C23);
    dp->~S19505C23();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19505C23(Test_S19505C23, "S19505C23", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN9S19505C23C1Ev();
extern void _ZN9S19505C23D1Ev();
Name_Map name_map_S19505C23[] = {
  NSPAIR(_ZN9S19505C23C1Ev),
  NSPAIR(_ZN9S19505C23D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19505C23[];
extern void _ZN9S19505C232v6Ev();
static  VTBL_ENTRY vtc_S19505C23[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19505C23[0]),
  (VTBL_ENTRY)&_ZN9S19505C232v6Ev,
};
extern VTBL_ENTRY _ZTI9S19505C23[];
extern  VTBL_ENTRY _ZTV9S19505C23[];
Class_Descriptor cd_S19505C23 = {  "S19505C23", // class name
  0,0,//no base classes
  &(vtc_S19505C23[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI9S19505C23),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19505C23),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  S19505C1  : virtual S19505C2 , virtual S19505C23 , virtual S19505C13 {
  ::S3052C13 s19505c1f0[8];
  __tsi64 s19505c1f1;
  ::S3052C22_nt s19505c1f2;
  int s19505c1f3;
  int s19505c1f4;
  ::S3052C13 s19505c1f5;
  short s19505c1f6;
  ::S3052C13 s19505c1f7;
  int s19505c1f8;
  ::S19505C19 s19505c1f9;
  int s19505c1f10[2];
  char  :0;
  void *s19505c1f12[4];
  ~S19505C1(); // tgen
  S19505C1(); // tgen
};
//SIG(1 S19505C1) C1{ VBC2{ BC3{ VBC4{ vd v1 Fs[6] FL[8] Fi} BC5{ VBC4 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} BC6{ BC7{ vd m FC8{ VBC9{ vd v9 Fs[6] FL[8] Fi} BC10{ VBC9 FL Fp FL:54} v7 v8 Fc:0 Fp[8] Fc}} VBC4 VBC3 v4 FC3[2] FD FC7 Fp[3] FC11{ VBC4 BC3 Fp[3] Fc:8 Fi[2] Fc FC4 Fp[3] FL[5] Fi} Fi FU12{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi} BC13{ m FC14{ VBC4 VBC15{ VBC3 VBC16{ BC17{ m Fp Fi FL Fp Fi} VBC3 Fp Fc[4] Fi:11 Fp Fp Fi[6] FC18{ VBC4 BC3 BC11 BC7 VBC5 Fp Fl FC11 FC7 FC5 Fi Fi FU19{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} BC6 v10 Fp FC20{} FC4 FL FU19 FL[6] FL FC11} BC21{ BC6 VBC5 BC4 BC22{ VBC4 BC11 VBC5 VBC3 vd Fp Fp[5] Fp} v11 FC4[9] Fc Fi Fi Fi Fc} vd FC18 FU19 Fi Fc} FC15[4] Fc[10] Fi Fp Fi Fi[10] Fp Fi Fi:22 Fp Fp FC23{ VBC24{ VBC25{ VBC26{ vd v13 Fs[6] FL[8] Fi} BC27{ VBC26 BC28{ VBC26 FL Fp FL:54} v14 v15 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC26 Fp[3] FL[5] Fi} Fp[6]} VBC29{ VBC27 VBC30{ BC17 VBC27 Fp Fc[4] Fi:11 Fp Fp Fi[6] FC31{ VBC26 BC27 BC25 BC7 VBC28 Fp Fl FC25 FC7 FC28 Fi Fi FU19[9]}[6]} BC32{ BC7 VBC26 VBC27 v16 FC27[2] FD FC7 Fp[3] FC25 Fi FU12 Fi} v17 Fp FC20 FC26 FL FU19 FL[6] FL FC25} VBC33{ BC25 VBC27 BC30 VBC31 VBC7 vd FC7[2] Fi FD FD Fc:0 Fp} BC34{ v18 Fi:0 Fi[6] Fi Fp} BC26 v12 Fi Fp Fi FC30[2] FC28 FD Fi[3] FU19 FL Fi[2] Fi FU19 Fp}[10]} BC5 v5 FU19 Fi Fp Fc[7] Fp Fi FC20 Fi FD} VBC35{ v6 Fi:0 Fi[6] Fi Fp} VBC16 FU19[8] FL FC20 Fi Fi FU19 Fs FU19 Fi FC22 Fi[2] Fc:0 Fp[4]}


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

static void Test_S19505C1()
{
  extern Class_Descriptor cd_S19505C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(33804,100078)];
    init_test(&cd_S19505C1, buf);
    S19505C1 *dp, &lv = *(dp=new (buf) S19505C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(540848,400308), "sizeof(S19505C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19505C1)");
    /*is_ambiguous_... S19505C2::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C4*)(S19505C3*)(S19505C2*), ABISELECT(530496,392640), "S19505C1");
    /*is_ambiguous_... S19505C2::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C4*)(S19505C5*)(S19505C3*)(S19505C2*), ABISELECT(530496,392640), "S19505C1");
    check_base_class_offset(lv, (S19505C4*)(S19505C6*)(S19505C2*), ABISELECT(530496,392640), "S19505C1");
    /*is_ambiguous_... S19505C1::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C4*)(S19505C3*), ABISELECT(530496,392640), "S19505C1");
    /*is_ambiguous_... S19505C1::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C4*)(S19505C5*)(S19505C3*), ABISELECT(530496,392640), "S19505C1");
    /*is_ambiguous_... S19505C2::S19505C5 */ AMB_check_base_class_offset(lv, (S19505C4*)(S19505C5*)(S19505C2*), ABISELECT(530496,392640), "S19505C1");
    /*is_ambiguous_... S19505C2::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C5*)(S19505C3*)(S19505C2*), ABISELECT(880,600), "S19505C1");
    /*is_ambiguous_... S19505C2::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C3*)(S19505C2*), ABISELECT(880,600), "S19505C1");
    check_base_class_offset(lv, (S3052C12*)(S19505C6*)(S19505C2*), ABISELECT(992,660), "S19505C1");
    /*is_ambiguous_... S19505C1::S19505C3 */ AMB_check_base_class_offset(lv, (S19505C5*)(S19505C3*), ABISELECT(530592,392724), "S19505C1");
    check_base_class_offset(lv, (S19505C3*)(S19505C6*)(S19505C2*), ABISELECT(530592,392724), "S19505C1");
    check_base_class_offset(lv, (S19505C3*)(S19505C13*), ABISELECT(530592,392724), "S19505C1");
    check_base_class_offset(lv, (S19505C6*)(S19505C2*), ABISELECT(992,660), "S19505C1");
    check_base_class_offset(lv, (S19505C10*)(S19505C2*), ABISELECT(2288,1600), "S19505C1");
    /*is_ambiguous_... S19505C2::S19505C5 */ AMB_check_base_class_offset(lv, (S19505C5*)(S19505C2*), ABISELECT(530384,392560), "S19505C1");
    check_base_class_offset(lv, (S19505C2*), ABISELECT(880,600), "S19505C1");
    check_base_class_offset(lv, (S19505C23*), ABISELECT(530696,392784), "S19505C1");
    check_base_class_offset(lv, (S3052C10*)(S19505C13*), ABISELECT(530760,392824), "S19505C1");
    check_base_class_offset(lv, (S19505C13*), ABISELECT(530752,392820), "S19505C1");
    check_field_offset(lv, s19505c1f0, ABISELECT(16,4), "S19505C1.s19505c1f0");
    check_field_offset(lv, s19505c1f1, ABISELECT(144,100), "S19505C1.s19505c1f1");
    check_field_offset(lv, s19505c1f2, ABISELECT(152,108), "S19505C1.s19505c1f2");
    check_field_offset(lv, s19505c1f3, ABISELECT(156,112), "S19505C1.s19505c1f3");
    check_field_offset(lv, s19505c1f4, ABISELECT(160,116), "S19505C1.s19505c1f4");
    check_field_offset(lv, s19505c1f5, ABISELECT(176,120), "S19505C1.s19505c1f5");
    check_field_offset(lv, s19505c1f6, ABISELECT(192,132), "S19505C1.s19505c1f6");
    check_field_offset(lv, s19505c1f7, ABISELECT(208,136), "S19505C1.s19505c1f7");
    check_field_offset(lv, s19505c1f8, ABISELECT(224,148), "S19505C1.s19505c1f8");
    check_field_offset(lv, s19505c1f9, ABISELECT(232,152), "S19505C1.s19505c1f9");
    check_field_offset(lv, s19505c1f10, ABISELECT(832,576), "S19505C1.s19505c1f10");
    check_field_offset(lv, s19505c1f12, ABISELECT(840,584), "S19505C1.s19505c1f12");
    test_class_info(&lv, &cd_S19505C1);
    dp->~S19505C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19505C1(Test_S19505C1, "S19505C1", ABISELECT(540848,400308));

#else // __cplusplus

extern void _ZN8S19505C1C1Ev();
extern void _ZN8S19505C1D1Ev();
Name_Map name_map_S19505C1[] = {
  NSPAIR(_ZN8S19505C1C1Ev),
  NSPAIR(_ZN8S19505C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19505C4;
extern VTBL_ENTRY _ZTI8S19505C4[];
extern  VTBL_ENTRY _ZTV8S19505C4[];
extern Class_Descriptor cd_S19505C5;
extern VTBL_ENTRY _ZTI8S19505C5[];
extern  VTBL_ENTRY _ZTV8S19505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C5[];
extern Class_Descriptor cd_S19505C3;
extern VTBL_ENTRY _ZTI8S19505C3[];
extern  VTBL_ENTRY _ZTV8S19505C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C3[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S19505C5;
extern VTBL_ENTRY _ZTI8S19505C5[];
extern  VTBL_ENTRY _ZTV8S19505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C5[];
extern Class_Descriptor cd_S19505C3;
extern VTBL_ENTRY _ZTI8S19505C3[];
extern  VTBL_ENTRY _ZTV8S19505C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C3[];
extern Class_Descriptor cd_S19505C6;
extern VTBL_ENTRY _ZTI8S19505C6[];
extern  VTBL_ENTRY _ZTV8S19505C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C6[];
extern Class_Descriptor cd_S19505C10;
extern VTBL_ENTRY _ZTI9S19505C10[];
extern Class_Descriptor cd_S19505C5;
extern VTBL_ENTRY _ZTI8S19505C5[];
extern  VTBL_ENTRY _ZTV8S19505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C5[];
extern Class_Descriptor cd_S19505C2;
extern VTBL_ENTRY _ZTI8S19505C2[];
extern  VTBL_ENTRY _ZTV8S19505C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C2[];
extern Class_Descriptor cd_S19505C23;
extern VTBL_ENTRY _ZTI9S19505C23[];
extern  VTBL_ENTRY _ZTV9S19505C23[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S19505C13;
extern VTBL_ENTRY _ZTI9S19505C13[];
extern  VTBL_ENTRY _ZTV9S19505C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19505C13[];
static Base_Class bases_S19505C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19505C4,    ABISELECT(530496,392640), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //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_S19505C5,    ABISELECT(880,600), //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
    4, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19505C3,    ABISELECT(880,600), //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
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S3052C12,    ABISELECT(992,660), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S19505C5,    ABISELECT(530592,392724), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19505C3,    ABISELECT(530592,392724), //bcp->offset
    42, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19505C6,    ABISELECT(992,660), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19505C10,    ABISELECT(2288,1600), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19505C5,    ABISELECT(530384,392560), //bcp->offset
    30, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19505C2,    ABISELECT(880,600), //bcp->offset
    9, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19505C23,    ABISELECT(530696,392784), //bcp->offset
    52, //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
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C10,    ABISELECT(530760,392824), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19505C13,    ABISELECT(530752,392820), //bcp->offset
    56, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19505C1[];
extern void _ZN8S19505C1D1Ev();
extern void _ZN8S19505C1D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S19505C1D1Ev,_ZTv0_n20_N8S19505C1D1Ev)();
extern void ABISELECT(_ZThn880_N8S19505C1D1Ev,_ZThn600_N8S19505C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19505C1D0Ev,_ZTv0_n20_N8S19505C1D0Ev)();
extern void ABISELECT(_ZThn880_N8S19505C1D0Ev,_ZThn600_N8S19505C1D0Ev)() __attribute__((weak));
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
extern void _ZN8S19505C22v5Ev();
extern void ABISELECT(_ZTvn112_n40_N8S19505C1D1Ev,_ZTvn60_n20_N8S19505C1D1Ev)();
extern void ABISELECT(_ZTvn112_n40_N8S19505C1D0Ev,_ZTvn60_n20_N8S19505C1D0Ev)();
extern void _ZN8S19505C62v4Ev();
extern void ABISELECT(_ZTvn529504_n40_N8S19505C1D1Ev,_ZTvn391960_n20_N8S19505C1D1Ev)();
extern void ABISELECT(_ZTvn529504_n40_N8S19505C1D0Ev,_ZTvn391960_n20_N8S19505C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19505C1D1Ev,_ZTv0_n12_N8S19505C1D1Ev)();
extern void ABISELECT(_ZThn530496_N8S19505C1D1Ev,_ZThn392640_N8S19505C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C1D0Ev,_ZTv0_n12_N8S19505C1D0Ev)();
extern void ABISELECT(_ZThn530496_N8S19505C1D0Ev,_ZThn392640_N8S19505C1D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S19505C1D1Ev,_ZTv0_n16_N8S19505C1D1Ev)();
extern void ABISELECT(_ZThn530592_N8S19505C1D1Ev,_ZThn392724_N8S19505C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19505C1D0Ev,_ZTv0_n16_N8S19505C1D0Ev)();
extern void ABISELECT(_ZThn530592_N8S19505C1D0Ev,_ZThn392724_N8S19505C1D0Ev)() __attribute__((weak));
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
extern void _ZN9S19505C232v6Ev();
extern void ABISELECT(_ZTv0_n40_N8S19505C1D1Ev,_ZTv0_n20_N8S19505C1D1Ev)();
extern void ABISELECT(_ZThn530752_N8S19505C1D1Ev,_ZThn392820_N8S19505C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19505C1D0Ev,_ZTv0_n20_N8S19505C1D0Ev)();
extern void ABISELECT(_ZThn530752_N8S19505C1D0Ev,_ZThn392820_N8S19505C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19505C1[] = {
  ABISELECT(530752,392820),
  ABISELECT(530696,392784),
  ABISELECT(530592,392724),
  ABISELECT(530496,392640),
  ABISELECT(880,600),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C1[0]),
  (VTBL_ENTRY)&_ZN8S19505C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C1D0Ev,
  ABISELECT(112,60),
  0,
  0,
  0,
  ABISELECT(-880,-600),
  ABISELECT(529712,392124),
  ABISELECT(529616,392040),
  ABISELECT(-880,-600),
  (VTBL_ENTRY)&(_ZTI8S19505C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19505C1D1Ev,_ZTv0_n20_N8S19505C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19505C1D0Ev,_ZTv0_n20_N8S19505C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19505C22v5Ev,
  ABISELECT(529600,392064),
  ABISELECT(529504,391980),
  ABISELECT(-992,-660),
  (VTBL_ENTRY)&(_ZTI8S19505C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n40_N8S19505C1D1Ev,_ZTvn60_n20_N8S19505C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn112_n40_N8S19505C1D0Ev,_ZTvn60_n20_N8S19505C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C62v4Ev,
  ABISELECT(112,80),
  ABISELECT(-530384,-392560),
  (VTBL_ENTRY)&(_ZTI8S19505C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn529504_n40_N8S19505C1D1Ev,_ZTvn391960_n20_N8S19505C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn529504_n40_N8S19505C1D0Ev,_ZTvn391960_n20_N8S19505C1D0Ev),
  0,
  ABISELECT(-530496,-392640),
  ABISELECT(-530496,-392640),
  (VTBL_ENTRY)&(_ZTI8S19505C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C1D1Ev,_ZTv0_n12_N8S19505C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C1D0Ev,_ZTv0_n12_N8S19505C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
  0,
  0,
  ABISELECT(-530592,-392724),
  ABISELECT(-96,-84),
  ABISELECT(-530592,-392724),
  (VTBL_ENTRY)&(_ZTI8S19505C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19505C1D1Ev,_ZTv0_n16_N8S19505C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19505C1D0Ev,_ZTv0_n16_N8S19505C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
  0,
  ABISELECT(-530696,-392784),
  (VTBL_ENTRY)&(_ZTI8S19505C1[0]),
  (VTBL_ENTRY)&_ZN9S19505C232v6Ev,
  ABISELECT(-530752,-392820),
  ABISELECT(-256,-180),
  ABISELECT(-160,-96),
  ABISELECT(-530752,-392820),
  (VTBL_ENTRY)&(_ZTI8S19505C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19505C1D1Ev,_ZTv0_n20_N8S19505C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19505C1D0Ev,_ZTv0_n20_N8S19505C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19505C1[];
extern void _ZN8S19505C2D1Ev();
extern void _ZN8S19505C2D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
extern void _ZN8S19505C22v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C2__8S19505C1[] = {
  ABISELECT(529712,392124),
  ABISELECT(529616,392040),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C2[0]),
  (VTBL_ENTRY)&_ZN8S19505C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19505C22v5Ev,
};
extern void _ZN8S19505C3D1Ev();
extern void _ZN8S19505C3D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C38S19505C2__8S19505C1[] = {
  ABISELECT(529616,392040),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&_ZN8S19505C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C5D1Ev();
extern void _ZN8S19505C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C58S19505C38S19505C2__8S19505C1[] = {
  ABISELECT(529616,392040),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&_ZN8S19505C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev)();
extern void ABISELECT(_ZThn529616_N8S19505C5D1Ev,_ZThn392040_N8S19505C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev)();
extern void ABISELECT(_ZThn529616_N8S19505C5D0Ev,_ZThn392040_N8S19505C5D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C58S19505C38S19505C2__8S19505C1[] = {
  0,
  ABISELECT(-529616,-392040),
  ABISELECT(-529616,-392040),
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev)();
extern void ABISELECT(_ZThn529616_N8S19505C3D1Ev,_ZThn392040_N8S19505C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev)();
extern void ABISELECT(_ZThn529616_N8S19505C3D0Ev,_ZThn392040_N8S19505C3D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C38S19505C2__8S19505C1[] = {
  0,
  ABISELECT(-529616,-392040),
  ABISELECT(-529616,-392040),
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void _ZN8S19505C6D1Ev();
extern void _ZN8S19505C6D0Ev();
extern void _ZN8S19505C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C68S19505C2__8S19505C1[] = {
  ABISELECT(529600,392064),
  ABISELECT(529504,391980),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C6[0]),
  (VTBL_ENTRY)&_ZN8S19505C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C6D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C62v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C6D1Ev,_ZTv0_n12_N8S19505C6D1Ev)();
extern void ABISELECT(_ZThn529504_N8S19505C6D1Ev,_ZThn391980_N8S19505C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C6D0Ev,_ZTv0_n12_N8S19505C6D0Ev)();
extern void ABISELECT(_ZThn529504_N8S19505C6D0Ev,_ZThn391980_N8S19505C6D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C68S19505C2__8S19505C1[] = {
  0,
  ABISELECT(-529504,-391980),
  ABISELECT(-529504,-391980),
  (VTBL_ENTRY)&(_ZTI8S19505C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C6D1Ev,_ZTv0_n12_N8S19505C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C6D0Ev,_ZTv0_n12_N8S19505C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19505C6D1Ev,_ZTv0_n16_N8S19505C6D1Ev)();
extern void ABISELECT(_ZThn529600_N8S19505C6D1Ev,_ZThn392064_N8S19505C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19505C6D0Ev,_ZTv0_n16_N8S19505C6D0Ev)();
extern void ABISELECT(_ZThn529600_N8S19505C6D0Ev,_ZThn392064_N8S19505C6D0Ev)() __attribute__((weak));
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C3__8S19505C68S19505C2__8S19505C1[] = {
  0,
  0,
  ABISELECT(-529600,-392064),
  ABISELECT(-96,-84),
  ABISELECT(-529600,-392064),
  (VTBL_ENTRY)&(_ZTI8S19505C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19505C6D1Ev,_ZTv0_n16_N8S19505C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19505C6D0Ev,_ZTv0_n16_N8S19505C6D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C5D1Ev();
extern void _ZN8S19505C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C58S19505C2__A2__8S19505C1[] = {
  ABISELECT(112,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&_ZN8S19505C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev)();
extern void ABISELECT(_ZThn112_N8S19505C5D1Ev,_ZThn80_N8S19505C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev)();
extern void ABISELECT(_ZThn112_N8S19505C5D0Ev,_ZThn80_N8S19505C5D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C58S19505C2__A2__8S19505C1[] = {
  0,
  ABISELECT(-112,-80),
  ABISELECT(-112,-80),
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C2D1Ev,_ZTv0_n12_N8S19505C2D1Ev)();
extern void ABISELECT(_ZThn529616_N8S19505C2D1Ev,_ZThn392040_N8S19505C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19505C2D0Ev,_ZTv0_n12_N8S19505C2D0Ev)();
extern void ABISELECT(_ZThn529616_N8S19505C2D0Ev,_ZThn392040_N8S19505C2D0Ev)() __attribute__((weak));
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C2__8S19505C1[] = {
  0,
  ABISELECT(-529616,-392040),
  ABISELECT(-529616,-392040),
  (VTBL_ENTRY)&(_ZTI8S19505C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C2D1Ev,_ZTv0_n12_N8S19505C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C2D0Ev,_ZTv0_n12_N8S19505C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZThn112_N8S19505C2D1Ev,_ZThn60_N8S19505C2D1Ev)();
extern void ABISELECT(_ZThn112_N8S19505C2D0Ev,_ZThn60_N8S19505C2D0Ev)();
extern void _ZN8S19505C62v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C6__8S19505C2__8S19505C1[] = {
  ABISELECT(529600,392064),
  ABISELECT(529504,391980),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI8S19505C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S19505C2D1Ev,_ZThn60_N8S19505C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn112_N8S19505C2D0Ev,_ZThn60_N8S19505C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C62v4Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S19505C2D1Ev,_ZTv0_n16_N8S19505C2D1Ev)();
extern void ABISELECT(_ZThn529712_N8S19505C2D1Ev,_ZThn392124_N8S19505C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19505C2D0Ev,_ZTv0_n16_N8S19505C2D0Ev)();
extern void ABISELECT(_ZThn529712_N8S19505C2D0Ev,_ZThn392124_N8S19505C2D0Ev)() __attribute__((weak));
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C3__A1__8S19505C2__8S19505C1[] = {
  0,
  0,
  ABISELECT(-529712,-392124),
  ABISELECT(-96,-84),
  ABISELECT(-529712,-392124),
  (VTBL_ENTRY)&(_ZTI8S19505C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19505C2D1Ev,_ZTv0_n16_N8S19505C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19505C2D0Ev,_ZTv0_n16_N8S19505C2D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void ABISELECT(_ZThn529504_N8S19505C2D1Ev,_ZThn391960_N8S19505C2D1Ev)();
extern void ABISELECT(_ZThn529504_N8S19505C2D0Ev,_ZThn391960_N8S19505C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19505C5__A2__8S19505C2__8S19505C1[] = {
  ABISELECT(112,80),
  ABISELECT(-529504,-391960),
  (VTBL_ENTRY)&(_ZTI8S19505C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn529504_N8S19505C2D1Ev,_ZThn391960_N8S19505C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn529504_N8S19505C2D0Ev,_ZThn391960_N8S19505C2D0Ev),
};
extern void _ZN8S19505C3D1Ev();
extern void _ZN8S19505C3D0Ev();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C3__A1__8S19505C1[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&_ZN8S19505C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void _ZN8S19505C5D1Ev();
extern void _ZN8S19505C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C58S19505C3__A1__8S19505C1[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&_ZN8S19505C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19505C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev)();
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C58S19505C3__A1__8S19505C1[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S19505C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev)();
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__8S19505C3__A1__8S19505C1[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S19505C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
extern void _ZN9S19505C13D1Ev();
extern void _ZN9S19505C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19505C13__8S19505C1[] = {
  ABISELECT(-256,-180),
  ABISELECT(-160,-96),
  0,
  (VTBL_ENTRY)&(_ZTI9S19505C13[0]),
  (VTBL_ENTRY)&_ZN9S19505C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19505C13D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19505C13D1Ev,_ZTv0_n16_N9S19505C13D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19505C13D0Ev,_ZTv0_n16_N9S19505C13D0Ev)();
extern void _ZN8S19505C32v2Ev();
extern void _ZN8S19505C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C3__9S19505C13__8S19505C1[] = {
  0,
  0,
  ABISELECT(160,96),
  ABISELECT(-96,-84),
  ABISELECT(160,96),
  (VTBL_ENTRY)&(_ZTI9S19505C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C13D1Ev,_ZTv0_n16_N9S19505C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19505C13D0Ev,_ZTv0_n16_N9S19505C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C32v2Ev,
  (VTBL_ENTRY)&_ZN8S19505C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19505C13D1Ev,_ZTv0_n12_N9S19505C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S19505C13D0Ev,_ZTv0_n12_N9S19505C13D0Ev)();
extern void _ZN8S19505C42v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19505C4__9S19505C13__8S19505C1[] = {
  0,
  ABISELECT(256,180),
  ABISELECT(256,180),
  (VTBL_ENTRY)&(_ZTI9S19505C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C13D1Ev,_ZTv0_n12_N9S19505C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19505C13D0Ev,_ZTv0_n12_N9S19505C13D0Ev),
  (VTBL_ENTRY)&_ZN8S19505C42v1Ev,
};
static  VTT_ENTRY vtt_S19505C1[] = {
  {&(_ZTV8S19505C1[7]),  7,63},
  {&(_ZTV8S19505C1[18]),  18,63},
  {&(_ZTV8S19505C1[39]),  39,63},
  {&(_ZTV8S19505C1[27]),  27,63},
  {&(_ZTV8S19505C1[48]),  48,63},
  {&(_ZTV8S19505C1[33]),  33,63},
  {&(_ZTV8S19505C1[55]),  55,63},
  {&(_ZTV8S19505C1[61]),  61,63},
  {&(_tg__ZTV8S19505C2__8S19505C1[4]),  4,9},
  {&(_tg__ZTV8S19505C38S19505C2__8S19505C1[3]),  3,7},
  {&(_tg__ZTV8S19505C58S19505C38S19505C2__8S19505C1[3]),  3,5},
  {&(_tg__ZTV8S19505C4__8S19505C58S19505C38S19505C2__8S19505C1[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C38S19505C2__8S19505C1[4]),  4,7},
  {&(_tg__ZTV8S19505C68S19505C2__8S19505C1[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C68S19505C2__8S19505C1[4]),  4,7},
  {&(_tg__ZTV8S19505C3__8S19505C68S19505C2__8S19505C1[6]),  6,10},
  {&(_tg__ZTV8S19505C58S19505C2__A2__8S19505C1[3]),  3,5},
  {&(_tg__ZTV8S19505C4__8S19505C58S19505C2__A2__8S19505C1[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C2__8S19505C1[4]),  4,7},
  {&(_tg__ZTV8S19505C6__8S19505C2__8S19505C1[4]),  4,7},
  {&(_tg__ZTV8S19505C3__A1__8S19505C2__8S19505C1[6]),  6,10},
  {&(_tg__ZTV8S19505C5__A2__8S19505C2__8S19505C1[3]),  3,5},
  {&(_tg__ZTV8S19505C3__A1__8S19505C1[3]),  3,7},
  {&(_tg__ZTV8S19505C58S19505C3__A1__8S19505C1[3]),  3,5},
  {&(_tg__ZTV8S19505C4__8S19505C58S19505C3__A1__8S19505C1[4]),  4,7},
  {&(_tg__ZTV8S19505C4__8S19505C3__A1__8S19505C1[4]),  4,7},
  {&(_tg__ZTV9S19505C13__8S19505C1[4]),  4,6},
  {&(_tg__ZTV8S19505C3__9S19505C13__8S19505C1[6]),  6,10},
  {&(_tg__ZTV8S19505C4__9S19505C13__8S19505C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S19505C1[];
extern  VTBL_ENTRY _ZTV8S19505C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19505C1[];
static VTBL_ENTRY alt_thunk_names44[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19505C2D0Ev,_ZTv0_n16_N8S19505C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529712_N8S19505C2D0Ev,_ZThn392124_N8S19505C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19505C2D1Ev,_ZTv0_n16_N8S19505C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529712_N8S19505C2D1Ev,_ZThn392124_N8S19505C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C2D0Ev,_ZTv0_n12_N8S19505C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529616_N8S19505C2D0Ev,_ZThn392040_N8S19505C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C2D1Ev,_ZTv0_n12_N8S19505C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529616_N8S19505C2D1Ev,_ZThn392040_N8S19505C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19505C6D0Ev,_ZTv0_n16_N8S19505C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529600_N8S19505C6D0Ev,_ZThn392064_N8S19505C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19505C6D1Ev,_ZTv0_n16_N8S19505C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529600_N8S19505C6D1Ev,_ZThn392064_N8S19505C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C6D0Ev,_ZTv0_n12_N8S19505C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529504_N8S19505C6D0Ev,_ZThn391980_N8S19505C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C6D1Ev,_ZTv0_n12_N8S19505C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529504_N8S19505C6D1Ev,_ZThn391980_N8S19505C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C3D0Ev,_ZTv0_n12_N8S19505C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529616_N8S19505C3D0Ev,_ZThn392040_N8S19505C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C3D1Ev,_ZTv0_n12_N8S19505C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn529616_N8S19505C3D1Ev,_ZThn392040_N8S19505C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C5D0Ev,_ZTv0_n12_N8S19505C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19505C5D0Ev,_ZThn80_N8S19505C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn529616_N8S19505C5D0Ev,_ZThn392040_N8S19505C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C5D1Ev,_ZTv0_n12_N8S19505C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S19505C5D1Ev,_ZThn80_N8S19505C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn529616_N8S19505C5D1Ev,_ZThn392040_N8S19505C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19505C1D0Ev,_ZTv0_n16_N8S19505C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn530592_N8S19505C1D0Ev,_ZThn392724_N8S19505C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19505C1D1Ev,_ZTv0_n16_N8S19505C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn530592_N8S19505C1D1Ev,_ZThn392724_N8S19505C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C1D0Ev,_ZTv0_n12_N8S19505C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn530496_N8S19505C1D0Ev,_ZThn392640_N8S19505C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19505C1D1Ev,_ZTv0_n12_N8S19505C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn530496_N8S19505C1D1Ev,_ZThn392640_N8S19505C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19505C1D0Ev,_ZTv0_n20_N8S19505C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn530752_N8S19505C1D0Ev,_ZThn392820_N8S19505C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn880_N8S19505C1D0Ev,_ZThn600_N8S19505C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19505C1D1Ev,_ZTv0_n20_N8S19505C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn530752_N8S19505C1D1Ev,_ZThn392820_N8S19505C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn880_N8S19505C1D1Ev,_ZThn600_N8S19505C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19505C1 = {  "S19505C1", // class name
  bases_S19505C1, 13,
  &(vtc_S19505C1[0]), // expected_vtbl_contents
  &(vtt_S19505C1[0]), // expected_vtt_contents
  ABISELECT(540848,400308), // object size
  NSPAIRA(_ZTI8S19505C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19505C1),63, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19505C1),29, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names44,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1299C4  {
  int s1299c4f0;
  __tsi64 s1299c4f1;
  void *s1299c4f2[4];
  int s1299c4f3[2];
  void *s1299c4f4;
  ::S3351C4_nt s1299c4f5;
  void *s1299c4f6[2];
  virtual  ~S1299C4(); // _ZN7S1299C4D1Ev
  virtual void  v11(); // _ZN7S1299C43v11Ev
  virtual void  v12(); // _ZN7S1299C43v12Ev
  virtual void  v13(); // _ZN7S1299C43v13Ev
  virtual void  v14(); // _ZN7S1299C43v14Ev
  virtual void  v15(); // _ZN7S1299C43v15Ev
  virtual void  v16(); // _ZN7S1299C43v16Ev
  virtual void  v17(); // _ZN7S1299C43v17Ev
  virtual void  v18(); // _ZN7S1299C43v18Ev
  virtual void  v19(); // _ZN7S1299C43v19Ev
  virtual void  v20(); // _ZN7S1299C43v20Ev
  virtual void  v21(); // _ZN7S1299C43v21Ev
  virtual void  v22(); // _ZN7S1299C43v22Ev
  virtual void  v23(); // _ZN7S1299C43v23Ev
  virtual void  v24(); // _ZN7S1299C43v24Ev
  virtual void  v25(); // _ZN7S1299C43v25Ev
  virtual void  v26(); // _ZN7S1299C43v26Ev
  virtual void  v27(); // _ZN7S1299C43v27Ev
  virtual void  v28(); // _ZN7S1299C43v28Ev
  virtual void  v29(); // _ZN7S1299C43v29Ev
  virtual void  v30(); // _ZN7S1299C43v30Ev
  virtual void  v31(); // _ZN7S1299C43v31Ev
  virtual void  v32(); // _ZN7S1299C43v32Ev
  virtual void  v33(); // _ZN7S1299C43v33Ev
  virtual void  v34(); // _ZN7S1299C43v34Ev
  virtual void  v35(); // _ZN7S1299C43v35Ev
  virtual void  v36(); // _ZN7S1299C43v36Ev
  virtual void  v37(); // _ZN7S1299C43v37Ev
  virtual void  v38(); // _ZN7S1299C43v38Ev
  virtual void  v39(); // _ZN7S1299C43v39Ev
  virtual void  v40(); // _ZN7S1299C43v40Ev
  virtual void  v41(); // _ZN7S1299C43v41Ev
  virtual void  v42(); // _ZN7S1299C43v42Ev
  virtual void  v43(); // _ZN7S1299C43v43Ev
  virtual void  v44(); // _ZN7S1299C43v44Ev
  virtual void  v45(); // _ZN7S1299C43v45Ev
  virtual void  v46(); // _ZN7S1299C43v46Ev
  virtual void  v47(); // _ZN7S1299C43v47Ev
  virtual void  v48(); // _ZN7S1299C43v48Ev
  virtual void  v49(); // _ZN7S1299C43v49Ev
  virtual void  v50(); // _ZN7S1299C43v50Ev
  virtual void  v51(); // _ZN7S1299C43v51Ev
  virtual void  v52(); // _ZN7S1299C43v52Ev
  virtual void  v53(); // _ZN7S1299C43v53Ev
  virtual void  v54(); // _ZN7S1299C43v54Ev
  virtual void  v55(); // _ZN7S1299C43v55Ev
  virtual void  v56(); // _ZN7S1299C43v56Ev
  virtual void  v57(); // _ZN7S1299C43v57Ev
  virtual void  v58(); // _ZN7S1299C43v58Ev
  virtual void  v59(); // _ZN7S1299C43v59Ev
  virtual void  v60(); // _ZN7S1299C43v60Ev
  virtual void  v61(); // _ZN7S1299C43v61Ev
  virtual void  v62(); // _ZN7S1299C43v62Ev
  virtual void  v63(); // _ZN7S1299C43v63Ev
  virtual void  v64(); // _ZN7S1299C43v64Ev
  virtual void  v65(); // _ZN7S1299C43v65Ev
  virtual void  v66(); // _ZN7S1299C43v66Ev
  virtual void  v67(); // _ZN7S1299C43v67Ev
  virtual void  v68(); // _ZN7S1299C43v68Ev
  virtual void  v69(); // _ZN7S1299C43v69Ev
  virtual void  v70(); // _ZN7S1299C43v70Ev
  virtual void  v71(); // _ZN7S1299C43v71Ev
  virtual void  v72(); // _ZN7S1299C43v72Ev
  virtual void  v73(); // _ZN7S1299C43v73Ev
  virtual void  v74(); // _ZN7S1299C43v74Ev
  S1299C4(); // tgen
};
//SIG(-1 S1299C4) 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]}


 S1299C4 ::~S1299C4(){ note_dtor("S1299C4", this);}
void  S1299C4 ::v11(){vfunc_called(this, "_ZN7S1299C43v11Ev");}
void  S1299C4 ::v12(){vfunc_called(this, "_ZN7S1299C43v12Ev");}
void  S1299C4 ::v13(){vfunc_called(this, "_ZN7S1299C43v13Ev");}
void  S1299C4 ::v14(){vfunc_called(this, "_ZN7S1299C43v14Ev");}
void  S1299C4 ::v15(){vfunc_called(this, "_ZN7S1299C43v15Ev");}
void  S1299C4 ::v16(){vfunc_called(this, "_ZN7S1299C43v16Ev");}
void  S1299C4 ::v17(){vfunc_called(this, "_ZN7S1299C43v17Ev");}
void  S1299C4 ::v18(){vfunc_called(this, "_ZN7S1299C43v18Ev");}
void  S1299C4 ::v19(){vfunc_called(this, "_ZN7S1299C43v19Ev");}
void  S1299C4 ::v20(){vfunc_called(this, "_ZN7S1299C43v20Ev");}
void  S1299C4 ::v21(){vfunc_called(this, "_ZN7S1299C43v21Ev");}
void  S1299C4 ::v22(){vfunc_called(this, "_ZN7S1299C43v22Ev");}
void  S1299C4 ::v23(){vfunc_called(this, "_ZN7S1299C43v23Ev");}
void  S1299C4 ::v24(){vfunc_called(this, "_ZN7S1299C43v24Ev");}
void  S1299C4 ::v25(){vfunc_called(this, "_ZN7S1299C43v25Ev");}
void  S1299C4 ::v26(){vfunc_called(this, "_ZN7S1299C43v26Ev");}
void  S1299C4 ::v27(){vfunc_called(this, "_ZN7S1299C43v27Ev");}
void  S1299C4 ::v28(){vfunc_called(this, "_ZN7S1299C43v28Ev");}
void  S1299C4 ::v29(){vfunc_called(this, "_ZN7S1299C43v29Ev");}
void  S1299C4 ::v30(){vfunc_called(this, "_ZN7S1299C43v30Ev");}
void  S1299C4 ::v31(){vfunc_called(this, "_ZN7S1299C43v31Ev");}
void  S1299C4 ::v32(){vfunc_called(this, "_ZN7S1299C43v32Ev");}
void  S1299C4 ::v33(){vfunc_called(this, "_ZN7S1299C43v33Ev");}
void  S1299C4 ::v34(){vfunc_called(this, "_ZN7S1299C43v34Ev");}
void  S1299C4 ::v35(){vfunc_called(this, "_ZN7S1299C43v35Ev");}
void  S1299C4 ::v36(){vfunc_called(this, "_ZN7S1299C43v36Ev");}
void  S1299C4 ::v37(){vfunc_called(this, "_ZN7S1299C43v37Ev");}
void  S1299C4 ::v38(){vfunc_called(this, "_ZN7S1299C43v38Ev");}
void  S1299C4 ::v39(){vfunc_called(this, "_ZN7S1299C43v39Ev");}
void  S1299C4 ::v40(){vfunc_called(this, "_ZN7S1299C43v40Ev");}
void  S1299C4 ::v41(){vfunc_called(this, "_ZN7S1299C43v41Ev");}
void  S1299C4 ::v42(){vfunc_called(this, "_ZN7S1299C43v42Ev");}
void  S1299C4 ::v43(){vfunc_called(this, "_ZN7S1299C43v43Ev");}
void  S1299C4 ::v44(){vfunc_called(this, "_ZN7S1299C43v44Ev");}
void  S1299C4 ::v45(){vfunc_called(this, "_ZN7S1299C43v45Ev");}
void  S1299C4 ::v46(){vfunc_called(this, "_ZN7S1299C43v46Ev");}
void  S1299C4 ::v47(){vfunc_called(this, "_ZN7S1299C43v47Ev");}
void  S1299C4 ::v48(){vfunc_called(this, "_ZN7S1299C43v48Ev");}
void  S1299C4 ::v49(){vfunc_called(this, "_ZN7S1299C43v49Ev");}
void  S1299C4 ::v50(){vfunc_called(this, "_ZN7S1299C43v50Ev");}
void  S1299C4 ::v51(){vfunc_called(this, "_ZN7S1299C43v51Ev");}
void  S1299C4 ::v52(){vfunc_called(this, "_ZN7S1299C43v52Ev");}
void  S1299C4 ::v53(){vfunc_called(this, "_ZN7S1299C43v53Ev");}
void  S1299C4 ::v54(){vfunc_called(this, "_ZN7S1299C43v54Ev");}
void  S1299C4 ::v55(){vfunc_called(this, "_ZN7S1299C43v55Ev");}
void  S1299C4 ::v56(){vfunc_called(this, "_ZN7S1299C43v56Ev");}
void  S1299C4 ::v57(){vfunc_called(this, "_ZN7S1299C43v57Ev");}
void  S1299C4 ::v58(){vfunc_called(this, "_ZN7S1299C43v58Ev");}
void  S1299C4 ::v59(){vfunc_called(this, "_ZN7S1299C43v59Ev");}
void  S1299C4 ::v60(){vfunc_called(this, "_ZN7S1299C43v60Ev");}
void  S1299C4 ::v61(){vfunc_called(this, "_ZN7S1299C43v61Ev");}
void  S1299C4 ::v62(){vfunc_called(this, "_ZN7S1299C43v62Ev");}
void  S1299C4 ::v63(){vfunc_called(this, "_ZN7S1299C43v63Ev");}
void  S1299C4 ::v64(){vfunc_called(this, "_ZN7S1299C43v64Ev");}
void  S1299C4 ::v65(){vfunc_called(this, "_ZN7S1299C43v65Ev");}
void  S1299C4 ::v66(){vfunc_called(this, "_ZN7S1299C43v66Ev");}
void  S1299C4 ::v67(){vfunc_called(this, "_ZN7S1299C43v67Ev");}
void  S1299C4 ::v68(){vfunc_called(this, "_ZN7S1299C43v68Ev");}
void  S1299C4 ::v69(){vfunc_called(this, "_ZN7S1299C43v69Ev");}
void  S1299C4 ::v70(){vfunc_called(this, "_ZN7S1299C43v70Ev");}
void  S1299C4 ::v71(){vfunc_called(this, "_ZN7S1299C43v71Ev");}
void  S1299C4 ::v72(){vfunc_called(this, "_ZN7S1299C43v72Ev");}
void  S1299C4 ::v73(){vfunc_called(this, "_ZN7S1299C43v73Ev");}
void  S1299C4 ::v74(){vfunc_called(this, "_ZN7S1299C43v74Ev");}
S1299C4 ::S1299C4(){ note_ctor("S1299C4", this);} // tgen

static void Test_S1299C4()
{
  extern Class_Descriptor cd_S1299C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1299C4, buf);
    S1299C4 *dp, &lv = *(dp=new (buf) S1299C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1299C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1299C4)");
    check_field_offset(lv, s1299c4f0, ABISELECT(8,4), "S1299C4.s1299c4f0");
    check_field_offset(lv, s1299c4f1, ABISELECT(16,8), "S1299C4.s1299c4f1");
    check_field_offset(lv, s1299c4f2, ABISELECT(24,16), "S1299C4.s1299c4f2");
    check_field_offset(lv, s1299c4f3, ABISELECT(56,32), "S1299C4.s1299c4f3");
    check_field_offset(lv, s1299c4f4, ABISELECT(64,40), "S1299C4.s1299c4f4");
    check_field_offset(lv, s1299c4f5, ABISELECT(72,44), "S1299C4.s1299c4f5");
    check_field_offset(lv, s1299c4f6, ABISELECT(80,52), "S1299C4.s1299c4f6");
    test_class_info(&lv, &cd_S1299C4);
    dp->~S1299C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1299C4(Test_S1299C4, "S1299C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1299C4C1Ev();
extern void _ZN7S1299C4D1Ev();
Name_Map name_map_S1299C4[] = {
  NSPAIR(_ZN7S1299C4C1Ev),
  NSPAIR(_ZN7S1299C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1299C4[];
extern void _ZN7S1299C4D1Ev();
extern void _ZN7S1299C4D0Ev();
extern void _ZN7S1299C43v11Ev();
extern void _ZN7S1299C43v12Ev();
extern void _ZN7S1299C43v13Ev();
extern void _ZN7S1299C43v14Ev();
extern void _ZN7S1299C43v15Ev();
extern void _ZN7S1299C43v16Ev();
extern void _ZN7S1299C43v17Ev();
extern void _ZN7S1299C43v18Ev();
extern void _ZN7S1299C43v19Ev();
extern void _ZN7S1299C43v20Ev();
extern void _ZN7S1299C43v21Ev();
extern void _ZN7S1299C43v22Ev();
extern void _ZN7S1299C43v23Ev();
extern void _ZN7S1299C43v24Ev();
extern void _ZN7S1299C43v25Ev();
extern void _ZN7S1299C43v26Ev();
extern void _ZN7S1299C43v27Ev();
extern void _ZN7S1299C43v28Ev();
extern void _ZN7S1299C43v29Ev();
extern void _ZN7S1299C43v30Ev();
extern void _ZN7S1299C43v31Ev();
extern void _ZN7S1299C43v32Ev();
extern void _ZN7S1299C43v33Ev();
extern void _ZN7S1299C43v34Ev();
extern void _ZN7S1299C43v35Ev();
extern void _ZN7S1299C43v36Ev();
extern void _ZN7S1299C43v37Ev();
extern void _ZN7S1299C43v38Ev();
extern void _ZN7S1299C43v39Ev();
extern void _ZN7S1299C43v40Ev();
extern void _ZN7S1299C43v41Ev();
extern void _ZN7S1299C43v42Ev();
extern void _ZN7S1299C43v43Ev();
extern void _ZN7S1299C43v44Ev();
extern void _ZN7S1299C43v45Ev();
extern void _ZN7S1299C43v46Ev();
extern void _ZN7S1299C43v47Ev();
extern void _ZN7S1299C43v48Ev();
extern void _ZN7S1299C43v49Ev();
extern void _ZN7S1299C43v50Ev();
extern void _ZN7S1299C43v51Ev();
extern void _ZN7S1299C43v52Ev();
extern void _ZN7S1299C43v53Ev();
extern void _ZN7S1299C43v54Ev();
extern void _ZN7S1299C43v55Ev();
extern void _ZN7S1299C43v56Ev();
extern void _ZN7S1299C43v57Ev();
extern void _ZN7S1299C43v58Ev();
extern void _ZN7S1299C43v59Ev();
extern void _ZN7S1299C43v60Ev();
extern void _ZN7S1299C43v61Ev();
extern void _ZN7S1299C43v62Ev();
extern void _ZN7S1299C43v63Ev();
extern void _ZN7S1299C43v64Ev();
extern void _ZN7S1299C43v65Ev();
extern void _ZN7S1299C43v66Ev();
extern void _ZN7S1299C43v67Ev();
extern void _ZN7S1299C43v68Ev();
extern void _ZN7S1299C43v69Ev();
extern void _ZN7S1299C43v70Ev();
extern void _ZN7S1299C43v71Ev();
extern void _ZN7S1299C43v72Ev();
extern void _ZN7S1299C43v73Ev();
extern void _ZN7S1299C43v74Ev();
static  VTBL_ENTRY vtc_S1299C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1299C4[0]),
  (VTBL_ENTRY)&_ZN7S1299C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1299C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v74Ev,
};
extern VTBL_ENTRY _ZTI7S1299C4[];
extern  VTBL_ENTRY _ZTV7S1299C4[];
Class_Descriptor cd_S1299C4 = {  "S1299C4", // class name
  0,0,//no base classes
  &(vtc_S1299C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1299C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1299C4),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  S1299C12_nt  {
  int s1299c12f0[4];
  void  mf1299c12(); // _ZN11S1299C12_nt9mf1299c12Ev
};
//SIG(-1 S1299C12_nt) C1{ m Fi[4]}


void  S1299C12_nt ::mf1299c12(){}

//skip512 S1299C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1299C11_nt  {
  ::S1299C12_nt s1299c11f0;
  ::S3351C13_nt s1299c11f1;
  int s1299c11f2;
  void  mf1299c11(); // _ZN11S1299C11_nt9mf1299c11Ev
};
//SIG(-1 S1299C11_nt) C1{ m FC2{ m Fi[4]} FC3{ m Fi[3]} Fi}


void  S1299C11_nt ::mf1299c11(){}

//skip512 S1299C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1299C3_nt  : S1299C4 {
  void *s1299c3f0;
  ::S3351C28 s1299c3f1;
  ::S3351C4_nt s1299c3f2;
  ::S3351C24 s1299c3f3;
  ::S1299C11_nt s1299c3f4;
  int s1299c3f5;
  unsigned int s1299c3f6:1;
  unsigned int s1299c3f7:1;
  unsigned int s1299c3f8:1;
  unsigned int s1299c3f9:1;
  int s1299c3f10[11];
  virtual  ~S1299C3_nt(); // _ZN10S1299C3_ntD1Ev
  virtual void  v75(); // _ZN10S1299C3_nt3v75Ev
  virtual void  v76(); // _ZN10S1299C3_nt3v76Ev
  virtual void  v77(); // _ZN10S1299C3_nt3v77Ev
  virtual void  v78(); // _ZN10S1299C3_nt3v78Ev
  virtual void  v79(); // _ZN10S1299C3_nt3v79Ev
  virtual void  v80(); // _ZN10S1299C3_nt3v80Ev
  virtual void  v81(); // _ZN10S1299C3_nt3v81Ev
  virtual void  v82(); // _ZN10S1299C3_nt3v82Ev
  virtual void  v83(); // _ZN10S1299C3_nt3v83Ev
  virtual void  v84(); // _ZN10S1299C3_nt3v84Ev
  virtual void  v85(); // _ZN10S1299C3_nt3v85Ev
  virtual void  v86(); // _ZN10S1299C3_nt3v86Ev
  virtual void  v87(); // _ZN10S1299C3_nt3v87Ev
  virtual void  v88(); // _ZN10S1299C3_nt3v88Ev
  virtual void  v89(); // _ZN10S1299C3_nt3v89Ev
  virtual void  v90(); // _ZN10S1299C3_nt3v90Ev
  virtual void  v91(); // _ZN10S1299C3_nt3v91Ev
  virtual void  v92(); // _ZN10S1299C3_nt3v92Ev
  virtual void  v93(); // _ZN10S1299C3_nt3v93Ev
  virtual void  v94(); // _ZN10S1299C3_nt3v94Ev
  virtual void  v95(); // _ZN10S1299C3_nt3v95Ev
  virtual void  v96(); // _ZN10S1299C3_nt3v96Ev
  virtual void  v97(); // _ZN10S1299C3_nt3v97Ev
  virtual void  v98(); // _ZN10S1299C3_nt3v98Ev
  virtual void  v99(); // _ZN10S1299C3_nt3v99Ev
  virtual void  v100(); // _ZN10S1299C3_nt4v100Ev
  virtual void  v101(); // _ZN10S1299C3_nt4v101Ev
  S1299C3_nt(); // tgen
};
//SIG(-1 S1299C3_nt) C1{ BC2{ vd 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 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 Fp FC4{ BC5{ BC6{ m Fp Fi[2]}}} FC3 FC7{ BC8{ BC6}} FC9{ m FC10{ m Fi[4]} FC11{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]}


 S1299C3_nt ::~S1299C3_nt(){ note_dtor("S1299C3_nt", this);}
void  S1299C3_nt ::v75(){vfunc_called(this, "_ZN10S1299C3_nt3v75Ev");}
void  S1299C3_nt ::v76(){vfunc_called(this, "_ZN10S1299C3_nt3v76Ev");}
void  S1299C3_nt ::v77(){vfunc_called(this, "_ZN10S1299C3_nt3v77Ev");}
void  S1299C3_nt ::v78(){vfunc_called(this, "_ZN10S1299C3_nt3v78Ev");}
void  S1299C3_nt ::v79(){vfunc_called(this, "_ZN10S1299C3_nt3v79Ev");}
void  S1299C3_nt ::v80(){vfunc_called(this, "_ZN10S1299C3_nt3v80Ev");}
void  S1299C3_nt ::v81(){vfunc_called(this, "_ZN10S1299C3_nt3v81Ev");}
void  S1299C3_nt ::v82(){vfunc_called(this, "_ZN10S1299C3_nt3v82Ev");}
void  S1299C3_nt ::v83(){vfunc_called(this, "_ZN10S1299C3_nt3v83Ev");}
void  S1299C3_nt ::v84(){vfunc_called(this, "_ZN10S1299C3_nt3v84Ev");}
void  S1299C3_nt ::v85(){vfunc_called(this, "_ZN10S1299C3_nt3v85Ev");}
void  S1299C3_nt ::v86(){vfunc_called(this, "_ZN10S1299C3_nt3v86Ev");}
void  S1299C3_nt ::v87(){vfunc_called(this, "_ZN10S1299C3_nt3v87Ev");}
void  S1299C3_nt ::v88(){vfunc_called(this, "_ZN10S1299C3_nt3v88Ev");}
void  S1299C3_nt ::v89(){vfunc_called(this, "_ZN10S1299C3_nt3v89Ev");}
void  S1299C3_nt ::v90(){vfunc_called(this, "_ZN10S1299C3_nt3v90Ev");}
void  S1299C3_nt ::v91(){vfunc_called(this, "_ZN10S1299C3_nt3v91Ev");}
void  S1299C3_nt ::v92(){vfunc_called(this, "_ZN10S1299C3_nt3v92Ev");}
void  S1299C3_nt ::v93(){vfunc_called(this, "_ZN10S1299C3_nt3v93Ev");}
void  S1299C3_nt ::v94(){vfunc_called(this, "_ZN10S1299C3_nt3v94Ev");}
void  S1299C3_nt ::v95(){vfunc_called(this, "_ZN10S1299C3_nt3v95Ev");}
void  S1299C3_nt ::v96(){vfunc_called(this, "_ZN10S1299C3_nt3v96Ev");}
void  S1299C3_nt ::v97(){vfunc_called(this, "_ZN10S1299C3_nt3v97Ev");}
void  S1299C3_nt ::v98(){vfunc_called(this, "_ZN10S1299C3_nt3v98Ev");}
void  S1299C3_nt ::v99(){vfunc_called(this, "_ZN10S1299C3_nt3v99Ev");}
void  S1299C3_nt ::v100(){vfunc_called(this, "_ZN10S1299C3_nt4v100Ev");}
void  S1299C3_nt ::v101(){vfunc_called(this, "_ZN10S1299C3_nt4v101Ev");}
S1299C3_nt ::S1299C3_nt(){ note_ctor("S1299C3_nt", this);} // tgen

//skip512 S1299C3_nt

#else // __cplusplus

extern void _ZN10S1299C3_ntC1Ev();
extern void _ZN10S1299C3_ntD1Ev();
Name_Map name_map_S1299C3_nt[] = {
  NSPAIR(_ZN10S1299C3_ntC1Ev),
  NSPAIR(_ZN10S1299C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1299C4;
extern VTBL_ENTRY _ZTI7S1299C4[];
extern  VTBL_ENTRY _ZTV7S1299C4[];
static Base_Class bases_S1299C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1299C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI10S1299C3_nt[];
extern void _ZN10S1299C3_ntD1Ev();
extern void _ZN10S1299C3_ntD0Ev();
extern void _ZN7S1299C43v11Ev();
extern void _ZN7S1299C43v12Ev();
extern void _ZN7S1299C43v13Ev();
extern void _ZN7S1299C43v14Ev();
extern void _ZN7S1299C43v15Ev();
extern void _ZN7S1299C43v16Ev();
extern void _ZN7S1299C43v17Ev();
extern void _ZN7S1299C43v18Ev();
extern void _ZN7S1299C43v19Ev();
extern void _ZN7S1299C43v20Ev();
extern void _ZN7S1299C43v21Ev();
extern void _ZN7S1299C43v22Ev();
extern void _ZN7S1299C43v23Ev();
extern void _ZN7S1299C43v24Ev();
extern void _ZN7S1299C43v25Ev();
extern void _ZN7S1299C43v26Ev();
extern void _ZN7S1299C43v27Ev();
extern void _ZN7S1299C43v28Ev();
extern void _ZN7S1299C43v29Ev();
extern void _ZN7S1299C43v30Ev();
extern void _ZN7S1299C43v31Ev();
extern void _ZN7S1299C43v32Ev();
extern void _ZN7S1299C43v33Ev();
extern void _ZN7S1299C43v34Ev();
extern void _ZN7S1299C43v35Ev();
extern void _ZN7S1299C43v36Ev();
extern void _ZN7S1299C43v37Ev();
extern void _ZN7S1299C43v38Ev();
extern void _ZN7S1299C43v39Ev();
extern void _ZN7S1299C43v40Ev();
extern void _ZN7S1299C43v41Ev();
extern void _ZN7S1299C43v42Ev();
extern void _ZN7S1299C43v43Ev();
extern void _ZN7S1299C43v44Ev();
extern void _ZN7S1299C43v45Ev();
extern void _ZN7S1299C43v46Ev();
extern void _ZN7S1299C43v47Ev();
extern void _ZN7S1299C43v48Ev();
extern void _ZN7S1299C43v49Ev();
extern void _ZN7S1299C43v50Ev();
extern void _ZN7S1299C43v51Ev();
extern void _ZN7S1299C43v52Ev();
extern void _ZN7S1299C43v53Ev();
extern void _ZN7S1299C43v54Ev();
extern void _ZN7S1299C43v55Ev();
extern void _ZN7S1299C43v56Ev();
extern void _ZN7S1299C43v57Ev();
extern void _ZN7S1299C43v58Ev();
extern void _ZN7S1299C43v59Ev();
extern void _ZN7S1299C43v60Ev();
extern void _ZN7S1299C43v61Ev();
extern void _ZN7S1299C43v62Ev();
extern void _ZN7S1299C43v63Ev();
extern void _ZN7S1299C43v64Ev();
extern void _ZN7S1299C43v65Ev();
extern void _ZN7S1299C43v66Ev();
extern void _ZN7S1299C43v67Ev();
extern void _ZN7S1299C43v68Ev();
extern void _ZN7S1299C43v69Ev();
extern void _ZN7S1299C43v70Ev();
extern void _ZN7S1299C43v71Ev();
extern void _ZN7S1299C43v72Ev();
extern void _ZN7S1299C43v73Ev();
extern void _ZN7S1299C43v74Ev();
extern void _ZN10S1299C3_nt3v75Ev();
extern void _ZN10S1299C3_nt3v76Ev();
extern void _ZN10S1299C3_nt3v77Ev();
extern void _ZN10S1299C3_nt3v78Ev();
extern void _ZN10S1299C3_nt3v79Ev();
extern void _ZN10S1299C3_nt3v80Ev();
extern void _ZN10S1299C3_nt3v81Ev();
extern void _ZN10S1299C3_nt3v82Ev();
extern void _ZN10S1299C3_nt3v83Ev();
extern void _ZN10S1299C3_nt3v84Ev();
extern void _ZN10S1299C3_nt3v85Ev();
extern void _ZN10S1299C3_nt3v86Ev();
extern void _ZN10S1299C3_nt3v87Ev();
extern void _ZN10S1299C3_nt3v88Ev();
extern void _ZN10S1299C3_nt3v89Ev();
extern void _ZN10S1299C3_nt3v90Ev();
extern void _ZN10S1299C3_nt3v91Ev();
extern void _ZN10S1299C3_nt3v92Ev();
extern void _ZN10S1299C3_nt3v93Ev();
extern void _ZN10S1299C3_nt3v94Ev();
extern void _ZN10S1299C3_nt3v95Ev();
extern void _ZN10S1299C3_nt3v96Ev();
extern void _ZN10S1299C3_nt3v97Ev();
extern void _ZN10S1299C3_nt3v98Ev();
extern void _ZN10S1299C3_nt3v99Ev();
extern void _ZN10S1299C3_nt4v100Ev();
extern void _ZN10S1299C3_nt4v101Ev();
static  VTBL_ENTRY vtc_S1299C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1299C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1299C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v74Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt4v101Ev,
};
extern VTBL_ENTRY _ZTI10S1299C3_nt[];
VTBL_ENTRY *P__ZTI10S1299C3_nt = _ZTI10S1299C3_nt; 
extern  VTBL_ENTRY _ZTV10S1299C3_nt[];
Class_Descriptor cd_S1299C3_nt = {  "S1299C3_nt", // class name
  bases_S1299C3_nt, 1,
  &(vtc_S1299C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(232,180), // object size
  NSPAIRA(_ZTI10S1299C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1299C3_nt),95, //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  S1299C2_nt  : S1299C3_nt {
  ::S3351C17 s1299c2f0;
  unsigned int s1299c2f1:1;
  virtual  ~S1299C2_nt(); // _ZN10S1299C2_ntD1Ev
  virtual void  v102(); // _ZN10S1299C2_nt4v102Ev
  virtual void  v103(); // _ZN10S1299C2_nt4v103Ev
  virtual void  v104(); // _ZN10S1299C2_nt4v104Ev
  virtual void  v105(); // _ZN10S1299C2_nt4v105Ev
  virtual void  v106(); // _ZN10S1299C2_nt4v106Ev
  virtual void  v107(); // _ZN10S1299C2_nt4v107Ev
  virtual void  v108(); // _ZN10S1299C2_nt4v108Ev
  virtual void  v109(); // _ZN10S1299C2_nt4v109Ev
  virtual void  v110(); // _ZN10S1299C2_nt4v110Ev
  virtual void  v111(); // _ZN10S1299C2_nt4v111Ev
  virtual void  v112(); // _ZN10S1299C2_nt4v112Ev
  virtual void  v113(); // _ZN10S1299C2_nt4v113Ev
  virtual void  v114(); // _ZN10S1299C2_nt4v114Ev
  virtual void  v115(); // _ZN10S1299C2_nt4v115Ev
  virtual void  v116(); // _ZN10S1299C2_nt4v116Ev
  virtual void  v117(); // _ZN10S1299C2_nt4v117Ev
  virtual void  v118(); // _ZN10S1299C2_nt4v118Ev
  virtual void  v119(); // _ZN10S1299C2_nt4v119Ev
  S1299C2_nt(); // tgen
};
//SIG(-1 S1299C2_nt) C1{ BC2{ BC3{ 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 FC4{ m Fi[2]} Fp[2]} vd 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 Fp FC5{ BC6{ BC7{ m Fp Fi[2]}}} FC4 FC8{ BC9{ BC7}} FC10{ m FC11{ m Fi[4]} FC12{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 v15 v16 v17 v18 FC13{ BC14{ BC7}} Fi:1}


 S1299C2_nt ::~S1299C2_nt(){ note_dtor("S1299C2_nt", this);}
void  S1299C2_nt ::v102(){vfunc_called(this, "_ZN10S1299C2_nt4v102Ev");}
void  S1299C2_nt ::v103(){vfunc_called(this, "_ZN10S1299C2_nt4v103Ev");}
void  S1299C2_nt ::v104(){vfunc_called(this, "_ZN10S1299C2_nt4v104Ev");}
void  S1299C2_nt ::v105(){vfunc_called(this, "_ZN10S1299C2_nt4v105Ev");}
void  S1299C2_nt ::v106(){vfunc_called(this, "_ZN10S1299C2_nt4v106Ev");}
void  S1299C2_nt ::v107(){vfunc_called(this, "_ZN10S1299C2_nt4v107Ev");}
void  S1299C2_nt ::v108(){vfunc_called(this, "_ZN10S1299C2_nt4v108Ev");}
void  S1299C2_nt ::v109(){vfunc_called(this, "_ZN10S1299C2_nt4v109Ev");}
void  S1299C2_nt ::v110(){vfunc_called(this, "_ZN10S1299C2_nt4v110Ev");}
void  S1299C2_nt ::v111(){vfunc_called(this, "_ZN10S1299C2_nt4v111Ev");}
void  S1299C2_nt ::v112(){vfunc_called(this, "_ZN10S1299C2_nt4v112Ev");}
void  S1299C2_nt ::v113(){vfunc_called(this, "_ZN10S1299C2_nt4v113Ev");}
void  S1299C2_nt ::v114(){vfunc_called(this, "_ZN10S1299C2_nt4v114Ev");}
void  S1299C2_nt ::v115(){vfunc_called(this, "_ZN10S1299C2_nt4v115Ev");}
void  S1299C2_nt ::v116(){vfunc_called(this, "_ZN10S1299C2_nt4v116Ev");}
void  S1299C2_nt ::v117(){vfunc_called(this, "_ZN10S1299C2_nt4v117Ev");}
void  S1299C2_nt ::v118(){vfunc_called(this, "_ZN10S1299C2_nt4v118Ev");}
void  S1299C2_nt ::v119(){vfunc_called(this, "_ZN10S1299C2_nt4v119Ev");}
S1299C2_nt ::S1299C2_nt(){ note_ctor("S1299C2_nt", this);} // tgen

//skip512 S1299C2_nt

#else // __cplusplus

extern void _ZN10S1299C2_ntC1Ev();
extern void _ZN10S1299C2_ntD1Ev();
Name_Map name_map_S1299C2_nt[] = {
  NSPAIR(_ZN10S1299C2_ntC1Ev),
  NSPAIR(_ZN10S1299C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1299C4;
extern VTBL_ENTRY _ZTI7S1299C4[];
extern  VTBL_ENTRY _ZTV7S1299C4[];
extern Class_Descriptor cd_S1299C3_nt;
extern VTBL_ENTRY _ZTI10S1299C3_nt[];
extern  VTBL_ENTRY _ZTV10S1299C3_nt[];
static Base_Class bases_S1299C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1299C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1299C3_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 _ZTI10S1299C2_nt[];
extern void _ZN10S1299C2_ntD1Ev();
extern void _ZN10S1299C2_ntD0Ev();
extern void _ZN7S1299C43v11Ev();
extern void _ZN7S1299C43v12Ev();
extern void _ZN7S1299C43v13Ev();
extern void _ZN7S1299C43v14Ev();
extern void _ZN7S1299C43v15Ev();
extern void _ZN7S1299C43v16Ev();
extern void _ZN7S1299C43v17Ev();
extern void _ZN7S1299C43v18Ev();
extern void _ZN7S1299C43v19Ev();
extern void _ZN7S1299C43v20Ev();
extern void _ZN7S1299C43v21Ev();
extern void _ZN7S1299C43v22Ev();
extern void _ZN7S1299C43v23Ev();
extern void _ZN7S1299C43v24Ev();
extern void _ZN7S1299C43v25Ev();
extern void _ZN7S1299C43v26Ev();
extern void _ZN7S1299C43v27Ev();
extern void _ZN7S1299C43v28Ev();
extern void _ZN7S1299C43v29Ev();
extern void _ZN7S1299C43v30Ev();
extern void _ZN7S1299C43v31Ev();
extern void _ZN7S1299C43v32Ev();
extern void _ZN7S1299C43v33Ev();
extern void _ZN7S1299C43v34Ev();
extern void _ZN7S1299C43v35Ev();
extern void _ZN7S1299C43v36Ev();
extern void _ZN7S1299C43v37Ev();
extern void _ZN7S1299C43v38Ev();
extern void _ZN7S1299C43v39Ev();
extern void _ZN7S1299C43v40Ev();
extern void _ZN7S1299C43v41Ev();
extern void _ZN7S1299C43v42Ev();
extern void _ZN7S1299C43v43Ev();
extern void _ZN7S1299C43v44Ev();
extern void _ZN7S1299C43v45Ev();
extern void _ZN7S1299C43v46Ev();
extern void _ZN7S1299C43v47Ev();
extern void _ZN7S1299C43v48Ev();
extern void _ZN7S1299C43v49Ev();
extern void _ZN7S1299C43v50Ev();
extern void _ZN7S1299C43v51Ev();
extern void _ZN7S1299C43v52Ev();
extern void _ZN7S1299C43v53Ev();
extern void _ZN7S1299C43v54Ev();
extern void _ZN7S1299C43v55Ev();
extern void _ZN7S1299C43v56Ev();
extern void _ZN7S1299C43v57Ev();
extern void _ZN7S1299C43v58Ev();
extern void _ZN7S1299C43v59Ev();
extern void _ZN7S1299C43v60Ev();
extern void _ZN7S1299C43v61Ev();
extern void _ZN7S1299C43v62Ev();
extern void _ZN7S1299C43v63Ev();
extern void _ZN7S1299C43v64Ev();
extern void _ZN7S1299C43v65Ev();
extern void _ZN7S1299C43v66Ev();
extern void _ZN7S1299C43v67Ev();
extern void _ZN7S1299C43v68Ev();
extern void _ZN7S1299C43v69Ev();
extern void _ZN7S1299C43v70Ev();
extern void _ZN7S1299C43v71Ev();
extern void _ZN7S1299C43v72Ev();
extern void _ZN7S1299C43v73Ev();
extern void _ZN7S1299C43v74Ev();
extern void _ZN10S1299C3_nt3v75Ev();
extern void _ZN10S1299C3_nt3v76Ev();
extern void _ZN10S1299C3_nt3v77Ev();
extern void _ZN10S1299C3_nt3v78Ev();
extern void _ZN10S1299C3_nt3v79Ev();
extern void _ZN10S1299C3_nt3v80Ev();
extern void _ZN10S1299C3_nt3v81Ev();
extern void _ZN10S1299C3_nt3v82Ev();
extern void _ZN10S1299C3_nt3v83Ev();
extern void _ZN10S1299C3_nt3v84Ev();
extern void _ZN10S1299C3_nt3v85Ev();
extern void _ZN10S1299C3_nt3v86Ev();
extern void _ZN10S1299C3_nt3v87Ev();
extern void _ZN10S1299C3_nt3v88Ev();
extern void _ZN10S1299C3_nt3v89Ev();
extern void _ZN10S1299C3_nt3v90Ev();
extern void _ZN10S1299C3_nt3v91Ev();
extern void _ZN10S1299C3_nt3v92Ev();
extern void _ZN10S1299C3_nt3v93Ev();
extern void _ZN10S1299C3_nt3v94Ev();
extern void _ZN10S1299C3_nt3v95Ev();
extern void _ZN10S1299C3_nt3v96Ev();
extern void _ZN10S1299C3_nt3v97Ev();
extern void _ZN10S1299C3_nt3v98Ev();
extern void _ZN10S1299C3_nt3v99Ev();
extern void _ZN10S1299C3_nt4v100Ev();
extern void _ZN10S1299C3_nt4v101Ev();
extern void _ZN10S1299C2_nt4v102Ev();
extern void _ZN10S1299C2_nt4v103Ev();
extern void _ZN10S1299C2_nt4v104Ev();
extern void _ZN10S1299C2_nt4v105Ev();
extern void _ZN10S1299C2_nt4v106Ev();
extern void _ZN10S1299C2_nt4v107Ev();
extern void _ZN10S1299C2_nt4v108Ev();
extern void _ZN10S1299C2_nt4v109Ev();
extern void _ZN10S1299C2_nt4v110Ev();
extern void _ZN10S1299C2_nt4v111Ev();
extern void _ZN10S1299C2_nt4v112Ev();
extern void _ZN10S1299C2_nt4v113Ev();
extern void _ZN10S1299C2_nt4v114Ev();
extern void _ZN10S1299C2_nt4v115Ev();
extern void _ZN10S1299C2_nt4v116Ev();
extern void _ZN10S1299C2_nt4v117Ev();
extern void _ZN10S1299C2_nt4v118Ev();
extern void _ZN10S1299C2_nt4v119Ev();
static  VTBL_ENTRY vtc_S1299C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1299C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S1299C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v74Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v119Ev,
};
extern VTBL_ENTRY _ZTI10S1299C2_nt[];
VTBL_ENTRY *P__ZTI10S1299C2_nt = _ZTI10S1299C2_nt; 
extern  VTBL_ENTRY _ZTV10S1299C2_nt[];
Class_Descriptor cd_S1299C2_nt = {  "S1299C2_nt", // class name
  bases_S1299C2_nt, 2,
  &(vtc_S1299C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(256,196), // object size
  NSPAIRA(_ZTI10S1299C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1299C2_nt),113, //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  S1299C1  : S1299C2_nt {
  unsigned int s1299c1f0:1;
  int s1299c1f1[3];
  ::S3351C11 s1299c1f2;
  int s1299c1f3;
  void *s1299c1f4;
  virtual  ~S1299C1(); // _ZN7S1299C1D1Ev
  virtual void  v1(); // _ZN7S1299C12v1Ev
  virtual void  v2(); // _ZN7S1299C12v2Ev
  virtual void  v3(); // _ZN7S1299C12v3Ev
  virtual void  v4(); // _ZN7S1299C12v4Ev
  virtual void  v5(); // _ZN7S1299C12v5Ev
  virtual void  v6(); // _ZN7S1299C12v6Ev
  virtual void  v7(); // _ZN7S1299C12v7Ev
  virtual void  v8(); // _ZN7S1299C12v8Ev
  virtual void  v9(); // _ZN7S1299C12v9Ev
  virtual void  v10(); // _ZN7S1299C13v10Ev
  S1299C1(); // tgen
};
//SIG(1 S1299C1) C1{ BC2{ BC3{ BC4{ 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 FC5{ m Fi[2]} Fp[2]} vd 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 Fp FC6{ BC7{ BC8{ m Fp Fi[2]}}} FC5 FC9{ BC10{ BC8}} FC11{ m FC12{ m Fi[4]} FC13{ m Fi[3]} Fi} Fi Fi:1 Fi:1 Fi:1 Fi:1 Fi[11]} vd v102 v103 v104 v105 v106 v107 v108 v109 v110 v111 v112 v113 v114 v115 v116 v117 v118 v119 FC14{ BC15{ BC8}} Fi:1} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi:1 Fi[3] FC16{ BC17{ BC8}} Fi Fp}


 S1299C1 ::~S1299C1(){ note_dtor("S1299C1", this);}
void  S1299C1 ::v1(){vfunc_called(this, "_ZN7S1299C12v1Ev");}
void  S1299C1 ::v2(){vfunc_called(this, "_ZN7S1299C12v2Ev");}
void  S1299C1 ::v3(){vfunc_called(this, "_ZN7S1299C12v3Ev");}
void  S1299C1 ::v4(){vfunc_called(this, "_ZN7S1299C12v4Ev");}
void  S1299C1 ::v5(){vfunc_called(this, "_ZN7S1299C12v5Ev");}
void  S1299C1 ::v6(){vfunc_called(this, "_ZN7S1299C12v6Ev");}
void  S1299C1 ::v7(){vfunc_called(this, "_ZN7S1299C12v7Ev");}
void  S1299C1 ::v8(){vfunc_called(this, "_ZN7S1299C12v8Ev");}
void  S1299C1 ::v9(){vfunc_called(this, "_ZN7S1299C12v9Ev");}
void  S1299C1 ::v10(){vfunc_called(this, "_ZN7S1299C13v10Ev");}
S1299C1 ::S1299C1(){ note_ctor("S1299C1", this);} // tgen

static void Test_S1299C1()
{
  extern Class_Descriptor cd_S1299C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,58)];
    init_test(&cd_S1299C1, buf);
    S1299C1 *dp, &lv = *(dp=new (buf) S1299C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,228), "sizeof(S1299C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1299C1)");
    check_base_class_offset(lv, (S1299C4*)(S1299C3_nt*)(S1299C2_nt*), 0, "S1299C1");
    check_base_class_offset(lv, (S1299C3_nt*)(S1299C2_nt*), 0, "S1299C1");
    check_base_class_offset(lv, (S1299C2_nt*), 0, "S1299C1");
    set_bf_and_test(lv, s1299c1f0, ABISELECT(249,193), 0, 1, 1, "S1299C1");
    check_field_offset(lv, s1299c1f1, ABISELECT(252,196), "S1299C1.s1299c1f1");
    check_field_offset(lv, s1299c1f2, ABISELECT(264,208), "S1299C1.s1299c1f2");
    check_field_offset(lv, s1299c1f3, ABISELECT(280,220), "S1299C1.s1299c1f3");
    check_field_offset(lv, s1299c1f4, ABISELECT(288,224), "S1299C1.s1299c1f4");
    test_class_info(&lv, &cd_S1299C1);
    dp->~S1299C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1299C1(Test_S1299C1, "S1299C1", ABISELECT(296,228));

#else // __cplusplus

extern void _ZN7S1299C1C1Ev();
extern void _ZN7S1299C1D1Ev();
Name_Map name_map_S1299C1[] = {
  NSPAIR(_ZN7S1299C1C1Ev),
  NSPAIR(_ZN7S1299C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1299C4;
extern VTBL_ENTRY _ZTI7S1299C4[];
extern  VTBL_ENTRY _ZTV7S1299C4[];
extern Class_Descriptor cd_S1299C3_nt;
extern VTBL_ENTRY _ZTI10S1299C3_nt[];
extern  VTBL_ENTRY _ZTV10S1299C3_nt[];
extern Class_Descriptor cd_S1299C2_nt;
extern VTBL_ENTRY _ZTI10S1299C2_nt[];
extern  VTBL_ENTRY _ZTV10S1299C2_nt[];
static Base_Class bases_S1299C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1299C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1299C3_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_S1299C2_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 _ZTI7S1299C1[];
extern void _ZN7S1299C1D1Ev();
extern void _ZN7S1299C1D0Ev();
extern void _ZN7S1299C43v11Ev();
extern void _ZN7S1299C43v12Ev();
extern void _ZN7S1299C43v13Ev();
extern void _ZN7S1299C43v14Ev();
extern void _ZN7S1299C43v15Ev();
extern void _ZN7S1299C43v16Ev();
extern void _ZN7S1299C43v17Ev();
extern void _ZN7S1299C43v18Ev();
extern void _ZN7S1299C43v19Ev();
extern void _ZN7S1299C43v20Ev();
extern void _ZN7S1299C43v21Ev();
extern void _ZN7S1299C43v22Ev();
extern void _ZN7S1299C43v23Ev();
extern void _ZN7S1299C43v24Ev();
extern void _ZN7S1299C43v25Ev();
extern void _ZN7S1299C43v26Ev();
extern void _ZN7S1299C43v27Ev();
extern void _ZN7S1299C43v28Ev();
extern void _ZN7S1299C43v29Ev();
extern void _ZN7S1299C43v30Ev();
extern void _ZN7S1299C43v31Ev();
extern void _ZN7S1299C43v32Ev();
extern void _ZN7S1299C43v33Ev();
extern void _ZN7S1299C43v34Ev();
extern void _ZN7S1299C43v35Ev();
extern void _ZN7S1299C43v36Ev();
extern void _ZN7S1299C43v37Ev();
extern void _ZN7S1299C43v38Ev();
extern void _ZN7S1299C43v39Ev();
extern void _ZN7S1299C43v40Ev();
extern void _ZN7S1299C43v41Ev();
extern void _ZN7S1299C43v42Ev();
extern void _ZN7S1299C43v43Ev();
extern void _ZN7S1299C43v44Ev();
extern void _ZN7S1299C43v45Ev();
extern void _ZN7S1299C43v46Ev();
extern void _ZN7S1299C43v47Ev();
extern void _ZN7S1299C43v48Ev();
extern void _ZN7S1299C43v49Ev();
extern void _ZN7S1299C43v50Ev();
extern void _ZN7S1299C43v51Ev();
extern void _ZN7S1299C43v52Ev();
extern void _ZN7S1299C43v53Ev();
extern void _ZN7S1299C43v54Ev();
extern void _ZN7S1299C43v55Ev();
extern void _ZN7S1299C43v56Ev();
extern void _ZN7S1299C43v57Ev();
extern void _ZN7S1299C43v58Ev();
extern void _ZN7S1299C43v59Ev();
extern void _ZN7S1299C43v60Ev();
extern void _ZN7S1299C43v61Ev();
extern void _ZN7S1299C43v62Ev();
extern void _ZN7S1299C43v63Ev();
extern void _ZN7S1299C43v64Ev();
extern void _ZN7S1299C43v65Ev();
extern void _ZN7S1299C43v66Ev();
extern void _ZN7S1299C43v67Ev();
extern void _ZN7S1299C43v68Ev();
extern void _ZN7S1299C43v69Ev();
extern void _ZN7S1299C43v70Ev();
extern void _ZN7S1299C43v71Ev();
extern void _ZN7S1299C43v72Ev();
extern void _ZN7S1299C43v73Ev();
extern void _ZN7S1299C43v74Ev();
extern void _ZN10S1299C3_nt3v75Ev();
extern void _ZN10S1299C3_nt3v76Ev();
extern void _ZN10S1299C3_nt3v77Ev();
extern void _ZN10S1299C3_nt3v78Ev();
extern void _ZN10S1299C3_nt3v79Ev();
extern void _ZN10S1299C3_nt3v80Ev();
extern void _ZN10S1299C3_nt3v81Ev();
extern void _ZN10S1299C3_nt3v82Ev();
extern void _ZN10S1299C3_nt3v83Ev();
extern void _ZN10S1299C3_nt3v84Ev();
extern void _ZN10S1299C3_nt3v85Ev();
extern void _ZN10S1299C3_nt3v86Ev();
extern void _ZN10S1299C3_nt3v87Ev();
extern void _ZN10S1299C3_nt3v88Ev();
extern void _ZN10S1299C3_nt3v89Ev();
extern void _ZN10S1299C3_nt3v90Ev();
extern void _ZN10S1299C3_nt3v91Ev();
extern void _ZN10S1299C3_nt3v92Ev();
extern void _ZN10S1299C3_nt3v93Ev();
extern void _ZN10S1299C3_nt3v94Ev();
extern void _ZN10S1299C3_nt3v95Ev();
extern void _ZN10S1299C3_nt3v96Ev();
extern void _ZN10S1299C3_nt3v97Ev();
extern void _ZN10S1299C3_nt3v98Ev();
extern void _ZN10S1299C3_nt3v99Ev();
extern void _ZN10S1299C3_nt4v100Ev();
extern void _ZN10S1299C3_nt4v101Ev();
extern void _ZN10S1299C2_nt4v102Ev();
extern void _ZN10S1299C2_nt4v103Ev();
extern void _ZN10S1299C2_nt4v104Ev();
extern void _ZN10S1299C2_nt4v105Ev();
extern void _ZN10S1299C2_nt4v106Ev();
extern void _ZN10S1299C2_nt4v107Ev();
extern void _ZN10S1299C2_nt4v108Ev();
extern void _ZN10S1299C2_nt4v109Ev();
extern void _ZN10S1299C2_nt4v110Ev();
extern void _ZN10S1299C2_nt4v111Ev();
extern void _ZN10S1299C2_nt4v112Ev();
extern void _ZN10S1299C2_nt4v113Ev();
extern void _ZN10S1299C2_nt4v114Ev();
extern void _ZN10S1299C2_nt4v115Ev();
extern void _ZN10S1299C2_nt4v116Ev();
extern void _ZN10S1299C2_nt4v117Ev();
extern void _ZN10S1299C2_nt4v118Ev();
extern void _ZN10S1299C2_nt4v119Ev();
extern void _ZN7S1299C12v1Ev();
extern void _ZN7S1299C12v2Ev();
extern void _ZN7S1299C12v3Ev();
extern void _ZN7S1299C12v4Ev();
extern void _ZN7S1299C12v5Ev();
extern void _ZN7S1299C12v6Ev();
extern void _ZN7S1299C12v7Ev();
extern void _ZN7S1299C12v8Ev();
extern void _ZN7S1299C12v9Ev();
extern void _ZN7S1299C13v10Ev();
static  VTBL_ENTRY vtc_S1299C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1299C1[0]),
  (VTBL_ENTRY)&_ZN7S1299C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1299C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1299C43v74Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v93Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v94Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v95Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v96Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v97Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v98Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt3v99Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt4v100Ev,
  (VTBL_ENTRY)&_ZN10S1299C3_nt4v101Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v102Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v103Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v104Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v105Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v106Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v107Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v108Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v109Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v110Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v111Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v112Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v113Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v114Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v115Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v116Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v117Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v118Ev,
  (VTBL_ENTRY)&_ZN10S1299C2_nt4v119Ev,
  (VTBL_ENTRY)&_ZN7S1299C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1299C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1299C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1299C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1299C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1299C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1299C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1299C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1299C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1299C13v10Ev,
};
extern VTBL_ENTRY _ZTI7S1299C1[];
extern  VTBL_ENTRY _ZTV7S1299C1[];
Class_Descriptor cd_S1299C1 = {  "S1299C1", // class name
  bases_S1299C1, 3,
  &(vtc_S1299C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,228), // object size
  NSPAIRA(_ZTI7S1299C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1299C1),123, //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  S2398C4_nt  {
  ::S2264C20_nt s2398c4f0;
  int s2398c4f1[2];
  char s2398c4f2;
  virtual  ~S2398C4_nt(); // _ZN10S2398C4_ntD1Ev
  virtual void  v6(); // _ZN10S2398C4_nt2v6Ev
  virtual void  v7(); // _ZN10S2398C4_nt2v7Ev
  virtual void  v8(); // _ZN10S2398C4_nt2v8Ev
  S2398C4_nt(); // tgen
};
//SIG(-1 S2398C4_nt) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S2398C4_nt ::~S2398C4_nt(){ note_dtor("S2398C4_nt", this);}
void  S2398C4_nt ::v6(){vfunc_called(this, "_ZN10S2398C4_nt2v6Ev");}
void  S2398C4_nt ::v7(){vfunc_called(this, "_ZN10S2398C4_nt2v7Ev");}
void  S2398C4_nt ::v8(){vfunc_called(this, "_ZN10S2398C4_nt2v8Ev");}
S2398C4_nt ::S2398C4_nt(){ note_ctor("S2398C4_nt", this);} // tgen

//skip512 S2398C4_nt

#else // __cplusplus

extern void _ZN10S2398C4_ntC1Ev();
extern void _ZN10S2398C4_ntD1Ev();
Name_Map name_map_S2398C4_nt[] = {
  NSPAIR(_ZN10S2398C4_ntC1Ev),
  NSPAIR(_ZN10S2398C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2398C4_nt[];
extern void _ZN10S2398C4_ntD1Ev();
extern void _ZN10S2398C4_ntD0Ev();
extern void _ZN10S2398C4_nt2v6Ev();
extern void _ZN10S2398C4_nt2v7Ev();
extern void _ZN10S2398C4_nt2v8Ev();
static  VTBL_ENTRY vtc_S2398C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2398C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2398C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2398C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2398C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2398C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2398C4_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI10S2398C4_nt[];
VTBL_ENTRY *P__ZTI10S2398C4_nt = _ZTI10S2398C4_nt; 
extern  VTBL_ENTRY _ZTV10S2398C4_nt[];
Class_Descriptor cd_S2398C4_nt = {  "S2398C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2398C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI10S2398C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2398C4_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  S2398C3  : S2398C4_nt {
  void *s2398c3f0;
  virtual void  v9(); // _ZN7S2398C32v9Ev
  virtual void  v10(); // _ZN7S2398C33v10Ev
  ~S2398C3(); // tgen
  S2398C3(); // tgen
};
//SIG(-1 S2398C3) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S2398C3 ::v9(){vfunc_called(this, "_ZN7S2398C32v9Ev");}
void  S2398C3 ::v10(){vfunc_called(this, "_ZN7S2398C33v10Ev");}
S2398C3 ::~S2398C3(){ note_dtor("S2398C3", this);} // tgen
S2398C3 ::S2398C3(){ note_ctor("S2398C3", this);} // tgen

static void Test_S2398C3()
{
  extern Class_Descriptor cd_S2398C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2398C3, buf);
    S2398C3 *dp, &lv = *(dp=new (buf) S2398C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2398C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2398C3)");
    check_base_class_offset(lv, (S2398C4_nt*), 0, "S2398C3");
    check_field_offset(lv, s2398c3f0, ABISELECT(40,28), "S2398C3.s2398c3f0");
    test_class_info(&lv, &cd_S2398C3);
    dp->~S2398C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2398C3(Test_S2398C3, "S2398C3", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2398C3C1Ev();
extern void _ZN7S2398C3D1Ev();
Name_Map name_map_S2398C3[] = {
  NSPAIR(_ZN7S2398C3C1Ev),
  NSPAIR(_ZN7S2398C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C4_nt;
extern VTBL_ENTRY _ZTI10S2398C4_nt[];
extern  VTBL_ENTRY _ZTV10S2398C4_nt[];
static Base_Class bases_S2398C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C4_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 _ZTI7S2398C3[];
extern void _ZN7S2398C3D1Ev();
extern void _ZN7S2398C3D0Ev();
extern void _ZN10S2398C4_nt2v6Ev();
extern void _ZN10S2398C4_nt2v7Ev();
extern void _ZN10S2398C4_nt2v8Ev();
extern void _ZN7S2398C32v9Ev();
extern void _ZN7S2398C33v10Ev();
static  VTBL_ENTRY vtc_S2398C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2398C3[0]),
  (VTBL_ENTRY)&_ZN7S2398C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2398C3D0Ev,
  (VTBL_ENTRY)&_ZN10S2398C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2398C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2398C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S2398C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2398C33v10Ev,
};
extern VTBL_ENTRY _ZTI7S2398C3[];
extern  VTBL_ENTRY _ZTV7S2398C3[];
Class_Descriptor cd_S2398C3 = {  "S2398C3", // class name
  bases_S2398C3, 1,
  &(vtc_S2398C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2398C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2398C3),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  S2398C2  : S2398C3 {
  virtual  ~S2398C2(); // _ZN7S2398C2D1Ev
  virtual void  v11(); // _ZN7S2398C23v11Ev
  virtual void  v12(); // _ZN7S2398C23v12Ev
  virtual void  v13(); // _ZN7S2398C23v13Ev
  S2398C2(); // tgen
};
//SIG(-1 S2398C2) C1{ BC2{ BC3{ vd v4 v5 v6 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v7 v8 Fp} vd v1 v2 v3}


 S2398C2 ::~S2398C2(){ note_dtor("S2398C2", this);}
void  S2398C2 ::v11(){vfunc_called(this, "_ZN7S2398C23v11Ev");}
void  S2398C2 ::v12(){vfunc_called(this, "_ZN7S2398C23v12Ev");}
void  S2398C2 ::v13(){vfunc_called(this, "_ZN7S2398C23v13Ev");}
S2398C2 ::S2398C2(){ note_ctor("S2398C2", this);} // tgen

static void Test_S2398C2()
{
  extern Class_Descriptor cd_S2398C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S2398C2, buf);
    S2398C2 *dp, &lv = *(dp=new (buf) S2398C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S2398C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2398C2)");
    check_base_class_offset(lv, (S2398C4_nt*)(S2398C3*), 0, "S2398C2");
    check_base_class_offset(lv, (S2398C3*), 0, "S2398C2");
    test_class_info(&lv, &cd_S2398C2);
    dp->~S2398C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2398C2(Test_S2398C2, "S2398C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S2398C2C1Ev();
extern void _ZN7S2398C2D1Ev();
Name_Map name_map_S2398C2[] = {
  NSPAIR(_ZN7S2398C2C1Ev),
  NSPAIR(_ZN7S2398C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C4_nt;
extern VTBL_ENTRY _ZTI10S2398C4_nt[];
extern  VTBL_ENTRY _ZTV10S2398C4_nt[];
extern Class_Descriptor cd_S2398C3;
extern VTBL_ENTRY _ZTI7S2398C3[];
extern  VTBL_ENTRY _ZTV7S2398C3[];
static Base_Class bases_S2398C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C4_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_S2398C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2398C2[];
extern void _ZN7S2398C2D1Ev();
extern void _ZN7S2398C2D0Ev();
extern void _ZN10S2398C4_nt2v6Ev();
extern void _ZN10S2398C4_nt2v7Ev();
extern void _ZN10S2398C4_nt2v8Ev();
extern void _ZN7S2398C32v9Ev();
extern void _ZN7S2398C33v10Ev();
extern void _ZN7S2398C23v11Ev();
extern void _ZN7S2398C23v12Ev();
extern void _ZN7S2398C23v13Ev();
static  VTBL_ENTRY vtc_S2398C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2398C2[0]),
  (VTBL_ENTRY)&_ZN7S2398C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2398C2D0Ev,
  (VTBL_ENTRY)&_ZN10S2398C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2398C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2398C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S2398C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2398C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2398C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2398C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2398C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S2398C2[];
extern  VTBL_ENTRY _ZTV7S2398C2[];
Class_Descriptor cd_S2398C2 = {  "S2398C2", // class name
  bases_S2398C2, 2,
  &(vtc_S2398C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S2398C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2398C2),12, //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  S2398C8_nt  {
  void *s2398c8f0;
  void  mf2398c8(); // _ZN10S2398C8_nt8mf2398c8Ev
};
//SIG(-1 S2398C8_nt) C1{ m Fp}


void  S2398C8_nt ::mf2398c8(){}

//skip512 S2398C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2398C7  {
  ::S2398C8_nt s2398c7f0;
  void *s2398c7f1[3];
};
//SIG(-1 S2398C7) C1{ FC2{ m Fp} Fp[3]}



static void Test_S2398C7()
{
  {
    init_simple_test("S2398C7");
    S2398C7 lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S2398C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2398C7)");
    check_field_offset(lv, s2398c7f0, 0, "S2398C7.s2398c7f0");
    check_field_offset(lv, s2398c7f1, ABISELECT(8,4), "S2398C7.s2398c7f1");
  }
}
static Arrange_To_Call_Me vS2398C7(Test_S2398C7, "S2398C7", ABISELECT(32,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2398C9_nt  {
  int s2398c9f0;
  __tsi64 s2398c9f1;
  int s2398c9f2[2];
  ::S1299C12_nt s2398c9f3;
  ::S3351C4_nt s2398c9f4;
  void  mf2398c9(); // _ZN10S2398C9_nt8mf2398c9Ev
};
//SIG(-1 S2398C9_nt) C1{ m Fi FL Fi[2] FC2{ m Fi[4]} FC3{ m Fi[2]}}


void  S2398C9_nt ::mf2398c9(){}

//skip512 S2398C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2398C13_nt  {
  __tsi64 s2398c13f0[3];
  int s2398c13f1[3];
  __tsi64 s2398c13f2;
  void  mf2398c13(); // _ZN11S2398C13_nt9mf2398c13Ev
};
//SIG(-1 S2398C13_nt) C1{ m FL[3] Fi[3] FL}


void  S2398C13_nt ::mf2398c13(){}

//skip512 S2398C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2398C12_nt  {
  ::S2398C13_nt s2398c12f0;
  ::S3351C8_nt s2398c12f1;
  int s2398c12f2;
  void  mf2398c12(); // _ZN11S2398C12_nt9mf2398c12Ev
};
//SIG(-1 S2398C12_nt) C1{ m FC2{ m FL[3] Fi[3] FL} FC3{ m Fi} Fi}


void  S2398C12_nt ::mf2398c12(){}

//skip512 S2398C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2398C15  {
  char s2398c15f0;
  ::S2264C20_nt s2398c15f1;
  ::S2264C20_nt s2398c15f2;
  ::S2264C20_nt s2398c15f3;
  void  mf2398c15(); // _ZN8S2398C159mf2398c15Ev
};
//SIG(-1 S2398C15) C1{ m Fc FC2{ m Fp Fi FC3{ m}} FC2 FC2}


void  S2398C15 ::mf2398c15(){}

static void Test_S2398C15()
{
  {
    init_simple_test("S2398C15");
    S2398C15 lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S2398C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2398C15)");
    check_field_offset(lv, s2398c15f0, 0, "S2398C15.s2398c15f0");
    check_field_offset(lv, s2398c15f1, ABISELECT(8,4), "S2398C15.s2398c15f1");
    check_field_offset(lv, s2398c15f2, ABISELECT(24,16), "S2398C15.s2398c15f2");
    check_field_offset(lv, s2398c15f3, ABISELECT(40,28), "S2398C15.s2398c15f3");
  }
}
static Arrange_To_Call_Me vS2398C15(Test_S2398C15, "S2398C15", ABISELECT(56,40));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2398C16  {
  ::S2398C8_nt s2398c16f0;
  ::S1299C12_nt s2398c16f1;
};
//SIG(-1 S2398C16) C1{ FC2{ m Fp} FC3{ m Fi[4]}}



static void Test_S2398C16()
{
  {
    init_simple_test("S2398C16");
    S2398C16 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S2398C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2398C16)");
    check_field_offset(lv, s2398c16f0, 0, "S2398C16.s2398c16f0");
    check_field_offset(lv, s2398c16f1, ABISELECT(8,4), "S2398C16.s2398c16f1");
  }
}
static Arrange_To_Call_Me vS2398C16(Test_S2398C16, "S2398C16", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2398C17  {
  int s2398c17f0[2];
  void *s2398c17f1;
  char s2398c17f2;
  void *s2398c17f3;
  int s2398c17f4;
  char s2398c17f5[2];
};
//SIG(-1 S2398C17) C1{ Fi[2] Fp Fc Fp Fi Fc[2]}



static void Test_S2398C17()
{
  {
    init_simple_test("S2398C17");
    S2398C17 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S2398C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2398C17)");
    check_field_offset(lv, s2398c17f0, 0, "S2398C17.s2398c17f0");
    check_field_offset(lv, s2398c17f1, 8, "S2398C17.s2398c17f1");
    check_field_offset(lv, s2398c17f2, ABISELECT(16,12), "S2398C17.s2398c17f2");
    check_field_offset(lv, s2398c17f3, ABISELECT(24,16), "S2398C17.s2398c17f3");
    check_field_offset(lv, s2398c17f4, ABISELECT(32,20), "S2398C17.s2398c17f4");
    check_field_offset(lv, s2398c17f5, ABISELECT(36,24), "S2398C17.s2398c17f5");
  }
}
static Arrange_To_Call_Me vS2398C17(Test_S2398C17, "S2398C17", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2398C18  {
  __tsi64 s2398c18f0;
  int s2398c18f1[3];
  void  mf2398c18(); // _ZN8S2398C189mf2398c18Ev
};
//SIG(-1 S2398C18) C1{ m FL Fi[3]}


void  S2398C18 ::mf2398c18(){}

static void Test_S2398C18()
{
  {
    init_simple_test("S2398C18");
    S2398C18 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S2398C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2398C18)");
    check_field_offset(lv, s2398c18f0, 0, "S2398C18.s2398c18f0");
    check_field_offset(lv, s2398c18f1, 8, "S2398C18.s2398c18f1");
  }
}
static Arrange_To_Call_Me vS2398C18(Test_S2398C18, "S2398C18", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2398C20  {
  short s2398c20f0;
  char s2398c20f1;
  void  mf2398c20(); // _ZN8S2398C209mf2398c20Ev
};
//SIG(-1 S2398C20) C1{ m Fs Fc}


void  S2398C20 ::mf2398c20(){}

static void Test_S2398C20()
{
  {
    init_simple_test("S2398C20");
    S2398C20 lv;
    check2(sizeof(lv), 4, "sizeof(S2398C20)");
    check2(__alignof__(lv), 2, "__alignof__(S2398C20)");
    check_field_offset(lv, s2398c20f0, 0, "S2398C20.s2398c20f0");
    check_field_offset(lv, s2398c20f1, 2, "S2398C20.s2398c20f1");
  }
}
static Arrange_To_Call_Me vS2398C20(Test_S2398C20, "S2398C20", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2398C21  {
  ::S2264C20_nt s2398c21f0;
  char s2398c21f1;
  void  mf2398c21(); // _ZN8S2398C219mf2398c21Ev
};
//SIG(-1 S2398C21) C1{ m FC2{ m Fp Fi FC3{ m}} Fc}


void  S2398C21 ::mf2398c21(){}

static void Test_S2398C21()
{
  {
    init_simple_test("S2398C21");
    S2398C21 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2398C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2398C21)");
    check_field_offset(lv, s2398c21f0, 0, "S2398C21.s2398c21f0");
    check_field_offset(lv, s2398c21f1, ABISELECT(16,12), "S2398C21.s2398c21f1");
  }
}
static Arrange_To_Call_Me vS2398C21(Test_S2398C21, "S2398C21", ABISELECT(24,16));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2398C23_nt  {
  int s2398c23f0[2];
  void  mf2398c23(); // _ZN11S2398C23_nt9mf2398c23Ev
};
//SIG(-1 S2398C23_nt) C1{ m Fi[2]}


void  S2398C23_nt ::mf2398c23(){}

//skip512 S2398C23_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2398C22  {
  ::S2398C23_nt s2398c22f0;
  char s2398c22f1;
  void  mf2398c22(); // _ZN8S2398C229mf2398c22Ev
};
//SIG(-1 S2398C22) C1{ m FC2{ m Fi[2]} Fc}


void  S2398C22 ::mf2398c22(){}

static void Test_S2398C22()
{
  {
    init_simple_test("S2398C22");
    S2398C22 lv;
    check2(sizeof(lv), 12, "sizeof(S2398C22)");
    check2(__alignof__(lv), 4, "__alignof__(S2398C22)");
    check_field_offset(lv, s2398c22f0, 0, "S2398C22.s2398c22f0");
    check_field_offset(lv, s2398c22f1, 8, "S2398C22.s2398c22f1");
  }
}
static Arrange_To_Call_Me vS2398C22(Test_S2398C22, "S2398C22", 12);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2398C24_nt  {
  char s2398c24f0[5];
  void  mf2398c24(); // _ZN11S2398C24_nt9mf2398c24Ev
};
//SIG(-1 S2398C24_nt) C1{ m Fc[5]}


void  S2398C24_nt ::mf2398c24(){}

//skip512 S2398C24_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S2398C24_nt[];
VTBL_ENTRY *P__ZTI11S2398C24_nt = _ZTI11S2398C24_nt; 
Class_Descriptor cd_S2398C24_nt = {  "S2398C24_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  5, // object size
  NSPAIRA(_ZTI11S2398C24_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  S2398C25_nt  {
  int s2398c25f0;
  char s2398c25f1;
  void  mf2398c25(); // _ZN11S2398C25_nt9mf2398c25Ev
};
//SIG(-1 S2398C25_nt) C1{ m Fi Fc}


void  S2398C25_nt ::mf2398c25(){}

//skip512 S2398C25_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S2398C25_nt[];
VTBL_ENTRY *P__ZTI11S2398C25_nt = _ZTI11S2398C25_nt; 
Class_Descriptor cd_S2398C25_nt = {  "S2398C25_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  8, // object size
  NSPAIRA(_ZTI11S2398C25_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  S2398C19  {
  ::S2398C20 s2398c19f0;
  ::S2398C21 s2398c19f1;
  ::S2398C21 s2398c19f2;
  ::S2398C20 s2398c19f3;
  ::S2398C22 s2398c19f4;
  ::S2398C22 s2398c19f5;
  ::S2398C20 s2398c19f6;
  ::S2398C21 s2398c19f7;
  ::S2398C21 s2398c19f8;
  ::S2398C20 s2398c19f9;
  ::S2398C24_nt s2398c19f10;
  ::S2398C21 s2398c19f11;
  ::S2398C21 s2398c19f12;
  ::S2398C24_nt s2398c19f13;
  ::S2398C20 s2398c19f14;
  ::S2398C24_nt s2398c19f15;
  ::S2398C20 s2398c19f16;
  ::S2398C25_nt s2398c19f17;
  ::S2398C25_nt s2398c19f18;
  ::S2398C20 s2398c19f19;
  ::S2398C20 s2398c19f20;
  ::S2398C20 s2398c19f21;
  ::S2398C20 s2398c19f22;
  ::S2398C21 s2398c19f23;
  ::S2398C24_nt s2398c19f24;
  void *s2398c19f25[2];
  void  mf2398c19(); // _ZN8S2398C199mf2398c19Ev
};
//SIG(-1 S2398C19) C1{ m FC2{ m Fs Fc} FC3{ m FC4{ m Fp Fi FC5{ m}} Fc} FC3 FC2 FC6{ m FC7{ m Fi[2]} Fc} FC6 FC2 FC3 FC3 FC2 FC8{ m Fc[5]} FC3 FC3 FC8 FC2 FC8 FC2 FC9{ m Fi Fc} FC9 FC2 FC2 FC2 FC2 FC3 FC8 Fp[2]}


void  S2398C19 ::mf2398c19(){}

static void Test_S2398C19()
{
  {
    init_simple_test("S2398C19");
    S2398C19 lv;
    check2(sizeof(lv), ABISELECT(304,228), "sizeof(S2398C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2398C19)");
    check_field_offset(lv, s2398c19f0, 0, "S2398C19.s2398c19f0");
    check_field_offset(lv, s2398c19f1, ABISELECT(8,4), "S2398C19.s2398c19f1");
    check_field_offset(lv, s2398c19f2, ABISELECT(32,20), "S2398C19.s2398c19f2");
    check_field_offset(lv, s2398c19f3, ABISELECT(56,36), "S2398C19.s2398c19f3");
    check_field_offset(lv, s2398c19f4, ABISELECT(60,40), "S2398C19.s2398c19f4");
    check_field_offset(lv, s2398c19f5, ABISELECT(72,52), "S2398C19.s2398c19f5");
    check_field_offset(lv, s2398c19f6, ABISELECT(84,64), "S2398C19.s2398c19f6");
    check_field_offset(lv, s2398c19f7, ABISELECT(88,68), "S2398C19.s2398c19f7");
    check_field_offset(lv, s2398c19f8, ABISELECT(112,84), "S2398C19.s2398c19f8");
    check_field_offset(lv, s2398c19f9, ABISELECT(136,100), "S2398C19.s2398c19f9");
    check_field_offset(lv, s2398c19f10, ABISELECT(140,104), "S2398C19.s2398c19f10");
    check_field_offset(lv, s2398c19f11, ABISELECT(152,112), "S2398C19.s2398c19f11");
    check_field_offset(lv, s2398c19f12, ABISELECT(176,128), "S2398C19.s2398c19f12");
    check_field_offset(lv, s2398c19f13, ABISELECT(200,144), "S2398C19.s2398c19f13");
    check_field_offset(lv, s2398c19f14, ABISELECT(206,150), "S2398C19.s2398c19f14");
    check_field_offset(lv, s2398c19f15, ABISELECT(210,154), "S2398C19.s2398c19f15");
    check_field_offset(lv, s2398c19f16, ABISELECT(216,160), "S2398C19.s2398c19f16");
    check_field_offset(lv, s2398c19f17, ABISELECT(220,164), "S2398C19.s2398c19f17");
    check_field_offset(lv, s2398c19f18, ABISELECT(228,172), "S2398C19.s2398c19f18");
    check_field_offset(lv, s2398c19f19, ABISELECT(236,180), "S2398C19.s2398c19f19");
    check_field_offset(lv, s2398c19f20, ABISELECT(240,184), "S2398C19.s2398c19f20");
    check_field_offset(lv, s2398c19f21, ABISELECT(244,188), "S2398C19.s2398c19f21");
    check_field_offset(lv, s2398c19f22, ABISELECT(248,192), "S2398C19.s2398c19f22");
    check_field_offset(lv, s2398c19f23, ABISELECT(256,196), "S2398C19.s2398c19f23");
    check_field_offset(lv, s2398c19f24, ABISELECT(280,212), "S2398C19.s2398c19f24");
    check_field_offset(lv, s2398c19f25, ABISELECT(288,220), "S2398C19.s2398c19f25");
  }
}
static Arrange_To_Call_Me vS2398C19(Test_S2398C19, "S2398C19", ABISELECT(304,228));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2398C27  {
  ::S2398C23_nt s2398c27f0[3];
  char s2398c27f1;
  void  mf2398c27(); // _ZN8S2398C279mf2398c27Ev
};
//SIG(-1 S2398C27) C1{ m FC2{ m Fi[2]}[3] Fc}


void  S2398C27 ::mf2398c27(){}

static void Test_S2398C27()
{
  {
    init_simple_test("S2398C27");
    S2398C27 lv;
    check2(sizeof(lv), 28, "sizeof(S2398C27)");
    check2(__alignof__(lv), 4, "__alignof__(S2398C27)");
    check_field_offset(lv, s2398c27f0, 0, "S2398C27.s2398c27f0");
    check_field_offset(lv, s2398c27f1, 24, "S2398C27.s2398c27f1");
  }
}
static Arrange_To_Call_Me vS2398C27(Test_S2398C27, "S2398C27", 28);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2398C28_nt  {
  char s2398c28f0[2];
  void  mf2398c28(); // _ZN11S2398C28_nt9mf2398c28Ev
};
//SIG(-1 S2398C28_nt) C1{ m Fc[2]}


void  S2398C28_nt ::mf2398c28(){}

//skip512 S2398C28_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S2398C28_nt[];
VTBL_ENTRY *P__ZTI11S2398C28_nt = _ZTI11S2398C28_nt; 
Class_Descriptor cd_S2398C28_nt = {  "S2398C28_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  2, // object size
  NSPAIRA(_ZTI11S2398C28_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  S2398C26  {
  ::S2398C24_nt s2398c26f0;
  ::S2398C21 s2398c26f1;
  ::S2398C27 s2398c26f2;
  ::S2398C21 s2398c26f3;
  ::S2398C27 s2398c26f4;
  ::S2398C28_nt s2398c26f5;
  ::S2398C22 s2398c26f6;
  ::S2398C27 s2398c26f7;
  ::S2398C21 s2398c26f8;
  ::S2398C22 s2398c26f9;
  ::S2398C21 s2398c26f10;
  ::S2398C22 s2398c26f11;
  ::S2398C21 s2398c26f12;
  ::S2398C22 s2398c26f13;
  ::S2398C21 s2398c26f14;
  ::S2398C22 s2398c26f15;
  ::S2398C21 s2398c26f16;
  ::S2398C21 s2398c26f17;
  void  mf2398c26(); // _ZN8S2398C269mf2398c26Ev
};
//SIG(-1 S2398C26) C1{ m FC2{ m Fc[5]} FC3{ m FC4{ m Fp Fi FC5{ m}} Fc} FC6{ m FC7{ m Fi[2]}[3] Fc} FC3 FC6 FC8{ m Fc[2]} FC9{ m FC7 Fc} FC6 FC3 FC9 FC3 FC9 FC3 FC9 FC3 FC9 FC3 FC3}


void  S2398C26 ::mf2398c26(){}

static void Test_S2398C26()
{
  {
    init_simple_test("S2398C26");
    S2398C26 lv;
    check2(sizeof(lv), ABISELECT(368,284), "sizeof(S2398C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2398C26)");
    check_field_offset(lv, s2398c26f0, 0, "S2398C26.s2398c26f0");
    check_field_offset(lv, s2398c26f1, 8, "S2398C26.s2398c26f1");
    check_field_offset(lv, s2398c26f2, ABISELECT(32,24), "S2398C26.s2398c26f2");
    check_field_offset(lv, s2398c26f3, ABISELECT(64,52), "S2398C26.s2398c26f3");
    check_field_offset(lv, s2398c26f4, ABISELECT(88,68), "S2398C26.s2398c26f4");
    check_field_offset(lv, s2398c26f5, ABISELECT(116,96), "S2398C26.s2398c26f5");
    check_field_offset(lv, s2398c26f6, ABISELECT(120,100), "S2398C26.s2398c26f6");
    check_field_offset(lv, s2398c26f7, ABISELECT(132,112), "S2398C26.s2398c26f7");
    check_field_offset(lv, s2398c26f8, ABISELECT(160,140), "S2398C26.s2398c26f8");
    check_field_offset(lv, s2398c26f9, ABISELECT(184,156), "S2398C26.s2398c26f9");
    check_field_offset(lv, s2398c26f10, ABISELECT(200,168), "S2398C26.s2398c26f10");
    check_field_offset(lv, s2398c26f11, ABISELECT(224,184), "S2398C26.s2398c26f11");
    check_field_offset(lv, s2398c26f12, ABISELECT(240,196), "S2398C26.s2398c26f12");
    check_field_offset(lv, s2398c26f13, ABISELECT(264,212), "S2398C26.s2398c26f13");
    check_field_offset(lv, s2398c26f14, ABISELECT(280,224), "S2398C26.s2398c26f14");
    check_field_offset(lv, s2398c26f15, ABISELECT(304,240), "S2398C26.s2398c26f15");
    check_field_offset(lv, s2398c26f16, ABISELECT(320,252), "S2398C26.s2398c26f16");
    check_field_offset(lv, s2398c26f17, ABISELECT(344,268), "S2398C26.s2398c26f17");
  }
}
static Arrange_To_Call_Me vS2398C26(Test_S2398C26, "S2398C26", ABISELECT(368,284));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2398C29  {
  ::S2398C21 s2398c29f0;
  ::S2398C21 s2398c29f1;
  ::S2398C21 s2398c29f2;
  ::S2398C21 s2398c29f3;
  ::S2398C21 s2398c29f4;
  ::S2398C21 s2398c29f5;
  ::S2398C22 s2398c29f6;
  void  mf2398c29(); // _ZN8S2398C299mf2398c29Ev
};
//SIG(-1 S2398C29) C1{ m FC2{ m FC3{ m Fp Fi FC4{ m}} Fc} FC2 FC2 FC2 FC2 FC2 FC5{ m FC6{ m Fi[2]} Fc}}


void  S2398C29 ::mf2398c29(){}

static void Test_S2398C29()
{
  {
    init_simple_test("S2398C29");
    S2398C29 lv;
    check2(sizeof(lv), ABISELECT(160,108), "sizeof(S2398C29)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2398C29)");
    check_field_offset(lv, s2398c29f0, 0, "S2398C29.s2398c29f0");
    check_field_offset(lv, s2398c29f1, ABISELECT(24,16), "S2398C29.s2398c29f1");
    check_field_offset(lv, s2398c29f2, ABISELECT(48,32), "S2398C29.s2398c29f2");
    check_field_offset(lv, s2398c29f3, ABISELECT(72,48), "S2398C29.s2398c29f3");
    check_field_offset(lv, s2398c29f4, ABISELECT(96,64), "S2398C29.s2398c29f4");
    check_field_offset(lv, s2398c29f5, ABISELECT(120,80), "S2398C29.s2398c29f5");
    check_field_offset(lv, s2398c29f6, ABISELECT(144,96), "S2398C29.s2398c29f6");
  }
}
static Arrange_To_Call_Me vS2398C29(Test_S2398C29, "S2398C29", ABISELECT(160,108));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2398C1  : S2398C2 {
  ::S2398C7 s2398c1f0;
  ::S2398C9_nt s2398c1f1;
  ::S2398C12_nt s2398c1f2;
  ::S2398C15 s2398c1f3;
  ::S2398C16 s2398c1f4;
  ::S2398C17 s2398c1f5;
  ::S2398C18 s2398c1f6;
  int s2398c1f7[2];
  ::S2398C19 s2398c1f8;
  ::S2398C26 s2398c1f9;
  ::S2398C29 s2398c1f10;
  virtual  ~S2398C1(); // _ZN7S2398C1D1Ev
  virtual void  v1(); // _ZN7S2398C12v1Ev
  virtual void  v2(); // _ZN7S2398C12v2Ev
  virtual void  v3(); // _ZN7S2398C12v3Ev
  virtual void  v4(); // _ZN7S2398C12v4Ev
  virtual void  v5(); // _ZN7S2398C12v5Ev
  S2398C1(); // tgen
};
//SIG(1 S2398C1) C1{ BC2{ BC3{ BC4{ vd v6 v7 v8 FC5{ m Fp Fi FC6{ m}} Fi[2] Fc} v9 v10 Fp} vd v11 v12 v13} vd v1 v2 v3 v4 v5 FC7{ FC8{ m Fp} Fp[3]} FC9{ m Fi FL Fi[2] FC10{ m Fi[4]} FC11{ m Fi[2]}} FC12{ m FC13{ m FL[3] Fi[3] FL} FC14{ m Fi} Fi} FC15{ m Fc FC5 FC5 FC5} FC16{ FC8 FC10} FC17{ Fi[2] Fp Fc Fp Fi Fc[2]} FC18{ m FL Fi[3]} Fi[2] FC19{ m FC20{ m Fs Fc} FC21{ m FC5 Fc} FC21 FC20 FC22{ m FC23{ m Fi[2]} Fc} FC22 FC20 FC21 FC21 FC20 FC24{ m Fc[5]} FC21 FC21 FC24 FC20 FC24 FC20 FC25{ m Fi Fc} FC25 FC20 FC20 FC20 FC20 FC21 FC24 Fp[2]} FC26{ m FC24 FC21 FC27{ m FC23[3] Fc} FC21 FC27 FC28{ m Fc[2]} FC22 FC27 FC21 FC22 FC21 FC22 FC21 FC22 FC21 FC22 FC21 FC21} FC29{ m FC21 FC21 FC21 FC21 FC21 FC21 FC22}}


 S2398C1 ::~S2398C1(){ note_dtor("S2398C1", this);}
void  S2398C1 ::v1(){vfunc_called(this, "_ZN7S2398C12v1Ev");}
void  S2398C1 ::v2(){vfunc_called(this, "_ZN7S2398C12v2Ev");}
void  S2398C1 ::v3(){vfunc_called(this, "_ZN7S2398C12v3Ev");}
void  S2398C1 ::v4(){vfunc_called(this, "_ZN7S2398C12v4Ev");}
void  S2398C1 ::v5(){vfunc_called(this, "_ZN7S2398C12v5Ev");}
S2398C1 ::S2398C1(){ note_ctor("S2398C1", this);} // tgen

static void Test_S2398C1()
{
  extern Class_Descriptor cd_S2398C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(147,221)];
    init_test(&cd_S2398C1, buf);
    S2398C1 *dp, &lv = *(dp=new (buf) S2398C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1168,880), "sizeof(S2398C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2398C1)");
    check_base_class_offset(lv, (S2398C4_nt*)(S2398C3*)(S2398C2*), 0, "S2398C1");
    check_base_class_offset(lv, (S2398C3*)(S2398C2*), 0, "S2398C1");
    check_base_class_offset(lv, (S2398C2*), 0, "S2398C1");
    check_field_offset(lv, s2398c1f0, ABISELECT(48,32), "S2398C1.s2398c1f0");
    check_field_offset(lv, s2398c1f1, ABISELECT(80,48), "S2398C1.s2398c1f1");
    check_field_offset(lv, s2398c1f2, ABISELECT(128,92), "S2398C1.s2398c1f2");
    check_field_offset(lv, s2398c1f3, ABISELECT(184,144), "S2398C1.s2398c1f3");
    check_field_offset(lv, s2398c1f4, ABISELECT(240,184), "S2398C1.s2398c1f4");
    check_field_offset(lv, s2398c1f5, ABISELECT(264,204), "S2398C1.s2398c1f5");
    check_field_offset(lv, s2398c1f6, ABISELECT(304,232), "S2398C1.s2398c1f6");
    check_field_offset(lv, s2398c1f7, ABISELECT(328,252), "S2398C1.s2398c1f7");
    check_field_offset(lv, s2398c1f8, ABISELECT(336,260), "S2398C1.s2398c1f8");
    check_field_offset(lv, s2398c1f9, ABISELECT(640,488), "S2398C1.s2398c1f9");
    check_field_offset(lv, s2398c1f10, ABISELECT(1008,772), "S2398C1.s2398c1f10");
    test_class_info(&lv, &cd_S2398C1);
    dp->~S2398C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2398C1(Test_S2398C1, "S2398C1", ABISELECT(1168,880));

#else // __cplusplus

extern void _ZN7S2398C1C1Ev();
extern void _ZN7S2398C1D1Ev();
Name_Map name_map_S2398C1[] = {
  NSPAIR(_ZN7S2398C1C1Ev),
  NSPAIR(_ZN7S2398C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C4_nt;
extern VTBL_ENTRY _ZTI10S2398C4_nt[];
extern  VTBL_ENTRY _ZTV10S2398C4_nt[];
extern Class_Descriptor cd_S2398C3;
extern VTBL_ENTRY _ZTI7S2398C3[];
extern  VTBL_ENTRY _ZTV7S2398C3[];
extern Class_Descriptor cd_S2398C2;
extern VTBL_ENTRY _ZTI7S2398C2[];
extern  VTBL_ENTRY _ZTV7S2398C2[];
static Base_Class bases_S2398C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C4_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_S2398C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2398C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2398C1[];
extern void _ZN7S2398C1D1Ev();
extern void _ZN7S2398C1D0Ev();
extern void _ZN10S2398C4_nt2v6Ev();
extern void _ZN10S2398C4_nt2v7Ev();
extern void _ZN10S2398C4_nt2v8Ev();
extern void _ZN7S2398C32v9Ev();
extern void _ZN7S2398C33v10Ev();
extern void _ZN7S2398C23v11Ev();
extern void _ZN7S2398C23v12Ev();
extern void _ZN7S2398C23v13Ev();
extern void _ZN7S2398C12v1Ev();
extern void _ZN7S2398C12v2Ev();
extern void _ZN7S2398C12v3Ev();
extern void _ZN7S2398C12v4Ev();
extern void _ZN7S2398C12v5Ev();
static  VTBL_ENTRY vtc_S2398C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2398C1[0]),
  (VTBL_ENTRY)&_ZN7S2398C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2398C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2398C4_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2398C4_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2398C4_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S2398C32v9Ev,
  (VTBL_ENTRY)&_ZN7S2398C33v10Ev,
  (VTBL_ENTRY)&_ZN7S2398C23v11Ev,
  (VTBL_ENTRY)&_ZN7S2398C23v12Ev,
  (VTBL_ENTRY)&_ZN7S2398C23v13Ev,
  (VTBL_ENTRY)&_ZN7S2398C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2398C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2398C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2398C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2398C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S2398C1[];
extern  VTBL_ENTRY _ZTV7S2398C1[];
Class_Descriptor cd_S2398C1 = {  "S2398C1", // class name
  bases_S2398C1, 3,
  &(vtc_S2398C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(1168,880), // object size
  NSPAIRA(_ZTI7S2398C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2398C1),17, //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  S5634C3  {
  ::S2264C37 s5634c3f0;
  int s5634c3f1;
  ::S2264C20_nt s5634c3f2;
  void  mf5634c3(); // _ZN7S5634C38mf5634c3Ev
};
//SIG(-1 S5634C3) C1{ m FC2{ m Fp Fi[2] FC3{ m}} Fi FC4{ m Fp Fi FC5{ m}}}


void  S5634C3 ::mf5634c3(){}

static void Test_S5634C3()
{
  {
    init_simple_test("S5634C3");
    S5634C3 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S5634C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5634C3)");
    check_field_offset(lv, s5634c3f0, 0, "S5634C3.s5634c3f0");
    check_field_offset(lv, s5634c3f1, ABISELECT(24,16), "S5634C3.s5634c3f1");
    check_field_offset(lv, s5634c3f2, ABISELECT(32,20), "S5634C3.s5634c3f2");
  }
}
static Arrange_To_Call_Me vS5634C3(Test_S5634C3, "S5634C3", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5634C2  {
  ::S5634C3 s5634c2f0;
  ::S5634C3 s5634c2f1;
  ::S5634C3 s5634c2f2;
  ::S5634C3 s5634c2f3;
  ::S2264C18_nt s5634c2f4;
  char s5634c2f5[2];
  void  mf5634c2(); // _ZN7S5634C28mf5634c2Ev
};
//SIG(-1 S5634C2) C1{ m FC2{ m FC3{ m Fp Fi[2] FC4{ m}} Fi FC5{ m Fp Fi FC6{ m}}} FC2 FC2 FC2 FC7{ m FC8{ m FC9{ m FL[2]}} FC8 FC8 FC8} Fc[2]}


void  S5634C2 ::mf5634c2(){}

static void Test_S5634C2()
{
  {
    init_simple_test("S5634C2");
    S5634C2 lv;
    check2(sizeof(lv), ABISELECT(264,196), "sizeof(S5634C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5634C2)");
    check_field_offset(lv, s5634c2f0, 0, "S5634C2.s5634c2f0");
    check_field_offset(lv, s5634c2f1, ABISELECT(48,32), "S5634C2.s5634c2f1");
    check_field_offset(lv, s5634c2f2, ABISELECT(96,64), "S5634C2.s5634c2f2");
    check_field_offset(lv, s5634c2f3, ABISELECT(144,96), "S5634C2.s5634c2f3");
    check_field_offset(lv, s5634c2f4, ABISELECT(192,128), "S5634C2.s5634c2f4");
    check_field_offset(lv, s5634c2f5, ABISELECT(256,192), "S5634C2.s5634c2f5");
  }
}
static Arrange_To_Call_Me vS5634C2(Test_S5634C2, "S5634C2", ABISELECT(264,196));

#else // __cplusplus

Class_Descriptor cd_S5634C2 = {  "S5634C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(264,196), // 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  S5634C14  {
  ::S3351C4_nt s5634c14f0;
  ::S3351C4_nt s5634c14f1;
  void  mf5634c14(); // _ZN8S5634C149mf5634c14Ev
};
//SIG(-1 S5634C14) C1{ m FC2{ m Fi[2]} FC2}


void  S5634C14 ::mf5634c14(){}

static void Test_S5634C14()
{
  {
    init_simple_test("S5634C14");
    S5634C14 lv;
    check2(sizeof(lv), 16, "sizeof(S5634C14)");
    check2(__alignof__(lv), 4, "__alignof__(S5634C14)");
    check_field_offset(lv, s5634c14f0, 0, "S5634C14.s5634c14f0");
    check_field_offset(lv, s5634c14f1, 8, "S5634C14.s5634c14f1");
  }
}
static Arrange_To_Call_Me vS5634C14(Test_S5634C14, "S5634C14", 16);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5634C13  {
  ::S5634C14 s5634c13f0;
  ::S5634C14 s5634c13f1;
  void  mf5634c13(); // _ZN8S5634C139mf5634c13Ev
};
//SIG(1 S5634C13) C1{ m FC2{ m FC3{ m Fi[2]} FC3} FC2}


void  S5634C13 ::mf5634c13(){}

static void Test_S5634C13()
{
  {
    init_simple_test("S5634C13");
    S5634C13 lv;
    check2(sizeof(lv), 32, "sizeof(S5634C13)");
    check2(__alignof__(lv), 4, "__alignof__(S5634C13)");
    check_field_offset(lv, s5634c13f0, 0, "S5634C13.s5634c13f0");
    check_field_offset(lv, s5634c13f1, 16, "S5634C13.s5634c13f1");
  }
}
static Arrange_To_Call_Me vS5634C13(Test_S5634C13, "S5634C13", 32);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5634C12  {
  int s5634c12f0;
  ::S5634C13 s5634c12f1[6];
  void  mf5634c12(); // _ZN8S5634C129mf5634c12Ev
};
//SIG(-1 S5634C12) C1{ m Fi FC2{ m FC3{ m FC4{ m Fi[2]} FC4} FC3}[6]}


void  S5634C12 ::mf5634c12(){}

static void Test_S5634C12()
{
  {
    init_simple_test("S5634C12");
    S5634C12 lv;
    check2(sizeof(lv), 196, "sizeof(S5634C12)");
    check2(__alignof__(lv), 4, "__alignof__(S5634C12)");
    check_field_offset(lv, s5634c12f0, 0, "S5634C12.s5634c12f0");
    check_field_offset(lv, s5634c12f1, 4, "S5634C12.s5634c12f1");
  }
}
static Arrange_To_Call_Me vS5634C12(Test_S5634C12, "S5634C12", 196);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5634C11  {
  ::S5634C12 s5634c11f0;
  void  mf5634c11(); // _ZN8S5634C119mf5634c11Ev
};
//SIG(-1 S5634C11) C1{ m FC2{ m Fi FC3{ m FC4{ m FC5{ m Fi[2]} FC5} FC4}[6]}}


void  S5634C11 ::mf5634c11(){}

static void Test_S5634C11()
{
  {
    init_simple_test("S5634C11");
    S5634C11 lv;
    check2(sizeof(lv), 196, "sizeof(S5634C11)");
    check2(__alignof__(lv), 4, "__alignof__(S5634C11)");
    check_field_offset(lv, s5634c11f0, 0, "S5634C11.s5634c11f0");
  }
}
static Arrange_To_Call_Me vS5634C11(Test_S5634C11, "S5634C11", 196);

#else // __cplusplus

Class_Descriptor cd_S5634C11 = {  "S5634C11", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  196, // 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  S5634C18_nt  {
  void *s5634c18f0[2];
  void  mf5634c18(); // _ZN11S5634C18_nt9mf5634c18Ev
};
//SIG(-1 S5634C18_nt) C1{ m Fp[2]}


void  S5634C18_nt ::mf5634c18(){}

//skip512 S5634C18_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5634C17  {
  ::S5634C18_nt s5634c17f0[144];
  int s5634c17f1[2];
  void  mf5634c17(); // _ZN8S5634C179mf5634c17Ev
};
//SIG(-1 S5634C17) C1{ m FC2{ m Fp[2]}[144] Fi[2]}


void  S5634C17 ::mf5634c17(){}

static void Test_S5634C17()
{
  {
    init_simple_test("S5634C17");
    S5634C17 lv;
    check2(sizeof(lv), ABISELECT(2312,1160), "sizeof(S5634C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5634C17)");
    check_field_offset(lv, s5634c17f0, 0, "S5634C17.s5634c17f0");
    check_field_offset(lv, s5634c17f1, ABISELECT(2304,1152), "S5634C17.s5634c17f1");
  }
}
static Arrange_To_Call_Me vS5634C17(Test_S5634C17, "S5634C17", ABISELECT(2312,1160));

#else // __cplusplus

Class_Descriptor cd_S5634C17 = {  "S5634C17", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(2312,1160), // 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  S5634C19  {
  void *s5634c19f0[2];
  ::S3351C8_nt s5634c19f1;
  ::S5634C18_nt s5634c19f2;
  void  mf5634c19(); // _ZN8S5634C199mf5634c19Ev
};
//SIG(-1 S5634C19) C1{ m Fp[2] FC2{ m Fi} FC3{ m Fp[2]}}


void  S5634C19 ::mf5634c19(){}

static void Test_S5634C19()
{
  {
    init_simple_test("S5634C19");
    S5634C19 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S5634C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5634C19)");
    check_field_offset(lv, s5634c19f0, 0, "S5634C19.s5634c19f0");
    check_field_offset(lv, s5634c19f1, ABISELECT(16,8), "S5634C19.s5634c19f1");
    check_field_offset(lv, s5634c19f2, ABISELECT(24,12), "S5634C19.s5634c19f2");
  }
}
static Arrange_To_Call_Me vS5634C19(Test_S5634C19, "S5634C19", ABISELECT(40,20));

#else // __cplusplus

Class_Descriptor cd_S5634C19 = {  "S5634C19", // class name
  0,0,//no base classes
  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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5634C23  {
  void *s5634c23f0[2];
  void  mf5634c23(); // _ZN8S5634C239mf5634c23Ev
};
//SIG(-1 S5634C23) C1{ m Fp[2]}


void  S5634C23 ::mf5634c23(){}

static void Test_S5634C23()
{
  {
    init_simple_test("S5634C23");
    S5634C23 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S5634C23)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5634C23)");
    check_field_offset(lv, s5634c23f0, 0, "S5634C23.s5634c23f0");
  }
}
static Arrange_To_Call_Me vS5634C23(Test_S5634C23, "S5634C23", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5634C22  {
  ::S5634C23 s5634c22f0;
  ::S5634C23 s5634c22f1;
  ::S5634C23 s5634c22f2;
  void  mf5634c22(); // _ZN8S5634C229mf5634c22Ev
};
//SIG(-1 S5634C22) C1{ m FC2{ m Fp[2]} FC2 FC2}


void  S5634C22 ::mf5634c22(){}

static void Test_S5634C22()
{
  {
    init_simple_test("S5634C22");
    S5634C22 lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S5634C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5634C22)");
    check_field_offset(lv, s5634c22f0, 0, "S5634C22.s5634c22f0");
    check_field_offset(lv, s5634c22f1, ABISELECT(16,8), "S5634C22.s5634c22f1");
    check_field_offset(lv, s5634c22f2, ABISELECT(32,16), "S5634C22.s5634c22f2");
  }
}
static Arrange_To_Call_Me vS5634C22(Test_S5634C22, "S5634C22", ABISELECT(48,24));

#else // __cplusplus

Class_Descriptor cd_S5634C22 = {  "S5634C22", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(48,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  S5634C26  {
  int s5634c26f0;
  __tsi64 s5634c26f1[8];
  void  mf5634c26(); // _ZN8S5634C269mf5634c26Ev
};
//SIG(-1 S5634C26) C1{ m Fi FL[8]}


void  S5634C26 ::mf5634c26(){}

static void Test_S5634C26()
{
  {
    init_simple_test("S5634C26");
    S5634C26 lv;
    check2(sizeof(lv), ABISELECT(72,68), "sizeof(S5634C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5634C26)");
    check_field_offset(lv, s5634c26f0, 0, "S5634C26.s5634c26f0");
    check_field_offset(lv, s5634c26f1, ABISELECT(8,4), "S5634C26.s5634c26f1");
  }
}
static Arrange_To_Call_Me vS5634C26(Test_S5634C26, "S5634C26", ABISELECT(72,68));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5634C25  {
  ::S5634C26 s5634c25f0;
  void  mf5634c25(); // _ZN8S5634C259mf5634c25Ev
};
//SIG(-1 S5634C25) C1{ m FC2{ m Fi FL[8]}}


void  S5634C25 ::mf5634c25(){}

static void Test_S5634C25()
{
  {
    init_simple_test("S5634C25");
    S5634C25 lv;
    check2(sizeof(lv), ABISELECT(72,68), "sizeof(S5634C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5634C25)");
    check_field_offset(lv, s5634c25f0, 0, "S5634C25.s5634c25f0");
  }
}
static Arrange_To_Call_Me vS5634C25(Test_S5634C25, "S5634C25", ABISELECT(72,68));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5634C24  {
  ::S5634C25 s5634c24f0;
  void  mf5634c24(); // _ZN8S5634C249mf5634c24Ev
};
//SIG(-1 S5634C24) C1{ m FC2{ m FC3{ m Fi FL[8]}}}


void  S5634C24 ::mf5634c24(){}

static void Test_S5634C24()
{
  {
    init_simple_test("S5634C24");
    S5634C24 lv;
    check2(sizeof(lv), ABISELECT(72,68), "sizeof(S5634C24)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5634C24)");
    check_field_offset(lv, s5634c24f0, 0, "S5634C24.s5634c24f0");
  }
}
static Arrange_To_Call_Me vS5634C24(Test_S5634C24, "S5634C24", ABISELECT(72,68));

#else // __cplusplus

Class_Descriptor cd_S5634C24 = {  "S5634C24", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(72,68), // 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  S5634C27_nt  {
  void *s5634c27f0;
  int s5634c27f1;
  void *s5634c27f2;
  int s5634c27f3;
  void *s5634c27f4;
  int s5634c27f5;
  void *s5634c27f6;
  int s5634c27f7;
  void *s5634c27f8;
  int s5634c27f9[2];
};
//SIG(-1 S5634C27_nt) C1{ Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi[2]}



//skip512 S5634C27_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5634C28  {
  void *s5634c28f0[2];
  ::S5634C14 s5634c28f1;
  void *s5634c28f2;
  int s5634c28f3[3];
  char s5634c28f4;
  void  mf5634c28(); // _ZN8S5634C289mf5634c28Ev
};
//SIG(-1 S5634C28) C1{ m Fp[2] FC2{ m FC3{ m Fi[2]} FC3} Fp Fi[3] Fc}


void  S5634C28 ::mf5634c28(){}

static void Test_S5634C28()
{
  {
    init_simple_test("S5634C28");
    S5634C28 lv;
    check2(sizeof(lv), ABISELECT(56,44), "sizeof(S5634C28)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5634C28)");
    check_field_offset(lv, s5634c28f0, 0, "S5634C28.s5634c28f0");
    check_field_offset(lv, s5634c28f1, ABISELECT(16,8), "S5634C28.s5634c28f1");
    check_field_offset(lv, s5634c28f2, ABISELECT(32,24), "S5634C28.s5634c28f2");
    check_field_offset(lv, s5634c28f3, ABISELECT(40,28), "S5634C28.s5634c28f3");
    check_field_offset(lv, s5634c28f4, ABISELECT(52,40), "S5634C28.s5634c28f4");
  }
}
static Arrange_To_Call_Me vS5634C28(Test_S5634C28, "S5634C28", ABISELECT(56,44));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5634C30_nt  {
  void *s5634c30f0;
  void  mf5634c30(); // _ZN11S5634C30_nt9mf5634c30Ev
};
//SIG(-1 S5634C30_nt) C1{ m Fp}


void  S5634C30_nt ::mf5634c30(){}

//skip512 S5634C30_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5634C32  {
  void *s5634c32f0;
  void  mf5634c32(); // _ZN8S5634C329mf5634c32Ev
};
//SIG(-1 S5634C32) C1{ m Fp}


void  S5634C32 ::mf5634c32(){}

static void Test_S5634C32()
{
  {
    init_simple_test("S5634C32");
    S5634C32 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5634C32)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5634C32)");
    check_field_offset(lv, s5634c32f0, 0, "S5634C32.s5634c32f0");
  }
}
static Arrange_To_Call_Me vS5634C32(Test_S5634C32, "S5634C32", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5634C33  {
  char s5634c33f0[65];
  int s5634c33f1;
  void  mf5634c33(); // _ZN8S5634C339mf5634c33Ev
};
//SIG(-1 S5634C33) C1{ m Fc[65] Fi}


void  S5634C33 ::mf5634c33(){}

static void Test_S5634C33()
{
  {
    init_simple_test("S5634C33");
    S5634C33 lv;
    check2(sizeof(lv), 72, "sizeof(S5634C33)");
    check2(__alignof__(lv), 4, "__alignof__(S5634C33)");
    check_field_offset(lv, s5634c33f0, 0, "S5634C33.s5634c33f0");
    check_field_offset(lv, s5634c33f1, 68, "S5634C33.s5634c33f1");
  }
}
static Arrange_To_Call_Me vS5634C33(Test_S5634C33, "S5634C33", 72);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5634C36_nt  {
  char s5634c36f0;
  char s5634c36f1:4;
  char s5634c36f2:4;
  char s5634c36f3:4;
  char s5634c36f4:4;
  char s5634c36f5:4;
  char s5634c36f6:4;
};
//SIG(-1 S5634C36_nt) C1{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4}



//skip512 S5634C36_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5634C35  {
  ::S5634C36_nt s5634c35f0;
  void  mf5634c35(); // _ZN8S5634C359mf5634c35Ev
};
//SIG(-1 S5634C35) C1{ m FC2{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4}}


void  S5634C35 ::mf5634c35(){}

static void Test_S5634C35()
{
  {
    init_simple_test("S5634C35");
    static S5634C35 lv;
    check2(sizeof(lv), 4, "sizeof(S5634C35)");
    check2(__alignof__(lv), 1, "__alignof__(S5634C35)");
    check_field_offset(lv, s5634c35f0, 0, "S5634C35.s5634c35f0");
  }
}
static Arrange_To_Call_Me vS5634C35(Test_S5634C35, "S5634C35", 4);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5634C34  {
  int s5634c34f0[2];
  char s5634c34f1[3];
  int s5634c34f2[2];
  char s5634c34f3[2];
  int s5634c34f4[3];
  char s5634c34f5;
  ::S2264C13_nt s5634c34f6;
  char s5634c34f7[2];
  ::S5634C35 s5634c34f8;
  ::S5634C35 s5634c34f9;
  char s5634c34f10;
  void  mf5634c34(); // _ZN8S5634C349mf5634c34Ev
};
//SIG(-1 S5634C34) C1{ m Fi[2] Fc[3] Fi[2] Fc[2] Fi[3] Fc FC2{ m FC3{ m FL[2]}} Fc[2] FC4{ m FC5{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4}} FC4 Fc}


void  S5634C34 ::mf5634c34(){}

static void Test_S5634C34()
{
  {
    init_simple_test("S5634C34");
    static S5634C34 lv;
    check2(sizeof(lv), ABISELECT(72,68), "sizeof(S5634C34)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5634C34)");
    check_field_offset(lv, s5634c34f0, 0, "S5634C34.s5634c34f0");
    check_field_offset(lv, s5634c34f1, 8, "S5634C34.s5634c34f1");
    check_field_offset(lv, s5634c34f2, 12, "S5634C34.s5634c34f2");
    check_field_offset(lv, s5634c34f3, 20, "S5634C34.s5634c34f3");
    check_field_offset(lv, s5634c34f4, 24, "S5634C34.s5634c34f4");
    check_field_offset(lv, s5634c34f5, 36, "S5634C34.s5634c34f5");
    check_field_offset(lv, s5634c34f6, 40, "S5634C34.s5634c34f6");
    check_field_offset(lv, s5634c34f7, 56, "S5634C34.s5634c34f7");
    check_field_offset(lv, s5634c34f8, 58, "S5634C34.s5634c34f8");
    check_field_offset(lv, s5634c34f9, 62, "S5634C34.s5634c34f9");
    check_field_offset(lv, s5634c34f10, 66, "S5634C34.s5634c34f10");
  }
}
static Arrange_To_Call_Me vS5634C34(Test_S5634C34, "S5634C34", ABISELECT(72,68));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5634C37_nt  {
  long s5634c37f0;
  void  mf5634c37(); // _ZN11S5634C37_nt9mf5634c37Ev
};
//SIG(-1 S5634C37_nt) C1{ m Fl}


void  S5634C37_nt ::mf5634c37(){}

//skip512 S5634C37_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5634C1  : S5634C2 , S5634C11 , S3052C22_nt , S5634C17 , S5634C19 , S5634C22 , S5634C24 {
  ::S5634C27_nt s5634c1f0;
  void *s5634c1f1;
  ::S5634C28 s5634c1f2;
  ::S5634C28 s5634c1f3;
  ::S3351C4_nt s5634c1f4;
  void *s5634c1f5;
  char s5634c1f6[2];
  ::S2398C8_nt s5634c1f7;
  ::S5634C30_nt s5634c1f8;
  ::S5634C30_nt s5634c1f9;
  ::S5634C32 s5634c1f10;
  ::S5634C33 s5634c1f11;
  ::S5634C34 s5634c1f12;
  ::S5634C37_nt s5634c1f13;
  int s5634c1f14[2];
  ::S2264C29_nt s5634c1f15;
  void *s5634c1f16;
  ::S5634C23 s5634c1f17;
  ::S5634C23 s5634c1f18;
};
//SIG(1 S5634C1) C1{ BC2{ m FC3{ m FC4{ m Fp Fi[2] FC5{ m}} Fi FC6{ m Fp Fi FC7{ m}}} FC3 FC3 FC3 FC8{ m FC9{ m FC10{ m FL[2]}} FC9 FC9 FC9} Fc[2]} BC11{ m FC12{ m Fi FC13{ m FC14{ m FC15{ m Fi[2]} FC15} FC14}[6]}} BC16{} BC17{ m FC18{ m Fp[2]}[144] Fi[2]} BC19{ m Fp[2] FC20{ m Fi} FC18} BC21{ m FC22{ m Fp[2]} FC22 FC22} BC23{ m FC24{ m FC25{ m Fi FL[8]}}} FC26{ Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi[2]} Fp FC27{ m Fp[2] FC14 Fp Fi[3] Fc} FC27 FC15 Fp Fc[2] FC28{ m Fp} FC29{ m Fp} FC29 FC30{ m Fp} FC31{ m Fc[65] Fi} FC32{ m Fi[2] Fc[3] Fi[2] Fc[2] Fi[3] Fc FC9 Fc[2] FC33{ m FC34{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4}} FC33 Fc} FC35{ m Fl} Fi[2] FC36{ m Fp Fi[2] FC37{ m}} Fp FC22 FC22}



static void Test_S5634C1()
{
  extern Class_Descriptor cd_S5634C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(428,506)];
    init_test(&cd_S5634C1, buf);
    S5634C1 &lv = *(new (buf) S5634C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3416,2020), "sizeof(S5634C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5634C1)");
    check_base_class_offset(lv, (S5634C2*), 0, "S5634C1");
    check_base_class_offset(lv, (S5634C11*), ABISELECT(264,196), "S5634C1");
    check_base_class_offset(lv, (S3052C22_nt*), 0, "S5634C1");
    check_base_class_offset(lv, (S5634C17*), ABISELECT(464,392), "S5634C1");
    check_base_class_offset(lv, (S5634C19*), ABISELECT(2776,1552), "S5634C1");
    check_base_class_offset(lv, (S5634C22*), ABISELECT(2816,1572), "S5634C1");
    check_base_class_offset(lv, (S5634C24*), ABISELECT(2864,1596), "S5634C1");
    check_field_offset(lv, s5634c1f0, ABISELECT(2936,1664), "S5634C1.s5634c1f0");
    check_field_offset(lv, s5634c1f1, ABISELECT(3016,1708), "S5634C1.s5634c1f1");
    check_field_offset(lv, s5634c1f2, ABISELECT(3024,1712), "S5634C1.s5634c1f2");
    check_field_offset(lv, s5634c1f3, ABISELECT(3080,1756), "S5634C1.s5634c1f3");
    check_field_offset(lv, s5634c1f4, ABISELECT(3136,1800), "S5634C1.s5634c1f4");
    check_field_offset(lv, s5634c1f5, ABISELECT(3144,1808), "S5634C1.s5634c1f5");
    check_field_offset(lv, s5634c1f6, ABISELECT(3152,1812), "S5634C1.s5634c1f6");
    check_field_offset(lv, s5634c1f7, ABISELECT(3160,1816), "S5634C1.s5634c1f7");
    check_field_offset(lv, s5634c1f8, ABISELECT(3168,1820), "S5634C1.s5634c1f8");
    check_field_offset(lv, s5634c1f9, ABISELECT(3176,1824), "S5634C1.s5634c1f9");
    check_field_offset(lv, s5634c1f10, ABISELECT(3184,1828), "S5634C1.s5634c1f10");
    check_field_offset(lv, s5634c1f11, ABISELECT(3192,1832), "S5634C1.s5634c1f11");
    check_field_offset(lv, s5634c1f12, ABISELECT(3264,1904), "S5634C1.s5634c1f12");
    check_field_offset(lv, s5634c1f13, ABISELECT(3336,1972), "S5634C1.s5634c1f13");
    check_field_offset(lv, s5634c1f14, ABISELECT(3344,1976), "S5634C1.s5634c1f14");
    check_field_offset(lv, s5634c1f15, ABISELECT(3352,1984), "S5634C1.s5634c1f15");
    check_field_offset(lv, s5634c1f16, ABISELECT(3376,2000), "S5634C1.s5634c1f16");
    check_field_offset(lv, s5634c1f17, ABISELECT(3384,2004), "S5634C1.s5634c1f17");
    check_field_offset(lv, s5634c1f18, ABISELECT(3400,2012), "S5634C1.s5634c1f18");
    test_class_info(&lv, &cd_S5634C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5634C1(Test_S5634C1, "S5634C1", ABISELECT(3416,2020));

#else // __cplusplus

extern Class_Descriptor cd_S5634C2;
extern Class_Descriptor cd_S5634C11;
extern Class_Descriptor cd_S3052C22_nt;
extern Class_Descriptor cd_S5634C17;
extern Class_Descriptor cd_S5634C19;
extern Class_Descriptor cd_S5634C22;
extern Class_Descriptor cd_S5634C24;
static Base_Class bases_S5634C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5634C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5634C11,    ABISELECT(264,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3052C22_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_S5634C17,    ABISELECT(464,392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5634C19,    ABISELECT(2776,1552), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5634C22,    ABISELECT(2816,1572), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5634C24,    ABISELECT(2864,1596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5634C1 = {  "S5634C1", // class name
  bases_S5634C1, 7,
  0, // no vftv
  0, //no vtt
  ABISELECT(3416,2020), // 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  S5635C26  {
  int s5635c26f0[9];
  void  mf5635c26(); // _ZN8S5635C269mf5635c26Ev
};
//SIG(-1 S5635C26) C1{ m Fi[9]}


void  S5635C26 ::mf5635c26(){}

static void Test_S5635C26()
{
  {
    init_simple_test("S5635C26");
    S5635C26 lv;
    check2(sizeof(lv), 36, "sizeof(S5635C26)");
    check2(__alignof__(lv), 4, "__alignof__(S5635C26)");
    check_field_offset(lv, s5635c26f0, 0, "S5635C26.s5635c26f0");
  }
}
static Arrange_To_Call_Me vS5635C26(Test_S5635C26, "S5635C26", 36);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5635C25  {
  ::S5635C26 s5635c25f0;
  void  mf5635c25(); // _ZN8S5635C259mf5635c25Ev
};
//SIG(-1 S5635C25) C1{ m FC2{ m Fi[9]}}


void  S5635C25 ::mf5635c25(){}

static void Test_S5635C25()
{
  {
    init_simple_test("S5635C25");
    S5635C25 lv;
    check2(sizeof(lv), 36, "sizeof(S5635C25)");
    check2(__alignof__(lv), 4, "__alignof__(S5635C25)");
    check_field_offset(lv, s5635c25f0, 0, "S5635C25.s5635c25f0");
  }
}
static Arrange_To_Call_Me vS5635C25(Test_S5635C25, "S5635C25", 36);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5635C24  {
  ::S5635C25 s5635c24f0;
  void  mf5635c24(); // _ZN8S5635C249mf5635c24Ev
};
//SIG(-1 S5635C24) C1{ m FC2{ m FC3{ m Fi[9]}}}


void  S5635C24 ::mf5635c24(){}

static void Test_S5635C24()
{
  {
    init_simple_test("S5635C24");
    S5635C24 lv;
    check2(sizeof(lv), 36, "sizeof(S5635C24)");
    check2(__alignof__(lv), 4, "__alignof__(S5635C24)");
    check_field_offset(lv, s5635c24f0, 0, "S5635C24.s5635c24f0");
  }
}
static Arrange_To_Call_Me vS5635C24(Test_S5635C24, "S5635C24", 36);

#else // __cplusplus

Class_Descriptor cd_S5635C24 = {  "S5635C24", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  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  S5635C32  {
  void *s5635c32f0;
  void  mf5635c32(); // _ZN8S5635C329mf5635c32Ev
};
//SIG(-1 S5635C32) C1{ m Fp}


void  S5635C32 ::mf5635c32(){}

static void Test_S5635C32()
{
  {
    init_simple_test("S5635C32");
    S5635C32 lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5635C32)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5635C32)");
    check_field_offset(lv, s5635c32f0, 0, "S5635C32.s5635c32f0");
  }
}
static Arrange_To_Call_Me vS5635C32(Test_S5635C32, "S5635C32", ABISELECT(8,4));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5635C37_nt  {
  __tsi64 s5635c37f0;
  void  mf5635c37(); // _ZN11S5635C37_nt9mf5635c37Ev
};
//SIG(-1 S5635C37_nt) C1{ m FL}


void  S5635C37_nt ::mf5635c37(){}

//skip512 S5635C37_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S5635C37_nt[];
VTBL_ENTRY *P__ZTI11S5635C37_nt = _ZTI11S5635C37_nt; 
Class_Descriptor cd_S5635C37_nt = {  "S5635C37_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  8, // object size
  NSPAIRA(_ZTI11S5635C37_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  S5635C1  : S5634C2 , S5634C11 , S3052C22_nt , S5634C17 , S5634C19 , S5634C22 , S5635C24 {
  ::S5634C27_nt s5635c1f0;
  void *s5635c1f1;
  ::S5634C28 s5635c1f2;
  ::S5634C28 s5635c1f3;
  ::S3351C4_nt s5635c1f4;
  void *s5635c1f5;
  char s5635c1f6[2];
  ::S5634C32 s5635c1f7;
  ::S5634C30_nt s5635c1f8;
  ::S2398C8_nt s5635c1f9;
  ::S5635C32 s5635c1f10;
  ::S5634C33 s5635c1f11;
  ::S5634C34 s5635c1f12;
  ::S5635C37_nt s5635c1f13;
  int s5635c1f14[2];
  ::S2264C37 s5635c1f15;
  void *s5635c1f16;
  ::S5634C23 s5635c1f17;
  ::S5634C23 s5635c1f18;
};
//SIG(1 S5635C1) C1{ BC2{ m FC3{ m FC4{ m Fp Fi[2] FC5{ m}} Fi FC6{ m Fp Fi FC7{ m}}} FC3 FC3 FC3 FC8{ m FC9{ m FC10{ m FL[2]}} FC9 FC9 FC9} Fc[2]} BC11{ m FC12{ m Fi FC13{ m FC14{ m FC15{ m Fi[2]} FC15} FC14}[6]}} BC16{} BC17{ m FC18{ m Fp[2]}[144] Fi[2]} BC19{ m Fp[2] FC20{ m Fi} FC18} BC21{ m FC22{ m Fp[2]} FC22 FC22} BC23{ m FC24{ m FC25{ m Fi[9]}}} FC26{ Fp Fi Fp Fi Fp Fi Fp Fi Fp Fi[2]} Fp FC27{ m Fp[2] FC14 Fp Fi[3] Fc} FC27 FC15 Fp Fc[2] FC28{ m Fp} FC29{ m Fp} FC30{ m Fp} FC31{ m Fp} FC32{ m Fc[65] Fi} FC33{ m Fi[2] Fc[3] Fi[2] Fc[2] Fi[3] Fc FC9 Fc[2] FC34{ m FC35{ Fc Fc:4 Fc:4 Fc:4 Fc:4 Fc:4 Fc:4}} FC34 Fc} FC36{ m FL} Fi[2] FC4 Fp FC22 FC22}



static void Test_S5635C1()
{
  extern Class_Descriptor cd_S5635C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(424,499)];
    init_test(&cd_S5635C1, buf);
    S5635C1 &lv = *(new (buf) S5635C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(3384,1992), "sizeof(S5635C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5635C1)");
    check_base_class_offset(lv, (S5634C2*), 0, "S5635C1");
    check_base_class_offset(lv, (S5634C11*), ABISELECT(264,196), "S5635C1");
    check_base_class_offset(lv, (S3052C22_nt*), 0, "S5635C1");
    check_base_class_offset(lv, (S5634C17*), ABISELECT(464,392), "S5635C1");
    check_base_class_offset(lv, (S5634C19*), ABISELECT(2776,1552), "S5635C1");
    check_base_class_offset(lv, (S5634C22*), ABISELECT(2816,1572), "S5635C1");
    check_base_class_offset(lv, (S5635C24*), ABISELECT(2864,1596), "S5635C1");
    check_field_offset(lv, s5635c1f0, ABISELECT(2904,1632), "S5635C1.s5635c1f0");
    check_field_offset(lv, s5635c1f1, ABISELECT(2984,1676), "S5635C1.s5635c1f1");
    check_field_offset(lv, s5635c1f2, ABISELECT(2992,1680), "S5635C1.s5635c1f2");
    check_field_offset(lv, s5635c1f3, ABISELECT(3048,1724), "S5635C1.s5635c1f3");
    check_field_offset(lv, s5635c1f4, ABISELECT(3104,1768), "S5635C1.s5635c1f4");
    check_field_offset(lv, s5635c1f5, ABISELECT(3112,1776), "S5635C1.s5635c1f5");
    check_field_offset(lv, s5635c1f6, ABISELECT(3120,1780), "S5635C1.s5635c1f6");
    check_field_offset(lv, s5635c1f7, ABISELECT(3128,1784), "S5635C1.s5635c1f7");
    check_field_offset(lv, s5635c1f8, ABISELECT(3136,1788), "S5635C1.s5635c1f8");
    check_field_offset(lv, s5635c1f9, ABISELECT(3144,1792), "S5635C1.s5635c1f9");
    check_field_offset(lv, s5635c1f10, ABISELECT(3152,1796), "S5635C1.s5635c1f10");
    check_field_offset(lv, s5635c1f11, ABISELECT(3160,1800), "S5635C1.s5635c1f11");
    check_field_offset(lv, s5635c1f12, ABISELECT(3232,1872), "S5635C1.s5635c1f12");
    check_field_offset(lv, s5635c1f13, ABISELECT(3304,1940), "S5635C1.s5635c1f13");
    check_field_offset(lv, s5635c1f14, ABISELECT(3312,1948), "S5635C1.s5635c1f14");
    check_field_offset(lv, s5635c1f15, ABISELECT(3320,1956), "S5635C1.s5635c1f15");
    check_field_offset(lv, s5635c1f16, ABISELECT(3344,1972), "S5635C1.s5635c1f16");
    check_field_offset(lv, s5635c1f17, ABISELECT(3352,1976), "S5635C1.s5635c1f17");
    check_field_offset(lv, s5635c1f18, ABISELECT(3368,1984), "S5635C1.s5635c1f18");
    test_class_info(&lv, &cd_S5635C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5635C1(Test_S5635C1, "S5635C1", ABISELECT(3384,1992));

#else // __cplusplus

extern Class_Descriptor cd_S5634C2;
extern Class_Descriptor cd_S5634C11;
extern Class_Descriptor cd_S3052C22_nt;
extern Class_Descriptor cd_S5634C17;
extern Class_Descriptor cd_S5634C19;
extern Class_Descriptor cd_S5634C22;
extern Class_Descriptor cd_S5635C24;
static Base_Class bases_S5635C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5634C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5634C11,    ABISELECT(264,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S3052C22_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_S5634C17,    ABISELECT(464,392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5634C19,    ABISELECT(2776,1552), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5634C22,    ABISELECT(2816,1572), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5635C24,    ABISELECT(2864,1596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5635C1 = {  "S5635C1", // class name
  bases_S5635C1, 7,
  0, // no vftv
  0, //no vtt
  ABISELECT(3384,1992), // 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  S21123C5  {
  short s21123c5f0[6];
  __tsi64 s21123c5f1[8];
  int s21123c5f2;
  virtual  ~S21123C5(); // _ZN8S21123C5D1Ev
  virtual void  v1(); // _ZN8S21123C52v1Ev
  S21123C5(); // tgen
};
//SIG(-1 S21123C5) C1{ vd v1 Fs[6] FL[8] Fi}


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

static void Test_S21123C5()
{
  extern Class_Descriptor cd_S21123C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,22)];
    init_test(&cd_S21123C5, buf);
    S21123C5 *dp, &lv = *(dp=new (buf) S21123C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,84), "sizeof(S21123C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21123C5)");
    check_field_offset(lv, s21123c5f0, ABISELECT(8,4), "S21123C5.s21123c5f0");
    check_field_offset(lv, s21123c5f1, ABISELECT(24,16), "S21123C5.s21123c5f1");
    check_field_offset(lv, s21123c5f2, ABISELECT(88,80), "S21123C5.s21123c5f2");
    test_class_info(&lv, &cd_S21123C5);
    dp->~S21123C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21123C5(Test_S21123C5, "S21123C5", ABISELECT(96,84));

#else // __cplusplus

extern void _ZN8S21123C5C1Ev();
extern void _ZN8S21123C5D1Ev();
Name_Map name_map_S21123C5[] = {
  NSPAIR(_ZN8S21123C5C1Ev),
  NSPAIR(_ZN8S21123C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21123C5[];
extern void _ZN8S21123C5D1Ev();
extern void _ZN8S21123C5D0Ev();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY vtc_S21123C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C5[0]),
  (VTBL_ENTRY)&_ZN8S21123C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C5D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern VTBL_ENTRY _ZTI8S21123C5[];
extern  VTBL_ENTRY _ZTV8S21123C5[];
Class_Descriptor cd_S21123C5 = {  "S21123C5", // class name
  0,0,//no base classes
  &(vtc_S21123C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,84), // object size
  NSPAIRA(_ZTI8S21123C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21123C5),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  S21123C7  : virtual S21123C5 {
  __tsi64 s21123c7f0;
  void *s21123c7f1;
  __tsi64 s21123c7f2:54;
  ~S21123C7(); // tgen
  S21123C7(); // tgen
};
//SIG(-1 S21123C7) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} FL Fp FL:54}


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

static void Test_S21123C7()
{
  extern Class_Descriptor cd_S21123C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,28)];
    init_test(&cd_S21123C7, buf);
    S21123C7 *dp, &lv = *(dp=new (buf) S21123C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,108), "sizeof(S21123C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21123C7)");
    check_base_class_offset(lv, (S21123C5*), ABISELECT(32,24), "S21123C7");
    check_field_offset(lv, s21123c7f0, ABISELECT(8,4), "S21123C7.s21123c7f0");
    check_field_offset(lv, s21123c7f1, ABISELECT(16,12), "S21123C7.s21123c7f1");
    set_bf_and_test(lv, s21123c7f2, ABISELECT(24,16), 0, 54, 1, "S21123C7");
    set_bf_and_test(lv, s21123c7f2, ABISELECT(24,16), 0, 54, hide_sll(1LL<<53), "S21123C7");
    test_class_info(&lv, &cd_S21123C7);
    dp->~S21123C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21123C7(Test_S21123C7, "S21123C7", ABISELECT(128,108));

#else // __cplusplus

extern void _ZN8S21123C7C1Ev();
extern void _ZN8S21123C7D1Ev();
Name_Map name_map_S21123C7[] = {
  NSPAIR(_ZN8S21123C7C1Ev),
  NSPAIR(_ZN8S21123C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21123C5;
extern VTBL_ENTRY _ZTI8S21123C5[];
extern  VTBL_ENTRY _ZTV8S21123C5[];
static Base_Class bases_S21123C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21123C5,    ABISELECT(32,24), //bcp->offset
    5, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S21123C7[];
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZThn32_N8S21123C7D1Ev,_ZThn24_N8S21123C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void ABISELECT(_ZThn32_N8S21123C7D0Ev,_ZThn24_N8S21123C7D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY vtc_S21123C7[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
  0,
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern VTBL_ENTRY _ZTV8S21123C7[];
static  VTT_ENTRY vtt_S21123C7[] = {
  {&(_ZTV8S21123C7[3]),  3,12},
  {&(_ZTV8S21123C7[9]),  9,12},
};
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
static VTBL_ENTRY alt_thunk_names45[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21123C7D0Ev,_ZThn24_N8S21123C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S21123C7D1Ev,_ZThn24_N8S21123C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21123C7 = {  "S21123C7", // class name
  bases_S21123C7, 1,
  &(vtc_S21123C7[0]), // expected_vtbl_contents
  &(vtt_S21123C7[0]), // expected_vtt_contents
  ABISELECT(128,108), // object size
  NSPAIRA(_ZTI8S21123C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21123C7),12, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21123C7),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names45,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21123C6  : virtual S21123C5 , S21123C7 {
  char  :0;
  void *s21123c6f1[8];
  char s21123c6f2;
  virtual void  v2(); // _ZN8S21123C62v2Ev
  virtual void  v3(); // _ZN8S21123C62v3Ev
  ~S21123C6(); // tgen
  S21123C6(); // tgen
};
//SIG(-1 S21123C6) C1{ VBC2{ vd v3 Fs[6] FL[8] Fi} BC3{ VBC2 FL Fp FL:54} v1 v2 Fc:0 Fp[8] Fc}


void  S21123C6 ::v2(){vfunc_called(this, "_ZN8S21123C62v2Ev");}
void  S21123C6 ::v3(){vfunc_called(this, "_ZN8S21123C62v3Ev");}
S21123C6 ::~S21123C6(){ note_dtor("S21123C6", this);} // tgen
S21123C6 ::S21123C6(){ note_ctor("S21123C6", this);} // tgen

static void Test_S21123C6()
{
  extern Class_Descriptor cd_S21123C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,37)];
    init_test(&cd_S21123C6, buf);
    S21123C6 *dp, &lv = *(dp=new (buf) S21123C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,144), "sizeof(S21123C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21123C6)");
    check_base_class_offset(lv, (S21123C5*), ABISELECT(104,60), "S21123C6");
    check_base_class_offset(lv, (S21123C5*)(S21123C7*), ABISELECT(104,60), "S21123C6");
    check_base_class_offset(lv, (S21123C7*), 0, "S21123C6");
    check_field_offset(lv, s21123c6f1, ABISELECT(32,24), "S21123C6.s21123c6f1");
    check_field_offset(lv, s21123c6f2, ABISELECT(96,56), "S21123C6.s21123c6f2");
    test_class_info(&lv, &cd_S21123C6);
    dp->~S21123C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21123C6(Test_S21123C6, "S21123C6", ABISELECT(200,144));

#else // __cplusplus

extern void _ZN8S21123C6C1Ev();
extern void _ZN8S21123C6D1Ev();
Name_Map name_map_S21123C6[] = {
  NSPAIR(_ZN8S21123C6C1Ev),
  NSPAIR(_ZN8S21123C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21123C5;
extern VTBL_ENTRY _ZTI8S21123C5[];
extern  VTBL_ENTRY _ZTV8S21123C5[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
static Base_Class bases_S21123C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21123C5,    ABISELECT(104,60), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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_S21123C7,    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 _ZTI8S21123C6[];
extern void _ZN8S21123C6D1Ev();
extern void _ZN8S21123C6D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev)();
extern void ABISELECT(_ZThn104_N8S21123C6D1Ev,_ZThn60_N8S21123C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev)();
extern void ABISELECT(_ZThn104_N8S21123C6D0Ev,_ZThn60_N8S21123C6D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY vtc_S21123C6[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&_ZN8S21123C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern VTBL_ENTRY _ZTV8S21123C6[];
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C7__8S21123C6[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZThn104_N8S21123C7D1Ev,_ZThn60_N8S21123C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void ABISELECT(_ZThn104_N8S21123C7D0Ev,_ZThn60_N8S21123C7D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C7__8S21123C6[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
static  VTT_ENTRY vtt_S21123C6[] = {
  {&(_ZTV8S21123C6[3]),  3,14},
  {&(_tg__ZTV8S21123C7__8S21123C6[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C7__8S21123C6[4]),  4,7},
  {&(_ZTV8S21123C6[11]),  11,14},
};
extern VTBL_ENTRY _ZTI8S21123C6[];
extern  VTBL_ENTRY _ZTV8S21123C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C6[];
static VTBL_ENTRY alt_thunk_names46[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21123C7D0Ev,_ZThn60_N8S21123C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21123C7D1Ev,_ZThn60_N8S21123C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21123C6D0Ev,_ZThn60_N8S21123C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21123C6D1Ev,_ZThn60_N8S21123C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21123C6 = {  "S21123C6", // class name
  bases_S21123C6, 2,
  &(vtc_S21123C6[0]), // expected_vtbl_contents
  &(vtt_S21123C6[0]), // expected_vtt_contents
  ABISELECT(200,144), // object size
  NSPAIRA(_ZTI8S21123C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21123C6),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21123C6),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names46,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21123C4  : virtual S21123C5 , S21123C6 {
  void *s21123c4f0[3];
  char s21123c4f1:8;
  int s21123c4f2[2];
  char s21123c4f3;
  ::S21123C5 s21123c4f4;
  void *s21123c4f5[3];
  __tsi64 s21123c4f6[5];
  int s21123c4f7;
  ~S21123C4(); // tgen
  S21123C4(); // tgen
};
//SIG(-1 S21123C4) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} BC3{ VBC2 BC4{ VBC2 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC2 Fp[3] FL[5] Fi}


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

static void Test_S21123C4()
{
  extern Class_Descriptor cd_S21123C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(52,79)];
    init_test(&cd_S21123C4, buf);
    S21123C4 *dp, &lv = *(dp=new (buf) S21123C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(408,312), "sizeof(S21123C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21123C4)");
    check_base_class_offset(lv, (S21123C5*), ABISELECT(312,228), "S21123C4");
    check_base_class_offset(lv, (S21123C5*)(S21123C6*), ABISELECT(312,228), "S21123C4");
    check_base_class_offset(lv, (S21123C5*)(S21123C7*)(S21123C6*), ABISELECT(312,228), "S21123C4");
    check_base_class_offset(lv, (S21123C7*)(S21123C6*), 0, "S21123C4");
    check_base_class_offset(lv, (S21123C6*), 0, "S21123C4");
    check_field_offset(lv, s21123c4f0, ABISELECT(104,60), "S21123C4.s21123c4f0");
    set_bf_and_test(lv, s21123c4f1, ABISELECT(128,72), 0, 8, 1, "S21123C4");
    set_bf_and_test(lv, s21123c4f1, ABISELECT(128,72), 0, 8, hide_sll(1LL<<7), "S21123C4");
    check_field_offset(lv, s21123c4f2, ABISELECT(132,76), "S21123C4.s21123c4f2");
    check_field_offset(lv, s21123c4f3, ABISELECT(140,84), "S21123C4.s21123c4f3");
    check_field_offset(lv, s21123c4f4, ABISELECT(144,88), "S21123C4.s21123c4f4");
    check_field_offset(lv, s21123c4f5, ABISELECT(240,172), "S21123C4.s21123c4f5");
    check_field_offset(lv, s21123c4f6, ABISELECT(264,184), "S21123C4.s21123c4f6");
    check_field_offset(lv, s21123c4f7, ABISELECT(304,224), "S21123C4.s21123c4f7");
    test_class_info(&lv, &cd_S21123C4);
    dp->~S21123C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21123C4(Test_S21123C4, "S21123C4", ABISELECT(408,312));

#else // __cplusplus

extern void _ZN8S21123C4C1Ev();
extern void _ZN8S21123C4D1Ev();
Name_Map name_map_S21123C4[] = {
  NSPAIR(_ZN8S21123C4C1Ev),
  NSPAIR(_ZN8S21123C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21123C5;
extern VTBL_ENTRY _ZTI8S21123C5[];
extern  VTBL_ENTRY _ZTV8S21123C5[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
extern Class_Descriptor cd_S21123C6;
extern VTBL_ENTRY _ZTI8S21123C6[];
extern  VTBL_ENTRY _ZTV8S21123C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C6[];
static Base_Class bases_S21123C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21123C5,    ABISELECT(312,228), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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
  1, 1},
  {&cd_S21123C7,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21123C6,    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 _ZTI8S21123C4[];
extern void _ZN8S21123C4D1Ev();
extern void _ZN8S21123C4D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev)();
extern void ABISELECT(_ZThn312_N8S21123C4D1Ev,_ZThn228_N8S21123C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev)();
extern void ABISELECT(_ZThn312_N8S21123C4D0Ev,_ZThn228_N8S21123C4D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY vtc_S21123C4[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C4[0]),
  (VTBL_ENTRY)&_ZN8S21123C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C4D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S21123C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern VTBL_ENTRY _ZTV8S21123C4[];
extern void _ZN8S21123C6D1Ev();
extern void _ZN8S21123C6D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C6__8S21123C4[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&_ZN8S21123C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C78S21123C6__8S21123C4[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZThn312_N8S21123C7D1Ev,_ZThn228_N8S21123C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void ABISELECT(_ZThn312_N8S21123C7D0Ev,_ZThn228_N8S21123C7D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C78S21123C6__8S21123C4[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev)();
extern void ABISELECT(_ZThn312_N8S21123C6D1Ev,_ZThn228_N8S21123C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev)();
extern void ABISELECT(_ZThn312_N8S21123C6D0Ev,_ZThn228_N8S21123C6D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C6__8S21123C4[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
static  VTT_ENTRY vtt_S21123C4[] = {
  {&(_ZTV8S21123C4[3]),  3,14},
  {&(_tg__ZTV8S21123C6__8S21123C4[3]),  3,7},
  {&(_tg__ZTV8S21123C78S21123C6__8S21123C4[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C78S21123C6__8S21123C4[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C6__8S21123C4[4]),  4,7},
  {&(_ZTV8S21123C4[11]),  11,14},
};
extern VTBL_ENTRY _ZTI8S21123C4[];
extern  VTBL_ENTRY _ZTV8S21123C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C4[];
static VTBL_ENTRY alt_thunk_names47[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21123C6D0Ev,_ZThn228_N8S21123C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21123C6D1Ev,_ZThn228_N8S21123C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21123C7D0Ev,_ZThn228_N8S21123C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21123C7D1Ev,_ZThn228_N8S21123C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21123C4D0Ev,_ZThn228_N8S21123C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21123C4D1Ev,_ZThn228_N8S21123C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21123C4 = {  "S21123C4", // class name
  bases_S21123C4, 3,
  &(vtc_S21123C4[0]), // expected_vtbl_contents
  &(vtt_S21123C4[0]), // expected_vtt_contents
  ABISELECT(408,312), // object size
  NSPAIRA(_ZTI8S21123C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21123C4),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21123C4),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names47,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21123C3  : virtual S21123C4 {
  void *s21123c3f0[6];
  ~S21123C3(); // tgen
  S21123C3(); // tgen
};
//SIG(-1 S21123C3) C1{ VBC2{ VBC3{ vd v1 Fs[6] FL[8] Fi} BC4{ VBC3 BC5{ VBC3 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC3 Fp[3] FL[5] Fi} Fp[6]}


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

static void Test_S21123C3()
{
  extern Class_Descriptor cd_S21123C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(59,86)];
    init_test(&cd_S21123C3, buf);
    S21123C3 *dp, &lv = *(dp=new (buf) S21123C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(464,340), "sizeof(S21123C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21123C3)");
    check_base_class_offset(lv, (S21123C5*)(S21123C4*), ABISELECT(368,256), "S21123C3");
    check_base_class_offset(lv, (S21123C5*)(S21123C6*)(S21123C4*), ABISELECT(368,256), "S21123C3");
    check_base_class_offset(lv, (S21123C5*)(S21123C7*)(S21123C6*)(S21123C4*), ABISELECT(368,256), "S21123C3");
    check_base_class_offset(lv, (S21123C7*)(S21123C6*)(S21123C4*), ABISELECT(56,28), "S21123C3");
    check_base_class_offset(lv, (S21123C6*)(S21123C4*), ABISELECT(56,28), "S21123C3");
    check_base_class_offset(lv, (S21123C4*), ABISELECT(56,28), "S21123C3");
    check_field_offset(lv, s21123c3f0, ABISELECT(8,4), "S21123C3.s21123c3f0");
    test_class_info(&lv, &cd_S21123C3);
    dp->~S21123C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21123C3(Test_S21123C3, "S21123C3", ABISELECT(464,340));

#else // __cplusplus

extern void _ZN8S21123C3C1Ev();
extern void _ZN8S21123C3D1Ev();
Name_Map name_map_S21123C3[] = {
  NSPAIR(_ZN8S21123C3C1Ev),
  NSPAIR(_ZN8S21123C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21123C5;
extern VTBL_ENTRY _ZTI8S21123C5[];
extern  VTBL_ENTRY _ZTV8S21123C5[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
extern Class_Descriptor cd_S21123C6;
extern VTBL_ENTRY _ZTI8S21123C6[];
extern  VTBL_ENTRY _ZTV8S21123C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C6[];
extern Class_Descriptor cd_S21123C4;
extern VTBL_ENTRY _ZTI8S21123C4[];
extern  VTBL_ENTRY _ZTV8S21123C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C4[];
static Base_Class bases_S21123C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21123C5,    ABISELECT(368,256), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //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_S21123C7,    ABISELECT(56,28), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21123C6,    ABISELECT(56,28), //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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S21123C4,    ABISELECT(56,28), //bcp->offset
    6, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21123C3[];
extern void _ZN8S21123C3D1Ev();
extern void _ZN8S21123C3D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S21123C3D1Ev,_ZTv0_n16_N8S21123C3D1Ev)();
extern void ABISELECT(_ZThn56_N8S21123C3D1Ev,_ZThn28_N8S21123C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21123C3D0Ev,_ZTv0_n16_N8S21123C3D0Ev)();
extern void ABISELECT(_ZThn56_N8S21123C3D0Ev,_ZThn28_N8S21123C3D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21123C3D1Ev,_ZTv0_n12_N8S21123C3D1Ev)();
extern void ABISELECT(_ZThn368_N8S21123C3D1Ev,_ZThn256_N8S21123C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C3D0Ev,_ZTv0_n12_N8S21123C3D0Ev)();
extern void ABISELECT(_ZThn368_N8S21123C3D0Ev,_ZThn256_N8S21123C3D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY vtc_S21123C3[] = {
  ABISELECT(368,256),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C3[0]),
  (VTBL_ENTRY)&_ZN8S21123C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C3D0Ev,
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(312,228),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S21123C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C3D1Ev,_ZTv0_n16_N8S21123C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C3D0Ev,_ZTv0_n16_N8S21123C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
  0,
  ABISELECT(-368,-256),
  ABISELECT(-368,-256),
  (VTBL_ENTRY)&(_ZTI8S21123C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C3D1Ev,_ZTv0_n12_N8S21123C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C3D0Ev,_ZTv0_n12_N8S21123C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern VTBL_ENTRY _ZTV8S21123C3[];
extern void _ZN8S21123C4D1Ev();
extern void _ZN8S21123C4D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C4__8S21123C3[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C4[0]),
  (VTBL_ENTRY)&_ZN8S21123C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C4D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C6D1Ev();
extern void _ZN8S21123C6D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C68S21123C4__8S21123C3[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&_ZN8S21123C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C78S21123C68S21123C4__8S21123C3[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZThn312_N8S21123C7D1Ev,_ZThn228_N8S21123C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void ABISELECT(_ZThn312_N8S21123C7D0Ev,_ZThn228_N8S21123C7D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C78S21123C68S21123C4__8S21123C3[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev)();
extern void ABISELECT(_ZThn312_N8S21123C6D1Ev,_ZThn228_N8S21123C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev)();
extern void ABISELECT(_ZThn312_N8S21123C6D0Ev,_ZThn228_N8S21123C6D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C68S21123C4__8S21123C3[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev)();
extern void ABISELECT(_ZThn312_N8S21123C4D1Ev,_ZThn228_N8S21123C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev)();
extern void ABISELECT(_ZThn312_N8S21123C4D0Ev,_ZThn228_N8S21123C4D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C4__8S21123C3[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S21123C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
static  VTT_ENTRY vtt_S21123C3[] = {
  {&(_ZTV8S21123C3[4]),  4,23},
  {&(_ZTV8S21123C3[12]),  12,23},
  {&(_ZTV8S21123C3[20]),  20,23},
  {&(_tg__ZTV8S21123C4__8S21123C3[3]),  3,7},
  {&(_tg__ZTV8S21123C68S21123C4__8S21123C3[3]),  3,7},
  {&(_tg__ZTV8S21123C78S21123C68S21123C4__8S21123C3[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C78S21123C68S21123C4__8S21123C3[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C68S21123C4__8S21123C3[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C4__8S21123C3[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S21123C3[];
extern  VTBL_ENTRY _ZTV8S21123C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C3[];
static VTBL_ENTRY alt_thunk_names48[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21123C4D0Ev,_ZThn228_N8S21123C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21123C4D1Ev,_ZThn228_N8S21123C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21123C6D0Ev,_ZThn228_N8S21123C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21123C6D1Ev,_ZThn228_N8S21123C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21123C7D0Ev,_ZThn228_N8S21123C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21123C7D1Ev,_ZThn228_N8S21123C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C3D0Ev,_ZTv0_n12_N8S21123C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S21123C3D0Ev,_ZThn256_N8S21123C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C3D1Ev,_ZTv0_n12_N8S21123C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S21123C3D1Ev,_ZThn256_N8S21123C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21123C3D0Ev,_ZTv0_n16_N8S21123C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21123C3D0Ev,_ZThn28_N8S21123C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21123C3D1Ev,_ZTv0_n16_N8S21123C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21123C3D1Ev,_ZThn28_N8S21123C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21123C3 = {  "S21123C3", // class name
  bases_S21123C3, 4,
  &(vtc_S21123C3[0]), // expected_vtbl_contents
  &(vtt_S21123C3[0]), // expected_vtt_contents
  ABISELECT(464,340), // object size
  NSPAIRA(_ZTI8S21123C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21123C3),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21123C3),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names48,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21123C11  : virtual S21123C5 , S21123C6 , S21123C4 , S3052C12 , virtual S21123C7 {
  void *s21123c11f0;
  long s21123c11f1;
  ::S21123C4 s21123c11f2;
  ::S3052C12 s21123c11f3;
  ::S21123C7 s21123c11f4;
  int s21123c11f5[2];
  ::S3052C13 s21123c11f6[9];
  ~S21123C11(); // tgen
  S21123C11(); // tgen
};
//SIG(-1 S21123C11) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} BC3{ VBC2 BC4{ VBC2 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} BC5{ VBC2 BC3 Fp[3] Fc:8 Fi[2] Fc FC2 Fp[3] FL[5] Fi} BC6{ vd m FC7{ VBC8{ vd v6 Fs[6] FL[8] Fi} BC9{ VBC8 FL Fp FL:54} v4 v5 Fc:0 Fp[8] Fc}} VBC4 Fp Fl FC5 FC6 FC4 Fi[2] FU10{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}


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

static void Test_S21123C11()
{
  extern Class_Descriptor cd_S21123C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(105,310)];
    init_test(&cd_S21123C11, buf);
    S21123C11 *dp, &lv = *(dp=new (buf) S21123C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1664,1236), "sizeof(S21123C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21123C11)");
    check_base_class_offset(lv, (S21123C5*), ABISELECT(1536,1128), "S21123C11");
    /*is_ambiguous_... S21123C11::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C6*), ABISELECT(1536,1128), "S21123C11");
    /*is_ambiguous_... S21123C11::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C7*)(S21123C6*), ABISELECT(1536,1128), "S21123C11");
    check_base_class_offset(lv, (S21123C5*)(S21123C4*), ABISELECT(1536,1128), "S21123C11");
    check_base_class_offset(lv, (S21123C5*)(S21123C6*)(S21123C4*), ABISELECT(1536,1128), "S21123C11");
    check_base_class_offset(lv, (S21123C5*)(S21123C7*)(S21123C6*)(S21123C4*), ABISELECT(1536,1128), "S21123C11");
    /*is_ambiguous_... S21123C11::S21123C7 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C7*), ABISELECT(1536,1128), "S21123C11");
    /*is_ambiguous_... S21123C11::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C7*)(S21123C6*), 0, "S21123C11");
    /*is_ambiguous_... S21123C11::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C6*), 0, "S21123C11");
    check_base_class_offset(lv, (S21123C7*)(S21123C6*)(S21123C4*), ABISELECT(104,60), "S21123C11");
    check_base_class_offset(lv, (S21123C6*)(S21123C4*), ABISELECT(104,60), "S21123C11");
    check_base_class_offset(lv, (S21123C4*), ABISELECT(104,60), "S21123C11");
    check_base_class_offset(lv, (S3052C12*), ABISELECT(416,288), "S21123C11");
    /*is_ambiguous_... S21123C11::S21123C7 */ AMB_check_base_class_offset(lv, (S21123C7*), ABISELECT(1632,1212), "S21123C11");
    check_field_offset(lv, s21123c11f0, ABISELECT(624,436), "S21123C11.s21123c11f0");
    check_field_offset(lv, s21123c11f1, ABISELECT(632,440), "S21123C11.s21123c11f1");
    check_field_offset(lv, s21123c11f2, ABISELECT(640,444), "S21123C11.s21123c11f2");
    check_field_offset(lv, s21123c11f3, ABISELECT(1048,756), "S21123C11.s21123c11f3");
    check_field_offset(lv, s21123c11f4, ABISELECT(1256,904), "S21123C11.s21123c11f4");
    check_field_offset(lv, s21123c11f5, ABISELECT(1384,1012), "S21123C11.s21123c11f5");
    check_field_offset(lv, s21123c11f6, ABISELECT(1392,1020), "S21123C11.s21123c11f6");
    test_class_info(&lv, &cd_S21123C11);
    dp->~S21123C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21123C11(Test_S21123C11, "S21123C11", ABISELECT(1664,1236));

#else // __cplusplus

extern void _ZN9S21123C11C1Ev();
extern void _ZN9S21123C11D1Ev();
Name_Map name_map_S21123C11[] = {
  NSPAIR(_ZN9S21123C11C1Ev),
  NSPAIR(_ZN9S21123C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21123C5;
extern VTBL_ENTRY _ZTI8S21123C5[];
extern  VTBL_ENTRY _ZTV8S21123C5[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
extern Class_Descriptor cd_S21123C6;
extern VTBL_ENTRY _ZTI8S21123C6[];
extern  VTBL_ENTRY _ZTV8S21123C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C6[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
extern Class_Descriptor cd_S21123C6;
extern VTBL_ENTRY _ZTI8S21123C6[];
extern  VTBL_ENTRY _ZTV8S21123C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C6[];
extern Class_Descriptor cd_S21123C4;
extern VTBL_ENTRY _ZTI8S21123C4[];
extern  VTBL_ENTRY _ZTV8S21123C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C4[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
static Base_Class bases_S21123C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21123C5,    ABISELECT(1536,1128), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //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
  1, 1},
  {&cd_S21123C7,    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
    3, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21123C6,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21123C7,    ABISELECT(104,60), //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
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S21123C6,    ABISELECT(104,60), //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
    5, //immediately_derived
  0, 0},
  {&cd_S21123C4,    ABISELECT(104,60), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //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},
  {&cd_S3052C12,    ABISELECT(416,288), //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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21123C7,    ABISELECT(1632,1212), //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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21123C11[];
extern void _ZN9S21123C11D1Ev();
extern void _ZN9S21123C11D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
extern void ABISELECT(_ZThn104_N9S21123C11D1Ev,_ZThn60_N9S21123C11D1Ev)();
extern void ABISELECT(_ZThn104_N9S21123C11D0Ev,_ZThn60_N9S21123C11D0Ev)();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
extern void ABISELECT(_ZThn416_N9S21123C11D1Ev,_ZThn288_N9S21123C11D1Ev)();
extern void ABISELECT(_ZThn416_N9S21123C11D0Ev,_ZThn288_N9S21123C11D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21123C11D1Ev,_ZTv0_n12_N9S21123C11D1Ev)();
extern void ABISELECT(_ZThn1536_N9S21123C11D1Ev,_ZThn1128_N9S21123C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21123C11D0Ev,_ZTv0_n12_N9S21123C11D0Ev)();
extern void ABISELECT(_ZThn1536_N9S21123C11D0Ev,_ZThn1128_N9S21123C11D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S21123C11D1Ev,_ZTv0_n16_N9S21123C11D1Ev)();
extern void ABISELECT(_ZThn1632_N9S21123C11D1Ev,_ZThn1212_N9S21123C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21123C11D0Ev,_ZTv0_n16_N9S21123C11D0Ev)();
extern void ABISELECT(_ZThn1632_N9S21123C11D0Ev,_ZThn1212_N9S21123C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21123C11[] = {
  ABISELECT(1632,1212),
  ABISELECT(1536,1128),
  0,
  (VTBL_ENTRY)&(_ZTI9S21123C11[0]),
  (VTBL_ENTRY)&_ZN9S21123C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21123C11D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
  ABISELECT(1432,1068),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI9S21123C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S21123C11D1Ev,_ZThn60_N9S21123C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S21123C11D0Ev,_ZThn60_N9S21123C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
  ABISELECT(-416,-288),
  (VTBL_ENTRY)&(_ZTI9S21123C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn416_N9S21123C11D1Ev,_ZThn288_N9S21123C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn416_N9S21123C11D0Ev,_ZThn288_N9S21123C11D0Ev),
  0,
  ABISELECT(-1536,-1128),
  ABISELECT(-1536,-1128),
  (VTBL_ENTRY)&(_ZTI9S21123C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C11D1Ev,_ZTv0_n12_N9S21123C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C11D0Ev,_ZTv0_n12_N9S21123C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
  ABISELECT(-1632,-1212),
  ABISELECT(-96,-84),
  ABISELECT(-1632,-1212),
  (VTBL_ENTRY)&(_ZTI9S21123C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C11D1Ev,_ZTv0_n16_N9S21123C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C11D0Ev,_ZTv0_n16_N9S21123C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S21123C11[];
extern void _ZN8S21123C6D1Ev();
extern void _ZN8S21123C6D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C6__9S21123C11[] = {
  ABISELECT(1536,1128),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&_ZN8S21123C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C78S21123C6__9S21123C11[] = {
  ABISELECT(1536,1128),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZThn1536_N8S21123C7D1Ev,_ZThn1128_N8S21123C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void ABISELECT(_ZThn1536_N8S21123C7D0Ev,_ZThn1128_N8S21123C7D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C78S21123C6__9S21123C11[] = {
  0,
  ABISELECT(-1536,-1128),
  ABISELECT(-1536,-1128),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev)();
extern void ABISELECT(_ZThn1536_N8S21123C6D1Ev,_ZThn1128_N8S21123C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev)();
extern void ABISELECT(_ZThn1536_N8S21123C6D0Ev,_ZThn1128_N8S21123C6D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C6__9S21123C11[] = {
  0,
  ABISELECT(-1536,-1128),
  ABISELECT(-1536,-1128),
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void _ZN8S21123C4D1Ev();
extern void _ZN8S21123C4D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C4__9S21123C11[] = {
  ABISELECT(1432,1068),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C4[0]),
  (VTBL_ENTRY)&_ZN8S21123C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C4D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C6D1Ev();
extern void _ZN8S21123C6D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C68S21123C4__A1__9S21123C11[] = {
  ABISELECT(1432,1068),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&_ZN8S21123C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C78S21123C68S21123C4__A1__9S21123C11[] = {
  ABISELECT(1432,1068),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZThn1432_N8S21123C7D1Ev,_ZThn1068_N8S21123C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void ABISELECT(_ZThn1432_N8S21123C7D0Ev,_ZThn1068_N8S21123C7D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C78S21123C68S21123C4__A1__9S21123C11[] = {
  0,
  ABISELECT(-1432,-1068),
  ABISELECT(-1432,-1068),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev)();
extern void ABISELECT(_ZThn1432_N8S21123C6D1Ev,_ZThn1068_N8S21123C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev)();
extern void ABISELECT(_ZThn1432_N8S21123C6D0Ev,_ZThn1068_N8S21123C6D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C68S21123C4__A1__9S21123C11[] = {
  0,
  ABISELECT(-1432,-1068),
  ABISELECT(-1432,-1068),
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev)();
extern void ABISELECT(_ZThn1432_N8S21123C4D1Ev,_ZThn1068_N8S21123C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev)();
extern void ABISELECT(_ZThn1432_N8S21123C4D0Ev,_ZThn1068_N8S21123C4D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C4__9S21123C11[] = {
  0,
  ABISELECT(-1432,-1068),
  ABISELECT(-1432,-1068),
  (VTBL_ENTRY)&(_ZTI8S21123C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C7__A2__9S21123C11[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C7__A2__9S21123C11[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
static  VTT_ENTRY vtt_S21123C11[] = {
  {&(_ZTV9S21123C11[4]),  4,32},
  {&(_tg__ZTV8S21123C6__9S21123C11[3]),  3,7},
  {&(_tg__ZTV8S21123C78S21123C6__9S21123C11[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C78S21123C6__9S21123C11[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C6__9S21123C11[4]),  4,7},
  {&(_tg__ZTV8S21123C4__9S21123C11[3]),  3,7},
  {&(_tg__ZTV8S21123C68S21123C4__A1__9S21123C11[3]),  3,7},
  {&(_tg__ZTV8S21123C78S21123C68S21123C4__A1__9S21123C11[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C78S21123C68S21123C4__A1__9S21123C11[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C68S21123C4__A1__9S21123C11[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C4__9S21123C11[4]),  4,7},
  {&(_ZTV9S21123C11[23]),  23,32},
  {&(_ZTV9S21123C11[11]),  11,32},
  {&(_ZTV9S21123C11[30]),  30,32},
  {&(_tg__ZTV8S21123C7__A2__9S21123C11[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C7__A2__9S21123C11[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S21123C11[];
extern  VTBL_ENTRY _ZTV9S21123C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21123C11[];
static VTBL_ENTRY alt_thunk_names49[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S21123C4D0Ev,_ZThn1068_N8S21123C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S21123C4D1Ev,_ZThn1068_N8S21123C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S21123C6D0Ev,_ZThn1068_N8S21123C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S21123C6D0Ev,_ZThn1128_N8S21123C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S21123C6D1Ev,_ZThn1068_N8S21123C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S21123C6D1Ev,_ZThn1128_N8S21123C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S21123C7D0Ev,_ZThn1068_N8S21123C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S21123C7D0Ev,_ZThn1128_N8S21123C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S21123C7D1Ev,_ZThn1068_N8S21123C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S21123C7D1Ev,_ZThn1128_N8S21123C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21123C11D0Ev,_ZTv0_n16_N9S21123C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1632_N9S21123C11D0Ev,_ZThn1212_N9S21123C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21123C11D1Ev,_ZTv0_n16_N9S21123C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1632_N9S21123C11D1Ev,_ZThn1212_N9S21123C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21123C11D0Ev,_ZTv0_n12_N9S21123C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N9S21123C11D0Ev,_ZThn1128_N9S21123C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21123C11D1Ev,_ZTv0_n12_N9S21123C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N9S21123C11D1Ev,_ZThn1128_N9S21123C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21123C11 = {  "S21123C11", // class name
  bases_S21123C11, 8,
  &(vtc_S21123C11[0]), // expected_vtbl_contents
  &(vtt_S21123C11[0]), // expected_vtt_contents
  ABISELECT(1664,1236), // object size
  NSPAIRA(_ZTI9S21123C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S21123C11),32, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21123C11),16, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names49,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21123C9  : S3052C10 , virtual S21123C6 {
  void *s21123c9f0;
  char s21123c9f1[4];
  int s21123c9f2:11;
  void *s21123c9f3[2];
  int s21123c9f4[6];
  ::S21123C11 s21123c9f5[6];
  ~S21123C9(); // tgen
  S21123C9(); // tgen
};
//SIG(-1 S21123C9) C1{ BC2{ m Fp Fi FL Fp Fi} VBC3{ VBC4{ vd v1 Fs[6] FL[8] Fi} BC5{ VBC4 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp Fc[4] Fi:11 Fp[2] Fi[6] FC6{ VBC4 BC3 BC7{ VBC4 BC3 Fp[3] Fc:8 Fi[2] Fc FC4 Fp[3] FL[5] Fi} BC8{ vd m FC9{ VBC10{ vd v6 Fs[6] FL[8] Fi} BC11{ VBC10 FL Fp FL:54} v4 v5 Fc:0 Fp[8] Fc}} VBC5 Fp Fl FC7 FC8 FC5 Fi[2] FU12{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]}


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

static void Test_S21123C9()
{
  extern Class_Descriptor cd_S21123C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(645,1909)];
    init_test(&cd_S21123C9, buf);
    S21123C9 *dp, &lv = *(dp=new (buf) S21123C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(10304,7632), "sizeof(S21123C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21123C9)");
    check_base_class_offset(lv, (S3052C10*), ABISELECT(8,4), "S21123C9");
    check_base_class_offset(lv, (S21123C5*)(S21123C6*), ABISELECT(10200,7548), "S21123C9");
    check_base_class_offset(lv, (S21123C5*)(S21123C7*)(S21123C6*), ABISELECT(10200,7548), "S21123C9");
    check_base_class_offset(lv, (S21123C7*)(S21123C6*), ABISELECT(10096,7488), "S21123C9");
    check_base_class_offset(lv, (S21123C6*), ABISELECT(10096,7488), "S21123C9");
    check_field_offset(lv, s21123c9f0, ABISELECT(48,28), "S21123C9.s21123c9f0");
    check_field_offset(lv, s21123c9f1, ABISELECT(56,32), "S21123C9.s21123c9f1");
    set_bf_and_test(lv, s21123c9f2, ABISELECT(60,36), 0, 11, 1, "S21123C9");
    set_bf_and_test(lv, s21123c9f2, ABISELECT(60,36), 0, 11, hide_sll(1LL<<10), "S21123C9");
    check_field_offset(lv, s21123c9f3, ABISELECT(64,40), "S21123C9.s21123c9f3");
    check_field_offset(lv, s21123c9f4, ABISELECT(80,48), "S21123C9.s21123c9f4");
    check_field_offset(lv, s21123c9f5, ABISELECT(112,72), "S21123C9.s21123c9f5");
    test_class_info(&lv, &cd_S21123C9);
    dp->~S21123C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21123C9(Test_S21123C9, "S21123C9", ABISELECT(10304,7632));

#else // __cplusplus

extern void _ZN8S21123C9C1Ev();
extern void _ZN8S21123C9D1Ev();
Name_Map name_map_S21123C9[] = {
  NSPAIR(_ZN8S21123C9C1Ev),
  NSPAIR(_ZN8S21123C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S21123C5;
extern VTBL_ENTRY _ZTI8S21123C5[];
extern  VTBL_ENTRY _ZTV8S21123C5[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
extern Class_Descriptor cd_S21123C6;
extern VTBL_ENTRY _ZTI8S21123C6[];
extern  VTBL_ENTRY _ZTV8S21123C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C6[];
static Base_Class bases_S21123C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C10,    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_S21123C5,    ABISELECT(10200,7548), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //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_S21123C7,    ABISELECT(10096,7488), //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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S21123C6,    ABISELECT(10096,7488), //bcp->offset
    6, //bcp->virtual_function_table_offset
    6, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S21123C9[];
extern void _ZN8S21123C9D1Ev();
extern void _ZN8S21123C9D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S21123C9D1Ev,_ZTv0_n16_N8S21123C9D1Ev)();
extern void ABISELECT(_ZThn10096_N8S21123C9D1Ev,_ZThn7488_N8S21123C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21123C9D0Ev,_ZTv0_n16_N8S21123C9D0Ev)();
extern void ABISELECT(_ZThn10096_N8S21123C9D0Ev,_ZThn7488_N8S21123C9D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21123C9D1Ev,_ZTv0_n12_N8S21123C9D1Ev)();
extern void ABISELECT(_ZThn10200_N8S21123C9D1Ev,_ZThn7548_N8S21123C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C9D0Ev,_ZTv0_n12_N8S21123C9D0Ev)();
extern void ABISELECT(_ZThn10200_N8S21123C9D0Ev,_ZThn7548_N8S21123C9D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY vtc_S21123C9[] = {
  ABISELECT(10200,7548),
  ABISELECT(10096,7488),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C9[0]),
  (VTBL_ENTRY)&_ZN8S21123C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C9D0Ev,
  0,
  0,
  ABISELECT(-10096,-7488),
  ABISELECT(104,60),
  ABISELECT(-10096,-7488),
  (VTBL_ENTRY)&(_ZTI8S21123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C9D1Ev,_ZTv0_n16_N8S21123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C9D0Ev,_ZTv0_n16_N8S21123C9D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
  0,
  ABISELECT(-10200,-7548),
  ABISELECT(-10200,-7548),
  (VTBL_ENTRY)&(_ZTI8S21123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C9D1Ev,_ZTv0_n12_N8S21123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C9D0Ev,_ZTv0_n12_N8S21123C9D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern VTBL_ENTRY _ZTV8S21123C9[];
extern void _ZN8S21123C6D1Ev();
extern void _ZN8S21123C6D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C6__8S21123C9[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&_ZN8S21123C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C78S21123C6__8S21123C9[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZThn104_N8S21123C7D1Ev,_ZThn60_N8S21123C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void ABISELECT(_ZThn104_N8S21123C7D0Ev,_ZThn60_N8S21123C7D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C78S21123C6__8S21123C9[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev)();
extern void ABISELECT(_ZThn104_N8S21123C6D1Ev,_ZThn60_N8S21123C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev)();
extern void ABISELECT(_ZThn104_N8S21123C6D0Ev,_ZThn60_N8S21123C6D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C6__8S21123C9[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
static  VTT_ENTRY vtt_S21123C9[] = {
  {&(_ZTV8S21123C9[4]),  4,23},
  {&(_ZTV8S21123C9[12]),  12,23},
  {&(_ZTV8S21123C9[20]),  20,23},
  {&(_tg__ZTV8S21123C6__8S21123C9[3]),  3,7},
  {&(_tg__ZTV8S21123C78S21123C6__8S21123C9[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C78S21123C6__8S21123C9[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C6__8S21123C9[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S21123C9[];
extern  VTBL_ENTRY _ZTV8S21123C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C9[];
static VTBL_ENTRY alt_thunk_names50[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21123C6D0Ev,_ZThn60_N8S21123C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21123C6D1Ev,_ZThn60_N8S21123C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21123C7D0Ev,_ZThn60_N8S21123C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21123C7D1Ev,_ZThn60_N8S21123C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C9D0Ev,_ZTv0_n12_N8S21123C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10200_N8S21123C9D0Ev,_ZThn7548_N8S21123C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C9D1Ev,_ZTv0_n12_N8S21123C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10200_N8S21123C9D1Ev,_ZThn7548_N8S21123C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21123C9D0Ev,_ZTv0_n16_N8S21123C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10096_N8S21123C9D0Ev,_ZThn7488_N8S21123C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21123C9D1Ev,_ZTv0_n16_N8S21123C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10096_N8S21123C9D1Ev,_ZThn7488_N8S21123C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21123C9 = {  "S21123C9", // class name
  bases_S21123C9, 4,
  &(vtc_S21123C9[0]), // expected_vtbl_contents
  &(vtt_S21123C9[0]), // expected_vtt_contents
  ABISELECT(10304,7632), // object size
  NSPAIRA(_ZTI8S21123C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21123C9),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21123C9),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names50,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21123C14  : S3052C12 , virtual S21123C5 , virtual S21123C6 {
  ::S21123C6 s21123c14f0[2];
  long double s21123c14f1;
  ::S3052C12 s21123c14f2;
  void *s21123c14f3[3];
  ::S21123C4 s21123c14f4;
  int s21123c14f5;
  ::S3052C16 s21123c14f6;
  int s21123c14f7;
  virtual void  v4(); // _ZN9S21123C142v4Ev
  ~S21123C14(); // tgen
  S21123C14(); // tgen
};
//SIG(-1 S21123C14) C1{ BC2{ vd m FC3{ VBC4{ vd v7 Fs[6] FL[8] Fi} BC5{ VBC4 FL Fp FL:54} v5 v6 Fc:0 Fp[8] Fc}} VBC6{ vd v2 Fs[6] FL[8] Fi} VBC7{ VBC6 BC8{ VBC6 FL Fp FL:54} v3 v4 Fc:0 Fp[8] Fc} v1 FC7[2] FD FC2 Fp[3] FC9{ VBC6 BC7 Fp[3] Fc:8 Fi[2] Fc FC6 Fp[3] FL[5] Fi} Fi FU10{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi}


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

static void Test_S21123C14()
{
  extern Class_Descriptor cd_S21123C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(95,272)];
    init_test(&cd_S21123C14, buf);
    S21123C14 *dp, &lv = *(dp=new (buf) S21123C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1504,1084), "sizeof(S21123C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21123C14)");
    check_base_class_offset(lv, (S3052C12*), 0, "S21123C14");
    check_base_class_offset(lv, (S21123C5*), ABISELECT(1296,940), "S21123C14");
    check_base_class_offset(lv, (S21123C5*)(S21123C6*), ABISELECT(1296,940), "S21123C14");
    check_base_class_offset(lv, (S21123C5*)(S21123C7*)(S21123C6*), ABISELECT(1296,940), "S21123C14");
    check_base_class_offset(lv, (S21123C7*)(S21123C6*), ABISELECT(1392,1024), "S21123C14");
    check_base_class_offset(lv, (S21123C6*), ABISELECT(1392,1024), "S21123C14");
    check_field_offset(lv, s21123c14f0, ABISELECT(208,148), "S21123C14.s21123c14f0");
    check_field_offset(lv, s21123c14f1, ABISELECT(608,436), "S21123C14.s21123c14f1");
    check_field_offset(lv, s21123c14f2, ABISELECT(624,448), "S21123C14.s21123c14f2");
    check_field_offset(lv, s21123c14f3, ABISELECT(832,596), "S21123C14.s21123c14f3");
    check_field_offset(lv, s21123c14f4, ABISELECT(856,608), "S21123C14.s21123c14f4");
    check_field_offset(lv, s21123c14f5, ABISELECT(1264,920), "S21123C14.s21123c14f5");
    check_field_offset(lv, s21123c14f6, ABISELECT(1272,924), "S21123C14.s21123c14f6");
    check_field_offset(lv, s21123c14f7, ABISELECT(1288,936), "S21123C14.s21123c14f7");
    test_class_info(&lv, &cd_S21123C14);
    dp->~S21123C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21123C14(Test_S21123C14, "S21123C14", ABISELECT(1504,1084));

#else // __cplusplus

extern void _ZN9S21123C14C1Ev();
extern void _ZN9S21123C14D1Ev();
Name_Map name_map_S21123C14[] = {
  NSPAIR(_ZN9S21123C14C1Ev),
  NSPAIR(_ZN9S21123C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S21123C5;
extern VTBL_ENTRY _ZTI8S21123C5[];
extern  VTBL_ENTRY _ZTV8S21123C5[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
extern Class_Descriptor cd_S21123C6;
extern VTBL_ENTRY _ZTI8S21123C6[];
extern  VTBL_ENTRY _ZTV8S21123C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C6[];
static Base_Class bases_S21123C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S21123C5,    ABISELECT(1296,940), //bcp->offset
    7, //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_S21123C7,    ABISELECT(1392,1024), //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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S21123C6,    ABISELECT(1392,1024), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21123C14[];
extern void _ZN9S21123C14D1Ev();
extern void _ZN9S21123C14D0Ev();
extern void _ZN9S21123C142v4Ev();
extern void ABISELECT(_ZTv0_n24_N9S21123C14D1Ev,_ZTv0_n12_N9S21123C14D1Ev)();
extern void ABISELECT(_ZThn1296_N9S21123C14D1Ev,_ZThn940_N9S21123C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21123C14D0Ev,_ZTv0_n12_N9S21123C14D0Ev)();
extern void ABISELECT(_ZThn1296_N9S21123C14D0Ev,_ZThn940_N9S21123C14D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S21123C14D1Ev,_ZTv0_n16_N9S21123C14D1Ev)();
extern void ABISELECT(_ZThn1392_N9S21123C14D1Ev,_ZThn1024_N9S21123C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21123C14D0Ev,_ZTv0_n16_N9S21123C14D0Ev)();
extern void ABISELECT(_ZThn1392_N9S21123C14D0Ev,_ZThn1024_N9S21123C14D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY vtc_S21123C14[] = {
  ABISELECT(1392,1024),
  ABISELECT(1296,940),
  0,
  (VTBL_ENTRY)&(_ZTI9S21123C14[0]),
  (VTBL_ENTRY)&_ZN9S21123C14D1Ev,
  (VTBL_ENTRY)&_ZN9S21123C14D0Ev,
  (VTBL_ENTRY)&_ZN9S21123C142v4Ev,
  0,
  ABISELECT(-1296,-940),
  ABISELECT(-1296,-940),
  (VTBL_ENTRY)&(_ZTI9S21123C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C14D1Ev,_ZTv0_n12_N9S21123C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C14D0Ev,_ZTv0_n12_N9S21123C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
  0,
  0,
  ABISELECT(-1392,-1024),
  ABISELECT(-96,-84),
  ABISELECT(-1392,-1024),
  (VTBL_ENTRY)&(_ZTI9S21123C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C14D1Ev,_ZTv0_n16_N9S21123C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C14D0Ev,_ZTv0_n16_N9S21123C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern VTBL_ENTRY _ZTV9S21123C14[];
extern void _ZN8S21123C6D1Ev();
extern void _ZN8S21123C6D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C6__9S21123C14[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&_ZN8S21123C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C78S21123C6__9S21123C14[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C78S21123C6__9S21123C14[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C6__9S21123C14[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
static  VTT_ENTRY vtt_S21123C14[] = {
  {&(_ZTV9S21123C14[4]),  4,24},
  {&(_ZTV9S21123C14[11]),  11,24},
  {&(_ZTV9S21123C14[20]),  20,24},
  {&(_tg__ZTV8S21123C6__9S21123C14[3]),  3,7},
  {&(_tg__ZTV8S21123C78S21123C6__9S21123C14[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C78S21123C6__9S21123C14[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C6__9S21123C14[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S21123C14[];
extern  VTBL_ENTRY _ZTV9S21123C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21123C14[];
static VTBL_ENTRY alt_thunk_names51[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21123C14D0Ev,_ZTv0_n16_N9S21123C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N9S21123C14D0Ev,_ZThn1024_N9S21123C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21123C14D1Ev,_ZTv0_n16_N9S21123C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N9S21123C14D1Ev,_ZThn1024_N9S21123C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21123C14D0Ev,_ZTv0_n12_N9S21123C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1296_N9S21123C14D0Ev,_ZThn940_N9S21123C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21123C14D1Ev,_ZTv0_n12_N9S21123C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1296_N9S21123C14D1Ev,_ZThn940_N9S21123C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21123C14 = {  "S21123C14", // class name
  bases_S21123C14, 4,
  &(vtc_S21123C14[0]), // expected_vtbl_contents
  &(vtt_S21123C14[0]), // expected_vtt_contents
  ABISELECT(1504,1084), // object size
  NSPAIRA(_ZTI9S21123C14),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S21123C14),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21123C14),7, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names51,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21123C8  : virtual S21123C6 , virtual S21123C9 , S21123C14 {
  void *s21123c8f0;
  ::S3052C22_nt s21123c8f1;
  ::S21123C5 s21123c8f2;
  __tsi64 s21123c8f3;
  ::S3052C13 s21123c8f4;
  __tsi64 s21123c8f5[6];
  __tsi64 s21123c8f6;
  ::S21123C4 s21123c8f7;
  virtual void  v5(); // _ZN8S21123C82v5Ev
  ~S21123C8(); // tgen
  S21123C8(); // tgen
};
//SIG(-1 S21123C8) C1{ VBC2{ VBC3{ vd v2 Fs[6] FL[8] Fi} BC4{ VBC3 FL Fp FL:54} v3 v4 Fc:0 Fp[8] Fc} VBC5{ BC6{ m Fp Fi FL Fp Fi} VBC2 Fp Fc[4] Fi:11 Fp[2] Fi[6] FC7{ VBC3 BC2 BC8{ VBC3 BC2 Fp[3] Fc:8 Fi[2] Fc FC3 Fp[3] FL[5] Fi} BC9{ vd m FC10{ VBC11{ vd v8 Fs[6] FL[8] Fi} BC12{ VBC11 FL Fp FL:54} v6 v7 Fc:0 Fp[8] Fc}} VBC4 Fp Fl FC8 FC9 FC4 Fi[2] FU13{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} BC14{ BC9 VBC3 VBC2 v5 FC2[2] FD FC9 Fp[3] FC8 Fi FU15{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi} v1 Fp FC16{} FC3 FL FU13 FL[6] FL FC8}


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

static void Test_S21123C8()
{
  extern Class_Descriptor cd_S21123C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(764,2264)];
    init_test(&cd_S21123C8, buf);
    S21123C8 *dp, &lv = *(dp=new (buf) S21123C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12208,9052), "sizeof(S21123C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21123C8)");
    check_base_class_offset(lv, (S21123C5*)(S21123C6*), ABISELECT(2008,1480), "S21123C8");
    check_base_class_offset(lv, (S21123C5*)(S21123C7*)(S21123C6*), ABISELECT(2008,1480), "S21123C8");
    check_base_class_offset(lv, (S21123C5*)(S21123C14*), ABISELECT(2008,1480), "S21123C8");
    check_base_class_offset(lv, (S21123C7*)(S21123C6*), ABISELECT(1904,1420), "S21123C8");
    check_base_class_offset(lv, (S21123C6*), ABISELECT(1904,1420), "S21123C8");
    check_base_class_offset(lv, (S21123C6*)(S21123C9*), ABISELECT(1904,1420), "S21123C8");
    check_base_class_offset(lv, (S21123C6*)(S21123C14*), ABISELECT(1904,1420), "S21123C8");
    check_base_class_offset(lv, (S3052C10*)(S21123C9*), ABISELECT(2120,1568), "S21123C8");
    check_base_class_offset(lv, (S21123C9*), ABISELECT(2112,1564), "S21123C8");
    check_base_class_offset(lv, (S3052C12*)(S21123C14*), 0, "S21123C8");
    check_base_class_offset(lv, (S21123C14*), 0, "S21123C8");
    check_field_offset(lv, s21123c8f0, ABISELECT(1296,940), "S21123C8.s21123c8f0");
    check_field_offset(lv, s21123c8f1, ABISELECT(1304,944), "S21123C8.s21123c8f1");
    check_field_offset(lv, s21123c8f2, ABISELECT(1312,948), "S21123C8.s21123c8f2");
    check_field_offset(lv, s21123c8f3, ABISELECT(1408,1032), "S21123C8.s21123c8f3");
    check_field_offset(lv, s21123c8f4, ABISELECT(1424,1040), "S21123C8.s21123c8f4");
    check_field_offset(lv, s21123c8f5, ABISELECT(1440,1052), "S21123C8.s21123c8f5");
    check_field_offset(lv, s21123c8f6, ABISELECT(1488,1100), "S21123C8.s21123c8f6");
    check_field_offset(lv, s21123c8f7, ABISELECT(1496,1108), "S21123C8.s21123c8f7");
    test_class_info(&lv, &cd_S21123C8);
    dp->~S21123C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21123C8(Test_S21123C8, "S21123C8", ABISELECT(12208,9052));

#else // __cplusplus

extern void _ZN8S21123C8C1Ev();
extern void _ZN8S21123C8D1Ev();
Name_Map name_map_S21123C8[] = {
  NSPAIR(_ZN8S21123C8C1Ev),
  NSPAIR(_ZN8S21123C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21123C5;
extern VTBL_ENTRY _ZTI8S21123C5[];
extern  VTBL_ENTRY _ZTV8S21123C5[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
extern Class_Descriptor cd_S21123C6;
extern VTBL_ENTRY _ZTI8S21123C6[];
extern  VTBL_ENTRY _ZTV8S21123C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C6[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S21123C9;
extern VTBL_ENTRY _ZTI8S21123C9[];
extern  VTBL_ENTRY _ZTV8S21123C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C9[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S21123C14;
extern VTBL_ENTRY _ZTI9S21123C14[];
extern  VTBL_ENTRY _ZTV9S21123C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21123C14[];
static Base_Class bases_S21123C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21123C5,    ABISELECT(2008,1480), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //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_S21123C7,    ABISELECT(1904,1420), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21123C6,    ABISELECT(1904,1420), //bcp->offset
    9, //bcp->virtual_function_table_offset
    6, //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},
  {&cd_S3052C10,    ABISELECT(2120,1568), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21123C9,    ABISELECT(2112,1564), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S21123C14,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21123C8[];
extern void _ZN8S21123C8D1Ev();
extern void _ZN8S21123C8D0Ev();
extern void _ZN9S21123C142v4Ev();
extern void _ZN8S21123C82v5Ev();
extern void ABISELECT(_ZTv0_n32_N8S21123C8D1Ev,_ZTv0_n16_N8S21123C8D1Ev)();
extern void ABISELECT(_ZThn1904_N8S21123C8D1Ev,_ZThn1420_N8S21123C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21123C8D0Ev,_ZTv0_n16_N8S21123C8D0Ev)();
extern void ABISELECT(_ZThn1904_N8S21123C8D0Ev,_ZThn1420_N8S21123C8D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21123C8D1Ev,_ZTv0_n12_N8S21123C8D1Ev)();
extern void ABISELECT(_ZThn2008_N8S21123C8D1Ev,_ZThn1480_N8S21123C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C8D0Ev,_ZTv0_n12_N8S21123C8D0Ev)();
extern void ABISELECT(_ZThn2008_N8S21123C8D0Ev,_ZThn1480_N8S21123C8D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
extern void ABISELECT(_ZTv0_n40_N8S21123C8D1Ev,_ZTv0_n20_N8S21123C8D1Ev)();
extern void ABISELECT(_ZThn2112_N8S21123C8D1Ev,_ZThn1564_N8S21123C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21123C8D0Ev,_ZTv0_n20_N8S21123C8D0Ev)();
extern void ABISELECT(_ZThn2112_N8S21123C8D0Ev,_ZThn1564_N8S21123C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21123C8[] = {
  ABISELECT(2112,1564),
  ABISELECT(1904,1420),
  ABISELECT(2008,1480),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C8[0]),
  (VTBL_ENTRY)&_ZN8S21123C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C8D0Ev,
  (VTBL_ENTRY)&_ZN9S21123C142v4Ev,
  (VTBL_ENTRY)&_ZN8S21123C82v5Ev,
  0,
  0,
  ABISELECT(-1904,-1420),
  ABISELECT(104,60),
  ABISELECT(-1904,-1420),
  (VTBL_ENTRY)&(_ZTI8S21123C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C8D1Ev,_ZTv0_n16_N8S21123C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C8D0Ev,_ZTv0_n16_N8S21123C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
  0,
  ABISELECT(-2008,-1480),
  ABISELECT(-2008,-1480),
  (VTBL_ENTRY)&(_ZTI8S21123C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C8D1Ev,_ZTv0_n12_N8S21123C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C8D0Ev,_ZTv0_n12_N8S21123C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
  ABISELECT(-2112,-1564),
  ABISELECT(-104,-84),
  ABISELECT(-208,-144),
  ABISELECT(-2112,-1564),
  (VTBL_ENTRY)&(_ZTI8S21123C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21123C8D1Ev,_ZTv0_n20_N8S21123C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21123C8D0Ev,_ZTv0_n20_N8S21123C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S21123C8[];
extern void _ZN9S21123C14D1Ev();
extern void _ZN9S21123C14D0Ev();
extern void _ZN9S21123C142v4Ev();
static  VTBL_ENTRY _tg__ZTV9S21123C14__8S21123C8[] = {
  ABISELECT(1904,1420),
  ABISELECT(2008,1480),
  0,
  (VTBL_ENTRY)&(_ZTI9S21123C14[0]),
  (VTBL_ENTRY)&_ZN9S21123C14D1Ev,
  (VTBL_ENTRY)&_ZN9S21123C14D0Ev,
  (VTBL_ENTRY)&_ZN9S21123C142v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21123C14D1Ev,_ZTv0_n12_N9S21123C14D1Ev)();
extern void ABISELECT(_ZThn2008_N9S21123C14D1Ev,_ZThn1480_N9S21123C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21123C14D0Ev,_ZTv0_n12_N9S21123C14D0Ev)();
extern void ABISELECT(_ZThn2008_N9S21123C14D0Ev,_ZThn1480_N9S21123C14D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__9S21123C14__8S21123C8[] = {
  0,
  ABISELECT(-2008,-1480),
  ABISELECT(-2008,-1480),
  (VTBL_ENTRY)&(_ZTI9S21123C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C14D1Ev,_ZTv0_n12_N9S21123C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C14D0Ev,_ZTv0_n12_N9S21123C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S21123C14D1Ev,_ZTv0_n16_N9S21123C14D1Ev)();
extern void ABISELECT(_ZThn1904_N9S21123C14D1Ev,_ZThn1420_N9S21123C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21123C14D0Ev,_ZTv0_n16_N9S21123C14D0Ev)();
extern void ABISELECT(_ZThn1904_N9S21123C14D0Ev,_ZThn1420_N9S21123C14D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C6__9S21123C14__8S21123C8[] = {
  0,
  0,
  ABISELECT(-1904,-1420),
  ABISELECT(104,60),
  ABISELECT(-1904,-1420),
  (VTBL_ENTRY)&(_ZTI9S21123C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C14D1Ev,_ZTv0_n16_N9S21123C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C14D0Ev,_ZTv0_n16_N9S21123C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C6D1Ev();
extern void _ZN8S21123C6D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C6__8S21123C8[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&_ZN8S21123C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C78S21123C6__8S21123C8[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZThn104_N8S21123C7D1Ev,_ZThn60_N8S21123C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void ABISELECT(_ZThn104_N8S21123C7D0Ev,_ZThn60_N8S21123C7D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C78S21123C6__8S21123C8[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev)();
extern void ABISELECT(_ZThn104_N8S21123C6D1Ev,_ZThn60_N8S21123C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev)();
extern void ABISELECT(_ZThn104_N8S21123C6D0Ev,_ZThn60_N8S21123C6D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C6__8S21123C8[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void _ZN8S21123C9D1Ev();
extern void _ZN8S21123C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C9__8S21123C8[] = {
  ABISELECT(-104,-84),
  ABISELECT(-208,-144),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C9[0]),
  (VTBL_ENTRY)&_ZN8S21123C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C9D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S21123C9D1Ev,_ZTv0_n16_N8S21123C9D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S21123C9D0Ev,_ZTv0_n16_N8S21123C9D0Ev)();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C6__8S21123C9__8S21123C8[] = {
  0,
  0,
  ABISELECT(208,144),
  ABISELECT(104,60),
  ABISELECT(208,144),
  (VTBL_ENTRY)&(_ZTI8S21123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C9D1Ev,_ZTv0_n16_N8S21123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C9D0Ev,_ZTv0_n16_N8S21123C9D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C9D1Ev,_ZTv0_n12_N8S21123C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C9D0Ev,_ZTv0_n12_N8S21123C9D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C9__8S21123C8[] = {
  0,
  ABISELECT(104,84),
  ABISELECT(104,84),
  (VTBL_ENTRY)&(_ZTI8S21123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C9D1Ev,_ZTv0_n12_N8S21123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C9D0Ev,_ZTv0_n12_N8S21123C9D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
static  VTT_ENTRY vtt_S21123C8[] = {
  {&(_ZTV8S21123C8[5]),  5,33},
  {&(_tg__ZTV9S21123C14__8S21123C8[4]),  4,7},
  {&(_tg__ZTV8S21123C5__9S21123C14__8S21123C8[4]),  4,7},
  {&(_tg__ZTV8S21123C6__9S21123C14__8S21123C8[6]),  6,10},
  {&(_ZTV8S21123C8[15]),  15,33},
  {&(_ZTV8S21123C8[23]),  23,33},
  {&(_ZTV8S21123C8[31]),  31,33},
  {&(_tg__ZTV8S21123C6__8S21123C8[3]),  3,7},
  {&(_tg__ZTV8S21123C78S21123C6__8S21123C8[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C78S21123C6__8S21123C8[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C6__8S21123C8[4]),  4,7},
  {&(_tg__ZTV8S21123C9__8S21123C8[4]),  4,6},
  {&(_tg__ZTV8S21123C6__8S21123C9__8S21123C8[6]),  6,10},
  {&(_tg__ZTV8S21123C5__8S21123C9__8S21123C8[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S21123C8[];
extern  VTBL_ENTRY _ZTV8S21123C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C8[];
static VTBL_ENTRY alt_thunk_names52[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21123C6D0Ev,_ZThn60_N8S21123C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21123C6D1Ev,_ZThn60_N8S21123C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21123C7D0Ev,_ZThn60_N8S21123C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S21123C7D1Ev,_ZThn60_N8S21123C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21123C14D0Ev,_ZTv0_n16_N9S21123C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S21123C14D0Ev,_ZThn1420_N9S21123C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21123C14D1Ev,_ZTv0_n16_N9S21123C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S21123C14D1Ev,_ZThn1420_N9S21123C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21123C14D0Ev,_ZTv0_n12_N9S21123C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2008_N9S21123C14D0Ev,_ZThn1480_N9S21123C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21123C14D1Ev,_ZTv0_n12_N9S21123C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2008_N9S21123C14D1Ev,_ZThn1480_N9S21123C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21123C8D0Ev,_ZTv0_n20_N8S21123C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N8S21123C8D0Ev,_ZThn1564_N8S21123C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21123C8D1Ev,_ZTv0_n20_N8S21123C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2112_N8S21123C8D1Ev,_ZThn1564_N8S21123C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C8D0Ev,_ZTv0_n12_N8S21123C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2008_N8S21123C8D0Ev,_ZThn1480_N8S21123C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C8D1Ev,_ZTv0_n12_N8S21123C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2008_N8S21123C8D1Ev,_ZThn1480_N8S21123C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21123C8D0Ev,_ZTv0_n16_N8S21123C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N8S21123C8D0Ev,_ZThn1420_N8S21123C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21123C8D1Ev,_ZTv0_n16_N8S21123C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N8S21123C8D1Ev,_ZThn1420_N8S21123C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21123C8 = {  "S21123C8", // class name
  bases_S21123C8, 7,
  &(vtc_S21123C8[0]), // expected_vtbl_contents
  &(vtt_S21123C8[0]), // expected_vtt_contents
  ABISELECT(12208,9052), // object size
  NSPAIRA(_ZTI8S21123C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S21123C8),33, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21123C8),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names52,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21123C17  : S21123C4 , virtual S21123C6 , S21123C9 , virtual S21123C11 , virtual S3052C12 {
  ::S3052C12 s21123c17f0[2];
  int s21123c17f1;
  long double s21123c17f2;
  long double s21123c17f3;
  char  :0;
  void *s21123c17f5;
  virtual  ~S21123C17(); // _ZN9S21123C17D2Ev
  S21123C17(); // tgen
};
//SIG(-1 S21123C17) C1{ BC2{ VBC3{ vd v1 Fs[6] FL[8] Fi} BC4{ VBC3 BC5{ VBC3 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC3 Fp[3] FL[5] Fi} VBC4 BC6{ BC7{ m Fp Fi FL Fp Fi} VBC4 Fp Fc[4] Fi:11 Fp[2] Fi[6] FC8{ VBC3 BC4 BC2 BC9{ vd m FC10{ VBC11{ vd v6 Fs[6] FL[8] Fi} BC12{ VBC11 FL Fp FL:54} v4 v5 Fc:0 Fp[8] Fc}} VBC5 Fp Fl FC2 FC9 FC5 Fi[2] FU13{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} VBC8 VBC9 vd FC9[2] Fi FD FD Fc:0 Fp}


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

static void Test_S21123C17()
{
  extern Class_Descriptor cd_S21123C17;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(805,2373)];
    init_test(&cd_S21123C17, buf);
    S21123C17 *dp, &lv = *(dp=new (buf) S21123C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12864,9488), "sizeof(S21123C17)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21123C17)");
    /*is_ambiguous_... S21123C17::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C4*), ABISELECT(10888,8044), "S21123C17");
    /*is_ambiguous_... S21123C17::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C6*)(S21123C4*), ABISELECT(10888,8044), "S21123C17");
    /*is_ambiguous_... S21123C17::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C7*)(S21123C6*)(S21123C4*), ABISELECT(10888,8044), "S21123C17");
    /*is_ambiguous_... S21123C17::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C6*), ABISELECT(10888,8044), "S21123C17");
    /*is_ambiguous_... S21123C17::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C7*)(S21123C6*), ABISELECT(10888,8044), "S21123C17");
    check_base_class_offset(lv, (S21123C5*)(S21123C11*), ABISELECT(10888,8044), "S21123C17");
    /*is_ambiguous_... S21123C11::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C6*)(S21123C11*), ABISELECT(10888,8044), "S21123C17");
    /*is_ambiguous_... S21123C11::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C7*)(S21123C6*)(S21123C11*), ABISELECT(10888,8044), "S21123C17");
    check_base_class_offset(lv, (S21123C5*)(S21123C4*)(S21123C11*), ABISELECT(10888,8044), "S21123C17");
    check_base_class_offset(lv, (S21123C5*)(S21123C6*)(S21123C4*)(S21123C11*), ABISELECT(10888,8044), "S21123C17");
    check_base_class_offset(lv, (S21123C5*)(S21123C7*)(S21123C6*)(S21123C4*)(S21123C11*), ABISELECT(10888,8044), "S21123C17");
    /*is_ambiguous_... S21123C17::S21123C7 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C7*), ABISELECT(10888,8044), "S21123C17");
    /*is_ambiguous_... S21123C17::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C7*)(S21123C6*)(S21123C4*), 0, "S21123C17");
    /*is_ambiguous_... S21123C17::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C6*)(S21123C4*), 0, "S21123C17");
    /*is_ambiguous_... S21123C17::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C4*), 0, "S21123C17");
    /*is_ambiguous_... S21123C17::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C7*)(S21123C6*), ABISELECT(10984,8128), "S21123C17");
    /*is_ambiguous_... S21123C17::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C6*), ABISELECT(10984,8128), "S21123C17");
    check_base_class_offset(lv, (S21123C6*)(S21123C9*), ABISELECT(10984,8128), "S21123C17");
    check_base_class_offset(lv, (S3052C10*)(S21123C9*), ABISELECT(328,232), "S21123C17");
    check_base_class_offset(lv, (S21123C9*), ABISELECT(320,228), "S21123C17");
    /*is_ambiguous_... S21123C11::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C7*)(S21123C6*)(S21123C11*), ABISELECT(11088,8188), "S21123C17");
    /*is_ambiguous_... S21123C11::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C6*)(S21123C11*), ABISELECT(11088,8188), "S21123C17");
    check_base_class_offset(lv, (S21123C7*)(S21123C6*)(S21123C4*)(S21123C11*), ABISELECT(11192,8248), "S21123C17");
    check_base_class_offset(lv, (S21123C6*)(S21123C4*)(S21123C11*), ABISELECT(11192,8248), "S21123C17");
    check_base_class_offset(lv, (S21123C4*)(S21123C11*), ABISELECT(11192,8248), "S21123C17");
    check_base_class_offset(lv, (S3052C12*)(S21123C11*), ABISELECT(11504,8476), "S21123C17");
    /*is_ambiguous_... S21123C11::S21123C7 */ AMB_check_base_class_offset(lv, (S21123C7*)(S21123C11*), ABISELECT(12624,9316), "S21123C17");
    check_base_class_offset(lv, (S21123C11*), ABISELECT(11088,8188), "S21123C17");
    /*is_ambiguous_... S21123C17::S3052C12 */ AMB_check_base_class_offset(lv, (S3052C12*), ABISELECT(12656,9340), "S21123C17");
    check_field_offset(lv, s21123c17f0, ABISELECT(10416,7716), "S21123C17.s21123c17f0");
    check_field_offset(lv, s21123c17f1, ABISELECT(10832,8012), "S21123C17.s21123c17f1");
    check_field_offset(lv, s21123c17f2, ABISELECT(10848,8016), "S21123C17.s21123c17f2");
    check_field_offset(lv, s21123c17f3, ABISELECT(10864,8028), "S21123C17.s21123c17f3");
    check_field_offset(lv, s21123c17f5, ABISELECT(10880,8040), "S21123C17.s21123c17f5");
    test_class_info(&lv, &cd_S21123C17);
    dp->~S21123C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21123C17(Test_S21123C17, "S21123C17", ABISELECT(12864,9488));

#else // __cplusplus

extern void _ZN9S21123C17C1Ev();
extern void _ZN9S21123C17D2Ev();
Name_Map name_map_S21123C17[] = {
  NSPAIR(_ZN9S21123C17C1Ev),
  NSPAIR(_ZN9S21123C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21123C5;
extern VTBL_ENTRY _ZTI8S21123C5[];
extern  VTBL_ENTRY _ZTV8S21123C5[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
extern Class_Descriptor cd_S21123C6;
extern VTBL_ENTRY _ZTI8S21123C6[];
extern  VTBL_ENTRY _ZTV8S21123C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C6[];
extern Class_Descriptor cd_S21123C4;
extern VTBL_ENTRY _ZTI8S21123C4[];
extern  VTBL_ENTRY _ZTV8S21123C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C4[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
extern Class_Descriptor cd_S21123C6;
extern VTBL_ENTRY _ZTI8S21123C6[];
extern  VTBL_ENTRY _ZTV8S21123C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C6[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S21123C9;
extern VTBL_ENTRY _ZTI8S21123C9[];
extern  VTBL_ENTRY _ZTV8S21123C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C9[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
extern Class_Descriptor cd_S21123C6;
extern VTBL_ENTRY _ZTI8S21123C6[];
extern  VTBL_ENTRY _ZTV8S21123C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C6[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
extern Class_Descriptor cd_S21123C6;
extern VTBL_ENTRY _ZTI8S21123C6[];
extern  VTBL_ENTRY _ZTV8S21123C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C6[];
extern Class_Descriptor cd_S21123C4;
extern VTBL_ENTRY _ZTI8S21123C4[];
extern  VTBL_ENTRY _ZTV8S21123C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C4[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
extern Class_Descriptor cd_S21123C11;
extern VTBL_ENTRY _ZTI9S21123C11[];
extern  VTBL_ENTRY _ZTV9S21123C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21123C11[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
static Base_Class bases_S21123C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21123C5,    ABISELECT(10888,8044), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //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_S21123C7,    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
    13, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21123C6,    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
    3, //immediately_derived
  0, 0},
  {&cd_S21123C4,    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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21123C7,    ABISELECT(10984,8128), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S21123C6,    ABISELECT(10984,8128), //bcp->offset
    24, //bcp->virtual_function_table_offset
    6, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C10,    ABISELECT(328,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
    7, //immediately_derived
  0, 0},
  {&cd_S21123C9,    ABISELECT(320,228), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21123C7,    ABISELECT(11088,8188), //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
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S21123C6,    ABISELECT(11088,8188), //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
    6, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S21123C7,    ABISELECT(11192,8248), //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
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S21123C6,    ABISELECT(11192,8248), //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
    12, //immediately_derived
  0, 0},
  {&cd_S21123C4,    ABISELECT(11192,8248), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3052C12,    ABISELECT(11504,8476), //bcp->offset
    52, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S21123C7,    ABISELECT(12624,9316), //bcp->offset
    56, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S21123C11,    ABISELECT(11088,8188), //bcp->offset
    34, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C12,    ABISELECT(12656,9340), //bcp->offset
    62, //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
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S21123C17[];
extern void _ZN9S21123C17D1Ev();
extern void _ZN9S21123C17D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
extern void ABISELECT(_ZThn320_N9S21123C17D1Ev,_ZThn228_N9S21123C17D1Ev)();
extern void ABISELECT(_ZThn320_N9S21123C17D0Ev,_ZThn228_N9S21123C17D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21123C17D1Ev,_ZTv0_n12_N9S21123C17D1Ev)();
extern void ABISELECT(_ZThn10888_N9S21123C17D1Ev,_ZThn8044_N9S21123C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21123C17D0Ev,_ZTv0_n12_N9S21123C17D0Ev)();
extern void ABISELECT(_ZThn10888_N9S21123C17D0Ev,_ZThn8044_N9S21123C17D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
extern void ABISELECT(_ZTv0_n32_N9S21123C17D1Ev,_ZTv0_n16_N9S21123C17D1Ev)();
extern void ABISELECT(_ZThn10984_N9S21123C17D1Ev,_ZThn8128_N9S21123C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21123C17D0Ev,_ZTv0_n16_N9S21123C17D0Ev)();
extern void ABISELECT(_ZThn10984_N9S21123C17D0Ev,_ZThn8128_N9S21123C17D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N9S21123C17D1Ev,_ZTv0_n20_N9S21123C17D1Ev)();
extern void ABISELECT(_ZThn11088_N9S21123C17D1Ev,_ZThn8188_N9S21123C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21123C17D0Ev,_ZTv0_n20_N9S21123C17D0Ev)();
extern void ABISELECT(_ZThn11088_N9S21123C17D0Ev,_ZThn8188_N9S21123C17D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
extern void ABISELECT(_ZTvn104_n40_N9S21123C17D1Ev,_ZTvn60_n20_N9S21123C17D1Ev)();
extern void ABISELECT(_ZTvn104_n40_N9S21123C17D0Ev,_ZTvn60_n20_N9S21123C17D0Ev)();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
extern void ABISELECT(_ZTvn416_n40_N9S21123C17D1Ev,_ZTvn288_n20_N9S21123C17D1Ev)();
extern void ABISELECT(_ZTvn416_n40_N9S21123C17D0Ev,_ZTvn288_n20_N9S21123C17D0Ev)();
extern void ABISELECT(_ZTv0_n32_N9S21123C17D1Ev,_ZTv0_n16_N9S21123C17D1Ev)();
extern void ABISELECT(_ZThn12624_N9S21123C17D1Ev,_ZThn9316_N9S21123C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21123C17D0Ev,_ZTv0_n16_N9S21123C17D0Ev)();
extern void ABISELECT(_ZThn12624_N9S21123C17D0Ev,_ZThn9316_N9S21123C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21123C17D1Ev,_ZTv0_n12_N9S21123C17D1Ev)();
extern void ABISELECT(_ZThn12656_N9S21123C17D1Ev,_ZThn9340_N9S21123C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21123C17D0Ev,_ZTv0_n12_N9S21123C17D0Ev)();
extern void ABISELECT(_ZThn12656_N9S21123C17D0Ev,_ZThn9340_N9S21123C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21123C17[] = {
  ABISELECT(12656,9340),
  ABISELECT(12624,9316),
  ABISELECT(11088,8188),
  ABISELECT(10984,8128),
  ABISELECT(10888,8044),
  0,
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&_ZN9S21123C17D1Ev,
  (VTBL_ENTRY)&_ZN9S21123C17D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
  ABISELECT(10568,7816),
  ABISELECT(10664,7900),
  ABISELECT(-320,-228),
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N9S21123C17D1Ev,_ZThn228_N9S21123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N9S21123C17D0Ev,_ZThn228_N9S21123C17D0Ev),
  0,
  ABISELECT(-10888,-8044),
  ABISELECT(-10888,-8044),
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C17D1Ev,_ZTv0_n12_N9S21123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C17D0Ev,_ZTv0_n12_N9S21123C17D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
  0,
  0,
  ABISELECT(-10984,-8128),
  ABISELECT(-96,-84),
  ABISELECT(-10984,-8128),
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C17D1Ev,_ZTv0_n16_N9S21123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C17D0Ev,_ZTv0_n16_N9S21123C17D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
  0,
  0,
  ABISELECT(-11088,-8188),
  ABISELECT(1536,1128),
  ABISELECT(-200,-144),
  ABISELECT(-11088,-8188),
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21123C17D1Ev,_ZTv0_n20_N9S21123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21123C17D0Ev,_ZTv0_n20_N9S21123C17D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
  ABISELECT(-304,-204),
  ABISELECT(-11192,-8248),
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N9S21123C17D1Ev,_ZTvn60_n20_N9S21123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N9S21123C17D0Ev,_ZTvn60_n20_N9S21123C17D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
  ABISELECT(-11504,-8476),
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N9S21123C17D1Ev,_ZTvn288_n20_N9S21123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N9S21123C17D0Ev,_ZTvn288_n20_N9S21123C17D0Ev),
  ABISELECT(-12624,-9316),
  ABISELECT(-1736,-1272),
  ABISELECT(-12624,-9316),
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C17D1Ev,_ZTv0_n16_N9S21123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C17D0Ev,_ZTv0_n16_N9S21123C17D0Ev),
  ABISELECT(-12656,-9340),
  ABISELECT(-12656,-9340),
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C17D1Ev,_ZTv0_n12_N9S21123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C17D0Ev,_ZTv0_n12_N9S21123C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S21123C17[];
extern void _ZN8S21123C4D1Ev();
extern void _ZN8S21123C4D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C4__9S21123C17[] = {
  ABISELECT(10888,8044),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C4[0]),
  (VTBL_ENTRY)&_ZN8S21123C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C4D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C6D1Ev();
extern void _ZN8S21123C6D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C68S21123C4__9S21123C17[] = {
  ABISELECT(10888,8044),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&_ZN8S21123C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C78S21123C68S21123C4__9S21123C17[] = {
  ABISELECT(10888,8044),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZThn10888_N8S21123C7D1Ev,_ZThn8044_N8S21123C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void ABISELECT(_ZThn10888_N8S21123C7D0Ev,_ZThn8044_N8S21123C7D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C78S21123C68S21123C4__9S21123C17[] = {
  0,
  ABISELECT(-10888,-8044),
  ABISELECT(-10888,-8044),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev)();
extern void ABISELECT(_ZThn10888_N8S21123C6D1Ev,_ZThn8044_N8S21123C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev)();
extern void ABISELECT(_ZThn10888_N8S21123C6D0Ev,_ZThn8044_N8S21123C6D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C68S21123C4__9S21123C17[] = {
  0,
  ABISELECT(-10888,-8044),
  ABISELECT(-10888,-8044),
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev)();
extern void ABISELECT(_ZThn10888_N8S21123C4D1Ev,_ZThn8044_N8S21123C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev)();
extern void ABISELECT(_ZThn10888_N8S21123C4D0Ev,_ZThn8044_N8S21123C4D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C4__9S21123C17[] = {
  0,
  ABISELECT(-10888,-8044),
  ABISELECT(-10888,-8044),
  (VTBL_ENTRY)&(_ZTI8S21123C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void _ZN8S21123C9D1Ev();
extern void _ZN8S21123C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C9__9S21123C17[] = {
  ABISELECT(10568,7816),
  ABISELECT(10664,7900),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C9[0]),
  (VTBL_ENTRY)&_ZN8S21123C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C9D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S21123C9D1Ev,_ZTv0_n16_N8S21123C9D1Ev)();
extern void ABISELECT(_ZThn10664_N8S21123C9D1Ev,_ZThn7900_N8S21123C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21123C9D0Ev,_ZTv0_n16_N8S21123C9D0Ev)();
extern void ABISELECT(_ZThn10664_N8S21123C9D0Ev,_ZThn7900_N8S21123C9D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C6__8S21123C9__9S21123C17[] = {
  0,
  0,
  ABISELECT(-10664,-7900),
  ABISELECT(-96,-84),
  ABISELECT(-10664,-7900),
  (VTBL_ENTRY)&(_ZTI8S21123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C9D1Ev,_ZTv0_n16_N8S21123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C9D0Ev,_ZTv0_n16_N8S21123C9D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C9D1Ev,_ZTv0_n12_N8S21123C9D1Ev)();
extern void ABISELECT(_ZThn10568_N8S21123C9D1Ev,_ZThn7816_N8S21123C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C9D0Ev,_ZTv0_n12_N8S21123C9D0Ev)();
extern void ABISELECT(_ZThn10568_N8S21123C9D0Ev,_ZThn7816_N8S21123C9D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C9__9S21123C17[] = {
  0,
  ABISELECT(-10568,-7816),
  ABISELECT(-10568,-7816),
  (VTBL_ENTRY)&(_ZTI8S21123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C9D1Ev,_ZTv0_n12_N8S21123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C9D0Ev,_ZTv0_n12_N8S21123C9D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void _ZN8S21123C6D1Ev();
extern void _ZN8S21123C6D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C6__A1__9S21123C17[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&_ZN8S21123C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C78S21123C6__A1__9S21123C17[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C78S21123C6__A1__9S21123C17[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C6__A1__9S21123C17[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void _ZN9S21123C11D1Ev();
extern void _ZN9S21123C11D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV9S21123C11__9S21123C17[] = {
  ABISELECT(1536,1128),
  ABISELECT(-200,-144),
  0,
  (VTBL_ENTRY)&(_ZTI9S21123C11[0]),
  (VTBL_ENTRY)&_ZN9S21123C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21123C11D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C6D1Ev();
extern void _ZN8S21123C6D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C69S21123C11__A2__9S21123C17[] = {
  ABISELECT(-200,-144),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&_ZN8S21123C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C78S21123C69S21123C11__A2__9S21123C17[] = {
  ABISELECT(-200,-144),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C78S21123C69S21123C11__A2__9S21123C17[] = {
  0,
  ABISELECT(200,144),
  ABISELECT(200,144),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C69S21123C11__A2__9S21123C17[] = {
  0,
  ABISELECT(200,144),
  ABISELECT(200,144),
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void _ZN8S21123C4D1Ev();
extern void _ZN8S21123C4D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C49S21123C11__A1__9S21123C17[] = {
  ABISELECT(-304,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C4[0]),
  (VTBL_ENTRY)&_ZN8S21123C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C4D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C6D1Ev();
extern void _ZN8S21123C6D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C68S21123C49S21123C11__A3__9S21123C17[] = {
  ABISELECT(-304,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&_ZN8S21123C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C78S21123C68S21123C49S21123C11__A3__9S21123C17[] = {
  ABISELECT(-304,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C78S21123C68S21123C49S21123C11__A3__9S21123C17[] = {
  0,
  ABISELECT(304,204),
  ABISELECT(304,204),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C68S21123C49S21123C11__A3__9S21123C17[] = {
  0,
  ABISELECT(304,204),
  ABISELECT(304,204),
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C49S21123C11__A1__9S21123C17[] = {
  0,
  ABISELECT(304,204),
  ABISELECT(304,204),
  (VTBL_ENTRY)&(_ZTI8S21123C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21123C11D1Ev,_ZTv0_n12_N9S21123C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21123C11D0Ev,_ZTv0_n12_N9S21123C11D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__9S21123C11__9S21123C17[] = {
  0,
  ABISELECT(200,144),
  ABISELECT(200,144),
  (VTBL_ENTRY)&(_ZTI9S21123C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C11D1Ev,_ZTv0_n12_N9S21123C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C11D0Ev,_ZTv0_n12_N9S21123C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZThn104_N9S21123C11D1Ev,_ZThn60_N9S21123C11D1Ev)();
extern void ABISELECT(_ZThn104_N9S21123C11D0Ev,_ZThn60_N9S21123C11D0Ev)();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C4__9S21123C11__9S21123C17[] = {
  ABISELECT(-304,-204),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI9S21123C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S21123C11D1Ev,_ZThn60_N9S21123C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S21123C11D0Ev,_ZThn60_N9S21123C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S21123C11D1Ev,_ZTv0_n16_N9S21123C11D1Ev)();
extern void ABISELECT(_ZThn1536_N9S21123C11D1Ev,_ZThn1128_N9S21123C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21123C11D0Ev,_ZTv0_n16_N9S21123C11D0Ev)();
extern void ABISELECT(_ZThn1536_N9S21123C11D0Ev,_ZThn1128_N9S21123C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21123C7__A2__9S21123C11__9S21123C17[] = {
  ABISELECT(-1536,-1128),
  ABISELECT(-1736,-1272),
  ABISELECT(-1536,-1128),
  (VTBL_ENTRY)&(_ZTI9S21123C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C11D1Ev,_ZTv0_n16_N9S21123C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C11D0Ev,_ZTv0_n16_N9S21123C11D0Ev),
};
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C7__A4__9S21123C17[] = {
  ABISELECT(-1736,-1272),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C7__A4__9S21123C17[] = {
  0,
  ABISELECT(1736,1272),
  ABISELECT(1736,1272),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
static  VTT_ENTRY vtt_S21123C17[] = {
  {&(_ZTV9S21123C17[7]),  7,67},
  {&(_tg__ZTV8S21123C4__9S21123C17[3]),  3,7},
  {&(_tg__ZTV8S21123C68S21123C4__9S21123C17[3]),  3,7},
  {&(_tg__ZTV8S21123C78S21123C68S21123C4__9S21123C17[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C78S21123C68S21123C4__9S21123C17[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C68S21123C4__9S21123C17[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C4__9S21123C17[4]),  4,7},
  {&(_tg__ZTV8S21123C9__9S21123C17[4]),  4,6},
  {&(_tg__ZTV8S21123C6__8S21123C9__9S21123C17[6]),  6,10},
  {&(_tg__ZTV8S21123C5__8S21123C9__9S21123C17[4]),  4,7},
  {&(_ZTV9S21123C17[21]),  21,67},
  {&(_ZTV9S21123C17[30]),  30,67},
  {&(_ZTV9S21123C17[15]),  15,67},
  {&(_ZTV9S21123C17[41]),  41,67},
  {&(_ZTV9S21123C17[48]),  48,67},
  {&(_ZTV9S21123C17[54]),  54,67},
  {&(_ZTV9S21123C17[60]),  60,67},
  {&(_ZTV9S21123C17[65]),  65,67},
  {&(_tg__ZTV8S21123C6__A1__9S21123C17[3]),  3,7},
  {&(_tg__ZTV8S21123C78S21123C6__A1__9S21123C17[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C78S21123C6__A1__9S21123C17[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C6__A1__9S21123C17[4]),  4,7},
  {&(_tg__ZTV9S21123C11__9S21123C17[4]),  4,8},
  {&(_tg__ZTV8S21123C69S21123C11__A2__9S21123C17[3]),  3,7},
  {&(_tg__ZTV8S21123C78S21123C69S21123C11__A2__9S21123C17[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C78S21123C69S21123C11__A2__9S21123C17[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C69S21123C11__A2__9S21123C17[4]),  4,7},
  {&(_tg__ZTV8S21123C49S21123C11__A1__9S21123C17[3]),  3,7},
  {&(_tg__ZTV8S21123C68S21123C49S21123C11__A3__9S21123C17[3]),  3,7},
  {&(_tg__ZTV8S21123C78S21123C68S21123C49S21123C11__A3__9S21123C17[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C78S21123C68S21123C49S21123C11__A3__9S21123C17[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C68S21123C49S21123C11__A3__9S21123C17[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C49S21123C11__A1__9S21123C17[4]),  4,7},
  {&(_tg__ZTV8S21123C5__9S21123C11__9S21123C17[4]),  4,7},
  {&(_tg__ZTV8S21123C4__9S21123C11__9S21123C17[3]),  3,7},
  {&(_tg__ZTV8S21123C7__A2__9S21123C11__9S21123C17[4]),  4,6},
  {&(_tg__ZTV8S21123C7__A4__9S21123C17[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C7__A4__9S21123C17[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S21123C17[];
extern  VTBL_ENTRY _ZTV9S21123C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21123C17[];
static VTBL_ENTRY alt_thunk_names53[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21123C11D0Ev,_ZTv0_n16_N9S21123C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N9S21123C11D0Ev,_ZThn1128_N9S21123C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21123C11D1Ev,_ZTv0_n16_N9S21123C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N9S21123C11D1Ev,_ZThn1128_N9S21123C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C9D0Ev,_ZTv0_n12_N8S21123C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10568_N8S21123C9D0Ev,_ZThn7816_N8S21123C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C9D1Ev,_ZTv0_n12_N8S21123C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10568_N8S21123C9D1Ev,_ZThn7816_N8S21123C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21123C9D0Ev,_ZTv0_n16_N8S21123C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10664_N8S21123C9D0Ev,_ZThn7900_N8S21123C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21123C9D1Ev,_ZTv0_n16_N8S21123C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10664_N8S21123C9D1Ev,_ZThn7900_N8S21123C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N8S21123C4D0Ev,_ZThn8044_N8S21123C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N8S21123C4D1Ev,_ZThn8044_N8S21123C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N8S21123C6D0Ev,_ZThn8044_N8S21123C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N8S21123C6D1Ev,_ZThn8044_N8S21123C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N8S21123C7D0Ev,_ZThn8044_N8S21123C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N8S21123C7D1Ev,_ZThn8044_N8S21123C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21123C17D0Ev,_ZTv0_n20_N9S21123C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11088_N9S21123C17D0Ev,_ZThn8188_N9S21123C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21123C17D1Ev,_ZTv0_n20_N9S21123C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11088_N9S21123C17D1Ev,_ZThn8188_N9S21123C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21123C17D0Ev,_ZTv0_n16_N9S21123C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12624_N9S21123C17D0Ev,_ZThn9316_N9S21123C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10984_N9S21123C17D0Ev,_ZThn8128_N9S21123C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21123C17D1Ev,_ZTv0_n16_N9S21123C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12624_N9S21123C17D1Ev,_ZThn9316_N9S21123C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10984_N9S21123C17D1Ev,_ZThn8128_N9S21123C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21123C17D0Ev,_ZTv0_n12_N9S21123C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12656_N9S21123C17D0Ev,_ZThn9340_N9S21123C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N9S21123C17D0Ev,_ZThn8044_N9S21123C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21123C17D1Ev,_ZTv0_n12_N9S21123C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12656_N9S21123C17D1Ev,_ZThn9340_N9S21123C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N9S21123C17D1Ev,_ZThn8044_N9S21123C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21123C17 = {  "S21123C17", // class name
  bases_S21123C17, 17,
  &(vtc_S21123C17[0]), // expected_vtbl_contents
  &(vtt_S21123C17[0]), // expected_vtt_contents
  ABISELECT(12864,9488), // object size
  NSPAIRA(_ZTI9S21123C17),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S21123C17),67, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21123C17),38, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names53,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21123C18  {
  int  :0;
  int s21123c18f1[6];
  int s21123c18f2;
  void *s21123c18f3;
  virtual void  v6(); // _ZN9S21123C182v6Ev
  ~S21123C18(); // tgen
  S21123C18(); // tgen
};
//SIG(-1 S21123C18) C1{ v1 Fi:0 Fi[7] Fp}


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

static void Test_S21123C18()
{
  extern Class_Descriptor cd_S21123C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S21123C18, buf);
    S21123C18 *dp, &lv = *(dp=new (buf) S21123C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S21123C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21123C18)");
    check_field_offset(lv, s21123c18f1, ABISELECT(8,4), "S21123C18.s21123c18f1");
    check_field_offset(lv, s21123c18f2, ABISELECT(32,28), "S21123C18.s21123c18f2");
    check_field_offset(lv, s21123c18f3, ABISELECT(40,32), "S21123C18.s21123c18f3");
    test_class_info(&lv, &cd_S21123C18);
    dp->~S21123C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21123C18(Test_S21123C18, "S21123C18", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN9S21123C18C1Ev();
extern void _ZN9S21123C18D1Ev();
Name_Map name_map_S21123C18[] = {
  NSPAIR(_ZN9S21123C18C1Ev),
  NSPAIR(_ZN9S21123C18D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S21123C18[];
extern void _ZN9S21123C182v6Ev();
static  VTBL_ENTRY vtc_S21123C18[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S21123C18[0]),
  (VTBL_ENTRY)&_ZN9S21123C182v6Ev,
};
extern VTBL_ENTRY _ZTI9S21123C18[];
extern  VTBL_ENTRY _ZTV9S21123C18[];
Class_Descriptor cd_S21123C18 = {  "S21123C18", // class name
  0,0,//no base classes
  &(vtc_S21123C18[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI9S21123C18),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S21123C18),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  S21123C2  : virtual S21123C3 , virtual S21123C8 , virtual S21123C17 , S21123C18 , S21123C5 {
  int s21123c2f0;
  void *s21123c2f1;
  int s21123c2f2;
  ::S21123C9 s21123c2f3[2];
  ::S21123C7 s21123c2f4;
  long double s21123c2f5;
  int s21123c2f6[3];
  ::S3052C13 s21123c2f7;
  __tsi64 s21123c2f8;
  int s21123c2f9[2];
  int s21123c2f10;
  ::S3052C13 s21123c2f11;
  void *s21123c2f12;
  virtual void  v7(); // _ZN8S21123C22v7Ev
  ~S21123C2(); // tgen
  S21123C2(); // tgen
};
//SIG(-1 S21123C2) C1{ VBC2{ VBC3{ VBC4{ vd v2 Fs[6] FL[8] Fi} BC5{ VBC4 BC6{ VBC4 FL Fp FL:54} v3 v4 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC4 Fp[3] FL[5] Fi} Fp[6]} VBC7{ VBC5 VBC8{ BC9{ m Fp Fi FL Fp Fi} VBC5 Fp Fc[4] Fi:11 Fp[2] Fi[6] FC10{ VBC4 BC5 BC3 BC11{ vd m FC12{ VBC13{ vd v10 Fs[6] FL[8] Fi} BC14{ VBC13 FL Fp FL:54} v8 v9 Fc:0 Fp[8] Fc}} VBC6 Fp Fl FC3 FC11 FC6 Fi[2] FU15{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} BC16{ BC11 VBC4 VBC5 v5 FC5[2] FD FC11 Fp[3] FC3 Fi FU17{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi} v6 Fp FC18{} FC4 FL FU15 FL[6] FL FC3} VBC19{ BC3 VBC5 BC8 VBC10 VBC11 vd FC11[2] Fi FD FD Fc:0 Fp} BC20{ v7 Fi:0 Fi[6] Fi Fp} BC4 v1 Fi Fp Fi FC8[2] FC6 FD Fi[3] FU15 FL Fi[2] Fi FU15 Fp}


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

static void Test_S21123C2()
{
  extern Class_Descriptor cd_S21123C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2892,8558)];
    init_test(&cd_S21123C2, buf);
    S21123C2 *dp, &lv = *(dp=new (buf) S21123C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(46256,34228), "sizeof(S21123C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21123C2)");
    /*is_ambiguous_... S21123C2::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C4*), ABISELECT(21368,15832), "S21123C2");
    /*is_ambiguous_... S21123C2::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C6*)(S21123C4*), ABISELECT(21368,15832), "S21123C2");
    /*is_ambiguous_... S21123C2::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C7*)(S21123C6*)(S21123C4*), ABISELECT(21368,15832), "S21123C2");
    /*is_ambiguous_... S21123C2::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C6*), ABISELECT(21368,15832), "S21123C2");
    /*is_ambiguous_... S21123C2::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C7*)(S21123C6*), ABISELECT(21368,15832), "S21123C2");
    check_base_class_offset(lv, (S21123C5*)(S21123C14*)(S21123C8*), ABISELECT(21368,15832), "S21123C2");
    /*is_ambiguous_... S21123C17::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C4*)(S21123C17*), ABISELECT(21368,15832), "S21123C2");
    /*is_ambiguous_... S21123C17::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C6*)(S21123C4*)(S21123C17*), ABISELECT(21368,15832), "S21123C2");
    /*is_ambiguous_... S21123C17::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C7*)(S21123C6*)(S21123C4*)(S21123C17*), ABISELECT(21368,15832), "S21123C2");
    check_base_class_offset(lv, (S21123C5*)(S21123C11*), ABISELECT(21368,15832), "S21123C2");
    /*is_ambiguous_... S21123C11::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C6*)(S21123C11*), ABISELECT(21368,15832), "S21123C2");
    /*is_ambiguous_... S21123C11::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C7*)(S21123C6*)(S21123C11*), ABISELECT(21368,15832), "S21123C2");
    check_base_class_offset(lv, (S21123C5*)(S21123C4*)(S21123C11*), ABISELECT(21368,15832), "S21123C2");
    check_base_class_offset(lv, (S21123C5*)(S21123C6*)(S21123C4*)(S21123C11*), ABISELECT(21368,15832), "S21123C2");
    check_base_class_offset(lv, (S21123C5*)(S21123C7*)(S21123C6*)(S21123C4*)(S21123C11*), ABISELECT(21368,15832), "S21123C2");
    /*is_ambiguous_... S21123C2::S21123C7 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C7*), ABISELECT(21368,15832), "S21123C2");
    /*is_ambiguous_... S21123C2::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C7*)(S21123C6*)(S21123C4*), ABISELECT(21056,15604), "S21123C2");
    /*is_ambiguous_... S21123C2::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C6*)(S21123C4*), ABISELECT(21056,15604), "S21123C2");
    check_base_class_offset(lv, (S21123C4*)(S21123C3*), ABISELECT(21056,15604), "S21123C2");
    check_base_class_offset(lv, (S21123C3*), ABISELECT(21000,15576), "S21123C2");
    /*is_ambiguous_... S21123C2::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C7*)(S21123C6*), ABISELECT(23376,17336), "S21123C2");
    check_base_class_offset(lv, (S21123C6*)(S21123C8*), ABISELECT(23376,17336), "S21123C2");
    /*is_ambiguous_... S21123C2::S21123C9 */ AMB_check_base_class_offset(lv, (S21123C6*)(S21123C9*), ABISELECT(23376,17336), "S21123C2");
    check_base_class_offset(lv, (S21123C6*)(S21123C14*)(S21123C8*), ABISELECT(23376,17336), "S21123C2");
    /*is_ambiguous_... S21123C17::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C6*)(S21123C17*), ABISELECT(23376,17336), "S21123C2");
    check_base_class_offset(lv, (S21123C6*)(S21123C9*)(S21123C17*), ABISELECT(23376,17336), "S21123C2");
    /*is_ambiguous_... S21123C2::S21123C9 */ AMB_check_base_class_offset(lv, (S3052C10*)(S21123C9*), ABISELECT(23496,17400), "S21123C2");
    check_base_class_offset(lv, (S21123C9*)(S21123C8*), ABISELECT(23488,17396), "S21123C2");
    check_base_class_offset(lv, (S3052C12*)(S21123C14*)(S21123C8*), ABISELECT(21472,15916), "S21123C2");
    check_base_class_offset(lv, (S21123C14*)(S21123C8*), ABISELECT(21472,15916), "S21123C2");
    check_base_class_offset(lv, (S21123C8*), ABISELECT(21472,15916), "S21123C2");
    /*is_ambiguous_... S21123C17::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C7*)(S21123C6*)(S21123C4*)(S21123C17*), ABISELECT(33584,24884), "S21123C2");
    /*is_ambiguous_... S21123C17::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C6*)(S21123C4*)(S21123C17*), ABISELECT(33584,24884), "S21123C2");
    /*is_ambiguous_... S21123C17::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C4*)(S21123C17*), ABISELECT(33584,24884), "S21123C2");
    check_base_class_offset(lv, (S3052C10*)(S21123C9*)(S21123C17*), ABISELECT(33912,25116), "S21123C2");
    check_base_class_offset(lv, (S21123C9*)(S21123C17*), ABISELECT(33904,25112), "S21123C2");
    /*is_ambiguous_... S21123C11::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C7*)(S21123C6*)(S21123C11*), ABISELECT(44480,32928), "S21123C2");
    /*is_ambiguous_... S21123C11::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C6*)(S21123C11*), ABISELECT(44480,32928), "S21123C2");
    check_base_class_offset(lv, (S21123C7*)(S21123C6*)(S21123C4*)(S21123C11*), ABISELECT(44584,32988), "S21123C2");
    check_base_class_offset(lv, (S21123C6*)(S21123C4*)(S21123C11*), ABISELECT(44584,32988), "S21123C2");
    check_base_class_offset(lv, (S21123C4*)(S21123C11*), ABISELECT(44584,32988), "S21123C2");
    check_base_class_offset(lv, (S3052C12*)(S21123C11*), ABISELECT(44896,33216), "S21123C2");
    /*is_ambiguous_... S21123C11::S21123C7 */ AMB_check_base_class_offset(lv, (S21123C7*)(S21123C11*), ABISELECT(46016,34056), "S21123C2");
    check_base_class_offset(lv, (S21123C11*)(S21123C17*), ABISELECT(44480,32928), "S21123C2");
    /*is_ambiguous_... S21123C17::S3052C12 */ AMB_check_base_class_offset(lv, (S3052C12*)(S21123C17*), ABISELECT(46048,34080), "S21123C2");
    check_base_class_offset(lv, (S21123C17*), ABISELECT(33584,24884), "S21123C2");
    check_base_class_offset(lv, (S21123C18*), 0, "S21123C2");
    /*is_ambiguous_... S21123C2::S21123C5 */ AMB_check_base_class_offset(lv, (S21123C5*), ABISELECT(48,36), "S21123C2");
    check_field_offset(lv, s21123c2f0, ABISELECT(140,120), "S21123C2.s21123c2f0");
    check_field_offset(lv, s21123c2f1, ABISELECT(144,124), "S21123C2.s21123c2f1");
    check_field_offset(lv, s21123c2f2, ABISELECT(152,128), "S21123C2.s21123c2f2");
    check_field_offset(lv, s21123c2f3, ABISELECT(160,132), "S21123C2.s21123c2f3");
    check_field_offset(lv, s21123c2f4, ABISELECT(20768,15396), "S21123C2.s21123c2f4");
    check_field_offset(lv, s21123c2f5, ABISELECT(20896,15504), "S21123C2.s21123c2f5");
    check_field_offset(lv, s21123c2f6, ABISELECT(20912,15516), "S21123C2.s21123c2f6");
    check_field_offset(lv, s21123c2f7, ABISELECT(20928,15528), "S21123C2.s21123c2f7");
    check_field_offset(lv, s21123c2f8, ABISELECT(20944,15540), "S21123C2.s21123c2f8");
    check_field_offset(lv, s21123c2f9, ABISELECT(20952,15548), "S21123C2.s21123c2f9");
    check_field_offset(lv, s21123c2f10, ABISELECT(20960,15556), "S21123C2.s21123c2f10");
    check_field_offset(lv, s21123c2f11, ABISELECT(20976,15560), "S21123C2.s21123c2f11");
    check_field_offset(lv, s21123c2f12, ABISELECT(20992,15572), "S21123C2.s21123c2f12");
    test_class_info(&lv, &cd_S21123C2);
    dp->~S21123C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21123C2(Test_S21123C2, "S21123C2", ABISELECT(46256,34228));

#else // __cplusplus

extern void _ZN8S21123C2C1Ev();
extern void _ZN8S21123C2D1Ev();
Name_Map name_map_S21123C2[] = {
  NSPAIR(_ZN8S21123C2C1Ev),
  NSPAIR(_ZN8S21123C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21123C5;
extern VTBL_ENTRY _ZTI8S21123C5[];
extern  VTBL_ENTRY _ZTV8S21123C5[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
extern Class_Descriptor cd_S21123C6;
extern VTBL_ENTRY _ZTI8S21123C6[];
extern  VTBL_ENTRY _ZTV8S21123C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C6[];
extern Class_Descriptor cd_S21123C4;
extern VTBL_ENTRY _ZTI8S21123C4[];
extern  VTBL_ENTRY _ZTV8S21123C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C4[];
extern Class_Descriptor cd_S21123C3;
extern VTBL_ENTRY _ZTI8S21123C3[];
extern  VTBL_ENTRY _ZTV8S21123C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C3[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
extern Class_Descriptor cd_S21123C6;
extern VTBL_ENTRY _ZTI8S21123C6[];
extern  VTBL_ENTRY _ZTV8S21123C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C6[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S21123C9;
extern VTBL_ENTRY _ZTI8S21123C9[];
extern  VTBL_ENTRY _ZTV8S21123C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C9[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S21123C14;
extern VTBL_ENTRY _ZTI9S21123C14[];
extern  VTBL_ENTRY _ZTV9S21123C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21123C14[];
extern Class_Descriptor cd_S21123C8;
extern VTBL_ENTRY _ZTI8S21123C8[];
extern  VTBL_ENTRY _ZTV8S21123C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C8[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
extern Class_Descriptor cd_S21123C6;
extern VTBL_ENTRY _ZTI8S21123C6[];
extern  VTBL_ENTRY _ZTV8S21123C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C6[];
extern Class_Descriptor cd_S21123C4;
extern VTBL_ENTRY _ZTI8S21123C4[];
extern  VTBL_ENTRY _ZTV8S21123C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C4[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S21123C9;
extern VTBL_ENTRY _ZTI8S21123C9[];
extern  VTBL_ENTRY _ZTV8S21123C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C9[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
extern Class_Descriptor cd_S21123C6;
extern VTBL_ENTRY _ZTI8S21123C6[];
extern  VTBL_ENTRY _ZTV8S21123C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C6[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
extern Class_Descriptor cd_S21123C6;
extern VTBL_ENTRY _ZTI8S21123C6[];
extern  VTBL_ENTRY _ZTV8S21123C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C6[];
extern Class_Descriptor cd_S21123C4;
extern VTBL_ENTRY _ZTI8S21123C4[];
extern  VTBL_ENTRY _ZTV8S21123C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C4[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
extern Class_Descriptor cd_S21123C11;
extern VTBL_ENTRY _ZTI9S21123C11[];
extern  VTBL_ENTRY _ZTV9S21123C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21123C11[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S21123C17;
extern VTBL_ENTRY _ZTI9S21123C17[];
extern  VTBL_ENTRY _ZTV9S21123C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21123C17[];
extern Class_Descriptor cd_S21123C18;
extern VTBL_ENTRY _ZTI9S21123C18[];
extern  VTBL_ENTRY _ZTV9S21123C18[];
extern Class_Descriptor cd_S21123C5;
extern VTBL_ENTRY _ZTI8S21123C5[];
extern  VTBL_ENTRY _ZTV8S21123C5[];
static Base_Class bases_S21123C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21123C5,    ABISELECT(21368,15832), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //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_S21123C7,    ABISELECT(21056,15604), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21123C6,    ABISELECT(21056,15604), //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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S21123C4,    ABISELECT(21056,15604), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S21123C3,    ABISELECT(21000,15576), //bcp->offset
    21, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21123C7,    ABISELECT(23376,17336), //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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21123C6,    ABISELECT(23376,17336), //bcp->offset
    57, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3052C10,    ABISELECT(23496,17400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21123C9,    ABISELECT(23488,17396), //bcp->offset
    67, //bcp->virtual_function_table_offset
    5, //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
    11, //immediately_derived
  0, 1},
  {&cd_S3052C12,    ABISELECT(21472,15916), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S21123C14,    ABISELECT(21472,15916), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S21123C8,    ABISELECT(21472,15916), //bcp->offset
    45, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21123C7,    ABISELECT(33584,24884), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S21123C6,    ABISELECT(33584,24884), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S21123C4,    ABISELECT(33584,24884), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3052C10,    ABISELECT(33912,25116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21123C9,    ABISELECT(33904,25112), //bcp->offset
    88, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S21123C7,    ABISELECT(44480,32928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S21123C6,    ABISELECT(44480,32928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S21123C7,    ABISELECT(44584,32988), //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
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S21123C6,    ABISELECT(44584,32988), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S21123C4,    ABISELECT(44584,32988), //bcp->offset
    105, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S3052C12,    ABISELECT(44896,33216), //bcp->offset
    112, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S21123C7,    ABISELECT(46016,34056), //bcp->offset
    116, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S21123C11,    ABISELECT(44480,32928), //bcp->offset
    94, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3052C12,    ABISELECT(46048,34080), //bcp->offset
    122, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S21123C17,    ABISELECT(33584,24884), //bcp->offset
    74, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21123C18,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S21123C5,    ABISELECT(48,36), //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
    27, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S21123C2[];
extern void _ZN9S21123C182v6Ev();
extern void _ZN8S21123C22v7Ev();
extern void _ZN8S21123C2D1Ev();
extern void _ZN8S21123C2D0Ev();
extern void ABISELECT(_ZThn48_N8S21123C2D1Ev,_ZThn36_N8S21123C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S21123C2D0Ev,_ZThn36_N8S21123C2D0Ev)();
extern void _ZN8S21123C52v1Ev();
extern void ABISELECT(_ZTv0_n40_N8S21123C2D1Ev,_ZTv0_n20_N8S21123C2D1Ev)();
extern void ABISELECT(_ZThn21000_N8S21123C2D1Ev,_ZThn15576_N8S21123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21123C2D0Ev,_ZTv0_n20_N8S21123C2D0Ev)();
extern void ABISELECT(_ZThn21000_N8S21123C2D0Ev,_ZThn15576_N8S21123C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21123C2D1Ev,_ZTv0_n16_N8S21123C2D1Ev)();
extern void ABISELECT(_ZThn21056_N8S21123C2D1Ev,_ZThn15604_N8S21123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21123C2D0Ev,_ZTv0_n16_N8S21123C2D0Ev)();
extern void ABISELECT(_ZThn21056_N8S21123C2D0Ev,_ZThn15604_N8S21123C2D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21123C2D1Ev,_ZTv0_n12_N8S21123C2D1Ev)();
extern void ABISELECT(_ZThn21368_N8S21123C2D1Ev,_ZThn15832_N8S21123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C2D0Ev,_ZTv0_n12_N8S21123C2D0Ev)();
extern void ABISELECT(_ZThn21368_N8S21123C2D0Ev,_ZThn15832_N8S21123C2D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
extern void ABISELECT(_ZTv0_n48_N8S21123C2D1Ev,_ZTv0_n24_N8S21123C2D1Ev)();
extern void ABISELECT(_ZThn21472_N8S21123C2D1Ev,_ZThn15916_N8S21123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21123C2D0Ev,_ZTv0_n24_N8S21123C2D0Ev)();
extern void ABISELECT(_ZThn21472_N8S21123C2D0Ev,_ZThn15916_N8S21123C2D0Ev)() __attribute__((weak));
extern void _ZN9S21123C142v4Ev();
extern void _ZN8S21123C82v5Ev();
extern void ABISELECT(_ZTv0_n32_N8S21123C2D1Ev,_ZTv0_n16_N8S21123C2D1Ev)();
extern void ABISELECT(_ZThn23376_N8S21123C2D1Ev,_ZThn17336_N8S21123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21123C2D0Ev,_ZTv0_n16_N8S21123C2D0Ev)();
extern void ABISELECT(_ZThn23376_N8S21123C2D0Ev,_ZThn17336_N8S21123C2D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S21123C2D1Ev,_ZTv0_n20_N8S21123C2D1Ev)();
extern void ABISELECT(_ZThn23488_N8S21123C2D1Ev,_ZThn17396_N8S21123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21123C2D0Ev,_ZTv0_n20_N8S21123C2D0Ev)();
extern void ABISELECT(_ZThn23488_N8S21123C2D0Ev,_ZThn17396_N8S21123C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S21123C2D1Ev,_ZTv0_n32_N8S21123C2D1Ev)();
extern void ABISELECT(_ZThn33584_N8S21123C2D1Ev,_ZThn24884_N8S21123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S21123C2D0Ev,_ZTv0_n32_N8S21123C2D0Ev)();
extern void ABISELECT(_ZThn33584_N8S21123C2D0Ev,_ZThn24884_N8S21123C2D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
extern void ABISELECT(_ZTvn320_n64_N8S21123C2D1Ev,_ZTvn228_n32_N8S21123C2D1Ev)();
extern void ABISELECT(_ZTvn320_n64_N8S21123C2D0Ev,_ZTvn228_n32_N8S21123C2D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S21123C2D1Ev,_ZTv0_n20_N8S21123C2D1Ev)();
extern void ABISELECT(_ZThn44480_N8S21123C2D1Ev,_ZThn32928_N8S21123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21123C2D0Ev,_ZTv0_n20_N8S21123C2D0Ev)();
extern void ABISELECT(_ZThn44480_N8S21123C2D0Ev,_ZThn32928_N8S21123C2D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
extern void ABISELECT(_ZTvn104_n40_N8S21123C2D1Ev,_ZTvn60_n20_N8S21123C2D1Ev)();
extern void ABISELECT(_ZTvn104_n40_N8S21123C2D0Ev,_ZTvn60_n20_N8S21123C2D0Ev)();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
extern void ABISELECT(_ZTvn416_n40_N8S21123C2D1Ev,_ZTvn288_n20_N8S21123C2D1Ev)();
extern void ABISELECT(_ZTvn416_n40_N8S21123C2D0Ev,_ZTvn288_n20_N8S21123C2D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S21123C2D1Ev,_ZTv0_n16_N8S21123C2D1Ev)();
extern void ABISELECT(_ZThn46016_N8S21123C2D1Ev,_ZThn34056_N8S21123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21123C2D0Ev,_ZTv0_n16_N8S21123C2D0Ev)();
extern void ABISELECT(_ZThn46016_N8S21123C2D0Ev,_ZThn34056_N8S21123C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C2D1Ev,_ZTv0_n12_N8S21123C2D1Ev)();
extern void ABISELECT(_ZThn46048_N8S21123C2D1Ev,_ZThn34080_N8S21123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C2D0Ev,_ZTv0_n12_N8S21123C2D0Ev)();
extern void ABISELECT(_ZThn46048_N8S21123C2D0Ev,_ZThn34080_N8S21123C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21123C2[] = {
  ABISELECT(46048,34080),
  ABISELECT(46016,34056),
  ABISELECT(44480,32928),
  ABISELECT(33584,24884),
  ABISELECT(23488,17396),
  ABISELECT(23376,17336),
  ABISELECT(21472,15916),
  ABISELECT(21368,15832),
  ABISELECT(21056,15604),
  ABISELECT(21000,15576),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&_ZN9S21123C182v6Ev,
  (VTBL_ENTRY)&_ZN8S21123C22v7Ev,
  (VTBL_ENTRY)&_ZN8S21123C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C2D0Ev,
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S21123C2D1Ev,_ZThn36_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N8S21123C2D0Ev,_ZThn36_N8S21123C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
  ABISELECT(-21000,-15576),
  ABISELECT(368,256),
  ABISELECT(56,28),
  ABISELECT(-21000,-15576),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21123C2D1Ev,_ZTv0_n20_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21123C2D0Ev,_ZTv0_n20_N8S21123C2D0Ev),
  0,
  0,
  ABISELECT(-21056,-15604),
  ABISELECT(312,228),
  ABISELECT(-21056,-15604),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C2D1Ev,_ZTv0_n16_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C2D0Ev,_ZTv0_n16_N8S21123C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
  0,
  ABISELECT(-21368,-15832),
  ABISELECT(-21368,-15832),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C2D1Ev,_ZTv0_n12_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C2D0Ev,_ZTv0_n12_N8S21123C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
  0,
  0,
  ABISELECT(-21472,-15916),
  ABISELECT(2016,1480),
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  ABISELECT(-21472,-15916),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21123C2D1Ev,_ZTv0_n24_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21123C2D0Ev,_ZTv0_n24_N8S21123C2D0Ev),
  (VTBL_ENTRY)&_ZN9S21123C142v4Ev,
  (VTBL_ENTRY)&_ZN8S21123C82v5Ev,
  0,
  0,
  ABISELECT(-23376,-17336),
  ABISELECT(-2008,-1504),
  ABISELECT(-23376,-17336),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C2D1Ev,_ZTv0_n16_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C2D0Ev,_ZTv0_n16_N8S21123C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
  ABISELECT(-23488,-17396),
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  ABISELECT(-23488,-17396),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21123C2D1Ev,_ZTv0_n20_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21123C2D0Ev,_ZTv0_n20_N8S21123C2D0Ev),
  0,
  0,
  ABISELECT(-33584,-24884),
  ABISELECT(12464,9196),
  ABISELECT(12432,9172),
  ABISELECT(10896,8044),
  ABISELECT(-10208,-7548),
  ABISELECT(-12216,-9052),
  ABISELECT(-33584,-24884),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S21123C2D1Ev,_ZTv0_n32_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S21123C2D0Ev,_ZTv0_n32_N8S21123C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
  ABISELECT(-12536,-9280),
  ABISELECT(-10528,-7776),
  ABISELECT(-33904,-25112),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn320_n64_N8S21123C2D1Ev,_ZTvn228_n32_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn320_n64_N8S21123C2D0Ev,_ZTvn228_n32_N8S21123C2D0Ev),
  0,
  0,
  ABISELECT(-44480,-32928),
  ABISELECT(1536,1128),
  ABISELECT(-23112,-17096),
  ABISELECT(-44480,-32928),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21123C2D1Ev,_ZTv0_n20_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21123C2D0Ev,_ZTv0_n20_N8S21123C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
  ABISELECT(-23216,-17156),
  ABISELECT(-44584,-32988),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N8S21123C2D1Ev,_ZTvn60_n20_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N8S21123C2D0Ev,_ZTvn60_n20_N8S21123C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
  ABISELECT(-44896,-33216),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N8S21123C2D1Ev,_ZTvn288_n20_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N8S21123C2D0Ev,_ZTvn288_n20_N8S21123C2D0Ev),
  ABISELECT(-46016,-34056),
  ABISELECT(-24648,-18224),
  ABISELECT(-46016,-34056),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C2D1Ev,_ZTv0_n16_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C2D0Ev,_ZTv0_n16_N8S21123C2D0Ev),
  ABISELECT(-46048,-34080),
  ABISELECT(-46048,-34080),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C2D1Ev,_ZTv0_n12_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C2D0Ev,_ZTv0_n12_N8S21123C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S21123C2[];
extern void _ZN8S21123C3D1Ev();
extern void _ZN8S21123C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C3__8S21123C2[] = {
  ABISELECT(368,256),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C3[0]),
  (VTBL_ENTRY)&_ZN8S21123C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C3D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S21123C3D1Ev,_ZTv0_n16_N8S21123C3D1Ev)();
extern void ABISELECT(_ZThn56_N8S21123C3D1Ev,_ZThn28_N8S21123C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21123C3D0Ev,_ZTv0_n16_N8S21123C3D0Ev)();
extern void ABISELECT(_ZThn56_N8S21123C3D0Ev,_ZThn28_N8S21123C3D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C4__8S21123C3__8S21123C2[] = {
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(312,228),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S21123C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C3D1Ev,_ZTv0_n16_N8S21123C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C3D0Ev,_ZTv0_n16_N8S21123C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C3D1Ev,_ZTv0_n12_N8S21123C3D1Ev)();
extern void ABISELECT(_ZThn368_N8S21123C3D1Ev,_ZThn256_N8S21123C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C3D0Ev,_ZTv0_n12_N8S21123C3D0Ev)();
extern void ABISELECT(_ZThn368_N8S21123C3D0Ev,_ZThn256_N8S21123C3D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C3__8S21123C2[] = {
  0,
  ABISELECT(-368,-256),
  ABISELECT(-368,-256),
  (VTBL_ENTRY)&(_ZTI8S21123C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C3D1Ev,_ZTv0_n12_N8S21123C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C3D0Ev,_ZTv0_n12_N8S21123C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void _ZN8S21123C4D1Ev();
extern void _ZN8S21123C4D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C4__8S21123C2[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C4[0]),
  (VTBL_ENTRY)&_ZN8S21123C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C4D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C6D1Ev();
extern void _ZN8S21123C6D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C68S21123C4__8S21123C2[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&_ZN8S21123C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C78S21123C68S21123C4__8S21123C2[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZThn312_N8S21123C7D1Ev,_ZThn228_N8S21123C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void ABISELECT(_ZThn312_N8S21123C7D0Ev,_ZThn228_N8S21123C7D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C78S21123C68S21123C4__8S21123C2[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev)();
extern void ABISELECT(_ZThn312_N8S21123C6D1Ev,_ZThn228_N8S21123C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev)();
extern void ABISELECT(_ZThn312_N8S21123C6D0Ev,_ZThn228_N8S21123C6D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C68S21123C4__8S21123C2[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev)();
extern void ABISELECT(_ZThn312_N8S21123C4D1Ev,_ZThn228_N8S21123C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev)();
extern void ABISELECT(_ZThn312_N8S21123C4D0Ev,_ZThn228_N8S21123C4D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C4__8S21123C2[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S21123C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void _ZN8S21123C8D1Ev();
extern void _ZN8S21123C8D0Ev();
extern void _ZN9S21123C142v4Ev();
extern void _ZN8S21123C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C8__8S21123C2[] = {
  ABISELECT(2016,1480),
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C8[0]),
  (VTBL_ENTRY)&_ZN8S21123C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C8D0Ev,
  (VTBL_ENTRY)&_ZN9S21123C142v4Ev,
  (VTBL_ENTRY)&_ZN8S21123C82v5Ev,
};
extern void _ZN9S21123C14D1Ev();
extern void _ZN9S21123C14D0Ev();
extern void _ZN9S21123C142v4Ev();
static  VTBL_ENTRY _tg__ZTV9S21123C148S21123C8__8S21123C2[] = {
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  0,
  (VTBL_ENTRY)&(_ZTI9S21123C14[0]),
  (VTBL_ENTRY)&_ZN9S21123C14D1Ev,
  (VTBL_ENTRY)&_ZN9S21123C14D0Ev,
  (VTBL_ENTRY)&_ZN9S21123C142v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21123C14D1Ev,_ZTv0_n12_N9S21123C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21123C14D0Ev,_ZTv0_n12_N9S21123C14D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__9S21123C148S21123C8__8S21123C2[] = {
  0,
  ABISELECT(104,84),
  ABISELECT(104,84),
  (VTBL_ENTRY)&(_ZTI9S21123C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C14D1Ev,_ZTv0_n12_N9S21123C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C14D0Ev,_ZTv0_n12_N9S21123C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S21123C14D1Ev,_ZTv0_n16_N9S21123C14D1Ev)();
extern void ABISELECT(_ZThn1904_N9S21123C14D1Ev,_ZThn1420_N9S21123C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21123C14D0Ev,_ZTv0_n16_N9S21123C14D0Ev)();
extern void ABISELECT(_ZThn1904_N9S21123C14D0Ev,_ZThn1420_N9S21123C14D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C6__9S21123C148S21123C8__8S21123C2[] = {
  0,
  0,
  ABISELECT(-1904,-1420),
  ABISELECT(-2008,-1504),
  ABISELECT(-1904,-1420),
  (VTBL_ENTRY)&(_ZTI9S21123C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C14D1Ev,_ZTv0_n16_N9S21123C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C14D0Ev,_ZTv0_n16_N9S21123C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S21123C8D1Ev,_ZTv0_n16_N8S21123C8D1Ev)();
extern void ABISELECT(_ZThn1904_N8S21123C8D1Ev,_ZThn1420_N8S21123C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21123C8D0Ev,_ZTv0_n16_N8S21123C8D0Ev)();
extern void ABISELECT(_ZThn1904_N8S21123C8D0Ev,_ZThn1420_N8S21123C8D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C6__8S21123C8__8S21123C2[] = {
  0,
  0,
  ABISELECT(-1904,-1420),
  ABISELECT(-2008,-1504),
  ABISELECT(-1904,-1420),
  (VTBL_ENTRY)&(_ZTI8S21123C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C8D1Ev,_ZTv0_n16_N8S21123C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C8D0Ev,_ZTv0_n16_N8S21123C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C8D1Ev,_ZTv0_n12_N8S21123C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C8D0Ev,_ZTv0_n12_N8S21123C8D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C8__8S21123C2[] = {
  0,
  ABISELECT(104,84),
  ABISELECT(104,84),
  (VTBL_ENTRY)&(_ZTI8S21123C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C8D1Ev,_ZTv0_n12_N8S21123C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C8D0Ev,_ZTv0_n12_N8S21123C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S21123C8D1Ev,_ZTv0_n20_N8S21123C8D1Ev)();
extern void ABISELECT(_ZThn2016_N8S21123C8D1Ev,_ZThn1480_N8S21123C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21123C8D0Ev,_ZTv0_n20_N8S21123C8D0Ev)();
extern void ABISELECT(_ZThn2016_N8S21123C8D0Ev,_ZThn1480_N8S21123C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21123C9__8S21123C8__8S21123C2[] = {
  ABISELECT(-2016,-1480),
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  ABISELECT(-2016,-1480),
  (VTBL_ENTRY)&(_ZTI8S21123C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21123C8D1Ev,_ZTv0_n20_N8S21123C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21123C8D0Ev,_ZTv0_n20_N8S21123C8D0Ev),
};
extern void _ZN8S21123C6D1Ev();
extern void _ZN8S21123C6D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C6__A1__8S21123C2[] = {
  ABISELECT(-2008,-1504),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&_ZN8S21123C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C78S21123C6__A1__8S21123C2[] = {
  ABISELECT(-2008,-1504),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C78S21123C6__A1__8S21123C2[] = {
  0,
  ABISELECT(2008,1504),
  ABISELECT(2008,1504),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C6__A1__8S21123C2[] = {
  0,
  ABISELECT(2008,1504),
  ABISELECT(2008,1504),
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void _ZN8S21123C9D1Ev();
extern void _ZN8S21123C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C9__8S21123C2[] = {
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C9[0]),
  (VTBL_ENTRY)&_ZN8S21123C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C9D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S21123C9D1Ev,_ZTv0_n16_N8S21123C9D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S21123C9D0Ev,_ZTv0_n16_N8S21123C9D0Ev)();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C6__8S21123C9__8S21123C2[] = {
  0,
  0,
  ABISELECT(112,60),
  ABISELECT(-2008,-1504),
  ABISELECT(112,60),
  (VTBL_ENTRY)&(_ZTI8S21123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C9D1Ev,_ZTv0_n16_N8S21123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C9D0Ev,_ZTv0_n16_N8S21123C9D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C9D1Ev,_ZTv0_n12_N8S21123C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C9D0Ev,_ZTv0_n12_N8S21123C9D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C9__8S21123C2[] = {
  0,
  ABISELECT(2120,1564),
  ABISELECT(2120,1564),
  (VTBL_ENTRY)&(_ZTI8S21123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C9D1Ev,_ZTv0_n12_N8S21123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C9D0Ev,_ZTv0_n12_N8S21123C9D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void _ZN9S21123C17D1Ev();
extern void _ZN9S21123C17D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV9S21123C17__8S21123C2[] = {
  ABISELECT(12464,9196),
  ABISELECT(12432,9172),
  ABISELECT(10896,8044),
  ABISELECT(-10208,-7548),
  ABISELECT(-12216,-9052),
  0,
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&_ZN9S21123C17D1Ev,
  (VTBL_ENTRY)&_ZN9S21123C17D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C4D1Ev();
extern void _ZN8S21123C4D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C49S21123C17__A1__8S21123C2[] = {
  ABISELECT(-12216,-9052),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C4[0]),
  (VTBL_ENTRY)&_ZN8S21123C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C4D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C6D1Ev();
extern void _ZN8S21123C6D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C68S21123C49S21123C17__A2__8S21123C2[] = {
  ABISELECT(-12216,-9052),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&_ZN8S21123C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C78S21123C68S21123C49S21123C17__A2__8S21123C2[] = {
  ABISELECT(-12216,-9052),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C78S21123C68S21123C49S21123C17__A2__8S21123C2[] = {
  0,
  ABISELECT(12216,9052),
  ABISELECT(12216,9052),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C68S21123C49S21123C17__A2__8S21123C2[] = {
  0,
  ABISELECT(12216,9052),
  ABISELECT(12216,9052),
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C49S21123C17__A1__8S21123C2[] = {
  0,
  ABISELECT(12216,9052),
  ABISELECT(12216,9052),
  (VTBL_ENTRY)&(_ZTI8S21123C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void _ZN8S21123C9D1Ev();
extern void _ZN8S21123C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C99S21123C17__A1__8S21123C2[] = {
  ABISELECT(-12536,-9280),
  ABISELECT(-10528,-7776),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C9[0]),
  (VTBL_ENTRY)&_ZN8S21123C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C9D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S21123C9D1Ev,_ZTv0_n16_N8S21123C9D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S21123C9D0Ev,_ZTv0_n16_N8S21123C9D0Ev)();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C6__8S21123C99S21123C17__A1__8S21123C2[] = {
  0,
  0,
  ABISELECT(10528,7776),
  ABISELECT(-2008,-1504),
  ABISELECT(10528,7776),
  (VTBL_ENTRY)&(_ZTI8S21123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C9D1Ev,_ZTv0_n16_N8S21123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C9D0Ev,_ZTv0_n16_N8S21123C9D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C9D1Ev,_ZTv0_n12_N8S21123C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C9D0Ev,_ZTv0_n12_N8S21123C9D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C99S21123C17__A1__8S21123C2[] = {
  0,
  ABISELECT(12536,9280),
  ABISELECT(12536,9280),
  (VTBL_ENTRY)&(_ZTI8S21123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C9D1Ev,_ZTv0_n12_N8S21123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C9D0Ev,_ZTv0_n12_N8S21123C9D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21123C17D1Ev,_ZTv0_n12_N9S21123C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21123C17D0Ev,_ZTv0_n12_N9S21123C17D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__9S21123C17__8S21123C2[] = {
  0,
  ABISELECT(12216,9052),
  ABISELECT(12216,9052),
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C17D1Ev,_ZTv0_n12_N9S21123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C17D0Ev,_ZTv0_n12_N9S21123C17D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S21123C17D1Ev,_ZTv0_n16_N9S21123C17D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S21123C17D0Ev,_ZTv0_n16_N9S21123C17D0Ev)();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C6__A1__9S21123C17__8S21123C2[] = {
  0,
  0,
  ABISELECT(10208,7548),
  ABISELECT(-2008,-1504),
  ABISELECT(10208,7548),
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C17D1Ev,_ZTv0_n16_N9S21123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C17D0Ev,_ZTv0_n16_N9S21123C17D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZThn320_N9S21123C17D1Ev,_ZThn228_N9S21123C17D1Ev)();
extern void ABISELECT(_ZThn320_N9S21123C17D0Ev,_ZThn228_N9S21123C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21123C9__9S21123C17__8S21123C2[] = {
  ABISELECT(-12536,-9280),
  ABISELECT(-10528,-7776),
  ABISELECT(-320,-228),
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N9S21123C17D1Ev,_ZThn228_N9S21123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N9S21123C17D0Ev,_ZThn228_N9S21123C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21123C17D1Ev,_ZTv0_n20_N9S21123C17D1Ev)();
extern void ABISELECT(_ZThn10896_N9S21123C17D1Ev,_ZThn8044_N9S21123C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21123C17D0Ev,_ZTv0_n20_N9S21123C17D0Ev)();
extern void ABISELECT(_ZThn10896_N9S21123C17D0Ev,_ZThn8044_N9S21123C17D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV9S21123C11__9S21123C17__8S21123C2[] = {
  0,
  0,
  ABISELECT(-10896,-8044),
  ABISELECT(1536,1128),
  ABISELECT(-23112,-17096),
  ABISELECT(-10896,-8044),
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21123C17D1Ev,_ZTv0_n20_N9S21123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21123C17D0Ev,_ZTv0_n20_N9S21123C17D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZTvn104_n40_N9S21123C17D1Ev,_ZTvn60_n20_N9S21123C17D1Ev)();
extern void ABISELECT(_ZTvn104_n40_N9S21123C17D0Ev,_ZTvn60_n20_N9S21123C17D0Ev)();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C49S21123C11__A1__9S21123C17__8S21123C2[] = {
  ABISELECT(-23216,-17156),
  ABISELECT(-11000,-8104),
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N9S21123C17D1Ev,_ZTvn60_n20_N9S21123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N9S21123C17D0Ev,_ZTvn60_n20_N9S21123C17D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZTvn416_n40_N9S21123C17D1Ev,_ZTvn288_n20_N9S21123C17D1Ev)();
extern void ABISELECT(_ZTvn416_n40_N9S21123C17D0Ev,_ZTvn288_n20_N9S21123C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3052C129S21123C11__9S21123C17__8S21123C2[] = {
  ABISELECT(-11312,-8332),
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N9S21123C17D1Ev,_ZTvn288_n20_N9S21123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N9S21123C17D0Ev,_ZTvn288_n20_N9S21123C17D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21123C17D1Ev,_ZTv0_n16_N9S21123C17D1Ev)();
extern void ABISELECT(_ZThn12432_N9S21123C17D1Ev,_ZThn9172_N9S21123C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21123C17D0Ev,_ZTv0_n16_N9S21123C17D0Ev)();
extern void ABISELECT(_ZThn12432_N9S21123C17D0Ev,_ZThn9172_N9S21123C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21123C7__A4__9S21123C17__8S21123C2[] = {
  ABISELECT(-12432,-9172),
  ABISELECT(-24648,-18224),
  ABISELECT(-12432,-9172),
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C17D1Ev,_ZTv0_n16_N9S21123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C17D0Ev,_ZTv0_n16_N9S21123C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21123C17D1Ev,_ZTv0_n12_N9S21123C17D1Ev)();
extern void ABISELECT(_ZThn12464_N9S21123C17D1Ev,_ZThn9196_N9S21123C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21123C17D0Ev,_ZTv0_n12_N9S21123C17D0Ev)();
extern void ABISELECT(_ZThn12464_N9S21123C17D0Ev,_ZThn9196_N9S21123C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3052C12__A1__9S21123C17__8S21123C2[] = {
  ABISELECT(-12464,-9196),
  ABISELECT(-12464,-9196),
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C17D1Ev,_ZTv0_n12_N9S21123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C17D0Ev,_ZTv0_n12_N9S21123C17D0Ev),
};
extern void _ZN9S21123C11D1Ev();
extern void _ZN9S21123C11D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV9S21123C11__8S21123C2[] = {
  ABISELECT(1536,1128),
  ABISELECT(-23112,-17096),
  0,
  (VTBL_ENTRY)&(_ZTI9S21123C11[0]),
  (VTBL_ENTRY)&_ZN9S21123C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21123C11D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C6D1Ev();
extern void _ZN8S21123C6D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C69S21123C11__A3__8S21123C2[] = {
  ABISELECT(-23112,-17096),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&_ZN8S21123C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C78S21123C69S21123C11__A3__8S21123C2[] = {
  ABISELECT(-23112,-17096),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C78S21123C69S21123C11__A3__8S21123C2[] = {
  0,
  ABISELECT(23112,17096),
  ABISELECT(23112,17096),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C69S21123C11__A3__8S21123C2[] = {
  0,
  ABISELECT(23112,17096),
  ABISELECT(23112,17096),
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void _ZN8S21123C4D1Ev();
extern void _ZN8S21123C4D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C49S21123C11__A2__8S21123C2[] = {
  ABISELECT(-23216,-17156),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C4[0]),
  (VTBL_ENTRY)&_ZN8S21123C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C4D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C6D1Ev();
extern void _ZN8S21123C6D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C68S21123C49S21123C11__A4__8S21123C2[] = {
  ABISELECT(-23216,-17156),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&_ZN8S21123C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C78S21123C68S21123C49S21123C11__A4__8S21123C2[] = {
  ABISELECT(-23216,-17156),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C78S21123C68S21123C49S21123C11__A4__8S21123C2[] = {
  0,
  ABISELECT(23216,17156),
  ABISELECT(23216,17156),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C68S21123C49S21123C11__A4__8S21123C2[] = {
  0,
  ABISELECT(23216,17156),
  ABISELECT(23216,17156),
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C49S21123C11__A2__8S21123C2[] = {
  0,
  ABISELECT(23216,17156),
  ABISELECT(23216,17156),
  (VTBL_ENTRY)&(_ZTI8S21123C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21123C11D1Ev,_ZTv0_n12_N9S21123C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21123C11D0Ev,_ZTv0_n12_N9S21123C11D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__9S21123C11__8S21123C2[] = {
  0,
  ABISELECT(23112,17096),
  ABISELECT(23112,17096),
  (VTBL_ENTRY)&(_ZTI9S21123C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C11D1Ev,_ZTv0_n12_N9S21123C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C11D0Ev,_ZTv0_n12_N9S21123C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZThn104_N9S21123C11D1Ev,_ZThn60_N9S21123C11D1Ev)();
extern void ABISELECT(_ZThn104_N9S21123C11D0Ev,_ZThn60_N9S21123C11D0Ev)();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C4__9S21123C11__8S21123C2[] = {
  ABISELECT(-23216,-17156),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI9S21123C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S21123C11D1Ev,_ZThn60_N9S21123C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S21123C11D0Ev,_ZThn60_N9S21123C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S21123C11D1Ev,_ZTv0_n16_N9S21123C11D1Ev)();
extern void ABISELECT(_ZThn1536_N9S21123C11D1Ev,_ZThn1128_N9S21123C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21123C11D0Ev,_ZTv0_n16_N9S21123C11D0Ev)();
extern void ABISELECT(_ZThn1536_N9S21123C11D0Ev,_ZThn1128_N9S21123C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21123C7__A2__9S21123C11__8S21123C2[] = {
  ABISELECT(-1536,-1128),
  ABISELECT(-24648,-18224),
  ABISELECT(-1536,-1128),
  (VTBL_ENTRY)&(_ZTI9S21123C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C11D1Ev,_ZTv0_n16_N9S21123C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C11D0Ev,_ZTv0_n16_N9S21123C11D0Ev),
};
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C7__A5__8S21123C2[] = {
  ABISELECT(-24648,-18224),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C7__A5__8S21123C2[] = {
  0,
  ABISELECT(24648,18224),
  ABISELECT(24648,18224),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
static  VTT_ENTRY vtt_S21123C2[] = {
  {&(_ZTV8S21123C2[12]),  12,127},
  {&(_ZTV8S21123C2[26]),  26,127},
  {&(_ZTV8S21123C2[34]),  34,127},
  {&(_ZTV8S21123C2[42]),  42,127},
  {&(_ZTV8S21123C2[53]),  53,127},
  {&(_ZTV8S21123C2[63]),  63,127},
  {&(_ZTV8S21123C2[72]),  72,127},
  {&(_ZTV8S21123C2[84]),  84,127},
  {&(_ZTV8S21123C2[92]),  92,127},
  {&(_ZTV8S21123C2[101]),  101,127},
  {&(_ZTV8S21123C2[108]),  108,127},
  {&(_ZTV8S21123C2[114]),  114,127},
  {&(_ZTV8S21123C2[120]),  120,127},
  {&(_ZTV8S21123C2[125]),  125,127},
  {&(_tg__ZTV8S21123C3__8S21123C2[4]),  4,6},
  {&(_tg__ZTV8S21123C4__8S21123C3__8S21123C2[6]),  6,10},
  {&(_tg__ZTV8S21123C5__8S21123C3__8S21123C2[4]),  4,7},
  {&(_tg__ZTV8S21123C4__8S21123C2[3]),  3,7},
  {&(_tg__ZTV8S21123C68S21123C4__8S21123C2[3]),  3,7},
  {&(_tg__ZTV8S21123C78S21123C68S21123C4__8S21123C2[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C78S21123C68S21123C4__8S21123C2[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C68S21123C4__8S21123C2[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C4__8S21123C2[4]),  4,7},
  {&(_tg__ZTV8S21123C8__8S21123C2[5]),  5,9},
  {&(_tg__ZTV9S21123C148S21123C8__8S21123C2[4]),  4,7},
  {&(_tg__ZTV8S21123C5__9S21123C148S21123C8__8S21123C2[4]),  4,7},
  {&(_tg__ZTV8S21123C6__9S21123C148S21123C8__8S21123C2[6]),  6,10},
  {&(_tg__ZTV8S21123C6__8S21123C8__8S21123C2[6]),  6,10},
  {&(_tg__ZTV8S21123C5__8S21123C8__8S21123C2[4]),  4,7},
  {&(_tg__ZTV8S21123C9__8S21123C8__8S21123C2[5]),  5,7},
  {&(_tg__ZTV8S21123C6__A1__8S21123C2[3]),  3,7},
  {&(_tg__ZTV8S21123C78S21123C6__A1__8S21123C2[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C78S21123C6__A1__8S21123C2[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C6__A1__8S21123C2[4]),  4,7},
  {&(_tg__ZTV8S21123C9__8S21123C2[4]),  4,6},
  {&(_tg__ZTV8S21123C6__8S21123C9__8S21123C2[6]),  6,10},
  {&(_tg__ZTV8S21123C5__8S21123C9__8S21123C2[4]),  4,7},
  {&(_tg__ZTV9S21123C17__8S21123C2[7]),  7,11},
  {&(_tg__ZTV8S21123C49S21123C17__A1__8S21123C2[3]),  3,7},
  {&(_tg__ZTV8S21123C68S21123C49S21123C17__A2__8S21123C2[3]),  3,7},
  {&(_tg__ZTV8S21123C78S21123C68S21123C49S21123C17__A2__8S21123C2[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C78S21123C68S21123C49S21123C17__A2__8S21123C2[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C68S21123C49S21123C17__A2__8S21123C2[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C49S21123C17__A1__8S21123C2[4]),  4,7},
  {&(_tg__ZTV8S21123C99S21123C17__A1__8S21123C2[4]),  4,6},
  {&(_tg__ZTV8S21123C6__8S21123C99S21123C17__A1__8S21123C2[6]),  6,10},
  {&(_tg__ZTV8S21123C5__8S21123C99S21123C17__A1__8S21123C2[4]),  4,7},
  {&(_tg__ZTV8S21123C5__9S21123C17__8S21123C2[4]),  4,7},
  {&(_tg__ZTV8S21123C6__A1__9S21123C17__8S21123C2[6]),  6,10},
  {&(_tg__ZTV8S21123C9__9S21123C17__8S21123C2[4]),  4,6},
  {&(_tg__ZTV9S21123C11__9S21123C17__8S21123C2[7]),  7,11},
  {&(_tg__ZTV8S21123C49S21123C11__A1__9S21123C17__8S21123C2[3]),  3,7},
  {&(_tg__ZTV8S3052C129S21123C11__9S21123C17__8S21123C2[2]),  2,4},
  {&(_tg__ZTV8S21123C7__A4__9S21123C17__8S21123C2[4]),  4,6},
  {&(_tg__ZTV8S3052C12__A1__9S21123C17__8S21123C2[3]),  3,5},
  {&(_tg__ZTV9S21123C11__8S21123C2[4]),  4,8},
  {&(_tg__ZTV8S21123C69S21123C11__A3__8S21123C2[3]),  3,7},
  {&(_tg__ZTV8S21123C78S21123C69S21123C11__A3__8S21123C2[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C78S21123C69S21123C11__A3__8S21123C2[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C69S21123C11__A3__8S21123C2[4]),  4,7},
  {&(_tg__ZTV8S21123C49S21123C11__A2__8S21123C2[3]),  3,7},
  {&(_tg__ZTV8S21123C68S21123C49S21123C11__A4__8S21123C2[3]),  3,7},
  {&(_tg__ZTV8S21123C78S21123C68S21123C49S21123C11__A4__8S21123C2[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C78S21123C68S21123C49S21123C11__A4__8S21123C2[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C68S21123C49S21123C11__A4__8S21123C2[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C49S21123C11__A2__8S21123C2[4]),  4,7},
  {&(_tg__ZTV8S21123C5__9S21123C11__8S21123C2[4]),  4,7},
  {&(_tg__ZTV8S21123C4__9S21123C11__8S21123C2[3]),  3,7},
  {&(_tg__ZTV8S21123C7__A2__9S21123C11__8S21123C2[4]),  4,6},
  {&(_tg__ZTV8S21123C7__A5__8S21123C2[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C7__A5__8S21123C2[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S21123C2[];
extern  VTBL_ENTRY _ZTV8S21123C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C2[];
static VTBL_ENTRY alt_thunk_names54[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21123C11D0Ev,_ZTv0_n16_N9S21123C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N9S21123C11D0Ev,_ZThn1128_N9S21123C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21123C11D1Ev,_ZTv0_n16_N9S21123C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N9S21123C11D1Ev,_ZThn1128_N9S21123C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21123C17D0Ev,_ZTv0_n12_N9S21123C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12464_N9S21123C17D0Ev,_ZThn9196_N9S21123C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21123C17D1Ev,_ZTv0_n12_N9S21123C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12464_N9S21123C17D1Ev,_ZThn9196_N9S21123C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21123C17D0Ev,_ZTv0_n16_N9S21123C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12432_N9S21123C17D0Ev,_ZThn9172_N9S21123C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21123C17D1Ev,_ZTv0_n16_N9S21123C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12432_N9S21123C17D1Ev,_ZThn9172_N9S21123C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21123C17D0Ev,_ZTv0_n20_N9S21123C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10896_N9S21123C17D0Ev,_ZThn8044_N9S21123C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21123C17D1Ev,_ZTv0_n20_N9S21123C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10896_N9S21123C17D1Ev,_ZThn8044_N9S21123C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21123C8D0Ev,_ZTv0_n20_N8S21123C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N8S21123C8D0Ev,_ZThn1480_N8S21123C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21123C8D1Ev,_ZTv0_n20_N8S21123C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N8S21123C8D1Ev,_ZThn1480_N8S21123C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21123C8D0Ev,_ZTv0_n16_N8S21123C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N8S21123C8D0Ev,_ZThn1420_N8S21123C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21123C8D1Ev,_ZTv0_n16_N8S21123C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N8S21123C8D1Ev,_ZThn1420_N8S21123C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21123C14D0Ev,_ZTv0_n16_N9S21123C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S21123C14D0Ev,_ZThn1420_N9S21123C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21123C14D1Ev,_ZTv0_n16_N9S21123C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S21123C14D1Ev,_ZThn1420_N9S21123C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21123C4D0Ev,_ZThn228_N8S21123C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21123C4D1Ev,_ZThn228_N8S21123C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21123C6D0Ev,_ZThn228_N8S21123C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21123C6D1Ev,_ZThn228_N8S21123C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21123C7D0Ev,_ZThn228_N8S21123C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21123C7D1Ev,_ZThn228_N8S21123C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C3D0Ev,_ZTv0_n12_N8S21123C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S21123C3D0Ev,_ZThn256_N8S21123C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C3D1Ev,_ZTv0_n12_N8S21123C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S21123C3D1Ev,_ZThn256_N8S21123C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21123C3D0Ev,_ZTv0_n16_N8S21123C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21123C3D0Ev,_ZThn28_N8S21123C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21123C3D1Ev,_ZTv0_n16_N8S21123C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21123C3D1Ev,_ZThn28_N8S21123C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S21123C2D0Ev,_ZTv0_n32_N8S21123C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33584_N8S21123C2D0Ev,_ZThn24884_N8S21123C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S21123C2D1Ev,_ZTv0_n32_N8S21123C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33584_N8S21123C2D1Ev,_ZThn24884_N8S21123C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21123C2D0Ev,_ZTv0_n24_N8S21123C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21472_N8S21123C2D0Ev,_ZThn15916_N8S21123C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21123C2D1Ev,_ZTv0_n24_N8S21123C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21472_N8S21123C2D1Ev,_ZThn15916_N8S21123C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C2D0Ev,_ZTv0_n12_N8S21123C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46048_N8S21123C2D0Ev,_ZThn34080_N8S21123C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21368_N8S21123C2D0Ev,_ZThn15832_N8S21123C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C2D1Ev,_ZTv0_n12_N8S21123C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46048_N8S21123C2D1Ev,_ZThn34080_N8S21123C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21368_N8S21123C2D1Ev,_ZThn15832_N8S21123C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21123C2D0Ev,_ZTv0_n16_N8S21123C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46016_N8S21123C2D0Ev,_ZThn34056_N8S21123C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn23376_N8S21123C2D0Ev,_ZThn17336_N8S21123C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21056_N8S21123C2D0Ev,_ZThn15604_N8S21123C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21123C2D1Ev,_ZTv0_n16_N8S21123C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46016_N8S21123C2D1Ev,_ZThn34056_N8S21123C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn23376_N8S21123C2D1Ev,_ZThn17336_N8S21123C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21056_N8S21123C2D1Ev,_ZThn15604_N8S21123C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21123C2D0Ev,_ZTv0_n20_N8S21123C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44480_N8S21123C2D0Ev,_ZThn32928_N8S21123C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn23488_N8S21123C2D0Ev,_ZThn17396_N8S21123C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21000_N8S21123C2D0Ev,_ZThn15576_N8S21123C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21123C2D1Ev,_ZTv0_n20_N8S21123C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44480_N8S21123C2D1Ev,_ZThn32928_N8S21123C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn23488_N8S21123C2D1Ev,_ZThn17396_N8S21123C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21000_N8S21123C2D1Ev,_ZThn15576_N8S21123C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21123C2 = {  "S21123C2", // class name
  bases_S21123C2, 29,
  &(vtc_S21123C2[0]), // expected_vtbl_contents
  &(vtt_S21123C2[0]), // expected_vtt_contents
  ABISELECT(46256,34228), // object size
  NSPAIRA(_ZTI8S21123C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S21123C2),127, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21123C2),71, //virtual table table var
  27, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names54,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21123C1  : virtual S21123C2 {
  long double s21123c1f0;
  int s21123c1f1;
  void *s21123c1f2;
  void *s21123c1f3;
  __tsi64 s21123c1f4;
  void *s21123c1f5;
  virtual  ~S21123C1(); // _ZN8S21123C1D2Ev
  S21123C1(); // tgen
};
//SIG(1 S21123C1) C1{ VBC2{ VBC3{ VBC4{ VBC5{ vd v1 Fs[6] FL[8] Fi} BC6{ VBC5 BC7{ VBC5 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC5 Fp[3] FL[5] Fi} Fp[6]} VBC8{ VBC6 VBC9{ BC10{ m Fp Fi FL Fp Fi} VBC6 Fp Fc[4] Fi:11 Fp[2] Fi[6] FC11{ VBC5 BC6 BC4 BC12{ vd m FC13{ VBC14{ vd v10 Fs[6] FL[8] Fi} BC15{ VBC14 FL Fp FL:54} v8 v9 Fc:0 Fp[8] Fc}} VBC7 Fp Fl FC4 FC12 FC7 Fi[2] FU16{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} BC17{ BC12 VBC5 VBC6 v4 FC6[2] FD FC12 Fp[3] FC4 Fi FU18{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} Fi} v5 Fp FC19{} FC5 FL FU16 FL[6] FL FC4} VBC20{ BC4 VBC6 BC9 VBC11 VBC12 vd FC12[2] Fi FD FD Fc:0 Fp} BC21{ v6 Fi:0 Fi[6] Fi Fp} BC5 v7 Fi Fp Fi FC9[2] FC7 FD Fi[3] FU16 FL Fi[2] Fi FU16 Fp} vd FD Fi Fp Fp FL Fp}


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

static void Test_S21123C1()
{
  extern Class_Descriptor cd_S21123C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2897,8568)];
    init_test(&cd_S21123C1, buf);
    S21123C1 *dp, &lv = *(dp=new (buf) S21123C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(46336,34268), "sizeof(S21123C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S21123C1)");
    /*is_ambiguous_... S21123C1::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C4*), ABISELECT(21448,15872), "S21123C1");
    /*is_ambiguous_... S21123C1::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C6*)(S21123C4*), ABISELECT(21448,15872), "S21123C1");
    /*is_ambiguous_... S21123C1::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C7*)(S21123C6*)(S21123C4*), ABISELECT(21448,15872), "S21123C1");
    /*is_ambiguous_... S21123C1::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C6*), ABISELECT(21448,15872), "S21123C1");
    /*is_ambiguous_... S21123C1::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C7*)(S21123C6*), ABISELECT(21448,15872), "S21123C1");
    check_base_class_offset(lv, (S21123C5*)(S21123C14*)(S21123C8*), ABISELECT(21448,15872), "S21123C1");
    /*is_ambiguous_... S21123C17::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C4*)(S21123C17*), ABISELECT(21448,15872), "S21123C1");
    /*is_ambiguous_... S21123C17::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C6*)(S21123C4*)(S21123C17*), ABISELECT(21448,15872), "S21123C1");
    /*is_ambiguous_... S21123C17::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C7*)(S21123C6*)(S21123C4*)(S21123C17*), ABISELECT(21448,15872), "S21123C1");
    check_base_class_offset(lv, (S21123C5*)(S21123C11*), ABISELECT(21448,15872), "S21123C1");
    /*is_ambiguous_... S21123C11::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C6*)(S21123C11*), ABISELECT(21448,15872), "S21123C1");
    /*is_ambiguous_... S21123C11::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C7*)(S21123C6*)(S21123C11*), ABISELECT(21448,15872), "S21123C1");
    check_base_class_offset(lv, (S21123C5*)(S21123C4*)(S21123C11*), ABISELECT(21448,15872), "S21123C1");
    check_base_class_offset(lv, (S21123C5*)(S21123C6*)(S21123C4*)(S21123C11*), ABISELECT(21448,15872), "S21123C1");
    check_base_class_offset(lv, (S21123C5*)(S21123C7*)(S21123C6*)(S21123C4*)(S21123C11*), ABISELECT(21448,15872), "S21123C1");
    /*is_ambiguous_... S21123C1::S21123C7 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C7*), ABISELECT(21448,15872), "S21123C1");
    /*is_ambiguous_... S21123C1::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C7*)(S21123C6*)(S21123C4*), ABISELECT(21136,15644), "S21123C1");
    /*is_ambiguous_... S21123C1::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C6*)(S21123C4*), ABISELECT(21136,15644), "S21123C1");
    check_base_class_offset(lv, (S21123C4*)(S21123C3*), ABISELECT(21136,15644), "S21123C1");
    check_base_class_offset(lv, (S21123C3*)(S21123C2*), ABISELECT(21080,15616), "S21123C1");
    /*is_ambiguous_... S21123C1::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C7*)(S21123C6*), ABISELECT(23456,17376), "S21123C1");
    check_base_class_offset(lv, (S21123C6*)(S21123C8*), ABISELECT(23456,17376), "S21123C1");
    /*is_ambiguous_... S21123C1::S21123C9 */ AMB_check_base_class_offset(lv, (S21123C6*)(S21123C9*), ABISELECT(23456,17376), "S21123C1");
    check_base_class_offset(lv, (S21123C6*)(S21123C14*)(S21123C8*), ABISELECT(23456,17376), "S21123C1");
    /*is_ambiguous_... S21123C17::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C6*)(S21123C17*), ABISELECT(23456,17376), "S21123C1");
    check_base_class_offset(lv, (S21123C6*)(S21123C9*)(S21123C17*), ABISELECT(23456,17376), "S21123C1");
    /*is_ambiguous_... S21123C1::S21123C9 */ AMB_check_base_class_offset(lv, (S3052C10*)(S21123C9*), ABISELECT(23576,17440), "S21123C1");
    check_base_class_offset(lv, (S21123C9*)(S21123C8*), ABISELECT(23568,17436), "S21123C1");
    check_base_class_offset(lv, (S3052C12*)(S21123C14*)(S21123C8*), ABISELECT(21552,15956), "S21123C1");
    check_base_class_offset(lv, (S21123C14*)(S21123C8*), ABISELECT(21552,15956), "S21123C1");
    check_base_class_offset(lv, (S21123C8*)(S21123C2*), ABISELECT(21552,15956), "S21123C1");
    /*is_ambiguous_... S21123C17::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C7*)(S21123C6*)(S21123C4*)(S21123C17*), ABISELECT(33664,24924), "S21123C1");
    /*is_ambiguous_... S21123C17::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C6*)(S21123C4*)(S21123C17*), ABISELECT(33664,24924), "S21123C1");
    /*is_ambiguous_... S21123C17::S21123C4 */ AMB_check_base_class_offset(lv, (S21123C4*)(S21123C17*), ABISELECT(33664,24924), "S21123C1");
    check_base_class_offset(lv, (S3052C10*)(S21123C9*)(S21123C17*), ABISELECT(33992,25156), "S21123C1");
    check_base_class_offset(lv, (S21123C9*)(S21123C17*), ABISELECT(33984,25152), "S21123C1");
    /*is_ambiguous_... S21123C11::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C7*)(S21123C6*)(S21123C11*), ABISELECT(44560,32968), "S21123C1");
    /*is_ambiguous_... S21123C11::S21123C6 */ AMB_check_base_class_offset(lv, (S21123C6*)(S21123C11*), ABISELECT(44560,32968), "S21123C1");
    check_base_class_offset(lv, (S21123C7*)(S21123C6*)(S21123C4*)(S21123C11*), ABISELECT(44664,33028), "S21123C1");
    check_base_class_offset(lv, (S21123C6*)(S21123C4*)(S21123C11*), ABISELECT(44664,33028), "S21123C1");
    check_base_class_offset(lv, (S21123C4*)(S21123C11*), ABISELECT(44664,33028), "S21123C1");
    check_base_class_offset(lv, (S3052C12*)(S21123C11*), ABISELECT(44976,33256), "S21123C1");
    /*is_ambiguous_... S21123C11::S21123C7 */ AMB_check_base_class_offset(lv, (S21123C7*)(S21123C11*), ABISELECT(46096,34096), "S21123C1");
    check_base_class_offset(lv, (S21123C11*)(S21123C17*), ABISELECT(44560,32968), "S21123C1");
    /*is_ambiguous_... S21123C17::S3052C12 */ AMB_check_base_class_offset(lv, (S3052C12*)(S21123C17*), ABISELECT(46128,34120), "S21123C1");
    check_base_class_offset(lv, (S21123C17*)(S21123C2*), ABISELECT(33664,24924), "S21123C1");
    check_base_class_offset(lv, (S21123C18*)(S21123C2*), ABISELECT(80,40), "S21123C1");
    /*is_ambiguous_... S21123C2::S21123C5 */ AMB_check_base_class_offset(lv, (S21123C5*)(S21123C2*), ABISELECT(128,76), "S21123C1");
    check_base_class_offset(lv, (S21123C2*), ABISELECT(80,40), "S21123C1");
    check_field_offset(lv, s21123c1f0, ABISELECT(16,4), "S21123C1.s21123c1f0");
    check_field_offset(lv, s21123c1f1, ABISELECT(32,16), "S21123C1.s21123c1f1");
    check_field_offset(lv, s21123c1f2, ABISELECT(40,20), "S21123C1.s21123c1f2");
    check_field_offset(lv, s21123c1f3, ABISELECT(48,24), "S21123C1.s21123c1f3");
    check_field_offset(lv, s21123c1f4, ABISELECT(56,28), "S21123C1.s21123c1f4");
    check_field_offset(lv, s21123c1f5, ABISELECT(64,36), "S21123C1.s21123c1f5");
    test_class_info(&lv, &cd_S21123C1);
    dp->~S21123C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21123C1(Test_S21123C1, "S21123C1", ABISELECT(46336,34268));

#else // __cplusplus

extern void _ZN8S21123C1C1Ev();
extern void _ZN8S21123C1D2Ev();
Name_Map name_map_S21123C1[] = {
  NSPAIR(_ZN8S21123C1C1Ev),
  NSPAIR(_ZN8S21123C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21123C5;
extern VTBL_ENTRY _ZTI8S21123C5[];
extern  VTBL_ENTRY _ZTV8S21123C5[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
extern Class_Descriptor cd_S21123C6;
extern VTBL_ENTRY _ZTI8S21123C6[];
extern  VTBL_ENTRY _ZTV8S21123C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C6[];
extern Class_Descriptor cd_S21123C4;
extern VTBL_ENTRY _ZTI8S21123C4[];
extern  VTBL_ENTRY _ZTV8S21123C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C4[];
extern Class_Descriptor cd_S21123C3;
extern VTBL_ENTRY _ZTI8S21123C3[];
extern  VTBL_ENTRY _ZTV8S21123C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C3[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
extern Class_Descriptor cd_S21123C6;
extern VTBL_ENTRY _ZTI8S21123C6[];
extern  VTBL_ENTRY _ZTV8S21123C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C6[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S21123C9;
extern VTBL_ENTRY _ZTI8S21123C9[];
extern  VTBL_ENTRY _ZTV8S21123C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C9[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S21123C14;
extern VTBL_ENTRY _ZTI9S21123C14[];
extern  VTBL_ENTRY _ZTV9S21123C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21123C14[];
extern Class_Descriptor cd_S21123C8;
extern VTBL_ENTRY _ZTI8S21123C8[];
extern  VTBL_ENTRY _ZTV8S21123C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C8[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
extern Class_Descriptor cd_S21123C6;
extern VTBL_ENTRY _ZTI8S21123C6[];
extern  VTBL_ENTRY _ZTV8S21123C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C6[];
extern Class_Descriptor cd_S21123C4;
extern VTBL_ENTRY _ZTI8S21123C4[];
extern  VTBL_ENTRY _ZTV8S21123C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C4[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S21123C9;
extern VTBL_ENTRY _ZTI8S21123C9[];
extern  VTBL_ENTRY _ZTV8S21123C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C9[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
extern Class_Descriptor cd_S21123C6;
extern VTBL_ENTRY _ZTI8S21123C6[];
extern  VTBL_ENTRY _ZTV8S21123C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C6[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
extern Class_Descriptor cd_S21123C6;
extern VTBL_ENTRY _ZTI8S21123C6[];
extern  VTBL_ENTRY _ZTV8S21123C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C6[];
extern Class_Descriptor cd_S21123C4;
extern VTBL_ENTRY _ZTI8S21123C4[];
extern  VTBL_ENTRY _ZTV8S21123C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C4[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S21123C7;
extern VTBL_ENTRY _ZTI8S21123C7[];
extern  VTBL_ENTRY _ZTV8S21123C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C7[];
extern Class_Descriptor cd_S21123C11;
extern VTBL_ENTRY _ZTI9S21123C11[];
extern  VTBL_ENTRY _ZTV9S21123C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21123C11[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S21123C17;
extern VTBL_ENTRY _ZTI9S21123C17[];
extern  VTBL_ENTRY _ZTV9S21123C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21123C17[];
extern Class_Descriptor cd_S21123C18;
extern VTBL_ENTRY _ZTI9S21123C18[];
extern  VTBL_ENTRY _ZTV9S21123C18[];
extern Class_Descriptor cd_S21123C5;
extern VTBL_ENTRY _ZTI8S21123C5[];
extern  VTBL_ENTRY _ZTV8S21123C5[];
extern Class_Descriptor cd_S21123C2;
extern VTBL_ENTRY _ZTI8S21123C2[];
extern  VTBL_ENTRY _ZTV8S21123C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C2[];
static Base_Class bases_S21123C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21123C5,    ABISELECT(21448,15872), //bcp->offset
    57, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S21123C7,    ABISELECT(21136,15644), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21123C6,    ABISELECT(21136,15644), //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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S21123C4,    ABISELECT(21136,15644), //bcp->offset
    47, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S21123C3,    ABISELECT(21080,15616), //bcp->offset
    40, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S21123C7,    ABISELECT(23456,17376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S21123C6,    ABISELECT(23456,17376), //bcp->offset
    76, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S3052C10,    ABISELECT(23576,17440), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21123C9,    ABISELECT(23568,17436), //bcp->offset
    86, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S3052C12,    ABISELECT(21552,15956), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S21123C14,    ABISELECT(21552,15956), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S21123C8,    ABISELECT(21552,15956), //bcp->offset
    64, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S21123C7,    ABISELECT(33664,24924), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S21123C6,    ABISELECT(33664,24924), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S21123C4,    ABISELECT(33664,24924), //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
    23, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S3052C10,    ABISELECT(33992,25156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S21123C9,    ABISELECT(33984,25152), //bcp->offset
    107, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S21123C7,    ABISELECT(44560,32968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S21123C6,    ABISELECT(44560,32968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S21123C7,    ABISELECT(44664,33028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    79, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S21123C6,    ABISELECT(44664,33028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    78, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S21123C4,    ABISELECT(44664,33028), //bcp->offset
    124, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S3052C12,    ABISELECT(44976,33256), //bcp->offset
    131, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S21123C7,    ABISELECT(46096,34096), //bcp->offset
    135, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    86, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S21123C11,    ABISELECT(44560,32968), //bcp->offset
    113, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    72, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S3052C12,    ABISELECT(46128,34120), //bcp->offset
    141, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S21123C17,    ABISELECT(33664,24924), //bcp->offset
    93, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S21123C18,    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
    26, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S21123C5,    ABISELECT(128,76), //bcp->offset
    35, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S21123C2,    ABISELECT(80,40), //bcp->offset
    15, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21123C1[];
extern void _ZN8S21123C1D1Ev();
extern void _ZN8S21123C1D0Ev();
extern void _ZN9S21123C182v6Ev();
extern void _ZN8S21123C22v7Ev();
extern void ABISELECT(_ZTv0_n120_N8S21123C1D1Ev,_ZTv0_n60_N8S21123C1D1Ev)();
extern void ABISELECT(_ZThn80_N8S21123C1D1Ev,_ZThn40_N8S21123C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n120_N8S21123C1D0Ev,_ZTv0_n60_N8S21123C1D0Ev)();
extern void ABISELECT(_ZThn80_N8S21123C1D0Ev,_ZThn40_N8S21123C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn48_n120_N8S21123C1D1Ev,_ZTvn36_n60_N8S21123C1D1Ev)();
extern void ABISELECT(_ZTvn48_n120_N8S21123C1D0Ev,_ZTvn36_n60_N8S21123C1D0Ev)();
extern void _ZN8S21123C52v1Ev();
extern void ABISELECT(_ZTv0_n40_N8S21123C1D1Ev,_ZTv0_n20_N8S21123C1D1Ev)();
extern void ABISELECT(_ZThn21080_N8S21123C1D1Ev,_ZThn15616_N8S21123C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21123C1D0Ev,_ZTv0_n20_N8S21123C1D0Ev)();
extern void ABISELECT(_ZThn21080_N8S21123C1D0Ev,_ZThn15616_N8S21123C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21123C1D1Ev,_ZTv0_n16_N8S21123C1D1Ev)();
extern void ABISELECT(_ZThn21136_N8S21123C1D1Ev,_ZThn15644_N8S21123C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21123C1D0Ev,_ZTv0_n16_N8S21123C1D0Ev)();
extern void ABISELECT(_ZThn21136_N8S21123C1D0Ev,_ZThn15644_N8S21123C1D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
extern void ABISELECT(_ZTv0_n24_N8S21123C1D1Ev,_ZTv0_n12_N8S21123C1D1Ev)();
extern void ABISELECT(_ZThn21448_N8S21123C1D1Ev,_ZThn15872_N8S21123C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C1D0Ev,_ZTv0_n12_N8S21123C1D0Ev)();
extern void ABISELECT(_ZThn21448_N8S21123C1D0Ev,_ZThn15872_N8S21123C1D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
extern void ABISELECT(_ZTv0_n48_N8S21123C1D1Ev,_ZTv0_n24_N8S21123C1D1Ev)();
extern void ABISELECT(_ZThn21552_N8S21123C1D1Ev,_ZThn15956_N8S21123C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21123C1D0Ev,_ZTv0_n24_N8S21123C1D0Ev)();
extern void ABISELECT(_ZThn21552_N8S21123C1D0Ev,_ZThn15956_N8S21123C1D0Ev)() __attribute__((weak));
extern void _ZN9S21123C142v4Ev();
extern void _ZN8S21123C82v5Ev();
extern void ABISELECT(_ZTv0_n32_N8S21123C1D1Ev,_ZTv0_n16_N8S21123C1D1Ev)();
extern void ABISELECT(_ZThn23456_N8S21123C1D1Ev,_ZThn17376_N8S21123C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21123C1D0Ev,_ZTv0_n16_N8S21123C1D0Ev)();
extern void ABISELECT(_ZThn23456_N8S21123C1D0Ev,_ZThn17376_N8S21123C1D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
extern void ABISELECT(_ZTv0_n40_N8S21123C1D1Ev,_ZTv0_n20_N8S21123C1D1Ev)();
extern void ABISELECT(_ZThn23568_N8S21123C1D1Ev,_ZThn17436_N8S21123C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21123C1D0Ev,_ZTv0_n20_N8S21123C1D0Ev)();
extern void ABISELECT(_ZThn23568_N8S21123C1D0Ev,_ZThn17436_N8S21123C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S21123C1D1Ev,_ZTv0_n32_N8S21123C1D1Ev)();
extern void ABISELECT(_ZThn33664_N8S21123C1D1Ev,_ZThn24924_N8S21123C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S21123C1D0Ev,_ZTv0_n32_N8S21123C1D0Ev)();
extern void ABISELECT(_ZThn33664_N8S21123C1D0Ev,_ZThn24924_N8S21123C1D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
extern void ABISELECT(_ZTvn320_n64_N8S21123C1D1Ev,_ZTvn228_n32_N8S21123C1D1Ev)();
extern void ABISELECT(_ZTvn320_n64_N8S21123C1D0Ev,_ZTvn228_n32_N8S21123C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S21123C1D1Ev,_ZTv0_n20_N8S21123C1D1Ev)();
extern void ABISELECT(_ZThn44560_N8S21123C1D1Ev,_ZThn32968_N8S21123C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21123C1D0Ev,_ZTv0_n20_N8S21123C1D0Ev)();
extern void ABISELECT(_ZThn44560_N8S21123C1D0Ev,_ZThn32968_N8S21123C1D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
extern void ABISELECT(_ZTvn104_n40_N8S21123C1D1Ev,_ZTvn60_n20_N8S21123C1D1Ev)();
extern void ABISELECT(_ZTvn104_n40_N8S21123C1D0Ev,_ZTvn60_n20_N8S21123C1D0Ev)();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
extern void ABISELECT(_ZTvn416_n40_N8S21123C1D1Ev,_ZTvn288_n20_N8S21123C1D1Ev)();
extern void ABISELECT(_ZTvn416_n40_N8S21123C1D0Ev,_ZTvn288_n20_N8S21123C1D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S21123C1D1Ev,_ZTv0_n16_N8S21123C1D1Ev)();
extern void ABISELECT(_ZThn46096_N8S21123C1D1Ev,_ZThn34096_N8S21123C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21123C1D0Ev,_ZTv0_n16_N8S21123C1D0Ev)();
extern void ABISELECT(_ZThn46096_N8S21123C1D0Ev,_ZThn34096_N8S21123C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C1D1Ev,_ZTv0_n12_N8S21123C1D1Ev)();
extern void ABISELECT(_ZThn46128_N8S21123C1D1Ev,_ZThn34120_N8S21123C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C1D0Ev,_ZTv0_n12_N8S21123C1D0Ev)();
extern void ABISELECT(_ZThn46128_N8S21123C1D0Ev,_ZThn34120_N8S21123C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S21123C1[] = {
  ABISELECT(46128,34120),
  ABISELECT(46096,34096),
  ABISELECT(44560,32968),
  ABISELECT(33664,24924),
  ABISELECT(23568,17436),
  ABISELECT(23456,17376),
  ABISELECT(21552,15956),
  ABISELECT(21448,15872),
  ABISELECT(21136,15644),
  ABISELECT(21080,15616),
  ABISELECT(80,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C1[0]),
  (VTBL_ENTRY)&_ZN8S21123C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C1D0Ev,
  ABISELECT(48,36),
  ABISELECT(-80,-40),
  0,
  0,
  ABISELECT(46048,34080),
  ABISELECT(46016,34056),
  ABISELECT(44480,32928),
  ABISELECT(33584,24884),
  ABISELECT(23488,17396),
  ABISELECT(23376,17336),
  ABISELECT(21472,15916),
  ABISELECT(21368,15832),
  ABISELECT(21056,15604),
  ABISELECT(21000,15576),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S21123C1[0]),
  (VTBL_ENTRY)&_ZN9S21123C182v6Ev,
  (VTBL_ENTRY)&_ZN8S21123C22v7Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S21123C1D1Ev,_ZTv0_n60_N8S21123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n120_N8S21123C1D0Ev,_ZTv0_n60_N8S21123C1D0Ev),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S21123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n120_N8S21123C1D1Ev,_ZTvn36_n60_N8S21123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn48_n120_N8S21123C1D0Ev,_ZTvn36_n60_N8S21123C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
  ABISELECT(-21080,-15616),
  ABISELECT(368,256),
  ABISELECT(56,28),
  ABISELECT(-21080,-15616),
  (VTBL_ENTRY)&(_ZTI8S21123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21123C1D1Ev,_ZTv0_n20_N8S21123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21123C1D0Ev,_ZTv0_n20_N8S21123C1D0Ev),
  0,
  0,
  ABISELECT(-21136,-15644),
  ABISELECT(312,228),
  ABISELECT(-21136,-15644),
  (VTBL_ENTRY)&(_ZTI8S21123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C1D1Ev,_ZTv0_n16_N8S21123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C1D0Ev,_ZTv0_n16_N8S21123C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
  0,
  ABISELECT(-21448,-15872),
  ABISELECT(-21448,-15872),
  (VTBL_ENTRY)&(_ZTI8S21123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C1D1Ev,_ZTv0_n12_N8S21123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C1D0Ev,_ZTv0_n12_N8S21123C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
  0,
  0,
  ABISELECT(-21552,-15956),
  ABISELECT(2016,1480),
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  ABISELECT(-21552,-15956),
  (VTBL_ENTRY)&(_ZTI8S21123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21123C1D1Ev,_ZTv0_n24_N8S21123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21123C1D0Ev,_ZTv0_n24_N8S21123C1D0Ev),
  (VTBL_ENTRY)&_ZN9S21123C142v4Ev,
  (VTBL_ENTRY)&_ZN8S21123C82v5Ev,
  0,
  0,
  ABISELECT(-23456,-17376),
  ABISELECT(-2008,-1504),
  ABISELECT(-23456,-17376),
  (VTBL_ENTRY)&(_ZTI8S21123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C1D1Ev,_ZTv0_n16_N8S21123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C1D0Ev,_ZTv0_n16_N8S21123C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
  ABISELECT(-23568,-17436),
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  ABISELECT(-23568,-17436),
  (VTBL_ENTRY)&(_ZTI8S21123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21123C1D1Ev,_ZTv0_n20_N8S21123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21123C1D0Ev,_ZTv0_n20_N8S21123C1D0Ev),
  0,
  0,
  ABISELECT(-33664,-24924),
  ABISELECT(12464,9196),
  ABISELECT(12432,9172),
  ABISELECT(10896,8044),
  ABISELECT(-10208,-7548),
  ABISELECT(-12216,-9052),
  ABISELECT(-33664,-24924),
  (VTBL_ENTRY)&(_ZTI8S21123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S21123C1D1Ev,_ZTv0_n32_N8S21123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S21123C1D0Ev,_ZTv0_n32_N8S21123C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
  ABISELECT(-12536,-9280),
  ABISELECT(-10528,-7776),
  ABISELECT(-33984,-25152),
  (VTBL_ENTRY)&(_ZTI8S21123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn320_n64_N8S21123C1D1Ev,_ZTvn228_n32_N8S21123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn320_n64_N8S21123C1D0Ev,_ZTvn228_n32_N8S21123C1D0Ev),
  0,
  0,
  ABISELECT(-44560,-32968),
  ABISELECT(1536,1128),
  ABISELECT(-23112,-17096),
  ABISELECT(-44560,-32968),
  (VTBL_ENTRY)&(_ZTI8S21123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21123C1D1Ev,_ZTv0_n20_N8S21123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21123C1D0Ev,_ZTv0_n20_N8S21123C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
  ABISELECT(-23216,-17156),
  ABISELECT(-44664,-33028),
  (VTBL_ENTRY)&(_ZTI8S21123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N8S21123C1D1Ev,_ZTvn60_n20_N8S21123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N8S21123C1D0Ev,_ZTvn60_n20_N8S21123C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
  ABISELECT(-44976,-33256),
  (VTBL_ENTRY)&(_ZTI8S21123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N8S21123C1D1Ev,_ZTvn288_n20_N8S21123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N8S21123C1D0Ev,_ZTvn288_n20_N8S21123C1D0Ev),
  ABISELECT(-46096,-34096),
  ABISELECT(-24648,-18224),
  ABISELECT(-46096,-34096),
  (VTBL_ENTRY)&(_ZTI8S21123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C1D1Ev,_ZTv0_n16_N8S21123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C1D0Ev,_ZTv0_n16_N8S21123C1D0Ev),
  ABISELECT(-46128,-34120),
  ABISELECT(-46128,-34120),
  (VTBL_ENTRY)&(_ZTI8S21123C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C1D1Ev,_ZTv0_n12_N8S21123C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C1D0Ev,_ZTv0_n12_N8S21123C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S21123C1[];
extern void _ZN9S21123C182v6Ev();
extern void _ZN8S21123C22v7Ev();
extern void _ZN8S21123C2D1Ev();
extern void _ZN8S21123C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C2__8S21123C1[] = {
  ABISELECT(46048,34080),
  ABISELECT(46016,34056),
  ABISELECT(44480,32928),
  ABISELECT(33584,24884),
  ABISELECT(23488,17396),
  ABISELECT(23376,17336),
  ABISELECT(21472,15916),
  ABISELECT(21368,15832),
  ABISELECT(21056,15604),
  ABISELECT(21000,15576),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&_ZN9S21123C182v6Ev,
  (VTBL_ENTRY)&_ZN8S21123C22v7Ev,
  (VTBL_ENTRY)&_ZN8S21123C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C2D0Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S21123C2D1Ev,_ZTv0_n20_N8S21123C2D1Ev)();
extern void ABISELECT(_ZThn21000_N8S21123C2D1Ev,_ZThn15576_N8S21123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21123C2D0Ev,_ZTv0_n20_N8S21123C2D0Ev)();
extern void ABISELECT(_ZThn21000_N8S21123C2D0Ev,_ZThn15576_N8S21123C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21123C3__8S21123C2__8S21123C1[] = {
  ABISELECT(-21000,-15576),
  ABISELECT(368,256),
  ABISELECT(56,28),
  ABISELECT(-21000,-15576),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21123C2D1Ev,_ZTv0_n20_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21123C2D0Ev,_ZTv0_n20_N8S21123C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21123C2D1Ev,_ZTv0_n16_N8S21123C2D1Ev)();
extern void ABISELECT(_ZThn21056_N8S21123C2D1Ev,_ZThn15604_N8S21123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21123C2D0Ev,_ZTv0_n16_N8S21123C2D0Ev)();
extern void ABISELECT(_ZThn21056_N8S21123C2D0Ev,_ZThn15604_N8S21123C2D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C4__8S21123C2__8S21123C1[] = {
  0,
  0,
  ABISELECT(-21056,-15604),
  ABISELECT(312,228),
  ABISELECT(-21056,-15604),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C2D1Ev,_ZTv0_n16_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C2D0Ev,_ZTv0_n16_N8S21123C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C2D1Ev,_ZTv0_n12_N8S21123C2D1Ev)();
extern void ABISELECT(_ZThn21368_N8S21123C2D1Ev,_ZThn15832_N8S21123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C2D0Ev,_ZTv0_n12_N8S21123C2D0Ev)();
extern void ABISELECT(_ZThn21368_N8S21123C2D0Ev,_ZThn15832_N8S21123C2D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C2__8S21123C1[] = {
  0,
  ABISELECT(-21368,-15832),
  ABISELECT(-21368,-15832),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C2D1Ev,_ZTv0_n12_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C2D0Ev,_ZTv0_n12_N8S21123C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S21123C2D1Ev,_ZTv0_n24_N8S21123C2D1Ev)();
extern void ABISELECT(_ZThn21472_N8S21123C2D1Ev,_ZThn15916_N8S21123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S21123C2D0Ev,_ZTv0_n24_N8S21123C2D0Ev)();
extern void ABISELECT(_ZThn21472_N8S21123C2D0Ev,_ZThn15916_N8S21123C2D0Ev)() __attribute__((weak));
extern void _ZN9S21123C142v4Ev();
extern void _ZN8S21123C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C8__8S21123C2__8S21123C1[] = {
  0,
  0,
  ABISELECT(-21472,-15916),
  ABISELECT(2016,1480),
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  ABISELECT(-21472,-15916),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21123C2D1Ev,_ZTv0_n24_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S21123C2D0Ev,_ZTv0_n24_N8S21123C2D0Ev),
  (VTBL_ENTRY)&_ZN9S21123C142v4Ev,
  (VTBL_ENTRY)&_ZN8S21123C82v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S21123C2D1Ev,_ZTv0_n16_N8S21123C2D1Ev)();
extern void ABISELECT(_ZThn23376_N8S21123C2D1Ev,_ZThn17336_N8S21123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21123C2D0Ev,_ZTv0_n16_N8S21123C2D0Ev)();
extern void ABISELECT(_ZThn23376_N8S21123C2D0Ev,_ZThn17336_N8S21123C2D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C6__A1__8S21123C2__8S21123C1[] = {
  0,
  0,
  ABISELECT(-23376,-17336),
  ABISELECT(-2008,-1504),
  ABISELECT(-23376,-17336),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C2D1Ev,_ZTv0_n16_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C2D0Ev,_ZTv0_n16_N8S21123C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S21123C2D1Ev,_ZTv0_n20_N8S21123C2D1Ev)();
extern void ABISELECT(_ZThn23488_N8S21123C2D1Ev,_ZThn17396_N8S21123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21123C2D0Ev,_ZTv0_n20_N8S21123C2D0Ev)();
extern void ABISELECT(_ZThn23488_N8S21123C2D0Ev,_ZThn17396_N8S21123C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21123C9__8S21123C2__8S21123C1[] = {
  ABISELECT(-23488,-17396),
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  ABISELECT(-23488,-17396),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21123C2D1Ev,_ZTv0_n20_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21123C2D0Ev,_ZTv0_n20_N8S21123C2D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S21123C2D1Ev,_ZTv0_n32_N8S21123C2D1Ev)();
extern void ABISELECT(_ZThn33584_N8S21123C2D1Ev,_ZThn24884_N8S21123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S21123C2D0Ev,_ZTv0_n32_N8S21123C2D0Ev)();
extern void ABISELECT(_ZThn33584_N8S21123C2D0Ev,_ZThn24884_N8S21123C2D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV9S21123C17__8S21123C2__8S21123C1[] = {
  0,
  0,
  ABISELECT(-33584,-24884),
  ABISELECT(12464,9196),
  ABISELECT(12432,9172),
  ABISELECT(10896,8044),
  ABISELECT(-10208,-7548),
  ABISELECT(-12216,-9052),
  ABISELECT(-33584,-24884),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S21123C2D1Ev,_ZTv0_n32_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S21123C2D0Ev,_ZTv0_n32_N8S21123C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZTvn320_n64_N8S21123C2D1Ev,_ZTvn228_n32_N8S21123C2D1Ev)();
extern void ABISELECT(_ZTvn320_n64_N8S21123C2D0Ev,_ZTvn228_n32_N8S21123C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21123C99S21123C17__A1__8S21123C2__8S21123C1[] = {
  ABISELECT(-12536,-9280),
  ABISELECT(-10528,-7776),
  ABISELECT(-33904,-25112),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn320_n64_N8S21123C2D1Ev,_ZTvn228_n32_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn320_n64_N8S21123C2D0Ev,_ZTvn228_n32_N8S21123C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S21123C2D1Ev,_ZTv0_n20_N8S21123C2D1Ev)();
extern void ABISELECT(_ZThn44480_N8S21123C2D1Ev,_ZThn32928_N8S21123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21123C2D0Ev,_ZTv0_n20_N8S21123C2D0Ev)();
extern void ABISELECT(_ZThn44480_N8S21123C2D0Ev,_ZThn32928_N8S21123C2D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV9S21123C11__8S21123C2__8S21123C1[] = {
  0,
  0,
  ABISELECT(-44480,-32928),
  ABISELECT(1536,1128),
  ABISELECT(-23112,-17096),
  ABISELECT(-44480,-32928),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21123C2D1Ev,_ZTv0_n20_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21123C2D0Ev,_ZTv0_n20_N8S21123C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZTvn104_n40_N8S21123C2D1Ev,_ZTvn60_n20_N8S21123C2D1Ev)();
extern void ABISELECT(_ZTvn104_n40_N8S21123C2D0Ev,_ZTvn60_n20_N8S21123C2D0Ev)();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C49S21123C11__A2__8S21123C2__8S21123C1[] = {
  ABISELECT(-23216,-17156),
  ABISELECT(-44584,-32988),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N8S21123C2D1Ev,_ZTvn60_n20_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N8S21123C2D0Ev,_ZTvn60_n20_N8S21123C2D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZTvn416_n40_N8S21123C2D1Ev,_ZTvn288_n20_N8S21123C2D1Ev)();
extern void ABISELECT(_ZTvn416_n40_N8S21123C2D0Ev,_ZTvn288_n20_N8S21123C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3052C129S21123C11__A1__8S21123C2__8S21123C1[] = {
  ABISELECT(-44896,-33216),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N8S21123C2D1Ev,_ZTvn288_n20_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N8S21123C2D0Ev,_ZTvn288_n20_N8S21123C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S21123C2D1Ev,_ZTv0_n16_N8S21123C2D1Ev)();
extern void ABISELECT(_ZThn46016_N8S21123C2D1Ev,_ZThn34056_N8S21123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21123C2D0Ev,_ZTv0_n16_N8S21123C2D0Ev)();
extern void ABISELECT(_ZThn46016_N8S21123C2D0Ev,_ZThn34056_N8S21123C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21123C7__A5__8S21123C2__8S21123C1[] = {
  ABISELECT(-46016,-34056),
  ABISELECT(-24648,-18224),
  ABISELECT(-46016,-34056),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C2D1Ev,_ZTv0_n16_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C2D0Ev,_ZTv0_n16_N8S21123C2D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S21123C2D1Ev,_ZTv0_n12_N8S21123C2D1Ev)();
extern void ABISELECT(_ZThn46048_N8S21123C2D1Ev,_ZThn34080_N8S21123C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C2D0Ev,_ZTv0_n12_N8S21123C2D0Ev)();
extern void ABISELECT(_ZThn46048_N8S21123C2D0Ev,_ZThn34080_N8S21123C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3052C12__A2__8S21123C2__8S21123C1[] = {
  ABISELECT(-46048,-34080),
  ABISELECT(-46048,-34080),
  (VTBL_ENTRY)&(_ZTI8S21123C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C2D1Ev,_ZTv0_n12_N8S21123C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C2D0Ev,_ZTv0_n12_N8S21123C2D0Ev),
};
extern void _ZN8S21123C3D1Ev();
extern void _ZN8S21123C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C3__8S21123C1[] = {
  ABISELECT(368,256),
  ABISELECT(56,28),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C3[0]),
  (VTBL_ENTRY)&_ZN8S21123C3D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C3D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S21123C3D1Ev,_ZTv0_n16_N8S21123C3D1Ev)();
extern void ABISELECT(_ZThn56_N8S21123C3D1Ev,_ZThn28_N8S21123C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21123C3D0Ev,_ZTv0_n16_N8S21123C3D0Ev)();
extern void ABISELECT(_ZThn56_N8S21123C3D0Ev,_ZThn28_N8S21123C3D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C4__8S21123C3__8S21123C1[] = {
  0,
  0,
  ABISELECT(-56,-28),
  ABISELECT(312,228),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S21123C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C3D1Ev,_ZTv0_n16_N8S21123C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C3D0Ev,_ZTv0_n16_N8S21123C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C3D1Ev,_ZTv0_n12_N8S21123C3D1Ev)();
extern void ABISELECT(_ZThn368_N8S21123C3D1Ev,_ZThn256_N8S21123C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C3D0Ev,_ZTv0_n12_N8S21123C3D0Ev)();
extern void ABISELECT(_ZThn368_N8S21123C3D0Ev,_ZThn256_N8S21123C3D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C3__8S21123C1[] = {
  0,
  ABISELECT(-368,-256),
  ABISELECT(-368,-256),
  (VTBL_ENTRY)&(_ZTI8S21123C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C3D1Ev,_ZTv0_n12_N8S21123C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C3D0Ev,_ZTv0_n12_N8S21123C3D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void _ZN8S21123C4D1Ev();
extern void _ZN8S21123C4D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C4__8S21123C1[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C4[0]),
  (VTBL_ENTRY)&_ZN8S21123C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C4D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C6D1Ev();
extern void _ZN8S21123C6D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C68S21123C4__8S21123C1[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&_ZN8S21123C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C78S21123C68S21123C4__8S21123C1[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZThn312_N8S21123C7D1Ev,_ZThn228_N8S21123C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void ABISELECT(_ZThn312_N8S21123C7D0Ev,_ZThn228_N8S21123C7D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C78S21123C68S21123C4__8S21123C1[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev)();
extern void ABISELECT(_ZThn312_N8S21123C6D1Ev,_ZThn228_N8S21123C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev)();
extern void ABISELECT(_ZThn312_N8S21123C6D0Ev,_ZThn228_N8S21123C6D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C68S21123C4__8S21123C1[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev)();
extern void ABISELECT(_ZThn312_N8S21123C4D1Ev,_ZThn228_N8S21123C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev)();
extern void ABISELECT(_ZThn312_N8S21123C4D0Ev,_ZThn228_N8S21123C4D0Ev)() __attribute__((weak));
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C4__8S21123C1[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S21123C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void _ZN8S21123C8D1Ev();
extern void _ZN8S21123C8D0Ev();
extern void _ZN9S21123C142v4Ev();
extern void _ZN8S21123C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C8__8S21123C1[] = {
  ABISELECT(2016,1480),
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C8[0]),
  (VTBL_ENTRY)&_ZN8S21123C8D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C8D0Ev,
  (VTBL_ENTRY)&_ZN9S21123C142v4Ev,
  (VTBL_ENTRY)&_ZN8S21123C82v5Ev,
};
extern void _ZN9S21123C14D1Ev();
extern void _ZN9S21123C14D0Ev();
extern void _ZN9S21123C142v4Ev();
static  VTBL_ENTRY _tg__ZTV9S21123C148S21123C8__8S21123C1[] = {
  ABISELECT(1904,1420),
  ABISELECT(-104,-84),
  0,
  (VTBL_ENTRY)&(_ZTI9S21123C14[0]),
  (VTBL_ENTRY)&_ZN9S21123C14D1Ev,
  (VTBL_ENTRY)&_ZN9S21123C14D0Ev,
  (VTBL_ENTRY)&_ZN9S21123C142v4Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21123C14D1Ev,_ZTv0_n12_N9S21123C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21123C14D0Ev,_ZTv0_n12_N9S21123C14D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__9S21123C148S21123C8__8S21123C1[] = {
  0,
  ABISELECT(104,84),
  ABISELECT(104,84),
  (VTBL_ENTRY)&(_ZTI9S21123C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C14D1Ev,_ZTv0_n12_N9S21123C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C14D0Ev,_ZTv0_n12_N9S21123C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S21123C14D1Ev,_ZTv0_n16_N9S21123C14D1Ev)();
extern void ABISELECT(_ZThn1904_N9S21123C14D1Ev,_ZThn1420_N9S21123C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21123C14D0Ev,_ZTv0_n16_N9S21123C14D0Ev)();
extern void ABISELECT(_ZThn1904_N9S21123C14D0Ev,_ZThn1420_N9S21123C14D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C6__9S21123C148S21123C8__8S21123C1[] = {
  0,
  0,
  ABISELECT(-1904,-1420),
  ABISELECT(-2008,-1504),
  ABISELECT(-1904,-1420),
  (VTBL_ENTRY)&(_ZTI9S21123C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C14D1Ev,_ZTv0_n16_N9S21123C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C14D0Ev,_ZTv0_n16_N9S21123C14D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S21123C8D1Ev,_ZTv0_n16_N8S21123C8D1Ev)();
extern void ABISELECT(_ZThn1904_N8S21123C8D1Ev,_ZThn1420_N8S21123C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S21123C8D0Ev,_ZTv0_n16_N8S21123C8D0Ev)();
extern void ABISELECT(_ZThn1904_N8S21123C8D0Ev,_ZThn1420_N8S21123C8D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C6__8S21123C8__8S21123C1[] = {
  0,
  0,
  ABISELECT(-1904,-1420),
  ABISELECT(-2008,-1504),
  ABISELECT(-1904,-1420),
  (VTBL_ENTRY)&(_ZTI8S21123C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C8D1Ev,_ZTv0_n16_N8S21123C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C8D0Ev,_ZTv0_n16_N8S21123C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C8D1Ev,_ZTv0_n12_N8S21123C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C8D0Ev,_ZTv0_n12_N8S21123C8D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C8__8S21123C1[] = {
  0,
  ABISELECT(104,84),
  ABISELECT(104,84),
  (VTBL_ENTRY)&(_ZTI8S21123C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C8D1Ev,_ZTv0_n12_N8S21123C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C8D0Ev,_ZTv0_n12_N8S21123C8D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S21123C8D1Ev,_ZTv0_n20_N8S21123C8D1Ev)();
extern void ABISELECT(_ZThn2016_N8S21123C8D1Ev,_ZThn1480_N8S21123C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21123C8D0Ev,_ZTv0_n20_N8S21123C8D0Ev)();
extern void ABISELECT(_ZThn2016_N8S21123C8D0Ev,_ZThn1480_N8S21123C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21123C9__8S21123C8__8S21123C1[] = {
  ABISELECT(-2016,-1480),
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  ABISELECT(-2016,-1480),
  (VTBL_ENTRY)&(_ZTI8S21123C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21123C8D1Ev,_ZTv0_n20_N8S21123C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21123C8D0Ev,_ZTv0_n20_N8S21123C8D0Ev),
};
extern void _ZN8S21123C6D1Ev();
extern void _ZN8S21123C6D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C6__A1__8S21123C1[] = {
  ABISELECT(-2008,-1504),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&_ZN8S21123C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C78S21123C6__A1__8S21123C1[] = {
  ABISELECT(-2008,-1504),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C78S21123C6__A1__8S21123C1[] = {
  0,
  ABISELECT(2008,1504),
  ABISELECT(2008,1504),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C6__A1__8S21123C1[] = {
  0,
  ABISELECT(2008,1504),
  ABISELECT(2008,1504),
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void _ZN8S21123C9D1Ev();
extern void _ZN8S21123C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C9__8S21123C1[] = {
  ABISELECT(-2120,-1564),
  ABISELECT(-112,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C9[0]),
  (VTBL_ENTRY)&_ZN8S21123C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C9D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S21123C9D1Ev,_ZTv0_n16_N8S21123C9D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S21123C9D0Ev,_ZTv0_n16_N8S21123C9D0Ev)();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C6__8S21123C9__8S21123C1[] = {
  0,
  0,
  ABISELECT(112,60),
  ABISELECT(-2008,-1504),
  ABISELECT(112,60),
  (VTBL_ENTRY)&(_ZTI8S21123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C9D1Ev,_ZTv0_n16_N8S21123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C9D0Ev,_ZTv0_n16_N8S21123C9D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C9D1Ev,_ZTv0_n12_N8S21123C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C9D0Ev,_ZTv0_n12_N8S21123C9D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C9__8S21123C1[] = {
  0,
  ABISELECT(2120,1564),
  ABISELECT(2120,1564),
  (VTBL_ENTRY)&(_ZTI8S21123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C9D1Ev,_ZTv0_n12_N8S21123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C9D0Ev,_ZTv0_n12_N8S21123C9D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void _ZN9S21123C17D1Ev();
extern void _ZN9S21123C17D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV9S21123C17__8S21123C1[] = {
  ABISELECT(12464,9196),
  ABISELECT(12432,9172),
  ABISELECT(10896,8044),
  ABISELECT(-10208,-7548),
  ABISELECT(-12216,-9052),
  0,
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&_ZN9S21123C17D1Ev,
  (VTBL_ENTRY)&_ZN9S21123C17D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C4D1Ev();
extern void _ZN8S21123C4D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C49S21123C17__A1__8S21123C1[] = {
  ABISELECT(-12216,-9052),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C4[0]),
  (VTBL_ENTRY)&_ZN8S21123C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C4D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C6D1Ev();
extern void _ZN8S21123C6D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C68S21123C49S21123C17__A2__8S21123C1[] = {
  ABISELECT(-12216,-9052),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&_ZN8S21123C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C78S21123C68S21123C49S21123C17__A2__8S21123C1[] = {
  ABISELECT(-12216,-9052),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C78S21123C68S21123C49S21123C17__A2__8S21123C1[] = {
  0,
  ABISELECT(12216,9052),
  ABISELECT(12216,9052),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C68S21123C49S21123C17__A2__8S21123C1[] = {
  0,
  ABISELECT(12216,9052),
  ABISELECT(12216,9052),
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C49S21123C17__A1__8S21123C1[] = {
  0,
  ABISELECT(12216,9052),
  ABISELECT(12216,9052),
  (VTBL_ENTRY)&(_ZTI8S21123C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void _ZN8S21123C9D1Ev();
extern void _ZN8S21123C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C99S21123C17__A1__8S21123C1[] = {
  ABISELECT(-12536,-9280),
  ABISELECT(-10528,-7776),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C9[0]),
  (VTBL_ENTRY)&_ZN8S21123C9D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C9D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S21123C9D1Ev,_ZTv0_n16_N8S21123C9D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S21123C9D0Ev,_ZTv0_n16_N8S21123C9D0Ev)();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C6__8S21123C99S21123C17__A1__8S21123C1[] = {
  0,
  0,
  ABISELECT(10528,7776),
  ABISELECT(-2008,-1504),
  ABISELECT(10528,7776),
  (VTBL_ENTRY)&(_ZTI8S21123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C9D1Ev,_ZTv0_n16_N8S21123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S21123C9D0Ev,_ZTv0_n16_N8S21123C9D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C9D1Ev,_ZTv0_n12_N8S21123C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C9D0Ev,_ZTv0_n12_N8S21123C9D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C99S21123C17__A1__8S21123C1[] = {
  0,
  ABISELECT(12536,9280),
  ABISELECT(12536,9280),
  (VTBL_ENTRY)&(_ZTI8S21123C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C9D1Ev,_ZTv0_n12_N8S21123C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C9D0Ev,_ZTv0_n12_N8S21123C9D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21123C17D1Ev,_ZTv0_n12_N9S21123C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21123C17D0Ev,_ZTv0_n12_N9S21123C17D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__9S21123C17__8S21123C1[] = {
  0,
  ABISELECT(12216,9052),
  ABISELECT(12216,9052),
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C17D1Ev,_ZTv0_n12_N9S21123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C17D0Ev,_ZTv0_n12_N9S21123C17D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S21123C17D1Ev,_ZTv0_n16_N9S21123C17D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S21123C17D0Ev,_ZTv0_n16_N9S21123C17D0Ev)();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C6__A1__9S21123C17__8S21123C1[] = {
  0,
  0,
  ABISELECT(10208,7548),
  ABISELECT(-2008,-1504),
  ABISELECT(10208,7548),
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C17D1Ev,_ZTv0_n16_N9S21123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C17D0Ev,_ZTv0_n16_N9S21123C17D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZThn320_N9S21123C17D1Ev,_ZThn228_N9S21123C17D1Ev)();
extern void ABISELECT(_ZThn320_N9S21123C17D0Ev,_ZThn228_N9S21123C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S21123C9__9S21123C17__8S21123C1[] = {
  ABISELECT(-12536,-9280),
  ABISELECT(-10528,-7776),
  ABISELECT(-320,-228),
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N9S21123C17D1Ev,_ZThn228_N9S21123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N9S21123C17D0Ev,_ZThn228_N9S21123C17D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S21123C17D1Ev,_ZTv0_n20_N9S21123C17D1Ev)();
extern void ABISELECT(_ZThn10896_N9S21123C17D1Ev,_ZThn8044_N9S21123C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S21123C17D0Ev,_ZTv0_n20_N9S21123C17D0Ev)();
extern void ABISELECT(_ZThn10896_N9S21123C17D0Ev,_ZThn8044_N9S21123C17D0Ev)() __attribute__((weak));
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV9S21123C11__9S21123C17__8S21123C1[] = {
  0,
  0,
  ABISELECT(-10896,-8044),
  ABISELECT(1536,1128),
  ABISELECT(-23112,-17096),
  ABISELECT(-10896,-8044),
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21123C17D1Ev,_ZTv0_n20_N9S21123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S21123C17D0Ev,_ZTv0_n20_N9S21123C17D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZTvn104_n40_N9S21123C17D1Ev,_ZTvn60_n20_N9S21123C17D1Ev)();
extern void ABISELECT(_ZTvn104_n40_N9S21123C17D0Ev,_ZTvn60_n20_N9S21123C17D0Ev)();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C49S21123C11__A1__9S21123C17__8S21123C1[] = {
  ABISELECT(-23216,-17156),
  ABISELECT(-11000,-8104),
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N9S21123C17D1Ev,_ZTvn60_n20_N9S21123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N9S21123C17D0Ev,_ZTvn60_n20_N9S21123C17D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZTvn416_n40_N9S21123C17D1Ev,_ZTvn288_n20_N9S21123C17D1Ev)();
extern void ABISELECT(_ZTvn416_n40_N9S21123C17D0Ev,_ZTvn288_n20_N9S21123C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3052C129S21123C11__9S21123C17__8S21123C1[] = {
  ABISELECT(-11312,-8332),
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N9S21123C17D1Ev,_ZTvn288_n20_N9S21123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N9S21123C17D0Ev,_ZTvn288_n20_N9S21123C17D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S21123C17D1Ev,_ZTv0_n16_N9S21123C17D1Ev)();
extern void ABISELECT(_ZThn12432_N9S21123C17D1Ev,_ZThn9172_N9S21123C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21123C17D0Ev,_ZTv0_n16_N9S21123C17D0Ev)();
extern void ABISELECT(_ZThn12432_N9S21123C17D0Ev,_ZThn9172_N9S21123C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21123C7__A4__9S21123C17__8S21123C1[] = {
  ABISELECT(-12432,-9172),
  ABISELECT(-24648,-18224),
  ABISELECT(-12432,-9172),
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C17D1Ev,_ZTv0_n16_N9S21123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C17D0Ev,_ZTv0_n16_N9S21123C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S21123C17D1Ev,_ZTv0_n12_N9S21123C17D1Ev)();
extern void ABISELECT(_ZThn12464_N9S21123C17D1Ev,_ZThn9196_N9S21123C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S21123C17D0Ev,_ZTv0_n12_N9S21123C17D0Ev)();
extern void ABISELECT(_ZThn12464_N9S21123C17D0Ev,_ZThn9196_N9S21123C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3052C12__A1__9S21123C17__8S21123C1[] = {
  ABISELECT(-12464,-9196),
  ABISELECT(-12464,-9196),
  (VTBL_ENTRY)&(_ZTI9S21123C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C17D1Ev,_ZTv0_n12_N9S21123C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C17D0Ev,_ZTv0_n12_N9S21123C17D0Ev),
};
extern void _ZN9S21123C11D1Ev();
extern void _ZN9S21123C11D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV9S21123C11__8S21123C1[] = {
  ABISELECT(1536,1128),
  ABISELECT(-23112,-17096),
  0,
  (VTBL_ENTRY)&(_ZTI9S21123C11[0]),
  (VTBL_ENTRY)&_ZN9S21123C11D1Ev,
  (VTBL_ENTRY)&_ZN9S21123C11D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C6D1Ev();
extern void _ZN8S21123C6D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C69S21123C11__A3__8S21123C1[] = {
  ABISELECT(-23112,-17096),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&_ZN8S21123C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C78S21123C69S21123C11__A3__8S21123C1[] = {
  ABISELECT(-23112,-17096),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C78S21123C69S21123C11__A3__8S21123C1[] = {
  0,
  ABISELECT(23112,17096),
  ABISELECT(23112,17096),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C69S21123C11__A3__8S21123C1[] = {
  0,
  ABISELECT(23112,17096),
  ABISELECT(23112,17096),
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void _ZN8S21123C4D1Ev();
extern void _ZN8S21123C4D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C49S21123C11__A2__8S21123C1[] = {
  ABISELECT(-23216,-17156),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C4[0]),
  (VTBL_ENTRY)&_ZN8S21123C4D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C4D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C6D1Ev();
extern void _ZN8S21123C6D0Ev();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C68S21123C49S21123C11__A4__8S21123C1[] = {
  ABISELECT(-23216,-17156),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&_ZN8S21123C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C78S21123C68S21123C49S21123C11__A4__8S21123C1[] = {
  ABISELECT(-23216,-17156),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C78S21123C68S21123C49S21123C11__A4__8S21123C1[] = {
  0,
  ABISELECT(23216,17156),
  ABISELECT(23216,17156),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C68S21123C49S21123C11__A4__8S21123C1[] = {
  0,
  ABISELECT(23216,17156),
  ABISELECT(23216,17156),
  (VTBL_ENTRY)&(_ZTI8S21123C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C49S21123C11__A2__8S21123C1[] = {
  0,
  ABISELECT(23216,17156),
  ABISELECT(23216,17156),
  (VTBL_ENTRY)&(_ZTI8S21123C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S21123C11D1Ev,_ZTv0_n12_N9S21123C11D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S21123C11D0Ev,_ZTv0_n12_N9S21123C11D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__9S21123C11__8S21123C1[] = {
  0,
  ABISELECT(23112,17096),
  ABISELECT(23112,17096),
  (VTBL_ENTRY)&(_ZTI9S21123C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C11D1Ev,_ZTv0_n12_N9S21123C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S21123C11D0Ev,_ZTv0_n12_N9S21123C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
extern void ABISELECT(_ZThn104_N9S21123C11D1Ev,_ZThn60_N9S21123C11D1Ev)();
extern void ABISELECT(_ZThn104_N9S21123C11D0Ev,_ZThn60_N9S21123C11D0Ev)();
extern void _ZN8S21123C62v2Ev();
extern void _ZN8S21123C62v3Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C4__9S21123C11__8S21123C1[] = {
  ABISELECT(-23216,-17156),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI9S21123C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S21123C11D1Ev,_ZThn60_N9S21123C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S21123C11D0Ev,_ZThn60_N9S21123C11D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C62v2Ev,
  (VTBL_ENTRY)&_ZN8S21123C62v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S21123C11D1Ev,_ZTv0_n16_N9S21123C11D1Ev)();
extern void ABISELECT(_ZThn1536_N9S21123C11D1Ev,_ZThn1128_N9S21123C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S21123C11D0Ev,_ZTv0_n16_N9S21123C11D0Ev)();
extern void ABISELECT(_ZThn1536_N9S21123C11D0Ev,_ZThn1128_N9S21123C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S21123C7__A2__9S21123C11__8S21123C1[] = {
  ABISELECT(-1536,-1128),
  ABISELECT(-24648,-18224),
  ABISELECT(-1536,-1128),
  (VTBL_ENTRY)&(_ZTI9S21123C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C11D1Ev,_ZTv0_n16_N9S21123C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S21123C11D0Ev,_ZTv0_n16_N9S21123C11D0Ev),
};
extern void _ZN8S21123C7D1Ev();
extern void _ZN8S21123C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C7__A5__8S21123C1[] = {
  ABISELECT(-24648,-18224),
  0,
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&_ZN8S21123C7D1Ev,
  (VTBL_ENTRY)&_ZN8S21123C7D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev)();
extern void _ZN8S21123C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S21123C5__8S21123C7__A5__8S21123C1[] = {
  0,
  ABISELECT(24648,18224),
  ABISELECT(24648,18224),
  (VTBL_ENTRY)&(_ZTI8S21123C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev),
  (VTBL_ENTRY)&_ZN8S21123C52v1Ev,
};
static  VTT_ENTRY vtt_S21123C1[] = {
  {&(_ZTV8S21123C1[13]),  13,146},
  {&(_ZTV8S21123C1[31]),  31,146},
  {&(_ZTV8S21123C1[45]),  45,146},
  {&(_ZTV8S21123C1[53]),  53,146},
  {&(_ZTV8S21123C1[61]),  61,146},
  {&(_ZTV8S21123C1[72]),  72,146},
  {&(_ZTV8S21123C1[82]),  82,146},
  {&(_ZTV8S21123C1[91]),  91,146},
  {&(_ZTV8S21123C1[103]),  103,146},
  {&(_ZTV8S21123C1[111]),  111,146},
  {&(_ZTV8S21123C1[120]),  120,146},
  {&(_ZTV8S21123C1[127]),  127,146},
  {&(_ZTV8S21123C1[133]),  133,146},
  {&(_ZTV8S21123C1[139]),  139,146},
  {&(_ZTV8S21123C1[144]),  144,146},
  {&(_ZTV8S21123C1[37]),  37,146},
  {&(_tg__ZTV8S21123C2__8S21123C1[12]),  12,16},
  {&(_tg__ZTV8S21123C3__8S21123C2__8S21123C1[5]),  5,7},
  {&(_tg__ZTV8S21123C4__8S21123C2__8S21123C1[6]),  6,10},
  {&(_tg__ZTV8S21123C5__8S21123C2__8S21123C1[4]),  4,7},
  {&(_tg__ZTV8S21123C8__8S21123C2__8S21123C1[8]),  8,12},
  {&(_tg__ZTV8S21123C6__A1__8S21123C2__8S21123C1[6]),  6,10},
  {&(_tg__ZTV8S21123C9__8S21123C2__8S21123C1[5]),  5,7},
  {&(_tg__ZTV9S21123C17__8S21123C2__8S21123C1[10]),  10,14},
  {&(_tg__ZTV8S21123C99S21123C17__A1__8S21123C2__8S21123C1[4]),  4,6},
  {&(_tg__ZTV9S21123C11__8S21123C2__8S21123C1[7]),  7,11},
  {&(_tg__ZTV8S21123C49S21123C11__A2__8S21123C2__8S21123C1[3]),  3,7},
  {&(_tg__ZTV8S3052C129S21123C11__A1__8S21123C2__8S21123C1[2]),  2,4},
  {&(_tg__ZTV8S21123C7__A5__8S21123C2__8S21123C1[4]),  4,6},
  {&(_tg__ZTV8S3052C12__A2__8S21123C2__8S21123C1[3]),  3,5},
  {&(_tg__ZTV8S21123C3__8S21123C1[4]),  4,6},
  {&(_tg__ZTV8S21123C4__8S21123C3__8S21123C1[6]),  6,10},
  {&(_tg__ZTV8S21123C5__8S21123C3__8S21123C1[4]),  4,7},
  {&(_tg__ZTV8S21123C4__8S21123C1[3]),  3,7},
  {&(_tg__ZTV8S21123C68S21123C4__8S21123C1[3]),  3,7},
  {&(_tg__ZTV8S21123C78S21123C68S21123C4__8S21123C1[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C78S21123C68S21123C4__8S21123C1[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C68S21123C4__8S21123C1[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C4__8S21123C1[4]),  4,7},
  {&(_tg__ZTV8S21123C8__8S21123C1[5]),  5,9},
  {&(_tg__ZTV9S21123C148S21123C8__8S21123C1[4]),  4,7},
  {&(_tg__ZTV8S21123C5__9S21123C148S21123C8__8S21123C1[4]),  4,7},
  {&(_tg__ZTV8S21123C6__9S21123C148S21123C8__8S21123C1[6]),  6,10},
  {&(_tg__ZTV8S21123C6__8S21123C8__8S21123C1[6]),  6,10},
  {&(_tg__ZTV8S21123C5__8S21123C8__8S21123C1[4]),  4,7},
  {&(_tg__ZTV8S21123C9__8S21123C8__8S21123C1[5]),  5,7},
  {&(_tg__ZTV8S21123C6__A1__8S21123C1[3]),  3,7},
  {&(_tg__ZTV8S21123C78S21123C6__A1__8S21123C1[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C78S21123C6__A1__8S21123C1[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C6__A1__8S21123C1[4]),  4,7},
  {&(_tg__ZTV8S21123C9__8S21123C1[4]),  4,6},
  {&(_tg__ZTV8S21123C6__8S21123C9__8S21123C1[6]),  6,10},
  {&(_tg__ZTV8S21123C5__8S21123C9__8S21123C1[4]),  4,7},
  {&(_tg__ZTV9S21123C17__8S21123C1[7]),  7,11},
  {&(_tg__ZTV8S21123C49S21123C17__A1__8S21123C1[3]),  3,7},
  {&(_tg__ZTV8S21123C68S21123C49S21123C17__A2__8S21123C1[3]),  3,7},
  {&(_tg__ZTV8S21123C78S21123C68S21123C49S21123C17__A2__8S21123C1[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C78S21123C68S21123C49S21123C17__A2__8S21123C1[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C68S21123C49S21123C17__A2__8S21123C1[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C49S21123C17__A1__8S21123C1[4]),  4,7},
  {&(_tg__ZTV8S21123C99S21123C17__A1__8S21123C1[4]),  4,6},
  {&(_tg__ZTV8S21123C6__8S21123C99S21123C17__A1__8S21123C1[6]),  6,10},
  {&(_tg__ZTV8S21123C5__8S21123C99S21123C17__A1__8S21123C1[4]),  4,7},
  {&(_tg__ZTV8S21123C5__9S21123C17__8S21123C1[4]),  4,7},
  {&(_tg__ZTV8S21123C6__A1__9S21123C17__8S21123C1[6]),  6,10},
  {&(_tg__ZTV8S21123C9__9S21123C17__8S21123C1[4]),  4,6},
  {&(_tg__ZTV9S21123C11__9S21123C17__8S21123C1[7]),  7,11},
  {&(_tg__ZTV8S21123C49S21123C11__A1__9S21123C17__8S21123C1[3]),  3,7},
  {&(_tg__ZTV8S3052C129S21123C11__9S21123C17__8S21123C1[2]),  2,4},
  {&(_tg__ZTV8S21123C7__A4__9S21123C17__8S21123C1[4]),  4,6},
  {&(_tg__ZTV8S3052C12__A1__9S21123C17__8S21123C1[3]),  3,5},
  {&(_tg__ZTV9S21123C11__8S21123C1[4]),  4,8},
  {&(_tg__ZTV8S21123C69S21123C11__A3__8S21123C1[3]),  3,7},
  {&(_tg__ZTV8S21123C78S21123C69S21123C11__A3__8S21123C1[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C78S21123C69S21123C11__A3__8S21123C1[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C69S21123C11__A3__8S21123C1[4]),  4,7},
  {&(_tg__ZTV8S21123C49S21123C11__A2__8S21123C1[3]),  3,7},
  {&(_tg__ZTV8S21123C68S21123C49S21123C11__A4__8S21123C1[3]),  3,7},
  {&(_tg__ZTV8S21123C78S21123C68S21123C49S21123C11__A4__8S21123C1[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C78S21123C68S21123C49S21123C11__A4__8S21123C1[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C68S21123C49S21123C11__A4__8S21123C1[4]),  4,7},
  {&(_tg__ZTV8S21123C5__8S21123C49S21123C11__A2__8S21123C1[4]),  4,7},
  {&(_tg__ZTV8S21123C5__9S21123C11__8S21123C1[4]),  4,7},
  {&(_tg__ZTV8S21123C4__9S21123C11__8S21123C1[3]),  3,7},
  {&(_tg__ZTV8S21123C7__A2__9S21123C11__8S21123C1[4]),  4,6},
  {&(_tg__ZTV8S21123C7__A5__8S21123C1[3]),  3,5},
  {&(_tg__ZTV8S21123C5__8S21123C7__A5__8S21123C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S21123C1[];
extern  VTBL_ENTRY _ZTV8S21123C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21123C1[];
static VTBL_ENTRY alt_thunk_names55[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21123C11D0Ev,_ZTv0_n16_N9S21123C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N9S21123C11D0Ev,_ZThn1128_N9S21123C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21123C11D1Ev,_ZTv0_n16_N9S21123C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N9S21123C11D1Ev,_ZThn1128_N9S21123C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21123C17D0Ev,_ZTv0_n12_N9S21123C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12464_N9S21123C17D0Ev,_ZThn9196_N9S21123C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S21123C17D1Ev,_ZTv0_n12_N9S21123C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12464_N9S21123C17D1Ev,_ZThn9196_N9S21123C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21123C17D0Ev,_ZTv0_n16_N9S21123C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12432_N9S21123C17D0Ev,_ZThn9172_N9S21123C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21123C17D1Ev,_ZTv0_n16_N9S21123C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12432_N9S21123C17D1Ev,_ZThn9172_N9S21123C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21123C17D0Ev,_ZTv0_n20_N9S21123C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10896_N9S21123C17D0Ev,_ZThn8044_N9S21123C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S21123C17D1Ev,_ZTv0_n20_N9S21123C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10896_N9S21123C17D1Ev,_ZThn8044_N9S21123C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21123C8D0Ev,_ZTv0_n20_N8S21123C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N8S21123C8D0Ev,_ZThn1480_N8S21123C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21123C8D1Ev,_ZTv0_n20_N8S21123C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2016_N8S21123C8D1Ev,_ZThn1480_N8S21123C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21123C8D0Ev,_ZTv0_n16_N8S21123C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N8S21123C8D0Ev,_ZThn1420_N8S21123C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21123C8D1Ev,_ZTv0_n16_N8S21123C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N8S21123C8D1Ev,_ZThn1420_N8S21123C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21123C14D0Ev,_ZTv0_n16_N9S21123C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S21123C14D0Ev,_ZThn1420_N9S21123C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S21123C14D1Ev,_ZTv0_n16_N9S21123C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1904_N9S21123C14D1Ev,_ZThn1420_N9S21123C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C4D0Ev,_ZTv0_n12_N8S21123C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21123C4D0Ev,_ZThn228_N8S21123C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C4D1Ev,_ZTv0_n12_N8S21123C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21123C4D1Ev,_ZThn228_N8S21123C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C6D0Ev,_ZTv0_n12_N8S21123C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21123C6D0Ev,_ZThn228_N8S21123C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C6D1Ev,_ZTv0_n12_N8S21123C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21123C6D1Ev,_ZThn228_N8S21123C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C7D0Ev,_ZTv0_n12_N8S21123C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21123C7D0Ev,_ZThn228_N8S21123C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C7D1Ev,_ZTv0_n12_N8S21123C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S21123C7D1Ev,_ZThn228_N8S21123C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C3D0Ev,_ZTv0_n12_N8S21123C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S21123C3D0Ev,_ZThn256_N8S21123C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C3D1Ev,_ZTv0_n12_N8S21123C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S21123C3D1Ev,_ZThn256_N8S21123C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21123C3D0Ev,_ZTv0_n16_N8S21123C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21123C3D0Ev,_ZThn28_N8S21123C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21123C3D1Ev,_ZTv0_n16_N8S21123C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S21123C3D1Ev,_ZThn28_N8S21123C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S21123C2D0Ev,_ZTv0_n32_N8S21123C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33584_N8S21123C2D0Ev,_ZThn24884_N8S21123C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S21123C2D1Ev,_ZTv0_n32_N8S21123C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33584_N8S21123C2D1Ev,_ZThn24884_N8S21123C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21123C2D0Ev,_ZTv0_n24_N8S21123C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21472_N8S21123C2D0Ev,_ZThn15916_N8S21123C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21123C2D1Ev,_ZTv0_n24_N8S21123C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21472_N8S21123C2D1Ev,_ZThn15916_N8S21123C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C2D0Ev,_ZTv0_n12_N8S21123C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46048_N8S21123C2D0Ev,_ZThn34080_N8S21123C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21368_N8S21123C2D0Ev,_ZThn15832_N8S21123C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C2D1Ev,_ZTv0_n12_N8S21123C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46048_N8S21123C2D1Ev,_ZThn34080_N8S21123C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21368_N8S21123C2D1Ev,_ZThn15832_N8S21123C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21123C2D0Ev,_ZTv0_n16_N8S21123C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46016_N8S21123C2D0Ev,_ZThn34056_N8S21123C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn23376_N8S21123C2D0Ev,_ZThn17336_N8S21123C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21056_N8S21123C2D0Ev,_ZThn15604_N8S21123C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21123C2D1Ev,_ZTv0_n16_N8S21123C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46016_N8S21123C2D1Ev,_ZThn34056_N8S21123C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn23376_N8S21123C2D1Ev,_ZThn17336_N8S21123C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21056_N8S21123C2D1Ev,_ZThn15604_N8S21123C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21123C2D0Ev,_ZTv0_n20_N8S21123C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44480_N8S21123C2D0Ev,_ZThn32928_N8S21123C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn23488_N8S21123C2D0Ev,_ZThn17396_N8S21123C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21000_N8S21123C2D0Ev,_ZThn15576_N8S21123C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21123C2D1Ev,_ZTv0_n20_N8S21123C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44480_N8S21123C2D1Ev,_ZThn32928_N8S21123C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn23488_N8S21123C2D1Ev,_ZThn17396_N8S21123C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21000_N8S21123C2D1Ev,_ZThn15576_N8S21123C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S21123C1D0Ev,_ZTv0_n32_N8S21123C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33664_N8S21123C1D0Ev,_ZThn24924_N8S21123C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S21123C1D1Ev,_ZTv0_n32_N8S21123C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33664_N8S21123C1D1Ev,_ZThn24924_N8S21123C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21123C1D0Ev,_ZTv0_n24_N8S21123C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21552_N8S21123C1D0Ev,_ZThn15956_N8S21123C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S21123C1D1Ev,_ZTv0_n24_N8S21123C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn21552_N8S21123C1D1Ev,_ZThn15956_N8S21123C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C1D0Ev,_ZTv0_n12_N8S21123C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46128_N8S21123C1D0Ev,_ZThn34120_N8S21123C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21448_N8S21123C1D0Ev,_ZThn15872_N8S21123C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S21123C1D1Ev,_ZTv0_n12_N8S21123C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46128_N8S21123C1D1Ev,_ZThn34120_N8S21123C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21448_N8S21123C1D1Ev,_ZThn15872_N8S21123C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21123C1D0Ev,_ZTv0_n16_N8S21123C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46096_N8S21123C1D0Ev,_ZThn34096_N8S21123C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn23456_N8S21123C1D0Ev,_ZThn17376_N8S21123C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21123C1D0Ev,_ZThn15644_N8S21123C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S21123C1D1Ev,_ZTv0_n16_N8S21123C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn46096_N8S21123C1D1Ev,_ZThn34096_N8S21123C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn23456_N8S21123C1D1Ev,_ZThn17376_N8S21123C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21136_N8S21123C1D1Ev,_ZThn15644_N8S21123C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21123C1D0Ev,_ZTv0_n20_N8S21123C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44560_N8S21123C1D0Ev,_ZThn32968_N8S21123C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn23568_N8S21123C1D0Ev,_ZThn17436_N8S21123C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21080_N8S21123C1D0Ev,_ZThn15616_N8S21123C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21123C1D1Ev,_ZTv0_n20_N8S21123C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn44560_N8S21123C1D1Ev,_ZThn32968_N8S21123C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn23568_N8S21123C1D1Ev,_ZThn17436_N8S21123C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn21080_N8S21123C1D1Ev,_ZThn15616_N8S21123C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S21123C1D0Ev,_ZTv0_n60_N8S21123C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S21123C1D0Ev,_ZThn40_N8S21123C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n120_N8S21123C1D1Ev,_ZTv0_n60_N8S21123C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S21123C1D1Ev,_ZThn40_N8S21123C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21123C1 = {  "S21123C1", // class name
  bases_S21123C1, 30,
  &(vtc_S21123C1[0]), // expected_vtbl_contents
  &(vtt_S21123C1[0]), // expected_vtt_contents
  ABISELECT(46336,34268), // object size
  NSPAIRA(_ZTI8S21123C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21123C1),146, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21123C1),87, //virtual table table var
  28, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names55,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1575C4  {
  int s1575c4f0;
  __tsi64 s1575c4f1;
  void *s1575c4f2[4];
  int s1575c4f3[2];
  void *s1575c4f4;
  ::S3351C4_nt s1575c4f5;
  void *s1575c4f6[2];
  virtual  ~S1575C4(); // _ZN7S1575C4D1Ev
  virtual void  v8(); // _ZN7S1575C42v8Ev
  virtual void  v9(); // _ZN7S1575C42v9Ev
  virtual void  v10(); // _ZN7S1575C43v10Ev
  virtual void  v11(); // _ZN7S1575C43v11Ev
  virtual void  v12(); // _ZN7S1575C43v12Ev
  virtual void  v13(); // _ZN7S1575C43v13Ev
  virtual void  v14(); // _ZN7S1575C43v14Ev
  virtual void  v15(); // _ZN7S1575C43v15Ev
  virtual void  v16(); // _ZN7S1575C43v16Ev
  virtual void  v17(); // _ZN7S1575C43v17Ev
  virtual void  v18(); // _ZN7S1575C43v18Ev
  virtual void  v19(); // _ZN7S1575C43v19Ev
  virtual void  v20(); // _ZN7S1575C43v20Ev
  virtual void  v21(); // _ZN7S1575C43v21Ev
  virtual void  v22(); // _ZN7S1575C43v22Ev
  virtual void  v23(); // _ZN7S1575C43v23Ev
  virtual void  v24(); // _ZN7S1575C43v24Ev
  virtual void  v25(); // _ZN7S1575C43v25Ev
  virtual void  v26(); // _ZN7S1575C43v26Ev
  virtual void  v27(); // _ZN7S1575C43v27Ev
  virtual void  v28(); // _ZN7S1575C43v28Ev
  virtual void  v29(); // _ZN7S1575C43v29Ev
  virtual void  v30(); // _ZN7S1575C43v30Ev
  virtual void  v31(); // _ZN7S1575C43v31Ev
  virtual void  v32(); // _ZN7S1575C43v32Ev
  virtual void  v33(); // _ZN7S1575C43v33Ev
  virtual void  v34(); // _ZN7S1575C43v34Ev
  virtual void  v35(); // _ZN7S1575C43v35Ev
  virtual void  v36(); // _ZN7S1575C43v36Ev
  virtual void  v37(); // _ZN7S1575C43v37Ev
  virtual void  v38(); // _ZN7S1575C43v38Ev
  virtual void  v39(); // _ZN7S1575C43v39Ev
  virtual void  v40(); // _ZN7S1575C43v40Ev
  virtual void  v41(); // _ZN7S1575C43v41Ev
  virtual void  v42(); // _ZN7S1575C43v42Ev
  virtual void  v43(); // _ZN7S1575C43v43Ev
  virtual void  v44(); // _ZN7S1575C43v44Ev
  virtual void  v45(); // _ZN7S1575C43v45Ev
  virtual void  v46(); // _ZN7S1575C43v46Ev
  virtual void  v47(); // _ZN7S1575C43v47Ev
  virtual void  v48(); // _ZN7S1575C43v48Ev
  virtual void  v49(); // _ZN7S1575C43v49Ev
  virtual void  v50(); // _ZN7S1575C43v50Ev
  virtual void  v51(); // _ZN7S1575C43v51Ev
  virtual void  v52(); // _ZN7S1575C43v52Ev
  virtual void  v53(); // _ZN7S1575C43v53Ev
  virtual void  v54(); // _ZN7S1575C43v54Ev
  virtual void  v55(); // _ZN7S1575C43v55Ev
  virtual void  v56(); // _ZN7S1575C43v56Ev
  virtual void  v57(); // _ZN7S1575C43v57Ev
  virtual void  v58(); // _ZN7S1575C43v58Ev
  virtual void  v59(); // _ZN7S1575C43v59Ev
  virtual void  v60(); // _ZN7S1575C43v60Ev
  virtual void  v61(); // _ZN7S1575C43v61Ev
  virtual void  v62(); // _ZN7S1575C43v62Ev
  virtual void  v63(); // _ZN7S1575C43v63Ev
  virtual void  v64(); // _ZN7S1575C43v64Ev
  virtual void  v65(); // _ZN7S1575C43v65Ev
  virtual void  v66(); // _ZN7S1575C43v66Ev
  virtual void  v67(); // _ZN7S1575C43v67Ev
  virtual void  v68(); // _ZN7S1575C43v68Ev
  virtual void  v69(); // _ZN7S1575C43v69Ev
  virtual void  v70(); // _ZN7S1575C43v70Ev
  virtual void  v71(); // _ZN7S1575C43v71Ev
  S1575C4(); // tgen
};
//SIG(-1 S1575C4) 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]}


 S1575C4 ::~S1575C4(){ note_dtor("S1575C4", this);}
void  S1575C4 ::v8(){vfunc_called(this, "_ZN7S1575C42v8Ev");}
void  S1575C4 ::v9(){vfunc_called(this, "_ZN7S1575C42v9Ev");}
void  S1575C4 ::v10(){vfunc_called(this, "_ZN7S1575C43v10Ev");}
void  S1575C4 ::v11(){vfunc_called(this, "_ZN7S1575C43v11Ev");}
void  S1575C4 ::v12(){vfunc_called(this, "_ZN7S1575C43v12Ev");}
void  S1575C4 ::v13(){vfunc_called(this, "_ZN7S1575C43v13Ev");}
void  S1575C4 ::v14(){vfunc_called(this, "_ZN7S1575C43v14Ev");}
void  S1575C4 ::v15(){vfunc_called(this, "_ZN7S1575C43v15Ev");}
void  S1575C4 ::v16(){vfunc_called(this, "_ZN7S1575C43v16Ev");}
void  S1575C4 ::v17(){vfunc_called(this, "_ZN7S1575C43v17Ev");}
void  S1575C4 ::v18(){vfunc_called(this, "_ZN7S1575C43v18Ev");}
void  S1575C4 ::v19(){vfunc_called(this, "_ZN7S1575C43v19Ev");}
void  S1575C4 ::v20(){vfunc_called(this, "_ZN7S1575C43v20Ev");}
void  S1575C4 ::v21(){vfunc_called(this, "_ZN7S1575C43v21Ev");}
void  S1575C4 ::v22(){vfunc_called(this, "_ZN7S1575C43v22Ev");}
void  S1575C4 ::v23(){vfunc_called(this, "_ZN7S1575C43v23Ev");}
void  S1575C4 ::v24(){vfunc_called(this, "_ZN7S1575C43v24Ev");}
void  S1575C4 ::v25(){vfunc_called(this, "_ZN7S1575C43v25Ev");}
void  S1575C4 ::v26(){vfunc_called(this, "_ZN7S1575C43v26Ev");}
void  S1575C4 ::v27(){vfunc_called(this, "_ZN7S1575C43v27Ev");}
void  S1575C4 ::v28(){vfunc_called(this, "_ZN7S1575C43v28Ev");}
void  S1575C4 ::v29(){vfunc_called(this, "_ZN7S1575C43v29Ev");}
void  S1575C4 ::v30(){vfunc_called(this, "_ZN7S1575C43v30Ev");}
void  S1575C4 ::v31(){vfunc_called(this, "_ZN7S1575C43v31Ev");}
void  S1575C4 ::v32(){vfunc_called(this, "_ZN7S1575C43v32Ev");}
void  S1575C4 ::v33(){vfunc_called(this, "_ZN7S1575C43v33Ev");}
void  S1575C4 ::v34(){vfunc_called(this, "_ZN7S1575C43v34Ev");}
void  S1575C4 ::v35(){vfunc_called(this, "_ZN7S1575C43v35Ev");}
void  S1575C4 ::v36(){vfunc_called(this, "_ZN7S1575C43v36Ev");}
void  S1575C4 ::v37(){vfunc_called(this, "_ZN7S1575C43v37Ev");}
void  S1575C4 ::v38(){vfunc_called(this, "_ZN7S1575C43v38Ev");}
void  S1575C4 ::v39(){vfunc_called(this, "_ZN7S1575C43v39Ev");}
void  S1575C4 ::v40(){vfunc_called(this, "_ZN7S1575C43v40Ev");}
void  S1575C4 ::v41(){vfunc_called(this, "_ZN7S1575C43v41Ev");}
void  S1575C4 ::v42(){vfunc_called(this, "_ZN7S1575C43v42Ev");}
void  S1575C4 ::v43(){vfunc_called(this, "_ZN7S1575C43v43Ev");}
void  S1575C4 ::v44(){vfunc_called(this, "_ZN7S1575C43v44Ev");}
void  S1575C4 ::v45(){vfunc_called(this, "_ZN7S1575C43v45Ev");}
void  S1575C4 ::v46(){vfunc_called(this, "_ZN7S1575C43v46Ev");}
void  S1575C4 ::v47(){vfunc_called(this, "_ZN7S1575C43v47Ev");}
void  S1575C4 ::v48(){vfunc_called(this, "_ZN7S1575C43v48Ev");}
void  S1575C4 ::v49(){vfunc_called(this, "_ZN7S1575C43v49Ev");}
void  S1575C4 ::v50(){vfunc_called(this, "_ZN7S1575C43v50Ev");}
void  S1575C4 ::v51(){vfunc_called(this, "_ZN7S1575C43v51Ev");}
void  S1575C4 ::v52(){vfunc_called(this, "_ZN7S1575C43v52Ev");}
void  S1575C4 ::v53(){vfunc_called(this, "_ZN7S1575C43v53Ev");}
void  S1575C4 ::v54(){vfunc_called(this, "_ZN7S1575C43v54Ev");}
void  S1575C4 ::v55(){vfunc_called(this, "_ZN7S1575C43v55Ev");}
void  S1575C4 ::v56(){vfunc_called(this, "_ZN7S1575C43v56Ev");}
void  S1575C4 ::v57(){vfunc_called(this, "_ZN7S1575C43v57Ev");}
void  S1575C4 ::v58(){vfunc_called(this, "_ZN7S1575C43v58Ev");}
void  S1575C4 ::v59(){vfunc_called(this, "_ZN7S1575C43v59Ev");}
void  S1575C4 ::v60(){vfunc_called(this, "_ZN7S1575C43v60Ev");}
void  S1575C4 ::v61(){vfunc_called(this, "_ZN7S1575C43v61Ev");}
void  S1575C4 ::v62(){vfunc_called(this, "_ZN7S1575C43v62Ev");}
void  S1575C4 ::v63(){vfunc_called(this, "_ZN7S1575C43v63Ev");}
void  S1575C4 ::v64(){vfunc_called(this, "_ZN7S1575C43v64Ev");}
void  S1575C4 ::v65(){vfunc_called(this, "_ZN7S1575C43v65Ev");}
void  S1575C4 ::v66(){vfunc_called(this, "_ZN7S1575C43v66Ev");}
void  S1575C4 ::v67(){vfunc_called(this, "_ZN7S1575C43v67Ev");}
void  S1575C4 ::v68(){vfunc_called(this, "_ZN7S1575C43v68Ev");}
void  S1575C4 ::v69(){vfunc_called(this, "_ZN7S1575C43v69Ev");}
void  S1575C4 ::v70(){vfunc_called(this, "_ZN7S1575C43v70Ev");}
void  S1575C4 ::v71(){vfunc_called(this, "_ZN7S1575C43v71Ev");}
S1575C4 ::S1575C4(){ note_ctor("S1575C4", this);} // tgen

static void Test_S1575C4()
{
  extern Class_Descriptor cd_S1575C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1575C4, buf);
    S1575C4 *dp, &lv = *(dp=new (buf) S1575C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1575C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1575C4)");
    check_field_offset(lv, s1575c4f0, ABISELECT(8,4), "S1575C4.s1575c4f0");
    check_field_offset(lv, s1575c4f1, ABISELECT(16,8), "S1575C4.s1575c4f1");
    check_field_offset(lv, s1575c4f2, ABISELECT(24,16), "S1575C4.s1575c4f2");
    check_field_offset(lv, s1575c4f3, ABISELECT(56,32), "S1575C4.s1575c4f3");
    check_field_offset(lv, s1575c4f4, ABISELECT(64,40), "S1575C4.s1575c4f4");
    check_field_offset(lv, s1575c4f5, ABISELECT(72,44), "S1575C4.s1575c4f5");
    check_field_offset(lv, s1575c4f6, ABISELECT(80,52), "S1575C4.s1575c4f6");
    test_class_info(&lv, &cd_S1575C4);
    dp->~S1575C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1575C4(Test_S1575C4, "S1575C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1575C4C1Ev();
extern void _ZN7S1575C4D1Ev();
Name_Map name_map_S1575C4[] = {
  NSPAIR(_ZN7S1575C4C1Ev),
  NSPAIR(_ZN7S1575C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1575C4[];
extern void _ZN7S1575C4D1Ev();
extern void _ZN7S1575C4D0Ev();
extern void _ZN7S1575C42v8Ev();
extern void _ZN7S1575C42v9Ev();
extern void _ZN7S1575C43v10Ev();
extern void _ZN7S1575C43v11Ev();
extern void _ZN7S1575C43v12Ev();
extern void _ZN7S1575C43v13Ev();
extern void _ZN7S1575C43v14Ev();
extern void _ZN7S1575C43v15Ev();
extern void _ZN7S1575C43v16Ev();
extern void _ZN7S1575C43v17Ev();
extern void _ZN7S1575C43v18Ev();
extern void _ZN7S1575C43v19Ev();
extern void _ZN7S1575C43v20Ev();
extern void _ZN7S1575C43v21Ev();
extern void _ZN7S1575C43v22Ev();
extern void _ZN7S1575C43v23Ev();
extern void _ZN7S1575C43v24Ev();
extern void _ZN7S1575C43v25Ev();
extern void _ZN7S1575C43v26Ev();
extern void _ZN7S1575C43v27Ev();
extern void _ZN7S1575C43v28Ev();
extern void _ZN7S1575C43v29Ev();
extern void _ZN7S1575C43v30Ev();
extern void _ZN7S1575C43v31Ev();
extern void _ZN7S1575C43v32Ev();
extern void _ZN7S1575C43v33Ev();
extern void _ZN7S1575C43v34Ev();
extern void _ZN7S1575C43v35Ev();
extern void _ZN7S1575C43v36Ev();
extern void _ZN7S1575C43v37Ev();
extern void _ZN7S1575C43v38Ev();
extern void _ZN7S1575C43v39Ev();
extern void _ZN7S1575C43v40Ev();
extern void _ZN7S1575C43v41Ev();
extern void _ZN7S1575C43v42Ev();
extern void _ZN7S1575C43v43Ev();
extern void _ZN7S1575C43v44Ev();
extern void _ZN7S1575C43v45Ev();
extern void _ZN7S1575C43v46Ev();
extern void _ZN7S1575C43v47Ev();
extern void _ZN7S1575C43v48Ev();
extern void _ZN7S1575C43v49Ev();
extern void _ZN7S1575C43v50Ev();
extern void _ZN7S1575C43v51Ev();
extern void _ZN7S1575C43v52Ev();
extern void _ZN7S1575C43v53Ev();
extern void _ZN7S1575C43v54Ev();
extern void _ZN7S1575C43v55Ev();
extern void _ZN7S1575C43v56Ev();
extern void _ZN7S1575C43v57Ev();
extern void _ZN7S1575C43v58Ev();
extern void _ZN7S1575C43v59Ev();
extern void _ZN7S1575C43v60Ev();
extern void _ZN7S1575C43v61Ev();
extern void _ZN7S1575C43v62Ev();
extern void _ZN7S1575C43v63Ev();
extern void _ZN7S1575C43v64Ev();
extern void _ZN7S1575C43v65Ev();
extern void _ZN7S1575C43v66Ev();
extern void _ZN7S1575C43v67Ev();
extern void _ZN7S1575C43v68Ev();
extern void _ZN7S1575C43v69Ev();
extern void _ZN7S1575C43v70Ev();
extern void _ZN7S1575C43v71Ev();
static  VTBL_ENTRY vtc_S1575C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1575C4[0]),
  (VTBL_ENTRY)&_ZN7S1575C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1575C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1575C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1575C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v71Ev,
};
extern VTBL_ENTRY _ZTI7S1575C4[];
extern  VTBL_ENTRY _ZTV7S1575C4[];
Class_Descriptor cd_S1575C4 = {  "S1575C4", // class name
  0,0,//no base classes
  &(vtc_S1575C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1575C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1575C4),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  S1575C3_nt  : S1575C4 {
  unsigned int s1575c3f0:1;
  unsigned int s1575c3f1:1;
  unsigned int s1575c3f2:1;
  unsigned int s1575c3f3:1;
  unsigned int s1575c3f4:1;
  unsigned int s1575c3f5:1;
  unsigned int s1575c3f6:1;
  ::S2264C38 s1575c3f7;
  virtual  ~S1575C3_nt(); // _ZN10S1575C3_ntD1Ev
  virtual void  v72(); // _ZN10S1575C3_nt3v72Ev
  virtual void  v73(); // _ZN10S1575C3_nt3v73Ev
  virtual void  v74(); // _ZN10S1575C3_nt3v74Ev
  virtual void  v75(); // _ZN10S1575C3_nt3v75Ev
  virtual void  v76(); // _ZN10S1575C3_nt3v76Ev
  virtual void  v77(); // _ZN10S1575C3_nt3v77Ev
  virtual void  v78(); // _ZN10S1575C3_nt3v78Ev
  virtual void  v79(); // _ZN10S1575C3_nt3v79Ev
  virtual void  v80(); // _ZN10S1575C3_nt3v80Ev
  virtual void  v81(); // _ZN10S1575C3_nt3v81Ev
  virtual void  v82(); // _ZN10S1575C3_nt3v82Ev
  virtual void  v83(); // _ZN10S1575C3_nt3v83Ev
  virtual void  v84(); // _ZN10S1575C3_nt3v84Ev
  virtual void  v85(); // _ZN10S1575C3_nt3v85Ev
  virtual void  v86(); // _ZN10S1575C3_nt3v86Ev
  virtual void  v87(); // _ZN10S1575C3_nt3v87Ev
  virtual void  v88(); // _ZN10S1575C3_nt3v88Ev
  virtual void  v89(); // _ZN10S1575C3_nt3v89Ev
  virtual void  v90(); // _ZN10S1575C3_nt3v90Ev
  virtual void  v91(); // _ZN10S1575C3_nt3v91Ev
  S1575C3_nt(); // tgen
};
//SIG(-1 S1575C3_nt) C1{ BC2{ 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 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 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1575C3_nt ::~S1575C3_nt(){ note_dtor("S1575C3_nt", this);}
void  S1575C3_nt ::v72(){vfunc_called(this, "_ZN10S1575C3_nt3v72Ev");}
void  S1575C3_nt ::v73(){vfunc_called(this, "_ZN10S1575C3_nt3v73Ev");}
void  S1575C3_nt ::v74(){vfunc_called(this, "_ZN10S1575C3_nt3v74Ev");}
void  S1575C3_nt ::v75(){vfunc_called(this, "_ZN10S1575C3_nt3v75Ev");}
void  S1575C3_nt ::v76(){vfunc_called(this, "_ZN10S1575C3_nt3v76Ev");}
void  S1575C3_nt ::v77(){vfunc_called(this, "_ZN10S1575C3_nt3v77Ev");}
void  S1575C3_nt ::v78(){vfunc_called(this, "_ZN10S1575C3_nt3v78Ev");}
void  S1575C3_nt ::v79(){vfunc_called(this, "_ZN10S1575C3_nt3v79Ev");}
void  S1575C3_nt ::v80(){vfunc_called(this, "_ZN10S1575C3_nt3v80Ev");}
void  S1575C3_nt ::v81(){vfunc_called(this, "_ZN10S1575C3_nt3v81Ev");}
void  S1575C3_nt ::v82(){vfunc_called(this, "_ZN10S1575C3_nt3v82Ev");}
void  S1575C3_nt ::v83(){vfunc_called(this, "_ZN10S1575C3_nt3v83Ev");}
void  S1575C3_nt ::v84(){vfunc_called(this, "_ZN10S1575C3_nt3v84Ev");}
void  S1575C3_nt ::v85(){vfunc_called(this, "_ZN10S1575C3_nt3v85Ev");}
void  S1575C3_nt ::v86(){vfunc_called(this, "_ZN10S1575C3_nt3v86Ev");}
void  S1575C3_nt ::v87(){vfunc_called(this, "_ZN10S1575C3_nt3v87Ev");}
void  S1575C3_nt ::v88(){vfunc_called(this, "_ZN10S1575C3_nt3v88Ev");}
void  S1575C3_nt ::v89(){vfunc_called(this, "_ZN10S1575C3_nt3v89Ev");}
void  S1575C3_nt ::v90(){vfunc_called(this, "_ZN10S1575C3_nt3v90Ev");}
void  S1575C3_nt ::v91(){vfunc_called(this, "_ZN10S1575C3_nt3v91Ev");}
S1575C3_nt ::S1575C3_nt(){ note_ctor("S1575C3_nt", this);} // tgen

//skip512 S1575C3_nt

#else // __cplusplus

extern void _ZN10S1575C3_ntC1Ev();
extern void _ZN10S1575C3_ntD1Ev();
Name_Map name_map_S1575C3_nt[] = {
  NSPAIR(_ZN10S1575C3_ntC1Ev),
  NSPAIR(_ZN10S1575C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1575C4;
extern VTBL_ENTRY _ZTI7S1575C4[];
extern  VTBL_ENTRY _ZTV7S1575C4[];
static Base_Class bases_S1575C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1575C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI10S1575C3_nt[];
extern void _ZN10S1575C3_ntD1Ev();
extern void _ZN10S1575C3_ntD0Ev();
extern void _ZN7S1575C42v8Ev();
extern void _ZN7S1575C42v9Ev();
extern void _ZN7S1575C43v10Ev();
extern void _ZN7S1575C43v11Ev();
extern void _ZN7S1575C43v12Ev();
extern void _ZN7S1575C43v13Ev();
extern void _ZN7S1575C43v14Ev();
extern void _ZN7S1575C43v15Ev();
extern void _ZN7S1575C43v16Ev();
extern void _ZN7S1575C43v17Ev();
extern void _ZN7S1575C43v18Ev();
extern void _ZN7S1575C43v19Ev();
extern void _ZN7S1575C43v20Ev();
extern void _ZN7S1575C43v21Ev();
extern void _ZN7S1575C43v22Ev();
extern void _ZN7S1575C43v23Ev();
extern void _ZN7S1575C43v24Ev();
extern void _ZN7S1575C43v25Ev();
extern void _ZN7S1575C43v26Ev();
extern void _ZN7S1575C43v27Ev();
extern void _ZN7S1575C43v28Ev();
extern void _ZN7S1575C43v29Ev();
extern void _ZN7S1575C43v30Ev();
extern void _ZN7S1575C43v31Ev();
extern void _ZN7S1575C43v32Ev();
extern void _ZN7S1575C43v33Ev();
extern void _ZN7S1575C43v34Ev();
extern void _ZN7S1575C43v35Ev();
extern void _ZN7S1575C43v36Ev();
extern void _ZN7S1575C43v37Ev();
extern void _ZN7S1575C43v38Ev();
extern void _ZN7S1575C43v39Ev();
extern void _ZN7S1575C43v40Ev();
extern void _ZN7S1575C43v41Ev();
extern void _ZN7S1575C43v42Ev();
extern void _ZN7S1575C43v43Ev();
extern void _ZN7S1575C43v44Ev();
extern void _ZN7S1575C43v45Ev();
extern void _ZN7S1575C43v46Ev();
extern void _ZN7S1575C43v47Ev();
extern void _ZN7S1575C43v48Ev();
extern void _ZN7S1575C43v49Ev();
extern void _ZN7S1575C43v50Ev();
extern void _ZN7S1575C43v51Ev();
extern void _ZN7S1575C43v52Ev();
extern void _ZN7S1575C43v53Ev();
extern void _ZN7S1575C43v54Ev();
extern void _ZN7S1575C43v55Ev();
extern void _ZN7S1575C43v56Ev();
extern void _ZN7S1575C43v57Ev();
extern void _ZN7S1575C43v58Ev();
extern void _ZN7S1575C43v59Ev();
extern void _ZN7S1575C43v60Ev();
extern void _ZN7S1575C43v61Ev();
extern void _ZN7S1575C43v62Ev();
extern void _ZN7S1575C43v63Ev();
extern void _ZN7S1575C43v64Ev();
extern void _ZN7S1575C43v65Ev();
extern void _ZN7S1575C43v66Ev();
extern void _ZN7S1575C43v67Ev();
extern void _ZN7S1575C43v68Ev();
extern void _ZN7S1575C43v69Ev();
extern void _ZN7S1575C43v70Ev();
extern void _ZN7S1575C43v71Ev();
extern void _ZN10S1575C3_nt3v72Ev();
extern void _ZN10S1575C3_nt3v73Ev();
extern void _ZN10S1575C3_nt3v74Ev();
extern void _ZN10S1575C3_nt3v75Ev();
extern void _ZN10S1575C3_nt3v76Ev();
extern void _ZN10S1575C3_nt3v77Ev();
extern void _ZN10S1575C3_nt3v78Ev();
extern void _ZN10S1575C3_nt3v79Ev();
extern void _ZN10S1575C3_nt3v80Ev();
extern void _ZN10S1575C3_nt3v81Ev();
extern void _ZN10S1575C3_nt3v82Ev();
extern void _ZN10S1575C3_nt3v83Ev();
extern void _ZN10S1575C3_nt3v84Ev();
extern void _ZN10S1575C3_nt3v85Ev();
extern void _ZN10S1575C3_nt3v86Ev();
extern void _ZN10S1575C3_nt3v87Ev();
extern void _ZN10S1575C3_nt3v88Ev();
extern void _ZN10S1575C3_nt3v89Ev();
extern void _ZN10S1575C3_nt3v90Ev();
extern void _ZN10S1575C3_nt3v91Ev();
static  VTBL_ENTRY vtc_S1575C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1575C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S1575C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S1575C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1575C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v71Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v91Ev,
};
extern VTBL_ENTRY _ZTI10S1575C3_nt[];
VTBL_ENTRY *P__ZTI10S1575C3_nt = _ZTI10S1575C3_nt; 
extern  VTBL_ENTRY _ZTV10S1575C3_nt[];
Class_Descriptor cd_S1575C3_nt = {  "S1575C3_nt", // class name
  bases_S1575C3_nt, 1,
  &(vtc_S1575C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI10S1575C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1575C3_nt),88, //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  S1575C2_nt  : S1575C3_nt {
  virtual  ~S1575C2_nt(); // _ZN10S1575C2_ntD1Ev
  virtual void  v92(); // _ZN10S1575C2_nt3v92Ev
  virtual void  v93(); // _ZN10S1575C2_nt3v93Ev
  S1575C2_nt(); // tgen
};
//SIG(-1 S1575C2_nt) C1{ BC2{ BC3{ 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 FC4{ 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 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2}


 S1575C2_nt ::~S1575C2_nt(){ note_dtor("S1575C2_nt", this);}
void  S1575C2_nt ::v92(){vfunc_called(this, "_ZN10S1575C2_nt3v92Ev");}
void  S1575C2_nt ::v93(){vfunc_called(this, "_ZN10S1575C2_nt3v93Ev");}
S1575C2_nt ::S1575C2_nt(){ note_ctor("S1575C2_nt", this);} // tgen

//skip512 S1575C2_nt

#else // __cplusplus

extern void _ZN10S1575C2_ntC1Ev();
extern void _ZN10S1575C2_ntD1Ev();
Name_Map name_map_S1575C2_nt[] = {
  NSPAIR(_ZN10S1575C2_ntC1Ev),
  NSPAIR(_ZN10S1575C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1575C4;
extern VTBL_ENTRY _ZTI7S1575C4[];
extern  VTBL_ENTRY _ZTV7S1575C4[];
extern Class_Descriptor cd_S1575C3_nt;
extern VTBL_ENTRY _ZTI10S1575C3_nt[];
extern  VTBL_ENTRY _ZTV10S1575C3_nt[];
static Base_Class bases_S1575C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1575C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1575C3_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 _ZTI10S1575C2_nt[];
extern void _ZN10S1575C2_ntD1Ev();
extern void _ZN10S1575C2_ntD0Ev();
extern void _ZN7S1575C42v8Ev();
extern void _ZN7S1575C42v9Ev();
extern void _ZN7S1575C43v10Ev();
extern void _ZN7S1575C43v11Ev();
extern void _ZN7S1575C43v12Ev();
extern void _ZN7S1575C43v13Ev();
extern void _ZN7S1575C43v14Ev();
extern void _ZN7S1575C43v15Ev();
extern void _ZN7S1575C43v16Ev();
extern void _ZN7S1575C43v17Ev();
extern void _ZN7S1575C43v18Ev();
extern void _ZN7S1575C43v19Ev();
extern void _ZN7S1575C43v20Ev();
extern void _ZN7S1575C43v21Ev();
extern void _ZN7S1575C43v22Ev();
extern void _ZN7S1575C43v23Ev();
extern void _ZN7S1575C43v24Ev();
extern void _ZN7S1575C43v25Ev();
extern void _ZN7S1575C43v26Ev();
extern void _ZN7S1575C43v27Ev();
extern void _ZN7S1575C43v28Ev();
extern void _ZN7S1575C43v29Ev();
extern void _ZN7S1575C43v30Ev();
extern void _ZN7S1575C43v31Ev();
extern void _ZN7S1575C43v32Ev();
extern void _ZN7S1575C43v33Ev();
extern void _ZN7S1575C43v34Ev();
extern void _ZN7S1575C43v35Ev();
extern void _ZN7S1575C43v36Ev();
extern void _ZN7S1575C43v37Ev();
extern void _ZN7S1575C43v38Ev();
extern void _ZN7S1575C43v39Ev();
extern void _ZN7S1575C43v40Ev();
extern void _ZN7S1575C43v41Ev();
extern void _ZN7S1575C43v42Ev();
extern void _ZN7S1575C43v43Ev();
extern void _ZN7S1575C43v44Ev();
extern void _ZN7S1575C43v45Ev();
extern void _ZN7S1575C43v46Ev();
extern void _ZN7S1575C43v47Ev();
extern void _ZN7S1575C43v48Ev();
extern void _ZN7S1575C43v49Ev();
extern void _ZN7S1575C43v50Ev();
extern void _ZN7S1575C43v51Ev();
extern void _ZN7S1575C43v52Ev();
extern void _ZN7S1575C43v53Ev();
extern void _ZN7S1575C43v54Ev();
extern void _ZN7S1575C43v55Ev();
extern void _ZN7S1575C43v56Ev();
extern void _ZN7S1575C43v57Ev();
extern void _ZN7S1575C43v58Ev();
extern void _ZN7S1575C43v59Ev();
extern void _ZN7S1575C43v60Ev();
extern void _ZN7S1575C43v61Ev();
extern void _ZN7S1575C43v62Ev();
extern void _ZN7S1575C43v63Ev();
extern void _ZN7S1575C43v64Ev();
extern void _ZN7S1575C43v65Ev();
extern void _ZN7S1575C43v66Ev();
extern void _ZN7S1575C43v67Ev();
extern void _ZN7S1575C43v68Ev();
extern void _ZN7S1575C43v69Ev();
extern void _ZN7S1575C43v70Ev();
extern void _ZN7S1575C43v71Ev();
extern void _ZN10S1575C3_nt3v72Ev();
extern void _ZN10S1575C3_nt3v73Ev();
extern void _ZN10S1575C3_nt3v74Ev();
extern void _ZN10S1575C3_nt3v75Ev();
extern void _ZN10S1575C3_nt3v76Ev();
extern void _ZN10S1575C3_nt3v77Ev();
extern void _ZN10S1575C3_nt3v78Ev();
extern void _ZN10S1575C3_nt3v79Ev();
extern void _ZN10S1575C3_nt3v80Ev();
extern void _ZN10S1575C3_nt3v81Ev();
extern void _ZN10S1575C3_nt3v82Ev();
extern void _ZN10S1575C3_nt3v83Ev();
extern void _ZN10S1575C3_nt3v84Ev();
extern void _ZN10S1575C3_nt3v85Ev();
extern void _ZN10S1575C3_nt3v86Ev();
extern void _ZN10S1575C3_nt3v87Ev();
extern void _ZN10S1575C3_nt3v88Ev();
extern void _ZN10S1575C3_nt3v89Ev();
extern void _ZN10S1575C3_nt3v90Ev();
extern void _ZN10S1575C3_nt3v91Ev();
extern void _ZN10S1575C2_nt3v92Ev();
extern void _ZN10S1575C2_nt3v93Ev();
static  VTBL_ENTRY vtc_S1575C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S1575C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S1575C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S1575C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN7S1575C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1575C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v71Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1575C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1575C2_nt3v93Ev,
};
extern VTBL_ENTRY _ZTI10S1575C2_nt[];
VTBL_ENTRY *P__ZTI10S1575C2_nt = _ZTI10S1575C2_nt; 
extern  VTBL_ENTRY _ZTV10S1575C2_nt[];
Class_Descriptor cd_S1575C2_nt = {  "S1575C2_nt", // class name
  bases_S1575C2_nt, 2,
  &(vtc_S1575C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI10S1575C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S1575C2_nt),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  S1575C8_nt  {
  char s1575c8f0[4];
  ::S3351C28 s1575c8f1;
  int s1575c8f2[2];
  void  mf1575c8(); // _ZN10S1575C8_nt8mf1575c8Ev
};
//SIG(-1 S1575C8_nt) C1{ m Fc[4] FC2{ BC3{ BC4{ m Fp Fi[2]}}} Fi[2]}


void  S1575C8_nt ::mf1575c8(){}

//skip512 S1575C8_nt

#else // __cplusplus

Class_Descriptor cd_S1575C8_nt = {  "S1575C8_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  S1575C7_nt  : S1575C8_nt {
  void *s1575c7f0;
};
//SIG(-1 S1575C7_nt) C1{ BC2{ m Fc[4] FC3{ BC4{ BC5{ m Fp Fi[2]}}} Fi[2]} Fp}



//skip512 S1575C7_nt

#else // __cplusplus

extern Class_Descriptor cd_S1575C8_nt;
static Base_Class bases_S1575C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1575C8_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  S1575C1  : S1575C2_nt {
  ::S3351C4_nt s1575c1f0;
  ::S1575C7_nt s1575c1f1;
  unsigned int s1575c1f2:1;
  unsigned int s1575c1f3:1;
  unsigned int s1575c1f4:1;
  unsigned int s1575c1f5:1;
  ::S1575C7_nt s1575c1f6;
  char s1575c1f7;
  int s1575c1f8;
  virtual  ~S1575C1(); // _ZN7S1575C1D1Ev
  virtual void  v1(); // _ZN7S1575C12v1Ev
  virtual void  v2(); // _ZN7S1575C12v2Ev
  virtual void  v3(); // _ZN7S1575C12v3Ev
  virtual void  v4(); // _ZN7S1575C12v4Ev
  virtual void  v5(); // _ZN7S1575C12v5Ev
  virtual void  v6(); // _ZN7S1575C12v6Ev
  virtual void  v7(); // _ZN7S1575C12v7Ev
  S1575C1(); // tgen
};
//SIG(1 S1575C1) 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 v90 v91 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v92 v93} vd v1 v2 v3 v4 v5 v6 v7 FC5 FC7{ BC8{ m Fc[4] FC9{ BC10{ BC11{ m Fp Fi[2]}}} Fi[2]} Fp} Fi:1 Fi:1 Fi:1 Fi:1 FC7 Fc Fi}


 S1575C1 ::~S1575C1(){ note_dtor("S1575C1", this);}
void  S1575C1 ::v1(){vfunc_called(this, "_ZN7S1575C12v1Ev");}
void  S1575C1 ::v2(){vfunc_called(this, "_ZN7S1575C12v2Ev");}
void  S1575C1 ::v3(){vfunc_called(this, "_ZN7S1575C12v3Ev");}
void  S1575C1 ::v4(){vfunc_called(this, "_ZN7S1575C12v4Ev");}
void  S1575C1 ::v5(){vfunc_called(this, "_ZN7S1575C12v5Ev");}
void  S1575C1 ::v6(){vfunc_called(this, "_ZN7S1575C12v6Ev");}
void  S1575C1 ::v7(){vfunc_called(this, "_ZN7S1575C12v7Ev");}
S1575C1 ::S1575C1(){ note_ctor("S1575C1", this);} // tgen

static void Test_S1575C1()
{
  extern Class_Descriptor cd_S1575C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,36)];
    init_test(&cd_S1575C1, buf);
    S1575C1 *dp, &lv = *(dp=new (buf) S1575C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,140), "sizeof(S1575C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1575C1)");
    check_base_class_offset(lv, (S1575C4*)(S1575C3_nt*)(S1575C2_nt*), 0, "S1575C1");
    check_base_class_offset(lv, (S1575C3_nt*)(S1575C2_nt*), 0, "S1575C1");
    check_base_class_offset(lv, (S1575C2_nt*), 0, "S1575C1");
    check_field_offset(lv, s1575c1f0, ABISELECT(100,64), "S1575C1.s1575c1f0");
    check_field_offset(lv, s1575c1f1, ABISELECT(112,72), "S1575C1.s1575c1f1");
    set_bf_and_test(lv, s1575c1f2, ABISELECT(152,100), 0, 1, 1, "S1575C1");
    set_bf_and_test(lv, s1575c1f3, ABISELECT(152,100), 1, 1, 1, "S1575C1");
    set_bf_and_test(lv, s1575c1f4, ABISELECT(152,100), 2, 1, 1, "S1575C1");
    set_bf_and_test(lv, s1575c1f5, ABISELECT(152,100), 3, 1, 1, "S1575C1");
    check_field_offset(lv, s1575c1f6, ABISELECT(160,104), "S1575C1.s1575c1f6");
    check_field_offset(lv, s1575c1f7, ABISELECT(200,132), "S1575C1.s1575c1f7");
    check_field_offset(lv, s1575c1f8, ABISELECT(204,136), "S1575C1.s1575c1f8");
    test_class_info(&lv, &cd_S1575C1);
    dp->~S1575C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1575C1(Test_S1575C1, "S1575C1", ABISELECT(208,140));

#else // __cplusplus

extern void _ZN7S1575C1C1Ev();
extern void _ZN7S1575C1D1Ev();
Name_Map name_map_S1575C1[] = {
  NSPAIR(_ZN7S1575C1C1Ev),
  NSPAIR(_ZN7S1575C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1575C4;
extern VTBL_ENTRY _ZTI7S1575C4[];
extern  VTBL_ENTRY _ZTV7S1575C4[];
extern Class_Descriptor cd_S1575C3_nt;
extern VTBL_ENTRY _ZTI10S1575C3_nt[];
extern  VTBL_ENTRY _ZTV10S1575C3_nt[];
extern Class_Descriptor cd_S1575C2_nt;
extern VTBL_ENTRY _ZTI10S1575C2_nt[];
extern  VTBL_ENTRY _ZTV10S1575C2_nt[];
static Base_Class bases_S1575C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1575C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1575C3_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_S1575C2_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 _ZTI7S1575C1[];
extern void _ZN7S1575C1D1Ev();
extern void _ZN7S1575C1D0Ev();
extern void _ZN7S1575C42v8Ev();
extern void _ZN7S1575C42v9Ev();
extern void _ZN7S1575C43v10Ev();
extern void _ZN7S1575C43v11Ev();
extern void _ZN7S1575C43v12Ev();
extern void _ZN7S1575C43v13Ev();
extern void _ZN7S1575C43v14Ev();
extern void _ZN7S1575C43v15Ev();
extern void _ZN7S1575C43v16Ev();
extern void _ZN7S1575C43v17Ev();
extern void _ZN7S1575C43v18Ev();
extern void _ZN7S1575C43v19Ev();
extern void _ZN7S1575C43v20Ev();
extern void _ZN7S1575C43v21Ev();
extern void _ZN7S1575C43v22Ev();
extern void _ZN7S1575C43v23Ev();
extern void _ZN7S1575C43v24Ev();
extern void _ZN7S1575C43v25Ev();
extern void _ZN7S1575C43v26Ev();
extern void _ZN7S1575C43v27Ev();
extern void _ZN7S1575C43v28Ev();
extern void _ZN7S1575C43v29Ev();
extern void _ZN7S1575C43v30Ev();
extern void _ZN7S1575C43v31Ev();
extern void _ZN7S1575C43v32Ev();
extern void _ZN7S1575C43v33Ev();
extern void _ZN7S1575C43v34Ev();
extern void _ZN7S1575C43v35Ev();
extern void _ZN7S1575C43v36Ev();
extern void _ZN7S1575C43v37Ev();
extern void _ZN7S1575C43v38Ev();
extern void _ZN7S1575C43v39Ev();
extern void _ZN7S1575C43v40Ev();
extern void _ZN7S1575C43v41Ev();
extern void _ZN7S1575C43v42Ev();
extern void _ZN7S1575C43v43Ev();
extern void _ZN7S1575C43v44Ev();
extern void _ZN7S1575C43v45Ev();
extern void _ZN7S1575C43v46Ev();
extern void _ZN7S1575C43v47Ev();
extern void _ZN7S1575C43v48Ev();
extern void _ZN7S1575C43v49Ev();
extern void _ZN7S1575C43v50Ev();
extern void _ZN7S1575C43v51Ev();
extern void _ZN7S1575C43v52Ev();
extern void _ZN7S1575C43v53Ev();
extern void _ZN7S1575C43v54Ev();
extern void _ZN7S1575C43v55Ev();
extern void _ZN7S1575C43v56Ev();
extern void _ZN7S1575C43v57Ev();
extern void _ZN7S1575C43v58Ev();
extern void _ZN7S1575C43v59Ev();
extern void _ZN7S1575C43v60Ev();
extern void _ZN7S1575C43v61Ev();
extern void _ZN7S1575C43v62Ev();
extern void _ZN7S1575C43v63Ev();
extern void _ZN7S1575C43v64Ev();
extern void _ZN7S1575C43v65Ev();
extern void _ZN7S1575C43v66Ev();
extern void _ZN7S1575C43v67Ev();
extern void _ZN7S1575C43v68Ev();
extern void _ZN7S1575C43v69Ev();
extern void _ZN7S1575C43v70Ev();
extern void _ZN7S1575C43v71Ev();
extern void _ZN10S1575C3_nt3v72Ev();
extern void _ZN10S1575C3_nt3v73Ev();
extern void _ZN10S1575C3_nt3v74Ev();
extern void _ZN10S1575C3_nt3v75Ev();
extern void _ZN10S1575C3_nt3v76Ev();
extern void _ZN10S1575C3_nt3v77Ev();
extern void _ZN10S1575C3_nt3v78Ev();
extern void _ZN10S1575C3_nt3v79Ev();
extern void _ZN10S1575C3_nt3v80Ev();
extern void _ZN10S1575C3_nt3v81Ev();
extern void _ZN10S1575C3_nt3v82Ev();
extern void _ZN10S1575C3_nt3v83Ev();
extern void _ZN10S1575C3_nt3v84Ev();
extern void _ZN10S1575C3_nt3v85Ev();
extern void _ZN10S1575C3_nt3v86Ev();
extern void _ZN10S1575C3_nt3v87Ev();
extern void _ZN10S1575C3_nt3v88Ev();
extern void _ZN10S1575C3_nt3v89Ev();
extern void _ZN10S1575C3_nt3v90Ev();
extern void _ZN10S1575C3_nt3v91Ev();
extern void _ZN10S1575C2_nt3v92Ev();
extern void _ZN10S1575C2_nt3v93Ev();
extern void _ZN7S1575C12v1Ev();
extern void _ZN7S1575C12v2Ev();
extern void _ZN7S1575C12v3Ev();
extern void _ZN7S1575C12v4Ev();
extern void _ZN7S1575C12v5Ev();
extern void _ZN7S1575C12v6Ev();
extern void _ZN7S1575C12v7Ev();
static  VTBL_ENTRY vtc_S1575C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1575C1[0]),
  (VTBL_ENTRY)&_ZN7S1575C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1575C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1575C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1575C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1575C43v71Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v72Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v73Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v74Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v75Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v76Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v77Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v78Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v79Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v80Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v81Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v82Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v83Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v84Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v85Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v86Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v87Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v88Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v89Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v90Ev,
  (VTBL_ENTRY)&_ZN10S1575C3_nt3v91Ev,
  (VTBL_ENTRY)&_ZN10S1575C2_nt3v92Ev,
  (VTBL_ENTRY)&_ZN10S1575C2_nt3v93Ev,
  (VTBL_ENTRY)&_ZN7S1575C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1575C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1575C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1575C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1575C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1575C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1575C12v7Ev,
};
extern VTBL_ENTRY _ZTI7S1575C1[];
extern  VTBL_ENTRY _ZTV7S1575C1[];
Class_Descriptor cd_S1575C1 = {  "S1575C1", // class name
  bases_S1575C1, 3,
  &(vtc_S1575C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,140), // object size
  NSPAIRA(_ZTI7S1575C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1575C1),97, //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  S20845C3  {
  short s20845c3f0[6];
  __tsi64 s20845c3f1[8];
  int s20845c3f2;
  virtual  ~S20845C3(); // _ZN8S20845C3D1Ev
  virtual void  v3(); // _ZN8S20845C32v3Ev
  S20845C3(); // tgen
};
//SIG(-1 S20845C3) C1{ vd v1 Fs[6] FL[8] Fi}


 S20845C3 ::~S20845C3(){ note_dtor("S20845C3", this);}
void  S20845C3 ::v3(){vfunc_called(this, "_ZN8S20845C32v3Ev");}
S20845C3 ::S20845C3(){ note_ctor("S20845C3", this);} // tgen

static void Test_S20845C3()
{
  extern Class_Descriptor cd_S20845C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,22)];
    init_test(&cd_S20845C3, buf);
    S20845C3 *dp, &lv = *(dp=new (buf) S20845C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,84), "sizeof(S20845C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20845C3)");
    check_field_offset(lv, s20845c3f0, ABISELECT(8,4), "S20845C3.s20845c3f0");
    check_field_offset(lv, s20845c3f1, ABISELECT(24,16), "S20845C3.s20845c3f1");
    check_field_offset(lv, s20845c3f2, ABISELECT(88,80), "S20845C3.s20845c3f2");
    test_class_info(&lv, &cd_S20845C3);
    dp->~S20845C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20845C3(Test_S20845C3, "S20845C3", ABISELECT(96,84));

#else // __cplusplus

extern void _ZN8S20845C3C1Ev();
extern void _ZN8S20845C3D1Ev();
Name_Map name_map_S20845C3[] = {
  NSPAIR(_ZN8S20845C3C1Ev),
  NSPAIR(_ZN8S20845C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20845C3[];
extern void _ZN8S20845C3D1Ev();
extern void _ZN8S20845C3D0Ev();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY vtc_S20845C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C3[0]),
  (VTBL_ENTRY)&_ZN8S20845C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C3D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern VTBL_ENTRY _ZTI8S20845C3[];
extern  VTBL_ENTRY _ZTV8S20845C3[];
Class_Descriptor cd_S20845C3 = {  "S20845C3", // class name
  0,0,//no base classes
  &(vtc_S20845C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,84), // object size
  NSPAIRA(_ZTI8S20845C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20845C3),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  S20845C5  : virtual S20845C3 {
  __tsi64 s20845c5f0;
  void *s20845c5f1;
  __tsi64 s20845c5f2:54;
  ~S20845C5(); // tgen
  S20845C5(); // tgen
};
//SIG(-1 S20845C5) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} FL Fp FL:54}


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

static void Test_S20845C5()
{
  extern Class_Descriptor cd_S20845C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,28)];
    init_test(&cd_S20845C5, buf);
    S20845C5 *dp, &lv = *(dp=new (buf) S20845C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,108), "sizeof(S20845C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20845C5)");
    check_base_class_offset(lv, (S20845C3*), ABISELECT(32,24), "S20845C5");
    check_field_offset(lv, s20845c5f0, ABISELECT(8,4), "S20845C5.s20845c5f0");
    check_field_offset(lv, s20845c5f1, ABISELECT(16,12), "S20845C5.s20845c5f1");
    set_bf_and_test(lv, s20845c5f2, ABISELECT(24,16), 0, 54, 1, "S20845C5");
    set_bf_and_test(lv, s20845c5f2, ABISELECT(24,16), 0, 54, hide_sll(1LL<<53), "S20845C5");
    test_class_info(&lv, &cd_S20845C5);
    dp->~S20845C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20845C5(Test_S20845C5, "S20845C5", ABISELECT(128,108));

#else // __cplusplus

extern void _ZN8S20845C5C1Ev();
extern void _ZN8S20845C5D1Ev();
Name_Map name_map_S20845C5[] = {
  NSPAIR(_ZN8S20845C5C1Ev),
  NSPAIR(_ZN8S20845C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20845C3;
extern VTBL_ENTRY _ZTI8S20845C3[];
extern  VTBL_ENTRY _ZTV8S20845C3[];
static Base_Class bases_S20845C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20845C3,    ABISELECT(32,24), //bcp->offset
    5, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S20845C5[];
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZThn32_N8S20845C5D1Ev,_ZThn24_N8S20845C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void ABISELECT(_ZThn32_N8S20845C5D0Ev,_ZThn24_N8S20845C5D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY vtc_S20845C5[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
  0,
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern VTBL_ENTRY _ZTV8S20845C5[];
static  VTT_ENTRY vtt_S20845C5[] = {
  {&(_ZTV8S20845C5[3]),  3,12},
  {&(_ZTV8S20845C5[9]),  9,12},
};
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
static VTBL_ENTRY alt_thunk_names56[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20845C5D0Ev,_ZThn24_N8S20845C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20845C5D1Ev,_ZThn24_N8S20845C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20845C5 = {  "S20845C5", // class name
  bases_S20845C5, 1,
  &(vtc_S20845C5[0]), // expected_vtbl_contents
  &(vtt_S20845C5[0]), // expected_vtt_contents
  ABISELECT(128,108), // object size
  NSPAIRA(_ZTI8S20845C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20845C5),12, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20845C5),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names56,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20845C4  : virtual S20845C3 , S20845C5 {
  char  :0;
  void *s20845c4f1[8];
  char s20845c4f2;
  virtual void  v4(); // _ZN8S20845C42v4Ev
  virtual void  v5(); // _ZN8S20845C42v5Ev
  ~S20845C4(); // tgen
  S20845C4(); // tgen
};
//SIG(-1 S20845C4) C1{ VBC2{ vd v3 Fs[6] FL[8] Fi} BC3{ VBC2 FL Fp FL:54} v1 v2 Fc:0 Fp[8] Fc}


void  S20845C4 ::v4(){vfunc_called(this, "_ZN8S20845C42v4Ev");}
void  S20845C4 ::v5(){vfunc_called(this, "_ZN8S20845C42v5Ev");}
S20845C4 ::~S20845C4(){ note_dtor("S20845C4", this);} // tgen
S20845C4 ::S20845C4(){ note_ctor("S20845C4", this);} // tgen

static void Test_S20845C4()
{
  extern Class_Descriptor cd_S20845C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,37)];
    init_test(&cd_S20845C4, buf);
    S20845C4 *dp, &lv = *(dp=new (buf) S20845C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,144), "sizeof(S20845C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20845C4)");
    check_base_class_offset(lv, (S20845C3*), ABISELECT(104,60), "S20845C4");
    check_base_class_offset(lv, (S20845C3*)(S20845C5*), ABISELECT(104,60), "S20845C4");
    check_base_class_offset(lv, (S20845C5*), 0, "S20845C4");
    check_field_offset(lv, s20845c4f1, ABISELECT(32,24), "S20845C4.s20845c4f1");
    check_field_offset(lv, s20845c4f2, ABISELECT(96,56), "S20845C4.s20845c4f2");
    test_class_info(&lv, &cd_S20845C4);
    dp->~S20845C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20845C4(Test_S20845C4, "S20845C4", ABISELECT(200,144));

#else // __cplusplus

extern void _ZN8S20845C4C1Ev();
extern void _ZN8S20845C4D1Ev();
Name_Map name_map_S20845C4[] = {
  NSPAIR(_ZN8S20845C4C1Ev),
  NSPAIR(_ZN8S20845C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20845C3;
extern VTBL_ENTRY _ZTI8S20845C3[];
extern  VTBL_ENTRY _ZTV8S20845C3[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
static Base_Class bases_S20845C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20845C3,    ABISELECT(104,60), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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_S20845C5,    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 _ZTI8S20845C4[];
extern void _ZN8S20845C4D1Ev();
extern void _ZN8S20845C4D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev)();
extern void ABISELECT(_ZThn104_N8S20845C4D1Ev,_ZThn60_N8S20845C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev)();
extern void ABISELECT(_ZThn104_N8S20845C4D0Ev,_ZThn60_N8S20845C4D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY vtc_S20845C4[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&_ZN8S20845C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern VTBL_ENTRY _ZTV8S20845C4[];
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C5__8S20845C4[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZThn104_N8S20845C5D1Ev,_ZThn60_N8S20845C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void ABISELECT(_ZThn104_N8S20845C5D0Ev,_ZThn60_N8S20845C5D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C5__8S20845C4[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
static  VTT_ENTRY vtt_S20845C4[] = {
  {&(_ZTV8S20845C4[3]),  3,14},
  {&(_tg__ZTV8S20845C5__8S20845C4[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C5__8S20845C4[4]),  4,7},
  {&(_ZTV8S20845C4[11]),  11,14},
};
extern VTBL_ENTRY _ZTI8S20845C4[];
extern  VTBL_ENTRY _ZTV8S20845C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C4[];
static VTBL_ENTRY alt_thunk_names57[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20845C5D0Ev,_ZThn60_N8S20845C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20845C5D1Ev,_ZThn60_N8S20845C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20845C4D0Ev,_ZThn60_N8S20845C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20845C4D1Ev,_ZThn60_N8S20845C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20845C4 = {  "S20845C4", // class name
  bases_S20845C4, 2,
  &(vtc_S20845C4[0]), // expected_vtbl_contents
  &(vtt_S20845C4[0]), // expected_vtt_contents
  ABISELECT(200,144), // object size
  NSPAIRA(_ZTI8S20845C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20845C4),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20845C4),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names57,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20845C2  : virtual S20845C3 , S20845C4 {
  void *s20845c2f0[3];
  char s20845c2f1:8;
  int s20845c2f2[2];
  char s20845c2f3;
  ::S20845C3 s20845c2f4;
  void *s20845c2f5[3];
  __tsi64 s20845c2f6[5];
  int s20845c2f7;
  ~S20845C2(); // tgen
  S20845C2(); // tgen
};
//SIG(-1 S20845C2) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} BC3{ VBC2 BC4{ VBC2 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC2 Fp[3] FL[5] Fi}


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

static void Test_S20845C2()
{
  extern Class_Descriptor cd_S20845C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(52,79)];
    init_test(&cd_S20845C2, buf);
    S20845C2 *dp, &lv = *(dp=new (buf) S20845C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(408,312), "sizeof(S20845C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20845C2)");
    check_base_class_offset(lv, (S20845C3*), ABISELECT(312,228), "S20845C2");
    check_base_class_offset(lv, (S20845C3*)(S20845C4*), ABISELECT(312,228), "S20845C2");
    check_base_class_offset(lv, (S20845C3*)(S20845C5*)(S20845C4*), ABISELECT(312,228), "S20845C2");
    check_base_class_offset(lv, (S20845C5*)(S20845C4*), 0, "S20845C2");
    check_base_class_offset(lv, (S20845C4*), 0, "S20845C2");
    check_field_offset(lv, s20845c2f0, ABISELECT(104,60), "S20845C2.s20845c2f0");
    set_bf_and_test(lv, s20845c2f1, ABISELECT(128,72), 0, 8, 1, "S20845C2");
    set_bf_and_test(lv, s20845c2f1, ABISELECT(128,72), 0, 8, hide_sll(1LL<<7), "S20845C2");
    check_field_offset(lv, s20845c2f2, ABISELECT(132,76), "S20845C2.s20845c2f2");
    check_field_offset(lv, s20845c2f3, ABISELECT(140,84), "S20845C2.s20845c2f3");
    check_field_offset(lv, s20845c2f4, ABISELECT(144,88), "S20845C2.s20845c2f4");
    check_field_offset(lv, s20845c2f5, ABISELECT(240,172), "S20845C2.s20845c2f5");
    check_field_offset(lv, s20845c2f6, ABISELECT(264,184), "S20845C2.s20845c2f6");
    check_field_offset(lv, s20845c2f7, ABISELECT(304,224), "S20845C2.s20845c2f7");
    test_class_info(&lv, &cd_S20845C2);
    dp->~S20845C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20845C2(Test_S20845C2, "S20845C2", ABISELECT(408,312));

#else // __cplusplus

extern void _ZN8S20845C2C1Ev();
extern void _ZN8S20845C2D1Ev();
Name_Map name_map_S20845C2[] = {
  NSPAIR(_ZN8S20845C2C1Ev),
  NSPAIR(_ZN8S20845C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20845C3;
extern VTBL_ENTRY _ZTI8S20845C3[];
extern  VTBL_ENTRY _ZTV8S20845C3[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
extern Class_Descriptor cd_S20845C4;
extern VTBL_ENTRY _ZTI8S20845C4[];
extern  VTBL_ENTRY _ZTV8S20845C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C4[];
static Base_Class bases_S20845C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20845C3,    ABISELECT(312,228), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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
  1, 1},
  {&cd_S20845C5,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20845C4,    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 _ZTI8S20845C2[];
extern void _ZN8S20845C2D1Ev();
extern void _ZN8S20845C2D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev)();
extern void ABISELECT(_ZThn312_N8S20845C2D1Ev,_ZThn228_N8S20845C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev)();
extern void ABISELECT(_ZThn312_N8S20845C2D0Ev,_ZThn228_N8S20845C2D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY vtc_S20845C2[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C2[0]),
  (VTBL_ENTRY)&_ZN8S20845C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S20845C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern VTBL_ENTRY _ZTV8S20845C2[];
extern void _ZN8S20845C4D1Ev();
extern void _ZN8S20845C4D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C4__8S20845C2[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&_ZN8S20845C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C58S20845C4__8S20845C2[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZThn312_N8S20845C5D1Ev,_ZThn228_N8S20845C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void ABISELECT(_ZThn312_N8S20845C5D0Ev,_ZThn228_N8S20845C5D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C58S20845C4__8S20845C2[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev)();
extern void ABISELECT(_ZThn312_N8S20845C4D1Ev,_ZThn228_N8S20845C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev)();
extern void ABISELECT(_ZThn312_N8S20845C4D0Ev,_ZThn228_N8S20845C4D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C4__8S20845C2[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
static  VTT_ENTRY vtt_S20845C2[] = {
  {&(_ZTV8S20845C2[3]),  3,14},
  {&(_tg__ZTV8S20845C4__8S20845C2[3]),  3,7},
  {&(_tg__ZTV8S20845C58S20845C4__8S20845C2[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C58S20845C4__8S20845C2[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C4__8S20845C2[4]),  4,7},
  {&(_ZTV8S20845C2[11]),  11,14},
};
extern VTBL_ENTRY _ZTI8S20845C2[];
extern  VTBL_ENTRY _ZTV8S20845C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C2[];
static VTBL_ENTRY alt_thunk_names58[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20845C4D0Ev,_ZThn228_N8S20845C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20845C4D1Ev,_ZThn228_N8S20845C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20845C5D0Ev,_ZThn228_N8S20845C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20845C5D1Ev,_ZThn228_N8S20845C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20845C2D0Ev,_ZThn228_N8S20845C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20845C2D1Ev,_ZThn228_N8S20845C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20845C2 = {  "S20845C2", // class name
  bases_S20845C2, 3,
  &(vtc_S20845C2[0]), // expected_vtbl_contents
  &(vtt_S20845C2[0]), // expected_vtt_contents
  ABISELECT(408,312), // object size
  NSPAIRA(_ZTI8S20845C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20845C2),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20845C2),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names58,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20845C7  : virtual S20845C3 , S20845C2 , virtual S20845C5 , virtual S20845C4 {
  void *s20845c7f0[7];
  virtual  ~S20845C7(); // _ZN8S20845C7D2Ev
  S20845C7(); // tgen
};
//SIG(-1 S20845C7) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} BC3{ VBC2 BC4{ VBC2 BC5{ VBC2 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC2 Fp[3] FL[5] Fi} VBC5 VBC4 vd Fp[7]}


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

static void Test_S20845C7()
{
  extern Class_Descriptor cd_S20845C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(76,107)];
    init_test(&cd_S20845C7, buf);
    S20845C7 *dp, &lv = *(dp=new (buf) S20845C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(600,424), "sizeof(S20845C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20845C7)");
    check_base_class_offset(lv, (S20845C3*), ABISELECT(368,256), "S20845C7");
    check_base_class_offset(lv, (S20845C3*)(S20845C2*), ABISELECT(368,256), "S20845C7");
    check_base_class_offset(lv, (S20845C3*)(S20845C4*)(S20845C2*), ABISELECT(368,256), "S20845C7");
    check_base_class_offset(lv, (S20845C3*)(S20845C5*)(S20845C4*)(S20845C2*), ABISELECT(368,256), "S20845C7");
    /*is_ambiguous_... S20845C7::S20845C5 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C5*), ABISELECT(368,256), "S20845C7");
    /*is_ambiguous_... S20845C7::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C4*), ABISELECT(368,256), "S20845C7");
    /*is_ambiguous_... S20845C7::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C5*)(S20845C4*), ABISELECT(368,256), "S20845C7");
    check_base_class_offset(lv, (S20845C5*)(S20845C4*)(S20845C2*), 0, "S20845C7");
    check_base_class_offset(lv, (S20845C4*)(S20845C2*), 0, "S20845C7");
    check_base_class_offset(lv, (S20845C2*), 0, "S20845C7");
    /*is_ambiguous_... S20845C7::S20845C5 */ AMB_check_base_class_offset(lv, (S20845C5*), ABISELECT(464,340), "S20845C7");
    /*is_ambiguous_... S20845C7::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C5*)(S20845C4*), ABISELECT(496,364), "S20845C7");
    /*is_ambiguous_... S20845C7::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C4*), ABISELECT(496,364), "S20845C7");
    check_field_offset(lv, s20845c7f0, ABISELECT(312,228), "S20845C7.s20845c7f0");
    test_class_info(&lv, &cd_S20845C7);
    dp->~S20845C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20845C7(Test_S20845C7, "S20845C7", ABISELECT(600,424));

#else // __cplusplus

extern void _ZN8S20845C7C1Ev();
extern void _ZN8S20845C7D2Ev();
Name_Map name_map_S20845C7[] = {
  NSPAIR(_ZN8S20845C7C1Ev),
  NSPAIR(_ZN8S20845C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20845C3;
extern VTBL_ENTRY _ZTI8S20845C3[];
extern  VTBL_ENTRY _ZTV8S20845C3[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
extern Class_Descriptor cd_S20845C4;
extern VTBL_ENTRY _ZTI8S20845C4[];
extern  VTBL_ENTRY _ZTV8S20845C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C4[];
extern Class_Descriptor cd_S20845C2;
extern VTBL_ENTRY _ZTI8S20845C2[];
extern  VTBL_ENTRY _ZTV8S20845C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C2[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
extern Class_Descriptor cd_S20845C4;
extern VTBL_ENTRY _ZTI8S20845C4[];
extern  VTBL_ENTRY _ZTV8S20845C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C4[];
static Base_Class bases_S20845C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20845C3,    ABISELECT(368,256), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S20845C5,    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
    5, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20845C4,    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
    6, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20845C2,    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_S20845C5,    ABISELECT(464,340), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20845C5,    ABISELECT(496,364), //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
    3, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20845C4,    ABISELECT(496,364), //bcp->offset
    22, //bcp->virtual_function_table_offset
    6, //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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20845C7[];
extern void _ZN8S20845C7D1Ev();
extern void _ZN8S20845C7D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S20845C7D1Ev,_ZTv0_n12_N8S20845C7D1Ev)();
extern void ABISELECT(_ZThn368_N8S20845C7D1Ev,_ZThn256_N8S20845C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C7D0Ev,_ZTv0_n12_N8S20845C7D0Ev)();
extern void ABISELECT(_ZThn368_N8S20845C7D0Ev,_ZThn256_N8S20845C7D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
extern void ABISELECT(_ZTv0_n32_N8S20845C7D1Ev,_ZTv0_n16_N8S20845C7D1Ev)();
extern void ABISELECT(_ZThn464_N8S20845C7D1Ev,_ZThn340_N8S20845C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20845C7D0Ev,_ZTv0_n16_N8S20845C7D0Ev)();
extern void ABISELECT(_ZThn464_N8S20845C7D0Ev,_ZThn340_N8S20845C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20845C7D1Ev,_ZTv0_n16_N8S20845C7D1Ev)();
extern void ABISELECT(_ZThn496_N8S20845C7D1Ev,_ZThn364_N8S20845C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20845C7D0Ev,_ZTv0_n16_N8S20845C7D0Ev)();
extern void ABISELECT(_ZThn496_N8S20845C7D0Ev,_ZThn364_N8S20845C7D0Ev)() __attribute__((weak));
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY vtc_S20845C7[] = {
  ABISELECT(496,364),
  ABISELECT(464,340),
  ABISELECT(368,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C7[0]),
  (VTBL_ENTRY)&_ZN8S20845C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
  0,
  ABISELECT(-368,-256),
  ABISELECT(-368,-256),
  (VTBL_ENTRY)&(_ZTI8S20845C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C7D1Ev,_ZTv0_n12_N8S20845C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C7D0Ev,_ZTv0_n12_N8S20845C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
  ABISELECT(-464,-340),
  ABISELECT(-96,-84),
  ABISELECT(-464,-340),
  (VTBL_ENTRY)&(_ZTI8S20845C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C7D1Ev,_ZTv0_n16_N8S20845C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C7D0Ev,_ZTv0_n16_N8S20845C7D0Ev),
  0,
  0,
  ABISELECT(-496,-364),
  ABISELECT(-128,-108),
  ABISELECT(-496,-364),
  (VTBL_ENTRY)&(_ZTI8S20845C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C7D1Ev,_ZTv0_n16_N8S20845C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C7D0Ev,_ZTv0_n16_N8S20845C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern VTBL_ENTRY _ZTV8S20845C7[];
extern void _ZN8S20845C2D1Ev();
extern void _ZN8S20845C2D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C2__8S20845C7[] = {
  ABISELECT(368,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C2[0]),
  (VTBL_ENTRY)&_ZN8S20845C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C4D1Ev();
extern void _ZN8S20845C4D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C48S20845C2__8S20845C7[] = {
  ABISELECT(368,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&_ZN8S20845C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C58S20845C48S20845C2__8S20845C7[] = {
  ABISELECT(368,256),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZThn368_N8S20845C5D1Ev,_ZThn256_N8S20845C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void ABISELECT(_ZThn368_N8S20845C5D0Ev,_ZThn256_N8S20845C5D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C58S20845C48S20845C2__8S20845C7[] = {
  0,
  ABISELECT(-368,-256),
  ABISELECT(-368,-256),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev)();
extern void ABISELECT(_ZThn368_N8S20845C4D1Ev,_ZThn256_N8S20845C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev)();
extern void ABISELECT(_ZThn368_N8S20845C4D0Ev,_ZThn256_N8S20845C4D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C48S20845C2__8S20845C7[] = {
  0,
  ABISELECT(-368,-256),
  ABISELECT(-368,-256),
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev)();
extern void ABISELECT(_ZThn368_N8S20845C2D1Ev,_ZThn256_N8S20845C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev)();
extern void ABISELECT(_ZThn368_N8S20845C2D0Ev,_ZThn256_N8S20845C2D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C2__8S20845C7[] = {
  0,
  ABISELECT(-368,-256),
  ABISELECT(-368,-256),
  (VTBL_ENTRY)&(_ZTI8S20845C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C5__A1__8S20845C7[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C5__A1__8S20845C7[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void _ZN8S20845C4D1Ev();
extern void _ZN8S20845C4D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C4__A1__8S20845C7[] = {
  ABISELECT(-128,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&_ZN8S20845C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C58S20845C4__A2__8S20845C7[] = {
  ABISELECT(-128,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C58S20845C4__A2__8S20845C7[] = {
  0,
  ABISELECT(128,108),
  ABISELECT(128,108),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C4__A1__8S20845C7[] = {
  0,
  ABISELECT(128,108),
  ABISELECT(128,108),
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
static  VTT_ENTRY vtt_S20845C7[] = {
  {&(_ZTV8S20845C7[5]),  5,32},
  {&(_tg__ZTV8S20845C2__8S20845C7[3]),  3,7},
  {&(_tg__ZTV8S20845C48S20845C2__8S20845C7[3]),  3,7},
  {&(_tg__ZTV8S20845C58S20845C48S20845C2__8S20845C7[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C58S20845C48S20845C2__8S20845C7[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C48S20845C2__8S20845C7[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C2__8S20845C7[4]),  4,7},
  {&(_ZTV8S20845C7[13]),  13,32},
  {&(_ZTV8S20845C7[20]),  20,32},
  {&(_ZTV8S20845C7[28]),  28,32},
  {&(_tg__ZTV8S20845C5__A1__8S20845C7[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C5__A1__8S20845C7[4]),  4,7},
  {&(_tg__ZTV8S20845C4__A1__8S20845C7[3]),  3,7},
  {&(_tg__ZTV8S20845C58S20845C4__A2__8S20845C7[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C58S20845C4__A2__8S20845C7[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C4__A1__8S20845C7[4]),  4,7},
};
extern VTBL_ENTRY _ZTI8S20845C7[];
extern  VTBL_ENTRY _ZTV8S20845C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C7[];
static VTBL_ENTRY alt_thunk_names59[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S20845C2D0Ev,_ZThn256_N8S20845C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S20845C2D1Ev,_ZThn256_N8S20845C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S20845C4D0Ev,_ZThn256_N8S20845C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S20845C4D1Ev,_ZThn256_N8S20845C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S20845C5D0Ev,_ZThn256_N8S20845C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S20845C5D1Ev,_ZThn256_N8S20845C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20845C7D0Ev,_ZTv0_n16_N8S20845C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S20845C7D0Ev,_ZThn364_N8S20845C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn464_N8S20845C7D0Ev,_ZThn340_N8S20845C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20845C7D1Ev,_ZTv0_n16_N8S20845C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn496_N8S20845C7D1Ev,_ZThn364_N8S20845C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn464_N8S20845C7D1Ev,_ZThn340_N8S20845C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C7D0Ev,_ZTv0_n12_N8S20845C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S20845C7D0Ev,_ZThn256_N8S20845C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C7D1Ev,_ZTv0_n12_N8S20845C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S20845C7D1Ev,_ZThn256_N8S20845C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20845C7 = {  "S20845C7", // class name
  bases_S20845C7, 7,
  &(vtc_S20845C7[0]), // expected_vtbl_contents
  &(vtt_S20845C7[0]), // expected_vtt_contents
  ABISELECT(600,424), // object size
  NSPAIRA(_ZTI8S20845C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20845C7),32, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20845C7),16, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names59,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20845C6  : S20845C2 , virtual S20845C4 , virtual S20845C5 , virtual S20845C7 , virtual S3052C12 {
  int s20845c6f0;
  __tsi64 s20845c6f1;
  int s20845c6f2[2];
  short s20845c6f3[8];
  ::S3052C12 s20845c6f4;
  ::S3052C16 s20845c6f5;
  long double s20845c6f6[5];
  int s20845c6f7:5;
  int s20845c6f8;
  virtual  ~S20845C6(); // _ZN8S20845C6D2Ev
  virtual void  v6(); // _ZN8S20845C62v6Ev
  S20845C6(); // tgen
};
//SIG(-1 S20845C6) C1{ BC2{ VBC3{ vd v2 Fs[6] FL[8] Fi} BC4{ VBC3 BC5{ VBC3 FL Fp FL:54} v3 v4 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC3 Fp[3] FL[5] Fi} VBC4 VBC5 VBC6{ VBC3 BC2 VBC5 VBC4 vd Fp[7]} VBC7{ vd m FC8{ VBC9{ vd v7 Fs[6] FL[8] Fi} BC10{ VBC9 FL Fp FL:54} v5 v6 Fc:0 Fp[8] Fc}} vd v1 Fi FL Fi[2] Fs[8] FC7 FU11{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} FD[5] Fi:5 Fi}


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

static void Test_S20845C6()
{
  extern Class_Descriptor cd_S20845C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(93,267)];
    init_test(&cd_S20845C6, buf);
    S20845C6 *dp, &lv = *(dp=new (buf) S20845C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1472,1064), "sizeof(S20845C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20845C6)");
    /*is_ambiguous_... S20845C6::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C2*), ABISELECT(664,492), "S20845C6");
    /*is_ambiguous_... S20845C6::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C4*)(S20845C2*), ABISELECT(664,492), "S20845C6");
    /*is_ambiguous_... S20845C6::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C5*)(S20845C4*)(S20845C2*), ABISELECT(664,492), "S20845C6");
    /*is_ambiguous_... S20845C6::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C4*), ABISELECT(664,492), "S20845C6");
    /*is_ambiguous_... S20845C6::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C5*)(S20845C4*), ABISELECT(664,492), "S20845C6");
    /*is_ambiguous_... S20845C6::S20845C5 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C5*), ABISELECT(664,492), "S20845C6");
    check_base_class_offset(lv, (S20845C3*)(S20845C7*), ABISELECT(664,492), "S20845C6");
    check_base_class_offset(lv, (S20845C3*)(S20845C2*)(S20845C7*), ABISELECT(664,492), "S20845C6");
    check_base_class_offset(lv, (S20845C3*)(S20845C4*)(S20845C2*)(S20845C7*), ABISELECT(664,492), "S20845C6");
    check_base_class_offset(lv, (S20845C3*)(S20845C5*)(S20845C4*)(S20845C2*)(S20845C7*), ABISELECT(664,492), "S20845C6");
    /*is_ambiguous_... S20845C6::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C5*)(S20845C4*)(S20845C2*), 0, "S20845C6");
    /*is_ambiguous_... S20845C6::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C4*)(S20845C2*), 0, "S20845C6");
    /*is_ambiguous_... S20845C6::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C2*), 0, "S20845C6");
    /*is_ambiguous_... S20845C6::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C5*)(S20845C4*), ABISELECT(760,576), "S20845C6");
    /*is_ambiguous_... S20845C6::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C4*), ABISELECT(760,576), "S20845C6");
    /*is_ambiguous_... S20845C7::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C4*)(S20845C7*), ABISELECT(760,576), "S20845C6");
    /*is_ambiguous_... S20845C6::S20845C5 */ AMB_check_base_class_offset(lv, (S20845C5*), ABISELECT(864,636), "S20845C6");
    /*is_ambiguous_... S20845C7::S20845C5 */ AMB_check_base_class_offset(lv, (S20845C5*)(S20845C7*), ABISELECT(864,636), "S20845C6");
    check_base_class_offset(lv, (S20845C5*)(S20845C4*)(S20845C2*)(S20845C7*), ABISELECT(896,660), "S20845C6");
    check_base_class_offset(lv, (S20845C4*)(S20845C2*)(S20845C7*), ABISELECT(896,660), "S20845C6");
    check_base_class_offset(lv, (S20845C2*)(S20845C7*), ABISELECT(896,660), "S20845C6");
    check_base_class_offset(lv, (S20845C7*), ABISELECT(896,660), "S20845C6");
    check_base_class_offset(lv, (S3052C12*), ABISELECT(1264,916), "S20845C6");
    check_field_offset(lv, s20845c6f0, ABISELECT(308,228), "S20845C6.s20845c6f0");
    check_field_offset(lv, s20845c6f1, ABISELECT(312,232), "S20845C6.s20845c6f1");
    check_field_offset(lv, s20845c6f2, ABISELECT(320,240), "S20845C6.s20845c6f2");
    check_field_offset(lv, s20845c6f3, ABISELECT(328,248), "S20845C6.s20845c6f3");
    check_field_offset(lv, s20845c6f4, ABISELECT(344,264), "S20845C6.s20845c6f4");
    check_field_offset(lv, s20845c6f5, ABISELECT(552,412), "S20845C6.s20845c6f5");
    check_field_offset(lv, s20845c6f6, ABISELECT(576,424), "S20845C6.s20845c6f6");
    set_bf_and_test(lv, s20845c6f7, ABISELECT(656,484), 0, 5, 1, "S20845C6");
    set_bf_and_test(lv, s20845c6f7, ABISELECT(656,484), 0, 5, hide_sll(1LL<<4), "S20845C6");
    check_field_offset(lv, s20845c6f8, ABISELECT(660,488), "S20845C6.s20845c6f8");
    test_class_info(&lv, &cd_S20845C6);
    dp->~S20845C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20845C6(Test_S20845C6, "S20845C6", ABISELECT(1472,1064));

#else // __cplusplus

extern void _ZN8S20845C6C1Ev();
extern void _ZN8S20845C6D2Ev();
Name_Map name_map_S20845C6[] = {
  NSPAIR(_ZN8S20845C6C1Ev),
  NSPAIR(_ZN8S20845C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20845C3;
extern VTBL_ENTRY _ZTI8S20845C3[];
extern  VTBL_ENTRY _ZTV8S20845C3[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
extern Class_Descriptor cd_S20845C4;
extern VTBL_ENTRY _ZTI8S20845C4[];
extern  VTBL_ENTRY _ZTV8S20845C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C4[];
extern Class_Descriptor cd_S20845C2;
extern VTBL_ENTRY _ZTI8S20845C2[];
extern  VTBL_ENTRY _ZTV8S20845C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C2[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
extern Class_Descriptor cd_S20845C4;
extern VTBL_ENTRY _ZTI8S20845C4[];
extern  VTBL_ENTRY _ZTV8S20845C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C4[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
extern Class_Descriptor cd_S20845C4;
extern VTBL_ENTRY _ZTI8S20845C4[];
extern  VTBL_ENTRY _ZTV8S20845C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C4[];
extern Class_Descriptor cd_S20845C2;
extern VTBL_ENTRY _ZTI8S20845C2[];
extern  VTBL_ENTRY _ZTV8S20845C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C2[];
extern Class_Descriptor cd_S20845C7;
extern VTBL_ENTRY _ZTI8S20845C7[];
extern  VTBL_ENTRY _ZTV8S20845C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C7[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
static Base_Class bases_S20845C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20845C3,    ABISELECT(664,492), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //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
    1, //immediately_derived
  0, 1},
  {&cd_S20845C5,    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
    10, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20845C4,    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
    3, //immediately_derived
  0, 0},
  {&cd_S20845C2,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20845C5,    ABISELECT(760,576), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20845C4,    ABISELECT(760,576), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20845C5,    ABISELECT(864,636), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20845C5,    ABISELECT(896,660), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20845C4,    ABISELECT(896,660), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20845C2,    ABISELECT(896,660), //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
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20845C7,    ABISELECT(896,660), //bcp->offset
    35, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C12,    ABISELECT(1264,916), //bcp->offset
    47, //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
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20845C6[];
extern void _ZN8S20845C6D1Ev();
extern void _ZN8S20845C6D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
extern void _ZN8S20845C62v6Ev();
extern void ABISELECT(_ZTv0_n24_N8S20845C6D1Ev,_ZTv0_n12_N8S20845C6D1Ev)();
extern void ABISELECT(_ZThn664_N8S20845C6D1Ev,_ZThn492_N8S20845C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C6D0Ev,_ZTv0_n12_N8S20845C6D0Ev)();
extern void ABISELECT(_ZThn664_N8S20845C6D0Ev,_ZThn492_N8S20845C6D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
extern void ABISELECT(_ZTv0_n32_N8S20845C6D1Ev,_ZTv0_n16_N8S20845C6D1Ev)();
extern void ABISELECT(_ZThn760_N8S20845C6D1Ev,_ZThn576_N8S20845C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20845C6D0Ev,_ZTv0_n16_N8S20845C6D0Ev)();
extern void ABISELECT(_ZThn760_N8S20845C6D0Ev,_ZThn576_N8S20845C6D0Ev)() __attribute__((weak));
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
extern void ABISELECT(_ZTv0_n32_N8S20845C6D1Ev,_ZTv0_n16_N8S20845C6D1Ev)();
extern void ABISELECT(_ZThn864_N8S20845C6D1Ev,_ZThn636_N8S20845C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20845C6D0Ev,_ZTv0_n16_N8S20845C6D0Ev)();
extern void ABISELECT(_ZThn864_N8S20845C6D0Ev,_ZThn636_N8S20845C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20845C6D1Ev,_ZTv0_n24_N8S20845C6D1Ev)();
extern void ABISELECT(_ZThn896_N8S20845C6D1Ev,_ZThn660_N8S20845C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20845C6D0Ev,_ZTv0_n24_N8S20845C6D0Ev)();
extern void ABISELECT(_ZThn896_N8S20845C6D0Ev,_ZThn660_N8S20845C6D0Ev)() __attribute__((weak));
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S20845C6D1Ev,_ZTv0_n12_N8S20845C6D1Ev)();
extern void ABISELECT(_ZThn1264_N8S20845C6D1Ev,_ZThn916_N8S20845C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C6D0Ev,_ZTv0_n12_N8S20845C6D0Ev)();
extern void ABISELECT(_ZThn1264_N8S20845C6D0Ev,_ZThn916_N8S20845C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20845C6[] = {
  ABISELECT(1264,916),
  ABISELECT(896,660),
  ABISELECT(864,636),
  ABISELECT(760,576),
  ABISELECT(664,492),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C6[0]),
  (VTBL_ENTRY)&_ZN8S20845C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20845C62v6Ev,
  0,
  ABISELECT(-664,-492),
  ABISELECT(-664,-492),
  (VTBL_ENTRY)&(_ZTI8S20845C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C6D1Ev,_ZTv0_n12_N8S20845C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C6D0Ev,_ZTv0_n12_N8S20845C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
  0,
  0,
  ABISELECT(-760,-576),
  ABISELECT(-96,-84),
  ABISELECT(-760,-576),
  (VTBL_ENTRY)&(_ZTI8S20845C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C6D1Ev,_ZTv0_n16_N8S20845C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C6D0Ev,_ZTv0_n16_N8S20845C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
  ABISELECT(-864,-636),
  ABISELECT(-200,-144),
  ABISELECT(-864,-636),
  (VTBL_ENTRY)&(_ZTI8S20845C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C6D1Ev,_ZTv0_n16_N8S20845C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C6D0Ev,_ZTv0_n16_N8S20845C6D0Ev),
  0,
  0,
  ABISELECT(-896,-660),
  ABISELECT(-136,-84),
  ABISELECT(-32,-24),
  ABISELECT(-232,-168),
  ABISELECT(-896,-660),
  (VTBL_ENTRY)&(_ZTI8S20845C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20845C6D1Ev,_ZTv0_n24_N8S20845C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20845C6D0Ev,_ZTv0_n24_N8S20845C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
  ABISELECT(-1264,-916),
  ABISELECT(-1264,-916),
  (VTBL_ENTRY)&(_ZTI8S20845C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C6D1Ev,_ZTv0_n12_N8S20845C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C6D0Ev,_ZTv0_n12_N8S20845C6D0Ev),
};
extern VTBL_ENTRY _ZTV8S20845C6[];
extern void _ZN8S20845C2D1Ev();
extern void _ZN8S20845C2D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C2__8S20845C6[] = {
  ABISELECT(664,492),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C2[0]),
  (VTBL_ENTRY)&_ZN8S20845C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C4D1Ev();
extern void _ZN8S20845C4D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C48S20845C2__8S20845C6[] = {
  ABISELECT(664,492),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&_ZN8S20845C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C58S20845C48S20845C2__8S20845C6[] = {
  ABISELECT(664,492),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZThn664_N8S20845C5D1Ev,_ZThn492_N8S20845C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void ABISELECT(_ZThn664_N8S20845C5D0Ev,_ZThn492_N8S20845C5D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C58S20845C48S20845C2__8S20845C6[] = {
  0,
  ABISELECT(-664,-492),
  ABISELECT(-664,-492),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev)();
extern void ABISELECT(_ZThn664_N8S20845C4D1Ev,_ZThn492_N8S20845C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev)();
extern void ABISELECT(_ZThn664_N8S20845C4D0Ev,_ZThn492_N8S20845C4D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C48S20845C2__8S20845C6[] = {
  0,
  ABISELECT(-664,-492),
  ABISELECT(-664,-492),
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev)();
extern void ABISELECT(_ZThn664_N8S20845C2D1Ev,_ZThn492_N8S20845C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev)();
extern void ABISELECT(_ZThn664_N8S20845C2D0Ev,_ZThn492_N8S20845C2D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C2__8S20845C6[] = {
  0,
  ABISELECT(-664,-492),
  ABISELECT(-664,-492),
  (VTBL_ENTRY)&(_ZTI8S20845C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void _ZN8S20845C4D1Ev();
extern void _ZN8S20845C4D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C4__A1__8S20845C6[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&_ZN8S20845C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C58S20845C4__A1__8S20845C6[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C58S20845C4__A1__8S20845C6[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C4__A1__8S20845C6[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C5__A2__8S20845C6[] = {
  ABISELECT(-200,-144),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C5__A2__8S20845C6[] = {
  0,
  ABISELECT(200,144),
  ABISELECT(200,144),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void _ZN8S20845C7D1Ev();
extern void _ZN8S20845C7D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C7__8S20845C6[] = {
  ABISELECT(-136,-84),
  ABISELECT(-32,-24),
  ABISELECT(-232,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C7[0]),
  (VTBL_ENTRY)&_ZN8S20845C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C2D1Ev();
extern void _ZN8S20845C2D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C28S20845C7__A1__8S20845C6[] = {
  ABISELECT(-232,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C2[0]),
  (VTBL_ENTRY)&_ZN8S20845C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C4D1Ev();
extern void _ZN8S20845C4D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C48S20845C28S20845C7__A2__8S20845C6[] = {
  ABISELECT(-232,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&_ZN8S20845C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C58S20845C48S20845C28S20845C7__A3__8S20845C6[] = {
  ABISELECT(-232,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C58S20845C48S20845C28S20845C7__A3__8S20845C6[] = {
  0,
  ABISELECT(232,168),
  ABISELECT(232,168),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C48S20845C28S20845C7__A2__8S20845C6[] = {
  0,
  ABISELECT(232,168),
  ABISELECT(232,168),
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C28S20845C7__A1__8S20845C6[] = {
  0,
  ABISELECT(232,168),
  ABISELECT(232,168),
  (VTBL_ENTRY)&(_ZTI8S20845C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C7D1Ev,_ZTv0_n12_N8S20845C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C7D0Ev,_ZTv0_n12_N8S20845C7D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C7__8S20845C6[] = {
  0,
  ABISELECT(232,168),
  ABISELECT(232,168),
  (VTBL_ENTRY)&(_ZTI8S20845C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C7D1Ev,_ZTv0_n12_N8S20845C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C7D0Ev,_ZTv0_n12_N8S20845C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20845C7D1Ev,_ZTv0_n16_N8S20845C7D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S20845C7D0Ev,_ZTv0_n16_N8S20845C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20845C5__A1__8S20845C7__8S20845C6[] = {
  ABISELECT(32,24),
  ABISELECT(-200,-144),
  ABISELECT(32,24),
  (VTBL_ENTRY)&(_ZTI8S20845C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C7D1Ev,_ZTv0_n16_N8S20845C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C7D0Ev,_ZTv0_n16_N8S20845C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20845C7D1Ev,_ZTv0_n16_N8S20845C7D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S20845C7D0Ev,_ZTv0_n16_N8S20845C7D0Ev)();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C4__A1__8S20845C7__8S20845C6[] = {
  0,
  0,
  ABISELECT(136,84),
  ABISELECT(-96,-84),
  ABISELECT(136,84),
  (VTBL_ENTRY)&(_ZTI8S20845C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C7D1Ev,_ZTv0_n16_N8S20845C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C7D0Ev,_ZTv0_n16_N8S20845C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
static  VTT_ENTRY vtt_S20845C6[] = {
  {&(_ZTV8S20845C6[7]),  7,52},
  {&(_tg__ZTV8S20845C2__8S20845C6[3]),  3,7},
  {&(_tg__ZTV8S20845C48S20845C2__8S20845C6[3]),  3,7},
  {&(_tg__ZTV8S20845C58S20845C48S20845C2__8S20845C6[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C58S20845C48S20845C2__8S20845C6[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C48S20845C2__8S20845C6[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C2__8S20845C6[4]),  4,7},
  {&(_ZTV8S20845C6[16]),  16,52},
  {&(_ZTV8S20845C6[25]),  25,52},
  {&(_ZTV8S20845C6[33]),  33,52},
  {&(_ZTV8S20845C6[43]),  43,52},
  {&(_ZTV8S20845C6[50]),  50,52},
  {&(_tg__ZTV8S20845C4__A1__8S20845C6[3]),  3,7},
  {&(_tg__ZTV8S20845C58S20845C4__A1__8S20845C6[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C58S20845C4__A1__8S20845C6[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C4__A1__8S20845C6[4]),  4,7},
  {&(_tg__ZTV8S20845C5__A2__8S20845C6[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C5__A2__8S20845C6[4]),  4,7},
  {&(_tg__ZTV8S20845C7__8S20845C6[5]),  5,9},
  {&(_tg__ZTV8S20845C28S20845C7__A1__8S20845C6[3]),  3,7},
  {&(_tg__ZTV8S20845C48S20845C28S20845C7__A2__8S20845C6[3]),  3,7},
  {&(_tg__ZTV8S20845C58S20845C48S20845C28S20845C7__A3__8S20845C6[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C58S20845C48S20845C28S20845C7__A3__8S20845C6[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C48S20845C28S20845C7__A2__8S20845C6[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C28S20845C7__A1__8S20845C6[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C7__8S20845C6[4]),  4,7},
  {&(_tg__ZTV8S20845C5__A1__8S20845C7__8S20845C6[4]),  4,6},
  {&(_tg__ZTV8S20845C4__A1__8S20845C7__8S20845C6[6]),  6,10},
};
extern VTBL_ENTRY _ZTI8S20845C6[];
extern  VTBL_ENTRY _ZTV8S20845C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C6[];
static VTBL_ENTRY alt_thunk_names60[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N8S20845C2D0Ev,_ZThn492_N8S20845C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N8S20845C2D1Ev,_ZThn492_N8S20845C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N8S20845C4D0Ev,_ZThn492_N8S20845C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N8S20845C4D1Ev,_ZThn492_N8S20845C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N8S20845C5D0Ev,_ZThn492_N8S20845C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn664_N8S20845C5D1Ev,_ZThn492_N8S20845C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20845C6D0Ev,_ZTv0_n24_N8S20845C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn896_N8S20845C6D0Ev,_ZThn660_N8S20845C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20845C6D1Ev,_ZTv0_n24_N8S20845C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn896_N8S20845C6D1Ev,_ZThn660_N8S20845C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20845C6D0Ev,_ZTv0_n16_N8S20845C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N8S20845C6D0Ev,_ZThn636_N8S20845C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn760_N8S20845C6D0Ev,_ZThn576_N8S20845C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20845C6D1Ev,_ZTv0_n16_N8S20845C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn864_N8S20845C6D1Ev,_ZThn636_N8S20845C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn760_N8S20845C6D1Ev,_ZThn576_N8S20845C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C6D0Ev,_ZTv0_n12_N8S20845C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1264_N8S20845C6D0Ev,_ZThn916_N8S20845C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn664_N8S20845C6D0Ev,_ZThn492_N8S20845C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C6D1Ev,_ZTv0_n12_N8S20845C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1264_N8S20845C6D1Ev,_ZThn916_N8S20845C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn664_N8S20845C6D1Ev,_ZThn492_N8S20845C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20845C6 = {  "S20845C6", // class name
  bases_S20845C6, 12,
  &(vtc_S20845C6[0]), // expected_vtbl_contents
  &(vtt_S20845C6[0]), // expected_vtt_contents
  ABISELECT(1472,1064), // object size
  NSPAIRA(_ZTI8S20845C6),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20845C6),52, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20845C6),28, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names60,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20845C10  {
  int  :0;
  int s20845c10f1[6];
  int s20845c10f2;
  void *s20845c10f3;
  virtual void  v7(); // _ZN9S20845C102v7Ev
  ~S20845C10(); // tgen
  S20845C10(); // tgen
};
//SIG(-1 S20845C10) C1{ v1 Fi:0 Fi[7] Fp}


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

static void Test_S20845C10()
{
  extern Class_Descriptor cd_S20845C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S20845C10, buf);
    S20845C10 *dp, &lv = *(dp=new (buf) S20845C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S20845C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20845C10)");
    check_field_offset(lv, s20845c10f1, ABISELECT(8,4), "S20845C10.s20845c10f1");
    check_field_offset(lv, s20845c10f2, ABISELECT(32,28), "S20845C10.s20845c10f2");
    check_field_offset(lv, s20845c10f3, ABISELECT(40,32), "S20845C10.s20845c10f3");
    test_class_info(&lv, &cd_S20845C10);
    dp->~S20845C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20845C10(Test_S20845C10, "S20845C10", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN9S20845C10C1Ev();
extern void _ZN9S20845C10D1Ev();
Name_Map name_map_S20845C10[] = {
  NSPAIR(_ZN9S20845C10C1Ev),
  NSPAIR(_ZN9S20845C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S20845C10[];
extern void _ZN9S20845C102v7Ev();
static  VTBL_ENTRY vtc_S20845C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20845C10[0]),
  (VTBL_ENTRY)&_ZN9S20845C102v7Ev,
};
extern VTBL_ENTRY _ZTI9S20845C10[];
extern  VTBL_ENTRY _ZTV9S20845C10[];
Class_Descriptor cd_S20845C10 = {  "S20845C10", // class name
  0,0,//no base classes
  &(vtc_S20845C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI9S20845C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S20845C10),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  S20845C14  : virtual S20845C3 , S20845C4 , S20845C2 , S3052C12 , virtual S20845C5 {
  void *s20845c14f0;
  long s20845c14f1;
  ::S20845C2 s20845c14f2;
  ::S3052C12 s20845c14f3;
  ::S20845C5 s20845c14f4;
  int s20845c14f5;
  int s20845c14f6;
  ::S3052C13 s20845c14f7[9];
  ~S20845C14(); // tgen
  S20845C14(); // tgen
};
//SIG(-1 S20845C14) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} BC3{ VBC2 BC4{ VBC2 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} BC5{ VBC2 BC3 Fp[3] Fc:8 Fi[2] Fc FC2 Fp[3] FL[5] Fi} BC6{ vd m FC7{ VBC8{ vd v6 Fs[6] FL[8] Fi} BC9{ VBC8 FL Fp FL:54} v4 v5 Fc:0 Fp[8] Fc}} VBC4 Fp Fl FC5 FC6 FC4 Fi[2] FU10{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}


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

static void Test_S20845C14()
{
  extern Class_Descriptor cd_S20845C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(105,310)];
    init_test(&cd_S20845C14, buf);
    S20845C14 *dp, &lv = *(dp=new (buf) S20845C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1664,1236), "sizeof(S20845C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20845C14)");
    check_base_class_offset(lv, (S20845C3*), ABISELECT(1536,1128), "S20845C14");
    /*is_ambiguous_... S20845C14::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C4*), ABISELECT(1536,1128), "S20845C14");
    /*is_ambiguous_... S20845C14::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C5*)(S20845C4*), ABISELECT(1536,1128), "S20845C14");
    check_base_class_offset(lv, (S20845C3*)(S20845C2*), ABISELECT(1536,1128), "S20845C14");
    check_base_class_offset(lv, (S20845C3*)(S20845C4*)(S20845C2*), ABISELECT(1536,1128), "S20845C14");
    check_base_class_offset(lv, (S20845C3*)(S20845C5*)(S20845C4*)(S20845C2*), ABISELECT(1536,1128), "S20845C14");
    /*is_ambiguous_... S20845C14::S20845C5 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C5*), ABISELECT(1536,1128), "S20845C14");
    /*is_ambiguous_... S20845C14::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C5*)(S20845C4*), 0, "S20845C14");
    /*is_ambiguous_... S20845C14::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C4*), 0, "S20845C14");
    check_base_class_offset(lv, (S20845C5*)(S20845C4*)(S20845C2*), ABISELECT(104,60), "S20845C14");
    check_base_class_offset(lv, (S20845C4*)(S20845C2*), ABISELECT(104,60), "S20845C14");
    check_base_class_offset(lv, (S20845C2*), ABISELECT(104,60), "S20845C14");
    check_base_class_offset(lv, (S3052C12*), ABISELECT(416,288), "S20845C14");
    /*is_ambiguous_... S20845C14::S20845C5 */ AMB_check_base_class_offset(lv, (S20845C5*), ABISELECT(1632,1212), "S20845C14");
    check_field_offset(lv, s20845c14f0, ABISELECT(624,436), "S20845C14.s20845c14f0");
    check_field_offset(lv, s20845c14f1, ABISELECT(632,440), "S20845C14.s20845c14f1");
    check_field_offset(lv, s20845c14f2, ABISELECT(640,444), "S20845C14.s20845c14f2");
    check_field_offset(lv, s20845c14f3, ABISELECT(1048,756), "S20845C14.s20845c14f3");
    check_field_offset(lv, s20845c14f4, ABISELECT(1256,904), "S20845C14.s20845c14f4");
    check_field_offset(lv, s20845c14f5, ABISELECT(1384,1012), "S20845C14.s20845c14f5");
    check_field_offset(lv, s20845c14f6, ABISELECT(1388,1016), "S20845C14.s20845c14f6");
    check_field_offset(lv, s20845c14f7, ABISELECT(1392,1020), "S20845C14.s20845c14f7");
    test_class_info(&lv, &cd_S20845C14);
    dp->~S20845C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20845C14(Test_S20845C14, "S20845C14", ABISELECT(1664,1236));

#else // __cplusplus

extern void _ZN9S20845C14C1Ev();
extern void _ZN9S20845C14D1Ev();
Name_Map name_map_S20845C14[] = {
  NSPAIR(_ZN9S20845C14C1Ev),
  NSPAIR(_ZN9S20845C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20845C3;
extern VTBL_ENTRY _ZTI8S20845C3[];
extern  VTBL_ENTRY _ZTV8S20845C3[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
extern Class_Descriptor cd_S20845C4;
extern VTBL_ENTRY _ZTI8S20845C4[];
extern  VTBL_ENTRY _ZTV8S20845C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C4[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
extern Class_Descriptor cd_S20845C4;
extern VTBL_ENTRY _ZTI8S20845C4[];
extern  VTBL_ENTRY _ZTV8S20845C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C4[];
extern Class_Descriptor cd_S20845C2;
extern VTBL_ENTRY _ZTI8S20845C2[];
extern  VTBL_ENTRY _ZTV8S20845C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C2[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
static Base_Class bases_S20845C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20845C3,    ABISELECT(1536,1128), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //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
  1, 1},
  {&cd_S20845C5,    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
    3, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20845C4,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20845C5,    ABISELECT(104,60), //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
    5, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20845C4,    ABISELECT(104,60), //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
    5, //immediately_derived
  0, 0},
  {&cd_S20845C2,    ABISELECT(104,60), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //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},
  {&cd_S3052C12,    ABISELECT(416,288), //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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20845C5,    ABISELECT(1632,1212), //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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20845C14[];
extern void _ZN9S20845C14D1Ev();
extern void _ZN9S20845C14D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
extern void ABISELECT(_ZThn104_N9S20845C14D1Ev,_ZThn60_N9S20845C14D1Ev)();
extern void ABISELECT(_ZThn104_N9S20845C14D0Ev,_ZThn60_N9S20845C14D0Ev)();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
extern void ABISELECT(_ZThn416_N9S20845C14D1Ev,_ZThn288_N9S20845C14D1Ev)();
extern void ABISELECT(_ZThn416_N9S20845C14D0Ev,_ZThn288_N9S20845C14D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20845C14D1Ev,_ZTv0_n12_N9S20845C14D1Ev)();
extern void ABISELECT(_ZThn1536_N9S20845C14D1Ev,_ZThn1128_N9S20845C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20845C14D0Ev,_ZTv0_n12_N9S20845C14D0Ev)();
extern void ABISELECT(_ZThn1536_N9S20845C14D0Ev,_ZThn1128_N9S20845C14D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
extern void ABISELECT(_ZTv0_n32_N9S20845C14D1Ev,_ZTv0_n16_N9S20845C14D1Ev)();
extern void ABISELECT(_ZThn1632_N9S20845C14D1Ev,_ZThn1212_N9S20845C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20845C14D0Ev,_ZTv0_n16_N9S20845C14D0Ev)();
extern void ABISELECT(_ZThn1632_N9S20845C14D0Ev,_ZThn1212_N9S20845C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20845C14[] = {
  ABISELECT(1632,1212),
  ABISELECT(1536,1128),
  0,
  (VTBL_ENTRY)&(_ZTI9S20845C14[0]),
  (VTBL_ENTRY)&_ZN9S20845C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20845C14D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
  ABISELECT(1432,1068),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI9S20845C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S20845C14D1Ev,_ZThn60_N9S20845C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S20845C14D0Ev,_ZThn60_N9S20845C14D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
  ABISELECT(-416,-288),
  (VTBL_ENTRY)&(_ZTI9S20845C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn416_N9S20845C14D1Ev,_ZThn288_N9S20845C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn416_N9S20845C14D0Ev,_ZThn288_N9S20845C14D0Ev),
  0,
  ABISELECT(-1536,-1128),
  ABISELECT(-1536,-1128),
  (VTBL_ENTRY)&(_ZTI9S20845C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20845C14D1Ev,_ZTv0_n12_N9S20845C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20845C14D0Ev,_ZTv0_n12_N9S20845C14D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
  ABISELECT(-1632,-1212),
  ABISELECT(-96,-84),
  ABISELECT(-1632,-1212),
  (VTBL_ENTRY)&(_ZTI9S20845C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20845C14D1Ev,_ZTv0_n16_N9S20845C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20845C14D0Ev,_ZTv0_n16_N9S20845C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S20845C14[];
extern void _ZN8S20845C4D1Ev();
extern void _ZN8S20845C4D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C4__9S20845C14[] = {
  ABISELECT(1536,1128),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&_ZN8S20845C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C58S20845C4__9S20845C14[] = {
  ABISELECT(1536,1128),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZThn1536_N8S20845C5D1Ev,_ZThn1128_N8S20845C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void ABISELECT(_ZThn1536_N8S20845C5D0Ev,_ZThn1128_N8S20845C5D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C58S20845C4__9S20845C14[] = {
  0,
  ABISELECT(-1536,-1128),
  ABISELECT(-1536,-1128),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev)();
extern void ABISELECT(_ZThn1536_N8S20845C4D1Ev,_ZThn1128_N8S20845C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev)();
extern void ABISELECT(_ZThn1536_N8S20845C4D0Ev,_ZThn1128_N8S20845C4D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C4__9S20845C14[] = {
  0,
  ABISELECT(-1536,-1128),
  ABISELECT(-1536,-1128),
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void _ZN8S20845C2D1Ev();
extern void _ZN8S20845C2D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C2__9S20845C14[] = {
  ABISELECT(1432,1068),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C2[0]),
  (VTBL_ENTRY)&_ZN8S20845C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C4D1Ev();
extern void _ZN8S20845C4D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C48S20845C2__A1__9S20845C14[] = {
  ABISELECT(1432,1068),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&_ZN8S20845C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C58S20845C48S20845C2__A1__9S20845C14[] = {
  ABISELECT(1432,1068),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZThn1432_N8S20845C5D1Ev,_ZThn1068_N8S20845C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void ABISELECT(_ZThn1432_N8S20845C5D0Ev,_ZThn1068_N8S20845C5D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C58S20845C48S20845C2__A1__9S20845C14[] = {
  0,
  ABISELECT(-1432,-1068),
  ABISELECT(-1432,-1068),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev)();
extern void ABISELECT(_ZThn1432_N8S20845C4D1Ev,_ZThn1068_N8S20845C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev)();
extern void ABISELECT(_ZThn1432_N8S20845C4D0Ev,_ZThn1068_N8S20845C4D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C48S20845C2__A1__9S20845C14[] = {
  0,
  ABISELECT(-1432,-1068),
  ABISELECT(-1432,-1068),
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev)();
extern void ABISELECT(_ZThn1432_N8S20845C2D1Ev,_ZThn1068_N8S20845C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev)();
extern void ABISELECT(_ZThn1432_N8S20845C2D0Ev,_ZThn1068_N8S20845C2D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C2__9S20845C14[] = {
  0,
  ABISELECT(-1432,-1068),
  ABISELECT(-1432,-1068),
  (VTBL_ENTRY)&(_ZTI8S20845C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C5__A2__9S20845C14[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C5__A2__9S20845C14[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
static  VTT_ENTRY vtt_S20845C14[] = {
  {&(_ZTV9S20845C14[4]),  4,32},
  {&(_tg__ZTV8S20845C4__9S20845C14[3]),  3,7},
  {&(_tg__ZTV8S20845C58S20845C4__9S20845C14[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C58S20845C4__9S20845C14[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C4__9S20845C14[4]),  4,7},
  {&(_tg__ZTV8S20845C2__9S20845C14[3]),  3,7},
  {&(_tg__ZTV8S20845C48S20845C2__A1__9S20845C14[3]),  3,7},
  {&(_tg__ZTV8S20845C58S20845C48S20845C2__A1__9S20845C14[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C58S20845C48S20845C2__A1__9S20845C14[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C48S20845C2__A1__9S20845C14[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C2__9S20845C14[4]),  4,7},
  {&(_ZTV9S20845C14[23]),  23,32},
  {&(_ZTV9S20845C14[11]),  11,32},
  {&(_ZTV9S20845C14[30]),  30,32},
  {&(_tg__ZTV8S20845C5__A2__9S20845C14[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C5__A2__9S20845C14[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S20845C14[];
extern  VTBL_ENTRY _ZTV9S20845C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20845C14[];
static VTBL_ENTRY alt_thunk_names61[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S20845C2D0Ev,_ZThn1068_N8S20845C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S20845C2D1Ev,_ZThn1068_N8S20845C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S20845C4D0Ev,_ZThn1068_N8S20845C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S20845C4D0Ev,_ZThn1128_N8S20845C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S20845C4D1Ev,_ZThn1068_N8S20845C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S20845C4D1Ev,_ZThn1128_N8S20845C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S20845C5D0Ev,_ZThn1068_N8S20845C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S20845C5D0Ev,_ZThn1128_N8S20845C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1432_N8S20845C5D1Ev,_ZThn1068_N8S20845C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N8S20845C5D1Ev,_ZThn1128_N8S20845C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20845C14D0Ev,_ZTv0_n16_N9S20845C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1632_N9S20845C14D0Ev,_ZThn1212_N9S20845C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20845C14D1Ev,_ZTv0_n16_N9S20845C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1632_N9S20845C14D1Ev,_ZThn1212_N9S20845C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20845C14D0Ev,_ZTv0_n12_N9S20845C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N9S20845C14D0Ev,_ZThn1128_N9S20845C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20845C14D1Ev,_ZTv0_n12_N9S20845C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N9S20845C14D1Ev,_ZThn1128_N9S20845C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20845C14 = {  "S20845C14", // class name
  bases_S20845C14, 8,
  &(vtc_S20845C14[0]), // expected_vtbl_contents
  &(vtt_S20845C14[0]), // expected_vtt_contents
  ABISELECT(1664,1236), // object size
  NSPAIRA(_ZTI9S20845C14),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20845C14),32, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20845C14),16, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names61,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20845C12  : S3052C10 , virtual S20845C4 {
  void *s20845c12f0;
  char s20845c12f1[4];
  int s20845c12f2:11;
  void *s20845c12f3;
  void *s20845c12f4;
  int s20845c12f5[6];
  ::S20845C14 s20845c12f6[6];
  ~S20845C12(); // tgen
  S20845C12(); // tgen
};
//SIG(-1 S20845C12) C1{ BC2{ m Fp Fi FL Fp Fi} VBC3{ VBC4{ vd v1 Fs[6] FL[8] Fi} BC5{ VBC4 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp Fc[4] Fi:11 Fp[2] Fi[6] FC6{ VBC4 BC3 BC7{ VBC4 BC3 Fp[3] Fc:8 Fi[2] Fc FC4 Fp[3] FL[5] Fi} BC8{ vd m FC9{ VBC10{ vd v6 Fs[6] FL[8] Fi} BC11{ VBC10 FL Fp FL:54} v4 v5 Fc:0 Fp[8] Fc}} VBC5 Fp Fl FC7 FC8 FC5 Fi[2] FU12{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]}


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

static void Test_S20845C12()
{
  extern Class_Descriptor cd_S20845C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(645,1909)];
    init_test(&cd_S20845C12, buf);
    S20845C12 *dp, &lv = *(dp=new (buf) S20845C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(10304,7632), "sizeof(S20845C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20845C12)");
    check_base_class_offset(lv, (S3052C10*), ABISELECT(8,4), "S20845C12");
    check_base_class_offset(lv, (S20845C3*)(S20845C4*), ABISELECT(10200,7548), "S20845C12");
    check_base_class_offset(lv, (S20845C3*)(S20845C5*)(S20845C4*), ABISELECT(10200,7548), "S20845C12");
    check_base_class_offset(lv, (S20845C5*)(S20845C4*), ABISELECT(10096,7488), "S20845C12");
    check_base_class_offset(lv, (S20845C4*), ABISELECT(10096,7488), "S20845C12");
    check_field_offset(lv, s20845c12f0, ABISELECT(48,28), "S20845C12.s20845c12f0");
    check_field_offset(lv, s20845c12f1, ABISELECT(56,32), "S20845C12.s20845c12f1");
    set_bf_and_test(lv, s20845c12f2, ABISELECT(60,36), 0, 11, 1, "S20845C12");
    set_bf_and_test(lv, s20845c12f2, ABISELECT(60,36), 0, 11, hide_sll(1LL<<10), "S20845C12");
    check_field_offset(lv, s20845c12f3, ABISELECT(64,40), "S20845C12.s20845c12f3");
    check_field_offset(lv, s20845c12f4, ABISELECT(72,44), "S20845C12.s20845c12f4");
    check_field_offset(lv, s20845c12f5, ABISELECT(80,48), "S20845C12.s20845c12f5");
    check_field_offset(lv, s20845c12f6, ABISELECT(112,72), "S20845C12.s20845c12f6");
    test_class_info(&lv, &cd_S20845C12);
    dp->~S20845C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20845C12(Test_S20845C12, "S20845C12", ABISELECT(10304,7632));

#else // __cplusplus

extern void _ZN9S20845C12C1Ev();
extern void _ZN9S20845C12D1Ev();
Name_Map name_map_S20845C12[] = {
  NSPAIR(_ZN9S20845C12C1Ev),
  NSPAIR(_ZN9S20845C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S20845C3;
extern VTBL_ENTRY _ZTI8S20845C3[];
extern  VTBL_ENTRY _ZTV8S20845C3[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
extern Class_Descriptor cd_S20845C4;
extern VTBL_ENTRY _ZTI8S20845C4[];
extern  VTBL_ENTRY _ZTV8S20845C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C4[];
static Base_Class bases_S20845C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C10,    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_S20845C3,    ABISELECT(10200,7548), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //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_S20845C5,    ABISELECT(10096,7488), //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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20845C4,    ABISELECT(10096,7488), //bcp->offset
    6, //bcp->virtual_function_table_offset
    6, //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},
  {0}};
extern VTBL_ENTRY _ZTI9S20845C12[];
extern void _ZN9S20845C12D1Ev();
extern void _ZN9S20845C12D0Ev();
extern void ABISELECT(_ZTv0_n32_N9S20845C12D1Ev,_ZTv0_n16_N9S20845C12D1Ev)();
extern void ABISELECT(_ZThn10096_N9S20845C12D1Ev,_ZThn7488_N9S20845C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20845C12D0Ev,_ZTv0_n16_N9S20845C12D0Ev)();
extern void ABISELECT(_ZThn10096_N9S20845C12D0Ev,_ZThn7488_N9S20845C12D0Ev)() __attribute__((weak));
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
extern void ABISELECT(_ZTv0_n24_N9S20845C12D1Ev,_ZTv0_n12_N9S20845C12D1Ev)();
extern void ABISELECT(_ZThn10200_N9S20845C12D1Ev,_ZThn7548_N9S20845C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20845C12D0Ev,_ZTv0_n12_N9S20845C12D0Ev)();
extern void ABISELECT(_ZThn10200_N9S20845C12D0Ev,_ZThn7548_N9S20845C12D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY vtc_S20845C12[] = {
  ABISELECT(10200,7548),
  ABISELECT(10096,7488),
  0,
  (VTBL_ENTRY)&(_ZTI9S20845C12[0]),
  (VTBL_ENTRY)&_ZN9S20845C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20845C12D0Ev,
  0,
  0,
  ABISELECT(-10096,-7488),
  ABISELECT(104,60),
  ABISELECT(-10096,-7488),
  (VTBL_ENTRY)&(_ZTI9S20845C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20845C12D1Ev,_ZTv0_n16_N9S20845C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20845C12D0Ev,_ZTv0_n16_N9S20845C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
  0,
  ABISELECT(-10200,-7548),
  ABISELECT(-10200,-7548),
  (VTBL_ENTRY)&(_ZTI9S20845C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20845C12D1Ev,_ZTv0_n12_N9S20845C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20845C12D0Ev,_ZTv0_n12_N9S20845C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern VTBL_ENTRY _ZTV9S20845C12[];
extern void _ZN8S20845C4D1Ev();
extern void _ZN8S20845C4D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C4__9S20845C12[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&_ZN8S20845C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C58S20845C4__9S20845C12[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZThn104_N8S20845C5D1Ev,_ZThn60_N8S20845C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void ABISELECT(_ZThn104_N8S20845C5D0Ev,_ZThn60_N8S20845C5D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C58S20845C4__9S20845C12[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev)();
extern void ABISELECT(_ZThn104_N8S20845C4D1Ev,_ZThn60_N8S20845C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev)();
extern void ABISELECT(_ZThn104_N8S20845C4D0Ev,_ZThn60_N8S20845C4D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C4__9S20845C12[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
static  VTT_ENTRY vtt_S20845C12[] = {
  {&(_ZTV9S20845C12[4]),  4,23},
  {&(_ZTV9S20845C12[12]),  12,23},
  {&(_ZTV9S20845C12[20]),  20,23},
  {&(_tg__ZTV8S20845C4__9S20845C12[3]),  3,7},
  {&(_tg__ZTV8S20845C58S20845C4__9S20845C12[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C58S20845C4__9S20845C12[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C4__9S20845C12[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S20845C12[];
extern  VTBL_ENTRY _ZTV9S20845C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20845C12[];
static VTBL_ENTRY alt_thunk_names62[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20845C4D0Ev,_ZThn60_N8S20845C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20845C4D1Ev,_ZThn60_N8S20845C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20845C5D0Ev,_ZThn60_N8S20845C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20845C5D1Ev,_ZThn60_N8S20845C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20845C12D0Ev,_ZTv0_n12_N9S20845C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10200_N9S20845C12D0Ev,_ZThn7548_N9S20845C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20845C12D1Ev,_ZTv0_n12_N9S20845C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10200_N9S20845C12D1Ev,_ZThn7548_N9S20845C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20845C12D0Ev,_ZTv0_n16_N9S20845C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10096_N9S20845C12D0Ev,_ZThn7488_N9S20845C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20845C12D1Ev,_ZTv0_n16_N9S20845C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10096_N9S20845C12D1Ev,_ZThn7488_N9S20845C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20845C12 = {  "S20845C12", // class name
  bases_S20845C12, 4,
  &(vtc_S20845C12[0]), // expected_vtbl_contents
  &(vtt_S20845C12[0]), // expected_vtt_contents
  ABISELECT(10304,7632), // object size
  NSPAIRA(_ZTI9S20845C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20845C12),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20845C12),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names62,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20845C11  : S20845C2 , virtual S20845C4 , S20845C12 , virtual S20845C14 , virtual S3052C12 {
  ::S3052C12 s20845c11f0[2];
  int s20845c11f1;
  long double s20845c11f2;
  long double s20845c11f3;
  char  :0;
  void *s20845c11f5;
  virtual  ~S20845C11(); // _ZN9S20845C11D2Ev
  S20845C11(); // tgen
};
//SIG(-1 S20845C11) C1{ BC2{ VBC3{ vd v1 Fs[6] FL[8] Fi} BC4{ VBC3 BC5{ VBC3 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC3 Fp[3] FL[5] Fi} VBC4 BC6{ BC7{ m Fp Fi FL Fp Fi} VBC4 Fp Fc[4] Fi:11 Fp[2] Fi[6] FC8{ VBC3 BC4 BC2 BC9{ vd m FC10{ VBC11{ vd v6 Fs[6] FL[8] Fi} BC12{ VBC11 FL Fp FL:54} v4 v5 Fc:0 Fp[8] Fc}} VBC5 Fp Fl FC2 FC9 FC5 Fi[2] FU13{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} VBC8 VBC9 vd FC9[2] Fi FD FD Fc:0 Fp}


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

static void Test_S20845C11()
{
  extern Class_Descriptor cd_S20845C11;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(805,2373)];
    init_test(&cd_S20845C11, buf);
    S20845C11 *dp, &lv = *(dp=new (buf) S20845C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(12864,9488), "sizeof(S20845C11)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20845C11)");
    /*is_ambiguous_... S20845C11::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C2*), ABISELECT(10888,8044), "S20845C11");
    /*is_ambiguous_... S20845C11::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C4*)(S20845C2*), ABISELECT(10888,8044), "S20845C11");
    /*is_ambiguous_... S20845C11::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C5*)(S20845C4*)(S20845C2*), ABISELECT(10888,8044), "S20845C11");
    /*is_ambiguous_... S20845C11::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C4*), ABISELECT(10888,8044), "S20845C11");
    /*is_ambiguous_... S20845C11::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C5*)(S20845C4*), ABISELECT(10888,8044), "S20845C11");
    check_base_class_offset(lv, (S20845C3*)(S20845C14*), ABISELECT(10888,8044), "S20845C11");
    /*is_ambiguous_... S20845C14::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C4*)(S20845C14*), ABISELECT(10888,8044), "S20845C11");
    /*is_ambiguous_... S20845C14::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C5*)(S20845C4*)(S20845C14*), ABISELECT(10888,8044), "S20845C11");
    check_base_class_offset(lv, (S20845C3*)(S20845C2*)(S20845C14*), ABISELECT(10888,8044), "S20845C11");
    check_base_class_offset(lv, (S20845C3*)(S20845C4*)(S20845C2*)(S20845C14*), ABISELECT(10888,8044), "S20845C11");
    check_base_class_offset(lv, (S20845C3*)(S20845C5*)(S20845C4*)(S20845C2*)(S20845C14*), ABISELECT(10888,8044), "S20845C11");
    /*is_ambiguous_... S20845C11::S20845C5 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C5*), ABISELECT(10888,8044), "S20845C11");
    /*is_ambiguous_... S20845C11::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C5*)(S20845C4*)(S20845C2*), 0, "S20845C11");
    /*is_ambiguous_... S20845C11::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C4*)(S20845C2*), 0, "S20845C11");
    /*is_ambiguous_... S20845C11::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C2*), 0, "S20845C11");
    /*is_ambiguous_... S20845C11::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C5*)(S20845C4*), ABISELECT(10984,8128), "S20845C11");
    /*is_ambiguous_... S20845C11::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C4*), ABISELECT(10984,8128), "S20845C11");
    check_base_class_offset(lv, (S20845C4*)(S20845C12*), ABISELECT(10984,8128), "S20845C11");
    check_base_class_offset(lv, (S3052C10*)(S20845C12*), ABISELECT(328,232), "S20845C11");
    check_base_class_offset(lv, (S20845C12*), ABISELECT(320,228), "S20845C11");
    /*is_ambiguous_... S20845C14::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C5*)(S20845C4*)(S20845C14*), ABISELECT(11088,8188), "S20845C11");
    /*is_ambiguous_... S20845C14::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C4*)(S20845C14*), ABISELECT(11088,8188), "S20845C11");
    check_base_class_offset(lv, (S20845C5*)(S20845C4*)(S20845C2*)(S20845C14*), ABISELECT(11192,8248), "S20845C11");
    check_base_class_offset(lv, (S20845C4*)(S20845C2*)(S20845C14*), ABISELECT(11192,8248), "S20845C11");
    check_base_class_offset(lv, (S20845C2*)(S20845C14*), ABISELECT(11192,8248), "S20845C11");
    check_base_class_offset(lv, (S3052C12*)(S20845C14*), ABISELECT(11504,8476), "S20845C11");
    /*is_ambiguous_... S20845C14::S20845C5 */ AMB_check_base_class_offset(lv, (S20845C5*)(S20845C14*), ABISELECT(12624,9316), "S20845C11");
    check_base_class_offset(lv, (S20845C14*), ABISELECT(11088,8188), "S20845C11");
    /*is_ambiguous_... S20845C11::S3052C12 */ AMB_check_base_class_offset(lv, (S3052C12*), ABISELECT(12656,9340), "S20845C11");
    check_field_offset(lv, s20845c11f0, ABISELECT(10416,7716), "S20845C11.s20845c11f0");
    check_field_offset(lv, s20845c11f1, ABISELECT(10832,8012), "S20845C11.s20845c11f1");
    check_field_offset(lv, s20845c11f2, ABISELECT(10848,8016), "S20845C11.s20845c11f2");
    check_field_offset(lv, s20845c11f3, ABISELECT(10864,8028), "S20845C11.s20845c11f3");
    check_field_offset(lv, s20845c11f5, ABISELECT(10880,8040), "S20845C11.s20845c11f5");
    test_class_info(&lv, &cd_S20845C11);
    dp->~S20845C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20845C11(Test_S20845C11, "S20845C11", ABISELECT(12864,9488));

#else // __cplusplus

extern void _ZN9S20845C11C1Ev();
extern void _ZN9S20845C11D2Ev();
Name_Map name_map_S20845C11[] = {
  NSPAIR(_ZN9S20845C11C1Ev),
  NSPAIR(_ZN9S20845C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20845C3;
extern VTBL_ENTRY _ZTI8S20845C3[];
extern  VTBL_ENTRY _ZTV8S20845C3[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
extern Class_Descriptor cd_S20845C4;
extern VTBL_ENTRY _ZTI8S20845C4[];
extern  VTBL_ENTRY _ZTV8S20845C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C4[];
extern Class_Descriptor cd_S20845C2;
extern VTBL_ENTRY _ZTI8S20845C2[];
extern  VTBL_ENTRY _ZTV8S20845C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C2[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
extern Class_Descriptor cd_S20845C4;
extern VTBL_ENTRY _ZTI8S20845C4[];
extern  VTBL_ENTRY _ZTV8S20845C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C4[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S20845C12;
extern VTBL_ENTRY _ZTI9S20845C12[];
extern  VTBL_ENTRY _ZTV9S20845C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20845C12[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
extern Class_Descriptor cd_S20845C4;
extern VTBL_ENTRY _ZTI8S20845C4[];
extern  VTBL_ENTRY _ZTV8S20845C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C4[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
extern Class_Descriptor cd_S20845C4;
extern VTBL_ENTRY _ZTI8S20845C4[];
extern  VTBL_ENTRY _ZTV8S20845C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C4[];
extern Class_Descriptor cd_S20845C2;
extern VTBL_ENTRY _ZTI8S20845C2[];
extern  VTBL_ENTRY _ZTV8S20845C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C2[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
extern Class_Descriptor cd_S20845C14;
extern VTBL_ENTRY _ZTI9S20845C14[];
extern  VTBL_ENTRY _ZTV9S20845C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20845C14[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
static Base_Class bases_S20845C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20845C3,    ABISELECT(10888,8044), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //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_S20845C5,    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
    13, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20845C4,    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
    3, //immediately_derived
  0, 0},
  {&cd_S20845C2,    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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20845C5,    ABISELECT(10984,8128), //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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20845C4,    ABISELECT(10984,8128), //bcp->offset
    24, //bcp->virtual_function_table_offset
    6, //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
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C10,    ABISELECT(328,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
    7, //immediately_derived
  0, 0},
  {&cd_S20845C12,    ABISELECT(320,228), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20845C5,    ABISELECT(11088,8188), //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
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20845C4,    ABISELECT(11088,8188), //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
    6, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20845C5,    ABISELECT(11192,8248), //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
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20845C4,    ABISELECT(11192,8248), //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
    12, //immediately_derived
  0, 0},
  {&cd_S20845C2,    ABISELECT(11192,8248), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S3052C12,    ABISELECT(11504,8476), //bcp->offset
    52, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20845C5,    ABISELECT(12624,9316), //bcp->offset
    56, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20845C14,    ABISELECT(11088,8188), //bcp->offset
    34, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S3052C12,    ABISELECT(12656,9340), //bcp->offset
    62, //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
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20845C11[];
extern void _ZN9S20845C11D1Ev();
extern void _ZN9S20845C11D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
extern void ABISELECT(_ZThn320_N9S20845C11D1Ev,_ZThn228_N9S20845C11D1Ev)();
extern void ABISELECT(_ZThn320_N9S20845C11D0Ev,_ZThn228_N9S20845C11D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20845C11D1Ev,_ZTv0_n12_N9S20845C11D1Ev)();
extern void ABISELECT(_ZThn10888_N9S20845C11D1Ev,_ZThn8044_N9S20845C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20845C11D0Ev,_ZTv0_n12_N9S20845C11D0Ev)();
extern void ABISELECT(_ZThn10888_N9S20845C11D0Ev,_ZThn8044_N9S20845C11D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
extern void ABISELECT(_ZTv0_n32_N9S20845C11D1Ev,_ZTv0_n16_N9S20845C11D1Ev)();
extern void ABISELECT(_ZThn10984_N9S20845C11D1Ev,_ZThn8128_N9S20845C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20845C11D0Ev,_ZTv0_n16_N9S20845C11D0Ev)();
extern void ABISELECT(_ZThn10984_N9S20845C11D0Ev,_ZThn8128_N9S20845C11D0Ev)() __attribute__((weak));
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
extern void ABISELECT(_ZTv0_n40_N9S20845C11D1Ev,_ZTv0_n20_N9S20845C11D1Ev)();
extern void ABISELECT(_ZThn11088_N9S20845C11D1Ev,_ZThn8188_N9S20845C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20845C11D0Ev,_ZTv0_n20_N9S20845C11D0Ev)();
extern void ABISELECT(_ZThn11088_N9S20845C11D0Ev,_ZThn8188_N9S20845C11D0Ev)() __attribute__((weak));
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
extern void ABISELECT(_ZTvn104_n40_N9S20845C11D1Ev,_ZTvn60_n20_N9S20845C11D1Ev)();
extern void ABISELECT(_ZTvn104_n40_N9S20845C11D0Ev,_ZTvn60_n20_N9S20845C11D0Ev)();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
extern void ABISELECT(_ZTvn416_n40_N9S20845C11D1Ev,_ZTvn288_n20_N9S20845C11D1Ev)();
extern void ABISELECT(_ZTvn416_n40_N9S20845C11D0Ev,_ZTvn288_n20_N9S20845C11D0Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20845C11D1Ev,_ZTv0_n16_N9S20845C11D1Ev)();
extern void ABISELECT(_ZThn12624_N9S20845C11D1Ev,_ZThn9316_N9S20845C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20845C11D0Ev,_ZTv0_n16_N9S20845C11D0Ev)();
extern void ABISELECT(_ZThn12624_N9S20845C11D0Ev,_ZThn9316_N9S20845C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20845C11D1Ev,_ZTv0_n12_N9S20845C11D1Ev)();
extern void ABISELECT(_ZThn12656_N9S20845C11D1Ev,_ZThn9340_N9S20845C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20845C11D0Ev,_ZTv0_n12_N9S20845C11D0Ev)();
extern void ABISELECT(_ZThn12656_N9S20845C11D0Ev,_ZThn9340_N9S20845C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20845C11[] = {
  ABISELECT(12656,9340),
  ABISELECT(12624,9316),
  ABISELECT(11088,8188),
  ABISELECT(10984,8128),
  ABISELECT(10888,8044),
  0,
  (VTBL_ENTRY)&(_ZTI9S20845C11[0]),
  (VTBL_ENTRY)&_ZN9S20845C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20845C11D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
  ABISELECT(10568,7816),
  ABISELECT(10664,7900),
  ABISELECT(-320,-228),
  (VTBL_ENTRY)&(_ZTI9S20845C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N9S20845C11D1Ev,_ZThn228_N9S20845C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N9S20845C11D0Ev,_ZThn228_N9S20845C11D0Ev),
  0,
  ABISELECT(-10888,-8044),
  ABISELECT(-10888,-8044),
  (VTBL_ENTRY)&(_ZTI9S20845C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20845C11D1Ev,_ZTv0_n12_N9S20845C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20845C11D0Ev,_ZTv0_n12_N9S20845C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
  0,
  0,
  ABISELECT(-10984,-8128),
  ABISELECT(-96,-84),
  ABISELECT(-10984,-8128),
  (VTBL_ENTRY)&(_ZTI9S20845C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20845C11D1Ev,_ZTv0_n16_N9S20845C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20845C11D0Ev,_ZTv0_n16_N9S20845C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
  0,
  0,
  ABISELECT(-11088,-8188),
  ABISELECT(1536,1128),
  ABISELECT(-200,-144),
  ABISELECT(-11088,-8188),
  (VTBL_ENTRY)&(_ZTI9S20845C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20845C11D1Ev,_ZTv0_n20_N9S20845C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20845C11D0Ev,_ZTv0_n20_N9S20845C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
  ABISELECT(-304,-204),
  ABISELECT(-11192,-8248),
  (VTBL_ENTRY)&(_ZTI9S20845C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N9S20845C11D1Ev,_ZTvn60_n20_N9S20845C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N9S20845C11D0Ev,_ZTvn60_n20_N9S20845C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
  ABISELECT(-11504,-8476),
  (VTBL_ENTRY)&(_ZTI9S20845C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N9S20845C11D1Ev,_ZTvn288_n20_N9S20845C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N9S20845C11D0Ev,_ZTvn288_n20_N9S20845C11D0Ev),
  ABISELECT(-12624,-9316),
  ABISELECT(-1736,-1272),
  ABISELECT(-12624,-9316),
  (VTBL_ENTRY)&(_ZTI9S20845C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20845C11D1Ev,_ZTv0_n16_N9S20845C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20845C11D0Ev,_ZTv0_n16_N9S20845C11D0Ev),
  ABISELECT(-12656,-9340),
  ABISELECT(-12656,-9340),
  (VTBL_ENTRY)&(_ZTI9S20845C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20845C11D1Ev,_ZTv0_n12_N9S20845C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20845C11D0Ev,_ZTv0_n12_N9S20845C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S20845C11[];
extern void _ZN8S20845C2D1Ev();
extern void _ZN8S20845C2D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C2__9S20845C11[] = {
  ABISELECT(10888,8044),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C2[0]),
  (VTBL_ENTRY)&_ZN8S20845C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C4D1Ev();
extern void _ZN8S20845C4D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C48S20845C2__9S20845C11[] = {
  ABISELECT(10888,8044),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&_ZN8S20845C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C58S20845C48S20845C2__9S20845C11[] = {
  ABISELECT(10888,8044),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZThn10888_N8S20845C5D1Ev,_ZThn8044_N8S20845C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void ABISELECT(_ZThn10888_N8S20845C5D0Ev,_ZThn8044_N8S20845C5D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C58S20845C48S20845C2__9S20845C11[] = {
  0,
  ABISELECT(-10888,-8044),
  ABISELECT(-10888,-8044),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev)();
extern void ABISELECT(_ZThn10888_N8S20845C4D1Ev,_ZThn8044_N8S20845C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev)();
extern void ABISELECT(_ZThn10888_N8S20845C4D0Ev,_ZThn8044_N8S20845C4D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C48S20845C2__9S20845C11[] = {
  0,
  ABISELECT(-10888,-8044),
  ABISELECT(-10888,-8044),
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev)();
extern void ABISELECT(_ZThn10888_N8S20845C2D1Ev,_ZThn8044_N8S20845C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev)();
extern void ABISELECT(_ZThn10888_N8S20845C2D0Ev,_ZThn8044_N8S20845C2D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C2__9S20845C11[] = {
  0,
  ABISELECT(-10888,-8044),
  ABISELECT(-10888,-8044),
  (VTBL_ENTRY)&(_ZTI8S20845C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void _ZN9S20845C12D1Ev();
extern void _ZN9S20845C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20845C12__9S20845C11[] = {
  ABISELECT(10568,7816),
  ABISELECT(10664,7900),
  0,
  (VTBL_ENTRY)&(_ZTI9S20845C12[0]),
  (VTBL_ENTRY)&_ZN9S20845C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20845C12D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20845C12D1Ev,_ZTv0_n16_N9S20845C12D1Ev)();
extern void ABISELECT(_ZThn10664_N9S20845C12D1Ev,_ZThn7900_N9S20845C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20845C12D0Ev,_ZTv0_n16_N9S20845C12D0Ev)();
extern void ABISELECT(_ZThn10664_N9S20845C12D0Ev,_ZThn7900_N9S20845C12D0Ev)() __attribute__((weak));
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C4__9S20845C12__9S20845C11[] = {
  0,
  0,
  ABISELECT(-10664,-7900),
  ABISELECT(-96,-84),
  ABISELECT(-10664,-7900),
  (VTBL_ENTRY)&(_ZTI9S20845C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20845C12D1Ev,_ZTv0_n16_N9S20845C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20845C12D0Ev,_ZTv0_n16_N9S20845C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20845C12D1Ev,_ZTv0_n12_N9S20845C12D1Ev)();
extern void ABISELECT(_ZThn10568_N9S20845C12D1Ev,_ZThn7816_N9S20845C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20845C12D0Ev,_ZTv0_n12_N9S20845C12D0Ev)();
extern void ABISELECT(_ZThn10568_N9S20845C12D0Ev,_ZThn7816_N9S20845C12D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__9S20845C12__9S20845C11[] = {
  0,
  ABISELECT(-10568,-7816),
  ABISELECT(-10568,-7816),
  (VTBL_ENTRY)&(_ZTI9S20845C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20845C12D1Ev,_ZTv0_n12_N9S20845C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20845C12D0Ev,_ZTv0_n12_N9S20845C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void _ZN8S20845C4D1Ev();
extern void _ZN8S20845C4D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C4__A1__9S20845C11[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&_ZN8S20845C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C58S20845C4__A1__9S20845C11[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C58S20845C4__A1__9S20845C11[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C4__A1__9S20845C11[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void _ZN9S20845C14D1Ev();
extern void _ZN9S20845C14D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV9S20845C14__9S20845C11[] = {
  ABISELECT(1536,1128),
  ABISELECT(-200,-144),
  0,
  (VTBL_ENTRY)&(_ZTI9S20845C14[0]),
  (VTBL_ENTRY)&_ZN9S20845C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20845C14D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C4D1Ev();
extern void _ZN8S20845C4D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C49S20845C14__A2__9S20845C11[] = {
  ABISELECT(-200,-144),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&_ZN8S20845C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C58S20845C49S20845C14__A2__9S20845C11[] = {
  ABISELECT(-200,-144),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C58S20845C49S20845C14__A2__9S20845C11[] = {
  0,
  ABISELECT(200,144),
  ABISELECT(200,144),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C49S20845C14__A2__9S20845C11[] = {
  0,
  ABISELECT(200,144),
  ABISELECT(200,144),
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void _ZN8S20845C2D1Ev();
extern void _ZN8S20845C2D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C29S20845C14__A1__9S20845C11[] = {
  ABISELECT(-304,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C2[0]),
  (VTBL_ENTRY)&_ZN8S20845C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C4D1Ev();
extern void _ZN8S20845C4D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C48S20845C29S20845C14__A3__9S20845C11[] = {
  ABISELECT(-304,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&_ZN8S20845C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C58S20845C48S20845C29S20845C14__A3__9S20845C11[] = {
  ABISELECT(-304,-204),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C58S20845C48S20845C29S20845C14__A3__9S20845C11[] = {
  0,
  ABISELECT(304,204),
  ABISELECT(304,204),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C48S20845C29S20845C14__A3__9S20845C11[] = {
  0,
  ABISELECT(304,204),
  ABISELECT(304,204),
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C29S20845C14__A1__9S20845C11[] = {
  0,
  ABISELECT(304,204),
  ABISELECT(304,204),
  (VTBL_ENTRY)&(_ZTI8S20845C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20845C14D1Ev,_ZTv0_n12_N9S20845C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20845C14D0Ev,_ZTv0_n12_N9S20845C14D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__9S20845C14__9S20845C11[] = {
  0,
  ABISELECT(200,144),
  ABISELECT(200,144),
  (VTBL_ENTRY)&(_ZTI9S20845C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20845C14D1Ev,_ZTv0_n12_N9S20845C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20845C14D0Ev,_ZTv0_n12_N9S20845C14D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZThn104_N9S20845C14D1Ev,_ZThn60_N9S20845C14D1Ev)();
extern void ABISELECT(_ZThn104_N9S20845C14D0Ev,_ZThn60_N9S20845C14D0Ev)();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C2__9S20845C14__9S20845C11[] = {
  ABISELECT(-304,-204),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI9S20845C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S20845C14D1Ev,_ZThn60_N9S20845C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S20845C14D0Ev,_ZThn60_N9S20845C14D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20845C14D1Ev,_ZTv0_n16_N9S20845C14D1Ev)();
extern void ABISELECT(_ZThn1536_N9S20845C14D1Ev,_ZThn1128_N9S20845C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20845C14D0Ev,_ZTv0_n16_N9S20845C14D0Ev)();
extern void ABISELECT(_ZThn1536_N9S20845C14D0Ev,_ZThn1128_N9S20845C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20845C5__A2__9S20845C14__9S20845C11[] = {
  ABISELECT(-1536,-1128),
  ABISELECT(-1736,-1272),
  ABISELECT(-1536,-1128),
  (VTBL_ENTRY)&(_ZTI9S20845C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20845C14D1Ev,_ZTv0_n16_N9S20845C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20845C14D0Ev,_ZTv0_n16_N9S20845C14D0Ev),
};
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C5__A4__9S20845C11[] = {
  ABISELECT(-1736,-1272),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C5__A4__9S20845C11[] = {
  0,
  ABISELECT(1736,1272),
  ABISELECT(1736,1272),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
static  VTT_ENTRY vtt_S20845C11[] = {
  {&(_ZTV9S20845C11[7]),  7,67},
  {&(_tg__ZTV8S20845C2__9S20845C11[3]),  3,7},
  {&(_tg__ZTV8S20845C48S20845C2__9S20845C11[3]),  3,7},
  {&(_tg__ZTV8S20845C58S20845C48S20845C2__9S20845C11[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C58S20845C48S20845C2__9S20845C11[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C48S20845C2__9S20845C11[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C2__9S20845C11[4]),  4,7},
  {&(_tg__ZTV9S20845C12__9S20845C11[4]),  4,6},
  {&(_tg__ZTV8S20845C4__9S20845C12__9S20845C11[6]),  6,10},
  {&(_tg__ZTV8S20845C3__9S20845C12__9S20845C11[4]),  4,7},
  {&(_ZTV9S20845C11[21]),  21,67},
  {&(_ZTV9S20845C11[30]),  30,67},
  {&(_ZTV9S20845C11[15]),  15,67},
  {&(_ZTV9S20845C11[41]),  41,67},
  {&(_ZTV9S20845C11[48]),  48,67},
  {&(_ZTV9S20845C11[54]),  54,67},
  {&(_ZTV9S20845C11[60]),  60,67},
  {&(_ZTV9S20845C11[65]),  65,67},
  {&(_tg__ZTV8S20845C4__A1__9S20845C11[3]),  3,7},
  {&(_tg__ZTV8S20845C58S20845C4__A1__9S20845C11[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C58S20845C4__A1__9S20845C11[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C4__A1__9S20845C11[4]),  4,7},
  {&(_tg__ZTV9S20845C14__9S20845C11[4]),  4,8},
  {&(_tg__ZTV8S20845C49S20845C14__A2__9S20845C11[3]),  3,7},
  {&(_tg__ZTV8S20845C58S20845C49S20845C14__A2__9S20845C11[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C58S20845C49S20845C14__A2__9S20845C11[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C49S20845C14__A2__9S20845C11[4]),  4,7},
  {&(_tg__ZTV8S20845C29S20845C14__A1__9S20845C11[3]),  3,7},
  {&(_tg__ZTV8S20845C48S20845C29S20845C14__A3__9S20845C11[3]),  3,7},
  {&(_tg__ZTV8S20845C58S20845C48S20845C29S20845C14__A3__9S20845C11[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C58S20845C48S20845C29S20845C14__A3__9S20845C11[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C48S20845C29S20845C14__A3__9S20845C11[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C29S20845C14__A1__9S20845C11[4]),  4,7},
  {&(_tg__ZTV8S20845C3__9S20845C14__9S20845C11[4]),  4,7},
  {&(_tg__ZTV8S20845C2__9S20845C14__9S20845C11[3]),  3,7},
  {&(_tg__ZTV8S20845C5__A2__9S20845C14__9S20845C11[4]),  4,6},
  {&(_tg__ZTV8S20845C5__A4__9S20845C11[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C5__A4__9S20845C11[4]),  4,7},
};
extern VTBL_ENTRY _ZTI9S20845C11[];
extern  VTBL_ENTRY _ZTV9S20845C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20845C11[];
static VTBL_ENTRY alt_thunk_names63[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20845C14D0Ev,_ZTv0_n16_N9S20845C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N9S20845C14D0Ev,_ZThn1128_N9S20845C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20845C14D1Ev,_ZTv0_n16_N9S20845C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1536_N9S20845C14D1Ev,_ZThn1128_N9S20845C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20845C12D0Ev,_ZTv0_n12_N9S20845C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10568_N9S20845C12D0Ev,_ZThn7816_N9S20845C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20845C12D1Ev,_ZTv0_n12_N9S20845C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10568_N9S20845C12D1Ev,_ZThn7816_N9S20845C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20845C12D0Ev,_ZTv0_n16_N9S20845C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10664_N9S20845C12D0Ev,_ZThn7900_N9S20845C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20845C12D1Ev,_ZTv0_n16_N9S20845C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10664_N9S20845C12D1Ev,_ZThn7900_N9S20845C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N8S20845C2D0Ev,_ZThn8044_N8S20845C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N8S20845C2D1Ev,_ZThn8044_N8S20845C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N8S20845C4D0Ev,_ZThn8044_N8S20845C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N8S20845C4D1Ev,_ZThn8044_N8S20845C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N8S20845C5D0Ev,_ZThn8044_N8S20845C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N8S20845C5D1Ev,_ZThn8044_N8S20845C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20845C11D0Ev,_ZTv0_n20_N9S20845C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11088_N9S20845C11D0Ev,_ZThn8188_N9S20845C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20845C11D1Ev,_ZTv0_n20_N9S20845C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11088_N9S20845C11D1Ev,_ZThn8188_N9S20845C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20845C11D0Ev,_ZTv0_n16_N9S20845C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12624_N9S20845C11D0Ev,_ZThn9316_N9S20845C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10984_N9S20845C11D0Ev,_ZThn8128_N9S20845C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20845C11D1Ev,_ZTv0_n16_N9S20845C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12624_N9S20845C11D1Ev,_ZThn9316_N9S20845C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10984_N9S20845C11D1Ev,_ZThn8128_N9S20845C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20845C11D0Ev,_ZTv0_n12_N9S20845C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12656_N9S20845C11D0Ev,_ZThn9340_N9S20845C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N9S20845C11D0Ev,_ZThn8044_N9S20845C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20845C11D1Ev,_ZTv0_n12_N9S20845C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12656_N9S20845C11D1Ev,_ZThn9340_N9S20845C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10888_N9S20845C11D1Ev,_ZThn8044_N9S20845C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20845C11 = {  "S20845C11", // class name
  bases_S20845C11, 17,
  &(vtc_S20845C11[0]), // expected_vtbl_contents
  &(vtt_S20845C11[0]), // expected_vtt_contents
  ABISELECT(12864,9488), // object size
  NSPAIRA(_ZTI9S20845C11),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20845C11),67, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20845C11),38, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names63,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20845C1  : virtual S20845C2 , S20845C6 , virtual S20845C10 , S20845C11 {
  int s20845c1f0;
  int s20845c1f1[4];
  int s20845c1f2[6];
  __tsi64 s20845c1f3;
  ::S3052C13 s20845c1f4;
  int s20845c1f5;
  void *s20845c1f6;
  ::S3052C13 s20845c1f7;
  virtual void  v1(); // _ZN8S20845C12v1Ev
  virtual void  v2(); // _ZN8S20845C12v2Ev
  ~S20845C1(); // tgen
  S20845C1(); // tgen
};
//SIG(1 S20845C1) C1{ VBC2{ VBC3{ vd v3 Fs[6] FL[8] Fi} BC4{ VBC3 BC5{ VBC3 FL Fp FL:54} v4 v5 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC3 Fp[3] FL[5] Fi} BC6{ BC2 VBC4 VBC5 VBC7{ VBC3 BC2 VBC5 VBC4 vd Fp[7]} VBC8{ vd m FC9{ VBC10{ vd v10 Fs[6] FL[8] Fi} BC11{ VBC10 FL Fp FL:54} v8 v9 Fc:0 Fp[8] Fc}} vd v6 Fi FL Fi[2] Fs[8] FC8 FU12{ m Fc:2 Fc Fp Fp Fp Fi Fs[6] Fc} FD[5] Fi:5 Fi} VBC13{ v7 Fi:0 Fi[6] Fi Fp} BC14{ BC2 VBC4 BC15{ BC16{ m Fp Fi FL Fp Fi} VBC4 Fp Fc[4] Fi:11 Fp Fp Fi[6] FC17{ VBC3 BC4 BC2 BC8 VBC5 Fp Fl FC2 FC8 FC5 Fi Fi FU18{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} VBC17 VBC8 vd FC8[2] Fi FD FD Fc:0 Fp} v1 v2 Fi Fi[4] Fi[6] FL FU18 Fi Fp FU18}


void  S20845C1 ::v1(){vfunc_called(this, "_ZN8S20845C12v1Ev");}
void  S20845C1 ::v2(){vfunc_called(this, "_ZN8S20845C12v2Ev");}
S20845C1 ::~S20845C1(){ note_dtor("S20845C1", this);} // tgen
S20845C1 ::S20845C1(){ note_ctor("S20845C1", this);} // tgen

static void Test_S20845C1()
{
  extern Class_Descriptor cd_S20845C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(899,2647)];
    init_test(&cd_S20845C1, buf);
    S20845C1 *dp, &lv = *(dp=new (buf) S20845C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(14368,10584), "sizeof(S20845C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20845C1)");
    /*is_ambiguous_... S20845C1::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C2*), ABISELECT(11976,8848), "S20845C1");
    /*is_ambiguous_... S20845C1::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C4*)(S20845C2*), ABISELECT(11976,8848), "S20845C1");
    /*is_ambiguous_... S20845C1::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C5*)(S20845C4*)(S20845C2*), ABISELECT(11976,8848), "S20845C1");
    /*is_ambiguous_... S20845C6::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C2*)(S20845C6*), ABISELECT(11976,8848), "S20845C1");
    /*is_ambiguous_... S20845C6::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C4*)(S20845C2*)(S20845C6*), ABISELECT(11976,8848), "S20845C1");
    /*is_ambiguous_... S20845C6::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C5*)(S20845C4*)(S20845C2*)(S20845C6*), ABISELECT(11976,8848), "S20845C1");
    /*is_ambiguous_... S20845C1::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C4*), ABISELECT(11976,8848), "S20845C1");
    /*is_ambiguous_... S20845C1::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C5*)(S20845C4*), ABISELECT(11976,8848), "S20845C1");
    /*is_ambiguous_... S20845C1::S20845C5 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C5*), ABISELECT(11976,8848), "S20845C1");
    check_base_class_offset(lv, (S20845C3*)(S20845C7*), ABISELECT(11976,8848), "S20845C1");
    check_base_class_offset(lv, (S20845C3*)(S20845C2*)(S20845C7*), ABISELECT(11976,8848), "S20845C1");
    check_base_class_offset(lv, (S20845C3*)(S20845C4*)(S20845C2*)(S20845C7*), ABISELECT(11976,8848), "S20845C1");
    check_base_class_offset(lv, (S20845C3*)(S20845C5*)(S20845C4*)(S20845C2*)(S20845C7*), ABISELECT(11976,8848), "S20845C1");
    /*is_ambiguous_... S20845C11::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C2*)(S20845C11*), ABISELECT(11976,8848), "S20845C1");
    /*is_ambiguous_... S20845C11::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C4*)(S20845C2*)(S20845C11*), ABISELECT(11976,8848), "S20845C1");
    /*is_ambiguous_... S20845C11::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C5*)(S20845C4*)(S20845C2*)(S20845C11*), ABISELECT(11976,8848), "S20845C1");
    check_base_class_offset(lv, (S20845C3*)(S20845C14*), ABISELECT(11976,8848), "S20845C1");
    /*is_ambiguous_... S20845C14::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C4*)(S20845C14*), ABISELECT(11976,8848), "S20845C1");
    /*is_ambiguous_... S20845C14::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C3*)(S20845C5*)(S20845C4*)(S20845C14*), ABISELECT(11976,8848), "S20845C1");
    check_base_class_offset(lv, (S20845C3*)(S20845C2*)(S20845C14*), ABISELECT(11976,8848), "S20845C1");
    check_base_class_offset(lv, (S20845C3*)(S20845C4*)(S20845C2*)(S20845C14*), ABISELECT(11976,8848), "S20845C1");
    check_base_class_offset(lv, (S20845C3*)(S20845C5*)(S20845C4*)(S20845C2*)(S20845C14*), ABISELECT(11976,8848), "S20845C1");
    /*is_ambiguous_... S20845C1::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C5*)(S20845C4*)(S20845C2*), ABISELECT(11664,8620), "S20845C1");
    /*is_ambiguous_... S20845C1::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C4*)(S20845C2*), ABISELECT(11664,8620), "S20845C1");
    /*is_ambiguous_... S20845C1::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C2*), ABISELECT(11664,8620), "S20845C1");
    /*is_ambiguous_... S20845C6::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C5*)(S20845C4*)(S20845C2*)(S20845C6*), 0, "S20845C1");
    /*is_ambiguous_... S20845C6::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C4*)(S20845C2*)(S20845C6*), 0, "S20845C1");
    /*is_ambiguous_... S20845C6::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C2*)(S20845C6*), 0, "S20845C1");
    /*is_ambiguous_... S20845C1::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C5*)(S20845C4*), ABISELECT(12072,8932), "S20845C1");
    /*is_ambiguous_... S20845C6::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C4*)(S20845C6*), ABISELECT(12072,8932), "S20845C1");
    /*is_ambiguous_... S20845C7::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C4*)(S20845C7*), ABISELECT(12072,8932), "S20845C1");
    /*is_ambiguous_... S20845C11::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C4*)(S20845C11*), ABISELECT(12072,8932), "S20845C1");
    check_base_class_offset(lv, (S20845C4*)(S20845C12*)(S20845C11*), ABISELECT(12072,8932), "S20845C1");
    /*is_ambiguous_... S20845C6::S20845C5 */ AMB_check_base_class_offset(lv, (S20845C5*)(S20845C6*), ABISELECT(12176,8992), "S20845C1");
    /*is_ambiguous_... S20845C7::S20845C5 */ AMB_check_base_class_offset(lv, (S20845C5*)(S20845C7*), ABISELECT(12176,8992), "S20845C1");
    /*is_ambiguous_... S20845C14::S20845C5 */ AMB_check_base_class_offset(lv, (S20845C5*)(S20845C14*), ABISELECT(12176,8992), "S20845C1");
    check_base_class_offset(lv, (S20845C5*)(S20845C4*)(S20845C2*)(S20845C7*), ABISELECT(12208,9016), "S20845C1");
    check_base_class_offset(lv, (S20845C4*)(S20845C2*)(S20845C7*), ABISELECT(12208,9016), "S20845C1");
    check_base_class_offset(lv, (S20845C2*)(S20845C7*), ABISELECT(12208,9016), "S20845C1");
    check_base_class_offset(lv, (S20845C7*)(S20845C6*), ABISELECT(12208,9016), "S20845C1");
    check_base_class_offset(lv, (S3052C12*)(S20845C6*), ABISELECT(12576,9272), "S20845C1");
    /*is_ambiguous_... S20845C11::S3052C12 */ AMB_check_base_class_offset(lv, (S3052C12*)(S20845C11*), ABISELECT(12576,9272), "S20845C1");
    check_base_class_offset(lv, (S20845C6*), 0, "S20845C1");
    check_base_class_offset(lv, (S20845C10*), ABISELECT(12784,9420), "S20845C1");
    /*is_ambiguous_... S20845C11::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C5*)(S20845C4*)(S20845C2*)(S20845C11*), ABISELECT(672,492), "S20845C1");
    /*is_ambiguous_... S20845C11::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C4*)(S20845C2*)(S20845C11*), ABISELECT(672,492), "S20845C1");
    /*is_ambiguous_... S20845C11::S20845C2 */ AMB_check_base_class_offset(lv, (S20845C2*)(S20845C11*), ABISELECT(672,492), "S20845C1");
    check_base_class_offset(lv, (S3052C10*)(S20845C12*)(S20845C11*), ABISELECT(1000,724), "S20845C1");
    check_base_class_offset(lv, (S20845C12*)(S20845C11*), ABISELECT(992,720), "S20845C1");
    /*is_ambiguous_... S20845C14::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C5*)(S20845C4*)(S20845C14*), ABISELECT(12832,9456), "S20845C1");
    /*is_ambiguous_... S20845C14::S20845C4 */ AMB_check_base_class_offset(lv, (S20845C4*)(S20845C14*), ABISELECT(12832,9456), "S20845C1");
    check_base_class_offset(lv, (S20845C5*)(S20845C4*)(S20845C2*)(S20845C14*), ABISELECT(12936,9516), "S20845C1");
    check_base_class_offset(lv, (S20845C4*)(S20845C2*)(S20845C14*), ABISELECT(12936,9516), "S20845C1");
    check_base_class_offset(lv, (S20845C2*)(S20845C14*), ABISELECT(12936,9516), "S20845C1");
    check_base_class_offset(lv, (S3052C12*)(S20845C14*), ABISELECT(13248,9744), "S20845C1");
    check_base_class_offset(lv, (S20845C14*)(S20845C11*), ABISELECT(12832,9456), "S20845C1");
    check_base_class_offset(lv, (S20845C11*), ABISELECT(672,492), "S20845C1");
    check_field_offset(lv, s20845c1f0, ABISELECT(11560,8536), "S20845C1.s20845c1f0");
    check_field_offset(lv, s20845c1f1, ABISELECT(11564,8540), "S20845C1.s20845c1f1");
    check_field_offset(lv, s20845c1f2, ABISELECT(11580,8556), "S20845C1.s20845c1f2");
    check_field_offset(lv, s20845c1f3, ABISELECT(11608,8580), "S20845C1.s20845c1f3");
    check_field_offset(lv, s20845c1f4, ABISELECT(11616,8588), "S20845C1.s20845c1f4");
    check_field_offset(lv, s20845c1f5, ABISELECT(11632,8600), "S20845C1.s20845c1f5");
    check_field_offset(lv, s20845c1f6, ABISELECT(11640,8604), "S20845C1.s20845c1f6");
    check_field_offset(lv, s20845c1f7, ABISELECT(11648,8608), "S20845C1.s20845c1f7");
    test_class_info(&lv, &cd_S20845C1);
    dp->~S20845C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20845C1(Test_S20845C1, "S20845C1", ABISELECT(14368,10584));

#else // __cplusplus

extern void _ZN8S20845C1C1Ev();
extern void _ZN8S20845C1D1Ev();
Name_Map name_map_S20845C1[] = {
  NSPAIR(_ZN8S20845C1C1Ev),
  NSPAIR(_ZN8S20845C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20845C3;
extern VTBL_ENTRY _ZTI8S20845C3[];
extern  VTBL_ENTRY _ZTV8S20845C3[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
extern Class_Descriptor cd_S20845C4;
extern VTBL_ENTRY _ZTI8S20845C4[];
extern  VTBL_ENTRY _ZTV8S20845C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C4[];
extern Class_Descriptor cd_S20845C2;
extern VTBL_ENTRY _ZTI8S20845C2[];
extern  VTBL_ENTRY _ZTV8S20845C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C2[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
extern Class_Descriptor cd_S20845C4;
extern VTBL_ENTRY _ZTI8S20845C4[];
extern  VTBL_ENTRY _ZTV8S20845C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C4[];
extern Class_Descriptor cd_S20845C2;
extern VTBL_ENTRY _ZTI8S20845C2[];
extern  VTBL_ENTRY _ZTV8S20845C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C2[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
extern Class_Descriptor cd_S20845C4;
extern VTBL_ENTRY _ZTI8S20845C4[];
extern  VTBL_ENTRY _ZTV8S20845C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C4[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
extern Class_Descriptor cd_S20845C4;
extern VTBL_ENTRY _ZTI8S20845C4[];
extern  VTBL_ENTRY _ZTV8S20845C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C4[];
extern Class_Descriptor cd_S20845C2;
extern VTBL_ENTRY _ZTI8S20845C2[];
extern  VTBL_ENTRY _ZTV8S20845C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C2[];
extern Class_Descriptor cd_S20845C7;
extern VTBL_ENTRY _ZTI8S20845C7[];
extern  VTBL_ENTRY _ZTV8S20845C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C7[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S20845C6;
extern VTBL_ENTRY _ZTI8S20845C6[];
extern  VTBL_ENTRY _ZTV8S20845C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C6[];
extern Class_Descriptor cd_S20845C10;
extern VTBL_ENTRY _ZTI9S20845C10[];
extern  VTBL_ENTRY _ZTV9S20845C10[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
extern Class_Descriptor cd_S20845C4;
extern VTBL_ENTRY _ZTI8S20845C4[];
extern  VTBL_ENTRY _ZTV8S20845C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C4[];
extern Class_Descriptor cd_S20845C2;
extern VTBL_ENTRY _ZTI8S20845C2[];
extern  VTBL_ENTRY _ZTV8S20845C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C2[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S20845C12;
extern VTBL_ENTRY _ZTI9S20845C12[];
extern  VTBL_ENTRY _ZTV9S20845C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20845C12[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
extern Class_Descriptor cd_S20845C4;
extern VTBL_ENTRY _ZTI8S20845C4[];
extern  VTBL_ENTRY _ZTV8S20845C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C4[];
extern Class_Descriptor cd_S20845C5;
extern VTBL_ENTRY _ZTI8S20845C5[];
extern  VTBL_ENTRY _ZTV8S20845C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C5[];
extern Class_Descriptor cd_S20845C4;
extern VTBL_ENTRY _ZTI8S20845C4[];
extern  VTBL_ENTRY _ZTV8S20845C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C4[];
extern Class_Descriptor cd_S20845C2;
extern VTBL_ENTRY _ZTI8S20845C2[];
extern  VTBL_ENTRY _ZTV8S20845C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C2[];
extern Class_Descriptor cd_S3052C12;
extern VTBL_ENTRY _ZTI8S3052C12[];
extern  VTBL_ENTRY _ZTV8S3052C12[];
extern Class_Descriptor cd_S20845C14;
extern VTBL_ENTRY _ZTI9S20845C14[];
extern  VTBL_ENTRY _ZTV9S20845C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20845C14[];
extern Class_Descriptor cd_S20845C11;
extern VTBL_ENTRY _ZTI9S20845C11[];
extern  VTBL_ENTRY _ZTV9S20845C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20845C11[];
static Base_Class bases_S20845C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20845C3,    ABISELECT(11976,8848), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    1, //immediately_derived
  0, 1},
  {&cd_S20845C5,    ABISELECT(11664,8620), //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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20845C4,    ABISELECT(11664,8620), //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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20845C2,    ABISELECT(11664,8620), //bcp->offset
    34, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20845C5,    0, //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
    21, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20845C4,    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
    22, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20845C2,    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
    23, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20845C5,    ABISELECT(12072,8932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20845C4,    ABISELECT(12072,8932), //bcp->offset
    51, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20845C5,    ABISELECT(12176,8992), //bcp->offset
    61, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20845C5,    ABISELECT(12208,9016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20845C4,    ABISELECT(12208,9016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20845C2,    ABISELECT(12208,9016), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20845C7,    ABISELECT(12208,9016), //bcp->offset
    67, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S3052C12,    ABISELECT(12576,9272), //bcp->offset
    79, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20845C6,    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
    24, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20845C10,    ABISELECT(12784,9420), //bcp->offset
    84, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20845C5,    ABISELECT(672,492), //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
    25, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20845C4,    ABISELECT(672,492), //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
    26, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20845C2,    ABISELECT(672,492), //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
    27, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S3052C10,    ABISELECT(1000,724), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20845C12,    ABISELECT(992,720), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20845C5,    ABISELECT(12832,9456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20845C4,    ABISELECT(12832,9456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20845C5,    ABISELECT(12936,9516), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S20845C4,    ABISELECT(12936,9516), //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
    26, //immediately_derived
  0, 0},
  {&cd_S20845C2,    ABISELECT(12936,9516), //bcp->offset
    99, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S3052C12,    ABISELECT(13248,9744), //bcp->offset
    106, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20845C14,    ABISELECT(12832,9456), //bcp->offset
    88, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S20845C11,    ABISELECT(672,492), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20845C1[];
extern void _ZN8S20845C1D1Ev();
extern void _ZN8S20845C1D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
extern void _ZN8S20845C62v6Ev();
extern void _ZN8S20845C12v1Ev();
extern void _ZN8S20845C12v2Ev();
extern void ABISELECT(_ZThn672_N8S20845C1D1Ev,_ZThn492_N8S20845C1D1Ev)();
extern void ABISELECT(_ZThn672_N8S20845C1D0Ev,_ZThn492_N8S20845C1D0Ev)();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
extern void ABISELECT(_ZThn992_N8S20845C1D1Ev,_ZThn720_N8S20845C1D1Ev)();
extern void ABISELECT(_ZThn992_N8S20845C1D0Ev,_ZThn720_N8S20845C1D0Ev)();
extern void ABISELECT(_ZTv0_n32_N8S20845C1D1Ev,_ZTv0_n16_N8S20845C1D1Ev)();
extern void ABISELECT(_ZThn11664_N8S20845C1D1Ev,_ZThn8620_N8S20845C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20845C1D0Ev,_ZTv0_n16_N8S20845C1D0Ev)();
extern void ABISELECT(_ZThn11664_N8S20845C1D0Ev,_ZThn8620_N8S20845C1D0Ev)() __attribute__((weak));
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S20845C1D1Ev,_ZTv0_n12_N8S20845C1D1Ev)();
extern void ABISELECT(_ZThn11976_N8S20845C1D1Ev,_ZThn8848_N8S20845C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C1D0Ev,_ZTv0_n12_N8S20845C1D0Ev)();
extern void ABISELECT(_ZThn11976_N8S20845C1D0Ev,_ZThn8848_N8S20845C1D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
extern void ABISELECT(_ZTv0_n32_N8S20845C1D1Ev,_ZTv0_n16_N8S20845C1D1Ev)();
extern void ABISELECT(_ZThn12072_N8S20845C1D1Ev,_ZThn8932_N8S20845C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20845C1D0Ev,_ZTv0_n16_N8S20845C1D0Ev)();
extern void ABISELECT(_ZThn12072_N8S20845C1D0Ev,_ZThn8932_N8S20845C1D0Ev)() __attribute__((weak));
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
extern void ABISELECT(_ZTv0_n32_N8S20845C1D1Ev,_ZTv0_n16_N8S20845C1D1Ev)();
extern void ABISELECT(_ZThn12176_N8S20845C1D1Ev,_ZThn8992_N8S20845C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20845C1D0Ev,_ZTv0_n16_N8S20845C1D0Ev)();
extern void ABISELECT(_ZThn12176_N8S20845C1D0Ev,_ZThn8992_N8S20845C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20845C1D1Ev,_ZTv0_n24_N8S20845C1D1Ev)();
extern void ABISELECT(_ZThn12208_N8S20845C1D1Ev,_ZThn9016_N8S20845C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20845C1D0Ev,_ZTv0_n24_N8S20845C1D0Ev)();
extern void ABISELECT(_ZThn12208_N8S20845C1D0Ev,_ZThn9016_N8S20845C1D0Ev)() __attribute__((weak));
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
extern void ABISELECT(_ZTv0_n24_N8S20845C1D1Ev,_ZTv0_n12_N8S20845C1D1Ev)();
extern void ABISELECT(_ZThn12576_N8S20845C1D1Ev,_ZThn9272_N8S20845C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C1D0Ev,_ZTv0_n12_N8S20845C1D0Ev)();
extern void ABISELECT(_ZThn12576_N8S20845C1D0Ev,_ZThn9272_N8S20845C1D0Ev)() __attribute__((weak));
extern void _ZN9S20845C102v7Ev();
extern void ABISELECT(_ZTv0_n40_N8S20845C1D1Ev,_ZTv0_n20_N8S20845C1D1Ev)();
extern void ABISELECT(_ZThn12832_N8S20845C1D1Ev,_ZThn9456_N8S20845C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20845C1D0Ev,_ZTv0_n20_N8S20845C1D0Ev)();
extern void ABISELECT(_ZThn12832_N8S20845C1D0Ev,_ZThn9456_N8S20845C1D0Ev)() __attribute__((weak));
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
extern void ABISELECT(_ZTvn104_n40_N8S20845C1D1Ev,_ZTvn60_n20_N8S20845C1D1Ev)();
extern void ABISELECT(_ZTvn104_n40_N8S20845C1D0Ev,_ZTvn60_n20_N8S20845C1D0Ev)();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
extern void ABISELECT(_ZTvn416_n40_N8S20845C1D1Ev,_ZTvn288_n20_N8S20845C1D1Ev)();
extern void ABISELECT(_ZTvn416_n40_N8S20845C1D0Ev,_ZTvn288_n20_N8S20845C1D0Ev)();
static  VTBL_ENTRY vtc_S20845C1[] = {
  ABISELECT(12832,9456),
  ABISELECT(12784,9420),
  ABISELECT(11664,8620),
  ABISELECT(12576,9272),
  ABISELECT(12208,9016),
  ABISELECT(12176,8992),
  ABISELECT(12072,8932),
  ABISELECT(11976,8848),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C1[0]),
  (VTBL_ENTRY)&_ZN8S20845C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20845C62v6Ev,
  (VTBL_ENTRY)&_ZN8S20845C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20845C12v2Ev,
  ABISELECT(11904,8780),
  ABISELECT(11504,8500),
  ABISELECT(12160,8964),
  ABISELECT(11400,8440),
  ABISELECT(11304,8356),
  ABISELECT(-672,-492),
  (VTBL_ENTRY)&(_ZTI8S20845C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn672_N8S20845C1D1Ev,_ZThn492_N8S20845C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn672_N8S20845C1D0Ev,_ZThn492_N8S20845C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
  ABISELECT(10984,8128),
  ABISELECT(11080,8212),
  ABISELECT(-992,-720),
  (VTBL_ENTRY)&(_ZTI8S20845C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn992_N8S20845C1D1Ev,_ZThn720_N8S20845C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn992_N8S20845C1D0Ev,_ZThn720_N8S20845C1D0Ev),
  0,
  0,
  ABISELECT(-11664,-8620),
  ABISELECT(312,228),
  ABISELECT(-11664,-8620),
  (VTBL_ENTRY)&(_ZTI8S20845C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C1D1Ev,_ZTv0_n16_N8S20845C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C1D0Ev,_ZTv0_n16_N8S20845C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
  0,
  ABISELECT(-11976,-8848),
  ABISELECT(-11976,-8848),
  (VTBL_ENTRY)&(_ZTI8S20845C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C1D1Ev,_ZTv0_n12_N8S20845C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C1D0Ev,_ZTv0_n12_N8S20845C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
  0,
  0,
  ABISELECT(-12072,-8932),
  ABISELECT(-96,-84),
  ABISELECT(-12072,-8932),
  (VTBL_ENTRY)&(_ZTI8S20845C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C1D1Ev,_ZTv0_n16_N8S20845C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C1D0Ev,_ZTv0_n16_N8S20845C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
  ABISELECT(-12176,-8992),
  ABISELECT(-200,-144),
  ABISELECT(-12176,-8992),
  (VTBL_ENTRY)&(_ZTI8S20845C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C1D1Ev,_ZTv0_n16_N8S20845C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C1D0Ev,_ZTv0_n16_N8S20845C1D0Ev),
  0,
  0,
  ABISELECT(-12208,-9016),
  ABISELECT(-136,-84),
  ABISELECT(-32,-24),
  ABISELECT(-232,-168),
  ABISELECT(-12208,-9016),
  (VTBL_ENTRY)&(_ZTI8S20845C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20845C1D1Ev,_ZTv0_n24_N8S20845C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20845C1D0Ev,_ZTv0_n24_N8S20845C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
  ABISELECT(-12576,-9272),
  ABISELECT(-12576,-9272),
  (VTBL_ENTRY)&(_ZTI8S20845C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C1D1Ev,_ZTv0_n12_N8S20845C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C1D0Ev,_ZTv0_n12_N8S20845C1D0Ev),
  0,
  ABISELECT(-12784,-9420),
  (VTBL_ENTRY)&(_ZTI8S20845C1[0]),
  (VTBL_ENTRY)&_ZN9S20845C102v7Ev,
  0,
  0,
  ABISELECT(-12832,-9456),
  ABISELECT(-656,-464),
  ABISELECT(-856,-608),
  ABISELECT(-12832,-9456),
  (VTBL_ENTRY)&(_ZTI8S20845C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20845C1D1Ev,_ZTv0_n20_N8S20845C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20845C1D0Ev,_ZTv0_n20_N8S20845C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
  ABISELECT(-960,-668),
  ABISELECT(-12936,-9516),
  (VTBL_ENTRY)&(_ZTI8S20845C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N8S20845C1D1Ev,_ZTvn60_n20_N8S20845C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N8S20845C1D0Ev,_ZTvn60_n20_N8S20845C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
  ABISELECT(-13248,-9744),
  (VTBL_ENTRY)&(_ZTI8S20845C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N8S20845C1D1Ev,_ZTvn288_n20_N8S20845C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N8S20845C1D0Ev,_ZTvn288_n20_N8S20845C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20845C1[];
extern void _ZN8S20845C6D1Ev();
extern void _ZN8S20845C6D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
extern void _ZN8S20845C62v6Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C6__8S20845C1[] = {
  ABISELECT(12576,9272),
  ABISELECT(12208,9016),
  ABISELECT(12176,8992),
  ABISELECT(12072,8932),
  ABISELECT(11976,8848),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C6[0]),
  (VTBL_ENTRY)&_ZN8S20845C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
  (VTBL_ENTRY)&_ZN8S20845C62v6Ev,
};
extern void _ZN8S20845C2D1Ev();
extern void _ZN8S20845C2D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C28S20845C6__A1__8S20845C1[] = {
  ABISELECT(11976,8848),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C2[0]),
  (VTBL_ENTRY)&_ZN8S20845C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C4D1Ev();
extern void _ZN8S20845C4D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C48S20845C28S20845C6__A1__8S20845C1[] = {
  ABISELECT(11976,8848),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&_ZN8S20845C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C58S20845C48S20845C28S20845C6__A1__8S20845C1[] = {
  ABISELECT(11976,8848),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZThn11976_N8S20845C5D1Ev,_ZThn8848_N8S20845C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void ABISELECT(_ZThn11976_N8S20845C5D0Ev,_ZThn8848_N8S20845C5D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C58S20845C48S20845C28S20845C6__A1__8S20845C1[] = {
  0,
  ABISELECT(-11976,-8848),
  ABISELECT(-11976,-8848),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev)();
extern void ABISELECT(_ZThn11976_N8S20845C4D1Ev,_ZThn8848_N8S20845C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev)();
extern void ABISELECT(_ZThn11976_N8S20845C4D0Ev,_ZThn8848_N8S20845C4D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C48S20845C28S20845C6__A1__8S20845C1[] = {
  0,
  ABISELECT(-11976,-8848),
  ABISELECT(-11976,-8848),
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev)();
extern void ABISELECT(_ZThn11976_N8S20845C2D1Ev,_ZThn8848_N8S20845C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev)();
extern void ABISELECT(_ZThn11976_N8S20845C2D0Ev,_ZThn8848_N8S20845C2D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C28S20845C6__A1__8S20845C1[] = {
  0,
  ABISELECT(-11976,-8848),
  ABISELECT(-11976,-8848),
  (VTBL_ENTRY)&(_ZTI8S20845C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C6D1Ev,_ZTv0_n12_N8S20845C6D1Ev)();
extern void ABISELECT(_ZThn11976_N8S20845C6D1Ev,_ZThn8848_N8S20845C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C6D0Ev,_ZTv0_n12_N8S20845C6D0Ev)();
extern void ABISELECT(_ZThn11976_N8S20845C6D0Ev,_ZThn8848_N8S20845C6D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C6__8S20845C1[] = {
  0,
  ABISELECT(-11976,-8848),
  ABISELECT(-11976,-8848),
  (VTBL_ENTRY)&(_ZTI8S20845C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C6D1Ev,_ZTv0_n12_N8S20845C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C6D0Ev,_ZTv0_n12_N8S20845C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20845C6D1Ev,_ZTv0_n16_N8S20845C6D1Ev)();
extern void ABISELECT(_ZThn12072_N8S20845C6D1Ev,_ZThn8932_N8S20845C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20845C6D0Ev,_ZTv0_n16_N8S20845C6D0Ev)();
extern void ABISELECT(_ZThn12072_N8S20845C6D0Ev,_ZThn8932_N8S20845C6D0Ev)() __attribute__((weak));
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C4__A1__8S20845C6__8S20845C1[] = {
  0,
  0,
  ABISELECT(-12072,-8932),
  ABISELECT(-96,-84),
  ABISELECT(-12072,-8932),
  (VTBL_ENTRY)&(_ZTI8S20845C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C6D1Ev,_ZTv0_n16_N8S20845C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C6D0Ev,_ZTv0_n16_N8S20845C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20845C6D1Ev,_ZTv0_n16_N8S20845C6D1Ev)();
extern void ABISELECT(_ZThn12176_N8S20845C6D1Ev,_ZThn8992_N8S20845C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20845C6D0Ev,_ZTv0_n16_N8S20845C6D0Ev)();
extern void ABISELECT(_ZThn12176_N8S20845C6D0Ev,_ZThn8992_N8S20845C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20845C5__A2__8S20845C6__8S20845C1[] = {
  ABISELECT(-12176,-8992),
  ABISELECT(-200,-144),
  ABISELECT(-12176,-8992),
  (VTBL_ENTRY)&(_ZTI8S20845C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C6D1Ev,_ZTv0_n16_N8S20845C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C6D0Ev,_ZTv0_n16_N8S20845C6D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20845C6D1Ev,_ZTv0_n24_N8S20845C6D1Ev)();
extern void ABISELECT(_ZThn12208_N8S20845C6D1Ev,_ZThn9016_N8S20845C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20845C6D0Ev,_ZTv0_n24_N8S20845C6D0Ev)();
extern void ABISELECT(_ZThn12208_N8S20845C6D0Ev,_ZThn9016_N8S20845C6D0Ev)() __attribute__((weak));
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C7__8S20845C6__8S20845C1[] = {
  0,
  0,
  ABISELECT(-12208,-9016),
  ABISELECT(-136,-84),
  ABISELECT(-32,-24),
  ABISELECT(-232,-168),
  ABISELECT(-12208,-9016),
  (VTBL_ENTRY)&(_ZTI8S20845C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20845C6D1Ev,_ZTv0_n24_N8S20845C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20845C6D0Ev,_ZTv0_n24_N8S20845C6D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C6D1Ev,_ZTv0_n12_N8S20845C6D1Ev)();
extern void ABISELECT(_ZThn12576_N8S20845C6D1Ev,_ZThn9272_N8S20845C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C6D0Ev,_ZTv0_n12_N8S20845C6D0Ev)();
extern void ABISELECT(_ZThn12576_N8S20845C6D0Ev,_ZThn9272_N8S20845C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3052C12__8S20845C6__8S20845C1[] = {
  ABISELECT(-12576,-9272),
  ABISELECT(-12576,-9272),
  (VTBL_ENTRY)&(_ZTI8S20845C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C6D1Ev,_ZTv0_n12_N8S20845C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C6D0Ev,_ZTv0_n12_N8S20845C6D0Ev),
};
extern void _ZN9S20845C11D1Ev();
extern void _ZN9S20845C11D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV9S20845C11__8S20845C1[] = {
  ABISELECT(11904,8780),
  ABISELECT(11504,8500),
  ABISELECT(12160,8964),
  ABISELECT(11400,8440),
  ABISELECT(11304,8356),
  0,
  (VTBL_ENTRY)&(_ZTI9S20845C11[0]),
  (VTBL_ENTRY)&_ZN9S20845C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20845C11D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C2D1Ev();
extern void _ZN8S20845C2D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C29S20845C11__A3__8S20845C1[] = {
  ABISELECT(11304,8356),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C2[0]),
  (VTBL_ENTRY)&_ZN8S20845C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C4D1Ev();
extern void _ZN8S20845C4D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C48S20845C29S20845C11__A4__8S20845C1[] = {
  ABISELECT(11304,8356),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&_ZN8S20845C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C58S20845C48S20845C29S20845C11__A5__8S20845C1[] = {
  ABISELECT(11304,8356),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZThn11304_N8S20845C5D1Ev,_ZThn8356_N8S20845C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void ABISELECT(_ZThn11304_N8S20845C5D0Ev,_ZThn8356_N8S20845C5D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C58S20845C48S20845C29S20845C11__A5__8S20845C1[] = {
  0,
  ABISELECT(-11304,-8356),
  ABISELECT(-11304,-8356),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev)();
extern void ABISELECT(_ZThn11304_N8S20845C4D1Ev,_ZThn8356_N8S20845C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev)();
extern void ABISELECT(_ZThn11304_N8S20845C4D0Ev,_ZThn8356_N8S20845C4D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C48S20845C29S20845C11__A4__8S20845C1[] = {
  0,
  ABISELECT(-11304,-8356),
  ABISELECT(-11304,-8356),
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev)();
extern void ABISELECT(_ZThn11304_N8S20845C2D1Ev,_ZThn8356_N8S20845C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev)();
extern void ABISELECT(_ZThn11304_N8S20845C2D0Ev,_ZThn8356_N8S20845C2D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C29S20845C11__A3__8S20845C1[] = {
  0,
  ABISELECT(-11304,-8356),
  ABISELECT(-11304,-8356),
  (VTBL_ENTRY)&(_ZTI8S20845C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void _ZN9S20845C12D1Ev();
extern void _ZN9S20845C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20845C129S20845C11__8S20845C1[] = {
  ABISELECT(10984,8128),
  ABISELECT(11080,8212),
  0,
  (VTBL_ENTRY)&(_ZTI9S20845C12[0]),
  (VTBL_ENTRY)&_ZN9S20845C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20845C12D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20845C12D1Ev,_ZTv0_n16_N9S20845C12D1Ev)();
extern void ABISELECT(_ZThn11080_N9S20845C12D1Ev,_ZThn8212_N9S20845C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20845C12D0Ev,_ZTv0_n16_N9S20845C12D0Ev)();
extern void ABISELECT(_ZThn11080_N9S20845C12D0Ev,_ZThn8212_N9S20845C12D0Ev)() __attribute__((weak));
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C4__9S20845C129S20845C11__8S20845C1[] = {
  0,
  0,
  ABISELECT(-11080,-8212),
  ABISELECT(-96,-84),
  ABISELECT(-11080,-8212),
  (VTBL_ENTRY)&(_ZTI9S20845C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20845C12D1Ev,_ZTv0_n16_N9S20845C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20845C12D0Ev,_ZTv0_n16_N9S20845C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20845C12D1Ev,_ZTv0_n12_N9S20845C12D1Ev)();
extern void ABISELECT(_ZThn10984_N9S20845C12D1Ev,_ZThn8128_N9S20845C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20845C12D0Ev,_ZTv0_n12_N9S20845C12D0Ev)();
extern void ABISELECT(_ZThn10984_N9S20845C12D0Ev,_ZThn8128_N9S20845C12D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__9S20845C129S20845C11__8S20845C1[] = {
  0,
  ABISELECT(-10984,-8128),
  ABISELECT(-10984,-8128),
  (VTBL_ENTRY)&(_ZTI9S20845C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20845C12D1Ev,_ZTv0_n12_N9S20845C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20845C12D0Ev,_ZTv0_n12_N9S20845C12D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20845C11D1Ev,_ZTv0_n12_N9S20845C11D1Ev)();
extern void ABISELECT(_ZThn11304_N9S20845C11D1Ev,_ZThn8356_N9S20845C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20845C11D0Ev,_ZTv0_n12_N9S20845C11D0Ev)();
extern void ABISELECT(_ZThn11304_N9S20845C11D0Ev,_ZThn8356_N9S20845C11D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__9S20845C11__8S20845C1[] = {
  0,
  ABISELECT(-11304,-8356),
  ABISELECT(-11304,-8356),
  (VTBL_ENTRY)&(_ZTI9S20845C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20845C11D1Ev,_ZTv0_n12_N9S20845C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20845C11D0Ev,_ZTv0_n12_N9S20845C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20845C11D1Ev,_ZTv0_n16_N9S20845C11D1Ev)();
extern void ABISELECT(_ZThn11400_N9S20845C11D1Ev,_ZThn8440_N9S20845C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20845C11D0Ev,_ZTv0_n16_N9S20845C11D0Ev)();
extern void ABISELECT(_ZThn11400_N9S20845C11D0Ev,_ZThn8440_N9S20845C11D0Ev)() __attribute__((weak));
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C4__A1__9S20845C11__8S20845C1[] = {
  0,
  0,
  ABISELECT(-11400,-8440),
  ABISELECT(-96,-84),
  ABISELECT(-11400,-8440),
  (VTBL_ENTRY)&(_ZTI9S20845C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20845C11D1Ev,_ZTv0_n16_N9S20845C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20845C11D0Ev,_ZTv0_n16_N9S20845C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void ABISELECT(_ZThn320_N9S20845C11D1Ev,_ZThn228_N9S20845C11D1Ev)();
extern void ABISELECT(_ZThn320_N9S20845C11D0Ev,_ZThn228_N9S20845C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20845C12__9S20845C11__8S20845C1[] = {
  ABISELECT(10984,8128),
  ABISELECT(11080,8212),
  ABISELECT(-320,-228),
  (VTBL_ENTRY)&(_ZTI9S20845C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N9S20845C11D1Ev,_ZThn228_N9S20845C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn320_N9S20845C11D0Ev,_ZThn228_N9S20845C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20845C11D1Ev,_ZTv0_n20_N9S20845C11D1Ev)();
extern void ABISELECT(_ZThn12160_N9S20845C11D1Ev,_ZThn8964_N9S20845C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20845C11D0Ev,_ZTv0_n20_N9S20845C11D0Ev)();
extern void ABISELECT(_ZThn12160_N9S20845C11D0Ev,_ZThn8964_N9S20845C11D0Ev)() __attribute__((weak));
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV9S20845C14__9S20845C11__8S20845C1[] = {
  0,
  0,
  ABISELECT(-12160,-8964),
  ABISELECT(-656,-464),
  ABISELECT(-856,-608),
  ABISELECT(-12160,-8964),
  (VTBL_ENTRY)&(_ZTI9S20845C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20845C11D1Ev,_ZTv0_n20_N9S20845C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20845C11D0Ev,_ZTv0_n20_N9S20845C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void ABISELECT(_ZTvn104_n40_N9S20845C11D1Ev,_ZTvn60_n20_N9S20845C11D1Ev)();
extern void ABISELECT(_ZTvn104_n40_N9S20845C11D0Ev,_ZTvn60_n20_N9S20845C11D0Ev)();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C29S20845C14__A1__9S20845C11__8S20845C1[] = {
  ABISELECT(-960,-668),
  ABISELECT(-12264,-9024),
  (VTBL_ENTRY)&(_ZTI9S20845C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N9S20845C11D1Ev,_ZTvn60_n20_N9S20845C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn104_n40_N9S20845C11D0Ev,_ZTvn60_n20_N9S20845C11D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void ABISELECT(_ZTvn416_n40_N9S20845C11D1Ev,_ZTvn288_n20_N9S20845C11D1Ev)();
extern void ABISELECT(_ZTvn416_n40_N9S20845C11D0Ev,_ZTvn288_n20_N9S20845C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S3052C129S20845C14__9S20845C11__8S20845C1[] = {
  ABISELECT(-12576,-9252),
  (VTBL_ENTRY)&(_ZTI9S20845C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N9S20845C11D1Ev,_ZTvn288_n20_N9S20845C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn416_n40_N9S20845C11D0Ev,_ZTvn288_n20_N9S20845C11D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S20845C11D1Ev,_ZTv0_n16_N9S20845C11D1Ev)();
extern void ABISELECT(_ZThn11504_N9S20845C11D1Ev,_ZThn8500_N9S20845C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20845C11D0Ev,_ZTv0_n16_N9S20845C11D0Ev)();
extern void ABISELECT(_ZThn11504_N9S20845C11D0Ev,_ZThn8500_N9S20845C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20845C5__A4__9S20845C11__8S20845C1[] = {
  ABISELECT(-11504,-8500),
  ABISELECT(-200,-144),
  ABISELECT(-11504,-8500),
  (VTBL_ENTRY)&(_ZTI9S20845C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20845C11D1Ev,_ZTv0_n16_N9S20845C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20845C11D0Ev,_ZTv0_n16_N9S20845C11D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20845C11D1Ev,_ZTv0_n12_N9S20845C11D1Ev)();
extern void ABISELECT(_ZThn11904_N9S20845C11D1Ev,_ZThn8780_N9S20845C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20845C11D0Ev,_ZTv0_n12_N9S20845C11D0Ev)();
extern void ABISELECT(_ZThn11904_N9S20845C11D0Ev,_ZThn8780_N9S20845C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S3052C12__A1__9S20845C11__8S20845C1[] = {
  ABISELECT(-11904,-8780),
  ABISELECT(-11904,-8780),
  (VTBL_ENTRY)&(_ZTI9S20845C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20845C11D1Ev,_ZTv0_n12_N9S20845C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20845C11D0Ev,_ZTv0_n12_N9S20845C11D0Ev),
};
extern void _ZN8S20845C2D1Ev();
extern void _ZN8S20845C2D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C2__8S20845C1[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C2[0]),
  (VTBL_ENTRY)&_ZN8S20845C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C4D1Ev();
extern void _ZN8S20845C4D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C48S20845C2__8S20845C1[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&_ZN8S20845C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C58S20845C48S20845C2__8S20845C1[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZThn312_N8S20845C5D1Ev,_ZThn228_N8S20845C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void ABISELECT(_ZThn312_N8S20845C5D0Ev,_ZThn228_N8S20845C5D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C58S20845C48S20845C2__8S20845C1[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev)();
extern void ABISELECT(_ZThn312_N8S20845C4D1Ev,_ZThn228_N8S20845C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev)();
extern void ABISELECT(_ZThn312_N8S20845C4D0Ev,_ZThn228_N8S20845C4D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C48S20845C2__8S20845C1[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev)();
extern void ABISELECT(_ZThn312_N8S20845C2D1Ev,_ZThn228_N8S20845C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev)();
extern void ABISELECT(_ZThn312_N8S20845C2D0Ev,_ZThn228_N8S20845C2D0Ev)() __attribute__((weak));
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C2__8S20845C1[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI8S20845C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void _ZN8S20845C4D1Ev();
extern void _ZN8S20845C4D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C4__A2__8S20845C1[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&_ZN8S20845C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C58S20845C4__A2__8S20845C1[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C58S20845C4__A2__8S20845C1[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C4__A2__8S20845C1[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C5__A3__8S20845C1[] = {
  ABISELECT(-200,-144),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C5__A3__8S20845C1[] = {
  0,
  ABISELECT(200,144),
  ABISELECT(200,144),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void _ZN8S20845C7D1Ev();
extern void _ZN8S20845C7D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C7__8S20845C1[] = {
  ABISELECT(-136,-84),
  ABISELECT(-32,-24),
  ABISELECT(-232,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C7[0]),
  (VTBL_ENTRY)&_ZN8S20845C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C2D1Ev();
extern void _ZN8S20845C2D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C28S20845C7__A2__8S20845C1[] = {
  ABISELECT(-232,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C2[0]),
  (VTBL_ENTRY)&_ZN8S20845C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C4D1Ev();
extern void _ZN8S20845C4D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C48S20845C28S20845C7__A3__8S20845C1[] = {
  ABISELECT(-232,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&_ZN8S20845C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C58S20845C48S20845C28S20845C7__A4__8S20845C1[] = {
  ABISELECT(-232,-168),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C58S20845C48S20845C28S20845C7__A4__8S20845C1[] = {
  0,
  ABISELECT(232,168),
  ABISELECT(232,168),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C48S20845C28S20845C7__A3__8S20845C1[] = {
  0,
  ABISELECT(232,168),
  ABISELECT(232,168),
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C28S20845C7__A2__8S20845C1[] = {
  0,
  ABISELECT(232,168),
  ABISELECT(232,168),
  (VTBL_ENTRY)&(_ZTI8S20845C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C7D1Ev,_ZTv0_n12_N8S20845C7D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C7D0Ev,_ZTv0_n12_N8S20845C7D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C7__8S20845C1[] = {
  0,
  ABISELECT(232,168),
  ABISELECT(232,168),
  (VTBL_ENTRY)&(_ZTI8S20845C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C7D1Ev,_ZTv0_n12_N8S20845C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C7D0Ev,_ZTv0_n12_N8S20845C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S20845C7D1Ev,_ZTv0_n16_N8S20845C7D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S20845C7D0Ev,_ZTv0_n16_N8S20845C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20845C5__A1__8S20845C7__8S20845C1[] = {
  ABISELECT(32,24),
  ABISELECT(-200,-144),
  ABISELECT(32,24),
  (VTBL_ENTRY)&(_ZTI8S20845C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C7D1Ev,_ZTv0_n16_N8S20845C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C7D0Ev,_ZTv0_n16_N8S20845C7D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20845C7D1Ev,_ZTv0_n16_N8S20845C7D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S20845C7D0Ev,_ZTv0_n16_N8S20845C7D0Ev)();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C4__A1__8S20845C7__8S20845C1[] = {
  0,
  0,
  ABISELECT(136,84),
  ABISELECT(-96,-84),
  ABISELECT(136,84),
  (VTBL_ENTRY)&(_ZTI8S20845C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C7D1Ev,_ZTv0_n16_N8S20845C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20845C7D0Ev,_ZTv0_n16_N8S20845C7D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN9S20845C14D1Ev();
extern void _ZN9S20845C14D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV9S20845C14__8S20845C1[] = {
  ABISELECT(-656,-464),
  ABISELECT(-856,-608),
  0,
  (VTBL_ENTRY)&(_ZTI9S20845C14[0]),
  (VTBL_ENTRY)&_ZN9S20845C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20845C14D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C4D1Ev();
extern void _ZN8S20845C4D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C49S20845C14__A5__8S20845C1[] = {
  ABISELECT(-856,-608),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&_ZN8S20845C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C58S20845C49S20845C14__A6__8S20845C1[] = {
  ABISELECT(-856,-608),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C58S20845C49S20845C14__A6__8S20845C1[] = {
  0,
  ABISELECT(856,608),
  ABISELECT(856,608),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C49S20845C14__A5__8S20845C1[] = {
  0,
  ABISELECT(856,608),
  ABISELECT(856,608),
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void _ZN8S20845C2D1Ev();
extern void _ZN8S20845C2D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C29S20845C14__A4__8S20845C1[] = {
  ABISELECT(-960,-668),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C2[0]),
  (VTBL_ENTRY)&_ZN8S20845C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C4D1Ev();
extern void _ZN8S20845C4D0Ev();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C48S20845C29S20845C14__A6__8S20845C1[] = {
  ABISELECT(-960,-668),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&_ZN8S20845C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C4D0Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void _ZN8S20845C5D1Ev();
extern void _ZN8S20845C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C58S20845C48S20845C29S20845C14__A7__8S20845C1[] = {
  ABISELECT(-960,-668),
  0,
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&_ZN8S20845C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20845C5D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C58S20845C48S20845C29S20845C14__A7__8S20845C1[] = {
  0,
  ABISELECT(960,668),
  ABISELECT(960,668),
  (VTBL_ENTRY)&(_ZTI8S20845C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C48S20845C29S20845C14__A6__8S20845C1[] = {
  0,
  ABISELECT(960,668),
  ABISELECT(960,668),
  (VTBL_ENTRY)&(_ZTI8S20845C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__8S20845C29S20845C14__A4__8S20845C1[] = {
  0,
  ABISELECT(960,668),
  ABISELECT(960,668),
  (VTBL_ENTRY)&(_ZTI8S20845C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20845C14D1Ev,_ZTv0_n12_N9S20845C14D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20845C14D0Ev,_ZTv0_n12_N9S20845C14D0Ev)();
extern void _ZN8S20845C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C3__9S20845C14__8S20845C1[] = {
  0,
  ABISELECT(856,608),
  ABISELECT(856,608),
  (VTBL_ENTRY)&(_ZTI9S20845C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20845C14D1Ev,_ZTv0_n12_N9S20845C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20845C14D0Ev,_ZTv0_n12_N9S20845C14D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C32v3Ev,
};
extern void ABISELECT(_ZThn104_N9S20845C14D1Ev,_ZThn60_N9S20845C14D1Ev)();
extern void ABISELECT(_ZThn104_N9S20845C14D0Ev,_ZThn60_N9S20845C14D0Ev)();
extern void _ZN8S20845C42v4Ev();
extern void _ZN8S20845C42v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20845C2__9S20845C14__8S20845C1[] = {
  ABISELECT(-960,-668),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI9S20845C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S20845C14D1Ev,_ZThn60_N9S20845C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N9S20845C14D0Ev,_ZThn60_N9S20845C14D0Ev),
  (VTBL_ENTRY)&_ZN8S20845C42v4Ev,
  (VTBL_ENTRY)&_ZN8S20845C42v5Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S20845C14D1Ev,_ZTv0_n16_N9S20845C14D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20845C14D0Ev,_ZTv0_n16_N9S20845C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20845C5__A2__9S20845C14__8S20845C1[] = {
  ABISELECT(656,464),
  ABISELECT(-200,-144),
  ABISELECT(656,464),
  (VTBL_ENTRY)&(_ZTI9S20845C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20845C14D1Ev,_ZTv0_n16_N9S20845C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20845C14D0Ev,_ZTv0_n16_N9S20845C14D0Ev),
};
static  VTT_ENTRY vtt_S20845C1[] = {
  {&(_ZTV8S20845C1[10]),  10,110},
  {&(_tg__ZTV8S20845C6__8S20845C1[7]),  7,12},
  {&(_tg__ZTV8S20845C28S20845C6__A1__8S20845C1[3]),  3,7},
  {&(_tg__ZTV8S20845C48S20845C28S20845C6__A1__8S20845C1[3]),  3,7},
  {&(_tg__ZTV8S20845C58S20845C48S20845C28S20845C6__A1__8S20845C1[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C58S20845C48S20845C28S20845C6__A1__8S20845C1[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C48S20845C28S20845C6__A1__8S20845C1[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C28S20845C6__A1__8S20845C1[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C6__8S20845C1[4]),  4,7},
  {&(_tg__ZTV8S20845C4__A1__8S20845C6__8S20845C1[6]),  6,10},
  {&(_tg__ZTV8S20845C5__A2__8S20845C6__8S20845C1[4]),  4,6},
  {&(_tg__ZTV8S20845C7__8S20845C6__8S20845C1[8]),  8,12},
  {&(_tg__ZTV8S3052C12__8S20845C6__8S20845C1[3]),  3,5},
  {&(_tg__ZTV9S20845C11__8S20845C1[7]),  7,11},
  {&(_tg__ZTV8S20845C29S20845C11__A3__8S20845C1[3]),  3,7},
  {&(_tg__ZTV8S20845C48S20845C29S20845C11__A4__8S20845C1[3]),  3,7},
  {&(_tg__ZTV8S20845C58S20845C48S20845C29S20845C11__A5__8S20845C1[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C58S20845C48S20845C29S20845C11__A5__8S20845C1[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C48S20845C29S20845C11__A4__8S20845C1[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C29S20845C11__A3__8S20845C1[4]),  4,7},
  {&(_tg__ZTV9S20845C129S20845C11__8S20845C1[4]),  4,6},
  {&(_tg__ZTV8S20845C4__9S20845C129S20845C11__8S20845C1[6]),  6,10},
  {&(_tg__ZTV8S20845C3__9S20845C129S20845C11__8S20845C1[4]),  4,7},
  {&(_tg__ZTV8S20845C3__9S20845C11__8S20845C1[4]),  4,7},
  {&(_tg__ZTV8S20845C4__A1__9S20845C11__8S20845C1[6]),  6,10},
  {&(_tg__ZTV9S20845C12__9S20845C11__8S20845C1[4]),  4,6},
  {&(_tg__ZTV9S20845C14__9S20845C11__8S20845C1[7]),  7,11},
  {&(_tg__ZTV8S20845C29S20845C14__A1__9S20845C11__8S20845C1[3]),  3,7},
  {&(_tg__ZTV8S3052C129S20845C14__9S20845C11__8S20845C1[2]),  2,4},
  {&(_tg__ZTV8S20845C5__A4__9S20845C11__8S20845C1[4]),  4,6},
  {&(_tg__ZTV8S3052C12__A1__9S20845C11__8S20845C1[3]),  3,5},
  {&(_ZTV8S20845C1[40]),  40,110},
  {&(_ZTV8S20845C1[48]),  48,110},
  {&(_ZTV8S20845C1[57]),  57,110},
  {&(_ZTV8S20845C1[65]),  65,110},
  {&(_ZTV8S20845C1[75]),  75,110},
  {&(_ZTV8S20845C1[82]),  82,110},
  {&(_ZTV8S20845C1[87]),  87,110},
  {&(_ZTV8S20845C1[24]),  24,110},
  {&(_ZTV8S20845C1[32]),  32,110},
  {&(_ZTV8S20845C1[95]),  95,110},
  {&(_ZTV8S20845C1[102]),  102,110},
  {&(_ZTV8S20845C1[108]),  108,110},
  {&(_tg__ZTV8S20845C2__8S20845C1[3]),  3,7},
  {&(_tg__ZTV8S20845C48S20845C2__8S20845C1[3]),  3,7},
  {&(_tg__ZTV8S20845C58S20845C48S20845C2__8S20845C1[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C58S20845C48S20845C2__8S20845C1[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C48S20845C2__8S20845C1[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C2__8S20845C1[4]),  4,7},
  {&(_tg__ZTV8S20845C4__A2__8S20845C1[3]),  3,7},
  {&(_tg__ZTV8S20845C58S20845C4__A2__8S20845C1[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C58S20845C4__A2__8S20845C1[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C4__A2__8S20845C1[4]),  4,7},
  {&(_tg__ZTV8S20845C5__A3__8S20845C1[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C5__A3__8S20845C1[4]),  4,7},
  {&(_tg__ZTV8S20845C7__8S20845C1[5]),  5,9},
  {&(_tg__ZTV8S20845C28S20845C7__A2__8S20845C1[3]),  3,7},
  {&(_tg__ZTV8S20845C48S20845C28S20845C7__A3__8S20845C1[3]),  3,7},
  {&(_tg__ZTV8S20845C58S20845C48S20845C28S20845C7__A4__8S20845C1[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C58S20845C48S20845C28S20845C7__A4__8S20845C1[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C48S20845C28S20845C7__A3__8S20845C1[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C28S20845C7__A2__8S20845C1[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C7__8S20845C1[4]),  4,7},
  {&(_tg__ZTV8S20845C5__A1__8S20845C7__8S20845C1[4]),  4,6},
  {&(_tg__ZTV8S20845C4__A1__8S20845C7__8S20845C1[6]),  6,10},
  {&(_tg__ZTV9S20845C14__8S20845C1[4]),  4,8},
  {&(_tg__ZTV8S20845C49S20845C14__A5__8S20845C1[3]),  3,7},
  {&(_tg__ZTV8S20845C58S20845C49S20845C14__A6__8S20845C1[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C58S20845C49S20845C14__A6__8S20845C1[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C49S20845C14__A5__8S20845C1[4]),  4,7},
  {&(_tg__ZTV8S20845C29S20845C14__A4__8S20845C1[3]),  3,7},
  {&(_tg__ZTV8S20845C48S20845C29S20845C14__A6__8S20845C1[3]),  3,7},
  {&(_tg__ZTV8S20845C58S20845C48S20845C29S20845C14__A7__8S20845C1[3]),  3,5},
  {&(_tg__ZTV8S20845C3__8S20845C58S20845C48S20845C29S20845C14__A7__8S20845C1[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C48S20845C29S20845C14__A6__8S20845C1[4]),  4,7},
  {&(_tg__ZTV8S20845C3__8S20845C29S20845C14__A4__8S20845C1[4]),  4,7},
  {&(_tg__ZTV8S20845C3__9S20845C14__8S20845C1[4]),  4,7},
  {&(_tg__ZTV8S20845C2__9S20845C14__8S20845C1[3]),  3,7},
  {&(_tg__ZTV8S20845C5__A2__9S20845C14__8S20845C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20845C1[];
extern  VTBL_ENTRY _ZTV8S20845C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20845C1[];
static VTBL_ENTRY alt_thunk_names64[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20845C11D0Ev,_ZTv0_n20_N9S20845C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12160_N9S20845C11D0Ev,_ZThn8964_N9S20845C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20845C11D1Ev,_ZTv0_n20_N9S20845C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12160_N9S20845C11D1Ev,_ZThn8964_N9S20845C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20845C11D0Ev,_ZTv0_n16_N9S20845C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11504_N9S20845C11D0Ev,_ZThn8500_N9S20845C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11400_N9S20845C11D0Ev,_ZThn8440_N9S20845C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20845C11D1Ev,_ZTv0_n16_N9S20845C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11504_N9S20845C11D1Ev,_ZThn8500_N9S20845C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11400_N9S20845C11D1Ev,_ZThn8440_N9S20845C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20845C11D0Ev,_ZTv0_n12_N9S20845C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11904_N9S20845C11D0Ev,_ZThn8780_N9S20845C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11304_N9S20845C11D0Ev,_ZThn8356_N9S20845C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20845C11D1Ev,_ZTv0_n12_N9S20845C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11904_N9S20845C11D1Ev,_ZThn8780_N9S20845C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11304_N9S20845C11D1Ev,_ZThn8356_N9S20845C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20845C12D0Ev,_ZTv0_n12_N9S20845C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10984_N9S20845C12D0Ev,_ZThn8128_N9S20845C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20845C12D1Ev,_ZTv0_n12_N9S20845C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10984_N9S20845C12D1Ev,_ZThn8128_N9S20845C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20845C12D0Ev,_ZTv0_n16_N9S20845C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11080_N9S20845C12D0Ev,_ZThn8212_N9S20845C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20845C12D1Ev,_ZTv0_n16_N9S20845C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn11080_N9S20845C12D1Ev,_ZThn8212_N9S20845C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20845C6D0Ev,_ZTv0_n24_N8S20845C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12208_N8S20845C6D0Ev,_ZThn9016_N8S20845C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20845C6D1Ev,_ZTv0_n24_N8S20845C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12208_N8S20845C6D1Ev,_ZThn9016_N8S20845C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20845C6D0Ev,_ZTv0_n16_N8S20845C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12176_N8S20845C6D0Ev,_ZThn8992_N8S20845C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn12072_N8S20845C6D0Ev,_ZThn8932_N8S20845C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20845C6D1Ev,_ZTv0_n16_N8S20845C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12176_N8S20845C6D1Ev,_ZThn8992_N8S20845C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn12072_N8S20845C6D1Ev,_ZThn8932_N8S20845C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C6D0Ev,_ZTv0_n12_N8S20845C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12576_N8S20845C6D0Ev,_ZThn9272_N8S20845C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11976_N8S20845C6D0Ev,_ZThn8848_N8S20845C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C6D1Ev,_ZTv0_n12_N8S20845C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12576_N8S20845C6D1Ev,_ZThn9272_N8S20845C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11976_N8S20845C6D1Ev,_ZThn8848_N8S20845C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C2D0Ev,_ZTv0_n12_N8S20845C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20845C2D0Ev,_ZThn228_N8S20845C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11304_N8S20845C2D0Ev,_ZThn8356_N8S20845C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11976_N8S20845C2D0Ev,_ZThn8848_N8S20845C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C2D1Ev,_ZTv0_n12_N8S20845C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20845C2D1Ev,_ZThn228_N8S20845C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11304_N8S20845C2D1Ev,_ZThn8356_N8S20845C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11976_N8S20845C2D1Ev,_ZThn8848_N8S20845C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C4D0Ev,_ZTv0_n12_N8S20845C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20845C4D0Ev,_ZThn228_N8S20845C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11304_N8S20845C4D0Ev,_ZThn8356_N8S20845C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11976_N8S20845C4D0Ev,_ZThn8848_N8S20845C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C4D1Ev,_ZTv0_n12_N8S20845C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20845C4D1Ev,_ZThn228_N8S20845C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11304_N8S20845C4D1Ev,_ZThn8356_N8S20845C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11976_N8S20845C4D1Ev,_ZThn8848_N8S20845C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C5D0Ev,_ZTv0_n12_N8S20845C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20845C5D0Ev,_ZThn228_N8S20845C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11304_N8S20845C5D0Ev,_ZThn8356_N8S20845C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11976_N8S20845C5D0Ev,_ZThn8848_N8S20845C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C5D1Ev,_ZTv0_n12_N8S20845C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20845C5D1Ev,_ZThn228_N8S20845C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11304_N8S20845C5D1Ev,_ZThn8356_N8S20845C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11976_N8S20845C5D1Ev,_ZThn8848_N8S20845C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20845C1D0Ev,_ZTv0_n20_N8S20845C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12832_N8S20845C1D0Ev,_ZThn9456_N8S20845C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20845C1D1Ev,_ZTv0_n20_N8S20845C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12832_N8S20845C1D1Ev,_ZThn9456_N8S20845C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20845C1D0Ev,_ZTv0_n24_N8S20845C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12208_N8S20845C1D0Ev,_ZThn9016_N8S20845C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20845C1D1Ev,_ZTv0_n24_N8S20845C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12208_N8S20845C1D1Ev,_ZThn9016_N8S20845C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C1D0Ev,_ZTv0_n12_N8S20845C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12576_N8S20845C1D0Ev,_ZThn9272_N8S20845C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11976_N8S20845C1D0Ev,_ZThn8848_N8S20845C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20845C1D1Ev,_ZTv0_n12_N8S20845C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12576_N8S20845C1D1Ev,_ZThn9272_N8S20845C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11976_N8S20845C1D1Ev,_ZThn8848_N8S20845C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20845C1D0Ev,_ZTv0_n16_N8S20845C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12176_N8S20845C1D0Ev,_ZThn8992_N8S20845C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn12072_N8S20845C1D0Ev,_ZThn8932_N8S20845C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11664_N8S20845C1D0Ev,_ZThn8620_N8S20845C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20845C1D1Ev,_ZTv0_n16_N8S20845C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn12176_N8S20845C1D1Ev,_ZThn8992_N8S20845C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn12072_N8S20845C1D1Ev,_ZThn8932_N8S20845C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn11664_N8S20845C1D1Ev,_ZThn8620_N8S20845C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20845C1 = {  "S20845C1", // class name
  bases_S20845C1, 30,
  &(vtc_S20845C1[0]), // expected_vtbl_contents
  &(vtt_S20845C1[0]), // expected_vtt_contents
  ABISELECT(14368,10584), // object size
  NSPAIRA(_ZTI8S20845C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20845C1),110, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20845C1),79, //virtual table table var
  29, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names64,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1310C4  {
  int s1310c4f0;
  __tsi64 s1310c4f1;
  void *s1310c4f2[4];
  int s1310c4f3[2];
  void *s1310c4f4;
  ::S3351C4_nt s1310c4f5;
  void *s1310c4f6[2];
  virtual  ~S1310C4(); // _ZN7S1310C4D1Ev
  virtual void  v13(); // _ZN7S1310C43v13Ev
  virtual void  v14(); // _ZN7S1310C43v14Ev
  virtual void  v15(); // _ZN7S1310C43v15Ev
  virtual void  v16(); // _ZN7S1310C43v16Ev
  virtual void  v17(); // _ZN7S1310C43v17Ev
  virtual void  v18(); // _ZN7S1310C43v18Ev
  virtual void  v19(); // _ZN7S1310C43v19Ev
  virtual void  v20(); // _ZN7S1310C43v20Ev
  virtual void  v21(); // _ZN7S1310C43v21Ev
  virtual void  v22(); // _ZN7S1310C43v22Ev
  virtual void  v23(); // _ZN7S1310C43v23Ev
  virtual void  v24(); // _ZN7S1310C43v24Ev
  virtual void  v25(); // _ZN7S1310C43v25Ev
  virtual void  v26(); // _ZN7S1310C43v26Ev
  virtual void  v27(); // _ZN7S1310C43v27Ev
  virtual void  v28(); // _ZN7S1310C43v28Ev
  virtual void  v29(); // _ZN7S1310C43v29Ev
  virtual void  v30(); // _ZN7S1310C43v30Ev
  virtual void  v31(); // _ZN7S1310C43v31Ev
  virtual void  v32(); // _ZN7S1310C43v32Ev
  virtual void  v33(); // _ZN7S1310C43v33Ev
  virtual void  v34(); // _ZN7S1310C43v34Ev
  virtual void  v35(); // _ZN7S1310C43v35Ev
  virtual void  v36(); // _ZN7S1310C43v36Ev
  virtual void  v37(); // _ZN7S1310C43v37Ev
  virtual void  v38(); // _ZN7S1310C43v38Ev
  virtual void  v39(); // _ZN7S1310C43v39Ev
  virtual void  v40(); // _ZN7S1310C43v40Ev
  virtual void  v41(); // _ZN7S1310C43v41Ev
  virtual void  v42(); // _ZN7S1310C43v42Ev
  virtual void  v43(); // _ZN7S1310C43v43Ev
  virtual void  v44(); // _ZN7S1310C43v44Ev
  virtual void  v45(); // _ZN7S1310C43v45Ev
  virtual void  v46(); // _ZN7S1310C43v46Ev
  virtual void  v47(); // _ZN7S1310C43v47Ev
  virtual void  v48(); // _ZN7S1310C43v48Ev
  virtual void  v49(); // _ZN7S1310C43v49Ev
  virtual void  v50(); // _ZN7S1310C43v50Ev
  virtual void  v51(); // _ZN7S1310C43v51Ev
  virtual void  v52(); // _ZN7S1310C43v52Ev
  virtual void  v53(); // _ZN7S1310C43v53Ev
  virtual void  v54(); // _ZN7S1310C43v54Ev
  virtual void  v55(); // _ZN7S1310C43v55Ev
  virtual void  v56(); // _ZN7S1310C43v56Ev
  virtual void  v57(); // _ZN7S1310C43v57Ev
  virtual void  v58(); // _ZN7S1310C43v58Ev
  virtual void  v59(); // _ZN7S1310C43v59Ev
  virtual void  v60(); // _ZN7S1310C43v60Ev
  virtual void  v61(); // _ZN7S1310C43v61Ev
  virtual void  v62(); // _ZN7S1310C43v62Ev
  virtual void  v63(); // _ZN7S1310C43v63Ev
  virtual void  v64(); // _ZN7S1310C43v64Ev
  virtual void  v65(); // _ZN7S1310C43v65Ev
  virtual void  v66(); // _ZN7S1310C43v66Ev
  virtual void  v67(); // _ZN7S1310C43v67Ev
  virtual void  v68(); // _ZN7S1310C43v68Ev
  virtual void  v69(); // _ZN7S1310C43v69Ev
  virtual void  v70(); // _ZN7S1310C43v70Ev
  virtual void  v71(); // _ZN7S1310C43v71Ev
  virtual void  v72(); // _ZN7S1310C43v72Ev
  virtual void  v73(); // _ZN7S1310C43v73Ev
  virtual void  v74(); // _ZN7S1310C43v74Ev
  virtual void  v75(); // _ZN7S1310C43v75Ev
  virtual void  v76(); // _ZN7S1310C43v76Ev
  S1310C4(); // tgen
};
//SIG(-1 S1310C4) 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]}


 S1310C4 ::~S1310C4(){ note_dtor("S1310C4", this);}
void  S1310C4 ::v13(){vfunc_called(this, "_ZN7S1310C43v13Ev");}
void  S1310C4 ::v14(){vfunc_called(this, "_ZN7S1310C43v14Ev");}
void  S1310C4 ::v15(){vfunc_called(this, "_ZN7S1310C43v15Ev");}
void  S1310C4 ::v16(){vfunc_called(this, "_ZN7S1310C43v16Ev");}
void  S1310C4 ::v17(){vfunc_called(this, "_ZN7S1310C43v17Ev");}
void  S1310C4 ::v18(){vfunc_called(this, "_ZN7S1310C43v18Ev");}
void  S1310C4 ::v19(){vfunc_called(this, "_ZN7S1310C43v19Ev");}
void  S1310C4 ::v20(){vfunc_called(this, "_ZN7S1310C43v20Ev");}
void  S1310C4 ::v21(){vfunc_called(this, "_ZN7S1310C43v21Ev");}
void  S1310C4 ::v22(){vfunc_called(this, "_ZN7S1310C43v22Ev");}
void  S1310C4 ::v23(){vfunc_called(this, "_ZN7S1310C43v23Ev");}
void  S1310C4 ::v24(){vfunc_called(this, "_ZN7S1310C43v24Ev");}
void  S1310C4 ::v25(){vfunc_called(this, "_ZN7S1310C43v25Ev");}
void  S1310C4 ::v26(){vfunc_called(this, "_ZN7S1310C43v26Ev");}
void  S1310C4 ::v27(){vfunc_called(this, "_ZN7S1310C43v27Ev");}
void  S1310C4 ::v28(){vfunc_called(this, "_ZN7S1310C43v28Ev");}
void  S1310C4 ::v29(){vfunc_called(this, "_ZN7S1310C43v29Ev");}
void  S1310C4 ::v30(){vfunc_called(this, "_ZN7S1310C43v30Ev");}
void  S1310C4 ::v31(){vfunc_called(this, "_ZN7S1310C43v31Ev");}
void  S1310C4 ::v32(){vfunc_called(this, "_ZN7S1310C43v32Ev");}
void  S1310C4 ::v33(){vfunc_called(this, "_ZN7S1310C43v33Ev");}
void  S1310C4 ::v34(){vfunc_called(this, "_ZN7S1310C43v34Ev");}
void  S1310C4 ::v35(){vfunc_called(this, "_ZN7S1310C43v35Ev");}
void  S1310C4 ::v36(){vfunc_called(this, "_ZN7S1310C43v36Ev");}
void  S1310C4 ::v37(){vfunc_called(this, "_ZN7S1310C43v37Ev");}
void  S1310C4 ::v38(){vfunc_called(this, "_ZN7S1310C43v38Ev");}
void  S1310C4 ::v39(){vfunc_called(this, "_ZN7S1310C43v39Ev");}
void  S1310C4 ::v40(){vfunc_called(this, "_ZN7S1310C43v40Ev");}
void  S1310C4 ::v41(){vfunc_called(this, "_ZN7S1310C43v41Ev");}
void  S1310C4 ::v42(){vfunc_called(this, "_ZN7S1310C43v42Ev");}
void  S1310C4 ::v43(){vfunc_called(this, "_ZN7S1310C43v43Ev");}
void  S1310C4 ::v44(){vfunc_called(this, "_ZN7S1310C43v44Ev");}
void  S1310C4 ::v45(){vfunc_called(this, "_ZN7S1310C43v45Ev");}
void  S1310C4 ::v46(){vfunc_called(this, "_ZN7S1310C43v46Ev");}
void  S1310C4 ::v47(){vfunc_called(this, "_ZN7S1310C43v47Ev");}
void  S1310C4 ::v48(){vfunc_called(this, "_ZN7S1310C43v48Ev");}
void  S1310C4 ::v49(){vfunc_called(this, "_ZN7S1310C43v49Ev");}
void  S1310C4 ::v50(){vfunc_called(this, "_ZN7S1310C43v50Ev");}
void  S1310C4 ::v51(){vfunc_called(this, "_ZN7S1310C43v51Ev");}
void  S1310C4 ::v52(){vfunc_called(this, "_ZN7S1310C43v52Ev");}
void  S1310C4 ::v53(){vfunc_called(this, "_ZN7S1310C43v53Ev");}
void  S1310C4 ::v54(){vfunc_called(this, "_ZN7S1310C43v54Ev");}
void  S1310C4 ::v55(){vfunc_called(this, "_ZN7S1310C43v55Ev");}
void  S1310C4 ::v56(){vfunc_called(this, "_ZN7S1310C43v56Ev");}
void  S1310C4 ::v57(){vfunc_called(this, "_ZN7S1310C43v57Ev");}
void  S1310C4 ::v58(){vfunc_called(this, "_ZN7S1310C43v58Ev");}
void  S1310C4 ::v59(){vfunc_called(this, "_ZN7S1310C43v59Ev");}
void  S1310C4 ::v60(){vfunc_called(this, "_ZN7S1310C43v60Ev");}
void  S1310C4 ::v61(){vfunc_called(this, "_ZN7S1310C43v61Ev");}
void  S1310C4 ::v62(){vfunc_called(this, "_ZN7S1310C43v62Ev");}
void  S1310C4 ::v63(){vfunc_called(this, "_ZN7S1310C43v63Ev");}
void  S1310C4 ::v64(){vfunc_called(this, "_ZN7S1310C43v64Ev");}
void  S1310C4 ::v65(){vfunc_called(this, "_ZN7S1310C43v65Ev");}
void  S1310C4 ::v66(){vfunc_called(this, "_ZN7S1310C43v66Ev");}
void  S1310C4 ::v67(){vfunc_called(this, "_ZN7S1310C43v67Ev");}
void  S1310C4 ::v68(){vfunc_called(this, "_ZN7S1310C43v68Ev");}
void  S1310C4 ::v69(){vfunc_called(this, "_ZN7S1310C43v69Ev");}
void  S1310C4 ::v70(){vfunc_called(this, "_ZN7S1310C43v70Ev");}
void  S1310C4 ::v71(){vfunc_called(this, "_ZN7S1310C43v71Ev");}
void  S1310C4 ::v72(){vfunc_called(this, "_ZN7S1310C43v72Ev");}
void  S1310C4 ::v73(){vfunc_called(this, "_ZN7S1310C43v73Ev");}
void  S1310C4 ::v74(){vfunc_called(this, "_ZN7S1310C43v74Ev");}
void  S1310C4 ::v75(){vfunc_called(this, "_ZN7S1310C43v75Ev");}
void  S1310C4 ::v76(){vfunc_called(this, "_ZN7S1310C43v76Ev");}
S1310C4 ::S1310C4(){ note_ctor("S1310C4", this);} // tgen

static void Test_S1310C4()
{
  extern Class_Descriptor cd_S1310C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1310C4, buf);
    S1310C4 *dp, &lv = *(dp=new (buf) S1310C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1310C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1310C4)");
    check_field_offset(lv, s1310c4f0, ABISELECT(8,4), "S1310C4.s1310c4f0");
    check_field_offset(lv, s1310c4f1, ABISELECT(16,8), "S1310C4.s1310c4f1");
    check_field_offset(lv, s1310c4f2, ABISELECT(24,16), "S1310C4.s1310c4f2");
    check_field_offset(lv, s1310c4f3, ABISELECT(56,32), "S1310C4.s1310c4f3");
    check_field_offset(lv, s1310c4f4, ABISELECT(64,40), "S1310C4.s1310c4f4");
    check_field_offset(lv, s1310c4f5, ABISELECT(72,44), "S1310C4.s1310c4f5");
    check_field_offset(lv, s1310c4f6, ABISELECT(80,52), "S1310C4.s1310c4f6");
    test_class_info(&lv, &cd_S1310C4);
    dp->~S1310C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1310C4(Test_S1310C4, "S1310C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1310C4C1Ev();
extern void _ZN7S1310C4D1Ev();
Name_Map name_map_S1310C4[] = {
  NSPAIR(_ZN7S1310C4C1Ev),
  NSPAIR(_ZN7S1310C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1310C4[];
extern void _ZN7S1310C4D1Ev();
extern void _ZN7S1310C4D0Ev();
extern void _ZN7S1310C43v13Ev();
extern void _ZN7S1310C43v14Ev();
extern void _ZN7S1310C43v15Ev();
extern void _ZN7S1310C43v16Ev();
extern void _ZN7S1310C43v17Ev();
extern void _ZN7S1310C43v18Ev();
extern void _ZN7S1310C43v19Ev();
extern void _ZN7S1310C43v20Ev();
extern void _ZN7S1310C43v21Ev();
extern void _ZN7S1310C43v22Ev();
extern void _ZN7S1310C43v23Ev();
extern void _ZN7S1310C43v24Ev();
extern void _ZN7S1310C43v25Ev();
extern void _ZN7S1310C43v26Ev();
extern void _ZN7S1310C43v27Ev();
extern void _ZN7S1310C43v28Ev();
extern void _ZN7S1310C43v29Ev();
extern void _ZN7S1310C43v30Ev();
extern void _ZN7S1310C43v31Ev();
extern void _ZN7S1310C43v32Ev();
extern void _ZN7S1310C43v33Ev();
extern void _ZN7S1310C43v34Ev();
extern void _ZN7S1310C43v35Ev();
extern void _ZN7S1310C43v36Ev();
extern void _ZN7S1310C43v37Ev();
extern void _ZN7S1310C43v38Ev();
extern void _ZN7S1310C43v39Ev();
extern void _ZN7S1310C43v40Ev();
extern void _ZN7S1310C43v41Ev();
extern void _ZN7S1310C43v42Ev();
extern void _ZN7S1310C43v43Ev();
extern void _ZN7S1310C43v44Ev();
extern void _ZN7S1310C43v45Ev();
extern void _ZN7S1310C43v46Ev();
extern void _ZN7S1310C43v47Ev();
extern void _ZN7S1310C43v48Ev();
extern void _ZN7S1310C43v49Ev();
extern void _ZN7S1310C43v50Ev();
extern void _ZN7S1310C43v51Ev();
extern void _ZN7S1310C43v52Ev();
extern void _ZN7S1310C43v53Ev();
extern void _ZN7S1310C43v54Ev();
extern void _ZN7S1310C43v55Ev();
extern void _ZN7S1310C43v56Ev();
extern void _ZN7S1310C43v57Ev();
extern void _ZN7S1310C43v58Ev();
extern void _ZN7S1310C43v59Ev();
extern void _ZN7S1310C43v60Ev();
extern void _ZN7S1310C43v61Ev();
extern void _ZN7S1310C43v62Ev();
extern void _ZN7S1310C43v63Ev();
extern void _ZN7S1310C43v64Ev();
extern void _ZN7S1310C43v65Ev();
extern void _ZN7S1310C43v66Ev();
extern void _ZN7S1310C43v67Ev();
extern void _ZN7S1310C43v68Ev();
extern void _ZN7S1310C43v69Ev();
extern void _ZN7S1310C43v70Ev();
extern void _ZN7S1310C43v71Ev();
extern void _ZN7S1310C43v72Ev();
extern void _ZN7S1310C43v73Ev();
extern void _ZN7S1310C43v74Ev();
extern void _ZN7S1310C43v75Ev();
extern void _ZN7S1310C43v76Ev();
static  VTBL_ENTRY vtc_S1310C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1310C4[0]),
  (VTBL_ENTRY)&_ZN7S1310C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1310C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v76Ev,
};
extern VTBL_ENTRY _ZTI7S1310C4[];
extern  VTBL_ENTRY _ZTV7S1310C4[];
Class_Descriptor cd_S1310C4 = {  "S1310C4", // class name
  0,0,//no base classes
  &(vtc_S1310C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1310C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1310C4),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  S1310C11_nt  : S3351C22_nt {
};
//SIG(-1 S1310C11_nt) C1{ BC2{ m FC3{ BC4{ m Fp Fi[2]}} Fp Fi}}



//skip512 S1310C11_nt

#else // __cplusplus

extern Class_Descriptor cd_S3351C22_nt;
static Base_Class bases_S1310C11_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3351C22_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  S1310C3  : S1310C4 {
  ::S3351C29 s1310c3f0;
  ::S3351C21_nt s1310c3f1;
  ::S1310C11_nt s1310c3f2;
  virtual  ~S1310C3(); // _ZN7S1310C3D1Ev
  virtual void  v77(); // _ZN7S1310C33v77Ev
  virtual void  v78(); // _ZN7S1310C33v78Ev
  virtual void  v79(); // _ZN7S1310C33v79Ev
  virtual void  v80(); // _ZN7S1310C33v80Ev
  virtual void  v81(); // _ZN7S1310C33v81Ev
  virtual void  v82(); // _ZN7S1310C33v82Ev
  virtual void  v83(); // _ZN7S1310C33v83Ev
  virtual void  v84(); // _ZN7S1310C33v84Ev
  virtual void  v85(); // _ZN7S1310C33v85Ev
  virtual void  v86(); // _ZN7S1310C33v86Ev
  virtual void  v87(); // _ZN7S1310C33v87Ev
  virtual void  v88(); // _ZN7S1310C33v88Ev
  virtual void  v89(); // _ZN7S1310C33v89Ev
  virtual void  v90(); // _ZN7S1310C33v90Ev
  virtual void  v91(); // _ZN7S1310C33v91Ev
  virtual void  v92(); // _ZN7S1310C33v92Ev
  S1310C3(); // tgen
};
//SIG(-1 S1310C3) C1{ BC2{ vd 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 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 FC4{ BC5{ m Fp Fi[2]}} FC6{ BC7{ m FC8{ BC5} Fp Fi}} FC9{ BC7}}


 S1310C3 ::~S1310C3(){ note_dtor("S1310C3", this);}
void  S1310C3 ::v77(){vfunc_called(this, "_ZN7S1310C33v77Ev");}
void  S1310C3 ::v78(){vfunc_called(this, "_ZN7S1310C33v78Ev");}
void  S1310C3 ::v79(){vfunc_called(this, "_ZN7S1310C33v79Ev");}
void  S1310C3 ::v80(){vfunc_called(this, "_ZN7S1310C33v80Ev");}
void  S1310C3 ::v81(){vfunc_called(this, "_ZN7S1310C33v81Ev");}
void  S1310C3 ::v82(){vfunc_called(this, "_ZN7S1310C33v82Ev");}
void  S1310C3 ::v83(){vfunc_called(this, "_ZN7S1310C33v83Ev");}
void  S1310C3 ::v84(){vfunc_called(this, "_ZN7S1310C33v84Ev");}
void  S1310C3 ::v85(){vfunc_called(this, "_ZN7S1310C33v85Ev");}
void  S1310C3 ::v86(){vfunc_called(this, "_ZN7S1310C33v86Ev");}
void  S1310C3 ::v87(){vfunc_called(this, "_ZN7S1310C33v87Ev");}
void  S1310C3 ::v88(){vfunc_called(this, "_ZN7S1310C33v88Ev");}
void  S1310C3 ::v89(){vfunc_called(this, "_ZN7S1310C33v89Ev");}
void  S1310C3 ::v90(){vfunc_called(this, "_ZN7S1310C33v90Ev");}
void  S1310C3 ::v91(){vfunc_called(this, "_ZN7S1310C33v91Ev");}
void  S1310C3 ::v92(){vfunc_called(this, "_ZN7S1310C33v92Ev");}
S1310C3 ::S1310C3(){ note_ctor("S1310C3", this);} // tgen

static void Test_S1310C3()
{
  extern Class_Descriptor cd_S1310C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,29)];
    init_test(&cd_S1310C3, buf);
    S1310C3 *dp, &lv = *(dp=new (buf) S1310C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,112), "sizeof(S1310C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1310C3)");
    check_base_class_offset(lv, (S1310C4*), 0, "S1310C3");
    check_field_offset(lv, s1310c3f0, ABISELECT(96,60), "S1310C3.s1310c3f0");
    check_field_offset(lv, s1310c3f1, ABISELECT(112,72), "S1310C3.s1310c3f1");
    check_field_offset(lv, s1310c3f2, ABISELECT(144,92), "S1310C3.s1310c3f2");
    test_class_info(&lv, &cd_S1310C3);
    dp->~S1310C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1310C3(Test_S1310C3, "S1310C3", ABISELECT(176,112));

#else // __cplusplus

extern void _ZN7S1310C3C1Ev();
extern void _ZN7S1310C3D1Ev();
Name_Map name_map_S1310C3[] = {
  NSPAIR(_ZN7S1310C3C1Ev),
  NSPAIR(_ZN7S1310C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1310C4;
extern VTBL_ENTRY _ZTI7S1310C4[];
extern  VTBL_ENTRY _ZTV7S1310C4[];
static Base_Class bases_S1310C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1310C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S1310C3[];
extern void _ZN7S1310C3D1Ev();
extern void _ZN7S1310C3D0Ev();
extern void _ZN7S1310C43v13Ev();
extern void _ZN7S1310C43v14Ev();
extern void _ZN7S1310C43v15Ev();
extern void _ZN7S1310C43v16Ev();
extern void _ZN7S1310C43v17Ev();
extern void _ZN7S1310C43v18Ev();
extern void _ZN7S1310C43v19Ev();
extern void _ZN7S1310C43v20Ev();
extern void _ZN7S1310C43v21Ev();
extern void _ZN7S1310C43v22Ev();
extern void _ZN7S1310C43v23Ev();
extern void _ZN7S1310C43v24Ev();
extern void _ZN7S1310C43v25Ev();
extern void _ZN7S1310C43v26Ev();
extern void _ZN7S1310C43v27Ev();
extern void _ZN7S1310C43v28Ev();
extern void _ZN7S1310C43v29Ev();
extern void _ZN7S1310C43v30Ev();
extern void _ZN7S1310C43v31Ev();
extern void _ZN7S1310C43v32Ev();
extern void _ZN7S1310C43v33Ev();
extern void _ZN7S1310C43v34Ev();
extern void _ZN7S1310C43v35Ev();
extern void _ZN7S1310C43v36Ev();
extern void _ZN7S1310C43v37Ev();
extern void _ZN7S1310C43v38Ev();
extern void _ZN7S1310C43v39Ev();
extern void _ZN7S1310C43v40Ev();
extern void _ZN7S1310C43v41Ev();
extern void _ZN7S1310C43v42Ev();
extern void _ZN7S1310C43v43Ev();
extern void _ZN7S1310C43v44Ev();
extern void _ZN7S1310C43v45Ev();
extern void _ZN7S1310C43v46Ev();
extern void _ZN7S1310C43v47Ev();
extern void _ZN7S1310C43v48Ev();
extern void _ZN7S1310C43v49Ev();
extern void _ZN7S1310C43v50Ev();
extern void _ZN7S1310C43v51Ev();
extern void _ZN7S1310C43v52Ev();
extern void _ZN7S1310C43v53Ev();
extern void _ZN7S1310C43v54Ev();
extern void _ZN7S1310C43v55Ev();
extern void _ZN7S1310C43v56Ev();
extern void _ZN7S1310C43v57Ev();
extern void _ZN7S1310C43v58Ev();
extern void _ZN7S1310C43v59Ev();
extern void _ZN7S1310C43v60Ev();
extern void _ZN7S1310C43v61Ev();
extern void _ZN7S1310C43v62Ev();
extern void _ZN7S1310C43v63Ev();
extern void _ZN7S1310C43v64Ev();
extern void _ZN7S1310C43v65Ev();
extern void _ZN7S1310C43v66Ev();
extern void _ZN7S1310C43v67Ev();
extern void _ZN7S1310C43v68Ev();
extern void _ZN7S1310C43v69Ev();
extern void _ZN7S1310C43v70Ev();
extern void _ZN7S1310C43v71Ev();
extern void _ZN7S1310C43v72Ev();
extern void _ZN7S1310C43v73Ev();
extern void _ZN7S1310C43v74Ev();
extern void _ZN7S1310C43v75Ev();
extern void _ZN7S1310C43v76Ev();
extern void _ZN7S1310C33v77Ev();
extern void _ZN7S1310C33v78Ev();
extern void _ZN7S1310C33v79Ev();
extern void _ZN7S1310C33v80Ev();
extern void _ZN7S1310C33v81Ev();
extern void _ZN7S1310C33v82Ev();
extern void _ZN7S1310C33v83Ev();
extern void _ZN7S1310C33v84Ev();
extern void _ZN7S1310C33v85Ev();
extern void _ZN7S1310C33v86Ev();
extern void _ZN7S1310C33v87Ev();
extern void _ZN7S1310C33v88Ev();
extern void _ZN7S1310C33v89Ev();
extern void _ZN7S1310C33v90Ev();
extern void _ZN7S1310C33v91Ev();
extern void _ZN7S1310C33v92Ev();
static  VTBL_ENTRY vtc_S1310C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1310C3[0]),
  (VTBL_ENTRY)&_ZN7S1310C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1310C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v92Ev,
};
extern VTBL_ENTRY _ZTI7S1310C3[];
extern  VTBL_ENTRY _ZTV7S1310C3[];
Class_Descriptor cd_S1310C3 = {  "S1310C3", // class name
  bases_S1310C3, 1,
  &(vtc_S1310C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(176,112), // object size
  NSPAIRA(_ZTI7S1310C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1310C3),84, //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  S1310C2  : S1310C3 {
  void *s1310c2f0;
  virtual  ~S1310C2(); // _ZN7S1310C2D1Ev
  virtual void  v93(); // _ZN7S1310C23v93Ev
  virtual void  v94(); // _ZN7S1310C23v94Ev
  virtual void  v95(); // _ZN7S1310C23v95Ev
  virtual void  v96(); // _ZN7S1310C23v96Ev
  S1310C2(); // tgen
};
//SIG(-1 S1310C2) 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 FC5{ BC6{ m Fp Fi[2]}} FC7{ BC8{ m FC9{ BC6} Fp Fi}} FC10{ BC8}} vd v1 v2 v3 v4 Fp}


 S1310C2 ::~S1310C2(){ note_dtor("S1310C2", this);}
void  S1310C2 ::v93(){vfunc_called(this, "_ZN7S1310C23v93Ev");}
void  S1310C2 ::v94(){vfunc_called(this, "_ZN7S1310C23v94Ev");}
void  S1310C2 ::v95(){vfunc_called(this, "_ZN7S1310C23v95Ev");}
void  S1310C2 ::v96(){vfunc_called(this, "_ZN7S1310C23v96Ev");}
S1310C2 ::S1310C2(){ note_ctor("S1310C2", this);} // tgen

static void Test_S1310C2()
{
  extern Class_Descriptor cd_S1310C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,30)];
    init_test(&cd_S1310C2, buf);
    S1310C2 *dp, &lv = *(dp=new (buf) S1310C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,116), "sizeof(S1310C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1310C2)");
    check_base_class_offset(lv, (S1310C4*)(S1310C3*), 0, "S1310C2");
    check_base_class_offset(lv, (S1310C3*), 0, "S1310C2");
    check_field_offset(lv, s1310c2f0, ABISELECT(176,112), "S1310C2.s1310c2f0");
    test_class_info(&lv, &cd_S1310C2);
    dp->~S1310C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1310C2(Test_S1310C2, "S1310C2", ABISELECT(184,116));

#else // __cplusplus

extern void _ZN7S1310C2C1Ev();
extern void _ZN7S1310C2D1Ev();
Name_Map name_map_S1310C2[] = {
  NSPAIR(_ZN7S1310C2C1Ev),
  NSPAIR(_ZN7S1310C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1310C4;
extern VTBL_ENTRY _ZTI7S1310C4[];
extern  VTBL_ENTRY _ZTV7S1310C4[];
extern Class_Descriptor cd_S1310C3;
extern VTBL_ENTRY _ZTI7S1310C3[];
extern  VTBL_ENTRY _ZTV7S1310C3[];
static Base_Class bases_S1310C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1310C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1310C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1310C2[];
extern void _ZN7S1310C2D1Ev();
extern void _ZN7S1310C2D0Ev();
extern void _ZN7S1310C43v13Ev();
extern void _ZN7S1310C43v14Ev();
extern void _ZN7S1310C43v15Ev();
extern void _ZN7S1310C43v16Ev();
extern void _ZN7S1310C43v17Ev();
extern void _ZN7S1310C43v18Ev();
extern void _ZN7S1310C43v19Ev();
extern void _ZN7S1310C43v20Ev();
extern void _ZN7S1310C43v21Ev();
extern void _ZN7S1310C43v22Ev();
extern void _ZN7S1310C43v23Ev();
extern void _ZN7S1310C43v24Ev();
extern void _ZN7S1310C43v25Ev();
extern void _ZN7S1310C43v26Ev();
extern void _ZN7S1310C43v27Ev();
extern void _ZN7S1310C43v28Ev();
extern void _ZN7S1310C43v29Ev();
extern void _ZN7S1310C43v30Ev();
extern void _ZN7S1310C43v31Ev();
extern void _ZN7S1310C43v32Ev();
extern void _ZN7S1310C43v33Ev();
extern void _ZN7S1310C43v34Ev();
extern void _ZN7S1310C43v35Ev();
extern void _ZN7S1310C43v36Ev();
extern void _ZN7S1310C43v37Ev();
extern void _ZN7S1310C43v38Ev();
extern void _ZN7S1310C43v39Ev();
extern void _ZN7S1310C43v40Ev();
extern void _ZN7S1310C43v41Ev();
extern void _ZN7S1310C43v42Ev();
extern void _ZN7S1310C43v43Ev();
extern void _ZN7S1310C43v44Ev();
extern void _ZN7S1310C43v45Ev();
extern void _ZN7S1310C43v46Ev();
extern void _ZN7S1310C43v47Ev();
extern void _ZN7S1310C43v48Ev();
extern void _ZN7S1310C43v49Ev();
extern void _ZN7S1310C43v50Ev();
extern void _ZN7S1310C43v51Ev();
extern void _ZN7S1310C43v52Ev();
extern void _ZN7S1310C43v53Ev();
extern void _ZN7S1310C43v54Ev();
extern void _ZN7S1310C43v55Ev();
extern void _ZN7S1310C43v56Ev();
extern void _ZN7S1310C43v57Ev();
extern void _ZN7S1310C43v58Ev();
extern void _ZN7S1310C43v59Ev();
extern void _ZN7S1310C43v60Ev();
extern void _ZN7S1310C43v61Ev();
extern void _ZN7S1310C43v62Ev();
extern void _ZN7S1310C43v63Ev();
extern void _ZN7S1310C43v64Ev();
extern void _ZN7S1310C43v65Ev();
extern void _ZN7S1310C43v66Ev();
extern void _ZN7S1310C43v67Ev();
extern void _ZN7S1310C43v68Ev();
extern void _ZN7S1310C43v69Ev();
extern void _ZN7S1310C43v70Ev();
extern void _ZN7S1310C43v71Ev();
extern void _ZN7S1310C43v72Ev();
extern void _ZN7S1310C43v73Ev();
extern void _ZN7S1310C43v74Ev();
extern void _ZN7S1310C43v75Ev();
extern void _ZN7S1310C43v76Ev();
extern void _ZN7S1310C33v77Ev();
extern void _ZN7S1310C33v78Ev();
extern void _ZN7S1310C33v79Ev();
extern void _ZN7S1310C33v80Ev();
extern void _ZN7S1310C33v81Ev();
extern void _ZN7S1310C33v82Ev();
extern void _ZN7S1310C33v83Ev();
extern void _ZN7S1310C33v84Ev();
extern void _ZN7S1310C33v85Ev();
extern void _ZN7S1310C33v86Ev();
extern void _ZN7S1310C33v87Ev();
extern void _ZN7S1310C33v88Ev();
extern void _ZN7S1310C33v89Ev();
extern void _ZN7S1310C33v90Ev();
extern void _ZN7S1310C33v91Ev();
extern void _ZN7S1310C33v92Ev();
extern void _ZN7S1310C23v93Ev();
extern void _ZN7S1310C23v94Ev();
extern void _ZN7S1310C23v95Ev();
extern void _ZN7S1310C23v96Ev();
static  VTBL_ENTRY vtc_S1310C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1310C2[0]),
  (VTBL_ENTRY)&_ZN7S1310C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1310C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1310C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1310C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1310C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1310C23v96Ev,
};
extern VTBL_ENTRY _ZTI7S1310C2[];
extern  VTBL_ENTRY _ZTV7S1310C2[];
Class_Descriptor cd_S1310C2 = {  "S1310C2", // class name
  bases_S1310C2, 2,
  &(vtc_S1310C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,116), // object size
  NSPAIRA(_ZTI7S1310C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1310C2),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  S1310C1  : S1310C2 {
  virtual  ~S1310C1(); // _ZN7S1310C1D1Ev
  virtual void  v1(); // _ZN7S1310C12v1Ev
  virtual void  v2(); // _ZN7S1310C12v2Ev
  virtual void  v3(); // _ZN7S1310C12v3Ev
  virtual void  v4(); // _ZN7S1310C12v4Ev
  virtual void  v5(); // _ZN7S1310C12v5Ev
  virtual void  v6(); // _ZN7S1310C12v6Ev
  virtual void  v7(); // _ZN7S1310C12v7Ev
  virtual void  v8(); // _ZN7S1310C12v8Ev
  virtual void  v9(); // _ZN7S1310C12v9Ev
  virtual void  v10(); // _ZN7S1310C13v10Ev
  virtual void  v11(); // _ZN7S1310C13v11Ev
  virtual void  v12(); // _ZN7S1310C13v12Ev
  S1310C1(); // tgen
};
//SIG(1 S1310C1) C1{ BC2{ BC3{ BC4{ vd 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 Fi FL Fp[4] Fi[2] Fp FC5{ m Fi[2]} Fp[2]} vd v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 v91 v92 FC6{ BC7{ m Fp Fi[2]}} FC8{ BC9{ m FC10{ BC7} Fp Fi}} FC11{ BC9}} vd v93 v94 v95 v96 Fp} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12}


 S1310C1 ::~S1310C1(){ note_dtor("S1310C1", this);}
void  S1310C1 ::v1(){vfunc_called(this, "_ZN7S1310C12v1Ev");}
void  S1310C1 ::v2(){vfunc_called(this, "_ZN7S1310C12v2Ev");}
void  S1310C1 ::v3(){vfunc_called(this, "_ZN7S1310C12v3Ev");}
void  S1310C1 ::v4(){vfunc_called(this, "_ZN7S1310C12v4Ev");}
void  S1310C1 ::v5(){vfunc_called(this, "_ZN7S1310C12v5Ev");}
void  S1310C1 ::v6(){vfunc_called(this, "_ZN7S1310C12v6Ev");}
void  S1310C1 ::v7(){vfunc_called(this, "_ZN7S1310C12v7Ev");}
void  S1310C1 ::v8(){vfunc_called(this, "_ZN7S1310C12v8Ev");}
void  S1310C1 ::v9(){vfunc_called(this, "_ZN7S1310C12v9Ev");}
void  S1310C1 ::v10(){vfunc_called(this, "_ZN7S1310C13v10Ev");}
void  S1310C1 ::v11(){vfunc_called(this, "_ZN7S1310C13v11Ev");}
void  S1310C1 ::v12(){vfunc_called(this, "_ZN7S1310C13v12Ev");}
S1310C1 ::S1310C1(){ note_ctor("S1310C1", this);} // tgen

static void Test_S1310C1()
{
  extern Class_Descriptor cd_S1310C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,30)];
    init_test(&cd_S1310C1, buf);
    S1310C1 *dp, &lv = *(dp=new (buf) S1310C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,116), "sizeof(S1310C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1310C1)");
    check_base_class_offset(lv, (S1310C4*)(S1310C3*)(S1310C2*), 0, "S1310C1");
    check_base_class_offset(lv, (S1310C3*)(S1310C2*), 0, "S1310C1");
    check_base_class_offset(lv, (S1310C2*), 0, "S1310C1");
    test_class_info(&lv, &cd_S1310C1);
    dp->~S1310C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1310C1(Test_S1310C1, "S1310C1", ABISELECT(184,116));

#else // __cplusplus

extern void _ZN7S1310C1C1Ev();
extern void _ZN7S1310C1D1Ev();
Name_Map name_map_S1310C1[] = {
  NSPAIR(_ZN7S1310C1C1Ev),
  NSPAIR(_ZN7S1310C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1310C4;
extern VTBL_ENTRY _ZTI7S1310C4[];
extern  VTBL_ENTRY _ZTV7S1310C4[];
extern Class_Descriptor cd_S1310C3;
extern VTBL_ENTRY _ZTI7S1310C3[];
extern  VTBL_ENTRY _ZTV7S1310C3[];
extern Class_Descriptor cd_S1310C2;
extern VTBL_ENTRY _ZTI7S1310C2[];
extern  VTBL_ENTRY _ZTV7S1310C2[];
static Base_Class bases_S1310C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1310C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1310C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1310C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1310C1[];
extern void _ZN7S1310C1D1Ev();
extern void _ZN7S1310C1D0Ev();
extern void _ZN7S1310C43v13Ev();
extern void _ZN7S1310C43v14Ev();
extern void _ZN7S1310C43v15Ev();
extern void _ZN7S1310C43v16Ev();
extern void _ZN7S1310C43v17Ev();
extern void _ZN7S1310C43v18Ev();
extern void _ZN7S1310C43v19Ev();
extern void _ZN7S1310C43v20Ev();
extern void _ZN7S1310C43v21Ev();
extern void _ZN7S1310C43v22Ev();
extern void _ZN7S1310C43v23Ev();
extern void _ZN7S1310C43v24Ev();
extern void _ZN7S1310C43v25Ev();
extern void _ZN7S1310C43v26Ev();
extern void _ZN7S1310C43v27Ev();
extern void _ZN7S1310C43v28Ev();
extern void _ZN7S1310C43v29Ev();
extern void _ZN7S1310C43v30Ev();
extern void _ZN7S1310C43v31Ev();
extern void _ZN7S1310C43v32Ev();
extern void _ZN7S1310C43v33Ev();
extern void _ZN7S1310C43v34Ev();
extern void _ZN7S1310C43v35Ev();
extern void _ZN7S1310C43v36Ev();
extern void _ZN7S1310C43v37Ev();
extern void _ZN7S1310C43v38Ev();
extern void _ZN7S1310C43v39Ev();
extern void _ZN7S1310C43v40Ev();
extern void _ZN7S1310C43v41Ev();
extern void _ZN7S1310C43v42Ev();
extern void _ZN7S1310C43v43Ev();
extern void _ZN7S1310C43v44Ev();
extern void _ZN7S1310C43v45Ev();
extern void _ZN7S1310C43v46Ev();
extern void _ZN7S1310C43v47Ev();
extern void _ZN7S1310C43v48Ev();
extern void _ZN7S1310C43v49Ev();
extern void _ZN7S1310C43v50Ev();
extern void _ZN7S1310C43v51Ev();
extern void _ZN7S1310C43v52Ev();
extern void _ZN7S1310C43v53Ev();
extern void _ZN7S1310C43v54Ev();
extern void _ZN7S1310C43v55Ev();
extern void _ZN7S1310C43v56Ev();
extern void _ZN7S1310C43v57Ev();
extern void _ZN7S1310C43v58Ev();
extern void _ZN7S1310C43v59Ev();
extern void _ZN7S1310C43v60Ev();
extern void _ZN7S1310C43v61Ev();
extern void _ZN7S1310C43v62Ev();
extern void _ZN7S1310C43v63Ev();
extern void _ZN7S1310C43v64Ev();
extern void _ZN7S1310C43v65Ev();
extern void _ZN7S1310C43v66Ev();
extern void _ZN7S1310C43v67Ev();
extern void _ZN7S1310C43v68Ev();
extern void _ZN7S1310C43v69Ev();
extern void _ZN7S1310C43v70Ev();
extern void _ZN7S1310C43v71Ev();
extern void _ZN7S1310C43v72Ev();
extern void _ZN7S1310C43v73Ev();
extern void _ZN7S1310C43v74Ev();
extern void _ZN7S1310C43v75Ev();
extern void _ZN7S1310C43v76Ev();
extern void _ZN7S1310C33v77Ev();
extern void _ZN7S1310C33v78Ev();
extern void _ZN7S1310C33v79Ev();
extern void _ZN7S1310C33v80Ev();
extern void _ZN7S1310C33v81Ev();
extern void _ZN7S1310C33v82Ev();
extern void _ZN7S1310C33v83Ev();
extern void _ZN7S1310C33v84Ev();
extern void _ZN7S1310C33v85Ev();
extern void _ZN7S1310C33v86Ev();
extern void _ZN7S1310C33v87Ev();
extern void _ZN7S1310C33v88Ev();
extern void _ZN7S1310C33v89Ev();
extern void _ZN7S1310C33v90Ev();
extern void _ZN7S1310C33v91Ev();
extern void _ZN7S1310C33v92Ev();
extern void _ZN7S1310C23v93Ev();
extern void _ZN7S1310C23v94Ev();
extern void _ZN7S1310C23v95Ev();
extern void _ZN7S1310C23v96Ev();
extern void _ZN7S1310C12v1Ev();
extern void _ZN7S1310C12v2Ev();
extern void _ZN7S1310C12v3Ev();
extern void _ZN7S1310C12v4Ev();
extern void _ZN7S1310C12v5Ev();
extern void _ZN7S1310C12v6Ev();
extern void _ZN7S1310C12v7Ev();
extern void _ZN7S1310C12v8Ev();
extern void _ZN7S1310C12v9Ev();
extern void _ZN7S1310C13v10Ev();
extern void _ZN7S1310C13v11Ev();
extern void _ZN7S1310C13v12Ev();
static  VTBL_ENTRY vtc_S1310C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1310C1[0]),
  (VTBL_ENTRY)&_ZN7S1310C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1310C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v71Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v72Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v73Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v74Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v75Ev,
  (VTBL_ENTRY)&_ZN7S1310C43v76Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v91Ev,
  (VTBL_ENTRY)&_ZN7S1310C33v92Ev,
  (VTBL_ENTRY)&_ZN7S1310C23v93Ev,
  (VTBL_ENTRY)&_ZN7S1310C23v94Ev,
  (VTBL_ENTRY)&_ZN7S1310C23v95Ev,
  (VTBL_ENTRY)&_ZN7S1310C23v96Ev,
  (VTBL_ENTRY)&_ZN7S1310C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1310C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1310C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1310C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1310C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1310C12v6Ev,
  (VTBL_ENTRY)&_ZN7S1310C12v7Ev,
  (VTBL_ENTRY)&_ZN7S1310C12v8Ev,
  (VTBL_ENTRY)&_ZN7S1310C12v9Ev,
  (VTBL_ENTRY)&_ZN7S1310C13v10Ev,
  (VTBL_ENTRY)&_ZN7S1310C13v11Ev,
  (VTBL_ENTRY)&_ZN7S1310C13v12Ev,
};
extern VTBL_ENTRY _ZTI7S1310C1[];
extern  VTBL_ENTRY _ZTV7S1310C1[];
Class_Descriptor cd_S1310C1 = {  "S1310C1", // class name
  bases_S1310C1, 3,
  &(vtc_S1310C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(184,116), // object size
  NSPAIRA(_ZTI7S1310C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1310C1),100, //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  S2007C7  {
  ::S2264C29_nt s2007c7f0;
  virtual  ~S2007C7(); // _ZN7S2007C7D1Ev
  virtual void  v70(); // _ZN7S2007C73v70Ev
  virtual void  v71(); // _ZN7S2007C73v71Ev
  virtual void  v72(); // _ZN7S2007C73v72Ev
  S2007C7(); // tgen
};
//SIG(-1 S2007C7) C1{ vd v1 v2 v3 FC2{ m Fp Fi[2] FC3{ m}}}


 S2007C7 ::~S2007C7(){ note_dtor("S2007C7", this);}
void  S2007C7 ::v70(){vfunc_called(this, "_ZN7S2007C73v70Ev");}
void  S2007C7 ::v71(){vfunc_called(this, "_ZN7S2007C73v71Ev");}
void  S2007C7 ::v72(){vfunc_called(this, "_ZN7S2007C73v72Ev");}
S2007C7 ::S2007C7(){ note_ctor("S2007C7", this);} // tgen

static void Test_S2007C7()
{
  extern Class_Descriptor cd_S2007C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S2007C7, buf);
    S2007C7 *dp, &lv = *(dp=new (buf) S2007C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2007C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2007C7)");
    check_field_offset(lv, s2007c7f0, ABISELECT(8,4), "S2007C7.s2007c7f0");
    test_class_info(&lv, &cd_S2007C7);
    dp->~S2007C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2007C7(Test_S2007C7, "S2007C7", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S2007C7C1Ev();
extern void _ZN7S2007C7D1Ev();
Name_Map name_map_S2007C7[] = {
  NSPAIR(_ZN7S2007C7C1Ev),
  NSPAIR(_ZN7S2007C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2007C7[];
extern void _ZN7S2007C7D1Ev();
extern void _ZN7S2007C7D0Ev();
extern void _ZN7S2007C73v70Ev();
extern void _ZN7S2007C73v71Ev();
extern void _ZN7S2007C73v72Ev();
static  VTBL_ENTRY vtc_S2007C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2007C7[0]),
  (VTBL_ENTRY)&_ZN7S2007C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2007C7D0Ev,
  (VTBL_ENTRY)&_ZN7S2007C73v70Ev,
  (VTBL_ENTRY)&_ZN7S2007C73v71Ev,
  (VTBL_ENTRY)&_ZN7S2007C73v72Ev,
};
extern VTBL_ENTRY _ZTI7S2007C7[];
extern  VTBL_ENTRY _ZTV7S2007C7[];
Class_Descriptor cd_S2007C7 = {  "S2007C7", // class name
  0,0,//no base classes
  &(vtc_S2007C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S2007C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2007C7),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  S2007C4  {
  int s2007c4f0;
  void *s2007c4f1;
  ::S2264C37 s2007c4f2;
  ::S2007C7 s2007c4f3;
  void *s2007c4f4[3];
  int s2007c4f5[2];
  virtual  ~S2007C4(); // _ZN7S2007C4D1Ev
  virtual void  v10(); // _ZN7S2007C43v10Ev
  virtual void  v11(); // _ZN7S2007C43v11Ev
  virtual void  v12(); // _ZN7S2007C43v12Ev
  virtual void  v13(); // _ZN7S2007C43v13Ev
  virtual void  v14(); // _ZN7S2007C43v14Ev
  virtual void  v15(); // _ZN7S2007C43v15Ev
  virtual void  v16(); // _ZN7S2007C43v16Ev
  virtual void  v17(); // _ZN7S2007C43v17Ev
  virtual void  v18(); // _ZN7S2007C43v18Ev
  virtual void  v19(); // _ZN7S2007C43v19Ev
  virtual void  v20(); // _ZN7S2007C43v20Ev
  virtual void  v21(); // _ZN7S2007C43v21Ev
  virtual void  v22(); // _ZN7S2007C43v22Ev
  virtual void  v23(); // _ZN7S2007C43v23Ev
  virtual void  v24(); // _ZN7S2007C43v24Ev
  virtual void  v25(); // _ZN7S2007C43v25Ev
  virtual void  v26(); // _ZN7S2007C43v26Ev
  virtual void  v27(); // _ZN7S2007C43v27Ev
  virtual void  v28(); // _ZN7S2007C43v28Ev
  virtual void  v29(); // _ZN7S2007C43v29Ev
  virtual void  v30(); // _ZN7S2007C43v30Ev
  virtual void  v31(); // _ZN7S2007C43v31Ev
  virtual void  v32(); // _ZN7S2007C43v32Ev
  virtual void  v33(); // _ZN7S2007C43v33Ev
  virtual void  v34(); // _ZN7S2007C43v34Ev
  virtual void  v35(); // _ZN7S2007C43v35Ev
  virtual void  v36(); // _ZN7S2007C43v36Ev
  virtual void  v37(); // _ZN7S2007C43v37Ev
  S2007C4(); // tgen
};
//SIG(-1 S2007C4) 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 Fi Fp FC2{ m Fp Fi[2] FC3{ m}} FC4{ vd v29 v30 v31 FC5{ m Fp Fi[2] FC6{ m}}} Fp[3] Fi[2]}


 S2007C4 ::~S2007C4(){ note_dtor("S2007C4", this);}
void  S2007C4 ::v10(){vfunc_called(this, "_ZN7S2007C43v10Ev");}
void  S2007C4 ::v11(){vfunc_called(this, "_ZN7S2007C43v11Ev");}
void  S2007C4 ::v12(){vfunc_called(this, "_ZN7S2007C43v12Ev");}
void  S2007C4 ::v13(){vfunc_called(this, "_ZN7S2007C43v13Ev");}
void  S2007C4 ::v14(){vfunc_called(this, "_ZN7S2007C43v14Ev");}
void  S2007C4 ::v15(){vfunc_called(this, "_ZN7S2007C43v15Ev");}
void  S2007C4 ::v16(){vfunc_called(this, "_ZN7S2007C43v16Ev");}
void  S2007C4 ::v17(){vfunc_called(this, "_ZN7S2007C43v17Ev");}
void  S2007C4 ::v18(){vfunc_called(this, "_ZN7S2007C43v18Ev");}
void  S2007C4 ::v19(){vfunc_called(this, "_ZN7S2007C43v19Ev");}
void  S2007C4 ::v20(){vfunc_called(this, "_ZN7S2007C43v20Ev");}
void  S2007C4 ::v21(){vfunc_called(this, "_ZN7S2007C43v21Ev");}
void  S2007C4 ::v22(){vfunc_called(this, "_ZN7S2007C43v22Ev");}
void  S2007C4 ::v23(){vfunc_called(this, "_ZN7S2007C43v23Ev");}
void  S2007C4 ::v24(){vfunc_called(this, "_ZN7S2007C43v24Ev");}
void  S2007C4 ::v25(){vfunc_called(this, "_ZN7S2007C43v25Ev");}
void  S2007C4 ::v26(){vfunc_called(this, "_ZN7S2007C43v26Ev");}
void  S2007C4 ::v27(){vfunc_called(this, "_ZN7S2007C43v27Ev");}
void  S2007C4 ::v28(){vfunc_called(this, "_ZN7S2007C43v28Ev");}
void  S2007C4 ::v29(){vfunc_called(this, "_ZN7S2007C43v29Ev");}
void  S2007C4 ::v30(){vfunc_called(this, "_ZN7S2007C43v30Ev");}
void  S2007C4 ::v31(){vfunc_called(this, "_ZN7S2007C43v31Ev");}
void  S2007C4 ::v32(){vfunc_called(this, "_ZN7S2007C43v32Ev");}
void  S2007C4 ::v33(){vfunc_called(this, "_ZN7S2007C43v33Ev");}
void  S2007C4 ::v34(){vfunc_called(this, "_ZN7S2007C43v34Ev");}
void  S2007C4 ::v35(){vfunc_called(this, "_ZN7S2007C43v35Ev");}
void  S2007C4 ::v36(){vfunc_called(this, "_ZN7S2007C43v36Ev");}
void  S2007C4 ::v37(){vfunc_called(this, "_ZN7S2007C43v37Ev");}
S2007C4 ::S2007C4(){ note_ctor("S2007C4", this);} // tgen

static void Test_S2007C4()
{
  extern Class_Descriptor cd_S2007C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,18)];
    init_test(&cd_S2007C4, buf);
    S2007C4 *dp, &lv = *(dp=new (buf) S2007C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,68), "sizeof(S2007C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2007C4)");
    check_field_offset(lv, s2007c4f0, ABISELECT(8,4), "S2007C4.s2007c4f0");
    check_field_offset(lv, s2007c4f1, ABISELECT(16,8), "S2007C4.s2007c4f1");
    check_field_offset(lv, s2007c4f2, ABISELECT(24,12), "S2007C4.s2007c4f2");
    check_field_offset(lv, s2007c4f3, ABISELECT(48,28), "S2007C4.s2007c4f3");
    check_field_offset(lv, s2007c4f4, ABISELECT(80,48), "S2007C4.s2007c4f4");
    check_field_offset(lv, s2007c4f5, ABISELECT(104,60), "S2007C4.s2007c4f5");
    test_class_info(&lv, &cd_S2007C4);
    dp->~S2007C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2007C4(Test_S2007C4, "S2007C4", ABISELECT(112,68));

#else // __cplusplus

extern void _ZN7S2007C4C1Ev();
extern void _ZN7S2007C4D1Ev();
Name_Map name_map_S2007C4[] = {
  NSPAIR(_ZN7S2007C4C1Ev),
  NSPAIR(_ZN7S2007C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2007C4[];
extern void _ZN7S2007C4D1Ev();
extern void _ZN7S2007C4D0Ev();
extern void _ZN7S2007C43v10Ev();
extern void _ZN7S2007C43v11Ev();
extern void _ZN7S2007C43v12Ev();
extern void _ZN7S2007C43v13Ev();
extern void _ZN7S2007C43v14Ev();
extern void _ZN7S2007C43v15Ev();
extern void _ZN7S2007C43v16Ev();
extern void _ZN7S2007C43v17Ev();
extern void _ZN7S2007C43v18Ev();
extern void _ZN7S2007C43v19Ev();
extern void _ZN7S2007C43v20Ev();
extern void _ZN7S2007C43v21Ev();
extern void _ZN7S2007C43v22Ev();
extern void _ZN7S2007C43v23Ev();
extern void _ZN7S2007C43v24Ev();
extern void _ZN7S2007C43v25Ev();
extern void _ZN7S2007C43v26Ev();
extern void _ZN7S2007C43v27Ev();
extern void _ZN7S2007C43v28Ev();
extern void _ZN7S2007C43v29Ev();
extern void _ZN7S2007C43v30Ev();
extern void _ZN7S2007C43v31Ev();
extern void _ZN7S2007C43v32Ev();
extern void _ZN7S2007C43v33Ev();
extern void _ZN7S2007C43v34Ev();
extern void _ZN7S2007C43v35Ev();
extern void _ZN7S2007C43v36Ev();
extern void _ZN7S2007C43v37Ev();
static  VTBL_ENTRY vtc_S2007C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2007C4[0]),
  (VTBL_ENTRY)&_ZN7S2007C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2007C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v19Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v20Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v21Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v22Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v23Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v24Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v25Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v26Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v27Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v28Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v29Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v30Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v31Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v32Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v33Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v34Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v35Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v36Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v37Ev,
};
extern VTBL_ENTRY _ZTI7S2007C4[];
extern  VTBL_ENTRY _ZTV7S2007C4[];
Class_Descriptor cd_S2007C4 = {  "S2007C4", // class name
  0,0,//no base classes
  &(vtc_S2007C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,68), // object size
  NSPAIRA(_ZTI7S2007C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2007C4),32, //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  S2007C3  : S2007C4 {
  int s2007c3f0[5];
  virtual  ~S2007C3(); // _ZN7S2007C3D1Ev
  virtual void  v38(); // _ZN7S2007C33v38Ev
  virtual void  v39(); // _ZN7S2007C33v39Ev
  virtual void  v40(); // _ZN7S2007C33v40Ev
  virtual void  v41(); // _ZN7S2007C33v41Ev
  virtual void  v42(); // _ZN7S2007C33v42Ev
  virtual void  v43(); // _ZN7S2007C33v43Ev
  S2007C3(); // tgen
};
//SIG(-1 S2007C3) C1{ BC2{ 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 Fi Fp FC3{ m Fp Fi[2] FC4{ m}} FC5{ vd v35 v36 v37 FC6{ m Fp Fi[2] FC7{ m}}} Fp[3] Fi[2]} vd v1 v2 v3 v4 v5 v6 Fi[5]}


 S2007C3 ::~S2007C3(){ note_dtor("S2007C3", this);}
void  S2007C3 ::v38(){vfunc_called(this, "_ZN7S2007C33v38Ev");}
void  S2007C3 ::v39(){vfunc_called(this, "_ZN7S2007C33v39Ev");}
void  S2007C3 ::v40(){vfunc_called(this, "_ZN7S2007C33v40Ev");}
void  S2007C3 ::v41(){vfunc_called(this, "_ZN7S2007C33v41Ev");}
void  S2007C3 ::v42(){vfunc_called(this, "_ZN7S2007C33v42Ev");}
void  S2007C3 ::v43(){vfunc_called(this, "_ZN7S2007C33v43Ev");}
S2007C3 ::S2007C3(){ note_ctor("S2007C3", this);} // tgen

static void Test_S2007C3()
{
  extern Class_Descriptor cd_S2007C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,23)];
    init_test(&cd_S2007C3, buf);
    S2007C3 *dp, &lv = *(dp=new (buf) S2007C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,88), "sizeof(S2007C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2007C3)");
    check_base_class_offset(lv, (S2007C4*), 0, "S2007C3");
    check_field_offset(lv, s2007c3f0, ABISELECT(112,68), "S2007C3.s2007c3f0");
    test_class_info(&lv, &cd_S2007C3);
    dp->~S2007C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2007C3(Test_S2007C3, "S2007C3", ABISELECT(136,88));

#else // __cplusplus

extern void _ZN7S2007C3C1Ev();
extern void _ZN7S2007C3D1Ev();
Name_Map name_map_S2007C3[] = {
  NSPAIR(_ZN7S2007C3C1Ev),
  NSPAIR(_ZN7S2007C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2007C4;
extern VTBL_ENTRY _ZTI7S2007C4[];
extern  VTBL_ENTRY _ZTV7S2007C4[];
static Base_Class bases_S2007C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2007C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S2007C3[];
extern void _ZN7S2007C3D1Ev();
extern void _ZN7S2007C3D0Ev();
extern void _ZN7S2007C43v10Ev();
extern void _ZN7S2007C43v11Ev();
extern void _ZN7S2007C43v12Ev();
extern void _ZN7S2007C43v13Ev();
extern void _ZN7S2007C43v14Ev();
extern void _ZN7S2007C43v15Ev();
extern void _ZN7S2007C43v16Ev();
extern void _ZN7S2007C43v17Ev();
extern void _ZN7S2007C43v18Ev();
extern void _ZN7S2007C43v19Ev();
extern void _ZN7S2007C43v20Ev();
extern void _ZN7S2007C43v21Ev();
extern void _ZN7S2007C43v22Ev();
extern void _ZN7S2007C43v23Ev();
extern void _ZN7S2007C43v24Ev();
extern void _ZN7S2007C43v25Ev();
extern void _ZN7S2007C43v26Ev();
extern void _ZN7S2007C43v27Ev();
extern void _ZN7S2007C43v28Ev();
extern void _ZN7S2007C43v29Ev();
extern void _ZN7S2007C43v30Ev();
extern void _ZN7S2007C43v31Ev();
extern void _ZN7S2007C43v32Ev();
extern void _ZN7S2007C43v33Ev();
extern void _ZN7S2007C43v34Ev();
extern void _ZN7S2007C43v35Ev();
extern void _ZN7S2007C43v36Ev();
extern void _ZN7S2007C43v37Ev();
extern void _ZN7S2007C33v38Ev();
extern void _ZN7S2007C33v39Ev();
extern void _ZN7S2007C33v40Ev();
extern void _ZN7S2007C33v41Ev();
extern void _ZN7S2007C33v42Ev();
extern void _ZN7S2007C33v43Ev();
static  VTBL_ENTRY vtc_S2007C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2007C3[0]),
  (VTBL_ENTRY)&_ZN7S2007C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2007C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v19Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v20Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v21Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v22Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v23Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v24Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v25Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v26Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v27Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v28Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v29Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v30Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v31Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v32Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v33Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v34Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v35Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v36Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v37Ev,
  (VTBL_ENTRY)&_ZN7S2007C33v38Ev,
  (VTBL_ENTRY)&_ZN7S2007C33v39Ev,
  (VTBL_ENTRY)&_ZN7S2007C33v40Ev,
  (VTBL_ENTRY)&_ZN7S2007C33v41Ev,
  (VTBL_ENTRY)&_ZN7S2007C33v42Ev,
  (VTBL_ENTRY)&_ZN7S2007C33v43Ev,
};
extern VTBL_ENTRY _ZTI7S2007C3[];
extern  VTBL_ENTRY _ZTV7S2007C3[];
Class_Descriptor cd_S2007C3 = {  "S2007C3", // class name
  bases_S2007C3, 1,
  &(vtc_S2007C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI7S2007C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2007C3),38, //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  S2007C10  {
  int s2007c10f0;
  char s2007c10f1[320];
};
//SIG(-1 S2007C10) C1{ Fi Fc[320]}



static void Test_S2007C10()
{
  {
    init_simple_test("S2007C10");
    S2007C10 lv;
    check2(sizeof(lv), 324, "sizeof(S2007C10)");
    check2(__alignof__(lv), 4, "__alignof__(S2007C10)");
    check_field_offset(lv, s2007c10f0, 0, "S2007C10.s2007c10f0");
    check_field_offset(lv, s2007c10f1, 4, "S2007C10.s2007c10f1");
  }
}
static Arrange_To_Call_Me vS2007C10(Test_S2007C10, "S2007C10", 324);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2007C11  {
  char s2007c11f0[256];
};
//SIG(-1 S2007C11) C1{ Fc[256]}



static void Test_S2007C11()
{
  {
    init_simple_test("S2007C11");
    S2007C11 lv;
    check2(sizeof(lv), 256, "sizeof(S2007C11)");
    check2(__alignof__(lv), 1, "__alignof__(S2007C11)");
    check_field_offset(lv, s2007c11f0, 0, "S2007C11.s2007c11f0");
  }
}
static Arrange_To_Call_Me vS2007C11(Test_S2007C11, "S2007C11", 256);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2007C12  {
  char s2007c12f0[205];
};
//SIG(-1 S2007C12) C1{ Fc[205]}



static void Test_S2007C12()
{
  {
    init_simple_test("S2007C12");
    S2007C12 lv;
    check2(sizeof(lv), 205, "sizeof(S2007C12)");
    check2(__alignof__(lv), 1, "__alignof__(S2007C12)");
    check_field_offset(lv, s2007c12f0, 0, "S2007C12.s2007c12f0");
  }
}
static Arrange_To_Call_Me vS2007C12(Test_S2007C12, "S2007C12", 205);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2007C13_nt  {
  void *s2007c13f0;
  int s2007c13f1[2];
  ::S2264C38 s2007c13f2;
  void  mf2007c13(); // _ZN11S2007C13_nt9mf2007c13Ev
};
//SIG(-1 S2007C13_nt) C1{ m Fp Fi[2] FC2{ m}}


void  S2007C13_nt ::mf2007c13(){}

//skip512 S2007C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2007C15  {
  __tsi64 s2007c15f0;
  char s2007c15f1[4136];
};
//SIG(-1 S2007C15) C1{ FL Fc[4136]}



static void Test_S2007C15()
{
  {
    init_simple_test("S2007C15");
    S2007C15 lv;
    check2(sizeof(lv), 4144, "sizeof(S2007C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2007C15)");
    check_field_offset(lv, s2007c15f0, 0, "S2007C15.s2007c15f0");
    check_field_offset(lv, s2007c15f1, 8, "S2007C15.s2007c15f1");
  }
}
static Arrange_To_Call_Me vS2007C15(Test_S2007C15, "S2007C15", 4144);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2007C2  : S2007C3 {
  int s2007c2f0;
  char s2007c2f1[138];
  __tsi64 s2007c2f2;
  char s2007c2f3[512];
  int s2007c2f4[3];
  ::S2007C10 s2007c2f5;
  ::S2007C11 s2007c2f6;
  ::S2007C12 s2007c2f7;
  int s2007c2f8[4];
  ::S2007C13_nt s2007c2f9;
  int s2007c2f10;
  ::S2007C15 s2007c2f11;
  int s2007c2f12;
  virtual  ~S2007C2(); // _ZN7S2007C2D1Ev
  virtual void  v44(); // _ZN7S2007C23v44Ev
  virtual void  v45(); // _ZN7S2007C23v45Ev
  virtual void  v46(); // _ZN7S2007C23v46Ev
  virtual void  v47(); // _ZN7S2007C23v47Ev
  virtual void  v48(); // _ZN7S2007C23v48Ev
  virtual void  v49(); // _ZN7S2007C23v49Ev
  virtual void  v50(); // _ZN7S2007C23v50Ev
  virtual void  v51(); // _ZN7S2007C23v51Ev
  virtual void  v52(); // _ZN7S2007C23v52Ev
  virtual void  v53(); // _ZN7S2007C23v53Ev
  virtual void  v54(); // _ZN7S2007C23v54Ev
  virtual void  v55(); // _ZN7S2007C23v55Ev
  virtual void  v56(); // _ZN7S2007C23v56Ev
  virtual void  v57(); // _ZN7S2007C23v57Ev
  virtual void  v58(); // _ZN7S2007C23v58Ev
  virtual void  v59(); // _ZN7S2007C23v59Ev
  virtual void  v60(); // _ZN7S2007C23v60Ev
  virtual void  v61(); // _ZN7S2007C23v61Ev
  virtual void  v62(); // _ZN7S2007C23v62Ev
  virtual void  v63(); // _ZN7S2007C23v63Ev
  virtual void  v64(); // _ZN7S2007C23v64Ev
  virtual void  v65(); // _ZN7S2007C23v65Ev
  virtual void  v66(); // _ZN7S2007C23v66Ev
  virtual void  v67(); // _ZN7S2007C23v67Ev
  virtual void  v68(); // _ZN7S2007C23v68Ev
  virtual void  v69(); // _ZN7S2007C23v69Ev
  S2007C2(); // tgen
};
//SIG(-1 S2007C2) C1{ BC2{ BC3{ 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 Fi Fp FC4{ m Fp Fi[2] FC5{ m}} FC6{ vd v61 v62 v63 FC7{ m Fp Fi[2] FC8{ m}}} Fp[3] Fi[2]} vd v55 v56 v57 v58 v59 v60 Fi[5]} 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 Fi Fc[138] FL Fc[512] Fi[3] FC9{ Fi Fc[320]} FC10{ Fc[256]} FC11{ Fc[205]} Fi[4] FC12{ m Fp Fi[2] FC5} Fi FC13{ FL Fc[4136]} Fi}


 S2007C2 ::~S2007C2(){ note_dtor("S2007C2", this);}
void  S2007C2 ::v44(){vfunc_called(this, "_ZN7S2007C23v44Ev");}
void  S2007C2 ::v45(){vfunc_called(this, "_ZN7S2007C23v45Ev");}
void  S2007C2 ::v46(){vfunc_called(this, "_ZN7S2007C23v46Ev");}
void  S2007C2 ::v47(){vfunc_called(this, "_ZN7S2007C23v47Ev");}
void  S2007C2 ::v48(){vfunc_called(this, "_ZN7S2007C23v48Ev");}
void  S2007C2 ::v49(){vfunc_called(this, "_ZN7S2007C23v49Ev");}
void  S2007C2 ::v50(){vfunc_called(this, "_ZN7S2007C23v50Ev");}
void  S2007C2 ::v51(){vfunc_called(this, "_ZN7S2007C23v51Ev");}
void  S2007C2 ::v52(){vfunc_called(this, "_ZN7S2007C23v52Ev");}
void  S2007C2 ::v53(){vfunc_called(this, "_ZN7S2007C23v53Ev");}
void  S2007C2 ::v54(){vfunc_called(this, "_ZN7S2007C23v54Ev");}
void  S2007C2 ::v55(){vfunc_called(this, "_ZN7S2007C23v55Ev");}
void  S2007C2 ::v56(){vfunc_called(this, "_ZN7S2007C23v56Ev");}
void  S2007C2 ::v57(){vfunc_called(this, "_ZN7S2007C23v57Ev");}
void  S2007C2 ::v58(){vfunc_called(this, "_ZN7S2007C23v58Ev");}
void  S2007C2 ::v59(){vfunc_called(this, "_ZN7S2007C23v59Ev");}
void  S2007C2 ::v60(){vfunc_called(this, "_ZN7S2007C23v60Ev");}
void  S2007C2 ::v61(){vfunc_called(this, "_ZN7S2007C23v61Ev");}
void  S2007C2 ::v62(){vfunc_called(this, "_ZN7S2007C23v62Ev");}
void  S2007C2 ::v63(){vfunc_called(this, "_ZN7S2007C23v63Ev");}
void  S2007C2 ::v64(){vfunc_called(this, "_ZN7S2007C23v64Ev");}
void  S2007C2 ::v65(){vfunc_called(this, "_ZN7S2007C23v65Ev");}
void  S2007C2 ::v66(){vfunc_called(this, "_ZN7S2007C23v66Ev");}
void  S2007C2 ::v67(){vfunc_called(this, "_ZN7S2007C23v67Ev");}
void  S2007C2 ::v68(){vfunc_called(this, "_ZN7S2007C23v68Ev");}
void  S2007C2 ::v69(){vfunc_called(this, "_ZN7S2007C23v69Ev");}
S2007C2 ::S2007C2(){ note_ctor("S2007C2", this);} // tgen

static void Test_S2007C2()
{
  extern Class_Descriptor cd_S2007C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(726,1435)];
    init_test(&cd_S2007C2, buf);
    S2007C2 *dp, &lv = *(dp=new (buf) S2007C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5800,5736), "sizeof(S2007C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2007C2)");
    check_base_class_offset(lv, (S2007C4*)(S2007C3*), 0, "S2007C2");
    check_base_class_offset(lv, (S2007C3*), 0, "S2007C2");
    check_field_offset(lv, s2007c2f0, ABISELECT(132,88), "S2007C2.s2007c2f0");
    check_field_offset(lv, s2007c2f1, ABISELECT(136,92), "S2007C2.s2007c2f1");
    check_field_offset(lv, s2007c2f2, ABISELECT(280,232), "S2007C2.s2007c2f2");
    check_field_offset(lv, s2007c2f3, ABISELECT(288,240), "S2007C2.s2007c2f3");
    check_field_offset(lv, s2007c2f4, ABISELECT(800,752), "S2007C2.s2007c2f4");
    check_field_offset(lv, s2007c2f5, ABISELECT(812,764), "S2007C2.s2007c2f5");
    check_field_offset(lv, s2007c2f6, ABISELECT(1136,1088), "S2007C2.s2007c2f6");
    check_field_offset(lv, s2007c2f7, ABISELECT(1392,1344), "S2007C2.s2007c2f7");
    check_field_offset(lv, s2007c2f8, ABISELECT(1600,1552), "S2007C2.s2007c2f8");
    check_field_offset(lv, s2007c2f9, ABISELECT(1616,1568), "S2007C2.s2007c2f9");
    check_field_offset(lv, s2007c2f10, ABISELECT(1640,1584), "S2007C2.s2007c2f10");
    check_field_offset(lv, s2007c2f11, ABISELECT(1648,1588), "S2007C2.s2007c2f11");
    check_field_offset(lv, s2007c2f12, ABISELECT(5792,5732), "S2007C2.s2007c2f12");
    test_class_info(&lv, &cd_S2007C2);
    dp->~S2007C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2007C2(Test_S2007C2, "S2007C2", ABISELECT(5800,5736));

#else // __cplusplus

extern void _ZN7S2007C2C1Ev();
extern void _ZN7S2007C2D1Ev();
Name_Map name_map_S2007C2[] = {
  NSPAIR(_ZN7S2007C2C1Ev),
  NSPAIR(_ZN7S2007C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2007C4;
extern VTBL_ENTRY _ZTI7S2007C4[];
extern  VTBL_ENTRY _ZTV7S2007C4[];
extern Class_Descriptor cd_S2007C3;
extern VTBL_ENTRY _ZTI7S2007C3[];
extern  VTBL_ENTRY _ZTV7S2007C3[];
static Base_Class bases_S2007C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2007C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2007C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2007C2[];
extern void _ZN7S2007C2D1Ev();
extern void _ZN7S2007C2D0Ev();
extern void _ZN7S2007C43v10Ev();
extern void _ZN7S2007C43v11Ev();
extern void _ZN7S2007C43v12Ev();
extern void _ZN7S2007C43v13Ev();
extern void _ZN7S2007C43v14Ev();
extern void _ZN7S2007C43v15Ev();
extern void _ZN7S2007C43v16Ev();
extern void _ZN7S2007C43v17Ev();
extern void _ZN7S2007C43v18Ev();
extern void _ZN7S2007C43v19Ev();
extern void _ZN7S2007C43v20Ev();
extern void _ZN7S2007C43v21Ev();
extern void _ZN7S2007C43v22Ev();
extern void _ZN7S2007C43v23Ev();
extern void _ZN7S2007C43v24Ev();
extern void _ZN7S2007C43v25Ev();
extern void _ZN7S2007C43v26Ev();
extern void _ZN7S2007C43v27Ev();
extern void _ZN7S2007C43v28Ev();
extern void _ZN7S2007C43v29Ev();
extern void _ZN7S2007C43v30Ev();
extern void _ZN7S2007C43v31Ev();
extern void _ZN7S2007C43v32Ev();
extern void _ZN7S2007C43v33Ev();
extern void _ZN7S2007C43v34Ev();
extern void _ZN7S2007C43v35Ev();
extern void _ZN7S2007C43v36Ev();
extern void _ZN7S2007C43v37Ev();
extern void _ZN7S2007C33v38Ev();
extern void _ZN7S2007C33v39Ev();
extern void _ZN7S2007C33v40Ev();
extern void _ZN7S2007C33v41Ev();
extern void _ZN7S2007C33v42Ev();
extern void _ZN7S2007C33v43Ev();
extern void _ZN7S2007C23v44Ev();
extern void _ZN7S2007C23v45Ev();
extern void _ZN7S2007C23v46Ev();
extern void _ZN7S2007C23v47Ev();
extern void _ZN7S2007C23v48Ev();
extern void _ZN7S2007C23v49Ev();
extern void _ZN7S2007C23v50Ev();
extern void _ZN7S2007C23v51Ev();
extern void _ZN7S2007C23v52Ev();
extern void _ZN7S2007C23v53Ev();
extern void _ZN7S2007C23v54Ev();
extern void _ZN7S2007C23v55Ev();
extern void _ZN7S2007C23v56Ev();
extern void _ZN7S2007C23v57Ev();
extern void _ZN7S2007C23v58Ev();
extern void _ZN7S2007C23v59Ev();
extern void _ZN7S2007C23v60Ev();
extern void _ZN7S2007C23v61Ev();
extern void _ZN7S2007C23v62Ev();
extern void _ZN7S2007C23v63Ev();
extern void _ZN7S2007C23v64Ev();
extern void _ZN7S2007C23v65Ev();
extern void _ZN7S2007C23v66Ev();
extern void _ZN7S2007C23v67Ev();
extern void _ZN7S2007C23v68Ev();
extern void _ZN7S2007C23v69Ev();
static  VTBL_ENTRY vtc_S2007C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2007C2[0]),
  (VTBL_ENTRY)&_ZN7S2007C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2007C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v19Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v20Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v21Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v22Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v23Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v24Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v25Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v26Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v27Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v28Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v29Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v30Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v31Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v32Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v33Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v34Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v35Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v36Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v37Ev,
  (VTBL_ENTRY)&_ZN7S2007C33v38Ev,
  (VTBL_ENTRY)&_ZN7S2007C33v39Ev,
  (VTBL_ENTRY)&_ZN7S2007C33v40Ev,
  (VTBL_ENTRY)&_ZN7S2007C33v41Ev,
  (VTBL_ENTRY)&_ZN7S2007C33v42Ev,
  (VTBL_ENTRY)&_ZN7S2007C33v43Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v44Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v45Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v46Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v47Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v48Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v49Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v50Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v51Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v52Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v53Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v54Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v55Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v56Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v57Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v58Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v59Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v60Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v61Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v62Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v63Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v64Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v65Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v66Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v67Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v68Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v69Ev,
};
extern VTBL_ENTRY _ZTI7S2007C2[];
extern  VTBL_ENTRY _ZTV7S2007C2[];
Class_Descriptor cd_S2007C2 = {  "S2007C2", // class name
  bases_S2007C2, 2,
  &(vtc_S2007C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(5800,5736), // object size
  NSPAIRA(_ZTI7S2007C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2007C2),64, //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  S2007C1  : S2007C2 {
  virtual  ~S2007C1(); // _ZN7S2007C1D1Ev
  virtual void  v1(); // _ZN7S2007C12v1Ev
  virtual void  v2(); // _ZN7S2007C12v2Ev
  virtual void  v3(); // _ZN7S2007C12v3Ev
  virtual void  v4(); // _ZN7S2007C12v4Ev
  virtual void  v5(); // _ZN7S2007C12v5Ev
  virtual void  v6(); // _ZN7S2007C12v6Ev
  virtual void  v7(); // _ZN7S2007C12v7Ev
  virtual void  v8(); // _ZN7S2007C12v8Ev
  virtual void  v9(); // _ZN7S2007C12v9Ev
  S2007C1(); // tgen
};
//SIG(1 S2007C1) 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 Fi Fp FC5{ m Fp Fi[2] FC6{ m}} FC7{ vd v70 v71 v72 FC8{ m Fp Fi[2] FC9{ m}}} Fp[3] Fi[2]} vd v38 v39 v40 v41 v42 v43 Fi[5]} vd 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 Fc[138] FL Fc[512] Fi[3] FC10{ Fi Fc[320]} FC11{ Fc[256]} FC12{ Fc[205]} Fi[4] FC13{ m Fp Fi[2] FC6} Fi FC14{ FL Fc[4136]} Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S2007C1 ::~S2007C1(){ note_dtor("S2007C1", this);}
void  S2007C1 ::v1(){vfunc_called(this, "_ZN7S2007C12v1Ev");}
void  S2007C1 ::v2(){vfunc_called(this, "_ZN7S2007C12v2Ev");}
void  S2007C1 ::v3(){vfunc_called(this, "_ZN7S2007C12v3Ev");}
void  S2007C1 ::v4(){vfunc_called(this, "_ZN7S2007C12v4Ev");}
void  S2007C1 ::v5(){vfunc_called(this, "_ZN7S2007C12v5Ev");}
void  S2007C1 ::v6(){vfunc_called(this, "_ZN7S2007C12v6Ev");}
void  S2007C1 ::v7(){vfunc_called(this, "_ZN7S2007C12v7Ev");}
void  S2007C1 ::v8(){vfunc_called(this, "_ZN7S2007C12v8Ev");}
void  S2007C1 ::v9(){vfunc_called(this, "_ZN7S2007C12v9Ev");}
S2007C1 ::S2007C1(){ note_ctor("S2007C1", this);} // tgen

static void Test_S2007C1()
{
  extern Class_Descriptor cd_S2007C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(726,1435)];
    init_test(&cd_S2007C1, buf);
    S2007C1 *dp, &lv = *(dp=new (buf) S2007C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5800,5736), "sizeof(S2007C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2007C1)");
    check_base_class_offset(lv, (S2007C4*)(S2007C3*)(S2007C2*), 0, "S2007C1");
    check_base_class_offset(lv, (S2007C3*)(S2007C2*), 0, "S2007C1");
    check_base_class_offset(lv, (S2007C2*), 0, "S2007C1");
    test_class_info(&lv, &cd_S2007C1);
    dp->~S2007C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2007C1(Test_S2007C1, "S2007C1", ABISELECT(5800,5736));

#else // __cplusplus

extern void _ZN7S2007C1C1Ev();
extern void _ZN7S2007C1D1Ev();
Name_Map name_map_S2007C1[] = {
  NSPAIR(_ZN7S2007C1C1Ev),
  NSPAIR(_ZN7S2007C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2007C4;
extern VTBL_ENTRY _ZTI7S2007C4[];
extern  VTBL_ENTRY _ZTV7S2007C4[];
extern Class_Descriptor cd_S2007C3;
extern VTBL_ENTRY _ZTI7S2007C3[];
extern  VTBL_ENTRY _ZTV7S2007C3[];
extern Class_Descriptor cd_S2007C2;
extern VTBL_ENTRY _ZTI7S2007C2[];
extern  VTBL_ENTRY _ZTV7S2007C2[];
static Base_Class bases_S2007C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2007C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2007C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2007C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2007C1[];
extern void _ZN7S2007C1D1Ev();
extern void _ZN7S2007C1D0Ev();
extern void _ZN7S2007C43v10Ev();
extern void _ZN7S2007C43v11Ev();
extern void _ZN7S2007C43v12Ev();
extern void _ZN7S2007C43v13Ev();
extern void _ZN7S2007C43v14Ev();
extern void _ZN7S2007C43v15Ev();
extern void _ZN7S2007C43v16Ev();
extern void _ZN7S2007C43v17Ev();
extern void _ZN7S2007C43v18Ev();
extern void _ZN7S2007C43v19Ev();
extern void _ZN7S2007C43v20Ev();
extern void _ZN7S2007C43v21Ev();
extern void _ZN7S2007C43v22Ev();
extern void _ZN7S2007C43v23Ev();
extern void _ZN7S2007C43v24Ev();
extern void _ZN7S2007C43v25Ev();
extern void _ZN7S2007C43v26Ev();
extern void _ZN7S2007C43v27Ev();
extern void _ZN7S2007C43v28Ev();
extern void _ZN7S2007C43v29Ev();
extern void _ZN7S2007C43v30Ev();
extern void _ZN7S2007C43v31Ev();
extern void _ZN7S2007C43v32Ev();
extern void _ZN7S2007C43v33Ev();
extern void _ZN7S2007C43v34Ev();
extern void _ZN7S2007C43v35Ev();
extern void _ZN7S2007C43v36Ev();
extern void _ZN7S2007C43v37Ev();
extern void _ZN7S2007C33v38Ev();
extern void _ZN7S2007C33v39Ev();
extern void _ZN7S2007C33v40Ev();
extern void _ZN7S2007C33v41Ev();
extern void _ZN7S2007C33v42Ev();
extern void _ZN7S2007C33v43Ev();
extern void _ZN7S2007C23v44Ev();
extern void _ZN7S2007C23v45Ev();
extern void _ZN7S2007C23v46Ev();
extern void _ZN7S2007C23v47Ev();
extern void _ZN7S2007C23v48Ev();
extern void _ZN7S2007C23v49Ev();
extern void _ZN7S2007C23v50Ev();
extern void _ZN7S2007C23v51Ev();
extern void _ZN7S2007C23v52Ev();
extern void _ZN7S2007C23v53Ev();
extern void _ZN7S2007C23v54Ev();
extern void _ZN7S2007C23v55Ev();
extern void _ZN7S2007C23v56Ev();
extern void _ZN7S2007C23v57Ev();
extern void _ZN7S2007C23v58Ev();
extern void _ZN7S2007C23v59Ev();
extern void _ZN7S2007C23v60Ev();
extern void _ZN7S2007C23v61Ev();
extern void _ZN7S2007C23v62Ev();
extern void _ZN7S2007C23v63Ev();
extern void _ZN7S2007C23v64Ev();
extern void _ZN7S2007C23v65Ev();
extern void _ZN7S2007C23v66Ev();
extern void _ZN7S2007C23v67Ev();
extern void _ZN7S2007C23v68Ev();
extern void _ZN7S2007C23v69Ev();
extern void _ZN7S2007C12v1Ev();
extern void _ZN7S2007C12v2Ev();
extern void _ZN7S2007C12v3Ev();
extern void _ZN7S2007C12v4Ev();
extern void _ZN7S2007C12v5Ev();
extern void _ZN7S2007C12v6Ev();
extern void _ZN7S2007C12v7Ev();
extern void _ZN7S2007C12v8Ev();
extern void _ZN7S2007C12v9Ev();
static  VTBL_ENTRY vtc_S2007C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2007C1[0]),
  (VTBL_ENTRY)&_ZN7S2007C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2007C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v19Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v20Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v21Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v22Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v23Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v24Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v25Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v26Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v27Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v28Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v29Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v30Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v31Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v32Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v33Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v34Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v35Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v36Ev,
  (VTBL_ENTRY)&_ZN7S2007C43v37Ev,
  (VTBL_ENTRY)&_ZN7S2007C33v38Ev,
  (VTBL_ENTRY)&_ZN7S2007C33v39Ev,
  (VTBL_ENTRY)&_ZN7S2007C33v40Ev,
  (VTBL_ENTRY)&_ZN7S2007C33v41Ev,
  (VTBL_ENTRY)&_ZN7S2007C33v42Ev,
  (VTBL_ENTRY)&_ZN7S2007C33v43Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v44Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v45Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v46Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v47Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v48Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v49Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v50Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v51Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v52Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v53Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v54Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v55Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v56Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v57Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v58Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v59Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v60Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v61Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v62Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v63Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v64Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v65Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v66Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v67Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v68Ev,
  (VTBL_ENTRY)&_ZN7S2007C23v69Ev,
  (VTBL_ENTRY)&_ZN7S2007C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2007C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2007C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2007C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2007C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2007C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2007C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2007C12v8Ev,
  (VTBL_ENTRY)&_ZN7S2007C12v9Ev,
};
extern VTBL_ENTRY _ZTI7S2007C1[];
extern  VTBL_ENTRY _ZTV7S2007C1[];
Class_Descriptor cd_S2007C1 = {  "S2007C1", // class name
  bases_S2007C1, 3,
  &(vtc_S2007C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(5800,5736), // object size
  NSPAIRA(_ZTI7S2007C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2007C1),73, //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  S2006C4  {
  int s2006c4f0;
  void *s2006c4f1;
  ::S2264C37 s2006c4f2;
  ::S2007C7 s2006c4f3;
  void *s2006c4f4[3];
  int s2006c4f5[2];
  virtual  ~S2006C4(); // _ZN7S2006C4D1Ev
  virtual void  v10(); // _ZN7S2006C43v10Ev
  virtual void  v11(); // _ZN7S2006C43v11Ev
  virtual void  v12(); // _ZN7S2006C43v12Ev
  virtual void  v13(); // _ZN7S2006C43v13Ev
  virtual void  v14(); // _ZN7S2006C43v14Ev
  virtual void  v15(); // _ZN7S2006C43v15Ev
  virtual void  v16(); // _ZN7S2006C43v16Ev
  virtual void  v17(); // _ZN7S2006C43v17Ev
  virtual void  v18(); // _ZN7S2006C43v18Ev
  virtual void  v19(); // _ZN7S2006C43v19Ev
  virtual void  v20(); // _ZN7S2006C43v20Ev
  virtual void  v21(); // _ZN7S2006C43v21Ev
  virtual void  v22(); // _ZN7S2006C43v22Ev
  virtual void  v23(); // _ZN7S2006C43v23Ev
  virtual void  v24(); // _ZN7S2006C43v24Ev
  virtual void  v25(); // _ZN7S2006C43v25Ev
  virtual void  v26(); // _ZN7S2006C43v26Ev
  virtual void  v27(); // _ZN7S2006C43v27Ev
  virtual void  v28(); // _ZN7S2006C43v28Ev
  virtual void  v29(); // _ZN7S2006C43v29Ev
  virtual void  v30(); // _ZN7S2006C43v30Ev
  virtual void  v31(); // _ZN7S2006C43v31Ev
  virtual void  v32(); // _ZN7S2006C43v32Ev
  virtual void  v33(); // _ZN7S2006C43v33Ev
  virtual void  v34(); // _ZN7S2006C43v34Ev
  virtual void  v35(); // _ZN7S2006C43v35Ev
  virtual void  v36(); // _ZN7S2006C43v36Ev
  virtual void  v37(); // _ZN7S2006C43v37Ev
  S2006C4(); // tgen
};
//SIG(-1 S2006C4) 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 Fi Fp FC2{ m Fp Fi[2] FC3{ m}} FC4{ vd v29 v30 v31 FC5{ m Fp Fi[2] FC6{ m}}} Fp[3] Fi[2]}


 S2006C4 ::~S2006C4(){ note_dtor("S2006C4", this);}
void  S2006C4 ::v10(){vfunc_called(this, "_ZN7S2006C43v10Ev");}
void  S2006C4 ::v11(){vfunc_called(this, "_ZN7S2006C43v11Ev");}
void  S2006C4 ::v12(){vfunc_called(this, "_ZN7S2006C43v12Ev");}
void  S2006C4 ::v13(){vfunc_called(this, "_ZN7S2006C43v13Ev");}
void  S2006C4 ::v14(){vfunc_called(this, "_ZN7S2006C43v14Ev");}
void  S2006C4 ::v15(){vfunc_called(this, "_ZN7S2006C43v15Ev");}
void  S2006C4 ::v16(){vfunc_called(this, "_ZN7S2006C43v16Ev");}
void  S2006C4 ::v17(){vfunc_called(this, "_ZN7S2006C43v17Ev");}
void  S2006C4 ::v18(){vfunc_called(this, "_ZN7S2006C43v18Ev");}
void  S2006C4 ::v19(){vfunc_called(this, "_ZN7S2006C43v19Ev");}
void  S2006C4 ::v20(){vfunc_called(this, "_ZN7S2006C43v20Ev");}
void  S2006C4 ::v21(){vfunc_called(this, "_ZN7S2006C43v21Ev");}
void  S2006C4 ::v22(){vfunc_called(this, "_ZN7S2006C43v22Ev");}
void  S2006C4 ::v23(){vfunc_called(this, "_ZN7S2006C43v23Ev");}
void  S2006C4 ::v24(){vfunc_called(this, "_ZN7S2006C43v24Ev");}
void  S2006C4 ::v25(){vfunc_called(this, "_ZN7S2006C43v25Ev");}
void  S2006C4 ::v26(){vfunc_called(this, "_ZN7S2006C43v26Ev");}
void  S2006C4 ::v27(){vfunc_called(this, "_ZN7S2006C43v27Ev");}
void  S2006C4 ::v28(){vfunc_called(this, "_ZN7S2006C43v28Ev");}
void  S2006C4 ::v29(){vfunc_called(this, "_ZN7S2006C43v29Ev");}
void  S2006C4 ::v30(){vfunc_called(this, "_ZN7S2006C43v30Ev");}
void  S2006C4 ::v31(){vfunc_called(this, "_ZN7S2006C43v31Ev");}
void  S2006C4 ::v32(){vfunc_called(this, "_ZN7S2006C43v32Ev");}
void  S2006C4 ::v33(){vfunc_called(this, "_ZN7S2006C43v33Ev");}
void  S2006C4 ::v34(){vfunc_called(this, "_ZN7S2006C43v34Ev");}
void  S2006C4 ::v35(){vfunc_called(this, "_ZN7S2006C43v35Ev");}
void  S2006C4 ::v36(){vfunc_called(this, "_ZN7S2006C43v36Ev");}
void  S2006C4 ::v37(){vfunc_called(this, "_ZN7S2006C43v37Ev");}
S2006C4 ::S2006C4(){ note_ctor("S2006C4", this);} // tgen

static void Test_S2006C4()
{
  extern Class_Descriptor cd_S2006C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,18)];
    init_test(&cd_S2006C4, buf);
    S2006C4 *dp, &lv = *(dp=new (buf) S2006C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,68), "sizeof(S2006C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2006C4)");
    check_field_offset(lv, s2006c4f0, ABISELECT(8,4), "S2006C4.s2006c4f0");
    check_field_offset(lv, s2006c4f1, ABISELECT(16,8), "S2006C4.s2006c4f1");
    check_field_offset(lv, s2006c4f2, ABISELECT(24,12), "S2006C4.s2006c4f2");
    check_field_offset(lv, s2006c4f3, ABISELECT(48,28), "S2006C4.s2006c4f3");
    check_field_offset(lv, s2006c4f4, ABISELECT(80,48), "S2006C4.s2006c4f4");
    check_field_offset(lv, s2006c4f5, ABISELECT(104,60), "S2006C4.s2006c4f5");
    test_class_info(&lv, &cd_S2006C4);
    dp->~S2006C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2006C4(Test_S2006C4, "S2006C4", ABISELECT(112,68));

#else // __cplusplus

extern void _ZN7S2006C4C1Ev();
extern void _ZN7S2006C4D1Ev();
Name_Map name_map_S2006C4[] = {
  NSPAIR(_ZN7S2006C4C1Ev),
  NSPAIR(_ZN7S2006C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2006C4[];
extern void _ZN7S2006C4D1Ev();
extern void _ZN7S2006C4D0Ev();
extern void _ZN7S2006C43v10Ev();
extern void _ZN7S2006C43v11Ev();
extern void _ZN7S2006C43v12Ev();
extern void _ZN7S2006C43v13Ev();
extern void _ZN7S2006C43v14Ev();
extern void _ZN7S2006C43v15Ev();
extern void _ZN7S2006C43v16Ev();
extern void _ZN7S2006C43v17Ev();
extern void _ZN7S2006C43v18Ev();
extern void _ZN7S2006C43v19Ev();
extern void _ZN7S2006C43v20Ev();
extern void _ZN7S2006C43v21Ev();
extern void _ZN7S2006C43v22Ev();
extern void _ZN7S2006C43v23Ev();
extern void _ZN7S2006C43v24Ev();
extern void _ZN7S2006C43v25Ev();
extern void _ZN7S2006C43v26Ev();
extern void _ZN7S2006C43v27Ev();
extern void _ZN7S2006C43v28Ev();
extern void _ZN7S2006C43v29Ev();
extern void _ZN7S2006C43v30Ev();
extern void _ZN7S2006C43v31Ev();
extern void _ZN7S2006C43v32Ev();
extern void _ZN7S2006C43v33Ev();
extern void _ZN7S2006C43v34Ev();
extern void _ZN7S2006C43v35Ev();
extern void _ZN7S2006C43v36Ev();
extern void _ZN7S2006C43v37Ev();
static  VTBL_ENTRY vtc_S2006C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2006C4[0]),
  (VTBL_ENTRY)&_ZN7S2006C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2006C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v19Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v20Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v21Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v22Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v23Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v24Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v25Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v26Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v27Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v28Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v29Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v30Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v31Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v32Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v33Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v34Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v35Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v36Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v37Ev,
};
extern VTBL_ENTRY _ZTI7S2006C4[];
extern  VTBL_ENTRY _ZTV7S2006C4[];
Class_Descriptor cd_S2006C4 = {  "S2006C4", // class name
  0,0,//no base classes
  &(vtc_S2006C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,68), // object size
  NSPAIRA(_ZTI7S2006C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2006C4),32, //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  S2006C3  : S2006C4 {
  int s2006c3f0[5];
  virtual  ~S2006C3(); // _ZN7S2006C3D1Ev
  virtual void  v38(); // _ZN7S2006C33v38Ev
  virtual void  v39(); // _ZN7S2006C33v39Ev
  virtual void  v40(); // _ZN7S2006C33v40Ev
  virtual void  v41(); // _ZN7S2006C33v41Ev
  virtual void  v42(); // _ZN7S2006C33v42Ev
  virtual void  v43(); // _ZN7S2006C33v43Ev
  S2006C3(); // tgen
};
//SIG(-1 S2006C3) C1{ BC2{ 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 Fi Fp FC3{ m Fp Fi[2] FC4{ m}} FC5{ vd v35 v36 v37 FC6{ m Fp Fi[2] FC7{ m}}} Fp[3] Fi[2]} vd v1 v2 v3 v4 v5 v6 Fi[5]}


 S2006C3 ::~S2006C3(){ note_dtor("S2006C3", this);}
void  S2006C3 ::v38(){vfunc_called(this, "_ZN7S2006C33v38Ev");}
void  S2006C3 ::v39(){vfunc_called(this, "_ZN7S2006C33v39Ev");}
void  S2006C3 ::v40(){vfunc_called(this, "_ZN7S2006C33v40Ev");}
void  S2006C3 ::v41(){vfunc_called(this, "_ZN7S2006C33v41Ev");}
void  S2006C3 ::v42(){vfunc_called(this, "_ZN7S2006C33v42Ev");}
void  S2006C3 ::v43(){vfunc_called(this, "_ZN7S2006C33v43Ev");}
S2006C3 ::S2006C3(){ note_ctor("S2006C3", this);} // tgen

static void Test_S2006C3()
{
  extern Class_Descriptor cd_S2006C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,23)];
    init_test(&cd_S2006C3, buf);
    S2006C3 *dp, &lv = *(dp=new (buf) S2006C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,88), "sizeof(S2006C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2006C3)");
    check_base_class_offset(lv, (S2006C4*), 0, "S2006C3");
    check_field_offset(lv, s2006c3f0, ABISELECT(112,68), "S2006C3.s2006c3f0");
    test_class_info(&lv, &cd_S2006C3);
    dp->~S2006C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2006C3(Test_S2006C3, "S2006C3", ABISELECT(136,88));

#else // __cplusplus

extern void _ZN7S2006C3C1Ev();
extern void _ZN7S2006C3D1Ev();
Name_Map name_map_S2006C3[] = {
  NSPAIR(_ZN7S2006C3C1Ev),
  NSPAIR(_ZN7S2006C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2006C4;
extern VTBL_ENTRY _ZTI7S2006C4[];
extern  VTBL_ENTRY _ZTV7S2006C4[];
static Base_Class bases_S2006C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2006C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S2006C3[];
extern void _ZN7S2006C3D1Ev();
extern void _ZN7S2006C3D0Ev();
extern void _ZN7S2006C43v10Ev();
extern void _ZN7S2006C43v11Ev();
extern void _ZN7S2006C43v12Ev();
extern void _ZN7S2006C43v13Ev();
extern void _ZN7S2006C43v14Ev();
extern void _ZN7S2006C43v15Ev();
extern void _ZN7S2006C43v16Ev();
extern void _ZN7S2006C43v17Ev();
extern void _ZN7S2006C43v18Ev();
extern void _ZN7S2006C43v19Ev();
extern void _ZN7S2006C43v20Ev();
extern void _ZN7S2006C43v21Ev();
extern void _ZN7S2006C43v22Ev();
extern void _ZN7S2006C43v23Ev();
extern void _ZN7S2006C43v24Ev();
extern void _ZN7S2006C43v25Ev();
extern void _ZN7S2006C43v26Ev();
extern void _ZN7S2006C43v27Ev();
extern void _ZN7S2006C43v28Ev();
extern void _ZN7S2006C43v29Ev();
extern void _ZN7S2006C43v30Ev();
extern void _ZN7S2006C43v31Ev();
extern void _ZN7S2006C43v32Ev();
extern void _ZN7S2006C43v33Ev();
extern void _ZN7S2006C43v34Ev();
extern void _ZN7S2006C43v35Ev();
extern void _ZN7S2006C43v36Ev();
extern void _ZN7S2006C43v37Ev();
extern void _ZN7S2006C33v38Ev();
extern void _ZN7S2006C33v39Ev();
extern void _ZN7S2006C33v40Ev();
extern void _ZN7S2006C33v41Ev();
extern void _ZN7S2006C33v42Ev();
extern void _ZN7S2006C33v43Ev();
static  VTBL_ENTRY vtc_S2006C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2006C3[0]),
  (VTBL_ENTRY)&_ZN7S2006C3D1Ev,
  (VTBL_ENTRY)&_ZN7S2006C3D0Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v19Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v20Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v21Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v22Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v23Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v24Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v25Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v26Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v27Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v28Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v29Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v30Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v31Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v32Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v33Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v34Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v35Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v36Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v37Ev,
  (VTBL_ENTRY)&_ZN7S2006C33v38Ev,
  (VTBL_ENTRY)&_ZN7S2006C33v39Ev,
  (VTBL_ENTRY)&_ZN7S2006C33v40Ev,
  (VTBL_ENTRY)&_ZN7S2006C33v41Ev,
  (VTBL_ENTRY)&_ZN7S2006C33v42Ev,
  (VTBL_ENTRY)&_ZN7S2006C33v43Ev,
};
extern VTBL_ENTRY _ZTI7S2006C3[];
extern  VTBL_ENTRY _ZTV7S2006C3[];
Class_Descriptor cd_S2006C3 = {  "S2006C3", // class name
  bases_S2006C3, 1,
  &(vtc_S2006C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI7S2006C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2006C3),38, //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  S2006C15  {
  long s2006c15f0;
  char s2006c15f1[4136];
};
//SIG(-1 S2006C15) C1{ Fl Fc[4136]}



static void Test_S2006C15()
{
  {
    init_simple_test("S2006C15");
    S2006C15 lv;
    check2(sizeof(lv), ABISELECT(4144,4140), "sizeof(S2006C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2006C15)");
    check_field_offset(lv, s2006c15f0, 0, "S2006C15.s2006c15f0");
    check_field_offset(lv, s2006c15f1, ABISELECT(8,4), "S2006C15.s2006c15f1");
  }
}
static Arrange_To_Call_Me vS2006C15(Test_S2006C15, "S2006C15", ABISELECT(4144,4140));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2006C2  : S2006C3 {
  int s2006c2f0;
  char s2006c2f1[138];
  long s2006c2f2;
  char s2006c2f3[512];
  int s2006c2f4[3];
  ::S2007C10 s2006c2f5;
  ::S2007C11 s2006c2f6;
  ::S2007C12 s2006c2f7;
  int s2006c2f8[4];
  ::S2264C29_nt s2006c2f9;
  int s2006c2f10;
  ::S2006C15 s2006c2f11;
  int s2006c2f12;
  virtual  ~S2006C2(); // _ZN7S2006C2D1Ev
  virtual void  v44(); // _ZN7S2006C23v44Ev
  virtual void  v45(); // _ZN7S2006C23v45Ev
  virtual void  v46(); // _ZN7S2006C23v46Ev
  virtual void  v47(); // _ZN7S2006C23v47Ev
  virtual void  v48(); // _ZN7S2006C23v48Ev
  virtual void  v49(); // _ZN7S2006C23v49Ev
  virtual void  v50(); // _ZN7S2006C23v50Ev
  virtual void  v51(); // _ZN7S2006C23v51Ev
  virtual void  v52(); // _ZN7S2006C23v52Ev
  virtual void  v53(); // _ZN7S2006C23v53Ev
  virtual void  v54(); // _ZN7S2006C23v54Ev
  virtual void  v55(); // _ZN7S2006C23v55Ev
  virtual void  v56(); // _ZN7S2006C23v56Ev
  virtual void  v57(); // _ZN7S2006C23v57Ev
  virtual void  v58(); // _ZN7S2006C23v58Ev
  virtual void  v59(); // _ZN7S2006C23v59Ev
  virtual void  v60(); // _ZN7S2006C23v60Ev
  virtual void  v61(); // _ZN7S2006C23v61Ev
  virtual void  v62(); // _ZN7S2006C23v62Ev
  virtual void  v63(); // _ZN7S2006C23v63Ev
  virtual void  v64(); // _ZN7S2006C23v64Ev
  virtual void  v65(); // _ZN7S2006C23v65Ev
  virtual void  v66(); // _ZN7S2006C23v66Ev
  virtual void  v67(); // _ZN7S2006C23v67Ev
  virtual void  v68(); // _ZN7S2006C23v68Ev
  virtual void  v69(); // _ZN7S2006C23v69Ev
  S2006C2(); // tgen
};
//SIG(-1 S2006C2) C1{ BC2{ BC3{ 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 Fi Fp FC4{ m Fp Fi[2] FC5{ m}} FC6{ vd v61 v62 v63 FC7{ m Fp Fi[2] FC8{ m}}} Fp[3] Fi[2]} vd v55 v56 v57 v58 v59 v60 Fi[5]} 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 Fi Fc[138] Fl Fc[512] Fi[3] FC9{ Fi Fc[320]} FC10{ Fc[256]} FC11{ Fc[205]} Fi[4] FC7 Fi FC12{ Fl Fc[4136]} Fi}


 S2006C2 ::~S2006C2(){ note_dtor("S2006C2", this);}
void  S2006C2 ::v44(){vfunc_called(this, "_ZN7S2006C23v44Ev");}
void  S2006C2 ::v45(){vfunc_called(this, "_ZN7S2006C23v45Ev");}
void  S2006C2 ::v46(){vfunc_called(this, "_ZN7S2006C23v46Ev");}
void  S2006C2 ::v47(){vfunc_called(this, "_ZN7S2006C23v47Ev");}
void  S2006C2 ::v48(){vfunc_called(this, "_ZN7S2006C23v48Ev");}
void  S2006C2 ::v49(){vfunc_called(this, "_ZN7S2006C23v49Ev");}
void  S2006C2 ::v50(){vfunc_called(this, "_ZN7S2006C23v50Ev");}
void  S2006C2 ::v51(){vfunc_called(this, "_ZN7S2006C23v51Ev");}
void  S2006C2 ::v52(){vfunc_called(this, "_ZN7S2006C23v52Ev");}
void  S2006C2 ::v53(){vfunc_called(this, "_ZN7S2006C23v53Ev");}
void  S2006C2 ::v54(){vfunc_called(this, "_ZN7S2006C23v54Ev");}
void  S2006C2 ::v55(){vfunc_called(this, "_ZN7S2006C23v55Ev");}
void  S2006C2 ::v56(){vfunc_called(this, "_ZN7S2006C23v56Ev");}
void  S2006C2 ::v57(){vfunc_called(this, "_ZN7S2006C23v57Ev");}
void  S2006C2 ::v58(){vfunc_called(this, "_ZN7S2006C23v58Ev");}
void  S2006C2 ::v59(){vfunc_called(this, "_ZN7S2006C23v59Ev");}
void  S2006C2 ::v60(){vfunc_called(this, "_ZN7S2006C23v60Ev");}
void  S2006C2 ::v61(){vfunc_called(this, "_ZN7S2006C23v61Ev");}
void  S2006C2 ::v62(){vfunc_called(this, "_ZN7S2006C23v62Ev");}
void  S2006C2 ::v63(){vfunc_called(this, "_ZN7S2006C23v63Ev");}
void  S2006C2 ::v64(){vfunc_called(this, "_ZN7S2006C23v64Ev");}
void  S2006C2 ::v65(){vfunc_called(this, "_ZN7S2006C23v65Ev");}
void  S2006C2 ::v66(){vfunc_called(this, "_ZN7S2006C23v66Ev");}
void  S2006C2 ::v67(){vfunc_called(this, "_ZN7S2006C23v67Ev");}
void  S2006C2 ::v68(){vfunc_called(this, "_ZN7S2006C23v68Ev");}
void  S2006C2 ::v69(){vfunc_called(this, "_ZN7S2006C23v69Ev");}
S2006C2 ::S2006C2(){ note_ctor("S2006C2", this);} // tgen

static void Test_S2006C2()
{
  extern Class_Descriptor cd_S2006C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(726,1433)];
    init_test(&cd_S2006C2, buf);
    S2006C2 *dp, &lv = *(dp=new (buf) S2006C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5800,5728), "sizeof(S2006C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2006C2)");
    check_base_class_offset(lv, (S2006C4*)(S2006C3*), 0, "S2006C2");
    check_base_class_offset(lv, (S2006C3*), 0, "S2006C2");
    check_field_offset(lv, s2006c2f0, ABISELECT(132,88), "S2006C2.s2006c2f0");
    check_field_offset(lv, s2006c2f1, ABISELECT(136,92), "S2006C2.s2006c2f1");
    check_field_offset(lv, s2006c2f2, ABISELECT(280,232), "S2006C2.s2006c2f2");
    check_field_offset(lv, s2006c2f3, ABISELECT(288,236), "S2006C2.s2006c2f3");
    check_field_offset(lv, s2006c2f4, ABISELECT(800,748), "S2006C2.s2006c2f4");
    check_field_offset(lv, s2006c2f5, ABISELECT(812,760), "S2006C2.s2006c2f5");
    check_field_offset(lv, s2006c2f6, ABISELECT(1136,1084), "S2006C2.s2006c2f6");
    check_field_offset(lv, s2006c2f7, ABISELECT(1392,1340), "S2006C2.s2006c2f7");
    check_field_offset(lv, s2006c2f8, ABISELECT(1600,1548), "S2006C2.s2006c2f8");
    check_field_offset(lv, s2006c2f9, ABISELECT(1616,1564), "S2006C2.s2006c2f9");
    check_field_offset(lv, s2006c2f10, ABISELECT(1640,1580), "S2006C2.s2006c2f10");
    check_field_offset(lv, s2006c2f11, ABISELECT(1648,1584), "S2006C2.s2006c2f11");
    check_field_offset(lv, s2006c2f12, ABISELECT(5792,5724), "S2006C2.s2006c2f12");
    test_class_info(&lv, &cd_S2006C2);
    dp->~S2006C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2006C2(Test_S2006C2, "S2006C2", ABISELECT(5800,5728));

#else // __cplusplus

extern void _ZN7S2006C2C1Ev();
extern void _ZN7S2006C2D1Ev();
Name_Map name_map_S2006C2[] = {
  NSPAIR(_ZN7S2006C2C1Ev),
  NSPAIR(_ZN7S2006C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2006C4;
extern VTBL_ENTRY _ZTI7S2006C4[];
extern  VTBL_ENTRY _ZTV7S2006C4[];
extern Class_Descriptor cd_S2006C3;
extern VTBL_ENTRY _ZTI7S2006C3[];
extern  VTBL_ENTRY _ZTV7S2006C3[];
static Base_Class bases_S2006C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2006C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2006C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2006C2[];
extern void _ZN7S2006C2D1Ev();
extern void _ZN7S2006C2D0Ev();
extern void _ZN7S2006C43v10Ev();
extern void _ZN7S2006C43v11Ev();
extern void _ZN7S2006C43v12Ev();
extern void _ZN7S2006C43v13Ev();
extern void _ZN7S2006C43v14Ev();
extern void _ZN7S2006C43v15Ev();
extern void _ZN7S2006C43v16Ev();
extern void _ZN7S2006C43v17Ev();
extern void _ZN7S2006C43v18Ev();
extern void _ZN7S2006C43v19Ev();
extern void _ZN7S2006C43v20Ev();
extern void _ZN7S2006C43v21Ev();
extern void _ZN7S2006C43v22Ev();
extern void _ZN7S2006C43v23Ev();
extern void _ZN7S2006C43v24Ev();
extern void _ZN7S2006C43v25Ev();
extern void _ZN7S2006C43v26Ev();
extern void _ZN7S2006C43v27Ev();
extern void _ZN7S2006C43v28Ev();
extern void _ZN7S2006C43v29Ev();
extern void _ZN7S2006C43v30Ev();
extern void _ZN7S2006C43v31Ev();
extern void _ZN7S2006C43v32Ev();
extern void _ZN7S2006C43v33Ev();
extern void _ZN7S2006C43v34Ev();
extern void _ZN7S2006C43v35Ev();
extern void _ZN7S2006C43v36Ev();
extern void _ZN7S2006C43v37Ev();
extern void _ZN7S2006C33v38Ev();
extern void _ZN7S2006C33v39Ev();
extern void _ZN7S2006C33v40Ev();
extern void _ZN7S2006C33v41Ev();
extern void _ZN7S2006C33v42Ev();
extern void _ZN7S2006C33v43Ev();
extern void _ZN7S2006C23v44Ev();
extern void _ZN7S2006C23v45Ev();
extern void _ZN7S2006C23v46Ev();
extern void _ZN7S2006C23v47Ev();
extern void _ZN7S2006C23v48Ev();
extern void _ZN7S2006C23v49Ev();
extern void _ZN7S2006C23v50Ev();
extern void _ZN7S2006C23v51Ev();
extern void _ZN7S2006C23v52Ev();
extern void _ZN7S2006C23v53Ev();
extern void _ZN7S2006C23v54Ev();
extern void _ZN7S2006C23v55Ev();
extern void _ZN7S2006C23v56Ev();
extern void _ZN7S2006C23v57Ev();
extern void _ZN7S2006C23v58Ev();
extern void _ZN7S2006C23v59Ev();
extern void _ZN7S2006C23v60Ev();
extern void _ZN7S2006C23v61Ev();
extern void _ZN7S2006C23v62Ev();
extern void _ZN7S2006C23v63Ev();
extern void _ZN7S2006C23v64Ev();
extern void _ZN7S2006C23v65Ev();
extern void _ZN7S2006C23v66Ev();
extern void _ZN7S2006C23v67Ev();
extern void _ZN7S2006C23v68Ev();
extern void _ZN7S2006C23v69Ev();
static  VTBL_ENTRY vtc_S2006C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2006C2[0]),
  (VTBL_ENTRY)&_ZN7S2006C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2006C2D0Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v19Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v20Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v21Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v22Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v23Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v24Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v25Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v26Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v27Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v28Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v29Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v30Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v31Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v32Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v33Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v34Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v35Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v36Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v37Ev,
  (VTBL_ENTRY)&_ZN7S2006C33v38Ev,
  (VTBL_ENTRY)&_ZN7S2006C33v39Ev,
  (VTBL_ENTRY)&_ZN7S2006C33v40Ev,
  (VTBL_ENTRY)&_ZN7S2006C33v41Ev,
  (VTBL_ENTRY)&_ZN7S2006C33v42Ev,
  (VTBL_ENTRY)&_ZN7S2006C33v43Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v44Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v45Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v46Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v47Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v48Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v49Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v50Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v51Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v52Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v53Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v54Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v55Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v56Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v57Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v58Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v59Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v60Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v61Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v62Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v63Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v64Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v65Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v66Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v67Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v68Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v69Ev,
};
extern VTBL_ENTRY _ZTI7S2006C2[];
extern  VTBL_ENTRY _ZTV7S2006C2[];
Class_Descriptor cd_S2006C2 = {  "S2006C2", // class name
  bases_S2006C2, 2,
  &(vtc_S2006C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(5800,5728), // object size
  NSPAIRA(_ZTI7S2006C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2006C2),64, //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  S2006C1  : S2006C2 {
  virtual  ~S2006C1(); // _ZN7S2006C1D1Ev
  virtual void  v1(); // _ZN7S2006C12v1Ev
  virtual void  v2(); // _ZN7S2006C12v2Ev
  virtual void  v3(); // _ZN7S2006C12v3Ev
  virtual void  v4(); // _ZN7S2006C12v4Ev
  virtual void  v5(); // _ZN7S2006C12v5Ev
  virtual void  v6(); // _ZN7S2006C12v6Ev
  virtual void  v7(); // _ZN7S2006C12v7Ev
  virtual void  v8(); // _ZN7S2006C12v8Ev
  virtual void  v9(); // _ZN7S2006C12v9Ev
  S2006C1(); // tgen
};
//SIG(1 S2006C1) 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 Fi Fp FC5{ m Fp Fi[2] FC6{ m}} FC7{ vd v70 v71 v72 FC8{ m Fp Fi[2] FC9{ m}}} Fp[3] Fi[2]} vd v38 v39 v40 v41 v42 v43 Fi[5]} vd 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 Fc[138] Fl Fc[512] Fi[3] FC10{ Fi Fc[320]} FC11{ Fc[256]} FC12{ Fc[205]} Fi[4] FC8 Fi FC13{ Fl Fc[4136]} Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 v9}


 S2006C1 ::~S2006C1(){ note_dtor("S2006C1", this);}
void  S2006C1 ::v1(){vfunc_called(this, "_ZN7S2006C12v1Ev");}
void  S2006C1 ::v2(){vfunc_called(this, "_ZN7S2006C12v2Ev");}
void  S2006C1 ::v3(){vfunc_called(this, "_ZN7S2006C12v3Ev");}
void  S2006C1 ::v4(){vfunc_called(this, "_ZN7S2006C12v4Ev");}
void  S2006C1 ::v5(){vfunc_called(this, "_ZN7S2006C12v5Ev");}
void  S2006C1 ::v6(){vfunc_called(this, "_ZN7S2006C12v6Ev");}
void  S2006C1 ::v7(){vfunc_called(this, "_ZN7S2006C12v7Ev");}
void  S2006C1 ::v8(){vfunc_called(this, "_ZN7S2006C12v8Ev");}
void  S2006C1 ::v9(){vfunc_called(this, "_ZN7S2006C12v9Ev");}
S2006C1 ::S2006C1(){ note_ctor("S2006C1", this);} // tgen

static void Test_S2006C1()
{
  extern Class_Descriptor cd_S2006C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(726,1433)];
    init_test(&cd_S2006C1, buf);
    S2006C1 *dp, &lv = *(dp=new (buf) S2006C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5800,5728), "sizeof(S2006C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2006C1)");
    check_base_class_offset(lv, (S2006C4*)(S2006C3*)(S2006C2*), 0, "S2006C1");
    check_base_class_offset(lv, (S2006C3*)(S2006C2*), 0, "S2006C1");
    check_base_class_offset(lv, (S2006C2*), 0, "S2006C1");
    test_class_info(&lv, &cd_S2006C1);
    dp->~S2006C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2006C1(Test_S2006C1, "S2006C1", ABISELECT(5800,5728));

#else // __cplusplus

extern void _ZN7S2006C1C1Ev();
extern void _ZN7S2006C1D1Ev();
Name_Map name_map_S2006C1[] = {
  NSPAIR(_ZN7S2006C1C1Ev),
  NSPAIR(_ZN7S2006C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2006C4;
extern VTBL_ENTRY _ZTI7S2006C4[];
extern  VTBL_ENTRY _ZTV7S2006C4[];
extern Class_Descriptor cd_S2006C3;
extern VTBL_ENTRY _ZTI7S2006C3[];
extern  VTBL_ENTRY _ZTV7S2006C3[];
extern Class_Descriptor cd_S2006C2;
extern VTBL_ENTRY _ZTI7S2006C2[];
extern  VTBL_ENTRY _ZTV7S2006C2[];
static Base_Class bases_S2006C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2006C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S2006C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2006C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2006C1[];
extern void _ZN7S2006C1D1Ev();
extern void _ZN7S2006C1D0Ev();
extern void _ZN7S2006C43v10Ev();
extern void _ZN7S2006C43v11Ev();
extern void _ZN7S2006C43v12Ev();
extern void _ZN7S2006C43v13Ev();
extern void _ZN7S2006C43v14Ev();
extern void _ZN7S2006C43v15Ev();
extern void _ZN7S2006C43v16Ev();
extern void _ZN7S2006C43v17Ev();
extern void _ZN7S2006C43v18Ev();
extern void _ZN7S2006C43v19Ev();
extern void _ZN7S2006C43v20Ev();
extern void _ZN7S2006C43v21Ev();
extern void _ZN7S2006C43v22Ev();
extern void _ZN7S2006C43v23Ev();
extern void _ZN7S2006C43v24Ev();
extern void _ZN7S2006C43v25Ev();
extern void _ZN7S2006C43v26Ev();
extern void _ZN7S2006C43v27Ev();
extern void _ZN7S2006C43v28Ev();
extern void _ZN7S2006C43v29Ev();
extern void _ZN7S2006C43v30Ev();
extern void _ZN7S2006C43v31Ev();
extern void _ZN7S2006C43v32Ev();
extern void _ZN7S2006C43v33Ev();
extern void _ZN7S2006C43v34Ev();
extern void _ZN7S2006C43v35Ev();
extern void _ZN7S2006C43v36Ev();
extern void _ZN7S2006C43v37Ev();
extern void _ZN7S2006C33v38Ev();
extern void _ZN7S2006C33v39Ev();
extern void _ZN7S2006C33v40Ev();
extern void _ZN7S2006C33v41Ev();
extern void _ZN7S2006C33v42Ev();
extern void _ZN7S2006C33v43Ev();
extern void _ZN7S2006C23v44Ev();
extern void _ZN7S2006C23v45Ev();
extern void _ZN7S2006C23v46Ev();
extern void _ZN7S2006C23v47Ev();
extern void _ZN7S2006C23v48Ev();
extern void _ZN7S2006C23v49Ev();
extern void _ZN7S2006C23v50Ev();
extern void _ZN7S2006C23v51Ev();
extern void _ZN7S2006C23v52Ev();
extern void _ZN7S2006C23v53Ev();
extern void _ZN7S2006C23v54Ev();
extern void _ZN7S2006C23v55Ev();
extern void _ZN7S2006C23v56Ev();
extern void _ZN7S2006C23v57Ev();
extern void _ZN7S2006C23v58Ev();
extern void _ZN7S2006C23v59Ev();
extern void _ZN7S2006C23v60Ev();
extern void _ZN7S2006C23v61Ev();
extern void _ZN7S2006C23v62Ev();
extern void _ZN7S2006C23v63Ev();
extern void _ZN7S2006C23v64Ev();
extern void _ZN7S2006C23v65Ev();
extern void _ZN7S2006C23v66Ev();
extern void _ZN7S2006C23v67Ev();
extern void _ZN7S2006C23v68Ev();
extern void _ZN7S2006C23v69Ev();
extern void _ZN7S2006C12v1Ev();
extern void _ZN7S2006C12v2Ev();
extern void _ZN7S2006C12v3Ev();
extern void _ZN7S2006C12v4Ev();
extern void _ZN7S2006C12v5Ev();
extern void _ZN7S2006C12v6Ev();
extern void _ZN7S2006C12v7Ev();
extern void _ZN7S2006C12v8Ev();
extern void _ZN7S2006C12v9Ev();
static  VTBL_ENTRY vtc_S2006C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2006C1[0]),
  (VTBL_ENTRY)&_ZN7S2006C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2006C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v10Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v11Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v12Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v13Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v14Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v15Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v16Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v17Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v18Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v19Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v20Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v21Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v22Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v23Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v24Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v25Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v26Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v27Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v28Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v29Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v30Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v31Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v32Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v33Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v34Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v35Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v36Ev,
  (VTBL_ENTRY)&_ZN7S2006C43v37Ev,
  (VTBL_ENTRY)&_ZN7S2006C33v38Ev,
  (VTBL_ENTRY)&_ZN7S2006C33v39Ev,
  (VTBL_ENTRY)&_ZN7S2006C33v40Ev,
  (VTBL_ENTRY)&_ZN7S2006C33v41Ev,
  (VTBL_ENTRY)&_ZN7S2006C33v42Ev,
  (VTBL_ENTRY)&_ZN7S2006C33v43Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v44Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v45Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v46Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v47Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v48Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v49Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v50Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v51Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v52Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v53Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v54Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v55Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v56Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v57Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v58Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v59Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v60Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v61Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v62Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v63Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v64Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v65Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v66Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v67Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v68Ev,
  (VTBL_ENTRY)&_ZN7S2006C23v69Ev,
  (VTBL_ENTRY)&_ZN7S2006C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2006C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2006C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2006C12v4Ev,
  (VTBL_ENTRY)&_ZN7S2006C12v5Ev,
  (VTBL_ENTRY)&_ZN7S2006C12v6Ev,
  (VTBL_ENTRY)&_ZN7S2006C12v7Ev,
  (VTBL_ENTRY)&_ZN7S2006C12v8Ev,
  (VTBL_ENTRY)&_ZN7S2006C12v9Ev,
};
extern VTBL_ENTRY _ZTI7S2006C1[];
extern  VTBL_ENTRY _ZTV7S2006C1[];
Class_Descriptor cd_S2006C1 = {  "S2006C1", // class name
  bases_S2006C1, 3,
  &(vtc_S2006C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(5800,5728), // object size
  NSPAIRA(_ZTI7S2006C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2006C1),73, //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  S1550C4  {
  int s1550c4f0;
  __tsi64 s1550c4f1;
  void *s1550c4f2[4];
  int s1550c4f3[2];
  void *s1550c4f4;
  ::S3351C4_nt s1550c4f5;
  void *s1550c4f6[2];
  virtual  ~S1550C4(); // _ZN7S1550C4D1Ev
  virtual void  v7(); // _ZN7S1550C42v7Ev
  virtual void  v8(); // _ZN7S1550C42v8Ev
  virtual void  v9(); // _ZN7S1550C42v9Ev
  virtual void  v10(); // _ZN7S1550C43v10Ev
  virtual void  v11(); // _ZN7S1550C43v11Ev
  virtual void  v12(); // _ZN7S1550C43v12Ev
  virtual void  v13(); // _ZN7S1550C43v13Ev
  virtual void  v14(); // _ZN7S1550C43v14Ev
  virtual void  v15(); // _ZN7S1550C43v15Ev
  virtual void  v16(); // _ZN7S1550C43v16Ev
  virtual void  v17(); // _ZN7S1550C43v17Ev
  virtual void  v18(); // _ZN7S1550C43v18Ev
  virtual void  v19(); // _ZN7S1550C43v19Ev
  virtual void  v20(); // _ZN7S1550C43v20Ev
  virtual void  v21(); // _ZN7S1550C43v21Ev
  virtual void  v22(); // _ZN7S1550C43v22Ev
  virtual void  v23(); // _ZN7S1550C43v23Ev
  virtual void  v24(); // _ZN7S1550C43v24Ev
  virtual void  v25(); // _ZN7S1550C43v25Ev
  virtual void  v26(); // _ZN7S1550C43v26Ev
  virtual void  v27(); // _ZN7S1550C43v27Ev
  virtual void  v28(); // _ZN7S1550C43v28Ev
  virtual void  v29(); // _ZN7S1550C43v29Ev
  virtual void  v30(); // _ZN7S1550C43v30Ev
  virtual void  v31(); // _ZN7S1550C43v31Ev
  virtual void  v32(); // _ZN7S1550C43v32Ev
  virtual void  v33(); // _ZN7S1550C43v33Ev
  virtual void  v34(); // _ZN7S1550C43v34Ev
  virtual void  v35(); // _ZN7S1550C43v35Ev
  virtual void  v36(); // _ZN7S1550C43v36Ev
  virtual void  v37(); // _ZN7S1550C43v37Ev
  virtual void  v38(); // _ZN7S1550C43v38Ev
  virtual void  v39(); // _ZN7S1550C43v39Ev
  virtual void  v40(); // _ZN7S1550C43v40Ev
  virtual void  v41(); // _ZN7S1550C43v41Ev
  virtual void  v42(); // _ZN7S1550C43v42Ev
  virtual void  v43(); // _ZN7S1550C43v43Ev
  virtual void  v44(); // _ZN7S1550C43v44Ev
  virtual void  v45(); // _ZN7S1550C43v45Ev
  virtual void  v46(); // _ZN7S1550C43v46Ev
  virtual void  v47(); // _ZN7S1550C43v47Ev
  virtual void  v48(); // _ZN7S1550C43v48Ev
  virtual void  v49(); // _ZN7S1550C43v49Ev
  virtual void  v50(); // _ZN7S1550C43v50Ev
  virtual void  v51(); // _ZN7S1550C43v51Ev
  virtual void  v52(); // _ZN7S1550C43v52Ev
  virtual void  v53(); // _ZN7S1550C43v53Ev
  virtual void  v54(); // _ZN7S1550C43v54Ev
  virtual void  v55(); // _ZN7S1550C43v55Ev
  virtual void  v56(); // _ZN7S1550C43v56Ev
  virtual void  v57(); // _ZN7S1550C43v57Ev
  virtual void  v58(); // _ZN7S1550C43v58Ev
  virtual void  v59(); // _ZN7S1550C43v59Ev
  virtual void  v60(); // _ZN7S1550C43v60Ev
  virtual void  v61(); // _ZN7S1550C43v61Ev
  virtual void  v62(); // _ZN7S1550C43v62Ev
  virtual void  v63(); // _ZN7S1550C43v63Ev
  virtual void  v64(); // _ZN7S1550C43v64Ev
  virtual void  v65(); // _ZN7S1550C43v65Ev
  virtual void  v66(); // _ZN7S1550C43v66Ev
  virtual void  v67(); // _ZN7S1550C43v67Ev
  virtual void  v68(); // _ZN7S1550C43v68Ev
  virtual void  v69(); // _ZN7S1550C43v69Ev
  virtual void  v70(); // _ZN7S1550C43v70Ev
  S1550C4(); // tgen
};
//SIG(-1 S1550C4) 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]}


 S1550C4 ::~S1550C4(){ note_dtor("S1550C4", this);}
void  S1550C4 ::v7(){vfunc_called(this, "_ZN7S1550C42v7Ev");}
void  S1550C4 ::v8(){vfunc_called(this, "_ZN7S1550C42v8Ev");}
void  S1550C4 ::v9(){vfunc_called(this, "_ZN7S1550C42v9Ev");}
void  S1550C4 ::v10(){vfunc_called(this, "_ZN7S1550C43v10Ev");}
void  S1550C4 ::v11(){vfunc_called(this, "_ZN7S1550C43v11Ev");}
void  S1550C4 ::v12(){vfunc_called(this, "_ZN7S1550C43v12Ev");}
void  S1550C4 ::v13(){vfunc_called(this, "_ZN7S1550C43v13Ev");}
void  S1550C4 ::v14(){vfunc_called(this, "_ZN7S1550C43v14Ev");}
void  S1550C4 ::v15(){vfunc_called(this, "_ZN7S1550C43v15Ev");}
void  S1550C4 ::v16(){vfunc_called(this, "_ZN7S1550C43v16Ev");}
void  S1550C4 ::v17(){vfunc_called(this, "_ZN7S1550C43v17Ev");}
void  S1550C4 ::v18(){vfunc_called(this, "_ZN7S1550C43v18Ev");}
void  S1550C4 ::v19(){vfunc_called(this, "_ZN7S1550C43v19Ev");}
void  S1550C4 ::v20(){vfunc_called(this, "_ZN7S1550C43v20Ev");}
void  S1550C4 ::v21(){vfunc_called(this, "_ZN7S1550C43v21Ev");}
void  S1550C4 ::v22(){vfunc_called(this, "_ZN7S1550C43v22Ev");}
void  S1550C4 ::v23(){vfunc_called(this, "_ZN7S1550C43v23Ev");}
void  S1550C4 ::v24(){vfunc_called(this, "_ZN7S1550C43v24Ev");}
void  S1550C4 ::v25(){vfunc_called(this, "_ZN7S1550C43v25Ev");}
void  S1550C4 ::v26(){vfunc_called(this, "_ZN7S1550C43v26Ev");}
void  S1550C4 ::v27(){vfunc_called(this, "_ZN7S1550C43v27Ev");}
void  S1550C4 ::v28(){vfunc_called(this, "_ZN7S1550C43v28Ev");}
void  S1550C4 ::v29(){vfunc_called(this, "_ZN7S1550C43v29Ev");}
void  S1550C4 ::v30(){vfunc_called(this, "_ZN7S1550C43v30Ev");}
void  S1550C4 ::v31(){vfunc_called(this, "_ZN7S1550C43v31Ev");}
void  S1550C4 ::v32(){vfunc_called(this, "_ZN7S1550C43v32Ev");}
void  S1550C4 ::v33(){vfunc_called(this, "_ZN7S1550C43v33Ev");}
void  S1550C4 ::v34(){vfunc_called(this, "_ZN7S1550C43v34Ev");}
void  S1550C4 ::v35(){vfunc_called(this, "_ZN7S1550C43v35Ev");}
void  S1550C4 ::v36(){vfunc_called(this, "_ZN7S1550C43v36Ev");}
void  S1550C4 ::v37(){vfunc_called(this, "_ZN7S1550C43v37Ev");}
void  S1550C4 ::v38(){vfunc_called(this, "_ZN7S1550C43v38Ev");}
void  S1550C4 ::v39(){vfunc_called(this, "_ZN7S1550C43v39Ev");}
void  S1550C4 ::v40(){vfunc_called(this, "_ZN7S1550C43v40Ev");}
void  S1550C4 ::v41(){vfunc_called(this, "_ZN7S1550C43v41Ev");}
void  S1550C4 ::v42(){vfunc_called(this, "_ZN7S1550C43v42Ev");}
void  S1550C4 ::v43(){vfunc_called(this, "_ZN7S1550C43v43Ev");}
void  S1550C4 ::v44(){vfunc_called(this, "_ZN7S1550C43v44Ev");}
void  S1550C4 ::v45(){vfunc_called(this, "_ZN7S1550C43v45Ev");}
void  S1550C4 ::v46(){vfunc_called(this, "_ZN7S1550C43v46Ev");}
void  S1550C4 ::v47(){vfunc_called(this, "_ZN7S1550C43v47Ev");}
void  S1550C4 ::v48(){vfunc_called(this, "_ZN7S1550C43v48Ev");}
void  S1550C4 ::v49(){vfunc_called(this, "_ZN7S1550C43v49Ev");}
void  S1550C4 ::v50(){vfunc_called(this, "_ZN7S1550C43v50Ev");}
void  S1550C4 ::v51(){vfunc_called(this, "_ZN7S1550C43v51Ev");}
void  S1550C4 ::v52(){vfunc_called(this, "_ZN7S1550C43v52Ev");}
void  S1550C4 ::v53(){vfunc_called(this, "_ZN7S1550C43v53Ev");}
void  S1550C4 ::v54(){vfunc_called(this, "_ZN7S1550C43v54Ev");}
void  S1550C4 ::v55(){vfunc_called(this, "_ZN7S1550C43v55Ev");}
void  S1550C4 ::v56(){vfunc_called(this, "_ZN7S1550C43v56Ev");}
void  S1550C4 ::v57(){vfunc_called(this, "_ZN7S1550C43v57Ev");}
void  S1550C4 ::v58(){vfunc_called(this, "_ZN7S1550C43v58Ev");}
void  S1550C4 ::v59(){vfunc_called(this, "_ZN7S1550C43v59Ev");}
void  S1550C4 ::v60(){vfunc_called(this, "_ZN7S1550C43v60Ev");}
void  S1550C4 ::v61(){vfunc_called(this, "_ZN7S1550C43v61Ev");}
void  S1550C4 ::v62(){vfunc_called(this, "_ZN7S1550C43v62Ev");}
void  S1550C4 ::v63(){vfunc_called(this, "_ZN7S1550C43v63Ev");}
void  S1550C4 ::v64(){vfunc_called(this, "_ZN7S1550C43v64Ev");}
void  S1550C4 ::v65(){vfunc_called(this, "_ZN7S1550C43v65Ev");}
void  S1550C4 ::v66(){vfunc_called(this, "_ZN7S1550C43v66Ev");}
void  S1550C4 ::v67(){vfunc_called(this, "_ZN7S1550C43v67Ev");}
void  S1550C4 ::v68(){vfunc_called(this, "_ZN7S1550C43v68Ev");}
void  S1550C4 ::v69(){vfunc_called(this, "_ZN7S1550C43v69Ev");}
void  S1550C4 ::v70(){vfunc_called(this, "_ZN7S1550C43v70Ev");}
S1550C4 ::S1550C4(){ note_ctor("S1550C4", this);} // tgen

static void Test_S1550C4()
{
  extern Class_Descriptor cd_S1550C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S1550C4, buf);
    S1550C4 *dp, &lv = *(dp=new (buf) S1550C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S1550C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1550C4)");
    check_field_offset(lv, s1550c4f0, ABISELECT(8,4), "S1550C4.s1550c4f0");
    check_field_offset(lv, s1550c4f1, ABISELECT(16,8), "S1550C4.s1550c4f1");
    check_field_offset(lv, s1550c4f2, ABISELECT(24,16), "S1550C4.s1550c4f2");
    check_field_offset(lv, s1550c4f3, ABISELECT(56,32), "S1550C4.s1550c4f3");
    check_field_offset(lv, s1550c4f4, ABISELECT(64,40), "S1550C4.s1550c4f4");
    check_field_offset(lv, s1550c4f5, ABISELECT(72,44), "S1550C4.s1550c4f5");
    check_field_offset(lv, s1550c4f6, ABISELECT(80,52), "S1550C4.s1550c4f6");
    test_class_info(&lv, &cd_S1550C4);
    dp->~S1550C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1550C4(Test_S1550C4, "S1550C4", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S1550C4C1Ev();
extern void _ZN7S1550C4D1Ev();
Name_Map name_map_S1550C4[] = {
  NSPAIR(_ZN7S1550C4C1Ev),
  NSPAIR(_ZN7S1550C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1550C4[];
extern void _ZN7S1550C4D1Ev();
extern void _ZN7S1550C4D0Ev();
extern void _ZN7S1550C42v7Ev();
extern void _ZN7S1550C42v8Ev();
extern void _ZN7S1550C42v9Ev();
extern void _ZN7S1550C43v10Ev();
extern void _ZN7S1550C43v11Ev();
extern void _ZN7S1550C43v12Ev();
extern void _ZN7S1550C43v13Ev();
extern void _ZN7S1550C43v14Ev();
extern void _ZN7S1550C43v15Ev();
extern void _ZN7S1550C43v16Ev();
extern void _ZN7S1550C43v17Ev();
extern void _ZN7S1550C43v18Ev();
extern void _ZN7S1550C43v19Ev();
extern void _ZN7S1550C43v20Ev();
extern void _ZN7S1550C43v21Ev();
extern void _ZN7S1550C43v22Ev();
extern void _ZN7S1550C43v23Ev();
extern void _ZN7S1550C43v24Ev();
extern void _ZN7S1550C43v25Ev();
extern void _ZN7S1550C43v26Ev();
extern void _ZN7S1550C43v27Ev();
extern void _ZN7S1550C43v28Ev();
extern void _ZN7S1550C43v29Ev();
extern void _ZN7S1550C43v30Ev();
extern void _ZN7S1550C43v31Ev();
extern void _ZN7S1550C43v32Ev();
extern void _ZN7S1550C43v33Ev();
extern void _ZN7S1550C43v34Ev();
extern void _ZN7S1550C43v35Ev();
extern void _ZN7S1550C43v36Ev();
extern void _ZN7S1550C43v37Ev();
extern void _ZN7S1550C43v38Ev();
extern void _ZN7S1550C43v39Ev();
extern void _ZN7S1550C43v40Ev();
extern void _ZN7S1550C43v41Ev();
extern void _ZN7S1550C43v42Ev();
extern void _ZN7S1550C43v43Ev();
extern void _ZN7S1550C43v44Ev();
extern void _ZN7S1550C43v45Ev();
extern void _ZN7S1550C43v46Ev();
extern void _ZN7S1550C43v47Ev();
extern void _ZN7S1550C43v48Ev();
extern void _ZN7S1550C43v49Ev();
extern void _ZN7S1550C43v50Ev();
extern void _ZN7S1550C43v51Ev();
extern void _ZN7S1550C43v52Ev();
extern void _ZN7S1550C43v53Ev();
extern void _ZN7S1550C43v54Ev();
extern void _ZN7S1550C43v55Ev();
extern void _ZN7S1550C43v56Ev();
extern void _ZN7S1550C43v57Ev();
extern void _ZN7S1550C43v58Ev();
extern void _ZN7S1550C43v59Ev();
extern void _ZN7S1550C43v60Ev();
extern void _ZN7S1550C43v61Ev();
extern void _ZN7S1550C43v62Ev();
extern void _ZN7S1550C43v63Ev();
extern void _ZN7S1550C43v64Ev();
extern void _ZN7S1550C43v65Ev();
extern void _ZN7S1550C43v66Ev();
extern void _ZN7S1550C43v67Ev();
extern void _ZN7S1550C43v68Ev();
extern void _ZN7S1550C43v69Ev();
extern void _ZN7S1550C43v70Ev();
static  VTBL_ENTRY vtc_S1550C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1550C4[0]),
  (VTBL_ENTRY)&_ZN7S1550C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1550C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1550C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1550C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1550C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v70Ev,
};
extern VTBL_ENTRY _ZTI7S1550C4[];
extern  VTBL_ENTRY _ZTV7S1550C4[];
Class_Descriptor cd_S1550C4 = {  "S1550C4", // class name
  0,0,//no base classes
  &(vtc_S1550C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S1550C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1550C4),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  S1550C3  : S1550C4 {
  unsigned int s1550c3f0:1;
  unsigned int s1550c3f1:1;
  unsigned int s1550c3f2:1;
  unsigned int s1550c3f3:1;
  unsigned int s1550c3f4:1;
  unsigned int s1550c3f5:1;
  unsigned int s1550c3f6:1;
  ::S2264C38 s1550c3f7;
  virtual  ~S1550C3(); // _ZN7S1550C3D1Ev
  virtual void  v71(); // _ZN7S1550C33v71Ev
  virtual void  v72(); // _ZN7S1550C33v72Ev
  virtual void  v73(); // _ZN7S1550C33v73Ev
  virtual void  v74(); // _ZN7S1550C33v74Ev
  virtual void  v75(); // _ZN7S1550C33v75Ev
  virtual void  v76(); // _ZN7S1550C33v76Ev
  virtual void  v77(); // _ZN7S1550C33v77Ev
  virtual void  v78(); // _ZN7S1550C33v78Ev
  virtual void  v79(); // _ZN7S1550C33v79Ev
  virtual void  v80(); // _ZN7S1550C33v80Ev
  virtual void  v81(); // _ZN7S1550C33v81Ev
  virtual void  v82(); // _ZN7S1550C33v82Ev
  virtual void  v83(); // _ZN7S1550C33v83Ev
  virtual void  v84(); // _ZN7S1550C33v84Ev
  virtual void  v85(); // _ZN7S1550C33v85Ev
  virtual void  v86(); // _ZN7S1550C33v86Ev
  virtual void  v87(); // _ZN7S1550C33v87Ev
  virtual void  v88(); // _ZN7S1550C33v88Ev
  virtual void  v89(); // _ZN7S1550C33v89Ev
  virtual void  v90(); // _ZN7S1550C33v90Ev
  S1550C3(); // tgen
};
//SIG(-1 S1550C3) C1{ BC2{ 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 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 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC4{ m}}


 S1550C3 ::~S1550C3(){ note_dtor("S1550C3", this);}
void  S1550C3 ::v71(){vfunc_called(this, "_ZN7S1550C33v71Ev");}
void  S1550C3 ::v72(){vfunc_called(this, "_ZN7S1550C33v72Ev");}
void  S1550C3 ::v73(){vfunc_called(this, "_ZN7S1550C33v73Ev");}
void  S1550C3 ::v74(){vfunc_called(this, "_ZN7S1550C33v74Ev");}
void  S1550C3 ::v75(){vfunc_called(this, "_ZN7S1550C33v75Ev");}
void  S1550C3 ::v76(){vfunc_called(this, "_ZN7S1550C33v76Ev");}
void  S1550C3 ::v77(){vfunc_called(this, "_ZN7S1550C33v77Ev");}
void  S1550C3 ::v78(){vfunc_called(this, "_ZN7S1550C33v78Ev");}
void  S1550C3 ::v79(){vfunc_called(this, "_ZN7S1550C33v79Ev");}
void  S1550C3 ::v80(){vfunc_called(this, "_ZN7S1550C33v80Ev");}
void  S1550C3 ::v81(){vfunc_called(this, "_ZN7S1550C33v81Ev");}
void  S1550C3 ::v82(){vfunc_called(this, "_ZN7S1550C33v82Ev");}
void  S1550C3 ::v83(){vfunc_called(this, "_ZN7S1550C33v83Ev");}
void  S1550C3 ::v84(){vfunc_called(this, "_ZN7S1550C33v84Ev");}
void  S1550C3 ::v85(){vfunc_called(this, "_ZN7S1550C33v85Ev");}
void  S1550C3 ::v86(){vfunc_called(this, "_ZN7S1550C33v86Ev");}
void  S1550C3 ::v87(){vfunc_called(this, "_ZN7S1550C33v87Ev");}
void  S1550C3 ::v88(){vfunc_called(this, "_ZN7S1550C33v88Ev");}
void  S1550C3 ::v89(){vfunc_called(this, "_ZN7S1550C33v89Ev");}
void  S1550C3 ::v90(){vfunc_called(this, "_ZN7S1550C33v90Ev");}
S1550C3 ::S1550C3(){ note_ctor("S1550C3", this);} // tgen

static void Test_S1550C3()
{
  extern Class_Descriptor cd_S1550C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1550C3, buf);
    S1550C3 *dp, &lv = *(dp=new (buf) S1550C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1550C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1550C3)");
    check_base_class_offset(lv, (S1550C4*), 0, "S1550C3");
    set_bf_and_test(lv, s1550c3f0, ABISELECT(96,60), 0, 1, 1, "S1550C3");
    set_bf_and_test(lv, s1550c3f1, ABISELECT(96,60), 1, 1, 1, "S1550C3");
    set_bf_and_test(lv, s1550c3f2, ABISELECT(96,60), 2, 1, 1, "S1550C3");
    set_bf_and_test(lv, s1550c3f3, ABISELECT(96,60), 3, 1, 1, "S1550C3");
    set_bf_and_test(lv, s1550c3f4, ABISELECT(96,60), 4, 1, 1, "S1550C3");
    set_bf_and_test(lv, s1550c3f5, ABISELECT(96,60), 5, 1, 1, "S1550C3");
    set_bf_and_test(lv, s1550c3f6, ABISELECT(96,60), 6, 1, 1, "S1550C3");
    check_field_offset(lv, s1550c3f7, ABISELECT(97,61), "S1550C3.s1550c3f7");
    test_class_info(&lv, &cd_S1550C3);
    dp->~S1550C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1550C3(Test_S1550C3, "S1550C3", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1550C3C1Ev();
extern void _ZN7S1550C3D1Ev();
Name_Map name_map_S1550C3[] = {
  NSPAIR(_ZN7S1550C3C1Ev),
  NSPAIR(_ZN7S1550C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1550C4;
extern VTBL_ENTRY _ZTI7S1550C4[];
extern  VTBL_ENTRY _ZTV7S1550C4[];
static Base_Class bases_S1550C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1550C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S1550C3[];
extern void _ZN7S1550C3D1Ev();
extern void _ZN7S1550C3D0Ev();
extern void _ZN7S1550C42v7Ev();
extern void _ZN7S1550C42v8Ev();
extern void _ZN7S1550C42v9Ev();
extern void _ZN7S1550C43v10Ev();
extern void _ZN7S1550C43v11Ev();
extern void _ZN7S1550C43v12Ev();
extern void _ZN7S1550C43v13Ev();
extern void _ZN7S1550C43v14Ev();
extern void _ZN7S1550C43v15Ev();
extern void _ZN7S1550C43v16Ev();
extern void _ZN7S1550C43v17Ev();
extern void _ZN7S1550C43v18Ev();
extern void _ZN7S1550C43v19Ev();
extern void _ZN7S1550C43v20Ev();
extern void _ZN7S1550C43v21Ev();
extern void _ZN7S1550C43v22Ev();
extern void _ZN7S1550C43v23Ev();
extern void _ZN7S1550C43v24Ev();
extern void _ZN7S1550C43v25Ev();
extern void _ZN7S1550C43v26Ev();
extern void _ZN7S1550C43v27Ev();
extern void _ZN7S1550C43v28Ev();
extern void _ZN7S1550C43v29Ev();
extern void _ZN7S1550C43v30Ev();
extern void _ZN7S1550C43v31Ev();
extern void _ZN7S1550C43v32Ev();
extern void _ZN7S1550C43v33Ev();
extern void _ZN7S1550C43v34Ev();
extern void _ZN7S1550C43v35Ev();
extern void _ZN7S1550C43v36Ev();
extern void _ZN7S1550C43v37Ev();
extern void _ZN7S1550C43v38Ev();
extern void _ZN7S1550C43v39Ev();
extern void _ZN7S1550C43v40Ev();
extern void _ZN7S1550C43v41Ev();
extern void _ZN7S1550C43v42Ev();
extern void _ZN7S1550C43v43Ev();
extern void _ZN7S1550C43v44Ev();
extern void _ZN7S1550C43v45Ev();
extern void _ZN7S1550C43v46Ev();
extern void _ZN7S1550C43v47Ev();
extern void _ZN7S1550C43v48Ev();
extern void _ZN7S1550C43v49Ev();
extern void _ZN7S1550C43v50Ev();
extern void _ZN7S1550C43v51Ev();
extern void _ZN7S1550C43v52Ev();
extern void _ZN7S1550C43v53Ev();
extern void _ZN7S1550C43v54Ev();
extern void _ZN7S1550C43v55Ev();
extern void _ZN7S1550C43v56Ev();
extern void _ZN7S1550C43v57Ev();
extern void _ZN7S1550C43v58Ev();
extern void _ZN7S1550C43v59Ev();
extern void _ZN7S1550C43v60Ev();
extern void _ZN7S1550C43v61Ev();
extern void _ZN7S1550C43v62Ev();
extern void _ZN7S1550C43v63Ev();
extern void _ZN7S1550C43v64Ev();
extern void _ZN7S1550C43v65Ev();
extern void _ZN7S1550C43v66Ev();
extern void _ZN7S1550C43v67Ev();
extern void _ZN7S1550C43v68Ev();
extern void _ZN7S1550C43v69Ev();
extern void _ZN7S1550C43v70Ev();
extern void _ZN7S1550C33v71Ev();
extern void _ZN7S1550C33v72Ev();
extern void _ZN7S1550C33v73Ev();
extern void _ZN7S1550C33v74Ev();
extern void _ZN7S1550C33v75Ev();
extern void _ZN7S1550C33v76Ev();
extern void _ZN7S1550C33v77Ev();
extern void _ZN7S1550C33v78Ev();
extern void _ZN7S1550C33v79Ev();
extern void _ZN7S1550C33v80Ev();
extern void _ZN7S1550C33v81Ev();
extern void _ZN7S1550C33v82Ev();
extern void _ZN7S1550C33v83Ev();
extern void _ZN7S1550C33v84Ev();
extern void _ZN7S1550C33v85Ev();
extern void _ZN7S1550C33v86Ev();
extern void _ZN7S1550C33v87Ev();
extern void _ZN7S1550C33v88Ev();
extern void _ZN7S1550C33v89Ev();
extern void _ZN7S1550C33v90Ev();
static  VTBL_ENTRY vtc_S1550C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1550C3[0]),
  (VTBL_ENTRY)&_ZN7S1550C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1550C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1550C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1550C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1550C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v90Ev,
};
extern VTBL_ENTRY _ZTI7S1550C3[];
extern  VTBL_ENTRY _ZTV7S1550C3[];
Class_Descriptor cd_S1550C3 = {  "S1550C3", // class name
  bases_S1550C3, 1,
  &(vtc_S1550C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1550C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1550C3),88, //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  S1550C2  : S1550C3 {
  virtual  ~S1550C2(); // _ZN7S1550C2D1Ev
  virtual void  v91(); // _ZN7S1550C23v91Ev
  virtual void  v92(); // _ZN7S1550C23v92Ev
  S1550C2(); // tgen
};
//SIG(-1 S1550C2) C1{ BC2{ BC3{ 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 FC4{ 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 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC5{ m}} vd v1 v2}


 S1550C2 ::~S1550C2(){ note_dtor("S1550C2", this);}
void  S1550C2 ::v91(){vfunc_called(this, "_ZN7S1550C23v91Ev");}
void  S1550C2 ::v92(){vfunc_called(this, "_ZN7S1550C23v92Ev");}
S1550C2 ::S1550C2(){ note_ctor("S1550C2", this);} // tgen

static void Test_S1550C2()
{
  extern Class_Descriptor cd_S1550C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,17)];
    init_test(&cd_S1550C2, buf);
    S1550C2 *dp, &lv = *(dp=new (buf) S1550C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,64), "sizeof(S1550C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1550C2)");
    check_base_class_offset(lv, (S1550C4*)(S1550C3*), 0, "S1550C2");
    check_base_class_offset(lv, (S1550C3*), 0, "S1550C2");
    test_class_info(&lv, &cd_S1550C2);
    dp->~S1550C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1550C2(Test_S1550C2, "S1550C2", ABISELECT(104,64));

#else // __cplusplus

extern void _ZN7S1550C2C1Ev();
extern void _ZN7S1550C2D1Ev();
Name_Map name_map_S1550C2[] = {
  NSPAIR(_ZN7S1550C2C1Ev),
  NSPAIR(_ZN7S1550C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1550C4;
extern VTBL_ENTRY _ZTI7S1550C4[];
extern  VTBL_ENTRY _ZTV7S1550C4[];
extern Class_Descriptor cd_S1550C3;
extern VTBL_ENTRY _ZTI7S1550C3[];
extern  VTBL_ENTRY _ZTV7S1550C3[];
static Base_Class bases_S1550C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1550C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1550C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1550C2[];
extern void _ZN7S1550C2D1Ev();
extern void _ZN7S1550C2D0Ev();
extern void _ZN7S1550C42v7Ev();
extern void _ZN7S1550C42v8Ev();
extern void _ZN7S1550C42v9Ev();
extern void _ZN7S1550C43v10Ev();
extern void _ZN7S1550C43v11Ev();
extern void _ZN7S1550C43v12Ev();
extern void _ZN7S1550C43v13Ev();
extern void _ZN7S1550C43v14Ev();
extern void _ZN7S1550C43v15Ev();
extern void _ZN7S1550C43v16Ev();
extern void _ZN7S1550C43v17Ev();
extern void _ZN7S1550C43v18Ev();
extern void _ZN7S1550C43v19Ev();
extern void _ZN7S1550C43v20Ev();
extern void _ZN7S1550C43v21Ev();
extern void _ZN7S1550C43v22Ev();
extern void _ZN7S1550C43v23Ev();
extern void _ZN7S1550C43v24Ev();
extern void _ZN7S1550C43v25Ev();
extern void _ZN7S1550C43v26Ev();
extern void _ZN7S1550C43v27Ev();
extern void _ZN7S1550C43v28Ev();
extern void _ZN7S1550C43v29Ev();
extern void _ZN7S1550C43v30Ev();
extern void _ZN7S1550C43v31Ev();
extern void _ZN7S1550C43v32Ev();
extern void _ZN7S1550C43v33Ev();
extern void _ZN7S1550C43v34Ev();
extern void _ZN7S1550C43v35Ev();
extern void _ZN7S1550C43v36Ev();
extern void _ZN7S1550C43v37Ev();
extern void _ZN7S1550C43v38Ev();
extern void _ZN7S1550C43v39Ev();
extern void _ZN7S1550C43v40Ev();
extern void _ZN7S1550C43v41Ev();
extern void _ZN7S1550C43v42Ev();
extern void _ZN7S1550C43v43Ev();
extern void _ZN7S1550C43v44Ev();
extern void _ZN7S1550C43v45Ev();
extern void _ZN7S1550C43v46Ev();
extern void _ZN7S1550C43v47Ev();
extern void _ZN7S1550C43v48Ev();
extern void _ZN7S1550C43v49Ev();
extern void _ZN7S1550C43v50Ev();
extern void _ZN7S1550C43v51Ev();
extern void _ZN7S1550C43v52Ev();
extern void _ZN7S1550C43v53Ev();
extern void _ZN7S1550C43v54Ev();
extern void _ZN7S1550C43v55Ev();
extern void _ZN7S1550C43v56Ev();
extern void _ZN7S1550C43v57Ev();
extern void _ZN7S1550C43v58Ev();
extern void _ZN7S1550C43v59Ev();
extern void _ZN7S1550C43v60Ev();
extern void _ZN7S1550C43v61Ev();
extern void _ZN7S1550C43v62Ev();
extern void _ZN7S1550C43v63Ev();
extern void _ZN7S1550C43v64Ev();
extern void _ZN7S1550C43v65Ev();
extern void _ZN7S1550C43v66Ev();
extern void _ZN7S1550C43v67Ev();
extern void _ZN7S1550C43v68Ev();
extern void _ZN7S1550C43v69Ev();
extern void _ZN7S1550C43v70Ev();
extern void _ZN7S1550C33v71Ev();
extern void _ZN7S1550C33v72Ev();
extern void _ZN7S1550C33v73Ev();
extern void _ZN7S1550C33v74Ev();
extern void _ZN7S1550C33v75Ev();
extern void _ZN7S1550C33v76Ev();
extern void _ZN7S1550C33v77Ev();
extern void _ZN7S1550C33v78Ev();
extern void _ZN7S1550C33v79Ev();
extern void _ZN7S1550C33v80Ev();
extern void _ZN7S1550C33v81Ev();
extern void _ZN7S1550C33v82Ev();
extern void _ZN7S1550C33v83Ev();
extern void _ZN7S1550C33v84Ev();
extern void _ZN7S1550C33v85Ev();
extern void _ZN7S1550C33v86Ev();
extern void _ZN7S1550C33v87Ev();
extern void _ZN7S1550C33v88Ev();
extern void _ZN7S1550C33v89Ev();
extern void _ZN7S1550C33v90Ev();
extern void _ZN7S1550C23v91Ev();
extern void _ZN7S1550C23v92Ev();
static  VTBL_ENTRY vtc_S1550C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1550C2[0]),
  (VTBL_ENTRY)&_ZN7S1550C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1550C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1550C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1550C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1550C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1550C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1550C23v92Ev,
};
extern VTBL_ENTRY _ZTI7S1550C2[];
extern  VTBL_ENTRY _ZTV7S1550C2[];
Class_Descriptor cd_S1550C2 = {  "S1550C2", // class name
  bases_S1550C2, 2,
  &(vtc_S1550C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,64), // object size
  NSPAIRA(_ZTI7S1550C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1550C2),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  S1550C1  : S1550C2 {
  ::S3351C4_nt s1550c1f0;
  virtual  ~S1550C1(); // _ZN7S1550C1D1Ev
  virtual void  v1(); // _ZN7S1550C12v1Ev
  virtual void  v2(); // _ZN7S1550C12v2Ev
  virtual void  v3(); // _ZN7S1550C12v3Ev
  virtual void  v4(); // _ZN7S1550C12v4Ev
  virtual void  v5(); // _ZN7S1550C12v5Ev
  virtual void  v6(); // _ZN7S1550C12v6Ev
  S1550C1(); // tgen
};
//SIG(1 S1550C1) C1{ BC2{ BC3{ BC4{ 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 FC5{ m Fi[2]} Fp[2]} vd v71 v72 v73 v74 v75 v76 v77 v78 v79 v80 v81 v82 v83 v84 v85 v86 v87 v88 v89 v90 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 Fi:1 FC6{ m}} vd v91 v92} vd v1 v2 v3 v4 v5 v6 FC5}


 S1550C1 ::~S1550C1(){ note_dtor("S1550C1", this);}
void  S1550C1 ::v1(){vfunc_called(this, "_ZN7S1550C12v1Ev");}
void  S1550C1 ::v2(){vfunc_called(this, "_ZN7S1550C12v2Ev");}
void  S1550C1 ::v3(){vfunc_called(this, "_ZN7S1550C12v3Ev");}
void  S1550C1 ::v4(){vfunc_called(this, "_ZN7S1550C12v4Ev");}
void  S1550C1 ::v5(){vfunc_called(this, "_ZN7S1550C12v5Ev");}
void  S1550C1 ::v6(){vfunc_called(this, "_ZN7S1550C12v6Ev");}
S1550C1 ::S1550C1(){ note_ctor("S1550C1", this);} // tgen

static void Test_S1550C1()
{
  extern Class_Descriptor cd_S1550C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,19)];
    init_test(&cd_S1550C1, buf);
    S1550C1 *dp, &lv = *(dp=new (buf) S1550C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,72), "sizeof(S1550C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1550C1)");
    check_base_class_offset(lv, (S1550C4*)(S1550C3*)(S1550C2*), 0, "S1550C1");
    check_base_class_offset(lv, (S1550C3*)(S1550C2*), 0, "S1550C1");
    check_base_class_offset(lv, (S1550C2*), 0, "S1550C1");
    check_field_offset(lv, s1550c1f0, ABISELECT(100,64), "S1550C1.s1550c1f0");
    test_class_info(&lv, &cd_S1550C1);
    dp->~S1550C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1550C1(Test_S1550C1, "S1550C1", ABISELECT(112,72));

#else // __cplusplus

extern void _ZN7S1550C1C1Ev();
extern void _ZN7S1550C1D1Ev();
Name_Map name_map_S1550C1[] = {
  NSPAIR(_ZN7S1550C1C1Ev),
  NSPAIR(_ZN7S1550C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1550C4;
extern VTBL_ENTRY _ZTI7S1550C4[];
extern  VTBL_ENTRY _ZTV7S1550C4[];
extern Class_Descriptor cd_S1550C3;
extern VTBL_ENTRY _ZTI7S1550C3[];
extern  VTBL_ENTRY _ZTV7S1550C3[];
extern Class_Descriptor cd_S1550C2;
extern VTBL_ENTRY _ZTI7S1550C2[];
extern  VTBL_ENTRY _ZTV7S1550C2[];
static Base_Class bases_S1550C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1550C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S1550C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S1550C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S1550C1[];
extern void _ZN7S1550C1D1Ev();
extern void _ZN7S1550C1D0Ev();
extern void _ZN7S1550C42v7Ev();
extern void _ZN7S1550C42v8Ev();
extern void _ZN7S1550C42v9Ev();
extern void _ZN7S1550C43v10Ev();
extern void _ZN7S1550C43v11Ev();
extern void _ZN7S1550C43v12Ev();
extern void _ZN7S1550C43v13Ev();
extern void _ZN7S1550C43v14Ev();
extern void _ZN7S1550C43v15Ev();
extern void _ZN7S1550C43v16Ev();
extern void _ZN7S1550C43v17Ev();
extern void _ZN7S1550C43v18Ev();
extern void _ZN7S1550C43v19Ev();
extern void _ZN7S1550C43v20Ev();
extern void _ZN7S1550C43v21Ev();
extern void _ZN7S1550C43v22Ev();
extern void _ZN7S1550C43v23Ev();
extern void _ZN7S1550C43v24Ev();
extern void _ZN7S1550C43v25Ev();
extern void _ZN7S1550C43v26Ev();
extern void _ZN7S1550C43v27Ev();
extern void _ZN7S1550C43v28Ev();
extern void _ZN7S1550C43v29Ev();
extern void _ZN7S1550C43v30Ev();
extern void _ZN7S1550C43v31Ev();
extern void _ZN7S1550C43v32Ev();
extern void _ZN7S1550C43v33Ev();
extern void _ZN7S1550C43v34Ev();
extern void _ZN7S1550C43v35Ev();
extern void _ZN7S1550C43v36Ev();
extern void _ZN7S1550C43v37Ev();
extern void _ZN7S1550C43v38Ev();
extern void _ZN7S1550C43v39Ev();
extern void _ZN7S1550C43v40Ev();
extern void _ZN7S1550C43v41Ev();
extern void _ZN7S1550C43v42Ev();
extern void _ZN7S1550C43v43Ev();
extern void _ZN7S1550C43v44Ev();
extern void _ZN7S1550C43v45Ev();
extern void _ZN7S1550C43v46Ev();
extern void _ZN7S1550C43v47Ev();
extern void _ZN7S1550C43v48Ev();
extern void _ZN7S1550C43v49Ev();
extern void _ZN7S1550C43v50Ev();
extern void _ZN7S1550C43v51Ev();
extern void _ZN7S1550C43v52Ev();
extern void _ZN7S1550C43v53Ev();
extern void _ZN7S1550C43v54Ev();
extern void _ZN7S1550C43v55Ev();
extern void _ZN7S1550C43v56Ev();
extern void _ZN7S1550C43v57Ev();
extern void _ZN7S1550C43v58Ev();
extern void _ZN7S1550C43v59Ev();
extern void _ZN7S1550C43v60Ev();
extern void _ZN7S1550C43v61Ev();
extern void _ZN7S1550C43v62Ev();
extern void _ZN7S1550C43v63Ev();
extern void _ZN7S1550C43v64Ev();
extern void _ZN7S1550C43v65Ev();
extern void _ZN7S1550C43v66Ev();
extern void _ZN7S1550C43v67Ev();
extern void _ZN7S1550C43v68Ev();
extern void _ZN7S1550C43v69Ev();
extern void _ZN7S1550C43v70Ev();
extern void _ZN7S1550C33v71Ev();
extern void _ZN7S1550C33v72Ev();
extern void _ZN7S1550C33v73Ev();
extern void _ZN7S1550C33v74Ev();
extern void _ZN7S1550C33v75Ev();
extern void _ZN7S1550C33v76Ev();
extern void _ZN7S1550C33v77Ev();
extern void _ZN7S1550C33v78Ev();
extern void _ZN7S1550C33v79Ev();
extern void _ZN7S1550C33v80Ev();
extern void _ZN7S1550C33v81Ev();
extern void _ZN7S1550C33v82Ev();
extern void _ZN7S1550C33v83Ev();
extern void _ZN7S1550C33v84Ev();
extern void _ZN7S1550C33v85Ev();
extern void _ZN7S1550C33v86Ev();
extern void _ZN7S1550C33v87Ev();
extern void _ZN7S1550C33v88Ev();
extern void _ZN7S1550C33v89Ev();
extern void _ZN7S1550C33v90Ev();
extern void _ZN7S1550C23v91Ev();
extern void _ZN7S1550C23v92Ev();
extern void _ZN7S1550C12v1Ev();
extern void _ZN7S1550C12v2Ev();
extern void _ZN7S1550C12v3Ev();
extern void _ZN7S1550C12v4Ev();
extern void _ZN7S1550C12v5Ev();
extern void _ZN7S1550C12v6Ev();
static  VTBL_ENTRY vtc_S1550C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1550C1[0]),
  (VTBL_ENTRY)&_ZN7S1550C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1550C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1550C42v7Ev,
  (VTBL_ENTRY)&_ZN7S1550C42v8Ev,
  (VTBL_ENTRY)&_ZN7S1550C42v9Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v18Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v19Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v20Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v21Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v22Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v23Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v24Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v25Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v26Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v27Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v28Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v29Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v30Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v31Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v32Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v33Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v34Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v35Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v36Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v37Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v38Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v39Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v40Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v41Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v42Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v43Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v44Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v45Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v46Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v47Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v48Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v49Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v50Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v51Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v52Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v53Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v54Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v55Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v56Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v57Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v58Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v59Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v60Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v61Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v62Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v63Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v64Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v65Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v66Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v67Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v68Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v69Ev,
  (VTBL_ENTRY)&_ZN7S1550C43v70Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v71Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v72Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v73Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v74Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v75Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v76Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v77Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v78Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v79Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v80Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v81Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v82Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v83Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v84Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v85Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v86Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v87Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v88Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v89Ev,
  (VTBL_ENTRY)&_ZN7S1550C33v90Ev,
  (VTBL_ENTRY)&_ZN7S1550C23v91Ev,
  (VTBL_ENTRY)&_ZN7S1550C23v92Ev,
  (VTBL_ENTRY)&_ZN7S1550C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1550C12v2Ev,
  (VTBL_ENTRY)&_ZN7S1550C12v3Ev,
  (VTBL_ENTRY)&_ZN7S1550C12v4Ev,
  (VTBL_ENTRY)&_ZN7S1550C12v5Ev,
  (VTBL_ENTRY)&_ZN7S1550C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S1550C1[];
extern  VTBL_ENTRY _ZTV7S1550C1[];
Class_Descriptor cd_S1550C1 = {  "S1550C1", // class name
  bases_S1550C1, 3,
  &(vtc_S1550C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,72), // object size
  NSPAIRA(_ZTI7S1550C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1550C1),96, //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  S20955C5  {
  __tsi64 s20955c5f0;
  char  :0;
  void  mf20955c5(); // _ZN8S20955C59mf20955c5Ev
};
//SIG(-1 S20955C5) C1{ m FL Fc:0}


void  S20955C5 ::mf20955c5(){}

static void Test_S20955C5()
{
  {
    init_simple_test("S20955C5");
    static S20955C5 lv;
    check2(sizeof(lv), 8, "sizeof(S20955C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20955C5)");
    check_field_offset(lv, s20955c5f0, 0, "S20955C5.s20955c5f0");
  }
}
static Arrange_To_Call_Me vS20955C5(Test_S20955C5, "S20955C5", 8);

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S20955C5[];
VTBL_ENTRY *P__ZTI8S20955C5 = _ZTI8S20955C5; 
Class_Descriptor cd_S20955C5 = {  "S20955C5", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  8, // object size
  NSPAIRA(_ZTI8S20955C5),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  S20955C4  : S20955C5 , S2264C38 {
};
//SIG(-1 S20955C4) C1{ BC2{ m FL Fc:0} BC3{ m}}



static void Test_S20955C4()
{
  extern Class_Descriptor cd_S20955C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2,3)];
    init_test(&cd_S20955C4, buf);
    S20955C4 &lv = *(new (buf) S20955C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S20955C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20955C4)");
    check_base_class_offset(lv, (S20955C5*), 0, "S20955C4");
    check_base_class_offset(lv, (S2264C38*), 0, "S20955C4");
    test_class_info(&lv, &cd_S20955C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20955C4(Test_S20955C4, "S20955C4", 8);

#else // __cplusplus

extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
static Base_Class bases_S20955C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S20955C4[];
Class_Descriptor cd_S20955C4 = {  "S20955C4", // class name
  bases_S20955C4, 2,
  0, // no vftv
  0, //no vtt
  8, // object size
  NSPAIRA(_ZTI8S20955C4),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  S20955C3  : virtual S20955C4 , virtual S20955C5 , S2264C38 {
  ~S20955C3(); // tgen
  S20955C3(); // tgen
};
//SIG(-1 S20955C3) C1{ VBC2{ BC3{ m FL Fc:0} BC4{ m}} VBC3 BC4}


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

static void Test_S20955C3()
{
  extern Class_Descriptor cd_S20955C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S20955C3, buf);
    S20955C3 *dp, &lv = *(dp=new (buf) S20955C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S20955C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20955C3)");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*), ABISELECT(8,4), "S20955C3");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*), ABISELECT(8,4), "S20955C3");
    check_base_class_offset(lv, (S20955C4*), ABISELECT(8,4), "S20955C3");
    /*is_ambiguous_... S20955C3::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*), ABISELECT(16,12), "S20955C3");
    /*is_ambiguous_... S20955C3::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), 0, "S20955C3");
    test_class_info(&lv, &cd_S20955C3);
    dp->~S20955C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20955C3(Test_S20955C3, "S20955C3", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN8S20955C3C1Ev();
extern void _ZN8S20955C3D1Ev();
Name_Map name_map_S20955C3[] = {
  NSPAIR(_ZN8S20955C3C1Ev),
  NSPAIR(_ZN8S20955C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
static Base_Class bases_S20955C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    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_S2264C38,    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_S20955C4,    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_S20955C5,    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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S20955C3[];
static  VTBL_ENTRY vtc_S20955C3[] = {
  ABISELECT(16,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C3[0]),
};
extern VTBL_ENTRY _ZTV8S20955C3[];
static  VTT_ENTRY vtt_S20955C3[] = {
  {&(_ZTV8S20955C3[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20955C3[];
extern  VTBL_ENTRY _ZTV8S20955C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C3[];
Class_Descriptor cd_S20955C3 = {  "S20955C3", // class name
  bases_S20955C3, 5,
  &(vtc_S20955C3[0]), // expected_vtbl_contents
  &(vtt_S20955C3[0]), // expected_vtt_contents
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI8S20955C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20955C3),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20955C3),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  S20955C7  : S2264C38 , S20955C4 {
  ::S3052C22_nt s20955c7f0;
  virtual  ~S20955C7(); // _ZN8S20955C7D1Ev
  S20955C7(); // tgen
};
//SIG(-1 S20955C7) C1{ BC2{ m} BC3{ BC4{ m FL Fc:0} BC2} vd FC5{}}


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

static void Test_S20955C7()
{
  extern Class_Descriptor cd_S20955C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20955C7, buf);
    S20955C7 *dp, &lv = *(dp=new (buf) S20955C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20955C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20955C7)");
    /*is_ambiguous_... S20955C7::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), 0, "S20955C7");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*), ABISELECT(8,4), "S20955C7");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*), ABISELECT(8,4), "S20955C7");
    check_base_class_offset(lv, (S20955C4*), ABISELECT(8,4), "S20955C7");
    check_field_offset(lv, s20955c7f0, ABISELECT(16,12), "S20955C7.s20955c7f0");
    test_class_info(&lv, &cd_S20955C7);
    dp->~S20955C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20955C7(Test_S20955C7, "S20955C7", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S20955C7C1Ev();
extern void _ZN8S20955C7D1Ev();
Name_Map name_map_S20955C7[] = {
  NSPAIR(_ZN8S20955C7C1Ev),
  NSPAIR(_ZN8S20955C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
static Base_Class bases_S20955C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20955C5,    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_S2264C38,    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_S20955C4,    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 _ZTI8S20955C7[];
extern void _ZN8S20955C7D1Ev();
extern void _ZN8S20955C7D0Ev();
static  VTBL_ENTRY vtc_S20955C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C7[0]),
  (VTBL_ENTRY)&_ZN8S20955C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20955C7D0Ev,
};
extern VTBL_ENTRY _ZTI8S20955C7[];
extern  VTBL_ENTRY _ZTV8S20955C7[];
Class_Descriptor cd_S20955C7 = {  "S20955C7", // class name
  bases_S20955C7, 4,
  &(vtc_S20955C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S20955C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20955C7),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  S20955C2  : virtual S20955C3 , S20955C7 {
  int s20955c2f0[8];
  ~S20955C2(); // tgen
  S20955C2(); // tgen
};
//SIG(-1 S20955C2) C1{ VBC2{ VBC3{ BC4{ m FL Fc:0} BC5{ m}} VBC4 BC5} BC6{ BC5 BC3 vd FC7{}} Fi[8]}


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

static void Test_S20955C2()
{
  extern Class_Descriptor cd_S20955C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,18)];
    init_test(&cd_S20955C2, buf);
    S20955C2 *dp, &lv = *(dp=new (buf) S20955C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,68), "sizeof(S20955C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20955C2)");
    /*is_ambiguous_... S20955C2::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*), ABISELECT(64,52), "S20955C2");
    /*is_ambiguous_... S20955C2::S20955C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*), ABISELECT(64,52), "S20955C2");
    check_base_class_offset(lv, (S20955C4*)(S20955C3*), ABISELECT(64,52), "S20955C2");
    /*is_ambiguous_... S20955C3::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C3*), ABISELECT(72,60), "S20955C2");
    /*is_ambiguous_... S20955C3::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C3*), ABISELECT(56,48), "S20955C2");
    check_base_class_offset(lv, (S20955C3*), ABISELECT(56,48), "S20955C2");
    /*is_ambiguous_... S20955C7::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C7*), 0, "S20955C2");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C7*), ABISELECT(8,4), "S20955C2");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C7*), ABISELECT(8,4), "S20955C2");
    check_base_class_offset(lv, (S20955C4*)(S20955C7*), ABISELECT(8,4), "S20955C2");
    check_base_class_offset(lv, (S20955C7*), 0, "S20955C2");
    check_field_offset(lv, s20955c2f0, ABISELECT(20,16), "S20955C2.s20955c2f0");
    test_class_info(&lv, &cd_S20955C2);
    dp->~S20955C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20955C2(Test_S20955C2, "S20955C2", ABISELECT(80,68));

#else // __cplusplus

extern void _ZN8S20955C2C1Ev();
extern void _ZN8S20955C2D1Ev();
Name_Map name_map_S20955C2[] = {
  NSPAIR(_ZN8S20955C2C1Ev),
  NSPAIR(_ZN8S20955C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C3;
extern VTBL_ENTRY _ZTI8S20955C3[];
extern  VTBL_ENTRY _ZTV8S20955C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C3[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C7;
extern VTBL_ENTRY _ZTI8S20955C7[];
extern  VTBL_ENTRY _ZTV8S20955C7[];
static Base_Class bases_S20955C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(64,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(64,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
    2, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(64,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
    5, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(72,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
    5, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(56,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
    5, //immediately_derived
  0, 0},
  {&cd_S20955C3,    ABISELECT(56,48), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    9, //immediately_derived
  0, 0},
  {&cd_S20955C4,    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
    10, //immediately_derived
  0, 0},
  {&cd_S20955C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20955C2[];
extern void _ZN8S20955C2D1Ev();
extern void _ZN8S20955C2D0Ev();
static  VTBL_ENTRY vtc_S20955C2[] = {
  ABISELECT(72,60),
  ABISELECT(64,52),
  ABISELECT(56,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C2[0]),
  (VTBL_ENTRY)&_ZN8S20955C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20955C2D0Ev,
  ABISELECT(16,12),
  ABISELECT(8,4),
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI8S20955C2[0]),
};
extern VTBL_ENTRY _ZTV8S20955C2[];
static  VTBL_ENTRY _tg__ZTV8S20955C3__8S20955C2[] = {
  ABISELECT(16,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C3[0]),
};
static  VTT_ENTRY vtt_S20955C2[] = {
  {&(_ZTV8S20955C2[5]),  5,11},
  {&(_ZTV8S20955C2[11]),  11,11},
  {&(_tg__ZTV8S20955C3__8S20955C2[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20955C2[];
extern  VTBL_ENTRY _ZTV8S20955C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C2[];
Class_Descriptor cd_S20955C2 = {  "S20955C2", // class name
  bases_S20955C2, 11,
  &(vtc_S20955C2[0]), // expected_vtbl_contents
  &(vtt_S20955C2[0]), // expected_vtt_contents
  ABISELECT(80,68), // object size
  NSPAIRA(_ZTI8S20955C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20955C2),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20955C2),3, //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  S20955C12  : virtual S2264C28 , S20955C4 , virtual S2264C38 {
  int s20955c12f0;
  ~S20955C12(); // tgen
  S20955C12(); // tgen
};
//SIG(-1 S20955C12) C1{ VBC2{ m} BC3{ BC4{ m FL Fc:0} BC5{ m}} VBC5 Fi}


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

static void Test_S20955C12()
{
  extern Class_Descriptor cd_S20955C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20955C12, buf);
    S20955C12 *dp, &lv = *(dp=new (buf) S20955C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20955C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20955C12)");
    check_base_class_offset(lv, (S2264C28*), 0, "S20955C12");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*), ABISELECT(8,4), "S20955C12");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*), ABISELECT(8,4), "S20955C12");
    check_base_class_offset(lv, (S20955C4*), ABISELECT(8,4), "S20955C12");
    /*is_ambiguous_... S20955C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), 0, "S20955C12");
    check_field_offset(lv, s20955c12f0, ABISELECT(16,12), "S20955C12.s20955c12f0");
    test_class_info(&lv, &cd_S20955C12);
    dp->~S20955C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20955C12(Test_S20955C12, "S20955C12", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN9S20955C12C1Ev();
extern void _ZN9S20955C12D1Ev();
Name_Map name_map_S20955C12[] = {
  NSPAIR(_ZN9S20955C12C1Ev),
  NSPAIR(_ZN9S20955C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
static Base_Class bases_S20955C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20955C5,    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_S2264C38,    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_S20955C4,    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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S20955C12[];
static  VTBL_ENTRY vtc_S20955C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C12[0]),
};
extern VTBL_ENTRY _ZTV9S20955C12[];
static  VTT_ENTRY vtt_S20955C12[] = {
  {&(_ZTV9S20955C12[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20955C12[];
extern  VTBL_ENTRY _ZTV9S20955C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C12[];
Class_Descriptor cd_S20955C12 = {  "S20955C12", // class name
  bases_S20955C12, 5,
  &(vtc_S20955C12[0]), // expected_vtbl_contents
  &(vtt_S20955C12[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI9S20955C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20955C12),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20955C12),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  S20955C11  : virtual S20955C12 , virtual S20955C2 {
  virtual  ~S20955C11(); // _ZN9S20955C11D2Ev
  S20955C11(); // tgen
};
//SIG(-1 S20955C11) C1{ VBC2{ VBC3{ m} BC4{ BC5{ m FL Fc:0} BC6{ m}} VBC6 Fi} VBC7{ VBC8{ VBC4 VBC5 BC6} BC9{ BC6 BC4 vd FC10{}} Fi[8]} vd}


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

static void Test_S20955C11()
{
  extern Class_Descriptor cd_S20955C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,23)];
    init_test(&cd_S20955C11, buf);
    S20955C11 *dp, &lv = *(dp=new (buf) S20955C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,88), "sizeof(S20955C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20955C11)");
    check_base_class_offset(lv, (S2264C28*)(S20955C12*), 0, "S20955C11");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C12*), ABISELECT(16,8), "S20955C11");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C12*), ABISELECT(16,8), "S20955C11");
    check_base_class_offset(lv, (S20955C4*)(S20955C12*), ABISELECT(16,8), "S20955C11");
    /*is_ambiguous_... S20955C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C12*), ABISELECT(28,20), "S20955C11");
    check_base_class_offset(lv, (S20955C12*), ABISELECT(8,4), "S20955C11");
    /*is_ambiguous_... S20955C11::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*), ABISELECT(88,72), "S20955C11");
    /*is_ambiguous_... S20955C11::S20955C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*), ABISELECT(88,72), "S20955C11");
    check_base_class_offset(lv, (S20955C4*)(S20955C3*), ABISELECT(88,72), "S20955C11");
    /*is_ambiguous_... S20955C3::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C3*), ABISELECT(96,80), "S20955C11");
    /*is_ambiguous_... S20955C3::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C3*), 0, "S20955C11");
    check_base_class_offset(lv, (S20955C3*)(S20955C2*), 0, "S20955C11");
    /*is_ambiguous_... S20955C7::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C7*)(S20955C2*), ABISELECT(32,24), "S20955C11");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(40,28), "S20955C11");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(40,28), "S20955C11");
    check_base_class_offset(lv, (S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(40,28), "S20955C11");
    check_base_class_offset(lv, (S20955C7*)(S20955C2*), ABISELECT(32,24), "S20955C11");
    check_base_class_offset(lv, (S20955C2*), ABISELECT(32,24), "S20955C11");
    test_class_info(&lv, &cd_S20955C11);
    dp->~S20955C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20955C11(Test_S20955C11, "S20955C11", ABISELECT(104,88));

#else // __cplusplus

extern void _ZN9S20955C11C1Ev();
extern void _ZN9S20955C11D2Ev();
Name_Map name_map_S20955C11[] = {
  NSPAIR(_ZN9S20955C11C1Ev),
  NSPAIR(_ZN9S20955C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C12;
extern VTBL_ENTRY _ZTI9S20955C12[];
extern  VTBL_ENTRY _ZTV9S20955C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C12[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C3;
extern VTBL_ENTRY _ZTI8S20955C3[];
extern  VTBL_ENTRY _ZTV8S20955C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C3[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C7;
extern VTBL_ENTRY _ZTI8S20955C7[];
extern  VTBL_ENTRY _ZTV8S20955C7[];
extern Class_Descriptor cd_S20955C2;
extern VTBL_ENTRY _ZTI8S20955C2[];
extern  VTBL_ENTRY _ZTV8S20955C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C2[];
static Base_Class bases_S20955C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    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_S2264C38,    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_S20955C4,    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_S2264C38,    ABISELECT(28,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, 1},
  {&cd_S20955C12,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20955C5,    ABISELECT(88,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
    8, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(88,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
    8, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(88,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
    11, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(96,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
    11, //immediately_derived
  0, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(32,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
    16, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(40,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
    15, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(40,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
    15, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(40,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
    16, //immediately_derived
  0, 0},
  {&cd_S20955C7,    ABISELECT(32,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
    3, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20955C2,    ABISELECT(32,24), //bcp->offset
    15, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20955C11[];
extern void _ZN9S20955C11D1Ev();
extern void _ZN9S20955C11D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S20955C11D1Ev,_ZTv0_n24_N9S20955C11D1Ev)();
extern void ABISELECT(_ZThn32_N9S20955C11D1Ev,_ZThn24_N9S20955C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20955C11D0Ev,_ZTv0_n24_N9S20955C11D0Ev)();
extern void ABISELECT(_ZThn32_N9S20955C11D0Ev,_ZThn24_N9S20955C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20955C11[] = {
  0,
  ABISELECT(32,24),
  ABISELECT(28,20),
  0,
  ABISELECT(8,4),
  ABISELECT(96,80),
  ABISELECT(88,72),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C11[0]),
  (VTBL_ENTRY)&_ZN9S20955C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C11D0Ev,
  ABISELECT(20,16),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20955C11[0]),
  ABISELECT(-32,-24),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI9S20955C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C11D1Ev,_ZTv0_n24_N9S20955C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C11D0Ev,_ZTv0_n24_N9S20955C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S20955C11[];
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C11[] = {
  ABISELECT(20,16),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C12[0]),
};
extern void _ZN8S20955C2D1Ev();
extern void _ZN8S20955C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C11[] = {
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C2[0]),
  (VTBL_ENTRY)&_ZN8S20955C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20955C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__8S20955C2__9S20955C11[] = {
  ABISELECT(96,80),
  ABISELECT(88,72),
  ABISELECT(32,24),
  (VTBL_ENTRY)&(_ZTI8S20955C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__9S20955C11[] = {
  ABISELECT(96,80),
  ABISELECT(88,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C3[0]),
};
static  VTT_ENTRY vtt_S20955C11[] = {
  {&(_ZTV9S20955C11[9]),  9,23},
  {&(_ZTV9S20955C11[15]),  15,23},
  {&(_ZTV9S20955C11[21]),  21,23},
  {&(_ZTV9S20955C11[9]),  9,23},
  {&(_tg__ZTV9S20955C12__9S20955C11[4]),  4,4},
  {&(_tg__ZTV8S20955C2__9S20955C11[5]),  5,7},
  {&(_tg__ZTV8S20955C3__8S20955C2__9S20955C11[4]),  4,4},
  {&(_tg__ZTV8S20955C3__9S20955C11[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20955C11[];
extern  VTBL_ENTRY _ZTV9S20955C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C11[];
static VTBL_ENTRY alt_thunk_names65[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C11D0Ev,_ZTv0_n24_N9S20955C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20955C11D0Ev,_ZThn24_N9S20955C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C11D1Ev,_ZTv0_n24_N9S20955C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20955C11D1Ev,_ZThn24_N9S20955C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20955C11 = {  "S20955C11", // class name
  bases_S20955C11, 18,
  &(vtc_S20955C11[0]), // expected_vtbl_contents
  &(vtt_S20955C11[0]), // expected_vtt_contents
  ABISELECT(104,88), // object size
  NSPAIRA(_ZTI9S20955C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20955C11),23, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20955C11),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names65,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20955C14  : virtual S20955C5 {
  ~S20955C14(); // tgen
  S20955C14(); // tgen
};
//SIG(-1 S20955C14) C1{ VBC2{ m FL Fc:0}}


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

static void Test_S20955C14()
{
  extern Class_Descriptor cd_S20955C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20955C14, buf);
    S20955C14 *dp, &lv = *(dp=new (buf) S20955C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20955C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20955C14)");
    check_base_class_offset(lv, (S20955C5*), ABISELECT(8,4), "S20955C14");
    test_class_info(&lv, &cd_S20955C14);
    dp->~S20955C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20955C14(Test_S20955C14, "S20955C14", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN9S20955C14C1Ev();
extern void _ZN9S20955C14D1Ev();
Name_Map name_map_S20955C14[] = {
  NSPAIR(_ZN9S20955C14C1Ev),
  NSPAIR(_ZN9S20955C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
static Base_Class bases_S20955C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    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},
  {0}};
extern VTBL_ENTRY _ZTI9S20955C14[];
static  VTBL_ENTRY vtc_S20955C14[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C14[0]),
};
extern VTBL_ENTRY _ZTV9S20955C14[];
static  VTT_ENTRY vtt_S20955C14[] = {
  {&(_ZTV9S20955C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20955C14[];
extern  VTBL_ENTRY _ZTV9S20955C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C14[];
Class_Descriptor cd_S20955C14 = {  "S20955C14", // class name
  bases_S20955C14, 1,
  &(vtc_S20955C14[0]), // expected_vtbl_contents
  &(vtt_S20955C14[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI9S20955C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20955C14),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20955C14),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  S20955C9  : S2398C25_nt , virtual S20955C11 , S20955C14 {
  virtual  ~S20955C9(); // _ZN8S20955C9D2Ev
  S20955C9(); // tgen
};
//SIG(-1 S20955C9) C1{ BC2{ m Fi Fc} VBC3{ VBC4{ VBC5{ m} BC6{ BC7{ m FL Fc:0} BC8{ m}} VBC8 Fi} VBC9{ VBC10{ VBC6 VBC7 BC8} BC11{ BC8 BC6 vd FC12{}} Fi[8]} vd} BC13{ VBC7} vd}


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

static void Test_S20955C9()
{
  extern Class_Descriptor cd_S20955C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,25)];
    init_test(&cd_S20955C9, buf);
    S20955C9 *dp, &lv = *(dp=new (buf) S20955C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,96), "sizeof(S20955C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20955C9)");
    check_base_class_offset(lv, (S2398C25_nt*), ABISELECT(8,4), "S20955C9");
    check_base_class_offset(lv, (S2264C28*)(S20955C12*), 0, "S20955C9");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C12*), ABISELECT(32,20), "S20955C9");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C12*), ABISELECT(32,20), "S20955C9");
    check_base_class_offset(lv, (S20955C4*)(S20955C12*), ABISELECT(32,20), "S20955C9");
    /*is_ambiguous_... S20955C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C12*), 0, "S20955C9");
    check_base_class_offset(lv, (S20955C12*)(S20955C11*), ABISELECT(24,16), "S20955C9");
    /*is_ambiguous_... S20955C9::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*), ABISELECT(104,80), "S20955C9");
    /*is_ambiguous_... S20955C9::S20955C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*), ABISELECT(104,80), "S20955C9");
    check_base_class_offset(lv, (S20955C4*)(S20955C3*), ABISELECT(104,80), "S20955C9");
    /*is_ambiguous_... S20955C3::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C3*), ABISELECT(112,88), "S20955C9");
    check_base_class_offset(lv, (S20955C5*)(S20955C14*), ABISELECT(112,88), "S20955C9");
    /*is_ambiguous_... S20955C3::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C3*), ABISELECT(16,12), "S20955C9");
    check_base_class_offset(lv, (S20955C3*)(S20955C2*), ABISELECT(16,12), "S20955C9");
    /*is_ambiguous_... S20955C7::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C7*)(S20955C2*), ABISELECT(48,32), "S20955C9");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(56,36), "S20955C9");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(56,36), "S20955C9");
    check_base_class_offset(lv, (S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(56,36), "S20955C9");
    check_base_class_offset(lv, (S20955C7*)(S20955C2*), ABISELECT(48,32), "S20955C9");
    check_base_class_offset(lv, (S20955C2*)(S20955C11*), ABISELECT(48,32), "S20955C9");
    check_base_class_offset(lv, (S20955C11*), ABISELECT(16,12), "S20955C9");
    check_base_class_offset(lv, (S20955C14*), 0, "S20955C9");
    test_class_info(&lv, &cd_S20955C9);
    dp->~S20955C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20955C9(Test_S20955C9, "S20955C9", ABISELECT(120,96));

#else // __cplusplus

extern void _ZN8S20955C9C1Ev();
extern void _ZN8S20955C9D2Ev();
Name_Map name_map_S20955C9[] = {
  NSPAIR(_ZN8S20955C9C1Ev),
  NSPAIR(_ZN8S20955C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C25_nt;
extern VTBL_ENTRY _ZTI11S2398C25_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C12;
extern VTBL_ENTRY _ZTI9S20955C12[];
extern  VTBL_ENTRY _ZTV9S20955C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C12[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C3;
extern VTBL_ENTRY _ZTI8S20955C3[];
extern  VTBL_ENTRY _ZTV8S20955C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C3[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C7;
extern VTBL_ENTRY _ZTI8S20955C7[];
extern  VTBL_ENTRY _ZTV8S20955C7[];
extern Class_Descriptor cd_S20955C2;
extern VTBL_ENTRY _ZTI8S20955C2[];
extern  VTBL_ENTRY _ZTV8S20955C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C2[];
extern Class_Descriptor cd_S20955C11;
extern VTBL_ENTRY _ZTI9S20955C11[];
extern  VTBL_ENTRY _ZTV9S20955C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C11[];
extern Class_Descriptor cd_S20955C14;
extern VTBL_ENTRY _ZTI9S20955C14[];
extern  VTBL_ENTRY _ZTV9S20955C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C14[];
static Base_Class bases_S20955C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C25_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},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20955C5,    ABISELECT(32,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, 0},
  {&cd_S2264C38,    ABISELECT(32,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, 0},
  {&cd_S20955C4,    ABISELECT(32,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
    6, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20955C12,    ABISELECT(24,16), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(104,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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(104,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
    9, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(104,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
    12, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(112,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
    12, //immediately_derived
  0, 1},
  {&cd_S2264C38,    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
    12, //immediately_derived
  0, 0},
  {&cd_S20955C3,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(48,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
    17, //immediately_derived
  0, 0},
  {&cd_S20955C5,    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
    16, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    16, //immediately_derived
  0, 0},
  {&cd_S20955C4,    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
    17, //immediately_derived
  0, 0},
  {&cd_S20955C7,    ABISELECT(48,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
    3, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S20955C2,    ABISELECT(48,32), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S20955C11,    ABISELECT(16,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20955C14,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S20955C9[];
extern void _ZN8S20955C9D1Ev();
extern void _ZN8S20955C9D0Ev();
extern void ABISELECT(_ZTv0_n80_N8S20955C9D1Ev,_ZTv0_n40_N8S20955C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S20955C9D1Ev,_ZThn12_N8S20955C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20955C9D0Ev,_ZTv0_n40_N8S20955C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S20955C9D0Ev,_ZThn12_N8S20955C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20955C9D1Ev,_ZTv0_n24_N8S20955C9D1Ev)();
extern void ABISELECT(_ZThn48_N8S20955C9D1Ev,_ZThn32_N8S20955C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20955C9D0Ev,_ZTv0_n24_N8S20955C9D0Ev)();
extern void ABISELECT(_ZThn48_N8S20955C9D0Ev,_ZThn32_N8S20955C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20955C9[] = {
  ABISELECT(104,80),
  ABISELECT(16,12),
  ABISELECT(48,32),
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(16,12),
  ABISELECT(112,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C9[0]),
  (VTBL_ENTRY)&_ZN8S20955C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20955C9D0Ev,
  ABISELECT(-16,-12),
  0,
  ABISELECT(32,20),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(8,4),
  ABISELECT(96,76),
  ABISELECT(88,68),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20955C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20955C9D1Ev,_ZTv0_n40_N8S20955C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20955C9D0Ev,_ZTv0_n40_N8S20955C9D0Ev),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20955C9[0]),
  ABISELECT(-48,-32),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-32,-20),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20955C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20955C9D1Ev,_ZTv0_n24_N8S20955C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20955C9D0Ev,_ZTv0_n24_N8S20955C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S20955C9[];
static  VTBL_ENTRY _tg__ZTV9S20955C14__8S20955C9[] = {
  ABISELECT(112,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C14[0]),
};
extern void _ZN9S20955C11D1Ev();
extern void _ZN9S20955C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20955C11__8S20955C9[] = {
  0,
  ABISELECT(32,20),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(8,4),
  ABISELECT(96,76),
  ABISELECT(88,68),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C11[0]),
  (VTBL_ENTRY)&_ZN9S20955C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C11__8S20955C9[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20955C11[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20955C11D1Ev,_ZTv0_n24_N9S20955C11D1Ev)();
extern void ABISELECT(_ZThn32_N9S20955C11D1Ev,_ZThn20_N9S20955C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20955C11D0Ev,_ZTv0_n24_N9S20955C11D0Ev)();
extern void ABISELECT(_ZThn32_N9S20955C11D0Ev,_ZThn20_N9S20955C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C11__8S20955C9[] = {
  ABISELECT(-32,-20),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI9S20955C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C11D1Ev,_ZTv0_n24_N9S20955C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C11D0Ev,_ZTv0_n24_N9S20955C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__8S20955C9[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C12[0]),
};
extern void _ZN8S20955C2D1Ev();
extern void _ZN8S20955C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20955C2__8S20955C9[] = {
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-32,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C2[0]),
  (VTBL_ENTRY)&_ZN8S20955C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20955C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__8S20955C2__8S20955C9[] = {
  ABISELECT(96,76),
  ABISELECT(88,68),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI8S20955C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__8S20955C9[] = {
  ABISELECT(96,76),
  ABISELECT(88,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C3[0]),
};
static  VTT_ENTRY vtt_S20955C9[] = {
  {&(_ZTV8S20955C9[10]),  10,36},
  {&(_tg__ZTV9S20955C14__8S20955C9[3]),  3,3},
  {&(_ZTV8S20955C9[22]),  22,36},
  {&(_ZTV8S20955C9[28]),  28,36},
  {&(_ZTV8S20955C9[34]),  34,36},
  {&(_ZTV8S20955C9[22]),  22,36},
  {&(_tg__ZTV9S20955C11__8S20955C9[9]),  9,11},
  {&(_tg__ZTV9S20955C12__9S20955C11__8S20955C9[4]),  4,4},
  {&(_tg__ZTV8S20955C2__9S20955C11__8S20955C9[6]),  6,8},
  {&(_tg__ZTV9S20955C11__8S20955C9[9]),  9,11},
  {&(_tg__ZTV9S20955C12__8S20955C9[4]),  4,4},
  {&(_tg__ZTV8S20955C2__8S20955C9[5]),  5,7},
  {&(_tg__ZTV8S20955C3__8S20955C2__8S20955C9[4]),  4,4},
  {&(_tg__ZTV8S20955C3__8S20955C9[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20955C9[];
extern  VTBL_ENTRY _ZTV8S20955C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C9[];
static VTBL_ENTRY alt_thunk_names66[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C11D0Ev,_ZTv0_n24_N9S20955C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20955C11D0Ev,_ZThn20_N9S20955C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C11D1Ev,_ZTv0_n24_N9S20955C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20955C11D1Ev,_ZThn20_N9S20955C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20955C9D0Ev,_ZTv0_n24_N8S20955C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20955C9D0Ev,_ZThn32_N8S20955C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20955C9D1Ev,_ZTv0_n24_N8S20955C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20955C9D1Ev,_ZThn32_N8S20955C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20955C9D0Ev,_ZTv0_n40_N8S20955C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20955C9D0Ev,_ZThn12_N8S20955C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20955C9D1Ev,_ZTv0_n40_N8S20955C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20955C9D1Ev,_ZThn12_N8S20955C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20955C9 = {  "S20955C9", // class name
  bases_S20955C9, 21,
  &(vtc_S20955C9[0]), // expected_vtbl_contents
  &(vtt_S20955C9[0]), // expected_vtt_contents
  ABISELECT(120,96), // object size
  NSPAIRA(_ZTI8S20955C9),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20955C9),36, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20955C9),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names66,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20955C16  : virtual S20955C14 {
  unsigned int s20955c16f0:1;
  ~S20955C16(); // tgen
  S20955C16(); // tgen
};
//SIG(-1 S20955C16) C1{ VBC2{ VBC3{ m FL Fc:0}} Fi:1}


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

static void Test_S20955C16()
{
  extern Class_Descriptor cd_S20955C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20955C16, buf);
    S20955C16 *dp, &lv = *(dp=new (buf) S20955C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20955C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20955C16)");
    check_base_class_offset(lv, (S20955C5*)(S20955C14*), ABISELECT(16,8), "S20955C16");
    check_base_class_offset(lv, (S20955C14*), 0, "S20955C16");
    set_bf_and_test(lv, s20955c16f0, ABISELECT(8,4), 0, 1, 1, "S20955C16");
    test_class_info(&lv, &cd_S20955C16);
    dp->~S20955C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20955C16(Test_S20955C16, "S20955C16", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN9S20955C16C1Ev();
extern void _ZN9S20955C16D1Ev();
Name_Map name_map_S20955C16[] = {
  NSPAIR(_ZN9S20955C16C1Ev),
  NSPAIR(_ZN9S20955C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20955C14;
extern VTBL_ENTRY _ZTI9S20955C14[];
extern  VTBL_ENTRY _ZTV9S20955C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C14[];
static Base_Class bases_S20955C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    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_S20955C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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 _ZTI9S20955C16[];
static  VTBL_ENTRY vtc_S20955C16[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C16[0]),
};
extern VTBL_ENTRY _ZTV9S20955C16[];
static  VTBL_ENTRY _tg__ZTV9S20955C14__9S20955C16[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C14[0]),
};
static  VTT_ENTRY vtt_S20955C16[] = {
  {&(_ZTV9S20955C16[4]),  4,4},
  {&(_ZTV9S20955C16[4]),  4,4},
  {&(_tg__ZTV9S20955C14__9S20955C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20955C16[];
extern  VTBL_ENTRY _ZTV9S20955C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C16[];
Class_Descriptor cd_S20955C16 = {  "S20955C16", // class name
  bases_S20955C16, 2,
  &(vtc_S20955C16[0]), // expected_vtbl_contents
  &(vtt_S20955C16[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI9S20955C16),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20955C16),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20955C16),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  S20955C19  : virtual S20955C2 {
  virtual  ~S20955C19(); // _ZN9S20955C19D2Ev
  S20955C19(); // tgen
};
//SIG(-1 S20955C19) C1{ VBC2{ VBC3{ VBC4{ BC5{ m FL Fc:0} BC6{ m}} VBC5 BC6} BC7{ BC6 BC4 vd FC8{}} Fi[8]} vd}


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

static void Test_S20955C19()
{
  extern Class_Descriptor cd_S20955C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,18)];
    init_test(&cd_S20955C19, buf);
    S20955C19 *dp, &lv = *(dp=new (buf) S20955C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,68), "sizeof(S20955C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20955C19)");
    /*is_ambiguous_... S20955C19::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*), ABISELECT(64,52), "S20955C19");
    /*is_ambiguous_... S20955C19::S20955C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*), ABISELECT(64,52), "S20955C19");
    check_base_class_offset(lv, (S20955C4*)(S20955C3*), ABISELECT(64,52), "S20955C19");
    /*is_ambiguous_... S20955C3::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C3*), ABISELECT(72,60), "S20955C19");
    /*is_ambiguous_... S20955C3::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C3*), 0, "S20955C19");
    check_base_class_offset(lv, (S20955C3*)(S20955C2*), 0, "S20955C19");
    /*is_ambiguous_... S20955C7::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C7*)(S20955C2*), ABISELECT(8,4), "S20955C19");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(16,8), "S20955C19");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(16,8), "S20955C19");
    check_base_class_offset(lv, (S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(16,8), "S20955C19");
    check_base_class_offset(lv, (S20955C7*)(S20955C2*), ABISELECT(8,4), "S20955C19");
    check_base_class_offset(lv, (S20955C2*), ABISELECT(8,4), "S20955C19");
    test_class_info(&lv, &cd_S20955C19);
    dp->~S20955C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20955C19(Test_S20955C19, "S20955C19", ABISELECT(80,68));

#else // __cplusplus

extern void _ZN9S20955C19C1Ev();
extern void _ZN9S20955C19D2Ev();
Name_Map name_map_S20955C19[] = {
  NSPAIR(_ZN9S20955C19C1Ev),
  NSPAIR(_ZN9S20955C19D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C3;
extern VTBL_ENTRY _ZTI8S20955C3[];
extern  VTBL_ENTRY _ZTV8S20955C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C3[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C7;
extern VTBL_ENTRY _ZTI8S20955C7[];
extern  VTBL_ENTRY _ZTV8S20955C7[];
extern Class_Descriptor cd_S20955C2;
extern VTBL_ENTRY _ZTI8S20955C2[];
extern  VTBL_ENTRY _ZTV8S20955C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C2[];
static Base_Class bases_S20955C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(64,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(64,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
    2, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(64,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
    5, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(72,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
    5, //immediately_derived
  0, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    11, //immediately_derived
  0, 1},
  {&cd_S2264C38,    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
    10, //immediately_derived
  0, 0},
  {&cd_S20955C5,    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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    9, //immediately_derived
  0, 0},
  {&cd_S20955C4,    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
    10, //immediately_derived
  0, 0},
  {&cd_S20955C7,    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
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20955C2,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //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},
  {0}};
extern VTBL_ENTRY _ZTI9S20955C19[];
extern void _ZN9S20955C19D1Ev();
extern void _ZN9S20955C19D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S20955C19D1Ev,_ZTv0_n24_N9S20955C19D1Ev)();
extern void ABISELECT(_ZThn8_N9S20955C19D1Ev,_ZThn4_N9S20955C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20955C19D0Ev,_ZTv0_n24_N9S20955C19D0Ev)();
extern void ABISELECT(_ZThn8_N9S20955C19D0Ev,_ZThn4_N9S20955C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20955C19[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(72,60),
  ABISELECT(64,52),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C19[0]),
  (VTBL_ENTRY)&_ZN9S20955C19D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C19D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20955C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C19D1Ev,_ZTv0_n24_N9S20955C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C19D0Ev,_ZTv0_n24_N9S20955C19D0Ev),
};
extern VTBL_ENTRY _ZTV9S20955C19[];
extern void _ZN8S20955C2D1Ev();
extern void _ZN8S20955C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C19[] = {
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C2[0]),
  (VTBL_ENTRY)&_ZN8S20955C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20955C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__8S20955C2__9S20955C19[] = {
  ABISELECT(72,60),
  ABISELECT(64,52),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20955C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__9S20955C19[] = {
  ABISELECT(72,60),
  ABISELECT(64,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C3[0]),
};
static  VTT_ENTRY vtt_S20955C19[] = {
  {&(_ZTV9S20955C19[6]),  6,16},
  {&(_ZTV9S20955C19[14]),  14,16},
  {&(_ZTV9S20955C19[6]),  6,16},
  {&(_tg__ZTV8S20955C2__9S20955C19[5]),  5,7},
  {&(_tg__ZTV8S20955C3__8S20955C2__9S20955C19[4]),  4,4},
  {&(_tg__ZTV8S20955C3__9S20955C19[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20955C19[];
extern  VTBL_ENTRY _ZTV9S20955C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C19[];
static VTBL_ENTRY alt_thunk_names67[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C19D0Ev,_ZTv0_n24_N9S20955C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20955C19D0Ev,_ZThn4_N9S20955C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C19D1Ev,_ZTv0_n24_N9S20955C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20955C19D1Ev,_ZThn4_N9S20955C19D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20955C19 = {  "S20955C19", // class name
  bases_S20955C19, 12,
  &(vtc_S20955C19[0]), // expected_vtbl_contents
  &(vtt_S20955C19[0]), // expected_vtt_contents
  ABISELECT(80,68), // object size
  NSPAIRA(_ZTI9S20955C19),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20955C19),16, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20955C19),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names67,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20955C18  : virtual S20955C4 , S20955C19 {
  ::S20955C2 s20955c18f0[2];
  virtual  ~S20955C18(); // _ZN9S20955C18D2Ev
  S20955C18(); // tgen
};
//SIG(-1 S20955C18) C1{ VBC2{ BC3{ m FL Fc:0} BC4{ m}} BC5{ VBC6{ VBC7{ VBC2 VBC3 BC4} BC8{ BC4 BC2 vd FC9{}} Fi[8]} vd} vd FC6[2]}


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

static void Test_S20955C18()
{
  extern Class_Descriptor cd_S20955C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,52)];
    init_test(&cd_S20955C18, buf);
    S20955C18 *dp, &lv = *(dp=new (buf) S20955C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,204), "sizeof(S20955C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20955C18)");
    /*is_ambiguous_... S20955C18::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*), ABISELECT(168,140), "S20955C18");
    /*is_ambiguous_... S20955C18::S20955C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*), ABISELECT(168,140), "S20955C18");
    /*is_ambiguous_... S20955C18::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C4*), ABISELECT(168,140), "S20955C18");
    check_base_class_offset(lv, (S20955C4*)(S20955C3*), ABISELECT(168,140), "S20955C18");
    /*is_ambiguous_... S20955C3::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C3*), ABISELECT(232,196), "S20955C18");
    /*is_ambiguous_... S20955C3::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C3*), 0, "S20955C18");
    check_base_class_offset(lv, (S20955C3*)(S20955C2*), 0, "S20955C18");
    /*is_ambiguous_... S20955C7::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C7*)(S20955C2*), ABISELECT(176,148), "S20955C18");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(184,152), "S20955C18");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(184,152), "S20955C18");
    check_base_class_offset(lv, (S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(184,152), "S20955C18");
    check_base_class_offset(lv, (S20955C7*)(S20955C2*), ABISELECT(176,148), "S20955C18");
    check_base_class_offset(lv, (S20955C2*)(S20955C19*), ABISELECT(176,148), "S20955C18");
    check_base_class_offset(lv, (S20955C19*), 0, "S20955C18");
    check_field_offset(lv, s20955c18f0, ABISELECT(8,4), "S20955C18.s20955c18f0");
    test_class_info(&lv, &cd_S20955C18);
    dp->~S20955C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20955C18(Test_S20955C18, "S20955C18", ABISELECT(240,204));

#else // __cplusplus

extern void _ZN9S20955C18C1Ev();
extern void _ZN9S20955C18D2Ev();
Name_Map name_map_S20955C18[] = {
  NSPAIR(_ZN9S20955C18C1Ev),
  NSPAIR(_ZN9S20955C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C3;
extern VTBL_ENTRY _ZTI8S20955C3[];
extern  VTBL_ENTRY _ZTV8S20955C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C3[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C7;
extern VTBL_ENTRY _ZTI8S20955C7[];
extern  VTBL_ENTRY _ZTV8S20955C7[];
extern Class_Descriptor cd_S20955C2;
extern VTBL_ENTRY _ZTI8S20955C2[];
extern  VTBL_ENTRY _ZTV8S20955C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C2[];
extern Class_Descriptor cd_S20955C19;
extern VTBL_ENTRY _ZTI9S20955C19[];
extern  VTBL_ENTRY _ZTV9S20955C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C19[];
static Base_Class bases_S20955C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(168,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(168,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
    2, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(168,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20955C5,    ABISELECT(232,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    11, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(176,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
    10, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(184,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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(184,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
    9, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(184,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
    10, //immediately_derived
  0, 0},
  {&cd_S20955C7,    ABISELECT(176,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
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20955C2,    ABISELECT(176,148), //bcp->offset
    8, //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
    12, //immediately_derived
  0, 1},
  {&cd_S20955C19,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20955C18[];
extern void _ZN9S20955C18D1Ev();
extern void _ZN9S20955C18D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S20955C18D1Ev,_ZTv0_n24_N9S20955C18D1Ev)();
extern void ABISELECT(_ZThn176_N9S20955C18D1Ev,_ZThn148_N9S20955C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20955C18D0Ev,_ZTv0_n24_N9S20955C18D0Ev)();
extern void ABISELECT(_ZThn176_N9S20955C18D0Ev,_ZThn148_N9S20955C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20955C18[] = {
  0,
  ABISELECT(176,148),
  ABISELECT(232,196),
  ABISELECT(168,140),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C18[0]),
  (VTBL_ENTRY)&_ZN9S20955C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C18D0Ev,
  ABISELECT(-176,-148),
  ABISELECT(56,48),
  -8,
  ABISELECT(-176,-148),
  ABISELECT(-176,-148),
  (VTBL_ENTRY)&(_ZTI9S20955C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C18D1Ev,_ZTv0_n24_N9S20955C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C18D0Ev,_ZTv0_n24_N9S20955C18D0Ev),
};
extern VTBL_ENTRY _ZTV9S20955C18[];
extern void _ZN9S20955C19D1Ev();
extern void _ZN9S20955C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20955C19__9S20955C18[] = {
  0,
  ABISELECT(176,148),
  ABISELECT(232,196),
  ABISELECT(168,140),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C19[0]),
  (VTBL_ENTRY)&_ZN9S20955C19D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C19D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20955C19D1Ev,_ZTv0_n24_N9S20955C19D1Ev)();
extern void ABISELECT(_ZThn176_N9S20955C19D1Ev,_ZThn148_N9S20955C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20955C19D0Ev,_ZTv0_n24_N9S20955C19D0Ev)();
extern void ABISELECT(_ZThn176_N9S20955C19D0Ev,_ZThn148_N9S20955C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C19__9S20955C18[] = {
  ABISELECT(-176,-148),
  ABISELECT(56,48),
  -8,
  ABISELECT(-176,-148),
  ABISELECT(-176,-148),
  (VTBL_ENTRY)&(_ZTI9S20955C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C19D1Ev,_ZTv0_n24_N9S20955C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C19D0Ev,_ZTv0_n24_N9S20955C19D0Ev),
};
extern void _ZN8S20955C2D1Ev();
extern void _ZN8S20955C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C18[] = {
  ABISELECT(56,48),
  -8,
  ABISELECT(-176,-148),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C2[0]),
  (VTBL_ENTRY)&_ZN8S20955C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20955C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__8S20955C2__9S20955C18[] = {
  ABISELECT(232,196),
  ABISELECT(168,140),
  ABISELECT(176,148),
  (VTBL_ENTRY)&(_ZTI8S20955C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__9S20955C18[] = {
  ABISELECT(232,196),
  ABISELECT(168,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C3[0]),
};
static  VTT_ENTRY vtt_S20955C18[] = {
  {&(_ZTV9S20955C18[6]),  6,16},
  {&(_tg__ZTV9S20955C19__9S20955C18[6]),  6,8},
  {&(_tg__ZTV8S20955C2__9S20955C19__9S20955C18[6]),  6,8},
  {&(_tg__ZTV9S20955C19__9S20955C18[6]),  6,8},
  {&(_ZTV9S20955C18[14]),  14,16},
  {&(_ZTV9S20955C18[6]),  6,16},
  {&(_tg__ZTV8S20955C2__9S20955C18[5]),  5,7},
  {&(_tg__ZTV8S20955C3__8S20955C2__9S20955C18[4]),  4,4},
  {&(_tg__ZTV8S20955C3__9S20955C18[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20955C18[];
extern  VTBL_ENTRY _ZTV9S20955C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C18[];
static VTBL_ENTRY alt_thunk_names68[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C19D0Ev,_ZTv0_n24_N9S20955C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20955C19D0Ev,_ZThn148_N9S20955C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C19D1Ev,_ZTv0_n24_N9S20955C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20955C19D1Ev,_ZThn148_N9S20955C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C18D0Ev,_ZTv0_n24_N9S20955C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20955C18D0Ev,_ZThn148_N9S20955C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C18D1Ev,_ZTv0_n24_N9S20955C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20955C18D1Ev,_ZThn148_N9S20955C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20955C18 = {  "S20955C18", // class name
  bases_S20955C18, 13,
  &(vtc_S20955C18[0]), // expected_vtbl_contents
  &(vtt_S20955C18[0]), // expected_vtt_contents
  ABISELECT(240,204), // object size
  NSPAIRA(_ZTI9S20955C18),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20955C18),16, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20955C18),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names68,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20955C20  : virtual S2264C38 , S20955C5 {
  ~S20955C20(); // tgen
  S20955C20(); // tgen
};
//SIG(-1 S20955C20) C1{ VBC2{ m} BC3{ m FL Fc:0}}


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

static void Test_S20955C20()
{
  extern Class_Descriptor cd_S20955C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20955C20, buf);
    S20955C20 *dp, &lv = *(dp=new (buf) S20955C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20955C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20955C20)");
    check_base_class_offset(lv, (S2264C38*), 0, "S20955C20");
    check_base_class_offset(lv, (S20955C5*), ABISELECT(8,4), "S20955C20");
    test_class_info(&lv, &cd_S20955C20);
    dp->~S20955C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20955C20(Test_S20955C20, "S20955C20", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN9S20955C20C1Ev();
extern void _ZN9S20955C20D1Ev();
Name_Map name_map_S20955C20[] = {
  NSPAIR(_ZN9S20955C20C1Ev),
  NSPAIR(_ZN9S20955C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
static Base_Class bases_S20955C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20955C5,    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 _ZTI9S20955C20[];
static  VTBL_ENTRY vtc_S20955C20[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C20[0]),
};
extern VTBL_ENTRY _ZTV9S20955C20[];
static  VTT_ENTRY vtt_S20955C20[] = {
  {&(_ZTV9S20955C20[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20955C20[];
extern  VTBL_ENTRY _ZTV9S20955C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C20[];
Class_Descriptor cd_S20955C20 = {  "S20955C20", // class name
  bases_S20955C20, 2,
  &(vtc_S20955C20[0]), // expected_vtbl_contents
  &(vtt_S20955C20[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI9S20955C20),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20955C20),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20955C20),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  S20955C22  : S20955C4 , S20955C20 , virtual S20955C12 {
  void *s20955c22f0;
  ~S20955C22(); // tgen
  S20955C22(); // tgen
};
//SIG(-1 S20955C22) C1{ BC2{ BC3{ m FL Fc:0} BC4{ m}} BC5{ VBC4 BC3} VBC6{ VBC7{ m} BC2 VBC4 Fi} Fp}


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

static void Test_S20955C22()
{
  extern Class_Descriptor cd_S20955C22;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S20955C22, buf);
    S20955C22 *dp, &lv = *(dp=new (buf) S20955C22());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S20955C22)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20955C22)");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*), ABISELECT(16,12), "S20955C22");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*), ABISELECT(16,12), "S20955C22");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C4*), ABISELECT(16,12), "S20955C22");
    check_base_class_offset(lv, (S2264C38*)(S20955C20*), 0, "S20955C22");
    /*is_ambiguous_... S20955C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C12*), 0, "S20955C22");
    check_base_class_offset(lv, (S20955C5*)(S20955C20*), ABISELECT(8,4), "S20955C22");
    check_base_class_offset(lv, (S20955C20*), 0, "S20955C22");
    check_base_class_offset(lv, (S2264C28*)(S20955C12*), 0, "S20955C22");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C12*), ABISELECT(40,28), "S20955C22");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C12*), ABISELECT(40,28), "S20955C22");
    check_base_class_offset(lv, (S20955C4*)(S20955C12*), ABISELECT(40,28), "S20955C22");
    check_base_class_offset(lv, (S20955C12*), ABISELECT(32,24), "S20955C22");
    check_field_offset(lv, s20955c22f0, ABISELECT(24,20), "S20955C22.s20955c22f0");
    test_class_info(&lv, &cd_S20955C22);
    dp->~S20955C22();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20955C22(Test_S20955C22, "S20955C22", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN9S20955C22C1Ev();
extern void _ZN9S20955C22D1Ev();
Name_Map name_map_S20955C22[] = {
  NSPAIR(_ZN9S20955C22C1Ev),
  NSPAIR(_ZN9S20955C22D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20955C20;
extern VTBL_ENTRY _ZTI9S20955C20[];
extern  VTBL_ENTRY _ZTV9S20955C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C20[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C12;
extern VTBL_ENTRY _ZTI9S20955C12[];
extern  VTBL_ENTRY _ZTV9S20955C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C12[];
static Base_Class bases_S20955C22[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    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_S2264C38,    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_S20955C4,    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, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    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
    5, //immediately_derived
  0, 0},
  {&cd_S20955C20,    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},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    ABISELECT(40,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, 0},
  {&cd_S2264C38,    ABISELECT(40,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, 0},
  {&cd_S20955C4,    ABISELECT(40,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
    10, //immediately_derived
  0, 0},
  {&cd_S20955C12,    ABISELECT(32,24), //bcp->offset
    5, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20955C22[];
static  VTBL_ENTRY vtc_S20955C22[] = {
  0,
  ABISELECT(32,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
extern VTBL_ENTRY _ZTV9S20955C22[];
static  VTBL_ENTRY _tg__ZTV9S20955C20__9S20955C22[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C22[] = {
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C12[0]),
};
static  VTT_ENTRY vtt_S20955C22[] = {
  {&(_ZTV9S20955C22[5]),  5,9},
  {&(_tg__ZTV9S20955C20__9S20955C22[3]),  3,3},
  {&(_ZTV9S20955C22[9]),  9,9},
  {&(_tg__ZTV9S20955C12__9S20955C22[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20955C22[];
extern  VTBL_ENTRY _ZTV9S20955C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C22[];
Class_Descriptor cd_S20955C22 = {  "S20955C22", // class name
  bases_S20955C22, 11,
  &(vtc_S20955C22[0]), // expected_vtbl_contents
  &(vtt_S20955C22[0]), // expected_vtt_contents
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI9S20955C22),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20955C22),9, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20955C22),4, //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  S20955C24  : S20955C12 {
  ~S20955C24(); // tgen
  S20955C24(); // tgen
};
//SIG(-1 S20955C24) C1{ BC2{ VBC3{ m} BC4{ BC5{ m FL Fc:0} BC6{ m}} VBC6 Fi}}


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

static void Test_S20955C24()
{
  extern Class_Descriptor cd_S20955C24;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20955C24, buf);
    S20955C24 *dp, &lv = *(dp=new (buf) S20955C24());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20955C24)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20955C24)");
    check_base_class_offset(lv, (S2264C28*)(S20955C12*), 0, "S20955C24");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C12*), ABISELECT(8,4), "S20955C24");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C12*), ABISELECT(8,4), "S20955C24");
    check_base_class_offset(lv, (S20955C4*)(S20955C12*), ABISELECT(8,4), "S20955C24");
    /*is_ambiguous_... S20955C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C12*), 0, "S20955C24");
    check_base_class_offset(lv, (S20955C12*), 0, "S20955C24");
    test_class_info(&lv, &cd_S20955C24);
    dp->~S20955C24();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20955C24(Test_S20955C24, "S20955C24", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN9S20955C24C1Ev();
extern void _ZN9S20955C24D1Ev();
Name_Map name_map_S20955C24[] = {
  NSPAIR(_ZN9S20955C24C1Ev),
  NSPAIR(_ZN9S20955C24D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C12;
extern VTBL_ENTRY _ZTI9S20955C12[];
extern  VTBL_ENTRY _ZTV9S20955C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C12[];
static Base_Class bases_S20955C24[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    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_S2264C38,    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_S20955C4,    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
    5, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C12,    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
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20955C24[];
static  VTBL_ENTRY vtc_S20955C24[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C24[0]),
};
extern VTBL_ENTRY _ZTV9S20955C24[];
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C24[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C12[0]),
};
static  VTT_ENTRY vtt_S20955C24[] = {
  {&(_ZTV9S20955C24[4]),  4,4},
  {&(_tg__ZTV9S20955C12__9S20955C24[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20955C24[];
extern  VTBL_ENTRY _ZTV9S20955C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C24[];
Class_Descriptor cd_S20955C24 = {  "S20955C24", // class name
  bases_S20955C24, 6,
  &(vtc_S20955C24[0]), // expected_vtbl_contents
  &(vtt_S20955C24[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI9S20955C24),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20955C24),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20955C24),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  S20955C25  : virtual S20955C7 {
  virtual  ~S20955C25(); // _ZN9S20955C25D2Ev
  S20955C25(); // tgen
};
//SIG(-1 S20955C25) C1{ VBC2{ BC3{ m} BC4{ BC5{ m FL Fc:0} BC3} vd FC6{}} vd}


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

static void Test_S20955C25()
{
  extern Class_Descriptor cd_S20955C25;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S20955C25, buf);
    S20955C25 *dp, &lv = *(dp=new (buf) S20955C25());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S20955C25)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20955C25)");
    /*is_ambiguous_... S20955C7::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C7*), ABISELECT(8,4), "S20955C25");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C7*), ABISELECT(16,8), "S20955C25");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C7*), ABISELECT(16,8), "S20955C25");
    check_base_class_offset(lv, (S20955C4*)(S20955C7*), ABISELECT(16,8), "S20955C25");
    check_base_class_offset(lv, (S20955C7*), ABISELECT(8,4), "S20955C25");
    test_class_info(&lv, &cd_S20955C25);
    dp->~S20955C25();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20955C25(Test_S20955C25, "S20955C25", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN9S20955C25C1Ev();
extern void _ZN9S20955C25D2Ev();
Name_Map name_map_S20955C25[] = {
  NSPAIR(_ZN9S20955C25C1Ev),
  NSPAIR(_ZN9S20955C25D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C7;
extern VTBL_ENTRY _ZTI8S20955C7[];
extern  VTBL_ENTRY _ZTV8S20955C7[];
static Base_Class bases_S20955C25[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    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
    4, //immediately_derived
  0, 0},
  {&cd_S20955C5,    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_S2264C38,    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_S20955C4,    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, 0},
  {&cd_S20955C7,    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 _ZTI9S20955C25[];
extern void _ZN9S20955C25D1Ev();
extern void _ZN9S20955C25D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S20955C25D1Ev,_ZTv0_n12_N9S20955C25D1Ev)();
extern void ABISELECT(_ZThn8_N9S20955C25D1Ev,_ZThn4_N9S20955C25D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20955C25D0Ev,_ZTv0_n12_N9S20955C25D0Ev)();
extern void ABISELECT(_ZThn8_N9S20955C25D0Ev,_ZThn4_N9S20955C25D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20955C25[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C25[0]),
  (VTBL_ENTRY)&_ZN9S20955C25D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C25D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20955C25[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20955C25D1Ev,_ZTv0_n12_N9S20955C25D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20955C25D0Ev,_ZTv0_n12_N9S20955C25D0Ev),
};
extern VTBL_ENTRY _ZTV9S20955C25[];
static  VTT_ENTRY vtt_S20955C25[] = {
  {&(_ZTV9S20955C25[3]),  3,10},
  {&(_ZTV9S20955C25[8]),  8,10},
};
extern VTBL_ENTRY _ZTI9S20955C25[];
extern  VTBL_ENTRY _ZTV9S20955C25[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C25[];
static VTBL_ENTRY alt_thunk_names69[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20955C25D0Ev,_ZTv0_n12_N9S20955C25D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20955C25D0Ev,_ZThn4_N9S20955C25D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20955C25D1Ev,_ZTv0_n12_N9S20955C25D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20955C25D1Ev,_ZThn4_N9S20955C25D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20955C25 = {  "S20955C25", // class name
  bases_S20955C25, 5,
  &(vtc_S20955C25[0]), // expected_vtbl_contents
  &(vtt_S20955C25[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI9S20955C25),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20955C25),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20955C25),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names69,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20955C21  : virtual S20955C4 , S20955C22 , virtual S2264C24 , S20955C24 {
  ::S20955C25 s20955c21f0[6];
  void *s20955c21f1;
  ~S20955C21(); // tgen
  S20955C21(); // tgen
};
//SIG(-1 S20955C21) C1{ VBC2{ BC3{ m FL Fc:0} BC4{ m}} BC5{ BC2 BC6{ VBC4 BC3} VBC7{ VBC8{ m} BC2 VBC4 Fi} Fp} VBC9{ m} BC10{ BC7} FC11{ VBC12{ BC4 BC2 vd FC13{}} vd}[6] Fp}


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

static void Test_S20955C21()
{
  extern Class_Descriptor cd_S20955C21;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,48)];
    init_test(&cd_S20955C21, buf);
    S20955C21 *dp, &lv = *(dp=new (buf) S20955C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,188), "sizeof(S20955C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20955C21)");
    /*is_ambiguous_... S20955C21::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*), ABISELECT(256,164), "S20955C21");
    /*is_ambiguous_... S20955C21::S20955C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*), ABISELECT(256,164), "S20955C21");
    /*is_ambiguous_... S20955C21::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C4*), ABISELECT(256,164), "S20955C21");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C22*), ABISELECT(16,12), "S20955C21");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C22*), ABISELECT(16,12), "S20955C21");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C22*), ABISELECT(16,12), "S20955C21");
    check_base_class_offset(lv, (S2264C38*)(S20955C20*)(S20955C22*), 0, "S20955C21");
    /*is_ambiguous_... S20955C21::S20955C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C12*), 0, "S20955C21");
    /*is_ambiguous_... S20955C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C12*)(S20955C24*), 0, "S20955C21");
    check_base_class_offset(lv, (S20955C5*)(S20955C20*)(S20955C22*), ABISELECT(8,4), "S20955C21");
    check_base_class_offset(lv, (S20955C20*)(S20955C22*), 0, "S20955C21");
    /*is_ambiguous_... S20955C21::S20955C12 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20955C12*), 0, "S20955C21");
    check_base_class_offset(lv, (S2264C28*)(S20955C12*)(S20955C24*), 0, "S20955C21");
    /*is_ambiguous_... S20955C21::S20955C12 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C12*), ABISELECT(272,176), "S20955C21");
    /*is_ambiguous_... S20955C21::S20955C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C12*), ABISELECT(272,176), "S20955C21");
    /*is_ambiguous_... S20955C21::S20955C12 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C12*), ABISELECT(272,176), "S20955C21");
    check_base_class_offset(lv, (S20955C12*)(S20955C22*), ABISELECT(264,172), "S20955C21");
    check_base_class_offset(lv, (S20955C22*), 0, "S20955C21");
    check_base_class_offset(lv, (S2264C24*), 0, "S20955C21");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C12*)(S20955C24*), ABISELECT(40,28), "S20955C21");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C12*)(S20955C24*), ABISELECT(40,28), "S20955C21");
    check_base_class_offset(lv, (S20955C4*)(S20955C12*)(S20955C24*), ABISELECT(40,28), "S20955C21");
    check_base_class_offset(lv, (S20955C12*)(S20955C24*), ABISELECT(32,24), "S20955C21");
    check_base_class_offset(lv, (S20955C24*), ABISELECT(32,24), "S20955C21");
    check_field_offset(lv, s20955c21f0, ABISELECT(56,40), "S20955C21.s20955c21f0");
    check_field_offset(lv, s20955c21f1, ABISELECT(248,160), "S20955C21.s20955c21f1");
    test_class_info(&lv, &cd_S20955C21);
    dp->~S20955C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20955C21(Test_S20955C21, "S20955C21", ABISELECT(288,188));

#else // __cplusplus

extern void _ZN9S20955C21C1Ev();
extern void _ZN9S20955C21D1Ev();
Name_Map name_map_S20955C21[] = {
  NSPAIR(_ZN9S20955C21C1Ev),
  NSPAIR(_ZN9S20955C21D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20955C20;
extern VTBL_ENTRY _ZTI9S20955C20[];
extern  VTBL_ENTRY _ZTV9S20955C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C20[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C12;
extern VTBL_ENTRY _ZTI9S20955C12[];
extern  VTBL_ENTRY _ZTV9S20955C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C12[];
extern Class_Descriptor cd_S20955C22;
extern VTBL_ENTRY _ZTI9S20955C22[];
extern  VTBL_ENTRY _ZTV9S20955C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C22[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C12;
extern VTBL_ENTRY _ZTI9S20955C12[];
extern  VTBL_ENTRY _ZTV9S20955C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C12[];
extern Class_Descriptor cd_S20955C24;
extern VTBL_ENTRY _ZTI9S20955C24[];
extern  VTBL_ENTRY _ZTV9S20955C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C24[];
static Base_Class bases_S20955C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(256,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(256,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
    2, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(256,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20955C5,    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
    5, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    5, //immediately_derived
  0, 0},
  {&cd_S20955C4,    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
    14, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    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_S20955C20,    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
    2, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    ABISELECT(272,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
    12, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(272,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
    12, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(272,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
    13, //immediately_derived
  0, 0},
  {&cd_S20955C12,    ABISELECT(264,172), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20955C22,    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_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20955C5,    ABISELECT(40,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
    18, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(40,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
    18, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(40,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
    19, //immediately_derived
  0, 0},
  {&cd_S20955C12,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    20, //immediately_derived
  0, 0},
  {&cd_S20955C24,    ABISELECT(32,24), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //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 _ZTI9S20955C21[];
static  VTBL_ENTRY vtc_S20955C21[] = {
  0,
  ABISELECT(256,164),
  0,
  ABISELECT(264,172),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C21[0]),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI9S20955C21[0]),
  ABISELECT(-264,-172),
  ABISELECT(-264,-172),
  ABISELECT(-264,-172),
  (VTBL_ENTRY)&(_ZTI9S20955C21[0]),
};
extern VTBL_ENTRY _ZTV9S20955C21[];
static  VTBL_ENTRY _tg__ZTV9S20955C22__9S20955C21[] = {
  0,
  ABISELECT(264,172),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C209S20955C22__9S20955C21[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C22__9S20955C21[] = {
  ABISELECT(-264,-172),
  ABISELECT(-264,-172),
  ABISELECT(-264,-172),
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C24__9S20955C21[] = {
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C24[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C129S20955C24__A1__9S20955C21[] = {
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C21[] = {
  ABISELECT(-264,-172),
  ABISELECT(-264,-172),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C12[0]),
};
static  VTT_ENTRY vtt_S20955C21[] = {
  {&(_ZTV9S20955C21[7]),  7,15},
  {&(_tg__ZTV9S20955C22__9S20955C21[5]),  5,5},
  {&(_tg__ZTV9S20955C209S20955C22__9S20955C21[3]),  3,3},
  {&(_tg__ZTV9S20955C12__9S20955C22__9S20955C21[4]),  4,4},
  {&(_tg__ZTV9S20955C24__9S20955C21[4]),  4,4},
  {&(_tg__ZTV9S20955C129S20955C24__A1__9S20955C21[4]),  4,4},
  {&(_ZTV9S20955C21[15]),  15,15},
  {&(_ZTV9S20955C21[11]),  11,15},
  {&(_tg__ZTV9S20955C12__9S20955C21[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20955C21[];
extern  VTBL_ENTRY _ZTV9S20955C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C21[];
Class_Descriptor cd_S20955C21 = {  "S20955C21", // class name
  bases_S20955C21, 21,
  &(vtc_S20955C21[0]), // expected_vtbl_contents
  &(vtt_S20955C21[0]), // expected_vtt_contents
  ABISELECT(288,188), // object size
  NSPAIRA(_ZTI9S20955C21),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20955C21),15, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20955C21),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20955C17  : virtual S20955C18 , S20955C4 , virtual S20955C20 , virtual S20955C21 , S20955C22 {
  ~S20955C17(); // tgen
  S20955C17(); // tgen
};
//SIG(-1 S20955C17) C1{ VBC2{ VBC3{ BC4{ m FL Fc:0} BC5{ m}} BC6{ VBC7{ VBC8{ VBC3 VBC4 BC5} BC9{ BC5 BC3 vd FC10{}} Fi[8]} vd} vd FC7[2]} BC3 VBC11{ VBC5 BC4} VBC12{ VBC3 BC13{ BC3 BC11 VBC14{ VBC15{ m} BC3 VBC5 Fi} Fp} VBC16{ m} BC17{ BC14} FC18{ VBC9 vd}[6] Fp} BC13}


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

static void Test_S20955C17()
{
  extern Class_Descriptor cd_S20955C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(73,108)];
    init_test(&cd_S20955C17, buf);
    S20955C17 *dp, &lv = *(dp=new (buf) S20955C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(576,428), "sizeof(S20955C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20955C17)");
    /*is_ambiguous_... S20955C17::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*), ABISELECT(208,172), "S20955C17");
    /*is_ambiguous_... S20955C17::S20955C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*), ABISELECT(208,172), "S20955C17");
    /*is_ambiguous_... S20955C18::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C18*), ABISELECT(208,172), "S20955C17");
    check_base_class_offset(lv, (S20955C4*)(S20955C3*), ABISELECT(208,172), "S20955C17");
    /*is_ambiguous_... S20955C21::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C21*), ABISELECT(208,172), "S20955C17");
    /*is_ambiguous_... S20955C3::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C3*), ABISELECT(272,228), "S20955C17");
    /*is_ambiguous_... S20955C3::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C3*), ABISELECT(40,32), "S20955C17");
    check_base_class_offset(lv, (S20955C3*)(S20955C2*), ABISELECT(40,32), "S20955C17");
    /*is_ambiguous_... S20955C7::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C7*)(S20955C2*), ABISELECT(216,180), "S20955C17");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(224,184), "S20955C17");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(224,184), "S20955C17");
    check_base_class_offset(lv, (S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(224,184), "S20955C17");
    check_base_class_offset(lv, (S20955C7*)(S20955C2*), ABISELECT(216,180), "S20955C17");
    check_base_class_offset(lv, (S20955C2*)(S20955C19*)(S20955C18*), ABISELECT(216,180), "S20955C17");
    check_base_class_offset(lv, (S20955C19*)(S20955C18*), ABISELECT(40,32), "S20955C17");
    check_base_class_offset(lv, (S20955C18*), ABISELECT(40,32), "S20955C17");
    /*is_ambiguous_... S20955C17::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*), ABISELECT(32,24), "S20955C17");
    /*is_ambiguous_... S20955C17::S20955C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*), ABISELECT(32,24), "S20955C17");
    /*is_ambiguous_... S20955C17::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C4*), ABISELECT(32,24), "S20955C17");
    /*is_ambiguous_... S20955C17::S20955C20 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C20*), 0, "S20955C17");
    check_base_class_offset(lv, (S2264C38*)(S20955C20*)(S20955C22*)(S20955C21*), 0, "S20955C17");
    /*is_ambiguous_... S20955C17::S20955C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C12*), 0, "S20955C17");
    /*is_ambiguous_... S20955C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C12*)(S20955C24*)(S20955C21*), 0, "S20955C17");
    /*is_ambiguous_... S20955C17::S20955C22 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C20*)(S20955C22*), 0, "S20955C17");
    /*is_ambiguous_... S20955C17::S20955C20 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C20*), ABISELECT(288,240), "S20955C17");
    /*is_ambiguous_... S20955C17::S20955C20 */ AMB_check_base_class_offset(lv, (S20955C20*), ABISELECT(280,236), "S20955C17");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C22*)(S20955C21*), ABISELECT(312,260), "S20955C17");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C22*)(S20955C21*), ABISELECT(312,260), "S20955C17");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C22*)(S20955C21*), ABISELECT(312,260), "S20955C17");
    check_base_class_offset(lv, (S20955C5*)(S20955C20*)(S20955C22*)(S20955C21*), ABISELECT(304,252), "S20955C17");
    check_base_class_offset(lv, (S20955C20*)(S20955C22*)(S20955C21*), ABISELECT(296,248), "S20955C17");
    /*is_ambiguous_... S20955C17::S20955C12 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20955C12*), 0, "S20955C17");
    check_base_class_offset(lv, (S2264C28*)(S20955C12*)(S20955C24*)(S20955C21*), 0, "S20955C17");
    /*is_ambiguous_... S20955C17::S20955C12 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C12*), ABISELECT(560,416), "S20955C17");
    /*is_ambiguous_... S20955C17::S20955C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C12*), ABISELECT(560,416), "S20955C17");
    /*is_ambiguous_... S20955C17::S20955C12 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C12*), ABISELECT(560,416), "S20955C17");
    check_base_class_offset(lv, (S20955C12*)(S20955C22*)(S20955C21*), ABISELECT(552,412), "S20955C17");
    /*is_ambiguous_... S20955C17::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C12*)(S20955C22*), ABISELECT(552,412), "S20955C17");
    check_base_class_offset(lv, (S20955C22*)(S20955C21*), ABISELECT(296,248), "S20955C17");
    check_base_class_offset(lv, (S2264C24*)(S20955C21*), 0, "S20955C17");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C12*)(S20955C24*)(S20955C21*), ABISELECT(336,276), "S20955C17");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C12*)(S20955C24*)(S20955C21*), ABISELECT(336,276), "S20955C17");
    check_base_class_offset(lv, (S20955C4*)(S20955C12*)(S20955C24*)(S20955C21*), ABISELECT(336,276), "S20955C17");
    check_base_class_offset(lv, (S20955C12*)(S20955C24*)(S20955C21*), ABISELECT(328,272), "S20955C17");
    check_base_class_offset(lv, (S20955C24*)(S20955C21*), ABISELECT(328,272), "S20955C17");
    check_base_class_offset(lv, (S20955C21*), ABISELECT(296,248), "S20955C17");
    /*is_ambiguous_... S20955C17::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C22*), ABISELECT(16,12), "S20955C17");
    /*is_ambiguous_... S20955C17::S20955C22 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C22*), ABISELECT(16,12), "S20955C17");
    /*is_ambiguous_... S20955C17::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C22*), ABISELECT(16,12), "S20955C17");
    /*is_ambiguous_... S20955C17::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C20*)(S20955C22*), ABISELECT(8,4), "S20955C17");
    /*is_ambiguous_... S20955C17::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C20*)(S20955C22*), 0, "S20955C17");
    /*is_ambiguous_... S20955C17::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C22*), 0, "S20955C17");
    test_class_info(&lv, &cd_S20955C17);
    dp->~S20955C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20955C17(Test_S20955C17, "S20955C17", ABISELECT(576,428));

#else // __cplusplus

extern void _ZN9S20955C17C1Ev();
extern void _ZN9S20955C17D1Ev();
Name_Map name_map_S20955C17[] = {
  NSPAIR(_ZN9S20955C17C1Ev),
  NSPAIR(_ZN9S20955C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C3;
extern VTBL_ENTRY _ZTI8S20955C3[];
extern  VTBL_ENTRY _ZTV8S20955C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C3[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C7;
extern VTBL_ENTRY _ZTI8S20955C7[];
extern  VTBL_ENTRY _ZTV8S20955C7[];
extern Class_Descriptor cd_S20955C2;
extern VTBL_ENTRY _ZTI8S20955C2[];
extern  VTBL_ENTRY _ZTV8S20955C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C2[];
extern Class_Descriptor cd_S20955C19;
extern VTBL_ENTRY _ZTI9S20955C19[];
extern  VTBL_ENTRY _ZTV9S20955C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C19[];
extern Class_Descriptor cd_S20955C18;
extern VTBL_ENTRY _ZTI9S20955C18[];
extern  VTBL_ENTRY _ZTV9S20955C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C18[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20955C20;
extern VTBL_ENTRY _ZTI9S20955C20[];
extern  VTBL_ENTRY _ZTV9S20955C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C20[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20955C20;
extern VTBL_ENTRY _ZTI9S20955C20[];
extern  VTBL_ENTRY _ZTV9S20955C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C20[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C12;
extern VTBL_ENTRY _ZTI9S20955C12[];
extern  VTBL_ENTRY _ZTV9S20955C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C12[];
extern Class_Descriptor cd_S20955C22;
extern VTBL_ENTRY _ZTI9S20955C22[];
extern  VTBL_ENTRY _ZTV9S20955C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C22[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C12;
extern VTBL_ENTRY _ZTI9S20955C12[];
extern  VTBL_ENTRY _ZTV9S20955C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C12[];
extern Class_Descriptor cd_S20955C24;
extern VTBL_ENTRY _ZTI9S20955C24[];
extern  VTBL_ENTRY _ZTV9S20955C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C24[];
extern Class_Descriptor cd_S20955C21;
extern VTBL_ENTRY _ZTI9S20955C21[];
extern  VTBL_ENTRY _ZTV9S20955C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C21[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20955C20;
extern VTBL_ENTRY _ZTI9S20955C20[];
extern  VTBL_ENTRY _ZTV9S20955C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C20[];
extern Class_Descriptor cd_S20955C22;
extern VTBL_ENTRY _ZTI9S20955C22[];
extern  VTBL_ENTRY _ZTV9S20955C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C22[];
static Base_Class bases_S20955C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(208,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(208,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
    2, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(208,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
    5, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(272,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(40,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_S20955C3,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(216,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
    10, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(224,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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(224,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
    9, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(224,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
    10, //immediately_derived
  0, 0},
  {&cd_S20955C7,    ABISELECT(216,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
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20955C2,    ABISELECT(216,180), //bcp->offset
    24, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20955C19,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20955C18,    ABISELECT(40,32), //bcp->offset
    15, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20955C5,    ABISELECT(32,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
    16, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(32,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
    16, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(32,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, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    ABISELECT(288,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C20,    ABISELECT(280,236), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20955C5,    ABISELECT(312,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(312,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C4,    ABISELECT(312,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    ABISELECT(304,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C20,    ABISELECT(296,248), //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
    8, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(560,416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(560,416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C4,    ABISELECT(560,416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20955C12,    ABISELECT(552,412), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S20955C22,    ABISELECT(296,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    37, //immediately_derived
  0, 0},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    37, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(336,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
    34, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(336,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
    34, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(336,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
    35, //immediately_derived
  0, 0},
  {&cd_S20955C12,    ABISELECT(328,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S20955C24,    ABISELECT(328,272), //bcp->offset
    42, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S20955C21,    ABISELECT(296,248), //bcp->offset
    35, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20955C5,    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
    40, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    40, //immediately_derived
  0, 0},
  {&cd_S20955C4,    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
    43, //immediately_derived
  0, 0},
  {&cd_S20955C5,    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
    42, //immediately_derived
  0, 0},
  {&cd_S20955C20,    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
    13, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S20955C22,    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
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20955C17[];
extern void _ZN9S20955C17D1Ev();
extern void _ZN9S20955C17D0Ev();
extern void ABISELECT(_ZTv0_n56_N9S20955C17D1Ev,_ZTv0_n28_N9S20955C17D1Ev)();
extern void ABISELECT(_ZThn40_N9S20955C17D1Ev,_ZThn32_N9S20955C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20955C17D0Ev,_ZTv0_n28_N9S20955C17D0Ev)();
extern void ABISELECT(_ZThn40_N9S20955C17D0Ev,_ZThn32_N9S20955C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20955C17D1Ev,_ZTv0_n24_N9S20955C17D1Ev)();
extern void ABISELECT(_ZThn216_N9S20955C17D1Ev,_ZThn180_N9S20955C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20955C17D0Ev,_ZTv0_n24_N9S20955C17D0Ev)();
extern void ABISELECT(_ZThn216_N9S20955C17D0Ev,_ZThn180_N9S20955C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20955C17[] = {
  0,
  ABISELECT(296,248),
  ABISELECT(280,236),
  ABISELECT(272,228),
  ABISELECT(40,32),
  ABISELECT(216,180),
  ABISELECT(208,172),
  ABISELECT(40,32),
  0,
  ABISELECT(552,412),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C17[0]),
  (VTBL_ENTRY)&_ZN9S20955C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C17D0Ev,
  ABISELECT(-40,-32),
  0,
  ABISELECT(176,148),
  ABISELECT(232,196),
  ABISELECT(168,140),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI9S20955C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20955C17D1Ev,_ZTv0_n28_N9S20955C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20955C17D0Ev,_ZTv0_n28_N9S20955C17D0Ev),
  ABISELECT(-216,-180),
  ABISELECT(56,48),
  -8,
  ABISELECT(-176,-148),
  ABISELECT(-216,-180),
  (VTBL_ENTRY)&(_ZTI9S20955C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C17D1Ev,_ZTv0_n24_N9S20955C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C17D0Ev,_ZTv0_n24_N9S20955C17D0Ev),
  ABISELECT(-280,-236),
  ABISELECT(-280,-236),
  (VTBL_ENTRY)&(_ZTI9S20955C17[0]),
  ABISELECT(-296,-248),
  ABISELECT(-88,-76),
  ABISELECT(-296,-248),
  ABISELECT(256,164),
  ABISELECT(-296,-248),
  ABISELECT(-296,-248),
  (VTBL_ENTRY)&(_ZTI9S20955C17[0]),
  ABISELECT(-328,-272),
  ABISELECT(-328,-272),
  ABISELECT(-328,-272),
  (VTBL_ENTRY)&(_ZTI9S20955C17[0]),
  ABISELECT(-552,-412),
  ABISELECT(-552,-412),
  ABISELECT(-552,-412),
  (VTBL_ENTRY)&(_ZTI9S20955C17[0]),
};
extern VTBL_ENTRY _ZTV9S20955C17[];
static  VTBL_ENTRY _tg__ZTV9S20955C22__A1__9S20955C17[] = {
  0,
  ABISELECT(552,412),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C209S20955C22__A2__9S20955C17[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C22__A1__9S20955C17[] = {
  ABISELECT(-552,-412),
  ABISELECT(-552,-412),
  ABISELECT(-552,-412),
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
extern void _ZN9S20955C18D1Ev();
extern void _ZN9S20955C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20955C18__9S20955C17[] = {
  0,
  ABISELECT(176,148),
  ABISELECT(232,196),
  ABISELECT(168,140),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C18[0]),
  (VTBL_ENTRY)&_ZN9S20955C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C18D0Ev,
};
extern void _ZN9S20955C19D1Ev();
extern void _ZN9S20955C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20955C199S20955C18__9S20955C17[] = {
  0,
  ABISELECT(176,148),
  ABISELECT(232,196),
  ABISELECT(168,140),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C19[0]),
  (VTBL_ENTRY)&_ZN9S20955C19D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C19D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20955C19D1Ev,_ZTv0_n24_N9S20955C19D1Ev)();
extern void ABISELECT(_ZThn176_N9S20955C19D1Ev,_ZThn148_N9S20955C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20955C19D0Ev,_ZTv0_n24_N9S20955C19D0Ev)();
extern void ABISELECT(_ZThn176_N9S20955C19D0Ev,_ZThn148_N9S20955C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C199S20955C18__9S20955C17[] = {
  ABISELECT(-176,-148),
  ABISELECT(56,48),
  -8,
  ABISELECT(-176,-148),
  ABISELECT(-176,-148),
  (VTBL_ENTRY)&(_ZTI9S20955C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C19D1Ev,_ZTv0_n24_N9S20955C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C19D0Ev,_ZTv0_n24_N9S20955C19D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20955C18D1Ev,_ZTv0_n24_N9S20955C18D1Ev)();
extern void ABISELECT(_ZThn176_N9S20955C18D1Ev,_ZThn148_N9S20955C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20955C18D0Ev,_ZTv0_n24_N9S20955C18D0Ev)();
extern void ABISELECT(_ZThn176_N9S20955C18D0Ev,_ZThn148_N9S20955C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C18__9S20955C17[] = {
  ABISELECT(-176,-148),
  ABISELECT(56,48),
  -8,
  ABISELECT(-176,-148),
  ABISELECT(-176,-148),
  (VTBL_ENTRY)&(_ZTI9S20955C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C18D1Ev,_ZTv0_n24_N9S20955C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C18D0Ev,_ZTv0_n24_N9S20955C18D0Ev),
};
extern void _ZN8S20955C2D1Ev();
extern void _ZN8S20955C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C17[] = {
  ABISELECT(56,48),
  -8,
  ABISELECT(-176,-148),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C2[0]),
  (VTBL_ENTRY)&_ZN8S20955C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20955C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__8S20955C2__9S20955C17[] = {
  ABISELECT(232,196),
  ABISELECT(168,140),
  ABISELECT(176,148),
  (VTBL_ENTRY)&(_ZTI8S20955C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__9S20955C17[] = {
  ABISELECT(232,196),
  ABISELECT(168,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C20__9S20955C17[] = {
  ABISELECT(-280,-236),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C21__9S20955C17[] = {
  ABISELECT(-296,-248),
  ABISELECT(-88,-76),
  ABISELECT(-296,-248),
  ABISELECT(256,164),
  ABISELECT(-296,-248),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C21[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C229S20955C21__9S20955C17[] = {
  ABISELECT(-296,-248),
  ABISELECT(256,164),
  ABISELECT(-296,-248),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C209S20955C229S20955C21__A1__9S20955C17[] = {
  ABISELECT(-296,-248),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C229S20955C21__9S20955C17[] = {
  ABISELECT(-552,-412),
  ABISELECT(-552,-412),
  ABISELECT(-256,-164),
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C249S20955C21__9S20955C17[] = {
  ABISELECT(-328,-272),
  ABISELECT(-328,-272),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C24[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C129S20955C249S20955C21__A1__9S20955C17[] = {
  ABISELECT(-328,-272),
  ABISELECT(-328,-272),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C21__9S20955C17[] = {
  ABISELECT(-552,-412),
  ABISELECT(-552,-412),
  ABISELECT(-256,-164),
  (VTBL_ENTRY)&(_ZTI9S20955C21[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C24__9S20955C21__9S20955C17[] = {
  ABISELECT(-328,-272),
  ABISELECT(-328,-272),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI9S20955C21[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C17[] = {
  ABISELECT(-552,-412),
  ABISELECT(-552,-412),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C12[0]),
};
static  VTT_ENTRY vtt_S20955C17[] = {
  {&(_ZTV9S20955C17[13]),  13,50},
  {&(_tg__ZTV9S20955C22__A1__9S20955C17[5]),  5,5},
  {&(_tg__ZTV9S20955C209S20955C22__A2__9S20955C17[3]),  3,3},
  {&(_tg__ZTV9S20955C12__9S20955C22__A1__9S20955C17[4]),  4,4},
  {&(_ZTV9S20955C17[22]),  22,50},
  {&(_ZTV9S20955C17[30]),  30,50},
  {&(_ZTV9S20955C17[22]),  22,50},
  {&(_ZTV9S20955C17[35]),  35,50},
  {&(_ZTV9S20955C17[42]),  42,50},
  {&(_ZTV9S20955C17[50]),  50,50},
  {&(_ZTV9S20955C17[46]),  46,50},
  {&(_tg__ZTV9S20955C18__9S20955C17[6]),  6,8},
  {&(_tg__ZTV9S20955C199S20955C18__9S20955C17[6]),  6,8},
  {&(_tg__ZTV8S20955C2__9S20955C199S20955C18__9S20955C17[6]),  6,8},
  {&(_tg__ZTV9S20955C199S20955C18__9S20955C17[6]),  6,8},
  {&(_tg__ZTV8S20955C2__9S20955C18__9S20955C17[6]),  6,8},
  {&(_tg__ZTV9S20955C18__9S20955C17[6]),  6,8},
  {&(_tg__ZTV8S20955C2__9S20955C17[5]),  5,7},
  {&(_tg__ZTV8S20955C3__8S20955C2__9S20955C17[4]),  4,4},
  {&(_tg__ZTV8S20955C3__9S20955C17[4]),  4,4},
  {&(_tg__ZTV9S20955C20__9S20955C17[3]),  3,3},
  {&(_tg__ZTV9S20955C21__9S20955C17[7]),  7,7},
  {&(_tg__ZTV9S20955C229S20955C21__9S20955C17[5]),  5,5},
  {&(_tg__ZTV9S20955C209S20955C229S20955C21__A1__9S20955C17[3]),  3,3},
  {&(_tg__ZTV9S20955C12__9S20955C229S20955C21__9S20955C17[4]),  4,4},
  {&(_tg__ZTV9S20955C249S20955C21__9S20955C17[4]),  4,4},
  {&(_tg__ZTV9S20955C129S20955C249S20955C21__A1__9S20955C17[4]),  4,4},
  {&(_tg__ZTV9S20955C12__9S20955C21__9S20955C17[4]),  4,4},
  {&(_tg__ZTV9S20955C24__9S20955C21__9S20955C17[4]),  4,4},
  {&(_tg__ZTV9S20955C12__9S20955C17[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20955C17[];
extern  VTBL_ENTRY _ZTV9S20955C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C17[];
static VTBL_ENTRY alt_thunk_names70[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C18D0Ev,_ZTv0_n24_N9S20955C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20955C18D0Ev,_ZThn148_N9S20955C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C18D1Ev,_ZTv0_n24_N9S20955C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20955C18D1Ev,_ZThn148_N9S20955C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C19D0Ev,_ZTv0_n24_N9S20955C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20955C19D0Ev,_ZThn148_N9S20955C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C19D1Ev,_ZTv0_n24_N9S20955C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20955C19D1Ev,_ZThn148_N9S20955C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C17D0Ev,_ZTv0_n24_N9S20955C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S20955C17D0Ev,_ZThn180_N9S20955C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C17D1Ev,_ZTv0_n24_N9S20955C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S20955C17D1Ev,_ZThn180_N9S20955C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20955C17D0Ev,_ZTv0_n28_N9S20955C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20955C17D0Ev,_ZThn32_N9S20955C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20955C17D1Ev,_ZTv0_n28_N9S20955C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20955C17D1Ev,_ZThn32_N9S20955C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20955C17 = {  "S20955C17", // class name
  bases_S20955C17, 44,
  &(vtc_S20955C17[0]), // expected_vtbl_contents
  &(vtt_S20955C17[0]), // expected_vtt_contents
  ABISELECT(576,428), // object size
  NSPAIRA(_ZTI9S20955C17),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20955C17),50, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20955C17),30, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names70,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20955C15  : S2264C28 , virtual S20955C2 , virtual S20955C9 , virtual S20955C16 {
  ::S20955C17 s20955c15f0;
  virtual void  v1(); // _ZN9S20955C152v1Ev
  ~S20955C15(); // tgen
  S20955C15(); // tgen
};
//SIG(-1 S20955C15) C1{ BC2{ m} VBC3{ VBC4{ VBC5{ BC6{ m FL Fc:0} BC7{ m}} VBC6 BC7} BC8{ BC7 BC5 vd FC9{}} Fi[8]} VBC10{ BC11{ m Fi Fc} VBC12{ VBC13{ VBC2 BC5 VBC7 Fi} VBC3 vd} BC14{ VBC6} vd} VBC15{ VBC14 Fi:1} v1 FC16{ VBC17{ VBC5 BC18{ VBC3 vd} vd FC3[2]} BC5 VBC19{ VBC7 BC6} VBC20{ VBC5 BC21{ BC5 BC19 VBC13 Fp} VBC22{ m} BC23{ BC13} FC24{ VBC8 vd}[6] Fp} BC21}}


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

static void Test_S20955C15()
{
  extern Class_Descriptor cd_S20955C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(90,134)];
    init_test(&cd_S20955C15, buf);
    S20955C15 *dp, &lv = *(dp=new (buf) S20955C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(712,532), "sizeof(S20955C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20955C15)");
    /*is_ambiguous_... S20955C15::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), 0, "S20955C15");
    /*is_ambiguous_... S20955C15::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*), ABISELECT(640,480), "S20955C15");
    /*is_ambiguous_... S20955C15::S20955C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*), ABISELECT(640,480), "S20955C15");
    check_base_class_offset(lv, (S20955C4*)(S20955C3*), ABISELECT(640,480), "S20955C15");
    /*is_ambiguous_... S20955C3::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C3*), ABISELECT(648,488), "S20955C15");
    check_base_class_offset(lv, (S20955C5*)(S20955C14*)(S20955C9*), ABISELECT(648,488), "S20955C15");
    /*is_ambiguous_... S20955C15::S20955C14 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C14*), ABISELECT(648,488), "S20955C15");
    /*is_ambiguous_... S20955C3::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C3*), 0, "S20955C15");
    check_base_class_offset(lv, (S20955C3*)(S20955C2*), 0, "S20955C15");
    /*is_ambiguous_... S20955C7::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C7*)(S20955C2*), ABISELECT(584,432), "S20955C15");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(592,436), "S20955C15");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(592,436), "S20955C15");
    check_base_class_offset(lv, (S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(592,436), "S20955C15");
    check_base_class_offset(lv, (S20955C7*)(S20955C2*), ABISELECT(584,432), "S20955C15");
    check_base_class_offset(lv, (S20955C2*), ABISELECT(584,432), "S20955C15");
    check_base_class_offset(lv, (S20955C2*)(S20955C11*), ABISELECT(584,432), "S20955C15");
    check_base_class_offset(lv, (S2398C25_nt*)(S20955C9*), ABISELECT(664,500), "S20955C15");
    check_base_class_offset(lv, (S2264C28*)(S20955C12*), ABISELECT(692,524), "S20955C15");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C12*), ABISELECT(680,512), "S20955C15");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C12*), ABISELECT(680,512), "S20955C15");
    check_base_class_offset(lv, (S20955C4*)(S20955C12*), ABISELECT(680,512), "S20955C15");
    /*is_ambiguous_... S20955C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C12*), ABISELECT(692,524), "S20955C15");
    check_base_class_offset(lv, (S20955C12*)(S20955C11*), ABISELECT(672,508), "S20955C15");
    check_base_class_offset(lv, (S20955C11*)(S20955C9*), 0, "S20955C15");
    check_base_class_offset(lv, (S20955C14*)(S20955C9*), ABISELECT(656,496), "S20955C15");
    check_base_class_offset(lv, (S20955C9*), ABISELECT(656,496), "S20955C15");
    check_base_class_offset(lv, (S20955C14*)(S20955C16*), ABISELECT(696,524), "S20955C15");
    check_base_class_offset(lv, (S20955C16*), ABISELECT(696,524), "S20955C15");
    check_field_offset(lv, s20955c15f0, ABISELECT(8,4), "S20955C15.s20955c15f0");
    test_class_info(&lv, &cd_S20955C15);
    dp->~S20955C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20955C15(Test_S20955C15, "S20955C15", ABISELECT(712,532));

#else // __cplusplus

extern void _ZN9S20955C15C1Ev();
extern void _ZN9S20955C15D1Ev();
Name_Map name_map_S20955C15[] = {
  NSPAIR(_ZN9S20955C15C1Ev),
  NSPAIR(_ZN9S20955C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C3;
extern VTBL_ENTRY _ZTI8S20955C3[];
extern  VTBL_ENTRY _ZTV8S20955C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C3[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C7;
extern VTBL_ENTRY _ZTI8S20955C7[];
extern  VTBL_ENTRY _ZTV8S20955C7[];
extern Class_Descriptor cd_S20955C2;
extern VTBL_ENTRY _ZTI8S20955C2[];
extern  VTBL_ENTRY _ZTV8S20955C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C2[];
extern Class_Descriptor cd_S2398C25_nt;
extern VTBL_ENTRY _ZTI11S2398C25_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C12;
extern VTBL_ENTRY _ZTI9S20955C12[];
extern  VTBL_ENTRY _ZTV9S20955C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C12[];
extern Class_Descriptor cd_S20955C11;
extern VTBL_ENTRY _ZTI9S20955C11[];
extern  VTBL_ENTRY _ZTV9S20955C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C11[];
extern Class_Descriptor cd_S20955C14;
extern VTBL_ENTRY _ZTI9S20955C14[];
extern  VTBL_ENTRY _ZTV9S20955C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C14[];
extern Class_Descriptor cd_S20955C9;
extern VTBL_ENTRY _ZTI8S20955C9[];
extern  VTBL_ENTRY _ZTV8S20955C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C9[];
extern Class_Descriptor cd_S20955C14;
extern VTBL_ENTRY _ZTI9S20955C14[];
extern  VTBL_ENTRY _ZTV9S20955C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C14[];
extern Class_Descriptor cd_S20955C16;
extern VTBL_ENTRY _ZTI9S20955C16[];
extern  VTBL_ENTRY _ZTV9S20955C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C16[];
static Base_Class bases_S20955C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20955C5,    ABISELECT(640,480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(640,480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C4,    ABISELECT(640,480), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20955C5,    ABISELECT(648,488), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    12, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(584,432), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    ABISELECT(592,436), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(592,436), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C4,    ABISELECT(592,436), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C7,    ABISELECT(584,432), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S20955C2,    ABISELECT(584,432), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2398C25_nt,    ABISELECT(664,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    ABISELECT(692,524), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    ABISELECT(680,512), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(680,512), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C4,    ABISELECT(680,512), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(692,524), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C12,    ABISELECT(672,508), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S20955C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S20955C14,    ABISELECT(656,496), //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
    6, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20955C9,    ABISELECT(656,496), //bcp->offset
    25, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20955C14,    ABISELECT(696,524), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S20955C16,    ABISELECT(696,524), //bcp->offset
    42, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20955C15[];
extern void _ZN9S20955C15D1Ev();
extern void _ZN9S20955C15D0Ev();
extern void _ZN9S20955C152v1Ev();
extern void ABISELECT(_ZTv0_n48_N9S20955C15D1Ev,_ZTv0_n24_N9S20955C15D1Ev)();
extern void ABISELECT(_ZThn584_N9S20955C15D1Ev,_ZThn432_N9S20955C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20955C15D0Ev,_ZTv0_n24_N9S20955C15D0Ev)();
extern void ABISELECT(_ZThn584_N9S20955C15D0Ev,_ZThn432_N9S20955C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N9S20955C15D1Ev,_ZTv0_n44_N9S20955C15D1Ev)();
extern void ABISELECT(_ZThn656_N9S20955C15D1Ev,_ZThn496_N9S20955C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N9S20955C15D0Ev,_ZTv0_n44_N9S20955C15D0Ev)();
extern void ABISELECT(_ZThn656_N9S20955C15D0Ev,_ZThn496_N9S20955C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20955C15[] = {
  ABISELECT(696,524),
  ABISELECT(696,524),
  0,
  ABISELECT(656,496),
  0,
  0,
  ABISELECT(584,432),
  ABISELECT(692,524),
  ABISELECT(692,524),
  ABISELECT(672,508),
  ABISELECT(648,488),
  ABISELECT(640,480),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C15[0]),
  (VTBL_ENTRY)&_ZN9S20955C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C15D0Ev,
  (VTBL_ENTRY)&_ZN9S20955C152v1Ev,
  ABISELECT(-584,-432),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-584,-432),
  ABISELECT(-584,-432),
  (VTBL_ENTRY)&(_ZTI9S20955C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C15D1Ev,_ZTv0_n24_N9S20955C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C15D0Ev,_ZTv0_n24_N9S20955C15D0Ev),
  ABISELECT(-656,-496),
  -16,
  ABISELECT(-656,-496),
  ABISELECT(-72,-64),
  ABISELECT(36,28),
  ABISELECT(36,28),
  ABISELECT(16,12),
  ABISELECT(-656,-496),
  -8,
  ABISELECT(-656,-496),
  (VTBL_ENTRY)&(_ZTI9S20955C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N9S20955C15D1Ev,_ZTv0_n44_N9S20955C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N9S20955C15D0Ev,_ZTv0_n44_N9S20955C15D0Ev),
  ABISELECT(20,16),
  ABISELECT(20,16),
  ABISELECT(-672,-508),
  (VTBL_ENTRY)&(_ZTI9S20955C15[0]),
  0,
  ABISELECT(-48,-36),
  ABISELECT(-696,-524),
  (VTBL_ENTRY)&(_ZTI9S20955C15[0]),
};
extern VTBL_ENTRY _ZTV9S20955C15[];
extern void _ZN8S20955C2D1Ev();
extern void _ZN8S20955C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C15[] = {
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-584,-432),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C2[0]),
  (VTBL_ENTRY)&_ZN8S20955C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20955C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__8S20955C2__9S20955C15[] = {
  ABISELECT(648,488),
  ABISELECT(640,480),
  ABISELECT(584,432),
  (VTBL_ENTRY)&(_ZTI8S20955C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__9S20955C15[] = {
  ABISELECT(648,488),
  ABISELECT(640,480),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C3[0]),
};
extern void _ZN8S20955C9D1Ev();
extern void _ZN8S20955C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20955C9__9S20955C15[] = {
  -16,
  ABISELECT(-656,-496),
  ABISELECT(-72,-64),
  ABISELECT(36,28),
  ABISELECT(36,28),
  ABISELECT(16,12),
  ABISELECT(-656,-496),
  -8,
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C9[0]),
  (VTBL_ENTRY)&_ZN8S20955C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20955C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20955C148S20955C9__9S20955C15[] = {
  -8,
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C14[0]),
};
extern void ABISELECT(_ZTv0_n80_N8S20955C9D1Ev,_ZTv0_n40_N8S20955C9D1Ev)();
extern void ABISELECT(_ZTv0_n80_N8S20955C9D0Ev,_ZTv0_n40_N8S20955C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20955C11__8S20955C9__9S20955C15[] = {
  ABISELECT(656,496),
  0,
  ABISELECT(584,432),
  ABISELECT(692,524),
  ABISELECT(692,524),
  ABISELECT(672,508),
  ABISELECT(648,488),
  ABISELECT(640,480),
  ABISELECT(656,496),
  (VTBL_ENTRY)&(_ZTI8S20955C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20955C9D1Ev,_ZTv0_n40_N8S20955C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20955C9D0Ev,_ZTv0_n40_N8S20955C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__8S20955C9__9S20955C15[] = {
  ABISELECT(20,16),
  ABISELECT(20,16),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20955C9[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S20955C9D1Ev,_ZTv0_n24_N8S20955C9D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S20955C9D0Ev,_ZTv0_n24_N8S20955C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20955C2__8S20955C9__9S20955C15[] = {
  ABISELECT(72,64),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-584,-432),
  ABISELECT(72,64),
  (VTBL_ENTRY)&(_ZTI8S20955C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20955C9D1Ev,_ZTv0_n24_N8S20955C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20955C9D0Ev,_ZTv0_n24_N8S20955C9D0Ev),
};
extern void _ZN9S20955C11D1Ev();
extern void _ZN9S20955C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20955C11__9S20955C15[] = {
  0,
  ABISELECT(584,432),
  ABISELECT(692,524),
  ABISELECT(692,524),
  ABISELECT(672,508),
  ABISELECT(648,488),
  ABISELECT(640,480),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C11[0]),
  (VTBL_ENTRY)&_ZN9S20955C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C11__9S20955C15[] = {
  ABISELECT(20,16),
  ABISELECT(20,16),
  ABISELECT(-672,-508),
  (VTBL_ENTRY)&(_ZTI9S20955C11[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20955C11D1Ev,_ZTv0_n24_N9S20955C11D1Ev)();
extern void ABISELECT(_ZThn584_N9S20955C11D1Ev,_ZThn432_N9S20955C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20955C11D0Ev,_ZTv0_n24_N9S20955C11D0Ev)();
extern void ABISELECT(_ZThn584_N9S20955C11D0Ev,_ZThn432_N9S20955C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C11__9S20955C15[] = {
  ABISELECT(-584,-432),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-584,-432),
  ABISELECT(-584,-432),
  (VTBL_ENTRY)&(_ZTI9S20955C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C11D1Ev,_ZTv0_n24_N9S20955C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C11D0Ev,_ZTv0_n24_N9S20955C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C15[] = {
  ABISELECT(20,16),
  ABISELECT(20,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C16__9S20955C15[] = {
  0,
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C16[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C14__A1__9S20955C15[] = {
  ABISELECT(-48,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C14[0]),
};
static  VTT_ENTRY vtt_S20955C15[] = {
  {&(_ZTV9S20955C15[14]),  14,46},
  {&(_ZTV9S20955C15[23]),  23,46},
  {&(_ZTV9S20955C15[14]),  14,46},
  {&(_ZTV9S20955C15[36]),  36,46},
  {&(_ZTV9S20955C15[14]),  14,46},
  {&(_ZTV9S20955C15[42]),  42,46},
  {&(_ZTV9S20955C15[46]),  46,46},
  {&(_ZTV9S20955C15[46]),  46,46},
  {&(_tg__ZTV8S20955C2__9S20955C15[5]),  5,7},
  {&(_tg__ZTV8S20955C3__8S20955C2__9S20955C15[4]),  4,4},
  {&(_tg__ZTV8S20955C3__9S20955C15[4]),  4,4},
  {&(_tg__ZTV8S20955C9__9S20955C15[10]),  10,12},
  {&(_tg__ZTV9S20955C148S20955C9__9S20955C15[3]),  3,3},
  {&(_tg__ZTV9S20955C11__8S20955C9__9S20955C15[10]),  10,12},
  {&(_tg__ZTV9S20955C12__8S20955C9__9S20955C15[4]),  4,4},
  {&(_tg__ZTV8S20955C2__8S20955C9__9S20955C15[6]),  6,8},
  {&(_tg__ZTV9S20955C11__8S20955C9__9S20955C15[10]),  10,12},
  {&(_tg__ZTV9S20955C11__9S20955C15[9]),  9,11},
  {&(_tg__ZTV9S20955C12__9S20955C11__9S20955C15[4]),  4,4},
  {&(_tg__ZTV8S20955C2__9S20955C11__9S20955C15[6]),  6,8},
  {&(_tg__ZTV9S20955C11__9S20955C15[9]),  9,11},
  {&(_tg__ZTV9S20955C12__9S20955C15[4]),  4,4},
  {&(_tg__ZTV9S20955C16__9S20955C15[4]),  4,4},
  {&(_tg__ZTV9S20955C16__9S20955C15[4]),  4,4},
  {&(_tg__ZTV9S20955C14__A1__9S20955C15[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20955C15[];
extern  VTBL_ENTRY _ZTV9S20955C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C15[];
static VTBL_ENTRY alt_thunk_names71[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C11D0Ev,_ZTv0_n24_N9S20955C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn584_N9S20955C11D0Ev,_ZThn432_N9S20955C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C11D1Ev,_ZTv0_n24_N9S20955C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn584_N9S20955C11D1Ev,_ZThn432_N9S20955C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N9S20955C15D0Ev,_ZTv0_n44_N9S20955C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N9S20955C15D0Ev,_ZThn496_N9S20955C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N9S20955C15D1Ev,_ZTv0_n44_N9S20955C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N9S20955C15D1Ev,_ZThn496_N9S20955C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C15D0Ev,_ZTv0_n24_N9S20955C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn584_N9S20955C15D0Ev,_ZThn432_N9S20955C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C15D1Ev,_ZTv0_n24_N9S20955C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn584_N9S20955C15D1Ev,_ZThn432_N9S20955C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20955C15 = {  "S20955C15", // class name
  bases_S20955C15, 25,
  &(vtc_S20955C15[0]), // expected_vtbl_contents
  &(vtt_S20955C15[0]), // expected_vtt_contents
  ABISELECT(712,532), // object size
  NSPAIRA(_ZTI9S20955C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20955C15),46, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20955C15),25, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names71,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20955C27  : virtual S20955C5 , S20955C12 {
  __tsu64 s20955c27f0:1;
  ~S20955C27(); // tgen
  S20955C27(); // tgen
};
//SIG(-1 S20955C27) C1{ VBC2{ m FL Fc:0} BC3{ VBC4{ m} BC5{ BC2 BC6{ m}} VBC6 Fi} FL:1}


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

static void Test_S20955C27()
{
  extern Class_Descriptor cd_S20955C27;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S20955C27, buf);
    S20955C27 *dp, &lv = *(dp=new (buf) S20955C27());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S20955C27)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20955C27)");
    /*is_ambiguous_... S20955C27::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*), ABISELECT(24,20), "S20955C27");
    check_base_class_offset(lv, (S2264C28*)(S20955C12*), 0, "S20955C27");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C12*), ABISELECT(8,4), "S20955C27");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C12*), ABISELECT(8,4), "S20955C27");
    check_base_class_offset(lv, (S20955C4*)(S20955C12*), ABISELECT(8,4), "S20955C27");
    /*is_ambiguous_... S20955C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C12*), 0, "S20955C27");
    check_base_class_offset(lv, (S20955C12*), 0, "S20955C27");
    set_bf_and_test(lv, s20955c27f0, ABISELECT(20,16), 0, 1, 1, "S20955C27");
    test_class_info(&lv, &cd_S20955C27);
    dp->~S20955C27();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20955C27(Test_S20955C27, "S20955C27", ABISELECT(32,28));

#else // __cplusplus

extern void _ZN9S20955C27C1Ev();
extern void _ZN9S20955C27D1Ev();
Name_Map name_map_S20955C27[] = {
  NSPAIR(_ZN9S20955C27C1Ev),
  NSPAIR(_ZN9S20955C27D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C12;
extern VTBL_ENTRY _ZTI9S20955C12[];
extern  VTBL_ENTRY _ZTV9S20955C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C12[];
static Base_Class bases_S20955C27[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(24,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, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20955C5,    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
    4, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    4, //immediately_derived
  0, 0},
  {&cd_S20955C4,    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
    6, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20955C12,    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
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20955C27[];
static  VTBL_ENTRY vtc_S20955C27[] = {
  ABISELECT(24,20),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C27[0]),
};
extern VTBL_ENTRY _ZTV9S20955C27[];
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C27[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C12[0]),
};
static  VTT_ENTRY vtt_S20955C27[] = {
  {&(_ZTV9S20955C27[5]),  5,5},
  {&(_tg__ZTV9S20955C12__9S20955C27[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20955C27[];
extern  VTBL_ENTRY _ZTV9S20955C27[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C27[];
Class_Descriptor cd_S20955C27 = {  "S20955C27", // class name
  bases_S20955C27, 7,
  &(vtc_S20955C27[0]), // expected_vtbl_contents
  &(vtt_S20955C27[0]), // expected_vtt_contents
  ABISELECT(32,28), // object size
  NSPAIRA(_ZTI9S20955C27),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20955C27),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20955C27),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  S20955C28  : virtual S20955C21 , virtual S20955C22 , virtual S20955C2 {
  virtual  ~S20955C28(); // _ZN9S20955C28D2Ev
  S20955C28(); // tgen
};
//SIG(-1 S20955C28) C1{ VBC2{ VBC3{ BC4{ m FL Fc:0} BC5{ m}} BC6{ BC3 BC7{ VBC5 BC4} VBC8{ VBC9{ m} BC3 VBC5 Fi} Fp} VBC10{ m} BC11{ BC8} FC12{ VBC13{ BC5 BC3 vd FC14{}} vd}[6] Fp} VBC6 VBC15{ VBC16{ VBC3 VBC4 BC5} BC13 Fi[8]} vd}


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

static void Test_S20955C28()
{
  extern Class_Descriptor cd_S20955C28;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(50,69)];
    init_test(&cd_S20955C28, buf);
    S20955C28 *dp, &lv = *(dp=new (buf) S20955C28());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(392,272), "sizeof(S20955C28)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20955C28)");
    /*is_ambiguous_... S20955C28::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*), ABISELECT(264,168), "S20955C28");
    /*is_ambiguous_... S20955C28::S20955C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*), ABISELECT(264,168), "S20955C28");
    /*is_ambiguous_... S20955C21::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C21*), ABISELECT(264,168), "S20955C28");
    check_base_class_offset(lv, (S20955C4*)(S20955C3*), ABISELECT(264,168), "S20955C28");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C22*)(S20955C21*), ABISELECT(24,16), "S20955C28");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C22*)(S20955C21*), ABISELECT(24,16), "S20955C28");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C22*)(S20955C21*), ABISELECT(24,16), "S20955C28");
    check_base_class_offset(lv, (S2264C38*)(S20955C20*)(S20955C22*)(S20955C21*), ABISELECT(272,176), "S20955C28");
    /*is_ambiguous_... S20955C28::S20955C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C12*), ABISELECT(272,176), "S20955C28");
    /*is_ambiguous_... S20955C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C12*)(S20955C24*)(S20955C21*), ABISELECT(272,176), "S20955C28");
    /*is_ambiguous_... S20955C28::S20955C22 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C20*)(S20955C22*), ABISELECT(272,176), "S20955C28");
    check_base_class_offset(lv, (S20955C5*)(S20955C20*)(S20955C22*)(S20955C21*), ABISELECT(16,8), "S20955C28");
    check_base_class_offset(lv, (S20955C20*)(S20955C22*)(S20955C21*), ABISELECT(8,4), "S20955C28");
    /*is_ambiguous_... S20955C28::S20955C12 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20955C12*), 0, "S20955C28");
    check_base_class_offset(lv, (S2264C28*)(S20955C12*)(S20955C24*)(S20955C21*), 0, "S20955C28");
    /*is_ambiguous_... S20955C28::S20955C12 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C12*), ABISELECT(280,180), "S20955C28");
    /*is_ambiguous_... S20955C28::S20955C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C12*), ABISELECT(280,180), "S20955C28");
    /*is_ambiguous_... S20955C28::S20955C12 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C12*), ABISELECT(280,180), "S20955C28");
    check_base_class_offset(lv, (S20955C12*)(S20955C22*)(S20955C21*), ABISELECT(272,176), "S20955C28");
    /*is_ambiguous_... S20955C28::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C12*)(S20955C22*), ABISELECT(272,176), "S20955C28");
    check_base_class_offset(lv, (S20955C22*)(S20955C21*), ABISELECT(8,4), "S20955C28");
    check_base_class_offset(lv, (S2264C24*)(S20955C21*), 0, "S20955C28");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C12*)(S20955C24*)(S20955C21*), ABISELECT(48,32), "S20955C28");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C12*)(S20955C24*)(S20955C21*), ABISELECT(48,32), "S20955C28");
    check_base_class_offset(lv, (S20955C4*)(S20955C12*)(S20955C24*)(S20955C21*), ABISELECT(48,32), "S20955C28");
    check_base_class_offset(lv, (S20955C12*)(S20955C24*)(S20955C21*), ABISELECT(40,28), "S20955C28");
    check_base_class_offset(lv, (S20955C24*)(S20955C21*), ABISELECT(40,28), "S20955C28");
    check_base_class_offset(lv, (S20955C21*), ABISELECT(8,4), "S20955C28");
    /*is_ambiguous_... S20955C28::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C22*), ABISELECT(312,204), "S20955C28");
    /*is_ambiguous_... S20955C28::S20955C22 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C22*), ABISELECT(312,204), "S20955C28");
    /*is_ambiguous_... S20955C28::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C22*), ABISELECT(312,204), "S20955C28");
    /*is_ambiguous_... S20955C28::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C20*)(S20955C22*), ABISELECT(304,196), "S20955C28");
    /*is_ambiguous_... S20955C28::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C20*)(S20955C22*), ABISELECT(296,192), "S20955C28");
    /*is_ambiguous_... S20955C28::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C22*), ABISELECT(296,192), "S20955C28");
    /*is_ambiguous_... S20955C3::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C3*), ABISELECT(384,264), "S20955C28");
    /*is_ambiguous_... S20955C3::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C3*), 0, "S20955C28");
    check_base_class_offset(lv, (S20955C3*)(S20955C2*), 0, "S20955C28");
    /*is_ambiguous_... S20955C7::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C7*)(S20955C2*), ABISELECT(328,216), "S20955C28");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(336,220), "S20955C28");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(336,220), "S20955C28");
    check_base_class_offset(lv, (S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(336,220), "S20955C28");
    check_base_class_offset(lv, (S20955C7*)(S20955C2*), ABISELECT(328,216), "S20955C28");
    check_base_class_offset(lv, (S20955C2*), ABISELECT(328,216), "S20955C28");
    test_class_info(&lv, &cd_S20955C28);
    dp->~S20955C28();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20955C28(Test_S20955C28, "S20955C28", ABISELECT(392,272));

#else // __cplusplus

extern void _ZN9S20955C28C1Ev();
extern void _ZN9S20955C28D2Ev();
Name_Map name_map_S20955C28[] = {
  NSPAIR(_ZN9S20955C28C1Ev),
  NSPAIR(_ZN9S20955C28D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20955C20;
extern VTBL_ENTRY _ZTI9S20955C20[];
extern  VTBL_ENTRY _ZTV9S20955C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C20[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C12;
extern VTBL_ENTRY _ZTI9S20955C12[];
extern  VTBL_ENTRY _ZTV9S20955C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C12[];
extern Class_Descriptor cd_S20955C22;
extern VTBL_ENTRY _ZTI9S20955C22[];
extern  VTBL_ENTRY _ZTV9S20955C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C22[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C12;
extern VTBL_ENTRY _ZTI9S20955C12[];
extern  VTBL_ENTRY _ZTV9S20955C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C12[];
extern Class_Descriptor cd_S20955C24;
extern VTBL_ENTRY _ZTI9S20955C24[];
extern  VTBL_ENTRY _ZTV9S20955C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C24[];
extern Class_Descriptor cd_S20955C21;
extern VTBL_ENTRY _ZTI9S20955C21[];
extern  VTBL_ENTRY _ZTV9S20955C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C21[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20955C20;
extern VTBL_ENTRY _ZTI9S20955C20[];
extern  VTBL_ENTRY _ZTV9S20955C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C20[];
extern Class_Descriptor cd_S20955C22;
extern VTBL_ENTRY _ZTI9S20955C22[];
extern  VTBL_ENTRY _ZTV9S20955C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C22[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C3;
extern VTBL_ENTRY _ZTI8S20955C3[];
extern  VTBL_ENTRY _ZTV8S20955C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C3[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C7;
extern VTBL_ENTRY _ZTI8S20955C7[];
extern  VTBL_ENTRY _ZTV8S20955C7[];
extern Class_Descriptor cd_S20955C2;
extern VTBL_ENTRY _ZTI8S20955C2[];
extern  VTBL_ENTRY _ZTV8S20955C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C2[];
static Base_Class bases_S20955C28[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(264,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(264,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
    2, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(264,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, 1},
  {&cd_S20955C5,    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
    5, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    5, //immediately_derived
  0, 0},
  {&cd_S20955C4,    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
    14, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(272,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
    8, //immediately_derived
  0, 1},
  {&cd_S20955C5,    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
    8, //immediately_derived
  0, 0},
  {&cd_S20955C20,    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
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    ABISELECT(280,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
    12, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(280,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
    12, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(280,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
    13, //immediately_derived
  0, 0},
  {&cd_S20955C12,    ABISELECT(272,176), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20955C22,    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
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20955C5,    ABISELECT(48,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
    18, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(48,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
    18, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(48,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
    19, //immediately_derived
  0, 0},
  {&cd_S20955C12,    ABISELECT(40,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20955C24,    ABISELECT(40,28), //bcp->offset
    21, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20955C21,    ABISELECT(8,4), //bcp->offset
    14, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20955C5,    ABISELECT(312,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(312,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C4,    ABISELECT(312,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(304,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C20,    ABISELECT(296,192), //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
    7, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20955C22,    ABISELECT(296,192), //bcp->offset
    29, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20955C5,    ABISELECT(384,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    36, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(328,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(336,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
    34, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(336,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
    34, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(336,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
    35, //immediately_derived
  0, 0},
  {&cd_S20955C7,    ABISELECT(328,216), //bcp->offset
    -1, //bcp->virtual_function_table_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
    36, //immediately_derived
  0, 0},
  {&cd_S20955C2,    ABISELECT(328,216), //bcp->offset
    34, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20955C28[];
extern void _ZN9S20955C28D1Ev();
extern void _ZN9S20955C28D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S20955C28D1Ev,_ZTv0_n24_N9S20955C28D1Ev)();
extern void ABISELECT(_ZThn328_N9S20955C28D1Ev,_ZThn216_N9S20955C28D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20955C28D0Ev,_ZTv0_n24_N9S20955C28D0Ev)();
extern void ABISELECT(_ZThn328_N9S20955C28D0Ev,_ZThn216_N9S20955C28D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20955C28[] = {
  0,
  ABISELECT(328,216),
  ABISELECT(296,192),
  0,
  0,
  ABISELECT(272,176),
  ABISELECT(272,176),
  ABISELECT(8,4),
  ABISELECT(384,264),
  ABISELECT(264,168),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C28[0]),
  (VTBL_ENTRY)&_ZN9S20955C28D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C28D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(256,164),
  ABISELECT(-8,-4),
  ABISELECT(264,172),
  ABISELECT(264,172),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20955C28[0]),
  ABISELECT(232,148),
  ABISELECT(-40,-28),
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI9S20955C28[0]),
  0,
  ABISELECT(-272,-176),
  ABISELECT(-272,-176),
  (VTBL_ENTRY)&(_ZTI9S20955C28[0]),
  ABISELECT(-296,-192),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  ABISELECT(-296,-192),
  (VTBL_ENTRY)&(_ZTI9S20955C28[0]),
  ABISELECT(-328,-216),
  ABISELECT(56,48),
  ABISELECT(-64,-48),
  ABISELECT(-328,-216),
  ABISELECT(-328,-216),
  (VTBL_ENTRY)&(_ZTI9S20955C28[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C28D1Ev,_ZTv0_n24_N9S20955C28D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C28D0Ev,_ZTv0_n24_N9S20955C28D0Ev),
};
extern VTBL_ENTRY _ZTV9S20955C28[];
static  VTBL_ENTRY _tg__ZTV9S20955C21__9S20955C28[] = {
  ABISELECT(-8,-4),
  ABISELECT(256,164),
  ABISELECT(-8,-4),
  ABISELECT(264,172),
  ABISELECT(264,172),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C21[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C229S20955C21__9S20955C28[] = {
  ABISELECT(-8,-4),
  ABISELECT(264,172),
  ABISELECT(264,172),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C209S20955C229S20955C21__9S20955C28[] = {
  ABISELECT(264,172),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C229S20955C21__9S20955C28[] = {
  0,
  ABISELECT(-272,-176),
  ABISELECT(-264,-172),
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C249S20955C21__9S20955C28[] = {
  ABISELECT(232,148),
  ABISELECT(-40,-28),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C24[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C129S20955C249S20955C21__A1__9S20955C28[] = {
  ABISELECT(232,148),
  ABISELECT(-40,-28),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C21__9S20955C28[] = {
  0,
  ABISELECT(-272,-176),
  ABISELECT(-264,-172),
  (VTBL_ENTRY)&(_ZTI9S20955C21[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C24__9S20955C21__9S20955C28[] = {
  ABISELECT(232,148),
  ABISELECT(-40,-28),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI9S20955C21[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C28[] = {
  0,
  ABISELECT(-272,-176),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C22__A1__9S20955C28[] = {
  ABISELECT(-296,-192),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C209S20955C22__A1__9S20955C28[] = {
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C22__A1__9S20955C28[] = {
  0,
  ABISELECT(-272,-176),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
extern void _ZN8S20955C2D1Ev();
extern void _ZN8S20955C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C28[] = {
  ABISELECT(56,48),
  ABISELECT(-64,-48),
  ABISELECT(-328,-216),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C2[0]),
  (VTBL_ENTRY)&_ZN8S20955C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20955C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__8S20955C2__9S20955C28[] = {
  ABISELECT(384,264),
  ABISELECT(264,168),
  ABISELECT(328,216),
  (VTBL_ENTRY)&(_ZTI8S20955C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__9S20955C28[] = {
  ABISELECT(384,264),
  ABISELECT(264,168),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C3[0]),
};
static  VTT_ENTRY vtt_S20955C28[] = {
  {&(_ZTV9S20955C28[12]),  12,42},
  {&(_ZTV9S20955C28[21]),  21,42},
  {&(_ZTV9S20955C28[29]),  29,42},
  {&(_ZTV9S20955C28[25]),  25,42},
  {&(_ZTV9S20955C28[34]),  34,42},
  {&(_ZTV9S20955C28[40]),  40,42},
  {&(_ZTV9S20955C28[12]),  12,42},
  {&(_tg__ZTV9S20955C21__9S20955C28[7]),  7,7},
  {&(_tg__ZTV9S20955C229S20955C21__9S20955C28[5]),  5,5},
  {&(_tg__ZTV9S20955C209S20955C229S20955C21__9S20955C28[3]),  3,3},
  {&(_tg__ZTV9S20955C12__9S20955C229S20955C21__9S20955C28[4]),  4,4},
  {&(_tg__ZTV9S20955C249S20955C21__9S20955C28[4]),  4,4},
  {&(_tg__ZTV9S20955C129S20955C249S20955C21__A1__9S20955C28[4]),  4,4},
  {&(_tg__ZTV9S20955C12__9S20955C21__9S20955C28[4]),  4,4},
  {&(_tg__ZTV9S20955C24__9S20955C21__9S20955C28[4]),  4,4},
  {&(_tg__ZTV9S20955C12__9S20955C28[4]),  4,4},
  {&(_tg__ZTV9S20955C22__A1__9S20955C28[5]),  5,5},
  {&(_tg__ZTV9S20955C209S20955C22__A1__9S20955C28[3]),  3,3},
  {&(_tg__ZTV9S20955C12__9S20955C22__A1__9S20955C28[4]),  4,4},
  {&(_tg__ZTV8S20955C2__9S20955C28[5]),  5,7},
  {&(_tg__ZTV8S20955C3__8S20955C2__9S20955C28[4]),  4,4},
  {&(_tg__ZTV8S20955C3__9S20955C28[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20955C28[];
extern  VTBL_ENTRY _ZTV9S20955C28[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C28[];
static VTBL_ENTRY alt_thunk_names72[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C28D0Ev,_ZTv0_n24_N9S20955C28D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N9S20955C28D0Ev,_ZThn216_N9S20955C28D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C28D1Ev,_ZTv0_n24_N9S20955C28D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N9S20955C28D1Ev,_ZThn216_N9S20955C28D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20955C28 = {  "S20955C28", // class name
  bases_S20955C28, 37,
  &(vtc_S20955C28[0]), // expected_vtbl_contents
  &(vtt_S20955C28[0]), // expected_vtt_contents
  ABISELECT(392,272), // object size
  NSPAIRA(_ZTI9S20955C28),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20955C28),42, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20955C28),22, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names72,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20955C26  : virtual S20955C25 , S20955C27 , S20955C28 , S2398C25_nt {
  void *s20955c26f0[5];
  virtual  ~S20955C26(); // _ZN9S20955C26D2Ev
  S20955C26(); // tgen
};
//SIG(-1 S20955C26) C1{ VBC2{ VBC3{ BC4{ m} BC5{ BC6{ m FL Fc:0} BC4} vd FC7{}} vd} BC8{ VBC6 BC9{ VBC10{ m} BC5 VBC4 Fi} FL:1} BC11{ VBC12{ VBC5 BC13{ BC5 BC14{ VBC4 BC6} VBC9 Fp} VBC15{ m} BC16{ BC9} FC2[6] Fp} VBC13 VBC17{ VBC18{ VBC5 VBC6 BC4} BC3 Fi[8]} vd} BC19{ m Fi Fc} vd Fp[5]}


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

static void Test_S20955C26()
{
  extern Class_Descriptor cd_S20955C26;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(63,86)];
    init_test(&cd_S20955C26, buf);
    S20955C26 *dp, &lv = *(dp=new (buf) S20955C26());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(496,340), "sizeof(S20955C26)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20955C26)");
    /*is_ambiguous_... S20955C26::S20955C7 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C7*), ABISELECT(88,56), "S20955C26");
    /*is_ambiguous_... S20955C26::S20955C7 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C7*), ABISELECT(96,60), "S20955C26");
    /*is_ambiguous_... S20955C26::S20955C7 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C7*), ABISELECT(96,60), "S20955C26");
    /*is_ambiguous_... S20955C26::S20955C7 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C7*), ABISELECT(96,60), "S20955C26");
    check_base_class_offset(lv, (S20955C7*)(S20955C25*), ABISELECT(88,56), "S20955C26");
    check_base_class_offset(lv, (S20955C25*), ABISELECT(80,52), "S20955C26");
    /*is_ambiguous_... S20955C27::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C27*), ABISELECT(112,72), "S20955C26");
    /*is_ambiguous_... S20955C3::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C3*), ABISELECT(112,72), "S20955C26");
    check_base_class_offset(lv, (S2264C28*)(S20955C12*)(S20955C27*), 0, "S20955C26");
    /*is_ambiguous_... S20955C26::S20955C12 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20955C12*), 0, "S20955C26");
    check_base_class_offset(lv, (S2264C28*)(S20955C12*)(S20955C24*)(S20955C21*), 0, "S20955C26");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C12*)(S20955C27*), ABISELECT(8,4), "S20955C26");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C12*)(S20955C27*), ABISELECT(8,4), "S20955C26");
    check_base_class_offset(lv, (S20955C4*)(S20955C12*)(S20955C27*), ABISELECT(8,4), "S20955C26");
    /*is_ambiguous_... S20955C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C12*)(S20955C27*), 0, "S20955C26");
    check_base_class_offset(lv, (S2264C38*)(S20955C20*)(S20955C22*)(S20955C21*), 0, "S20955C26");
    /*is_ambiguous_... S20955C26::S20955C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C12*), 0, "S20955C26");
    /*is_ambiguous_... S20955C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C12*)(S20955C24*)(S20955C21*), 0, "S20955C26");
    /*is_ambiguous_... S20955C26::S20955C22 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C20*)(S20955C22*), 0, "S20955C26");
    check_base_class_offset(lv, (S20955C12*)(S20955C27*), 0, "S20955C26");
    check_base_class_offset(lv, (S20955C27*), 0, "S20955C26");
    /*is_ambiguous_... S20955C26::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*), ABISELECT(376,244), "S20955C26");
    /*is_ambiguous_... S20955C26::S20955C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*), ABISELECT(376,244), "S20955C26");
    /*is_ambiguous_... S20955C21::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C21*), ABISELECT(376,244), "S20955C26");
    check_base_class_offset(lv, (S20955C4*)(S20955C3*), ABISELECT(376,244), "S20955C26");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C22*)(S20955C21*), ABISELECT(136,92), "S20955C26");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C22*)(S20955C21*), ABISELECT(136,92), "S20955C26");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C22*)(S20955C21*), ABISELECT(136,92), "S20955C26");
    check_base_class_offset(lv, (S20955C5*)(S20955C20*)(S20955C22*)(S20955C21*), ABISELECT(128,84), "S20955C26");
    check_base_class_offset(lv, (S20955C20*)(S20955C22*)(S20955C21*), ABISELECT(120,80), "S20955C26");
    /*is_ambiguous_... S20955C26::S20955C12 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C12*), ABISELECT(392,256), "S20955C26");
    /*is_ambiguous_... S20955C26::S20955C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C12*), ABISELECT(392,256), "S20955C26");
    /*is_ambiguous_... S20955C26::S20955C12 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C12*), ABISELECT(392,256), "S20955C26");
    check_base_class_offset(lv, (S20955C12*)(S20955C22*)(S20955C21*), ABISELECT(384,252), "S20955C26");
    /*is_ambiguous_... S20955C26::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C12*)(S20955C22*), ABISELECT(384,252), "S20955C26");
    check_base_class_offset(lv, (S20955C22*)(S20955C21*), ABISELECT(120,80), "S20955C26");
    check_base_class_offset(lv, (S2264C24*)(S20955C21*), 0, "S20955C26");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C12*)(S20955C24*)(S20955C21*), ABISELECT(160,108), "S20955C26");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C12*)(S20955C24*)(S20955C21*), ABISELECT(160,108), "S20955C26");
    check_base_class_offset(lv, (S20955C4*)(S20955C12*)(S20955C24*)(S20955C21*), ABISELECT(160,108), "S20955C26");
    check_base_class_offset(lv, (S20955C12*)(S20955C24*)(S20955C21*), ABISELECT(152,104), "S20955C26");
    check_base_class_offset(lv, (S20955C24*)(S20955C21*), ABISELECT(152,104), "S20955C26");
    check_base_class_offset(lv, (S20955C21*)(S20955C28*), ABISELECT(120,80), "S20955C26");
    /*is_ambiguous_... S20955C26::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C22*), ABISELECT(424,280), "S20955C26");
    /*is_ambiguous_... S20955C26::S20955C22 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C22*), ABISELECT(424,280), "S20955C26");
    /*is_ambiguous_... S20955C26::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C22*), ABISELECT(424,280), "S20955C26");
    /*is_ambiguous_... S20955C26::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C20*)(S20955C22*), ABISELECT(416,272), "S20955C26");
    /*is_ambiguous_... S20955C26::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C20*)(S20955C22*), ABISELECT(408,268), "S20955C26");
    /*is_ambiguous_... S20955C28::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C22*)(S20955C28*), ABISELECT(408,268), "S20955C26");
    /*is_ambiguous_... S20955C3::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C3*), ABISELECT(24,20), "S20955C26");
    check_base_class_offset(lv, (S20955C3*)(S20955C2*), ABISELECT(24,20), "S20955C26");
    /*is_ambiguous_... S20955C7::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C7*)(S20955C2*), ABISELECT(440,292), "S20955C26");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(448,296), "S20955C26");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(448,296), "S20955C26");
    check_base_class_offset(lv, (S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(448,296), "S20955C26");
    check_base_class_offset(lv, (S20955C7*)(S20955C2*), ABISELECT(440,292), "S20955C26");
    check_base_class_offset(lv, (S20955C2*)(S20955C28*), ABISELECT(440,292), "S20955C26");
    check_base_class_offset(lv, (S20955C28*), ABISELECT(24,20), "S20955C26");
    check_base_class_offset(lv, (S2398C25_nt*), ABISELECT(32,24), "S20955C26");
    check_field_offset(lv, s20955c26f0, ABISELECT(40,32), "S20955C26.s20955c26f0");
    test_class_info(&lv, &cd_S20955C26);
    dp->~S20955C26();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20955C26(Test_S20955C26, "S20955C26", ABISELECT(496,340));

#else // __cplusplus

extern void _ZN9S20955C26C1Ev();
extern void _ZN9S20955C26D2Ev();
Name_Map name_map_S20955C26[] = {
  NSPAIR(_ZN9S20955C26C1Ev),
  NSPAIR(_ZN9S20955C26D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C7;
extern VTBL_ENTRY _ZTI8S20955C7[];
extern  VTBL_ENTRY _ZTV8S20955C7[];
extern Class_Descriptor cd_S20955C25;
extern VTBL_ENTRY _ZTI9S20955C25[];
extern  VTBL_ENTRY _ZTV9S20955C25[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C25[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C12;
extern VTBL_ENTRY _ZTI9S20955C12[];
extern  VTBL_ENTRY _ZTV9S20955C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C12[];
extern Class_Descriptor cd_S20955C27;
extern VTBL_ENTRY _ZTI9S20955C27[];
extern  VTBL_ENTRY _ZTV9S20955C27[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C27[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20955C20;
extern VTBL_ENTRY _ZTI9S20955C20[];
extern  VTBL_ENTRY _ZTV9S20955C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C20[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C12;
extern VTBL_ENTRY _ZTI9S20955C12[];
extern  VTBL_ENTRY _ZTV9S20955C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C12[];
extern Class_Descriptor cd_S20955C22;
extern VTBL_ENTRY _ZTI9S20955C22[];
extern  VTBL_ENTRY _ZTV9S20955C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C22[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C12;
extern VTBL_ENTRY _ZTI9S20955C12[];
extern  VTBL_ENTRY _ZTV9S20955C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C12[];
extern Class_Descriptor cd_S20955C24;
extern VTBL_ENTRY _ZTI9S20955C24[];
extern  VTBL_ENTRY _ZTV9S20955C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C24[];
extern Class_Descriptor cd_S20955C21;
extern VTBL_ENTRY _ZTI9S20955C21[];
extern  VTBL_ENTRY _ZTV9S20955C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C21[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20955C20;
extern VTBL_ENTRY _ZTI9S20955C20[];
extern  VTBL_ENTRY _ZTV9S20955C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C20[];
extern Class_Descriptor cd_S20955C22;
extern VTBL_ENTRY _ZTI9S20955C22[];
extern  VTBL_ENTRY _ZTV9S20955C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C22[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C3;
extern VTBL_ENTRY _ZTI8S20955C3[];
extern  VTBL_ENTRY _ZTV8S20955C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C3[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C7;
extern VTBL_ENTRY _ZTI8S20955C7[];
extern  VTBL_ENTRY _ZTV8S20955C7[];
extern Class_Descriptor cd_S20955C2;
extern VTBL_ENTRY _ZTI8S20955C2[];
extern  VTBL_ENTRY _ZTV8S20955C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C2[];
extern Class_Descriptor cd_S20955C28;
extern VTBL_ENTRY _ZTI9S20955C28[];
extern  VTBL_ENTRY _ZTV9S20955C28[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C28[];
extern Class_Descriptor cd_S2398C25_nt;
extern VTBL_ENTRY _ZTI11S2398C25_nt[];
static Base_Class bases_S20955C26[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    ABISELECT(88,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
    4, //immediately_derived
  0, 0},
  {&cd_S20955C5,    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
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    -1, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20955C4,    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
    -1, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20955C7,    ABISELECT(88,56), //bcp->offset
    36, //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
    5, //immediately_derived
  0, 1},
  {&cd_S20955C25,    ABISELECT(80,52), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20955C5,    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
    13, //immediately_derived
  0, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    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
    10, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    10, //immediately_derived
  0, 0},
  {&cd_S20955C4,    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
    12, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    13, //immediately_derived
  0, 0},
  {&cd_S20955C27,    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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20955C5,    ABISELECT(376,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(376,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C4,    ABISELECT(376,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20955C5,    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
    19, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    19, //immediately_derived
  0, 0},
  {&cd_S20955C4,    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
    26, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(128,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
    21, //immediately_derived
  0, 0},
  {&cd_S20955C20,    ABISELECT(120,80), //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
    4, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(392,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(392,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C4,    ABISELECT(392,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C12,    ABISELECT(384,252), //bcp->offset
    52, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S20955C22,    ABISELECT(120,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20955C5,    ABISELECT(160,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
    30, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(160,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
    30, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(160,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
    31, //immediately_derived
  0, 0},
  {&cd_S20955C12,    ABISELECT(152,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    32, //immediately_derived
  0, 0},
  {&cd_S20955C24,    ABISELECT(152,104), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S20955C21,    ABISELECT(120,80), //bcp->offset
    41, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    48, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(424,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
    36, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(424,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
    36, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(424,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
    39, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(416,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S20955C20,    ABISELECT(408,268), //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
    9, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S20955C22,    ABISELECT(408,268), //bcp->offset
    56, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    48, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(24,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
    41, //immediately_derived
  0, 0},
  {&cd_S20955C3,    ABISELECT(24,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    47, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(440,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
    46, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(448,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
    45, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(448,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
    45, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(448,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
    46, //immediately_derived
  0, 0},
  {&cd_S20955C7,    ABISELECT(440,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
    12, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S20955C2,    ABISELECT(440,292), //bcp->offset
    61, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    48, //immediately_derived
  0, 1},
  {&cd_S20955C28,    ABISELECT(24,20), //bcp->offset
    16, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2398C25_nt,    ABISELECT(32,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, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20955C26[];
extern void _ZN9S20955C26D1Ev();
extern void _ZN9S20955C26D0Ev();
extern void ABISELECT(_ZThn24_N9S20955C26D1Ev,_ZThn20_N9S20955C26D1Ev)();
extern void ABISELECT(_ZThn24_N9S20955C26D0Ev,_ZThn20_N9S20955C26D0Ev)();
extern void ABISELECT(_ZTv0_n32_N9S20955C26D1Ev,_ZTv0_n16_N9S20955C26D1Ev)();
extern void ABISELECT(_ZThn80_N9S20955C26D1Ev,_ZThn52_N9S20955C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20955C26D0Ev,_ZTv0_n16_N9S20955C26D0Ev)();
extern void ABISELECT(_ZThn80_N9S20955C26D0Ev,_ZThn52_N9S20955C26D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20955C26D1Ev,_ZTv0_n12_N9S20955C26D1Ev)();
extern void ABISELECT(_ZThn88_N9S20955C26D1Ev,_ZThn56_N9S20955C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20955C26D0Ev,_ZTv0_n12_N9S20955C26D0Ev)();
extern void ABISELECT(_ZThn88_N9S20955C26D0Ev,_ZThn56_N9S20955C26D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20955C26D1Ev,_ZTv0_n24_N9S20955C26D1Ev)();
extern void ABISELECT(_ZThn440_N9S20955C26D1Ev,_ZThn292_N9S20955C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20955C26D0Ev,_ZTv0_n24_N9S20955C26D0Ev)();
extern void ABISELECT(_ZThn440_N9S20955C26D0Ev,_ZThn292_N9S20955C26D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20955C26[] = {
  ABISELECT(24,20),
  ABISELECT(440,292),
  ABISELECT(408,268),
  0,
  ABISELECT(384,252),
  ABISELECT(376,244),
  ABISELECT(120,80),
  ABISELECT(88,56),
  ABISELECT(80,52),
  ABISELECT(112,72),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C26[0]),
  (VTBL_ENTRY)&_ZN9S20955C26D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C26D0Ev,
  0,
  ABISELECT(416,272),
  ABISELECT(384,248),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(360,232),
  ABISELECT(-24,-20),
  ABISELECT(96,60),
  ABISELECT(88,52),
  ABISELECT(352,224),
  ABISELECT(-24,-20),
  (VTBL_ENTRY)&(_ZTI9S20955C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N9S20955C26D1Ev,_ZThn20_N9S20955C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N9S20955C26D0Ev,_ZThn20_N9S20955C26D0Ev),
  ABISELECT(-80,-52),
  ABISELECT(8,4),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI9S20955C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20955C26D1Ev,_ZTv0_n16_N9S20955C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20955C26D0Ev,_ZTv0_n16_N9S20955C26D0Ev),
  ABISELECT(-88,-56),
  ABISELECT(-88,-56),
  (VTBL_ENTRY)&(_ZTI9S20955C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20955C26D1Ev,_ZTv0_n12_N9S20955C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20955C26D0Ev,_ZTv0_n12_N9S20955C26D0Ev),
  ABISELECT(-120,-80),
  ABISELECT(256,164),
  ABISELECT(-120,-80),
  ABISELECT(264,172),
  ABISELECT(-120,-80),
  ABISELECT(-120,-80),
  (VTBL_ENTRY)&(_ZTI9S20955C26[0]),
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  (VTBL_ENTRY)&(_ZTI9S20955C26[0]),
  ABISELECT(-384,-252),
  ABISELECT(-384,-252),
  ABISELECT(-384,-252),
  (VTBL_ENTRY)&(_ZTI9S20955C26[0]),
  ABISELECT(-408,-268),
  ABISELECT(-24,-16),
  ABISELECT(-408,-268),
  ABISELECT(-408,-268),
  (VTBL_ENTRY)&(_ZTI9S20955C26[0]),
  ABISELECT(-440,-292),
  ABISELECT(-328,-220),
  ABISELECT(-64,-48),
  ABISELECT(-416,-272),
  ABISELECT(-440,-292),
  (VTBL_ENTRY)&(_ZTI9S20955C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C26D1Ev,_ZTv0_n24_N9S20955C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C26D0Ev,_ZTv0_n24_N9S20955C26D0Ev),
};
extern VTBL_ENTRY _ZTV9S20955C26[];
static  VTBL_ENTRY _tg__ZTV9S20955C27__9S20955C26[] = {
  ABISELECT(112,72),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C27[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C129S20955C27__9S20955C26[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C12[0]),
};
extern void _ZN9S20955C28D1Ev();
extern void _ZN9S20955C28D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20955C28__9S20955C26[] = {
  0,
  ABISELECT(416,272),
  ABISELECT(384,248),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(360,232),
  ABISELECT(-24,-20),
  ABISELECT(96,60),
  ABISELECT(88,52),
  ABISELECT(352,224),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C28[0]),
  (VTBL_ENTRY)&_ZN9S20955C28D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C28D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20955C21__9S20955C28__9S20955C26[] = {
  ABISELECT(-120,-80),
  ABISELECT(256,164),
  ABISELECT(-120,-80),
  ABISELECT(264,172),
  ABISELECT(-120,-80),
  ABISELECT(-96,-60),
  (VTBL_ENTRY)&(_ZTI9S20955C28[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C28__9S20955C26[] = {
  ABISELECT(-384,-252),
  ABISELECT(-384,-252),
  ABISELECT(-360,-232),
  (VTBL_ENTRY)&(_ZTI9S20955C28[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C249S20955C21__9S20955C28__9S20955C26[] = {
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI9S20955C28[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C22__A1__9S20955C28__9S20955C26[] = {
  ABISELECT(-408,-268),
  ABISELECT(-24,-16),
  ABISELECT(-408,-268),
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI9S20955C28[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20955C28D1Ev,_ZTv0_n24_N9S20955C28D1Ev)();
extern void ABISELECT(_ZThn416_N9S20955C28D1Ev,_ZThn272_N9S20955C28D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20955C28D0Ev,_ZTv0_n24_N9S20955C28D0Ev)();
extern void ABISELECT(_ZThn416_N9S20955C28D0Ev,_ZThn272_N9S20955C28D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C28__9S20955C26[] = {
  ABISELECT(-416,-272),
  ABISELECT(-328,-220),
  ABISELECT(-64,-48),
  ABISELECT(-416,-272),
  ABISELECT(-416,-272),
  (VTBL_ENTRY)&(_ZTI9S20955C28[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C28D1Ev,_ZTv0_n24_N9S20955C28D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C28D0Ev,_ZTv0_n24_N9S20955C28D0Ev),
};
extern void _ZN9S20955C25D1Ev();
extern void _ZN9S20955C25D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20955C25__9S20955C26[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C25[0]),
  (VTBL_ENTRY)&_ZN9S20955C25D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C25D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20955C25D1Ev,_ZTv0_n12_N9S20955C25D1Ev)();
extern void ABISELECT(_ZThn8_N9S20955C25D1Ev,_ZThn4_N9S20955C25D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20955C25D0Ev,_ZTv0_n12_N9S20955C25D0Ev)();
extern void ABISELECT(_ZThn8_N9S20955C25D0Ev,_ZThn4_N9S20955C25D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20955C7__9S20955C25__9S20955C26[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20955C25[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20955C25D1Ev,_ZTv0_n12_N9S20955C25D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20955C25D0Ev,_ZTv0_n12_N9S20955C25D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20955C21__9S20955C26[] = {
  ABISELECT(-120,-80),
  ABISELECT(256,164),
  ABISELECT(-120,-80),
  ABISELECT(264,172),
  ABISELECT(-120,-80),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C21[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C229S20955C21__9S20955C26[] = {
  ABISELECT(-120,-80),
  ABISELECT(264,172),
  ABISELECT(-120,-80),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C209S20955C229S20955C21__9S20955C26[] = {
  ABISELECT(-120,-80),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C229S20955C21__9S20955C26[] = {
  ABISELECT(-384,-252),
  ABISELECT(-384,-252),
  ABISELECT(-264,-172),
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C249S20955C21__9S20955C26[] = {
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C24[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C129S20955C249S20955C21__A2__9S20955C26[] = {
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C21__9S20955C26[] = {
  ABISELECT(-384,-252),
  ABISELECT(-384,-252),
  ABISELECT(-264,-172),
  (VTBL_ENTRY)&(_ZTI9S20955C21[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C24__9S20955C21__9S20955C26[] = {
  ABISELECT(-152,-104),
  ABISELECT(-152,-104),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI9S20955C21[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__A1__9S20955C26[] = {
  ABISELECT(-384,-252),
  ABISELECT(-384,-252),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C22__A1__9S20955C26[] = {
  ABISELECT(-408,-268),
  ABISELECT(-24,-16),
  ABISELECT(-408,-268),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C209S20955C22__A1__9S20955C26[] = {
  ABISELECT(-408,-268),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C22__A1__9S20955C26[] = {
  ABISELECT(-384,-252),
  ABISELECT(-384,-252),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
extern void _ZN8S20955C2D1Ev();
extern void _ZN8S20955C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C26[] = {
  ABISELECT(-328,-220),
  ABISELECT(-64,-48),
  ABISELECT(-416,-272),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C2[0]),
  (VTBL_ENTRY)&_ZN8S20955C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20955C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__8S20955C2__9S20955C26[] = {
  ABISELECT(88,52),
  ABISELECT(352,224),
  ABISELECT(416,272),
  (VTBL_ENTRY)&(_ZTI8S20955C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__9S20955C26[] = {
  ABISELECT(88,52),
  ABISELECT(352,224),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C3[0]),
};
static  VTT_ENTRY vtt_S20955C26[] = {
  {&(_ZTV9S20955C26[14]),  14,69},
  {&(_tg__ZTV9S20955C27__9S20955C26[5]),  5,5},
  {&(_tg__ZTV9S20955C129S20955C27__9S20955C26[4]),  4,4},
  {&(_tg__ZTV9S20955C28__9S20955C26[12]),  12,14},
  {&(_tg__ZTV9S20955C21__9S20955C28__9S20955C26[7]),  7,7},
  {&(_tg__ZTV9S20955C12__9S20955C28__9S20955C26[4]),  4,4},
  {&(_tg__ZTV9S20955C249S20955C21__9S20955C28__9S20955C26[4]),  4,4},
  {&(_tg__ZTV9S20955C22__A1__9S20955C28__9S20955C26[5]),  5,5},
  {&(_tg__ZTV8S20955C2__9S20955C28__9S20955C26[6]),  6,8},
  {&(_tg__ZTV9S20955C28__9S20955C26[12]),  12,14},
  {&(_ZTV9S20955C26[34]),  34,69},
  {&(_ZTV9S20955C26[39]),  39,69},
  {&(_ZTV9S20955C26[28]),  28,69},
  {&(_ZTV9S20955C26[48]),  48,69},
  {&(_ZTV9S20955C26[56]),  56,69},
  {&(_ZTV9S20955C26[52]),  52,69},
  {&(_ZTV9S20955C26[61]),  61,69},
  {&(_ZTV9S20955C26[67]),  67,69},
  {&(_ZTV9S20955C26[28]),  28,69},
  {&(_tg__ZTV9S20955C25__9S20955C26[3]),  3,5},
  {&(_tg__ZTV8S20955C7__9S20955C25__9S20955C26[3]),  3,5},
  {&(_tg__ZTV9S20955C21__9S20955C26[7]),  7,7},
  {&(_tg__ZTV9S20955C229S20955C21__9S20955C26[5]),  5,5},
  {&(_tg__ZTV9S20955C209S20955C229S20955C21__9S20955C26[3]),  3,3},
  {&(_tg__ZTV9S20955C12__9S20955C229S20955C21__9S20955C26[4]),  4,4},
  {&(_tg__ZTV9S20955C249S20955C21__9S20955C26[4]),  4,4},
  {&(_tg__ZTV9S20955C129S20955C249S20955C21__A2__9S20955C26[4]),  4,4},
  {&(_tg__ZTV9S20955C12__9S20955C21__9S20955C26[4]),  4,4},
  {&(_tg__ZTV9S20955C24__9S20955C21__9S20955C26[4]),  4,4},
  {&(_tg__ZTV9S20955C12__A1__9S20955C26[4]),  4,4},
  {&(_tg__ZTV9S20955C22__A1__9S20955C26[5]),  5,5},
  {&(_tg__ZTV9S20955C209S20955C22__A1__9S20955C26[3]),  3,3},
  {&(_tg__ZTV9S20955C12__9S20955C22__A1__9S20955C26[4]),  4,4},
  {&(_tg__ZTV8S20955C2__9S20955C26[5]),  5,7},
  {&(_tg__ZTV8S20955C3__8S20955C2__9S20955C26[4]),  4,4},
  {&(_tg__ZTV8S20955C3__9S20955C26[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20955C26[];
extern  VTBL_ENTRY _ZTV9S20955C26[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C26[];
static VTBL_ENTRY alt_thunk_names73[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20955C25D0Ev,_ZTv0_n12_N9S20955C25D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20955C25D0Ev,_ZThn4_N9S20955C25D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20955C25D1Ev,_ZTv0_n12_N9S20955C25D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20955C25D1Ev,_ZThn4_N9S20955C25D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C28D0Ev,_ZTv0_n24_N9S20955C28D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N9S20955C28D0Ev,_ZThn272_N9S20955C28D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C28D1Ev,_ZTv0_n24_N9S20955C28D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn416_N9S20955C28D1Ev,_ZThn272_N9S20955C28D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C26D0Ev,_ZTv0_n24_N9S20955C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N9S20955C26D0Ev,_ZThn292_N9S20955C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C26D1Ev,_ZTv0_n24_N9S20955C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N9S20955C26D1Ev,_ZThn292_N9S20955C26D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20955C26D0Ev,_ZTv0_n12_N9S20955C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S20955C26D0Ev,_ZThn56_N9S20955C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20955C26D1Ev,_ZTv0_n12_N9S20955C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S20955C26D1Ev,_ZThn56_N9S20955C26D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20955C26D0Ev,_ZTv0_n16_N9S20955C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20955C26D0Ev,_ZThn52_N9S20955C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20955C26D1Ev,_ZTv0_n16_N9S20955C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20955C26D1Ev,_ZThn52_N9S20955C26D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20955C26 = {  "S20955C26", // class name
  bases_S20955C26, 50,
  &(vtc_S20955C26[0]), // expected_vtbl_contents
  &(vtt_S20955C26[0]), // expected_vtt_contents
  ABISELECT(496,340), // object size
  NSPAIRA(_ZTI9S20955C26),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20955C26),69, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20955C26),36, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names73,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20955C30  : S20955C18 , S20955C22 , S20955C20 {
  ~S20955C30(); // tgen
  S20955C30(); // tgen
};
//SIG(-1 S20955C30) C1{ BC2{ VBC3{ BC4{ m FL Fc:0} BC5{ m}} BC6{ VBC7{ VBC8{ VBC3 VBC4 BC5} BC9{ BC5 BC3 vd FC10{}} Fi[8]} vd} vd FC7[2]} BC11{ BC3 BC12{ VBC5 BC4} VBC13{ VBC14{ m} BC3 VBC5 Fi} Fp} BC12}


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

static void Test_S20955C30()
{
  extern Class_Descriptor cd_S20955C30;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,65)];
    init_test(&cd_S20955C30, buf);
    S20955C30 *dp, &lv = *(dp=new (buf) S20955C30());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,256), "sizeof(S20955C30)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20955C30)");
    /*is_ambiguous_... S20955C30::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*), ABISELECT(216,176), "S20955C30");
    /*is_ambiguous_... S20955C30::S20955C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*), ABISELECT(216,176), "S20955C30");
    /*is_ambiguous_... S20955C18::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C18*), ABISELECT(216,176), "S20955C30");
    check_base_class_offset(lv, (S20955C4*)(S20955C3*), ABISELECT(216,176), "S20955C30");
    /*is_ambiguous_... S20955C3::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C3*), ABISELECT(280,232), "S20955C30");
    /*is_ambiguous_... S20955C3::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C3*), 0, "S20955C30");
    check_base_class_offset(lv, (S20955C3*)(S20955C2*), 0, "S20955C30");
    /*is_ambiguous_... S20955C7::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C7*)(S20955C2*), ABISELECT(224,184), "S20955C30");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(232,188), "S20955C30");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(232,188), "S20955C30");
    check_base_class_offset(lv, (S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(232,188), "S20955C30");
    check_base_class_offset(lv, (S20955C7*)(S20955C2*), ABISELECT(224,184), "S20955C30");
    check_base_class_offset(lv, (S20955C2*)(S20955C19*)(S20955C18*), ABISELECT(224,184), "S20955C30");
    check_base_class_offset(lv, (S20955C19*)(S20955C18*), 0, "S20955C30");
    check_base_class_offset(lv, (S20955C18*), 0, "S20955C30");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C22*), ABISELECT(184,152), "S20955C30");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C22*), ABISELECT(184,152), "S20955C30");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C22*), ABISELECT(184,152), "S20955C30");
    check_base_class_offset(lv, (S2264C38*)(S20955C20*)(S20955C22*), ABISELECT(288,240), "S20955C30");
    /*is_ambiguous_... S20955C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C12*), ABISELECT(288,240), "S20955C30");
    /*is_ambiguous_... S20955C30::S20955C20 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C20*), ABISELECT(288,240), "S20955C30");
    check_base_class_offset(lv, (S20955C5*)(S20955C20*)(S20955C22*), ABISELECT(176,144), "S20955C30");
    check_base_class_offset(lv, (S20955C20*)(S20955C22*), ABISELECT(168,140), "S20955C30");
    check_base_class_offset(lv, (S2264C28*)(S20955C12*), 0, "S20955C30");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C12*), ABISELECT(296,244), "S20955C30");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C12*), ABISELECT(296,244), "S20955C30");
    check_base_class_offset(lv, (S20955C4*)(S20955C12*), ABISELECT(296,244), "S20955C30");
    check_base_class_offset(lv, (S20955C12*)(S20955C22*), ABISELECT(288,240), "S20955C30");
    check_base_class_offset(lv, (S20955C22*), ABISELECT(168,140), "S20955C30");
    /*is_ambiguous_... S20955C30::S20955C20 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C20*), ABISELECT(208,168), "S20955C30");
    /*is_ambiguous_... S20955C30::S20955C20 */ AMB_check_base_class_offset(lv, (S20955C20*), ABISELECT(200,164), "S20955C30");
    test_class_info(&lv, &cd_S20955C30);
    dp->~S20955C30();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20955C30(Test_S20955C30, "S20955C30", ABISELECT(312,256));

#else // __cplusplus

extern void _ZN9S20955C30C1Ev();
extern void _ZN9S20955C30D1Ev();
Name_Map name_map_S20955C30[] = {
  NSPAIR(_ZN9S20955C30C1Ev),
  NSPAIR(_ZN9S20955C30D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C3;
extern VTBL_ENTRY _ZTI8S20955C3[];
extern  VTBL_ENTRY _ZTV8S20955C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C3[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C7;
extern VTBL_ENTRY _ZTI8S20955C7[];
extern  VTBL_ENTRY _ZTV8S20955C7[];
extern Class_Descriptor cd_S20955C2;
extern VTBL_ENTRY _ZTI8S20955C2[];
extern  VTBL_ENTRY _ZTV8S20955C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C2[];
extern Class_Descriptor cd_S20955C19;
extern VTBL_ENTRY _ZTI9S20955C19[];
extern  VTBL_ENTRY _ZTV9S20955C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C19[];
extern Class_Descriptor cd_S20955C18;
extern VTBL_ENTRY _ZTI9S20955C18[];
extern  VTBL_ENTRY _ZTV9S20955C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C18[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20955C20;
extern VTBL_ENTRY _ZTI9S20955C20[];
extern  VTBL_ENTRY _ZTV9S20955C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C20[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C12;
extern VTBL_ENTRY _ZTI9S20955C12[];
extern  VTBL_ENTRY _ZTV9S20955C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C12[];
extern Class_Descriptor cd_S20955C22;
extern VTBL_ENTRY _ZTI9S20955C22[];
extern  VTBL_ENTRY _ZTV9S20955C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C22[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20955C20;
extern VTBL_ENTRY _ZTI9S20955C20[];
extern  VTBL_ENTRY _ZTV9S20955C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C20[];
static Base_Class bases_S20955C30[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(216,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(216,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
    2, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(216,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
    5, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(280,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
    5, //immediately_derived
  0, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(224,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
    10, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(232,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, 0},
  {&cd_S2264C38,    ABISELECT(232,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, 0},
  {&cd_S20955C4,    ABISELECT(232,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
    10, //immediately_derived
  0, 0},
  {&cd_S20955C7,    ABISELECT(224,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
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20955C2,    ABISELECT(224,184), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20955C19,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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
    13, //immediately_derived
  0, 0},
  {&cd_S20955C18,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20955C5,    ABISELECT(184,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
    16, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(184,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
    16, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(184,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
    25, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(288,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    ABISELECT(176,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
    19, //immediately_derived
  0, 0},
  {&cd_S20955C20,    ABISELECT(168,140), //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
    7, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20955C5,    ABISELECT(296,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(296,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C4,    ABISELECT(296,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C12,    ABISELECT(288,240), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //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
    25, //immediately_derived
  0, 1},
  {&cd_S20955C22,    ABISELECT(168,140), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20955C5,    ABISELECT(208,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
    27, //immediately_derived
  0, 0},
  {&cd_S20955C20,    ABISELECT(200,164), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20955C30[];
extern void _ZN9S20955C30D1Ev();
extern void _ZN9S20955C30D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S20955C30D1Ev,_ZTv0_n24_N9S20955C30D1Ev)();
extern void ABISELECT(_ZThn224_N9S20955C30D1Ev,_ZThn184_N9S20955C30D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20955C30D0Ev,_ZTv0_n24_N9S20955C30D0Ev)();
extern void ABISELECT(_ZThn224_N9S20955C30D0Ev,_ZThn184_N9S20955C30D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20955C30[] = {
  0,
  ABISELECT(288,240),
  ABISELECT(288,240),
  0,
  ABISELECT(224,184),
  ABISELECT(280,232),
  ABISELECT(216,176),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C30[0]),
  (VTBL_ENTRY)&_ZN9S20955C30D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C30D0Ev,
  ABISELECT(-168,-140),
  ABISELECT(120,100),
  ABISELECT(120,100),
  ABISELECT(-168,-140),
  (VTBL_ENTRY)&(_ZTI9S20955C30[0]),
  ABISELECT(88,76),
  ABISELECT(-200,-164),
  (VTBL_ENTRY)&(_ZTI9S20955C30[0]),
  ABISELECT(-224,-184),
  ABISELECT(56,48),
  -8,
  ABISELECT(-224,-184),
  ABISELECT(-224,-184),
  (VTBL_ENTRY)&(_ZTI9S20955C30[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C30D1Ev,_ZTv0_n24_N9S20955C30D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C30D0Ev,_ZTv0_n24_N9S20955C30D0Ev),
  0,
  ABISELECT(-288,-240),
  ABISELECT(-288,-240),
  (VTBL_ENTRY)&(_ZTI9S20955C30[0]),
};
extern VTBL_ENTRY _ZTV9S20955C30[];
extern void _ZN9S20955C18D1Ev();
extern void _ZN9S20955C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20955C18__9S20955C30[] = {
  0,
  ABISELECT(224,184),
  ABISELECT(280,232),
  ABISELECT(216,176),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C18[0]),
  (VTBL_ENTRY)&_ZN9S20955C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C18D0Ev,
};
extern void _ZN9S20955C19D1Ev();
extern void _ZN9S20955C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20955C199S20955C18__9S20955C30[] = {
  0,
  ABISELECT(224,184),
  ABISELECT(280,232),
  ABISELECT(216,176),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C19[0]),
  (VTBL_ENTRY)&_ZN9S20955C19D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C19D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20955C19D1Ev,_ZTv0_n24_N9S20955C19D1Ev)();
extern void ABISELECT(_ZThn224_N9S20955C19D1Ev,_ZThn184_N9S20955C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20955C19D0Ev,_ZTv0_n24_N9S20955C19D0Ev)();
extern void ABISELECT(_ZThn224_N9S20955C19D0Ev,_ZThn184_N9S20955C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C199S20955C18__9S20955C30[] = {
  ABISELECT(-224,-184),
  ABISELECT(56,48),
  -8,
  ABISELECT(-224,-184),
  ABISELECT(-224,-184),
  (VTBL_ENTRY)&(_ZTI9S20955C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C19D1Ev,_ZTv0_n24_N9S20955C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C19D0Ev,_ZTv0_n24_N9S20955C19D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20955C18D1Ev,_ZTv0_n24_N9S20955C18D1Ev)();
extern void ABISELECT(_ZThn224_N9S20955C18D1Ev,_ZThn184_N9S20955C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20955C18D0Ev,_ZTv0_n24_N9S20955C18D0Ev)();
extern void ABISELECT(_ZThn224_N9S20955C18D0Ev,_ZThn184_N9S20955C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C18__9S20955C30[] = {
  ABISELECT(-224,-184),
  ABISELECT(56,48),
  -8,
  ABISELECT(-224,-184),
  ABISELECT(-224,-184),
  (VTBL_ENTRY)&(_ZTI9S20955C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C18D1Ev,_ZTv0_n24_N9S20955C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C18D0Ev,_ZTv0_n24_N9S20955C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20955C22__9S20955C30[] = {
  ABISELECT(-168,-140),
  ABISELECT(120,100),
  ABISELECT(120,100),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C209S20955C22__9S20955C30[] = {
  ABISELECT(120,100),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C22__9S20955C30[] = {
  0,
  ABISELECT(-288,-240),
  ABISELECT(-120,-100),
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C20__A1__9S20955C30[] = {
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C20[0]),
};
extern void _ZN8S20955C2D1Ev();
extern void _ZN8S20955C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C30[] = {
  ABISELECT(56,48),
  -8,
  ABISELECT(-224,-184),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C2[0]),
  (VTBL_ENTRY)&_ZN8S20955C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20955C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__8S20955C2__9S20955C30[] = {
  ABISELECT(280,232),
  ABISELECT(216,176),
  ABISELECT(224,184),
  (VTBL_ENTRY)&(_ZTI8S20955C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__9S20955C30[] = {
  ABISELECT(280,232),
  ABISELECT(216,176),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C3[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C30[] = {
  0,
  ABISELECT(-288,-240),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C12[0]),
};
static  VTT_ENTRY vtt_S20955C30[] = {
  {&(_ZTV9S20955C30[9]),  9,31},
  {&(_tg__ZTV9S20955C18__9S20955C30[6]),  6,8},
  {&(_tg__ZTV9S20955C199S20955C18__9S20955C30[6]),  6,8},
  {&(_tg__ZTV8S20955C2__9S20955C199S20955C18__9S20955C30[6]),  6,8},
  {&(_tg__ZTV9S20955C199S20955C18__9S20955C30[6]),  6,8},
  {&(_tg__ZTV8S20955C2__9S20955C18__9S20955C30[6]),  6,8},
  {&(_tg__ZTV9S20955C18__9S20955C30[6]),  6,8},
  {&(_tg__ZTV9S20955C22__9S20955C30[5]),  5,5},
  {&(_tg__ZTV9S20955C209S20955C22__9S20955C30[3]),  3,3},
  {&(_tg__ZTV9S20955C12__9S20955C22__9S20955C30[4]),  4,4},
  {&(_tg__ZTV9S20955C20__A1__9S20955C30[3]),  3,3},
  {&(_ZTV9S20955C30[25]),  25,31},
  {&(_ZTV9S20955C30[9]),  9,31},
  {&(_ZTV9S20955C30[16]),  16,31},
  {&(_ZTV9S20955C30[31]),  31,31},
  {&(_ZTV9S20955C30[19]),  19,31},
  {&(_tg__ZTV8S20955C2__9S20955C30[5]),  5,7},
  {&(_tg__ZTV8S20955C3__8S20955C2__9S20955C30[4]),  4,4},
  {&(_tg__ZTV8S20955C3__9S20955C30[4]),  4,4},
  {&(_tg__ZTV9S20955C12__9S20955C30[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20955C30[];
extern  VTBL_ENTRY _ZTV9S20955C30[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C30[];
static VTBL_ENTRY alt_thunk_names74[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C18D0Ev,_ZTv0_n24_N9S20955C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20955C18D0Ev,_ZThn184_N9S20955C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C18D1Ev,_ZTv0_n24_N9S20955C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20955C18D1Ev,_ZThn184_N9S20955C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C19D0Ev,_ZTv0_n24_N9S20955C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20955C19D0Ev,_ZThn184_N9S20955C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C19D1Ev,_ZTv0_n24_N9S20955C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20955C19D1Ev,_ZThn184_N9S20955C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C30D0Ev,_ZTv0_n24_N9S20955C30D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20955C30D0Ev,_ZThn184_N9S20955C30D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C30D1Ev,_ZTv0_n24_N9S20955C30D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20955C30D1Ev,_ZThn184_N9S20955C30D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20955C30 = {  "S20955C30", // class name
  bases_S20955C30, 28,
  &(vtc_S20955C30[0]), // expected_vtbl_contents
  &(vtt_S20955C30[0]), // expected_vtt_contents
  ABISELECT(312,256), // object size
  NSPAIRA(_ZTI9S20955C30),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20955C30),31, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20955C30),20, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names74,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20955C29  : virtual S20955C22 , virtual S20955C4 , virtual S20955C16 , S2264C28 , virtual S20955C30 {
  int s20955c29f0;
  virtual  ~S20955C29(); // _ZN9S20955C29D2Ev
  S20955C29(); // tgen
};
//SIG(-1 S20955C29) C1{ VBC2{ BC3{ BC4{ m FL Fc:0} BC5{ m}} BC6{ VBC5 BC4} VBC7{ VBC8{ m} BC3 VBC5 Fi} Fp} VBC3 VBC9{ VBC10{ VBC4} Fi:1} BC8 VBC11{ BC12{ VBC3 BC13{ VBC14{ VBC15{ VBC3 VBC4 BC5} BC16{ BC5 BC3 vd FC17{}} Fi[8]} vd} vd FC14[2]} BC2 BC6} vd Fi}


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

static void Test_S20955C29()
{
  extern Class_Descriptor cd_S20955C29;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(48,75)];
    init_test(&cd_S20955C29, buf);
    S20955C29 *dp, &lv = *(dp=new (buf) S20955C29());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(376,296), "sizeof(S20955C29)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20955C29)");
    /*is_ambiguous_... S20955C29::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C22*), ABISELECT(32,20), "S20955C29");
    /*is_ambiguous_... S20955C29::S20955C22 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C22*), ABISELECT(32,20), "S20955C29");
    /*is_ambiguous_... S20955C29::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C22*), ABISELECT(32,20), "S20955C29");
    /*is_ambiguous_... S20955C29::S20955C22 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C20*)(S20955C22*), 0, "S20955C29");
    /*is_ambiguous_... S20955C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C12*), 0, "S20955C29");
    check_base_class_offset(lv, (S2264C38*)(S20955C20*)(S20955C22*)(S20955C30*), 0, "S20955C29");
    /*is_ambiguous_... S20955C30::S20955C20 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C20*)(S20955C30*), 0, "S20955C29");
    /*is_ambiguous_... S20955C29::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C20*)(S20955C22*), ABISELECT(24,12), "S20955C29");
    /*is_ambiguous_... S20955C29::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C20*)(S20955C22*), ABISELECT(16,8), "S20955C29");
    check_base_class_offset(lv, (S2264C28*)(S20955C12*), ABISELECT(68,48), "S20955C29");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C12*), ABISELECT(56,36), "S20955C29");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C12*), ABISELECT(56,36), "S20955C29");
    check_base_class_offset(lv, (S20955C4*)(S20955C12*), ABISELECT(56,36), "S20955C29");
    /*is_ambiguous_... S20955C29::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C12*)(S20955C22*), ABISELECT(48,32), "S20955C29");
    check_base_class_offset(lv, (S20955C12*)(S20955C22*)(S20955C30*), ABISELECT(48,32), "S20955C29");
    /*is_ambiguous_... S20955C29::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C22*), ABISELECT(16,8), "S20955C29");
    /*is_ambiguous_... S20955C29::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*), ABISELECT(72,48), "S20955C29");
    /*is_ambiguous_... S20955C29::S20955C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*), ABISELECT(72,48), "S20955C29");
    /*is_ambiguous_... S20955C29::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C4*), ABISELECT(72,48), "S20955C29");
    /*is_ambiguous_... S20955C18::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C18*)(S20955C30*), ABISELECT(72,48), "S20955C29");
    check_base_class_offset(lv, (S20955C4*)(S20955C3*), ABISELECT(72,48), "S20955C29");
    check_base_class_offset(lv, (S20955C5*)(S20955C14*), ABISELECT(96,64), "S20955C29");
    /*is_ambiguous_... S20955C3::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C3*), ABISELECT(96,64), "S20955C29");
    check_base_class_offset(lv, (S20955C14*)(S20955C16*), 0, "S20955C29");
    check_base_class_offset(lv, (S20955C16*), ABISELECT(80,56), "S20955C29");
    /*is_ambiguous_... S20955C29::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), 0, "S20955C29");
    /*is_ambiguous_... S20955C3::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C3*), ABISELECT(104,72), "S20955C29");
    check_base_class_offset(lv, (S20955C3*)(S20955C2*), ABISELECT(104,72), "S20955C29");
    /*is_ambiguous_... S20955C7::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C7*)(S20955C2*), ABISELECT(320,248), "S20955C29");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(328,252), "S20955C29");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(328,252), "S20955C29");
    check_base_class_offset(lv, (S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(328,252), "S20955C29");
    check_base_class_offset(lv, (S20955C7*)(S20955C2*), ABISELECT(320,248), "S20955C29");
    check_base_class_offset(lv, (S20955C2*)(S20955C19*)(S20955C18*)(S20955C30*), ABISELECT(320,248), "S20955C29");
    check_base_class_offset(lv, (S20955C19*)(S20955C18*)(S20955C30*), ABISELECT(104,72), "S20955C29");
    check_base_class_offset(lv, (S20955C18*)(S20955C30*), ABISELECT(104,72), "S20955C29");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C22*)(S20955C30*), ABISELECT(288,224), "S20955C29");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C22*)(S20955C30*), ABISELECT(288,224), "S20955C29");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C22*)(S20955C30*), ABISELECT(288,224), "S20955C29");
    check_base_class_offset(lv, (S20955C5*)(S20955C20*)(S20955C22*)(S20955C30*), ABISELECT(280,216), "S20955C29");
    check_base_class_offset(lv, (S20955C20*)(S20955C22*)(S20955C30*), ABISELECT(272,212), "S20955C29");
    check_base_class_offset(lv, (S20955C22*)(S20955C30*), ABISELECT(272,212), "S20955C29");
    /*is_ambiguous_... S20955C30::S20955C20 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C20*)(S20955C30*), ABISELECT(312,240), "S20955C29");
    /*is_ambiguous_... S20955C30::S20955C20 */ AMB_check_base_class_offset(lv, (S20955C20*)(S20955C30*), ABISELECT(304,236), "S20955C29");
    check_base_class_offset(lv, (S20955C30*), ABISELECT(104,72), "S20955C29");
    check_field_offset(lv, s20955c29f0, ABISELECT(8,4), "S20955C29.s20955c29f0");
    test_class_info(&lv, &cd_S20955C29);
    dp->~S20955C29();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20955C29(Test_S20955C29, "S20955C29", ABISELECT(376,296));

#else // __cplusplus

extern void _ZN9S20955C29C1Ev();
extern void _ZN9S20955C29D2Ev();
Name_Map name_map_S20955C29[] = {
  NSPAIR(_ZN9S20955C29C1Ev),
  NSPAIR(_ZN9S20955C29D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20955C20;
extern VTBL_ENTRY _ZTI9S20955C20[];
extern  VTBL_ENTRY _ZTV9S20955C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C20[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C12;
extern VTBL_ENTRY _ZTI9S20955C12[];
extern  VTBL_ENTRY _ZTV9S20955C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C12[];
extern Class_Descriptor cd_S20955C22;
extern VTBL_ENTRY _ZTI9S20955C22[];
extern  VTBL_ENTRY _ZTV9S20955C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C22[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20955C14;
extern VTBL_ENTRY _ZTI9S20955C14[];
extern  VTBL_ENTRY _ZTV9S20955C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C14[];
extern Class_Descriptor cd_S20955C16;
extern VTBL_ENTRY _ZTI9S20955C16[];
extern  VTBL_ENTRY _ZTV9S20955C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C16[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C3;
extern VTBL_ENTRY _ZTI8S20955C3[];
extern  VTBL_ENTRY _ZTV8S20955C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C3[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C7;
extern VTBL_ENTRY _ZTI8S20955C7[];
extern  VTBL_ENTRY _ZTV8S20955C7[];
extern Class_Descriptor cd_S20955C2;
extern VTBL_ENTRY _ZTI8S20955C2[];
extern  VTBL_ENTRY _ZTV8S20955C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C2[];
extern Class_Descriptor cd_S20955C19;
extern VTBL_ENTRY _ZTI9S20955C19[];
extern  VTBL_ENTRY _ZTV9S20955C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C19[];
extern Class_Descriptor cd_S20955C18;
extern VTBL_ENTRY _ZTI9S20955C18[];
extern  VTBL_ENTRY _ZTV9S20955C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C18[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20955C20;
extern VTBL_ENTRY _ZTI9S20955C20[];
extern  VTBL_ENTRY _ZTV9S20955C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C20[];
extern Class_Descriptor cd_S20955C22;
extern VTBL_ENTRY _ZTI9S20955C22[];
extern  VTBL_ENTRY _ZTV9S20955C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C22[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20955C20;
extern VTBL_ENTRY _ZTI9S20955C20[];
extern  VTBL_ENTRY _ZTV9S20955C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C20[];
extern Class_Descriptor cd_S20955C30;
extern VTBL_ENTRY _ZTI9S20955C30[];
extern  VTBL_ENTRY _ZTV9S20955C30[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C30[];
static Base_Class bases_S20955C29[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(32,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(32,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
    2, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(32,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
    11, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    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_S20955C20,    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
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(68,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
    10, //immediately_derived
  0, 1},
  {&cd_S20955C5,    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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    9, //immediately_derived
  0, 0},
  {&cd_S20955C4,    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
    10, //immediately_derived
  0, 0},
  {&cd_S20955C12,    ABISELECT(48,32), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20955C22,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //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_S20955C5,    ABISELECT(72,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
    14, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(72,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
    14, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(72,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
  1, 1},
  {&cd_S20955C5,    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
    16, //immediately_derived
  0, 1},
  {&cd_S20955C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S20955C16,    ABISELECT(80,56), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C38,    ABISELECT(104,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
    20, //immediately_derived
  0, 0},
  {&cd_S20955C3,    ABISELECT(104,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(320,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    ABISELECT(328,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(328,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C4,    ABISELECT(328,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C7,    ABISELECT(320,248), //bcp->offset
    -1, //bcp->virtual_function_table_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
    26, //immediately_derived
  0, 0},
  {&cd_S20955C2,    ABISELECT(320,248), //bcp->offset
    48, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S20955C19,    ABISELECT(104,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20955C18,    ABISELECT(104,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(288,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(288,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C4,    ABISELECT(288,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(280,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C20,    ABISELECT(272,212), //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
    11, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S20955C22,    ABISELECT(272,212), //bcp->offset
    40, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(312,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S20955C20,    ABISELECT(304,236), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S20955C30,    ABISELECT(104,72), //bcp->offset
    28, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20955C29[];
extern void _ZN9S20955C29D1Ev();
extern void _ZN9S20955C29D0Ev();
extern void ABISELECT(_ZTv0_n80_N9S20955C29D1Ev,_ZTv0_n40_N9S20955C29D1Ev)();
extern void ABISELECT(_ZThn104_N9S20955C29D1Ev,_ZThn72_N9S20955C29D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20955C29D0Ev,_ZTv0_n40_N9S20955C29D0Ev)();
extern void ABISELECT(_ZThn104_N9S20955C29D0Ev,_ZThn72_N9S20955C29D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20955C29D1Ev,_ZTv0_n24_N9S20955C29D1Ev)();
extern void ABISELECT(_ZThn320_N9S20955C29D1Ev,_ZThn248_N9S20955C29D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20955C29D0Ev,_ZTv0_n24_N9S20955C29D0Ev)();
extern void ABISELECT(_ZThn320_N9S20955C29D0Ev,_ZThn248_N9S20955C29D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20955C29[] = {
  ABISELECT(104,72),
  ABISELECT(320,248),
  ABISELECT(104,72),
  0,
  ABISELECT(80,56),
  ABISELECT(72,48),
  ABISELECT(68,48),
  ABISELECT(48,32),
  0,
  ABISELECT(16,8),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C29[0]),
  (VTBL_ENTRY)&_ZN9S20955C29D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C29D0Ev,
  ABISELECT(52,40),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20955C29[0]),
  ABISELECT(-48,-32),
  ABISELECT(20,16),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI9S20955C29[0]),
  ABISELECT(-80,-56),
  ABISELECT(16,8),
  ABISELECT(-80,-56),
  (VTBL_ENTRY)&(_ZTI9S20955C29[0]),
  ABISELECT(-104,-72),
  ABISELECT(-36,-24),
  ABISELECT(-56,-40),
  ABISELECT(-104,-72),
  0,
  ABISELECT(216,176),
  -8,
  ABISELECT(-32,-24),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI9S20955C29[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20955C29D1Ev,_ZTv0_n40_N9S20955C29D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20955C29D0Ev,_ZTv0_n40_N9S20955C29D0Ev),
  ABISELECT(-204,-164),
  ABISELECT(-224,-180),
  ABISELECT(-272,-212),
  ABISELECT(-272,-212),
  (VTBL_ENTRY)&(_ZTI9S20955C29[0]),
  ABISELECT(-304,-236),
  ABISELECT(-304,-236),
  (VTBL_ENTRY)&(_ZTI9S20955C29[0]),
  ABISELECT(-320,-248),
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  ABISELECT(-320,-248),
  (VTBL_ENTRY)&(_ZTI9S20955C29[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C29D1Ev,_ZTv0_n24_N9S20955C29D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C29D0Ev,_ZTv0_n24_N9S20955C29D0Ev),
};
extern VTBL_ENTRY _ZTV9S20955C29[];
static  VTBL_ENTRY _tg__ZTV9S20955C22__9S20955C29[] = {
  ABISELECT(52,40),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C209S20955C22__9S20955C29[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C22__9S20955C29[] = {
  ABISELECT(-48,-32),
  ABISELECT(20,16),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C29[] = {
  ABISELECT(-48,-32),
  ABISELECT(20,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C16__9S20955C29[] = {
  ABISELECT(-80,-56),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C16[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C14__9S20955C16__9S20955C29[] = {
  ABISELECT(96,64),
  ABISELECT(80,56),
  (VTBL_ENTRY)&(_ZTI9S20955C16[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C14__9S20955C29[] = {
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C14[0]),
};
extern void _ZN9S20955C30D1Ev();
extern void _ZN9S20955C30D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20955C30__9S20955C29[] = {
  ABISELECT(-36,-24),
  ABISELECT(-56,-40),
  ABISELECT(-104,-72),
  0,
  ABISELECT(216,176),
  -8,
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C30[0]),
  (VTBL_ENTRY)&_ZN9S20955C30D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C30D0Ev,
};
extern void _ZN9S20955C18D1Ev();
extern void _ZN9S20955C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20955C189S20955C30__9S20955C29[] = {
  0,
  ABISELECT(216,176),
  -8,
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C18[0]),
  (VTBL_ENTRY)&_ZN9S20955C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C18D0Ev,
};
extern void _ZN9S20955C19D1Ev();
extern void _ZN9S20955C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20955C199S20955C189S20955C30__9S20955C29[] = {
  0,
  ABISELECT(216,176),
  -8,
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C19[0]),
  (VTBL_ENTRY)&_ZN9S20955C19D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C19D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20955C19D1Ev,_ZTv0_n24_N9S20955C19D1Ev)();
extern void ABISELECT(_ZThn216_N9S20955C19D1Ev,_ZThn176_N9S20955C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20955C19D0Ev,_ZTv0_n24_N9S20955C19D0Ev)();
extern void ABISELECT(_ZThn216_N9S20955C19D0Ev,_ZThn176_N9S20955C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C199S20955C189S20955C30__9S20955C29[] = {
  ABISELECT(-216,-176),
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  ABISELECT(-216,-176),
  (VTBL_ENTRY)&(_ZTI9S20955C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C19D1Ev,_ZTv0_n24_N9S20955C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C19D0Ev,_ZTv0_n24_N9S20955C19D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20955C18D1Ev,_ZTv0_n24_N9S20955C18D1Ev)();
extern void ABISELECT(_ZThn216_N9S20955C18D1Ev,_ZThn176_N9S20955C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20955C18D0Ev,_ZTv0_n24_N9S20955C18D0Ev)();
extern void ABISELECT(_ZThn216_N9S20955C18D0Ev,_ZThn176_N9S20955C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C189S20955C30__9S20955C29[] = {
  ABISELECT(-216,-176),
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  ABISELECT(-216,-176),
  (VTBL_ENTRY)&(_ZTI9S20955C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C18D1Ev,_ZTv0_n24_N9S20955C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C18D0Ev,_ZTv0_n24_N9S20955C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20955C229S20955C30__A1__9S20955C29[] = {
  ABISELECT(-204,-164),
  ABISELECT(-224,-180),
  ABISELECT(-272,-212),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C209S20955C229S20955C30__A1__9S20955C29[] = {
  ABISELECT(-272,-212),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C229S20955C30__A1__9S20955C29[] = {
  ABISELECT(-48,-32),
  ABISELECT(20,16),
  ABISELECT(224,180),
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C209S20955C30__A2__9S20955C29[] = {
  ABISELECT(-304,-236),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C20[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20955C30D1Ev,_ZTv0_n24_N9S20955C30D1Ev)();
extern void ABISELECT(_ZThn216_N9S20955C30D1Ev,_ZThn176_N9S20955C30D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20955C30D0Ev,_ZTv0_n24_N9S20955C30D0Ev)();
extern void ABISELECT(_ZThn216_N9S20955C30D0Ev,_ZThn176_N9S20955C30D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C30__9S20955C29[] = {
  ABISELECT(-216,-176),
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  ABISELECT(-216,-176),
  (VTBL_ENTRY)&(_ZTI9S20955C30[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C30D1Ev,_ZTv0_n24_N9S20955C30D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C30D0Ev,_ZTv0_n24_N9S20955C30D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20955C22__9S20955C30__9S20955C29[] = {
  ABISELECT(-204,-164),
  ABISELECT(-224,-180),
  ABISELECT(-272,-212),
  ABISELECT(-168,-140),
  (VTBL_ENTRY)&(_ZTI9S20955C30[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C30__9S20955C29[] = {
  ABISELECT(-48,-32),
  ABISELECT(20,16),
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI9S20955C30[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C20__A1__9S20955C30__9S20955C29[] = {
  ABISELECT(-304,-236),
  ABISELECT(-200,-164),
  (VTBL_ENTRY)&(_ZTI9S20955C30[0]),
};
extern void _ZN8S20955C2D1Ev();
extern void _ZN8S20955C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C29[] = {
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C2[0]),
  (VTBL_ENTRY)&_ZN8S20955C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20955C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__8S20955C2__9S20955C29[] = {
  -8,
  ABISELECT(-32,-24),
  ABISELECT(216,176),
  (VTBL_ENTRY)&(_ZTI8S20955C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__9S20955C29[] = {
  -8,
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C3[0]),
};
static  VTT_ENTRY vtt_S20955C29[] = {
  {&(_ZTV9S20955C29[13]),  13,56},
  {&(_ZTV9S20955C29[20]),  20,56},
  {&(_ZTV9S20955C29[24]),  24,56},
  {&(_ZTV9S20955C29[28]),  28,56},
  {&(_ZTV9S20955C29[13]),  13,56},
  {&(_ZTV9S20955C29[38]),  38,56},
  {&(_ZTV9S20955C29[54]),  54,56},
  {&(_ZTV9S20955C29[38]),  38,56},
  {&(_ZTV9S20955C29[45]),  45,56},
  {&(_ZTV9S20955C29[48]),  48,56},
  {&(_tg__ZTV9S20955C22__9S20955C29[5]),  5,5},
  {&(_tg__ZTV9S20955C209S20955C22__9S20955C29[3]),  3,3},
  {&(_tg__ZTV9S20955C12__9S20955C22__9S20955C29[4]),  4,4},
  {&(_tg__ZTV9S20955C12__9S20955C29[4]),  4,4},
  {&(_tg__ZTV9S20955C16__9S20955C29[4]),  4,4},
  {&(_tg__ZTV9S20955C14__9S20955C16__9S20955C29[3]),  3,3},
  {&(_tg__ZTV9S20955C14__9S20955C29[3]),  3,3},
  {&(_tg__ZTV9S20955C30__9S20955C29[9]),  9,11},
  {&(_tg__ZTV9S20955C189S20955C30__9S20955C29[6]),  6,8},
  {&(_tg__ZTV9S20955C199S20955C189S20955C30__9S20955C29[6]),  6,8},
  {&(_tg__ZTV8S20955C2__9S20955C199S20955C189S20955C30__9S20955C29[6]),  6,8},
  {&(_tg__ZTV9S20955C199S20955C189S20955C30__9S20955C29[6]),  6,8},
  {&(_tg__ZTV8S20955C2__9S20955C189S20955C30__9S20955C29[6]),  6,8},
  {&(_tg__ZTV9S20955C189S20955C30__9S20955C29[6]),  6,8},
  {&(_tg__ZTV9S20955C229S20955C30__A1__9S20955C29[5]),  5,5},
  {&(_tg__ZTV9S20955C209S20955C229S20955C30__A1__9S20955C29[3]),  3,3},
  {&(_tg__ZTV9S20955C12__9S20955C229S20955C30__A1__9S20955C29[4]),  4,4},
  {&(_tg__ZTV9S20955C209S20955C30__A2__9S20955C29[3]),  3,3},
  {&(_tg__ZTV8S20955C2__9S20955C30__9S20955C29[6]),  6,8},
  {&(_tg__ZTV9S20955C30__9S20955C29[9]),  9,11},
  {&(_tg__ZTV9S20955C22__9S20955C30__9S20955C29[5]),  5,5},
  {&(_tg__ZTV9S20955C12__9S20955C30__9S20955C29[4]),  4,4},
  {&(_tg__ZTV9S20955C20__A1__9S20955C30__9S20955C29[3]),  3,3},
  {&(_tg__ZTV8S20955C2__9S20955C29[5]),  5,7},
  {&(_tg__ZTV8S20955C3__8S20955C2__9S20955C29[4]),  4,4},
  {&(_tg__ZTV8S20955C3__9S20955C29[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20955C29[];
extern  VTBL_ENTRY _ZTV9S20955C29[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C29[];
static VTBL_ENTRY alt_thunk_names75[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C30D0Ev,_ZTv0_n24_N9S20955C30D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S20955C30D0Ev,_ZThn176_N9S20955C30D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C30D1Ev,_ZTv0_n24_N9S20955C30D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S20955C30D1Ev,_ZThn176_N9S20955C30D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C18D0Ev,_ZTv0_n24_N9S20955C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S20955C18D0Ev,_ZThn176_N9S20955C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C18D1Ev,_ZTv0_n24_N9S20955C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S20955C18D1Ev,_ZThn176_N9S20955C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C19D0Ev,_ZTv0_n24_N9S20955C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S20955C19D0Ev,_ZThn176_N9S20955C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C19D1Ev,_ZTv0_n24_N9S20955C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S20955C19D1Ev,_ZThn176_N9S20955C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C29D0Ev,_ZTv0_n24_N9S20955C29D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S20955C29D0Ev,_ZThn248_N9S20955C29D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C29D1Ev,_ZTv0_n24_N9S20955C29D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N9S20955C29D1Ev,_ZThn248_N9S20955C29D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20955C29D0Ev,_ZTv0_n40_N9S20955C29D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20955C29D0Ev,_ZThn72_N9S20955C29D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20955C29D1Ev,_ZTv0_n40_N9S20955C29D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S20955C29D1Ev,_ZThn72_N9S20955C29D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20955C29 = {  "S20955C29", // class name
  bases_S20955C29, 38,
  &(vtc_S20955C29[0]), // expected_vtbl_contents
  &(vtt_S20955C29[0]), // expected_vtt_contents
  ABISELECT(376,296), // object size
  NSPAIRA(_ZTI9S20955C29),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20955C29),56, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20955C29),36, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names75,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20955C1  : virtual S20955C2 , virtual S20955C9 , virtual S20955C15 , S20955C26 , virtual S20955C29 {
  virtual  ~S20955C1(); // _ZN8S20955C1D2Ev
  S20955C1(); // tgen
};
//SIG(1 S20955C1) C1{ VBC2{ VBC3{ VBC4{ BC5{ m FL Fc:0} BC6{ m}} VBC5 BC6} BC7{ BC6 BC4 vd FC8{}} Fi[8]} VBC9{ BC10{ m Fi Fc} VBC11{ VBC12{ VBC13{ m} BC4 VBC6 Fi} VBC2 vd} BC14{ VBC5} vd} VBC15{ BC13 VBC2 VBC9 VBC16{ VBC14 Fi:1} v1 FC17{ VBC18{ VBC4 BC19{ VBC2 vd} vd FC2[2]} BC4 VBC20{ VBC6 BC5} VBC21{ VBC4 BC22{ BC4 BC20 VBC12 Fp} VBC23{ m} BC24{ BC12} FC25{ VBC7 vd}[6] Fp} BC22}} BC26{ VBC25 BC27{ VBC5 BC12 FL:1} BC28{ VBC21 VBC22 VBC2 vd} BC10 vd Fp[5]} VBC29{ VBC22 VBC4 VBC16 BC13 VBC30{ BC18 BC22 BC20} vd Fi} vd}


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

static void Test_S20955C1()
{
  extern Class_Descriptor cd_S20955C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(169,245)];
    init_test(&cd_S20955C1, buf);
    S20955C1 *dp, &lv = *(dp=new (buf) S20955C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1344,976), "sizeof(S20955C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20955C1)");
    /*is_ambiguous_... S20955C1::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*), ABISELECT(136,100), "S20955C1");
    /*is_ambiguous_... S20955C1::S20955C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*), ABISELECT(136,100), "S20955C1");
    check_base_class_offset(lv, (S20955C4*)(S20955C3*), ABISELECT(136,100), "S20955C1");
    /*is_ambiguous_... S20955C21::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C21*), ABISELECT(136,100), "S20955C1");
    /*is_ambiguous_... S20955C29::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C29*), ABISELECT(136,100), "S20955C1");
    /*is_ambiguous_... S20955C18::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C18*)(S20955C30*), ABISELECT(136,100), "S20955C1");
    /*is_ambiguous_... S20955C3::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C3*), ABISELECT(144,108), "S20955C1");
    check_base_class_offset(lv, (S20955C5*)(S20955C14*)(S20955C9*), ABISELECT(144,108), "S20955C1");
    /*is_ambiguous_... S20955C1::S20955C14 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C14*), ABISELECT(144,108), "S20955C1");
    /*is_ambiguous_... S20955C27::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C27*)(S20955C26*), ABISELECT(144,108), "S20955C1");
    /*is_ambiguous_... S20955C3::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C3*), ABISELECT(192,144), "S20955C1");
    check_base_class_offset(lv, (S20955C3*)(S20955C2*), ABISELECT(192,144), "S20955C1");
    /*is_ambiguous_... S20955C7::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C7*)(S20955C2*), ABISELECT(80,52), "S20955C1");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(88,56), "S20955C1");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(88,56), "S20955C1");
    check_base_class_offset(lv, (S20955C4*)(S20955C7*)(S20955C2*), ABISELECT(88,56), "S20955C1");
    check_base_class_offset(lv, (S20955C7*)(S20955C2*), ABISELECT(80,52), "S20955C1");
    check_base_class_offset(lv, (S20955C2*), ABISELECT(80,52), "S20955C1");
    check_base_class_offset(lv, (S20955C2*)(S20955C11*), ABISELECT(80,52), "S20955C1");
    check_base_class_offset(lv, (S20955C2*)(S20955C15*), ABISELECT(80,52), "S20955C1");
    check_base_class_offset(lv, (S20955C2*)(S20955C28*)(S20955C26*), ABISELECT(80,52), "S20955C1");
    check_base_class_offset(lv, (S20955C2*)(S20955C19*)(S20955C18*)(S20955C30*), ABISELECT(80,52), "S20955C1");
    check_base_class_offset(lv, (S2398C25_nt*)(S20955C9*), ABISELECT(160,120), "S20955C1");
    /*is_ambiguous_... S20955C1::S20955C12 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20955C12*), 0, "S20955C1");
    check_base_class_offset(lv, (S2264C28*)(S20955C12*)(S20955C27*)(S20955C26*), 0, "S20955C1");
    check_base_class_offset(lv, (S2264C28*)(S20955C12*)(S20955C24*)(S20955C21*), 0, "S20955C1");
    /*is_ambiguous_... S20955C1::S20955C12 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C12*), ABISELECT(176,132), "S20955C1");
    /*is_ambiguous_... S20955C1::S20955C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C12*), ABISELECT(176,132), "S20955C1");
    /*is_ambiguous_... S20955C1::S20955C12 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C12*), ABISELECT(176,132), "S20955C1");
    /*is_ambiguous_... S20955C1::S20955C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C12*), 0, "S20955C1");
    /*is_ambiguous_... S20955C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C12*)(S20955C27*)(S20955C26*), 0, "S20955C1");
    check_base_class_offset(lv, (S2264C38*)(S20955C20*)(S20955C22*)(S20955C21*), 0, "S20955C1");
    /*is_ambiguous_... S20955C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C12*)(S20955C24*)(S20955C21*), 0, "S20955C1");
    /*is_ambiguous_... S20955C1::S20955C22 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C20*)(S20955C22*), 0, "S20955C1");
    check_base_class_offset(lv, (S2264C38*)(S20955C20*)(S20955C22*)(S20955C30*), 0, "S20955C1");
    /*is_ambiguous_... S20955C30::S20955C20 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C20*)(S20955C30*), 0, "S20955C1");
    check_base_class_offset(lv, (S20955C12*)(S20955C11*), ABISELECT(168,128), "S20955C1");
    check_base_class_offset(lv, (S20955C12*)(S20955C22*)(S20955C21*), ABISELECT(168,128), "S20955C1");
    /*is_ambiguous_... S20955C1::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C12*)(S20955C22*), ABISELECT(168,128), "S20955C1");
    check_base_class_offset(lv, (S20955C12*)(S20955C22*)(S20955C30*), ABISELECT(168,128), "S20955C1");
    check_base_class_offset(lv, (S20955C11*)(S20955C9*), ABISELECT(192,144), "S20955C1");
    check_base_class_offset(lv, (S20955C14*)(S20955C9*), ABISELECT(152,116), "S20955C1");
    check_base_class_offset(lv, (S20955C9*), ABISELECT(152,116), "S20955C1");
    check_base_class_offset(lv, (S20955C9*)(S20955C15*), ABISELECT(152,116), "S20955C1");
    /*is_ambiguous_... S20955C15::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20955C15*), ABISELECT(192,144), "S20955C1");
    check_base_class_offset(lv, (S20955C14*)(S20955C16*), ABISELECT(776,576), "S20955C1");
    check_base_class_offset(lv, (S20955C16*)(S20955C15*), ABISELECT(776,576), "S20955C1");
    check_base_class_offset(lv, (S20955C16*)(S20955C29*), ABISELECT(776,576), "S20955C1");
    check_base_class_offset(lv, (S20955C15*), ABISELECT(192,144), "S20955C1");
    /*is_ambiguous_... S20955C1::S20955C7 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C7*), ABISELECT(800,588), "S20955C1");
    /*is_ambiguous_... S20955C1::S20955C7 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C7*), ABISELECT(808,592), "S20955C1");
    /*is_ambiguous_... S20955C1::S20955C7 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C7*), ABISELECT(808,592), "S20955C1");
    /*is_ambiguous_... S20955C1::S20955C7 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C7*), ABISELECT(808,592), "S20955C1");
    check_base_class_offset(lv, (S20955C7*)(S20955C25*), ABISELECT(800,588), "S20955C1");
    check_base_class_offset(lv, (S20955C25*)(S20955C26*), ABISELECT(792,584), "S20955C1");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C12*)(S20955C27*)(S20955C26*), ABISELECT(8,4), "S20955C1");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C12*)(S20955C27*)(S20955C26*), ABISELECT(8,4), "S20955C1");
    check_base_class_offset(lv, (S20955C4*)(S20955C12*)(S20955C27*)(S20955C26*), ABISELECT(8,4), "S20955C1");
    check_base_class_offset(lv, (S20955C12*)(S20955C27*)(S20955C26*), 0, "S20955C1");
    check_base_class_offset(lv, (S20955C27*)(S20955C26*), 0, "S20955C1");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C22*)(S20955C21*), ABISELECT(840,616), "S20955C1");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C22*)(S20955C21*), ABISELECT(840,616), "S20955C1");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C22*)(S20955C21*), ABISELECT(840,616), "S20955C1");
    check_base_class_offset(lv, (S20955C5*)(S20955C20*)(S20955C22*)(S20955C21*), ABISELECT(832,608), "S20955C1");
    check_base_class_offset(lv, (S20955C20*)(S20955C22*)(S20955C21*), ABISELECT(824,604), "S20955C1");
    check_base_class_offset(lv, (S20955C22*)(S20955C21*), ABISELECT(824,604), "S20955C1");
    check_base_class_offset(lv, (S2264C24*)(S20955C21*), 0, "S20955C1");
    check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C12*)(S20955C24*)(S20955C21*), ABISELECT(864,632), "S20955C1");
    check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C12*)(S20955C24*)(S20955C21*), ABISELECT(864,632), "S20955C1");
    check_base_class_offset(lv, (S20955C4*)(S20955C12*)(S20955C24*)(S20955C21*), ABISELECT(864,632), "S20955C1");
    check_base_class_offset(lv, (S20955C12*)(S20955C24*)(S20955C21*), ABISELECT(856,628), "S20955C1");
    check_base_class_offset(lv, (S20955C24*)(S20955C21*), ABISELECT(856,628), "S20955C1");
    check_base_class_offset(lv, (S20955C21*)(S20955C28*)(S20955C26*), ABISELECT(824,604), "S20955C1");
    /*is_ambiguous_... S20955C1::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C22*), ABISELECT(1096,780), "S20955C1");
    /*is_ambiguous_... S20955C1::S20955C22 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C22*), ABISELECT(1096,780), "S20955C1");
    /*is_ambiguous_... S20955C1::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C22*), ABISELECT(1096,780), "S20955C1");
    /*is_ambiguous_... S20955C1::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C20*)(S20955C22*), ABISELECT(1088,772), "S20955C1");
    /*is_ambiguous_... S20955C1::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C20*)(S20955C22*), ABISELECT(1080,768), "S20955C1");
    /*is_ambiguous_... S20955C28::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C22*)(S20955C28*)(S20955C26*), ABISELECT(1080,768), "S20955C1");
    /*is_ambiguous_... S20955C29::S20955C22 */ AMB_check_base_class_offset(lv, (S20955C22*)(S20955C29*), ABISELECT(1080,768), "S20955C1");
    check_base_class_offset(lv, (S20955C28*)(S20955C26*), ABISELECT(24,20), "S20955C1");
    check_base_class_offset(lv, (S2398C25_nt*)(S20955C26*), ABISELECT(32,24), "S20955C1");
    check_base_class_offset(lv, (S20955C26*), 0, "S20955C1");
    /*is_ambiguous_... S20955C29::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20955C29*), ABISELECT(1112,792), "S20955C1");
    check_base_class_offset(lv, (S20955C19*)(S20955C18*)(S20955C30*), ABISELECT(1128,800), "S20955C1");
    check_base_class_offset(lv, (S20955C18*)(S20955C30*), ABISELECT(1128,800), "S20955C1");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C4*)(S20955C22*)(S20955C30*), ABISELECT(1312,952), "S20955C1");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20955C4*)(S20955C22*)(S20955C30*), ABISELECT(1312,952), "S20955C1");
    /*is_ambiguous_... S20955C22::S20955C4 */ AMB_check_base_class_offset(lv, (S20955C4*)(S20955C22*)(S20955C30*), ABISELECT(1312,952), "S20955C1");
    check_base_class_offset(lv, (S20955C5*)(S20955C20*)(S20955C22*)(S20955C30*), ABISELECT(1304,944), "S20955C1");
    check_base_class_offset(lv, (S20955C20*)(S20955C22*)(S20955C30*), ABISELECT(1296,940), "S20955C1");
    check_base_class_offset(lv, (S20955C22*)(S20955C30*), ABISELECT(1296,940), "S20955C1");
    /*is_ambiguous_... S20955C30::S20955C20 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20955C20*)(S20955C30*), ABISELECT(1336,968), "S20955C1");
    /*is_ambiguous_... S20955C30::S20955C20 */ AMB_check_base_class_offset(lv, (S20955C20*)(S20955C30*), ABISELECT(1328,964), "S20955C1");
    check_base_class_offset(lv, (S20955C30*)(S20955C29*), ABISELECT(1128,800), "S20955C1");
    check_base_class_offset(lv, (S20955C29*), ABISELECT(1112,792), "S20955C1");
    test_class_info(&lv, &cd_S20955C1);
    dp->~S20955C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20955C1(Test_S20955C1, "S20955C1", ABISELECT(1344,976));

#else // __cplusplus

extern void _ZN8S20955C1C1Ev();
extern void _ZN8S20955C1D2Ev();
Name_Map name_map_S20955C1[] = {
  NSPAIR(_ZN8S20955C1C1Ev),
  NSPAIR(_ZN8S20955C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C3;
extern VTBL_ENTRY _ZTI8S20955C3[];
extern  VTBL_ENTRY _ZTV8S20955C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C3[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C7;
extern VTBL_ENTRY _ZTI8S20955C7[];
extern  VTBL_ENTRY _ZTV8S20955C7[];
extern Class_Descriptor cd_S20955C2;
extern VTBL_ENTRY _ZTI8S20955C2[];
extern  VTBL_ENTRY _ZTV8S20955C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C2[];
extern Class_Descriptor cd_S2398C25_nt;
extern VTBL_ENTRY _ZTI11S2398C25_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C12;
extern VTBL_ENTRY _ZTI9S20955C12[];
extern  VTBL_ENTRY _ZTV9S20955C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C12[];
extern Class_Descriptor cd_S20955C11;
extern VTBL_ENTRY _ZTI9S20955C11[];
extern  VTBL_ENTRY _ZTV9S20955C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C11[];
extern Class_Descriptor cd_S20955C14;
extern VTBL_ENTRY _ZTI9S20955C14[];
extern  VTBL_ENTRY _ZTV9S20955C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C14[];
extern Class_Descriptor cd_S20955C9;
extern VTBL_ENTRY _ZTI8S20955C9[];
extern  VTBL_ENTRY _ZTV8S20955C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C9[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C14;
extern VTBL_ENTRY _ZTI9S20955C14[];
extern  VTBL_ENTRY _ZTV9S20955C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C14[];
extern Class_Descriptor cd_S20955C16;
extern VTBL_ENTRY _ZTI9S20955C16[];
extern  VTBL_ENTRY _ZTV9S20955C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C16[];
extern Class_Descriptor cd_S20955C15;
extern VTBL_ENTRY _ZTI9S20955C15[];
extern  VTBL_ENTRY _ZTV9S20955C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C15[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C7;
extern VTBL_ENTRY _ZTI8S20955C7[];
extern  VTBL_ENTRY _ZTV8S20955C7[];
extern Class_Descriptor cd_S20955C25;
extern VTBL_ENTRY _ZTI9S20955C25[];
extern  VTBL_ENTRY _ZTV9S20955C25[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C25[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C12;
extern VTBL_ENTRY _ZTI9S20955C12[];
extern  VTBL_ENTRY _ZTV9S20955C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C12[];
extern Class_Descriptor cd_S20955C27;
extern VTBL_ENTRY _ZTI9S20955C27[];
extern  VTBL_ENTRY _ZTV9S20955C27[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C27[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20955C20;
extern VTBL_ENTRY _ZTI9S20955C20[];
extern  VTBL_ENTRY _ZTV9S20955C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C20[];
extern Class_Descriptor cd_S20955C22;
extern VTBL_ENTRY _ZTI9S20955C22[];
extern  VTBL_ENTRY _ZTV9S20955C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C22[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C12;
extern VTBL_ENTRY _ZTI9S20955C12[];
extern  VTBL_ENTRY _ZTV9S20955C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C12[];
extern Class_Descriptor cd_S20955C24;
extern VTBL_ENTRY _ZTI9S20955C24[];
extern  VTBL_ENTRY _ZTV9S20955C24[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C24[];
extern Class_Descriptor cd_S20955C21;
extern VTBL_ENTRY _ZTI9S20955C21[];
extern  VTBL_ENTRY _ZTV9S20955C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C21[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20955C20;
extern VTBL_ENTRY _ZTI9S20955C20[];
extern  VTBL_ENTRY _ZTV9S20955C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C20[];
extern Class_Descriptor cd_S20955C22;
extern VTBL_ENTRY _ZTI9S20955C22[];
extern  VTBL_ENTRY _ZTV9S20955C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C22[];
extern Class_Descriptor cd_S20955C28;
extern VTBL_ENTRY _ZTI9S20955C28[];
extern  VTBL_ENTRY _ZTV9S20955C28[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C28[];
extern Class_Descriptor cd_S2398C25_nt;
extern VTBL_ENTRY _ZTI11S2398C25_nt[];
extern Class_Descriptor cd_S20955C26;
extern VTBL_ENTRY _ZTI9S20955C26[];
extern  VTBL_ENTRY _ZTV9S20955C26[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C26[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C19;
extern VTBL_ENTRY _ZTI9S20955C19[];
extern  VTBL_ENTRY _ZTV9S20955C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C19[];
extern Class_Descriptor cd_S20955C18;
extern VTBL_ENTRY _ZTI9S20955C18[];
extern  VTBL_ENTRY _ZTV9S20955C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C18[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C4;
extern VTBL_ENTRY _ZTI8S20955C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20955C20;
extern VTBL_ENTRY _ZTI9S20955C20[];
extern  VTBL_ENTRY _ZTV9S20955C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C20[];
extern Class_Descriptor cd_S20955C22;
extern VTBL_ENTRY _ZTI9S20955C22[];
extern  VTBL_ENTRY _ZTV9S20955C22[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C22[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20955C20;
extern VTBL_ENTRY _ZTI9S20955C20[];
extern  VTBL_ENTRY _ZTV9S20955C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C20[];
extern Class_Descriptor cd_S20955C30;
extern VTBL_ENTRY _ZTI9S20955C30[];
extern  VTBL_ENTRY _ZTV9S20955C30[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C30[];
extern Class_Descriptor cd_S20955C29;
extern VTBL_ENTRY _ZTI9S20955C29[];
extern  VTBL_ENTRY _ZTV9S20955C29[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20955C29[];
static Base_Class bases_S20955C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(136,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(136,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
    2, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(136,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_S20955C5,    ABISELECT(144,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
    5, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(192,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
    5, //immediately_derived
  0, 0},
  {&cd_S20955C3,    ABISELECT(192,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(80,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
    10, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(88,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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(88,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
    9, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(88,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
    10, //immediately_derived
  0, 0},
  {&cd_S20955C7,    ABISELECT(80,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
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20955C2,    ABISELECT(80,52), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2398C25_nt,    ABISELECT(160,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
    21, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20955C5,    ABISELECT(176,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
    16, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(176,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
    16, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(176,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
    18, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20955C12,    ABISELECT(168,128), //bcp->offset
    58, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S20955C11,    ABISELECT(192,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S20955C14,    ABISELECT(152,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20955C9,    ABISELECT(152,116), //bcp->offset
    45, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    ABISELECT(192,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
    25, //immediately_derived
  0, 0},
  {&cd_S20955C14,    ABISELECT(776,576), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S20955C16,    ABISELECT(776,576), //bcp->offset
    80, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S20955C15,    ABISELECT(192,144), //bcp->offset
    62, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C38,    ABISELECT(800,588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    ABISELECT(808,592), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(808,592), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(808,592), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C7,    ABISELECT(800,588), //bcp->offset
    90, //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
    11, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S20955C25,    ABISELECT(792,584), //bcp->offset
    84, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    58, //immediately_derived
  0, 1},
  {&cd_S20955C5,    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
    34, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    34, //immediately_derived
  0, 0},
  {&cd_S20955C4,    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
    35, //immediately_derived
  0, 0},
  {&cd_S20955C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S20955C27,    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
    28, //init_seq
    58, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(840,616), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(840,616), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(840,616), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(832,608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S20955C20,    ABISELECT(824,604), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S20955C22,    ABISELECT(824,604), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    49, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(864,632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(864,632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(864,632), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S20955C12,    ABISELECT(856,628), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S20955C24,    ABISELECT(856,628), //bcp->offset
    102, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    70, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S20955C21,    ABISELECT(824,604), //bcp->offset
    95, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    56, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(1096,780), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    52, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(1096,780), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    52, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(1096,780), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    55, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(1088,772), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    54, //immediately_derived
  0, 0},
  {&cd_S20955C20,    ABISELECT(1080,768), //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
    55, //immediately_derived
  0, 0},
  {&cd_S20955C22,    ABISELECT(1080,768), //bcp->offset
    106, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    56, //immediately_derived
  0, 1},
  {&cd_S20955C28,    ABISELECT(24,20), //bcp->offset
    23, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    58, //immediately_derived
  0, 0},
  {&cd_S2398C25_nt,    ABISELECT(32,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
    58, //immediately_derived
  0, 0},
  {&cd_S20955C26,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C28,    ABISELECT(1112,792), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    71, //immediately_derived
  0, 0},
  {&cd_S20955C19,    ABISELECT(1128,800), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    61, //immediately_derived
  0, 0},
  {&cd_S20955C18,    ABISELECT(1128,800), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    88, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    70, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(1312,952), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    64, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(1312,952), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    64, //immediately_derived
  0, 0},
  {&cd_S20955C4,    ABISELECT(1312,952), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    67, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(1304,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
    66, //immediately_derived
  0, 0},
  {&cd_S20955C20,    ABISELECT(1296,940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    95, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    67, //immediately_derived
  0, 0},
  {&cd_S20955C22,    ABISELECT(1296,940), //bcp->offset
    139, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    94, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    70, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(1336,968), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    69, //immediately_derived
  0, 0},
  {&cd_S20955C20,    ABISELECT(1328,964), //bcp->offset
    144, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    97, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    70, //immediately_derived
  0, 0},
  {&cd_S20955C30,    ABISELECT(1128,800), //bcp->offset
    127, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    87, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    71, //immediately_derived
  0, 1},
  {&cd_S20955C29,    ABISELECT(1112,792), //bcp->offset
    111, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20955C1[];
extern void _ZN8S20955C1D1Ev();
extern void _ZN8S20955C1D0Ev();
extern void ABISELECT(_ZThn24_N8S20955C1D1Ev,_ZThn20_N8S20955C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S20955C1D0Ev,_ZThn20_N8S20955C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N8S20955C1D1Ev,_ZTv0_n24_N8S20955C1D1Ev)();
extern void ABISELECT(_ZThn80_N8S20955C1D1Ev,_ZThn52_N8S20955C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20955C1D0Ev,_ZTv0_n24_N8S20955C1D0Ev)();
extern void ABISELECT(_ZThn80_N8S20955C1D0Ev,_ZThn52_N8S20955C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20955C1D1Ev,_ZTv0_n44_N8S20955C1D1Ev)();
extern void ABISELECT(_ZThn152_N8S20955C1D1Ev,_ZThn116_N8S20955C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20955C1D0Ev,_ZTv0_n44_N8S20955C1D0Ev)();
extern void ABISELECT(_ZThn152_N8S20955C1D0Ev,_ZThn116_N8S20955C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20955C1D1Ev,_ZTv0_n40_N8S20955C1D1Ev)();
extern void ABISELECT(_ZThn192_N8S20955C1D1Ev,_ZThn144_N8S20955C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20955C1D0Ev,_ZTv0_n40_N8S20955C1D0Ev)();
extern void ABISELECT(_ZThn192_N8S20955C1D0Ev,_ZThn144_N8S20955C1D0Ev)() __attribute__((weak));
extern void _ZN9S20955C152v1Ev();
extern void ABISELECT(_ZTv0_n32_N8S20955C1D1Ev,_ZTv0_n16_N8S20955C1D1Ev)();
extern void ABISELECT(_ZThn792_N8S20955C1D1Ev,_ZThn584_N8S20955C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20955C1D0Ev,_ZTv0_n16_N8S20955C1D0Ev)();
extern void ABISELECT(_ZThn792_N8S20955C1D0Ev,_ZThn584_N8S20955C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20955C1D1Ev,_ZTv0_n12_N8S20955C1D1Ev)();
extern void ABISELECT(_ZThn800_N8S20955C1D1Ev,_ZThn588_N8S20955C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20955C1D0Ev,_ZTv0_n12_N8S20955C1D0Ev)();
extern void ABISELECT(_ZThn800_N8S20955C1D0Ev,_ZThn588_N8S20955C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S20955C1D1Ev,_ZTv0_n56_N8S20955C1D1Ev)();
extern void ABISELECT(_ZThn1112_N8S20955C1D1Ev,_ZThn792_N8S20955C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S20955C1D0Ev,_ZTv0_n56_N8S20955C1D0Ev)();
extern void ABISELECT(_ZThn1112_N8S20955C1D0Ev,_ZThn792_N8S20955C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20955C1D1Ev,_ZTv0_n40_N8S20955C1D1Ev)();
extern void ABISELECT(_ZThn1128_N8S20955C1D1Ev,_ZThn800_N8S20955C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20955C1D0Ev,_ZTv0_n40_N8S20955C1D0Ev)();
extern void ABISELECT(_ZThn1128_N8S20955C1D0Ev,_ZThn800_N8S20955C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20955C1[] = {
  ABISELECT(1128,800),
  ABISELECT(1112,792),
  ABISELECT(776,576),
  ABISELECT(776,576),
  ABISELECT(192,144),
  ABISELECT(192,144),
  ABISELECT(152,116),
  ABISELECT(192,144),
  ABISELECT(80,52),
  ABISELECT(1080,768),
  0,
  ABISELECT(168,128),
  ABISELECT(136,100),
  ABISELECT(824,604),
  ABISELECT(800,588),
  ABISELECT(792,584),
  ABISELECT(144,108),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C1[0]),
  (VTBL_ENTRY)&_ZN8S20955C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20955C1D0Ev,
  ABISELECT(168,124),
  ABISELECT(56,32),
  ABISELECT(1056,748),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(144,108),
  ABISELECT(-24,-20),
  ABISELECT(800,584),
  ABISELECT(120,88),
  ABISELECT(112,80),
  ABISELECT(-24,-20),
  (VTBL_ENTRY)&(_ZTI8S20955C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S20955C1D1Ev,_ZThn20_N8S20955C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S20955C1D0Ev,_ZThn20_N8S20955C1D0Ev),
  ABISELECT(-80,-52),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(112,92),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI8S20955C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20955C1D1Ev,_ZTv0_n24_N8S20955C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20955C1D0Ev,_ZTv0_n24_N8S20955C1D0Ev),
  ABISELECT(-152,-116),
  -16,
  ABISELECT(40,28),
  ABISELECT(-72,-64),
  ABISELECT(-152,-116),
  ABISELECT(-152,-116),
  ABISELECT(16,12),
  ABISELECT(40,28),
  -8,
  ABISELECT(-152,-116),
  (VTBL_ENTRY)&(_ZTI8S20955C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20955C1D1Ev,_ZTv0_n44_N8S20955C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20955C1D0Ev,_ZTv0_n44_N8S20955C1D0Ev),
  ABISELECT(-168,-128),
  ABISELECT(-168,-128),
  ABISELECT(-168,-128),
  (VTBL_ENTRY)&(_ZTI8S20955C1[0]),
  0,
  ABISELECT(584,432),
  ABISELECT(584,432),
  0,
  ABISELECT(-40,-28),
  ABISELECT(-192,-144),
  0,
  ABISELECT(-112,-92),
  ABISELECT(-192,-144),
  ABISELECT(-192,-144),
  ABISELECT(-24,-16),
  ABISELECT(-48,-36),
  ABISELECT(-56,-44),
  ABISELECT(-192,-144),
  (VTBL_ENTRY)&(_ZTI8S20955C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20955C1D1Ev,_ZTv0_n40_N8S20955C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20955C1D0Ev,_ZTv0_n40_N8S20955C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20955C152v1Ev,
  0,
  ABISELECT(-632,-468),
  ABISELECT(-776,-576),
  (VTBL_ENTRY)&(_ZTI8S20955C1[0]),
  ABISELECT(-792,-584),
  ABISELECT(8,4),
  ABISELECT(-792,-584),
  (VTBL_ENTRY)&(_ZTI8S20955C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20955C1D1Ev,_ZTv0_n16_N8S20955C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20955C1D0Ev,_ZTv0_n16_N8S20955C1D0Ev),
  ABISELECT(-800,-588),
  ABISELECT(-800,-588),
  (VTBL_ENTRY)&(_ZTI8S20955C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20955C1D1Ev,_ZTv0_n12_N8S20955C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20955C1D0Ev,_ZTv0_n12_N8S20955C1D0Ev),
  ABISELECT(-824,-604),
  ABISELECT(-688,-504),
  ABISELECT(-824,-604),
  ABISELECT(-656,-476),
  ABISELECT(-824,-604),
  ABISELECT(-824,-604),
  (VTBL_ENTRY)&(_ZTI8S20955C1[0]),
  ABISELECT(-856,-628),
  ABISELECT(-856,-628),
  ABISELECT(-856,-628),
  (VTBL_ENTRY)&(_ZTI8S20955C1[0]),
  ABISELECT(-1080,-768),
  ABISELECT(-912,-640),
  ABISELECT(-1080,-768),
  ABISELECT(-1080,-768),
  (VTBL_ENTRY)&(_ZTI8S20955C1[0]),
  ABISELECT(-1112,-792),
  ABISELECT(-920,-648),
  ABISELECT(-1032,-740),
  ABISELECT(16,8),
  ABISELECT(-336,-216),
  ABISELECT(-336,-216),
  ABISELECT(-976,-692),
  ABISELECT(-1112,-792),
  ABISELECT(-944,-664),
  ABISELECT(-1112,-792),
  ABISELECT(-32,-24),
  ABISELECT(-968,-684),
  ABISELECT(-1112,-792),
  (VTBL_ENTRY)&(_ZTI8S20955C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S20955C1D1Ev,_ZTv0_n56_N8S20955C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S20955C1D0Ev,_ZTv0_n56_N8S20955C1D0Ev),
  ABISELECT(-1128,-800),
  ABISELECT(-1128,-800),
  ABISELECT(-960,-672),
  ABISELECT(-1128,-800),
  ABISELECT(-936,-656),
  ABISELECT(-1048,-748),
  ABISELECT(-984,-692),
  ABISELECT(-992,-700),
  ABISELECT(-1128,-800),
  (VTBL_ENTRY)&(_ZTI8S20955C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20955C1D1Ev,_ZTv0_n40_N8S20955C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20955C1D0Ev,_ZTv0_n40_N8S20955C1D0Ev),
  ABISELECT(-1296,-940),
  ABISELECT(-1128,-812),
  ABISELECT(-1296,-940),
  ABISELECT(-1296,-940),
  (VTBL_ENTRY)&(_ZTI8S20955C1[0]),
  ABISELECT(-1328,-964),
  ABISELECT(-1328,-964),
  (VTBL_ENTRY)&(_ZTI8S20955C1[0]),
};
extern VTBL_ENTRY _ZTV8S20955C1[];
extern void _ZN9S20955C26D1Ev();
extern void _ZN9S20955C26D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20955C26__8S20955C1[] = {
  ABISELECT(192,144),
  ABISELECT(80,52),
  ABISELECT(1080,768),
  0,
  ABISELECT(168,128),
  ABISELECT(136,100),
  ABISELECT(824,604),
  ABISELECT(800,588),
  ABISELECT(792,584),
  ABISELECT(144,108),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C26[0]),
  (VTBL_ENTRY)&_ZN9S20955C26D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C26D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20955C279S20955C26__8S20955C1[] = {
  ABISELECT(144,108),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C27[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C129S20955C279S20955C26__A1__8S20955C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C12[0]),
};
extern void _ZN9S20955C28D1Ev();
extern void _ZN9S20955C28D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20955C289S20955C26__8S20955C1[] = {
  ABISELECT(168,124),
  ABISELECT(56,32),
  ABISELECT(1056,748),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(144,108),
  ABISELECT(-24,-20),
  ABISELECT(800,584),
  ABISELECT(120,88),
  ABISELECT(112,80),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C28[0]),
  (VTBL_ENTRY)&_ZN9S20955C28D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C28D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20955C21__9S20955C289S20955C26__8S20955C1[] = {
  ABISELECT(-824,-604),
  ABISELECT(-688,-504),
  ABISELECT(-824,-604),
  ABISELECT(-656,-476),
  ABISELECT(-824,-604),
  ABISELECT(-800,-584),
  (VTBL_ENTRY)&(_ZTI9S20955C28[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C289S20955C26__8S20955C1[] = {
  ABISELECT(-168,-128),
  ABISELECT(-168,-128),
  ABISELECT(-144,-108),
  (VTBL_ENTRY)&(_ZTI9S20955C28[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C249S20955C21__9S20955C289S20955C26__8S20955C1[] = {
  ABISELECT(-856,-628),
  ABISELECT(-856,-628),
  ABISELECT(-832,-608),
  (VTBL_ENTRY)&(_ZTI9S20955C28[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C22__A1__9S20955C289S20955C26__8S20955C1[] = {
  ABISELECT(-1080,-768),
  ABISELECT(-912,-640),
  ABISELECT(-1080,-768),
  ABISELECT(-1056,-748),
  (VTBL_ENTRY)&(_ZTI9S20955C28[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20955C28D1Ev,_ZTv0_n24_N9S20955C28D1Ev)();
extern void ABISELECT(_ZThn56_N9S20955C28D1Ev,_ZThn32_N9S20955C28D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20955C28D0Ev,_ZTv0_n24_N9S20955C28D0Ev)();
extern void ABISELECT(_ZThn56_N9S20955C28D0Ev,_ZThn32_N9S20955C28D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C289S20955C26__8S20955C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(112,92),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI9S20955C28[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C28D1Ev,_ZTv0_n24_N9S20955C28D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C28D0Ev,_ZTv0_n24_N9S20955C28D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__9S20955C289S20955C26__8S20955C1[] = {
  ABISELECT(-48,-36),
  ABISELECT(-56,-44),
  ABISELECT(-168,-124),
  (VTBL_ENTRY)&(_ZTI9S20955C28[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S20955C26D1Ev,_ZTv0_n16_N9S20955C26D1Ev)();
extern void ABISELECT(_ZThn792_N9S20955C26D1Ev,_ZThn584_N9S20955C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20955C26D0Ev,_ZTv0_n16_N9S20955C26D0Ev)();
extern void ABISELECT(_ZThn792_N9S20955C26D0Ev,_ZThn584_N9S20955C26D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20955C25__9S20955C26__8S20955C1[] = {
  ABISELECT(-792,-584),
  ABISELECT(8,4),
  ABISELECT(-792,-584),
  (VTBL_ENTRY)&(_ZTI9S20955C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20955C26D1Ev,_ZTv0_n16_N9S20955C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20955C26D0Ev,_ZTv0_n16_N9S20955C26D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20955C26D1Ev,_ZTv0_n12_N9S20955C26D1Ev)();
extern void ABISELECT(_ZThn800_N9S20955C26D1Ev,_ZThn588_N9S20955C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20955C26D0Ev,_ZTv0_n12_N9S20955C26D0Ev)();
extern void ABISELECT(_ZThn800_N9S20955C26D0Ev,_ZThn588_N9S20955C26D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20955C7__9S20955C26__8S20955C1[] = {
  ABISELECT(-800,-588),
  ABISELECT(-800,-588),
  (VTBL_ENTRY)&(_ZTI9S20955C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20955C26D1Ev,_ZTv0_n12_N9S20955C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20955C26D0Ev,_ZTv0_n12_N9S20955C26D0Ev),
};
extern void ABISELECT(_ZThn24_N9S20955C26D1Ev,_ZThn20_N9S20955C26D1Ev)();
extern void ABISELECT(_ZThn24_N9S20955C26D0Ev,_ZThn20_N9S20955C26D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20955C28__9S20955C26__8S20955C1[] = {
  ABISELECT(168,124),
  ABISELECT(56,32),
  ABISELECT(1056,748),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(144,108),
  ABISELECT(-24,-20),
  ABISELECT(800,584),
  ABISELECT(120,88),
  ABISELECT(112,80),
  ABISELECT(-24,-20),
  (VTBL_ENTRY)&(_ZTI9S20955C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N9S20955C26D1Ev,_ZThn20_N9S20955C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N9S20955C26D0Ev,_ZThn20_N9S20955C26D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20955C21__9S20955C26__8S20955C1[] = {
  ABISELECT(-824,-604),
  ABISELECT(-688,-504),
  ABISELECT(-824,-604),
  ABISELECT(-656,-476),
  ABISELECT(-824,-604),
  ABISELECT(-824,-604),
  (VTBL_ENTRY)&(_ZTI9S20955C26[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__A1__9S20955C26__8S20955C1[] = {
  ABISELECT(-168,-128),
  ABISELECT(-168,-128),
  ABISELECT(-168,-128),
  (VTBL_ENTRY)&(_ZTI9S20955C26[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C249S20955C21__9S20955C26__8S20955C1[] = {
  ABISELECT(-856,-628),
  ABISELECT(-856,-628),
  ABISELECT(-856,-628),
  (VTBL_ENTRY)&(_ZTI9S20955C26[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C22__A1__9S20955C26__8S20955C1[] = {
  ABISELECT(-1080,-768),
  ABISELECT(-912,-640),
  ABISELECT(-1080,-768),
  ABISELECT(-1080,-768),
  (VTBL_ENTRY)&(_ZTI9S20955C26[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20955C26D1Ev,_ZTv0_n24_N9S20955C26D1Ev)();
extern void ABISELECT(_ZThn80_N9S20955C26D1Ev,_ZThn52_N9S20955C26D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20955C26D0Ev,_ZTv0_n24_N9S20955C26D0Ev)();
extern void ABISELECT(_ZThn80_N9S20955C26D0Ev,_ZThn52_N9S20955C26D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C26__8S20955C1[] = {
  ABISELECT(-80,-52),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(112,92),
  ABISELECT(-80,-52),
  (VTBL_ENTRY)&(_ZTI9S20955C26[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C26D1Ev,_ZTv0_n24_N9S20955C26D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C26D0Ev,_ZTv0_n24_N9S20955C26D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__9S20955C26__8S20955C1[] = {
  ABISELECT(-48,-36),
  ABISELECT(-56,-44),
  ABISELECT(-192,-144),
  (VTBL_ENTRY)&(_ZTI9S20955C26[0]),
};
extern void _ZN8S20955C2D1Ev();
extern void _ZN8S20955C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20955C2__8S20955C1[] = {
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(112,92),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C2[0]),
  (VTBL_ENTRY)&_ZN8S20955C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20955C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__8S20955C2__8S20955C1[] = {
  ABISELECT(-48,-36),
  ABISELECT(-56,-44),
  ABISELECT(-112,-92),
  (VTBL_ENTRY)&(_ZTI8S20955C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__8S20955C1[] = {
  ABISELECT(-48,-36),
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C3[0]),
};
extern void _ZN8S20955C9D1Ev();
extern void _ZN8S20955C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20955C9__8S20955C1[] = {
  -16,
  ABISELECT(40,28),
  ABISELECT(-72,-64),
  ABISELECT(-152,-116),
  ABISELECT(-152,-116),
  ABISELECT(16,12),
  ABISELECT(40,28),
  -8,
  0,
  (VTBL_ENTRY)&(_ZTI8S20955C9[0]),
  (VTBL_ENTRY)&_ZN8S20955C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20955C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20955C148S20955C9__8S20955C1[] = {
  -8,
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C14[0]),
};
extern void ABISELECT(_ZTv0_n80_N8S20955C9D1Ev,_ZTv0_n40_N8S20955C9D1Ev)();
extern void ABISELECT(_ZThn40_N8S20955C9D1Ev,_ZThn28_N8S20955C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20955C9D0Ev,_ZTv0_n40_N8S20955C9D0Ev)();
extern void ABISELECT(_ZThn40_N8S20955C9D0Ev,_ZThn28_N8S20955C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20955C11__8S20955C9__8S20955C1[] = {
  ABISELECT(-40,-28),
  0,
  ABISELECT(-112,-92),
  ABISELECT(-192,-144),
  ABISELECT(-192,-144),
  ABISELECT(-24,-16),
  ABISELECT(-48,-36),
  ABISELECT(-56,-44),
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI8S20955C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20955C9D1Ev,_ZTv0_n40_N8S20955C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20955C9D0Ev,_ZTv0_n40_N8S20955C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__8S20955C9__8S20955C1[] = {
  ABISELECT(-168,-128),
  ABISELECT(-168,-128),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S20955C9[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S20955C9D1Ev,_ZTv0_n24_N8S20955C9D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S20955C9D0Ev,_ZTv0_n24_N8S20955C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20955C2__8S20955C9__8S20955C1[] = {
  ABISELECT(72,64),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(112,92),
  ABISELECT(72,64),
  (VTBL_ENTRY)&(_ZTI8S20955C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20955C9D1Ev,_ZTv0_n24_N8S20955C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20955C9D0Ev,_ZTv0_n24_N8S20955C9D0Ev),
};
extern void _ZN9S20955C11D1Ev();
extern void _ZN9S20955C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20955C11__8S20955C1[] = {
  0,
  ABISELECT(-112,-92),
  ABISELECT(-192,-144),
  ABISELECT(-192,-144),
  ABISELECT(-24,-16),
  ABISELECT(-48,-36),
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C11[0]),
  (VTBL_ENTRY)&_ZN9S20955C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C11__8S20955C1[] = {
  ABISELECT(-168,-128),
  ABISELECT(-168,-128),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI9S20955C11[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20955C11D1Ev,_ZTv0_n24_N9S20955C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20955C11D0Ev,_ZTv0_n24_N9S20955C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C11__8S20955C1[] = {
  ABISELECT(112,92),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(112,92),
  ABISELECT(112,92),
  (VTBL_ENTRY)&(_ZTI9S20955C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C11D1Ev,_ZTv0_n24_N9S20955C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C11D0Ev,_ZTv0_n24_N9S20955C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__8S20955C1[] = {
  ABISELECT(-168,-128),
  ABISELECT(-168,-128),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C12[0]),
};
extern void ABISELECT(_ZTv0_n80_N9S20955C15D1Ev,_ZTv0_n40_N9S20955C15D1Ev)();
extern void _ZN9S20955C15D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20955C15D0Ev,_ZTv0_n40_N9S20955C15D0Ev)();
extern void _ZN9S20955C15D0Ev() __attribute__((weak));
extern void _ZN9S20955C152v1Ev();
static  VTBL_ENTRY _tg__ZTV9S20955C15__8S20955C1[] = {
  ABISELECT(584,432),
  ABISELECT(584,432),
  0,
  ABISELECT(-40,-28),
  0,
  0,
  ABISELECT(-112,-92),
  ABISELECT(-192,-144),
  ABISELECT(-192,-144),
  ABISELECT(-24,-16),
  ABISELECT(-48,-36),
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20955C15D1Ev,_ZTv0_n40_N9S20955C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20955C15D0Ev,_ZTv0_n40_N9S20955C15D0Ev),
  (VTBL_ENTRY)&_ZN9S20955C152v1Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20955C15D1Ev,_ZTv0_n24_N9S20955C15D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20955C15D0Ev,_ZTv0_n24_N9S20955C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C15__8S20955C1[] = {
  ABISELECT(112,92),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(112,92),
  ABISELECT(112,92),
  (VTBL_ENTRY)&(_ZTI9S20955C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C15D1Ev,_ZTv0_n24_N9S20955C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C15D0Ev,_ZTv0_n24_N9S20955C15D0Ev),
};
extern void ABISELECT(_ZTv0_n88_N9S20955C15D1Ev,_ZTv0_n44_N9S20955C15D1Ev)();
extern void ABISELECT(_ZTv0_n88_N9S20955C15D0Ev,_ZTv0_n44_N9S20955C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20955C9__9S20955C15__8S20955C1[] = {
  ABISELECT(40,28),
  -16,
  ABISELECT(40,28),
  ABISELECT(-72,-64),
  ABISELECT(-152,-116),
  ABISELECT(-152,-116),
  ABISELECT(16,12),
  ABISELECT(40,28),
  -8,
  ABISELECT(40,28),
  (VTBL_ENTRY)&(_ZTI9S20955C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N9S20955C15D1Ev,_ZTv0_n44_N9S20955C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N9S20955C15D0Ev,_ZTv0_n44_N9S20955C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C15__8S20955C1[] = {
  ABISELECT(-168,-128),
  ABISELECT(-168,-128),
  ABISELECT(24,16),
  (VTBL_ENTRY)&(_ZTI9S20955C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C16__9S20955C15__8S20955C1[] = {
  0,
  ABISELECT(-632,-468),
  ABISELECT(-584,-432),
  (VTBL_ENTRY)&(_ZTI9S20955C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C16__8S20955C1[] = {
  0,
  ABISELECT(-632,-468),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C16[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C14__A1__8S20955C1[] = {
  ABISELECT(-632,-468),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C14[0]),
};
extern void _ZN9S20955C25D1Ev();
extern void _ZN9S20955C25D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20955C25__8S20955C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C25[0]),
  (VTBL_ENTRY)&_ZN9S20955C25D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C25D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20955C25D1Ev,_ZTv0_n12_N9S20955C25D1Ev)();
extern void ABISELECT(_ZThn8_N9S20955C25D1Ev,_ZThn4_N9S20955C25D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20955C25D0Ev,_ZTv0_n12_N9S20955C25D0Ev)();
extern void ABISELECT(_ZThn8_N9S20955C25D0Ev,_ZThn4_N9S20955C25D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20955C7__9S20955C25__8S20955C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20955C25[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20955C25D1Ev,_ZTv0_n12_N9S20955C25D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20955C25D0Ev,_ZTv0_n12_N9S20955C25D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20955C21__8S20955C1[] = {
  ABISELECT(-824,-604),
  ABISELECT(-688,-504),
  ABISELECT(-824,-604),
  ABISELECT(-656,-476),
  ABISELECT(-824,-604),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C21[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C229S20955C21__8S20955C1[] = {
  ABISELECT(-824,-604),
  ABISELECT(-656,-476),
  ABISELECT(-824,-604),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C209S20955C229S20955C21__8S20955C1[] = {
  ABISELECT(-824,-604),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C229S20955C21__8S20955C1[] = {
  ABISELECT(-168,-128),
  ABISELECT(-168,-128),
  ABISELECT(656,476),
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C249S20955C21__8S20955C1[] = {
  ABISELECT(-856,-628),
  ABISELECT(-856,-628),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C24[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C129S20955C249S20955C21__A2__8S20955C1[] = {
  ABISELECT(-856,-628),
  ABISELECT(-856,-628),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C21__8S20955C1[] = {
  ABISELECT(-168,-128),
  ABISELECT(-168,-128),
  ABISELECT(656,476),
  (VTBL_ENTRY)&(_ZTI9S20955C21[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C24__9S20955C21__8S20955C1[] = {
  ABISELECT(-856,-628),
  ABISELECT(-856,-628),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI9S20955C21[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C22__A1__8S20955C1[] = {
  ABISELECT(-1080,-768),
  ABISELECT(-912,-640),
  ABISELECT(-1080,-768),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C209S20955C22__A1__8S20955C1[] = {
  ABISELECT(-1080,-768),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C22__A1__8S20955C1[] = {
  ABISELECT(-168,-128),
  ABISELECT(-168,-128),
  ABISELECT(912,640),
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
extern void _ZN9S20955C29D1Ev();
extern void _ZN9S20955C29D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20955C29__8S20955C1[] = {
  ABISELECT(-920,-648),
  ABISELECT(-1032,-740),
  ABISELECT(16,8),
  ABISELECT(-336,-216),
  ABISELECT(-336,-216),
  ABISELECT(-976,-692),
  ABISELECT(-1112,-792),
  ABISELECT(-944,-664),
  ABISELECT(-1112,-792),
  ABISELECT(-32,-24),
  ABISELECT(-968,-684),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C29[0]),
  (VTBL_ENTRY)&_ZN9S20955C29D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C29D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20955C22__9S20955C29__8S20955C1[] = {
  ABISELECT(-1080,-768),
  ABISELECT(-912,-640),
  ABISELECT(-1080,-768),
  ABISELECT(32,24),
  (VTBL_ENTRY)&(_ZTI9S20955C29[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C29__8S20955C1[] = {
  ABISELECT(-168,-128),
  ABISELECT(-168,-128),
  ABISELECT(944,664),
  (VTBL_ENTRY)&(_ZTI9S20955C29[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C16__9S20955C29__8S20955C1[] = {
  0,
  ABISELECT(-632,-468),
  ABISELECT(336,216),
  (VTBL_ENTRY)&(_ZTI9S20955C29[0]),
};
extern void ABISELECT(_ZTv0_n80_N9S20955C29D1Ev,_ZTv0_n40_N9S20955C29D1Ev)();
extern void ABISELECT(_ZThn16_N9S20955C29D1Ev,_ZThn8_N9S20955C29D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N9S20955C29D0Ev,_ZTv0_n40_N9S20955C29D0Ev)();
extern void ABISELECT(_ZThn16_N9S20955C29D0Ev,_ZThn8_N9S20955C29D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20955C30__9S20955C29__8S20955C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-1128,-800),
  ABISELECT(-960,-672),
  ABISELECT(-1128,-800),
  ABISELECT(-936,-656),
  ABISELECT(-1048,-748),
  ABISELECT(-984,-692),
  ABISELECT(-992,-700),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20955C29[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20955C29D1Ev,_ZTv0_n40_N9S20955C29D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N9S20955C29D0Ev,_ZTv0_n40_N9S20955C29D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20955C29D1Ev,_ZTv0_n24_N9S20955C29D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20955C29D0Ev,_ZTv0_n24_N9S20955C29D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C29__8S20955C1[] = {
  ABISELECT(1032,740),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(112,92),
  ABISELECT(1032,740),
  (VTBL_ENTRY)&(_ZTI9S20955C29[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C29D1Ev,_ZTv0_n24_N9S20955C29D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C29D0Ev,_ZTv0_n24_N9S20955C29D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__9S20955C29__8S20955C1[] = {
  ABISELECT(-48,-36),
  ABISELECT(-56,-44),
  ABISELECT(920,648),
  (VTBL_ENTRY)&(_ZTI9S20955C29[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C229S20955C30__A1__9S20955C29__8S20955C1[] = {
  ABISELECT(-1296,-940),
  ABISELECT(-1128,-812),
  ABISELECT(-1296,-940),
  ABISELECT(-184,-148),
  (VTBL_ENTRY)&(_ZTI9S20955C29[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C209S20955C30__A2__9S20955C29__8S20955C1[] = {
  ABISELECT(-1328,-964),
  ABISELECT(-216,-172),
  (VTBL_ENTRY)&(_ZTI9S20955C29[0]),
};
extern void _ZN9S20955C30D1Ev();
extern void _ZN9S20955C30D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20955C30__8S20955C1[] = {
  ABISELECT(-1128,-800),
  ABISELECT(-960,-672),
  ABISELECT(-1128,-800),
  ABISELECT(-936,-656),
  ABISELECT(-1048,-748),
  ABISELECT(-984,-692),
  ABISELECT(-992,-700),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C30[0]),
  (VTBL_ENTRY)&_ZN9S20955C30D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C30D0Ev,
};
extern void _ZN9S20955C18D1Ev();
extern void _ZN9S20955C18D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20955C189S20955C30__8S20955C1[] = {
  ABISELECT(-936,-656),
  ABISELECT(-1048,-748),
  ABISELECT(-984,-692),
  ABISELECT(-992,-700),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C18[0]),
  (VTBL_ENTRY)&_ZN9S20955C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C18D0Ev,
};
extern void _ZN9S20955C19D1Ev();
extern void _ZN9S20955C19D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20955C199S20955C189S20955C30__8S20955C1[] = {
  ABISELECT(-936,-656),
  ABISELECT(-1048,-748),
  ABISELECT(-984,-692),
  ABISELECT(-992,-700),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C19[0]),
  (VTBL_ENTRY)&_ZN9S20955C19D1Ev,
  (VTBL_ENTRY)&_ZN9S20955C19D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20955C19D1Ev,_ZTv0_n24_N9S20955C19D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20955C19D0Ev,_ZTv0_n24_N9S20955C19D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C199S20955C189S20955C30__8S20955C1[] = {
  ABISELECT(1048,748),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(112,92),
  ABISELECT(1048,748),
  (VTBL_ENTRY)&(_ZTI9S20955C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C19D1Ev,_ZTv0_n24_N9S20955C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C19D0Ev,_ZTv0_n24_N9S20955C19D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__9S20955C199S20955C189S20955C30__8S20955C1[] = {
  ABISELECT(-48,-36),
  ABISELECT(-56,-44),
  ABISELECT(936,656),
  (VTBL_ENTRY)&(_ZTI9S20955C19[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20955C18D1Ev,_ZTv0_n24_N9S20955C18D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20955C18D0Ev,_ZTv0_n24_N9S20955C18D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C189S20955C30__8S20955C1[] = {
  ABISELECT(1048,748),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(112,92),
  ABISELECT(1048,748),
  (VTBL_ENTRY)&(_ZTI9S20955C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C18D1Ev,_ZTv0_n24_N9S20955C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C18D0Ev,_ZTv0_n24_N9S20955C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__9S20955C189S20955C30__8S20955C1[] = {
  ABISELECT(-48,-36),
  ABISELECT(-56,-44),
  ABISELECT(936,656),
  (VTBL_ENTRY)&(_ZTI9S20955C18[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C229S20955C30__A2__8S20955C1[] = {
  ABISELECT(-1296,-940),
  ABISELECT(-1128,-812),
  ABISELECT(-1296,-940),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C209S20955C229S20955C30__A2__8S20955C1[] = {
  ABISELECT(-1296,-940),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C20[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C229S20955C30__A2__8S20955C1[] = {
  ABISELECT(-168,-128),
  ABISELECT(-168,-128),
  ABISELECT(1128,812),
  (VTBL_ENTRY)&(_ZTI9S20955C22[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C209S20955C30__A3__8S20955C1[] = {
  ABISELECT(-1328,-964),
  0,
  (VTBL_ENTRY)&(_ZTI9S20955C20[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20955C30D1Ev,_ZTv0_n24_N9S20955C30D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20955C30D0Ev,_ZTv0_n24_N9S20955C30D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20955C2__9S20955C30__8S20955C1[] = {
  ABISELECT(1048,748),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(112,92),
  ABISELECT(1048,748),
  (VTBL_ENTRY)&(_ZTI9S20955C30[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C30D1Ev,_ZTv0_n24_N9S20955C30D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20955C30D0Ev,_ZTv0_n24_N9S20955C30D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20955C3__9S20955C30__8S20955C1[] = {
  ABISELECT(-48,-36),
  ABISELECT(-56,-44),
  ABISELECT(936,656),
  (VTBL_ENTRY)&(_ZTI9S20955C30[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C22__9S20955C30__8S20955C1[] = {
  ABISELECT(-1296,-940),
  ABISELECT(-1128,-812),
  ABISELECT(-1296,-940),
  ABISELECT(-168,-140),
  (VTBL_ENTRY)&(_ZTI9S20955C30[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C12__9S20955C30__8S20955C1[] = {
  ABISELECT(-168,-128),
  ABISELECT(-168,-128),
  ABISELECT(960,672),
  (VTBL_ENTRY)&(_ZTI9S20955C30[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20955C20__A1__9S20955C30__8S20955C1[] = {
  ABISELECT(-1328,-964),
  ABISELECT(-200,-164),
  (VTBL_ENTRY)&(_ZTI9S20955C30[0]),
};
static  VTT_ENTRY vtt_S20955C1[] = {
  {&(_ZTV8S20955C1[21]),  21,147},
  {&(_tg__ZTV9S20955C26__8S20955C1[14]),  14,16},
  {&(_tg__ZTV9S20955C279S20955C26__8S20955C1[5]),  5,5},
  {&(_tg__ZTV9S20955C129S20955C279S20955C26__A1__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C289S20955C26__8S20955C1[12]),  12,14},
  {&(_tg__ZTV9S20955C21__9S20955C289S20955C26__8S20955C1[7]),  7,7},
  {&(_tg__ZTV9S20955C12__9S20955C289S20955C26__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C249S20955C21__9S20955C289S20955C26__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C22__A1__9S20955C289S20955C26__8S20955C1[5]),  5,5},
  {&(_tg__ZTV8S20955C2__9S20955C289S20955C26__8S20955C1[6]),  6,8},
  {&(_tg__ZTV8S20955C3__9S20955C289S20955C26__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C25__9S20955C26__8S20955C1[4]),  4,6},
  {&(_tg__ZTV8S20955C7__9S20955C26__8S20955C1[3]),  3,5},
  {&(_tg__ZTV9S20955C28__9S20955C26__8S20955C1[12]),  12,14},
  {&(_tg__ZTV9S20955C21__9S20955C26__8S20955C1[7]),  7,7},
  {&(_tg__ZTV9S20955C12__A1__9S20955C26__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C249S20955C21__9S20955C26__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C22__A1__9S20955C26__8S20955C1[5]),  5,5},
  {&(_tg__ZTV8S20955C2__9S20955C26__8S20955C1[6]),  6,8},
  {&(_tg__ZTV8S20955C3__9S20955C26__8S20955C1[4]),  4,4},
  {&(_ZTV8S20955C1[43]),  43,147},
  {&(_ZTV8S20955C1[77]),  77,147},
  {&(_ZTV8S20955C1[56]),  56,147},
  {&(_ZTV8S20955C1[77]),  77,147},
  {&(_ZTV8S20955C1[62]),  62,147},
  {&(_ZTV8S20955C1[77]),  77,147},
  {&(_ZTV8S20955C1[84]),  84,147},
  {&(_ZTV8S20955C1[84]),  84,147},
  {&(_ZTV8S20955C1[88]),  88,147},
  {&(_ZTV8S20955C1[93]),  93,147},
  {&(_ZTV8S20955C1[35]),  35,147},
  {&(_ZTV8S20955C1[102]),  102,147},
  {&(_ZTV8S20955C1[106]),  106,147},
  {&(_ZTV8S20955C1[111]),  111,147},
  {&(_ZTV8S20955C1[125]),  125,147},
  {&(_ZTV8S20955C1[137]),  137,147},
  {&(_ZTV8S20955C1[144]),  144,147},
  {&(_ZTV8S20955C1[147]),  147,147},
  {&(_tg__ZTV8S20955C2__8S20955C1[5]),  5,7},
  {&(_tg__ZTV8S20955C3__8S20955C2__8S20955C1[4]),  4,4},
  {&(_tg__ZTV8S20955C3__8S20955C1[4]),  4,4},
  {&(_tg__ZTV8S20955C9__8S20955C1[10]),  10,12},
  {&(_tg__ZTV9S20955C148S20955C9__8S20955C1[3]),  3,3},
  {&(_tg__ZTV9S20955C11__8S20955C9__8S20955C1[10]),  10,12},
  {&(_tg__ZTV9S20955C12__8S20955C9__8S20955C1[4]),  4,4},
  {&(_tg__ZTV8S20955C2__8S20955C9__8S20955C1[6]),  6,8},
  {&(_tg__ZTV9S20955C11__8S20955C9__8S20955C1[10]),  10,12},
  {&(_tg__ZTV9S20955C11__8S20955C1[9]),  9,11},
  {&(_tg__ZTV9S20955C12__9S20955C11__8S20955C1[4]),  4,4},
  {&(_tg__ZTV8S20955C2__9S20955C11__8S20955C1[6]),  6,8},
  {&(_tg__ZTV9S20955C11__8S20955C1[9]),  9,11},
  {&(_tg__ZTV9S20955C12__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C15__8S20955C1[14]),  14,17},
  {&(_tg__ZTV8S20955C2__9S20955C15__8S20955C1[6]),  6,8},
  {&(_tg__ZTV9S20955C15__8S20955C1[14]),  14,17},
  {&(_tg__ZTV8S20955C9__9S20955C15__8S20955C1[11]),  11,13},
  {&(_tg__ZTV9S20955C15__8S20955C1[14]),  14,17},
  {&(_tg__ZTV9S20955C12__9S20955C15__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C16__9S20955C15__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C16__9S20955C15__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C16__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C16__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C14__A1__8S20955C1[3]),  3,3},
  {&(_tg__ZTV9S20955C25__8S20955C1[3]),  3,5},
  {&(_tg__ZTV8S20955C7__9S20955C25__8S20955C1[3]),  3,5},
  {&(_tg__ZTV9S20955C21__8S20955C1[7]),  7,7},
  {&(_tg__ZTV9S20955C229S20955C21__8S20955C1[5]),  5,5},
  {&(_tg__ZTV9S20955C209S20955C229S20955C21__8S20955C1[3]),  3,3},
  {&(_tg__ZTV9S20955C12__9S20955C229S20955C21__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C249S20955C21__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C129S20955C249S20955C21__A2__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C12__9S20955C21__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C24__9S20955C21__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C22__A1__8S20955C1[5]),  5,5},
  {&(_tg__ZTV9S20955C209S20955C22__A1__8S20955C1[3]),  3,3},
  {&(_tg__ZTV9S20955C12__9S20955C22__A1__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C29__8S20955C1[13]),  13,15},
  {&(_tg__ZTV9S20955C22__9S20955C29__8S20955C1[5]),  5,5},
  {&(_tg__ZTV9S20955C12__9S20955C29__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C16__9S20955C29__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C16__9S20955C29__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C30__9S20955C29__8S20955C1[10]),  10,12},
  {&(_tg__ZTV8S20955C2__9S20955C29__8S20955C1[6]),  6,8},
  {&(_tg__ZTV8S20955C3__9S20955C29__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C229S20955C30__A1__9S20955C29__8S20955C1[5]),  5,5},
  {&(_tg__ZTV9S20955C209S20955C30__A2__9S20955C29__8S20955C1[3]),  3,3},
  {&(_tg__ZTV9S20955C30__8S20955C1[9]),  9,11},
  {&(_tg__ZTV9S20955C189S20955C30__8S20955C1[6]),  6,8},
  {&(_tg__ZTV9S20955C199S20955C189S20955C30__8S20955C1[6]),  6,8},
  {&(_tg__ZTV8S20955C2__9S20955C199S20955C189S20955C30__8S20955C1[6]),  6,8},
  {&(_tg__ZTV8S20955C3__9S20955C199S20955C189S20955C30__8S20955C1[4]),  4,4},
  {&(_tg__ZTV8S20955C2__9S20955C189S20955C30__8S20955C1[6]),  6,8},
  {&(_tg__ZTV8S20955C3__9S20955C189S20955C30__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C229S20955C30__A2__8S20955C1[5]),  5,5},
  {&(_tg__ZTV9S20955C209S20955C229S20955C30__A2__8S20955C1[3]),  3,3},
  {&(_tg__ZTV9S20955C12__9S20955C229S20955C30__A2__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C209S20955C30__A3__8S20955C1[3]),  3,3},
  {&(_tg__ZTV8S20955C2__9S20955C30__8S20955C1[6]),  6,8},
  {&(_tg__ZTV8S20955C3__9S20955C30__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C22__9S20955C30__8S20955C1[5]),  5,5},
  {&(_tg__ZTV9S20955C12__9S20955C30__8S20955C1[4]),  4,4},
  {&(_tg__ZTV9S20955C20__A1__9S20955C30__8S20955C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20955C1[];
extern  VTBL_ENTRY _ZTV8S20955C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20955C1[];
static VTBL_ENTRY alt_thunk_names76[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20955C29D0Ev,_ZTv0_n40_N9S20955C29D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20955C29D0Ev,_ZThn8_N9S20955C29D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20955C29D1Ev,_ZTv0_n40_N9S20955C29D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20955C29D1Ev,_ZThn8_N9S20955C29D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20955C25D0Ev,_ZTv0_n12_N9S20955C25D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20955C25D0Ev,_ZThn4_N9S20955C25D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20955C25D1Ev,_ZTv0_n12_N9S20955C25D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20955C25D1Ev,_ZThn4_N9S20955C25D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20955C15D0Ev,_ZTv0_n40_N9S20955C15D0Ev), // 
  (VTBL_ENTRY)_ZN9S20955C15D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N9S20955C15D1Ev,_ZTv0_n40_N9S20955C15D1Ev), // 
  (VTBL_ENTRY)_ZN9S20955C15D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20955C9D0Ev,_ZTv0_n40_N8S20955C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20955C9D0Ev,_ZThn28_N8S20955C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20955C9D1Ev,_ZTv0_n40_N8S20955C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20955C9D1Ev,_ZThn28_N8S20955C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C26D0Ev,_ZTv0_n24_N9S20955C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20955C26D0Ev,_ZThn52_N9S20955C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C26D1Ev,_ZTv0_n24_N9S20955C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N9S20955C26D1Ev,_ZThn52_N9S20955C26D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20955C26D0Ev,_ZTv0_n12_N9S20955C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N9S20955C26D0Ev,_ZThn588_N9S20955C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20955C26D1Ev,_ZTv0_n12_N9S20955C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N9S20955C26D1Ev,_ZThn588_N9S20955C26D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20955C26D0Ev,_ZTv0_n16_N9S20955C26D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn792_N9S20955C26D0Ev,_ZThn584_N9S20955C26D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20955C26D1Ev,_ZTv0_n16_N9S20955C26D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn792_N9S20955C26D1Ev,_ZThn584_N9S20955C26D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C28D0Ev,_ZTv0_n24_N9S20955C28D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20955C28D0Ev,_ZThn32_N9S20955C28D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20955C28D1Ev,_ZTv0_n24_N9S20955C28D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20955C28D1Ev,_ZThn32_N9S20955C28D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S20955C1D0Ev,_ZTv0_n56_N8S20955C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1112_N8S20955C1D0Ev,_ZThn792_N8S20955C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S20955C1D1Ev,_ZTv0_n56_N8S20955C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1112_N8S20955C1D1Ev,_ZThn792_N8S20955C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20955C1D0Ev,_ZTv0_n12_N8S20955C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N8S20955C1D0Ev,_ZThn588_N8S20955C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20955C1D1Ev,_ZTv0_n12_N8S20955C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N8S20955C1D1Ev,_ZThn588_N8S20955C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20955C1D0Ev,_ZTv0_n16_N8S20955C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn792_N8S20955C1D0Ev,_ZThn584_N8S20955C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20955C1D1Ev,_ZTv0_n16_N8S20955C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn792_N8S20955C1D1Ev,_ZThn584_N8S20955C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20955C1D0Ev,_ZTv0_n40_N8S20955C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1128_N8S20955C1D0Ev,_ZThn800_N8S20955C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20955C1D0Ev,_ZThn144_N8S20955C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20955C1D1Ev,_ZTv0_n40_N8S20955C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1128_N8S20955C1D1Ev,_ZThn800_N8S20955C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20955C1D1Ev,_ZThn144_N8S20955C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20955C1D0Ev,_ZTv0_n44_N8S20955C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S20955C1D0Ev,_ZThn116_N8S20955C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20955C1D1Ev,_ZTv0_n44_N8S20955C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N8S20955C1D1Ev,_ZThn116_N8S20955C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20955C1D0Ev,_ZTv0_n24_N8S20955C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20955C1D0Ev,_ZThn52_N8S20955C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20955C1D1Ev,_ZTv0_n24_N8S20955C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20955C1D1Ev,_ZThn52_N8S20955C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20955C1 = {  "S20955C1", // class name
  bases_S20955C1, 72,
  &(vtc_S20955C1[0]), // expected_vtbl_contents
  &(vtt_S20955C1[0]), // expected_vtt_contents
  ABISELECT(1344,976), // object size
  NSPAIRA(_ZTI8S20955C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20955C1),147, //virtual function table var
  21, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20955C1),102, //virtual table table var
  30, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names76,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6853C2  {
  int s6853c2f0;
  __tsi64 s6853c2f1;
  void *s6853c2f2[4];
  int s6853c2f3[2];
  void *s6853c2f4;
  ::S3351C4_nt s6853c2f5;
  void *s6853c2f6[2];
  virtual  ~S6853C2(); // _ZN7S6853C2D1Ev
  virtual void  v4(); // _ZN7S6853C22v4Ev
  virtual void  v5(); // _ZN7S6853C22v5Ev
  virtual void  v6(); // _ZN7S6853C22v6Ev
  virtual void  v7(); // _ZN7S6853C22v7Ev
  virtual void  v8(); // _ZN7S6853C22v8Ev
  virtual void  v9(); // _ZN7S6853C22v9Ev
  virtual void  v10(); // _ZN7S6853C23v10Ev
  virtual void  v11(); // _ZN7S6853C23v11Ev
  virtual void  v12(); // _ZN7S6853C23v12Ev
  virtual void  v13(); // _ZN7S6853C23v13Ev
  virtual void  v14(); // _ZN7S6853C23v14Ev
  virtual void  v15(); // _ZN7S6853C23v15Ev
  virtual void  v16(); // _ZN7S6853C23v16Ev
  virtual void  v17(); // _ZN7S6853C23v17Ev
  virtual void  v18(); // _ZN7S6853C23v18Ev
  virtual void  v19(); // _ZN7S6853C23v19Ev
  virtual void  v20(); // _ZN7S6853C23v20Ev
  virtual void  v21(); // _ZN7S6853C23v21Ev
  virtual void  v22(); // _ZN7S6853C23v22Ev
  virtual void  v23(); // _ZN7S6853C23v23Ev
  virtual void  v24(); // _ZN7S6853C23v24Ev
  virtual void  v25(); // _ZN7S6853C23v25Ev
  virtual void  v26(); // _ZN7S6853C23v26Ev
  virtual void  v27(); // _ZN7S6853C23v27Ev
  virtual void  v28(); // _ZN7S6853C23v28Ev
  virtual void  v29(); // _ZN7S6853C23v29Ev
  virtual void  v30(); // _ZN7S6853C23v30Ev
  virtual void  v31(); // _ZN7S6853C23v31Ev
  virtual void  v32(); // _ZN7S6853C23v32Ev
  virtual void  v33(); // _ZN7S6853C23v33Ev
  virtual void  v34(); // _ZN7S6853C23v34Ev
  virtual void  v35(); // _ZN7S6853C23v35Ev
  virtual void  v36(); // _ZN7S6853C23v36Ev
  virtual void  v37(); // _ZN7S6853C23v37Ev
  virtual void  v38(); // _ZN7S6853C23v38Ev
  virtual void  v39(); // _ZN7S6853C23v39Ev
  virtual void  v40(); // _ZN7S6853C23v40Ev
  virtual void  v41(); // _ZN7S6853C23v41Ev
  virtual void  v42(); // _ZN7S6853C23v42Ev
  virtual void  v43(); // _ZN7S6853C23v43Ev
  virtual void  v44(); // _ZN7S6853C23v44Ev
  virtual void  v45(); // _ZN7S6853C23v45Ev
  virtual void  v46(); // _ZN7S6853C23v46Ev
  virtual void  v47(); // _ZN7S6853C23v47Ev
  virtual void  v48(); // _ZN7S6853C23v48Ev
  virtual void  v49(); // _ZN7S6853C23v49Ev
  virtual void  v50(); // _ZN7S6853C23v50Ev
  virtual void  v51(); // _ZN7S6853C23v51Ev
  virtual void  v52(); // _ZN7S6853C23v52Ev
  virtual void  v53(); // _ZN7S6853C23v53Ev
  virtual void  v54(); // _ZN7S6853C23v54Ev
  virtual void  v55(); // _ZN7S6853C23v55Ev
  virtual void  v56(); // _ZN7S6853C23v56Ev
  virtual void  v57(); // _ZN7S6853C23v57Ev
  virtual void  v58(); // _ZN7S6853C23v58Ev
  virtual void  v59(); // _ZN7S6853C23v59Ev
  virtual void  v60(); // _ZN7S6853C23v60Ev
  virtual void  v61(); // _ZN7S6853C23v61Ev
  virtual void  v62(); // _ZN7S6853C23v62Ev
  virtual void  v63(); // _ZN7S6853C23v63Ev
  virtual void  v64(); // _ZN7S6853C23v64Ev
  virtual void  v65(); // _ZN7S6853C23v65Ev
  virtual void  v66(); // _ZN7S6853C23v66Ev
  virtual void  v67(); // _ZN7S6853C23v67Ev
  S6853C2(); // tgen
};
//SIG(-1 S6853C2) 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]}


 S6853C2 ::~S6853C2(){ note_dtor("S6853C2", this);}
void  S6853C2 ::v4(){vfunc_called(this, "_ZN7S6853C22v4Ev");}
void  S6853C2 ::v5(){vfunc_called(this, "_ZN7S6853C22v5Ev");}
void  S6853C2 ::v6(){vfunc_called(this, "_ZN7S6853C22v6Ev");}
void  S6853C2 ::v7(){vfunc_called(this, "_ZN7S6853C22v7Ev");}
void  S6853C2 ::v8(){vfunc_called(this, "_ZN7S6853C22v8Ev");}
void  S6853C2 ::v9(){vfunc_called(this, "_ZN7S6853C22v9Ev");}
void  S6853C2 ::v10(){vfunc_called(this, "_ZN7S6853C23v10Ev");}
void  S6853C2 ::v11(){vfunc_called(this, "_ZN7S6853C23v11Ev");}
void  S6853C2 ::v12(){vfunc_called(this, "_ZN7S6853C23v12Ev");}
void  S6853C2 ::v13(){vfunc_called(this, "_ZN7S6853C23v13Ev");}
void  S6853C2 ::v14(){vfunc_called(this, "_ZN7S6853C23v14Ev");}
void  S6853C2 ::v15(){vfunc_called(this, "_ZN7S6853C23v15Ev");}
void  S6853C2 ::v16(){vfunc_called(this, "_ZN7S6853C23v16Ev");}
void  S6853C2 ::v17(){vfunc_called(this, "_ZN7S6853C23v17Ev");}
void  S6853C2 ::v18(){vfunc_called(this, "_ZN7S6853C23v18Ev");}
void  S6853C2 ::v19(){vfunc_called(this, "_ZN7S6853C23v19Ev");}
void  S6853C2 ::v20(){vfunc_called(this, "_ZN7S6853C23v20Ev");}
void  S6853C2 ::v21(){vfunc_called(this, "_ZN7S6853C23v21Ev");}
void  S6853C2 ::v22(){vfunc_called(this, "_ZN7S6853C23v22Ev");}
void  S6853C2 ::v23(){vfunc_called(this, "_ZN7S6853C23v23Ev");}
void  S6853C2 ::v24(){vfunc_called(this, "_ZN7S6853C23v24Ev");}
void  S6853C2 ::v25(){vfunc_called(this, "_ZN7S6853C23v25Ev");}
void  S6853C2 ::v26(){vfunc_called(this, "_ZN7S6853C23v26Ev");}
void  S6853C2 ::v27(){vfunc_called(this, "_ZN7S6853C23v27Ev");}
void  S6853C2 ::v28(){vfunc_called(this, "_ZN7S6853C23v28Ev");}
void  S6853C2 ::v29(){vfunc_called(this, "_ZN7S6853C23v29Ev");}
void  S6853C2 ::v30(){vfunc_called(this, "_ZN7S6853C23v30Ev");}
void  S6853C2 ::v31(){vfunc_called(this, "_ZN7S6853C23v31Ev");}
void  S6853C2 ::v32(){vfunc_called(this, "_ZN7S6853C23v32Ev");}
void  S6853C2 ::v33(){vfunc_called(this, "_ZN7S6853C23v33Ev");}
void  S6853C2 ::v34(){vfunc_called(this, "_ZN7S6853C23v34Ev");}
void  S6853C2 ::v35(){vfunc_called(this, "_ZN7S6853C23v35Ev");}
void  S6853C2 ::v36(){vfunc_called(this, "_ZN7S6853C23v36Ev");}
void  S6853C2 ::v37(){vfunc_called(this, "_ZN7S6853C23v37Ev");}
void  S6853C2 ::v38(){vfunc_called(this, "_ZN7S6853C23v38Ev");}
void  S6853C2 ::v39(){vfunc_called(this, "_ZN7S6853C23v39Ev");}
void  S6853C2 ::v40(){vfunc_called(this, "_ZN7S6853C23v40Ev");}
void  S6853C2 ::v41(){vfunc_called(this, "_ZN7S6853C23v41Ev");}
void  S6853C2 ::v42(){vfunc_called(this, "_ZN7S6853C23v42Ev");}
void  S6853C2 ::v43(){vfunc_called(this, "_ZN7S6853C23v43Ev");}
void  S6853C2 ::v44(){vfunc_called(this, "_ZN7S6853C23v44Ev");}
void  S6853C2 ::v45(){vfunc_called(this, "_ZN7S6853C23v45Ev");}
void  S6853C2 ::v46(){vfunc_called(this, "_ZN7S6853C23v46Ev");}
void  S6853C2 ::v47(){vfunc_called(this, "_ZN7S6853C23v47Ev");}
void  S6853C2 ::v48(){vfunc_called(this, "_ZN7S6853C23v48Ev");}
void  S6853C2 ::v49(){vfunc_called(this, "_ZN7S6853C23v49Ev");}
void  S6853C2 ::v50(){vfunc_called(this, "_ZN7S6853C23v50Ev");}
void  S6853C2 ::v51(){vfunc_called(this, "_ZN7S6853C23v51Ev");}
void  S6853C2 ::v52(){vfunc_called(this, "_ZN7S6853C23v52Ev");}
void  S6853C2 ::v53(){vfunc_called(this, "_ZN7S6853C23v53Ev");}
void  S6853C2 ::v54(){vfunc_called(this, "_ZN7S6853C23v54Ev");}
void  S6853C2 ::v55(){vfunc_called(this, "_ZN7S6853C23v55Ev");}
void  S6853C2 ::v56(){vfunc_called(this, "_ZN7S6853C23v56Ev");}
void  S6853C2 ::v57(){vfunc_called(this, "_ZN7S6853C23v57Ev");}
void  S6853C2 ::v58(){vfunc_called(this, "_ZN7S6853C23v58Ev");}
void  S6853C2 ::v59(){vfunc_called(this, "_ZN7S6853C23v59Ev");}
void  S6853C2 ::v60(){vfunc_called(this, "_ZN7S6853C23v60Ev");}
void  S6853C2 ::v61(){vfunc_called(this, "_ZN7S6853C23v61Ev");}
void  S6853C2 ::v62(){vfunc_called(this, "_ZN7S6853C23v62Ev");}
void  S6853C2 ::v63(){vfunc_called(this, "_ZN7S6853C23v63Ev");}
void  S6853C2 ::v64(){vfunc_called(this, "_ZN7S6853C23v64Ev");}
void  S6853C2 ::v65(){vfunc_called(this, "_ZN7S6853C23v65Ev");}
void  S6853C2 ::v66(){vfunc_called(this, "_ZN7S6853C23v66Ev");}
void  S6853C2 ::v67(){vfunc_called(this, "_ZN7S6853C23v67Ev");}
S6853C2 ::S6853C2(){ note_ctor("S6853C2", this);} // tgen

static void Test_S6853C2()
{
  extern Class_Descriptor cd_S6853C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,16)];
    init_test(&cd_S6853C2, buf);
    S6853C2 *dp, &lv = *(dp=new (buf) S6853C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S6853C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6853C2)");
    check_field_offset(lv, s6853c2f0, ABISELECT(8,4), "S6853C2.s6853c2f0");
    check_field_offset(lv, s6853c2f1, ABISELECT(16,8), "S6853C2.s6853c2f1");
    check_field_offset(lv, s6853c2f2, ABISELECT(24,16), "S6853C2.s6853c2f2");
    check_field_offset(lv, s6853c2f3, ABISELECT(56,32), "S6853C2.s6853c2f3");
    check_field_offset(lv, s6853c2f4, ABISELECT(64,40), "S6853C2.s6853c2f4");
    check_field_offset(lv, s6853c2f5, ABISELECT(72,44), "S6853C2.s6853c2f5");
    check_field_offset(lv, s6853c2f6, ABISELECT(80,52), "S6853C2.s6853c2f6");
    test_class_info(&lv, &cd_S6853C2);
    dp->~S6853C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6853C2(Test_S6853C2, "S6853C2", ABISELECT(96,60));

#else // __cplusplus

extern void _ZN7S6853C2C1Ev();
extern void _ZN7S6853C2D1Ev();
Name_Map name_map_S6853C2[] = {
  NSPAIR(_ZN7S6853C2C1Ev),
  NSPAIR(_ZN7S6853C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6853C2[];
extern void _ZN7S6853C2D1Ev();
extern void _ZN7S6853C2D0Ev();
extern void _ZN7S6853C22v4Ev();
extern void _ZN7S6853C22v5Ev();
extern void _ZN7S6853C22v6Ev();
extern void _ZN7S6853C22v7Ev();
extern void _ZN7S6853C22v8Ev();
extern void _ZN7S6853C22v9Ev();
extern void _ZN7S6853C23v10Ev();
extern void _ZN7S6853C23v11Ev();
extern void _ZN7S6853C23v12Ev();
extern void _ZN7S6853C23v13Ev();
extern void _ZN7S6853C23v14Ev();
extern void _ZN7S6853C23v15Ev();
extern void _ZN7S6853C23v16Ev();
extern void _ZN7S6853C23v17Ev();
extern void _ZN7S6853C23v18Ev();
extern void _ZN7S6853C23v19Ev();
extern void _ZN7S6853C23v20Ev();
extern void _ZN7S6853C23v21Ev();
extern void _ZN7S6853C23v22Ev();
extern void _ZN7S6853C23v23Ev();
extern void _ZN7S6853C23v24Ev();
extern void _ZN7S6853C23v25Ev();
extern void _ZN7S6853C23v26Ev();
extern void _ZN7S6853C23v27Ev();
extern void _ZN7S6853C23v28Ev();
extern void _ZN7S6853C23v29Ev();
extern void _ZN7S6853C23v30Ev();
extern void _ZN7S6853C23v31Ev();
extern void _ZN7S6853C23v32Ev();
extern void _ZN7S6853C23v33Ev();
extern void _ZN7S6853C23v34Ev();
extern void _ZN7S6853C23v35Ev();
extern void _ZN7S6853C23v36Ev();
extern void _ZN7S6853C23v37Ev();
extern void _ZN7S6853C23v38Ev();
extern void _ZN7S6853C23v39Ev();
extern void _ZN7S6853C23v40Ev();
extern void _ZN7S6853C23v41Ev();
extern void _ZN7S6853C23v42Ev();
extern void _ZN7S6853C23v43Ev();
extern void _ZN7S6853C23v44Ev();
extern void _ZN7S6853C23v45Ev();
extern void _ZN7S6853C23v46Ev();
extern void _ZN7S6853C23v47Ev();
extern void _ZN7S6853C23v48Ev();
extern void _ZN7S6853C23v49Ev();
extern void _ZN7S6853C23v50Ev();
extern void _ZN7S6853C23v51Ev();
extern void _ZN7S6853C23v52Ev();
extern void _ZN7S6853C23v53Ev();
extern void _ZN7S6853C23v54Ev();
extern void _ZN7S6853C23v55Ev();
extern void _ZN7S6853C23v56Ev();
extern void _ZN7S6853C23v57Ev();
extern void _ZN7S6853C23v58Ev();
extern void _ZN7S6853C23v59Ev();
extern void _ZN7S6853C23v60Ev();
extern void _ZN7S6853C23v61Ev();
extern void _ZN7S6853C23v62Ev();
extern void _ZN7S6853C23v63Ev();
extern void _ZN7S6853C23v64Ev();
extern void _ZN7S6853C23v65Ev();
extern void _ZN7S6853C23v66Ev();
extern void _ZN7S6853C23v67Ev();
static  VTBL_ENTRY vtc_S6853C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6853C2[0]),
  (VTBL_ENTRY)&_ZN7S6853C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6853C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6853C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6853C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6853C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6853C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6853C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6853C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v12Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v13Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v20Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v21Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v22Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v23Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v24Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v25Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v26Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v27Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v28Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v29Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v30Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v31Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v32Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v33Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v34Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v35Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v36Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v37Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v38Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v39Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v40Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v41Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v42Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v43Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v44Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v45Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v46Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v47Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v48Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v49Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v50Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v51Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v52Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v53Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v54Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v55Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v56Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v57Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v58Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v59Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v60Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v61Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v62Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v63Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v64Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v65Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v66Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v67Ev,
};
extern VTBL_ENTRY _ZTI7S6853C2[];
extern  VTBL_ENTRY _ZTV7S6853C2[];
Class_Descriptor cd_S6853C2 = {  "S6853C2", // class name
  0,0,//no base classes
  &(vtc_S6853C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,60), // object size
  NSPAIRA(_ZTI7S6853C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6853C2),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  S6853C1  : S6853C2 {
  void *s6853c1f0[2];
  int s6853c1f1[2];
  unsigned int s6853c1f2:1;
  unsigned int s6853c1f3:1;
  unsigned int s6853c1f4:1;
  unsigned int s6853c1f5:1;
  unsigned int s6853c1f6:1;
  unsigned int s6853c1f7:1;
  unsigned int s6853c1f8:1;
  unsigned int s6853c1f9:1;
  unsigned int s6853c1f10:1;
  unsigned int s6853c1f11:1;
  unsigned int s6853c1f12:1;
  unsigned int s6853c1f13:1;
  unsigned int s6853c1f14:1;
  void *s6853c1f15;
  ::S3351C13_nt s6853c1f16;
  ::S3351C13_nt s6853c1f17;
  int s6853c1f18[3];
  ::S1299C12_nt s6853c1f19;
  ::S3351C13_nt s6853c1f20;
  int s6853c1f21[3];
  void *s6853c1f22;
  virtual  ~S6853C1(); // _ZN7S6853C1D1Ev
  virtual void  v1(); // _ZN7S6853C12v1Ev
  virtual void  v2(); // _ZN7S6853C12v2Ev
  virtual void  v3(); // _ZN7S6853C12v3Ev
  S6853C1(); // tgen
};
//SIG(1 S6853C1) C1{ BC2{ 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 FC3{ m Fi[2]} Fp[2]} vd v1 v2 v3 Fp[2] 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 Fp FC4{ m Fi[3]} FC4 Fi[3] FC5{ m Fi[4]} FC4 Fi[3] Fp}


 S6853C1 ::~S6853C1(){ note_dtor("S6853C1", this);}
void  S6853C1 ::v1(){vfunc_called(this, "_ZN7S6853C12v1Ev");}
void  S6853C1 ::v2(){vfunc_called(this, "_ZN7S6853C12v2Ev");}
void  S6853C1 ::v3(){vfunc_called(this, "_ZN7S6853C12v3Ev");}
S6853C1 ::S6853C1(){ note_ctor("S6853C1", this);} // tgen

static void Test_S6853C1()
{
  extern Class_Descriptor cd_S6853C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,42)];
    init_test(&cd_S6853C1, buf);
    S6853C1 *dp, &lv = *(dp=new (buf) S6853C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,164), "sizeof(S6853C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6853C1)");
    check_base_class_offset(lv, (S6853C2*), 0, "S6853C1");
    check_field_offset(lv, s6853c1f0, ABISELECT(96,60), "S6853C1.s6853c1f0");
    check_field_offset(lv, s6853c1f1, ABISELECT(112,68), "S6853C1.s6853c1f1");
    set_bf_and_test(lv, s6853c1f2, ABISELECT(120,76), 0, 1, 1, "S6853C1");
    set_bf_and_test(lv, s6853c1f3, ABISELECT(120,76), 1, 1, 1, "S6853C1");
    set_bf_and_test(lv, s6853c1f4, ABISELECT(120,76), 2, 1, 1, "S6853C1");
    set_bf_and_test(lv, s6853c1f5, ABISELECT(120,76), 3, 1, 1, "S6853C1");
    set_bf_and_test(lv, s6853c1f6, ABISELECT(120,76), 4, 1, 1, "S6853C1");
    set_bf_and_test(lv, s6853c1f7, ABISELECT(120,76), 5, 1, 1, "S6853C1");
    set_bf_and_test(lv, s6853c1f8, ABISELECT(120,76), 6, 1, 1, "S6853C1");
    set_bf_and_test(lv, s6853c1f9, ABISELECT(120,76), 7, 1, 1, "S6853C1");
    set_bf_and_test(lv, s6853c1f10, ABISELECT(121,77), 0, 1, 1, "S6853C1");
    set_bf_and_test(lv, s6853c1f11, ABISELECT(121,77), 1, 1, 1, "S6853C1");
    set_bf_and_test(lv, s6853c1f12, ABISELECT(121,77), 2, 1, 1, "S6853C1");
    set_bf_and_test(lv, s6853c1f13, ABISELECT(121,77), 3, 1, 1, "S6853C1");
    set_bf_and_test(lv, s6853c1f14, ABISELECT(121,77), 4, 1, 1, "S6853C1");
    check_field_offset(lv, s6853c1f15, ABISELECT(128,80), "S6853C1.s6853c1f15");
    check_field_offset(lv, s6853c1f16, ABISELECT(136,84), "S6853C1.s6853c1f16");
    check_field_offset(lv, s6853c1f17, ABISELECT(148,96), "S6853C1.s6853c1f17");
    check_field_offset(lv, s6853c1f18, ABISELECT(160,108), "S6853C1.s6853c1f18");
    check_field_offset(lv, s6853c1f19, ABISELECT(172,120), "S6853C1.s6853c1f19");
    check_field_offset(lv, s6853c1f20, ABISELECT(188,136), "S6853C1.s6853c1f20");
    check_field_offset(lv, s6853c1f21, ABISELECT(200,148), "S6853C1.s6853c1f21");
    check_field_offset(lv, s6853c1f22, ABISELECT(216,160), "S6853C1.s6853c1f22");
    test_class_info(&lv, &cd_S6853C1);
    dp->~S6853C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6853C1(Test_S6853C1, "S6853C1", ABISELECT(224,164));

#else // __cplusplus

extern void _ZN7S6853C1C1Ev();
extern void _ZN7S6853C1D1Ev();
Name_Map name_map_S6853C1[] = {
  NSPAIR(_ZN7S6853C1C1Ev),
  NSPAIR(_ZN7S6853C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6853C2;
extern VTBL_ENTRY _ZTI7S6853C2[];
extern  VTBL_ENTRY _ZTV7S6853C2[];
static Base_Class bases_S6853C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6853C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S6853C1[];
extern void _ZN7S6853C1D1Ev();
extern void _ZN7S6853C1D0Ev();
extern void _ZN7S6853C22v4Ev();
extern void _ZN7S6853C22v5Ev();
extern void _ZN7S6853C22v6Ev();
extern void _ZN7S6853C22v7Ev();
extern void _ZN7S6853C22v8Ev();
extern void _ZN7S6853C22v9Ev();
extern void _ZN7S6853C23v10Ev();
extern void _ZN7S6853C23v11Ev();
extern void _ZN7S6853C23v12Ev();
extern void _ZN7S6853C23v13Ev();
extern void _ZN7S6853C23v14Ev();
extern void _ZN7S6853C23v15Ev();
extern void _ZN7S6853C23v16Ev();
extern void _ZN7S6853C23v17Ev();
extern void _ZN7S6853C23v18Ev();
extern void _ZN7S6853C23v19Ev();
extern void _ZN7S6853C23v20Ev();
extern void _ZN7S6853C23v21Ev();
extern void _ZN7S6853C23v22Ev();
extern void _ZN7S6853C23v23Ev();
extern void _ZN7S6853C23v24Ev();
extern void _ZN7S6853C23v25Ev();
extern void _ZN7S6853C23v26Ev();
extern void _ZN7S6853C23v27Ev();
extern void _ZN7S6853C23v28Ev();
extern void _ZN7S6853C23v29Ev();
extern void _ZN7S6853C23v30Ev();
extern void _ZN7S6853C23v31Ev();
extern void _ZN7S6853C23v32Ev();
extern void _ZN7S6853C23v33Ev();
extern void _ZN7S6853C23v34Ev();
extern void _ZN7S6853C23v35Ev();
extern void _ZN7S6853C23v36Ev();
extern void _ZN7S6853C23v37Ev();
extern void _ZN7S6853C23v38Ev();
extern void _ZN7S6853C23v39Ev();
extern void _ZN7S6853C23v40Ev();
extern void _ZN7S6853C23v41Ev();
extern void _ZN7S6853C23v42Ev();
extern void _ZN7S6853C23v43Ev();
extern void _ZN7S6853C23v44Ev();
extern void _ZN7S6853C23v45Ev();
extern void _ZN7S6853C23v46Ev();
extern void _ZN7S6853C23v47Ev();
extern void _ZN7S6853C23v48Ev();
extern void _ZN7S6853C23v49Ev();
extern void _ZN7S6853C23v50Ev();
extern void _ZN7S6853C23v51Ev();
extern void _ZN7S6853C23v52Ev();
extern void _ZN7S6853C23v53Ev();
extern void _ZN7S6853C23v54Ev();
extern void _ZN7S6853C23v55Ev();
extern void _ZN7S6853C23v56Ev();
extern void _ZN7S6853C23v57Ev();
extern void _ZN7S6853C23v58Ev();
extern void _ZN7S6853C23v59Ev();
extern void _ZN7S6853C23v60Ev();
extern void _ZN7S6853C23v61Ev();
extern void _ZN7S6853C23v62Ev();
extern void _ZN7S6853C23v63Ev();
extern void _ZN7S6853C23v64Ev();
extern void _ZN7S6853C23v65Ev();
extern void _ZN7S6853C23v66Ev();
extern void _ZN7S6853C23v67Ev();
extern void _ZN7S6853C12v1Ev();
extern void _ZN7S6853C12v2Ev();
extern void _ZN7S6853C12v3Ev();
static  VTBL_ENTRY vtc_S6853C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6853C1[0]),
  (VTBL_ENTRY)&_ZN7S6853C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6853C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6853C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6853C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6853C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6853C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6853C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6853C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v10Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v11Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v12Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v13Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v14Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v15Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v16Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v17Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v18Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v19Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v20Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v21Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v22Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v23Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v24Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v25Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v26Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v27Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v28Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v29Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v30Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v31Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v32Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v33Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v34Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v35Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v36Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v37Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v38Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v39Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v40Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v41Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v42Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v43Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v44Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v45Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v46Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v47Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v48Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v49Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v50Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v51Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v52Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v53Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v54Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v55Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v56Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v57Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v58Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v59Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v60Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v61Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v62Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v63Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v64Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v65Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v66Ev,
  (VTBL_ENTRY)&_ZN7S6853C23v67Ev,
  (VTBL_ENTRY)&_ZN7S6853C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6853C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6853C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S6853C1[];
extern  VTBL_ENTRY _ZTV7S6853C1[];
Class_Descriptor cd_S6853C1 = {  "S6853C1", // class name
  bases_S6853C1, 1,
  &(vtc_S6853C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(224,164), // object size
  NSPAIRA(_ZTI7S6853C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6853C1),71, //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  S8549C3  {
  int s8549c3f0;
  void *s8549c3f1[2];
  int s8549c3f2;
  virtual  ~S8549C3(); // _ZN7S8549C3D1Ev
  virtual void  v36(); // _ZN7S8549C33v36Ev
  virtual void  v37(); // _ZN7S8549C33v37Ev
  virtual void  v38(); // _ZN7S8549C33v38Ev
  virtual void  v39(); // _ZN7S8549C33v39Ev
  virtual void  v40(); // _ZN7S8549C33v40Ev
  virtual void  v41(); // _ZN7S8549C33v41Ev
  S8549C3(); // tgen
};
//SIG(-1 S8549C3) C1{ vd v1 v2 v3 v4 v5 v6 Fi Fp[2] Fi}


 S8549C3 ::~S8549C3(){ note_dtor("S8549C3", this);}
void  S8549C3 ::v36(){vfunc_called(this, "_ZN7S8549C33v36Ev");}
void  S8549C3 ::v37(){vfunc_called(this, "_ZN7S8549C33v37Ev");}
void  S8549C3 ::v38(){vfunc_called(this, "_ZN7S8549C33v38Ev");}
void  S8549C3 ::v39(){vfunc_called(this, "_ZN7S8549C33v39Ev");}
void  S8549C3 ::v40(){vfunc_called(this, "_ZN7S8549C33v40Ev");}
void  S8549C3 ::v41(){vfunc_called(this, "_ZN7S8549C33v41Ev");}
S8549C3 ::S8549C3(){ note_ctor("S8549C3", this);} // tgen

static void Test_S8549C3()
{
  extern Class_Descriptor cd_S8549C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S8549C3, buf);
    S8549C3 *dp, &lv = *(dp=new (buf) S8549C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S8549C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8549C3)");
    check_field_offset(lv, s8549c3f0, ABISELECT(8,4), "S8549C3.s8549c3f0");
    check_field_offset(lv, s8549c3f1, ABISELECT(16,8), "S8549C3.s8549c3f1");
    check_field_offset(lv, s8549c3f2, ABISELECT(32,16), "S8549C3.s8549c3f2");
    test_class_info(&lv, &cd_S8549C3);
    dp->~S8549C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8549C3(Test_S8549C3, "S8549C3", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S8549C3C1Ev();
extern void _ZN7S8549C3D1Ev();
Name_Map name_map_S8549C3[] = {
  NSPAIR(_ZN7S8549C3C1Ev),
  NSPAIR(_ZN7S8549C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8549C3[];
extern void _ZN7S8549C3D1Ev();
extern void _ZN7S8549C3D0Ev();
extern void _ZN7S8549C33v36Ev();
extern void _ZN7S8549C33v37Ev();
extern void _ZN7S8549C33v38Ev();
extern void _ZN7S8549C33v39Ev();
extern void _ZN7S8549C33v40Ev();
extern void _ZN7S8549C33v41Ev();
static  VTBL_ENTRY vtc_S8549C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8549C3[0]),
  (VTBL_ENTRY)&_ZN7S8549C3D1Ev,
  (VTBL_ENTRY)&_ZN7S8549C3D0Ev,
  (VTBL_ENTRY)&_ZN7S8549C33v36Ev,
  (VTBL_ENTRY)&_ZN7S8549C33v37Ev,
  (VTBL_ENTRY)&_ZN7S8549C33v38Ev,
  (VTBL_ENTRY)&_ZN7S8549C33v39Ev,
  (VTBL_ENTRY)&_ZN7S8549C33v40Ev,
  (VTBL_ENTRY)&_ZN7S8549C33v41Ev,
};
extern VTBL_ENTRY _ZTI7S8549C3[];
extern  VTBL_ENTRY _ZTV7S8549C3[];
Class_Descriptor cd_S8549C3 = {  "S8549C3", // class name
  0,0,//no base classes
  &(vtc_S8549C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S8549C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8549C3),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  S8549C5_nt  {
  ::S2264C37 s8549c5f0;
  void *s8549c5f1[2];
  void  mf8549c5(); // _ZN10S8549C5_nt8mf8549c5Ev
};
//SIG(-1 S8549C5_nt) C1{ m FC2{ m Fp Fi[2] FC3{ m}} Fp[2]}


void  S8549C5_nt ::mf8549c5(){}

//skip512 S8549C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8549C9  {
  __tsi64 s8549c9f0;
  char s8549c9f1;
  ::S2264C29_nt s8549c9f2;
  int s8549c9f3;
  void  mf8549c9(); // _ZN7S8549C98mf8549c9Ev
};
//SIG(-1 S8549C9) C1{ m FL Fc FC2{ m Fp Fi[2] FC3{ m}} Fi}


void  S8549C9 ::mf8549c9(){}

static void Test_S8549C9()
{
  {
    init_simple_test("S8549C9");
    S8549C9 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S8549C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8549C9)");
    check_field_offset(lv, s8549c9f0, 0, "S8549C9.s8549c9f0");
    check_field_offset(lv, s8549c9f1, 8, "S8549C9.s8549c9f1");
    check_field_offset(lv, s8549c9f2, ABISELECT(16,12), "S8549C9.s8549c9f2");
    check_field_offset(lv, s8549c9f3, ABISELECT(40,28), "S8549C9.s8549c9f3");
  }
}
static Arrange_To_Call_Me vS8549C9(Test_S8549C9, "S8549C9", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8549C2  {
  int s8549c2f0;
  void *s8549c2f1;
  ::S8549C3 s8549c2f2;
  void *s8549c2f3;
  ::S5635C32 s8549c2f4;
  int s8549c2f5;
  void *s8549c2f6[2];
  ::S8549C5_nt s8549c2f7;
  ::S5634C32 s8549c2f8;
  ::S8549C9 s8549c2f9;
  int s8549c2f10[2];
  char s8549c2f11[5];
  int s8549c2f12;
  ::S5634C30_nt s8549c2f13;
  void *s8549c2f14;
  int s8549c2f15;
  ::S2264C13_nt s8549c2f16;
  ::S2264C13_nt s8549c2f17;
  ::S2264C13_nt s8549c2f18;
  virtual  ~S8549C2(); // _ZN7S8549C2D1Ev
  virtual void  v11(); // _ZN7S8549C23v11Ev
  virtual void  v12(); // _ZN7S8549C23v12Ev
  virtual void  v13(); // _ZN7S8549C23v13Ev
  virtual void  v14(); // _ZN7S8549C23v14Ev
  virtual void  v15(); // _ZN7S8549C23v15Ev
  virtual void  v16(); // _ZN7S8549C23v16Ev
  virtual void  v17(); // _ZN7S8549C23v17Ev
  virtual void  v18(); // _ZN7S8549C23v18Ev
  virtual void  v19(); // _ZN7S8549C23v19Ev
  virtual void  v20(); // _ZN7S8549C23v20Ev
  virtual void  v21(); // _ZN7S8549C23v21Ev
  virtual void  v22(); // _ZN7S8549C23v22Ev
  virtual void  v23(); // _ZN7S8549C23v23Ev
  virtual void  v24(); // _ZN7S8549C23v24Ev
  virtual void  v25(); // _ZN7S8549C23v25Ev
  virtual void  v26(); // _ZN7S8549C23v26Ev
  virtual void  v27(); // _ZN7S8549C23v27Ev
  virtual void  v28(); // _ZN7S8549C23v28Ev
  virtual void  v29(); // _ZN7S8549C23v29Ev
  virtual void  v30(); // _ZN7S8549C23v30Ev
  virtual void  v31(); // _ZN7S8549C23v31Ev
  virtual void  v32(); // _ZN7S8549C23v32Ev
  virtual void  v33(); // _ZN7S8549C23v33Ev
  virtual void  v34(); // _ZN7S8549C23v34Ev
  virtual void  v35(); // _ZN7S8549C23v35Ev
  S8549C2(); // tgen
};
//SIG(-1 S8549C2) 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 Fi Fp FC2{ vd v26 v27 v28 v29 v30 v31 Fi Fp[2] Fi} Fp FC3{ m Fp} Fi Fp[2] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]} FC7{ m Fp} FC8{ m FL Fc FC9{ m Fp Fi[2] FC10{ m}} Fi} Fi[2] Fc[5] Fi FC11{ m Fp} Fp Fi FC12{ m FC13{ m FL[2]}} FC12 FC12}


 S8549C2 ::~S8549C2(){ note_dtor("S8549C2", this);}
void  S8549C2 ::v11(){vfunc_called(this, "_ZN7S8549C23v11Ev");}
void  S8549C2 ::v12(){vfunc_called(this, "_ZN7S8549C23v12Ev");}
void  S8549C2 ::v13(){vfunc_called(this, "_ZN7S8549C23v13Ev");}
void  S8549C2 ::v14(){vfunc_called(this, "_ZN7S8549C23v14Ev");}
void  S8549C2 ::v15(){vfunc_called(this, "_ZN7S8549C23v15Ev");}
void  S8549C2 ::v16(){vfunc_called(this, "_ZN7S8549C23v16Ev");}
void  S8549C2 ::v17(){vfunc_called(this, "_ZN7S8549C23v17Ev");}
void  S8549C2 ::v18(){vfunc_called(this, "_ZN7S8549C23v18Ev");}
void  S8549C2 ::v19(){vfunc_called(this, "_ZN7S8549C23v19Ev");}
void  S8549C2 ::v20(){vfunc_called(this, "_ZN7S8549C23v20Ev");}
void  S8549C2 ::v21(){vfunc_called(this, "_ZN7S8549C23v21Ev");}
void  S8549C2 ::v22(){vfunc_called(this, "_ZN7S8549C23v22Ev");}
void  S8549C2 ::v23(){vfunc_called(this, "_ZN7S8549C23v23Ev");}
void  S8549C2 ::v24(){vfunc_called(this, "_ZN7S8549C23v24Ev");}
void  S8549C2 ::v25(){vfunc_called(this, "_ZN7S8549C23v25Ev");}
void  S8549C2 ::v26(){vfunc_called(this, "_ZN7S8549C23v26Ev");}
void  S8549C2 ::v27(){vfunc_called(this, "_ZN7S8549C23v27Ev");}
void  S8549C2 ::v28(){vfunc_called(this, "_ZN7S8549C23v28Ev");}
void  S8549C2 ::v29(){vfunc_called(this, "_ZN7S8549C23v29Ev");}
void  S8549C2 ::v30(){vfunc_called(this, "_ZN7S8549C23v30Ev");}
void  S8549C2 ::v31(){vfunc_called(this, "_ZN7S8549C23v31Ev");}
void  S8549C2 ::v32(){vfunc_called(this, "_ZN7S8549C23v32Ev");}
void  S8549C2 ::v33(){vfunc_called(this, "_ZN7S8549C23v33Ev");}
void  S8549C2 ::v34(){vfunc_called(this, "_ZN7S8549C23v34Ev");}
void  S8549C2 ::v35(){vfunc_called(this, "_ZN7S8549C23v35Ev");}
S8549C2 ::S8549C2(){ note_ctor("S8549C2", this);} // tgen

static void Test_S8549C2()
{
  extern Class_Descriptor cd_S8549C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,49)];
    init_test(&cd_S8549C2, buf);
    S8549C2 *dp, &lv = *(dp=new (buf) S8549C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,192), "sizeof(S8549C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8549C2)");
    check_field_offset(lv, s8549c2f0, ABISELECT(8,4), "S8549C2.s8549c2f0");
    check_field_offset(lv, s8549c2f1, ABISELECT(16,8), "S8549C2.s8549c2f1");
    check_field_offset(lv, s8549c2f2, ABISELECT(24,12), "S8549C2.s8549c2f2");
    check_field_offset(lv, s8549c2f3, ABISELECT(64,32), "S8549C2.s8549c2f3");
    check_field_offset(lv, s8549c2f4, ABISELECT(72,36), "S8549C2.s8549c2f4");
    check_field_offset(lv, s8549c2f5, ABISELECT(80,40), "S8549C2.s8549c2f5");
    check_field_offset(lv, s8549c2f6, ABISELECT(88,44), "S8549C2.s8549c2f6");
    check_field_offset(lv, s8549c2f7, ABISELECT(104,52), "S8549C2.s8549c2f7");
    check_field_offset(lv, s8549c2f8, ABISELECT(144,76), "S8549C2.s8549c2f8");
    check_field_offset(lv, s8549c2f9, ABISELECT(152,80), "S8549C2.s8549c2f9");
    check_field_offset(lv, s8549c2f10, ABISELECT(200,112), "S8549C2.s8549c2f10");
    check_field_offset(lv, s8549c2f11, ABISELECT(208,120), "S8549C2.s8549c2f11");
    check_field_offset(lv, s8549c2f12, ABISELECT(216,128), "S8549C2.s8549c2f12");
    check_field_offset(lv, s8549c2f13, ABISELECT(224,132), "S8549C2.s8549c2f13");
    check_field_offset(lv, s8549c2f14, ABISELECT(232,136), "S8549C2.s8549c2f14");
    check_field_offset(lv, s8549c2f15, ABISELECT(240,140), "S8549C2.s8549c2f15");
    check_field_offset(lv, s8549c2f16, ABISELECT(248,144), "S8549C2.s8549c2f16");
    check_field_offset(lv, s8549c2f17, ABISELECT(264,160), "S8549C2.s8549c2f17");
    check_field_offset(lv, s8549c2f18, ABISELECT(280,176), "S8549C2.s8549c2f18");
    test_class_info(&lv, &cd_S8549C2);
    dp->~S8549C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8549C2(Test_S8549C2, "S8549C2", ABISELECT(296,192));

#else // __cplusplus

extern void _ZN7S8549C2C1Ev();
extern void _ZN7S8549C2D1Ev();
Name_Map name_map_S8549C2[] = {
  NSPAIR(_ZN7S8549C2C1Ev),
  NSPAIR(_ZN7S8549C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8549C2[];
extern void _ZN7S8549C2D1Ev();
extern void _ZN7S8549C2D0Ev();
extern void _ZN7S8549C23v11Ev();
extern void _ZN7S8549C23v12Ev();
extern void _ZN7S8549C23v13Ev();
extern void _ZN7S8549C23v14Ev();
extern void _ZN7S8549C23v15Ev();
extern void _ZN7S8549C23v16Ev();
extern void _ZN7S8549C23v17Ev();
extern void _ZN7S8549C23v18Ev();
extern void _ZN7S8549C23v19Ev();
extern void _ZN7S8549C23v20Ev();
extern void _ZN7S8549C23v21Ev();
extern void _ZN7S8549C23v22Ev();
extern void _ZN7S8549C23v23Ev();
extern void _ZN7S8549C23v24Ev();
extern void _ZN7S8549C23v25Ev();
extern void _ZN7S8549C23v26Ev();
extern void _ZN7S8549C23v27Ev();
extern void _ZN7S8549C23v28Ev();
extern void _ZN7S8549C23v29Ev();
extern void _ZN7S8549C23v30Ev();
extern void _ZN7S8549C23v31Ev();
extern void _ZN7S8549C23v32Ev();
extern void _ZN7S8549C23v33Ev();
extern void _ZN7S8549C23v34Ev();
extern void _ZN7S8549C23v35Ev();
static  VTBL_ENTRY vtc_S8549C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8549C2[0]),
  (VTBL_ENTRY)&_ZN7S8549C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8549C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v21Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v22Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v23Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v24Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v25Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v26Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v27Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v28Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v29Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v30Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v31Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v32Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v33Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v34Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v35Ev,
};
extern VTBL_ENTRY _ZTI7S8549C2[];
extern  VTBL_ENTRY _ZTV7S8549C2[];
Class_Descriptor cd_S8549C2 = {  "S8549C2", // class name
  0,0,//no base classes
  &(vtc_S8549C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,192), // object size
  NSPAIRA(_ZTI7S8549C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8549C2),29, //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  S8549C1  : S8549C2 {
  int s8549c1f0;
  char s8549c1f1[2];
  ::S5634C23 s8549c1f2;
  ::S2398C8_nt s8549c1f3;
  ::S5634C18_nt s8549c1f4;
  ::S2264C20_nt s8549c1f5;
  char s8549c1f6[2];
  virtual  ~S8549C1(); // _ZN7S8549C1D1Ev
  virtual void  v1(); // _ZN7S8549C12v1Ev
  virtual void  v2(); // _ZN7S8549C12v2Ev
  virtual void  v3(); // _ZN7S8549C12v3Ev
  virtual void  v4(); // _ZN7S8549C12v4Ev
  virtual void  v5(); // _ZN7S8549C12v5Ev
  virtual void  v6(); // _ZN7S8549C12v6Ev
  virtual void  v7(); // _ZN7S8549C12v7Ev
  virtual void  v8(); // _ZN7S8549C12v8Ev
  virtual void  v9(); // _ZN7S8549C12v9Ev
  virtual void  v10(); // _ZN7S8549C13v10Ev
  S8549C1(); // tgen
};
//SIG(1 S8549C1) C1{ BC2{ 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 Fi Fp FC3{ vd v36 v37 v38 v39 v40 v41 Fi Fp[2] Fi} Fp FC4{ m Fp} Fi Fp[2] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]} FC8{ m Fp} FC9{ m FL Fc FC10{ m Fp Fi[2] FC11{ m}} Fi} Fi[2] Fc[5] Fi FC12{ m Fp} Fp Fi FC13{ m FC14{ m FL[2]}} FC13 FC13} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 Fi Fc[2] FC15{ m Fp[2]} FC16{ m Fp} FC17{ m Fp[2]} FC18{ m Fp Fi FC19{ m}} Fc[2]}


 S8549C1 ::~S8549C1(){ note_dtor("S8549C1", this);}
void  S8549C1 ::v1(){vfunc_called(this, "_ZN7S8549C12v1Ev");}
void  S8549C1 ::v2(){vfunc_called(this, "_ZN7S8549C12v2Ev");}
void  S8549C1 ::v3(){vfunc_called(this, "_ZN7S8549C12v3Ev");}
void  S8549C1 ::v4(){vfunc_called(this, "_ZN7S8549C12v4Ev");}
void  S8549C1 ::v5(){vfunc_called(this, "_ZN7S8549C12v5Ev");}
void  S8549C1 ::v6(){vfunc_called(this, "_ZN7S8549C12v6Ev");}
void  S8549C1 ::v7(){vfunc_called(this, "_ZN7S8549C12v7Ev");}
void  S8549C1 ::v8(){vfunc_called(this, "_ZN7S8549C12v8Ev");}
void  S8549C1 ::v9(){vfunc_called(this, "_ZN7S8549C12v9Ev");}
void  S8549C1 ::v10(){vfunc_called(this, "_ZN7S8549C13v10Ev");}
S8549C1 ::S8549C1(){ note_ctor("S8549C1", this);} // tgen

static void Test_S8549C1()
{
  extern Class_Descriptor cd_S8549C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(47,60)];
    init_test(&cd_S8549C1, buf);
    S8549C1 *dp, &lv = *(dp=new (buf) S8549C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(368,236), "sizeof(S8549C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8549C1)");
    check_base_class_offset(lv, (S8549C2*), 0, "S8549C1");
    check_field_offset(lv, s8549c1f0, ABISELECT(296,192), "S8549C1.s8549c1f0");
    check_field_offset(lv, s8549c1f1, ABISELECT(300,196), "S8549C1.s8549c1f1");
    check_field_offset(lv, s8549c1f2, ABISELECT(304,200), "S8549C1.s8549c1f2");
    check_field_offset(lv, s8549c1f3, ABISELECT(320,208), "S8549C1.s8549c1f3");
    check_field_offset(lv, s8549c1f4, ABISELECT(328,212), "S8549C1.s8549c1f4");
    check_field_offset(lv, s8549c1f5, ABISELECT(344,220), "S8549C1.s8549c1f5");
    check_field_offset(lv, s8549c1f6, ABISELECT(360,232), "S8549C1.s8549c1f6");
    test_class_info(&lv, &cd_S8549C1);
    dp->~S8549C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8549C1(Test_S8549C1, "S8549C1", ABISELECT(368,236));

#else // __cplusplus

extern void _ZN7S8549C1C1Ev();
extern void _ZN7S8549C1D1Ev();
Name_Map name_map_S8549C1[] = {
  NSPAIR(_ZN7S8549C1C1Ev),
  NSPAIR(_ZN7S8549C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8549C2;
extern VTBL_ENTRY _ZTI7S8549C2[];
extern  VTBL_ENTRY _ZTV7S8549C2[];
static Base_Class bases_S8549C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8549C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S8549C1[];
extern void _ZN7S8549C1D1Ev();
extern void _ZN7S8549C1D0Ev();
extern void _ZN7S8549C23v11Ev();
extern void _ZN7S8549C23v12Ev();
extern void _ZN7S8549C23v13Ev();
extern void _ZN7S8549C23v14Ev();
extern void _ZN7S8549C23v15Ev();
extern void _ZN7S8549C23v16Ev();
extern void _ZN7S8549C23v17Ev();
extern void _ZN7S8549C23v18Ev();
extern void _ZN7S8549C23v19Ev();
extern void _ZN7S8549C23v20Ev();
extern void _ZN7S8549C23v21Ev();
extern void _ZN7S8549C23v22Ev();
extern void _ZN7S8549C23v23Ev();
extern void _ZN7S8549C23v24Ev();
extern void _ZN7S8549C23v25Ev();
extern void _ZN7S8549C23v26Ev();
extern void _ZN7S8549C23v27Ev();
extern void _ZN7S8549C23v28Ev();
extern void _ZN7S8549C23v29Ev();
extern void _ZN7S8549C23v30Ev();
extern void _ZN7S8549C23v31Ev();
extern void _ZN7S8549C23v32Ev();
extern void _ZN7S8549C23v33Ev();
extern void _ZN7S8549C23v34Ev();
extern void _ZN7S8549C23v35Ev();
extern void _ZN7S8549C12v1Ev();
extern void _ZN7S8549C12v2Ev();
extern void _ZN7S8549C12v3Ev();
extern void _ZN7S8549C12v4Ev();
extern void _ZN7S8549C12v5Ev();
extern void _ZN7S8549C12v6Ev();
extern void _ZN7S8549C12v7Ev();
extern void _ZN7S8549C12v8Ev();
extern void _ZN7S8549C12v9Ev();
extern void _ZN7S8549C13v10Ev();
static  VTBL_ENTRY vtc_S8549C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8549C1[0]),
  (VTBL_ENTRY)&_ZN7S8549C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8549C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v11Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v12Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v13Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v14Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v21Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v22Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v23Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v24Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v25Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v26Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v27Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v28Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v29Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v30Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v31Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v32Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v33Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v34Ev,
  (VTBL_ENTRY)&_ZN7S8549C23v35Ev,
  (VTBL_ENTRY)&_ZN7S8549C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8549C12v2Ev,
  (VTBL_ENTRY)&_ZN7S8549C12v3Ev,
  (VTBL_ENTRY)&_ZN7S8549C12v4Ev,
  (VTBL_ENTRY)&_ZN7S8549C12v5Ev,
  (VTBL_ENTRY)&_ZN7S8549C12v6Ev,
  (VTBL_ENTRY)&_ZN7S8549C12v7Ev,
  (VTBL_ENTRY)&_ZN7S8549C12v8Ev,
  (VTBL_ENTRY)&_ZN7S8549C12v9Ev,
  (VTBL_ENTRY)&_ZN7S8549C13v10Ev,
};
extern VTBL_ENTRY _ZTI7S8549C1[];
extern  VTBL_ENTRY _ZTV7S8549C1[];
Class_Descriptor cd_S8549C1 = {  "S8549C1", // class name
  bases_S8549C1, 1,
  &(vtc_S8549C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(368,236), // object size
  NSPAIRA(_ZTI7S8549C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8549C1),39, //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  S4259C3  {
  int s4259c3f0;
  void *s4259c3f1;
  ::S2264C37 s4259c3f2;
  ::S2007C7 s4259c3f3;
  void *s4259c3f4[3];
  int s4259c3f5[2];
  virtual  ~S4259C3(); // _ZN7S4259C3D1Ev
  virtual void  v14(); // _ZN7S4259C33v14Ev
  virtual void  v15(); // _ZN7S4259C33v15Ev
  virtual void  v16(); // _ZN7S4259C33v16Ev
  virtual void  v17(); // _ZN7S4259C33v17Ev
  virtual void  v18(); // _ZN7S4259C33v18Ev
  virtual void  v19(); // _ZN7S4259C33v19Ev
  virtual void  v20(); // _ZN7S4259C33v20Ev
  virtual void  v21(); // _ZN7S4259C33v21Ev
  virtual void  v22(); // _ZN7S4259C33v22Ev
  virtual void  v23(); // _ZN7S4259C33v23Ev
  virtual void  v24(); // _ZN7S4259C33v24Ev
  virtual void  v25(); // _ZN7S4259C33v25Ev
  virtual void  v26(); // _ZN7S4259C33v26Ev
  virtual void  v27(); // _ZN7S4259C33v27Ev
  virtual void  v28(); // _ZN7S4259C33v28Ev
  virtual void  v29(); // _ZN7S4259C33v29Ev
  virtual void  v30(); // _ZN7S4259C33v30Ev
  virtual void  v31(); // _ZN7S4259C33v31Ev
  virtual void  v32(); // _ZN7S4259C33v32Ev
  virtual void  v33(); // _ZN7S4259C33v33Ev
  virtual void  v34(); // _ZN7S4259C33v34Ev
  virtual void  v35(); // _ZN7S4259C33v35Ev
  virtual void  v36(); // _ZN7S4259C33v36Ev
  virtual void  v37(); // _ZN7S4259C33v37Ev
  virtual void  v38(); // _ZN7S4259C33v38Ev
  virtual void  v39(); // _ZN7S4259C33v39Ev
  virtual void  v40(); // _ZN7S4259C33v40Ev
  virtual void  v41(); // _ZN7S4259C33v41Ev
  S4259C3(); // tgen
};
//SIG(-1 S4259C3) 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 Fi Fp FC2{ m Fp Fi[2] FC3{ m}} FC4{ vd v29 v30 v31 FC5{ m Fp Fi[2] FC6{ m}}} Fp[3] Fi[2]}


 S4259C3 ::~S4259C3(){ note_dtor("S4259C3", this);}
void  S4259C3 ::v14(){vfunc_called(this, "_ZN7S4259C33v14Ev");}
void  S4259C3 ::v15(){vfunc_called(this, "_ZN7S4259C33v15Ev");}
void  S4259C3 ::v16(){vfunc_called(this, "_ZN7S4259C33v16Ev");}
void  S4259C3 ::v17(){vfunc_called(this, "_ZN7S4259C33v17Ev");}
void  S4259C3 ::v18(){vfunc_called(this, "_ZN7S4259C33v18Ev");}
void  S4259C3 ::v19(){vfunc_called(this, "_ZN7S4259C33v19Ev");}
void  S4259C3 ::v20(){vfunc_called(this, "_ZN7S4259C33v20Ev");}
void  S4259C3 ::v21(){vfunc_called(this, "_ZN7S4259C33v21Ev");}
void  S4259C3 ::v22(){vfunc_called(this, "_ZN7S4259C33v22Ev");}
void  S4259C3 ::v23(){vfunc_called(this, "_ZN7S4259C33v23Ev");}
void  S4259C3 ::v24(){vfunc_called(this, "_ZN7S4259C33v24Ev");}
void  S4259C3 ::v25(){vfunc_called(this, "_ZN7S4259C33v25Ev");}
void  S4259C3 ::v26(){vfunc_called(this, "_ZN7S4259C33v26Ev");}
void  S4259C3 ::v27(){vfunc_called(this, "_ZN7S4259C33v27Ev");}
void  S4259C3 ::v28(){vfunc_called(this, "_ZN7S4259C33v28Ev");}
void  S4259C3 ::v29(){vfunc_called(this, "_ZN7S4259C33v29Ev");}
void  S4259C3 ::v30(){vfunc_called(this, "_ZN7S4259C33v30Ev");}
void  S4259C3 ::v31(){vfunc_called(this, "_ZN7S4259C33v31Ev");}
void  S4259C3 ::v32(){vfunc_called(this, "_ZN7S4259C33v32Ev");}
void  S4259C3 ::v33(){vfunc_called(this, "_ZN7S4259C33v33Ev");}
void  S4259C3 ::v34(){vfunc_called(this, "_ZN7S4259C33v34Ev");}
void  S4259C3 ::v35(){vfunc_called(this, "_ZN7S4259C33v35Ev");}
void  S4259C3 ::v36(){vfunc_called(this, "_ZN7S4259C33v36Ev");}
void  S4259C3 ::v37(){vfunc_called(this, "_ZN7S4259C33v37Ev");}
void  S4259C3 ::v38(){vfunc_called(this, "_ZN7S4259C33v38Ev");}
void  S4259C3 ::v39(){vfunc_called(this, "_ZN7S4259C33v39Ev");}
void  S4259C3 ::v40(){vfunc_called(this, "_ZN7S4259C33v40Ev");}
void  S4259C3 ::v41(){vfunc_called(this, "_ZN7S4259C33v41Ev");}
S4259C3 ::S4259C3(){ note_ctor("S4259C3", this);} // tgen

static void Test_S4259C3()
{
  extern Class_Descriptor cd_S4259C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,18)];
    init_test(&cd_S4259C3, buf);
    S4259C3 *dp, &lv = *(dp=new (buf) S4259C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,68), "sizeof(S4259C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4259C3)");
    check_field_offset(lv, s4259c3f0, ABISELECT(8,4), "S4259C3.s4259c3f0");
    check_field_offset(lv, s4259c3f1, ABISELECT(16,8), "S4259C3.s4259c3f1");
    check_field_offset(lv, s4259c3f2, ABISELECT(24,12), "S4259C3.s4259c3f2");
    check_field_offset(lv, s4259c3f3, ABISELECT(48,28), "S4259C3.s4259c3f3");
    check_field_offset(lv, s4259c3f4, ABISELECT(80,48), "S4259C3.s4259c3f4");
    check_field_offset(lv, s4259c3f5, ABISELECT(104,60), "S4259C3.s4259c3f5");
    test_class_info(&lv, &cd_S4259C3);
    dp->~S4259C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4259C3(Test_S4259C3, "S4259C3", ABISELECT(112,68));

#else // __cplusplus

extern void _ZN7S4259C3C1Ev();
extern void _ZN7S4259C3D1Ev();
Name_Map name_map_S4259C3[] = {
  NSPAIR(_ZN7S4259C3C1Ev),
  NSPAIR(_ZN7S4259C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4259C3[];
extern void _ZN7S4259C3D1Ev();
extern void _ZN7S4259C3D0Ev();
extern void _ZN7S4259C33v14Ev();
extern void _ZN7S4259C33v15Ev();
extern void _ZN7S4259C33v16Ev();
extern void _ZN7S4259C33v17Ev();
extern void _ZN7S4259C33v18Ev();
extern void _ZN7S4259C33v19Ev();
extern void _ZN7S4259C33v20Ev();
extern void _ZN7S4259C33v21Ev();
extern void _ZN7S4259C33v22Ev();
extern void _ZN7S4259C33v23Ev();
extern void _ZN7S4259C33v24Ev();
extern void _ZN7S4259C33v25Ev();
extern void _ZN7S4259C33v26Ev();
extern void _ZN7S4259C33v27Ev();
extern void _ZN7S4259C33v28Ev();
extern void _ZN7S4259C33v29Ev();
extern void _ZN7S4259C33v30Ev();
extern void _ZN7S4259C33v31Ev();
extern void _ZN7S4259C33v32Ev();
extern void _ZN7S4259C33v33Ev();
extern void _ZN7S4259C33v34Ev();
extern void _ZN7S4259C33v35Ev();
extern void _ZN7S4259C33v36Ev();
extern void _ZN7S4259C33v37Ev();
extern void _ZN7S4259C33v38Ev();
extern void _ZN7S4259C33v39Ev();
extern void _ZN7S4259C33v40Ev();
extern void _ZN7S4259C33v41Ev();
static  VTBL_ENTRY vtc_S4259C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4259C3[0]),
  (VTBL_ENTRY)&_ZN7S4259C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4259C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v41Ev,
};
extern VTBL_ENTRY _ZTI7S4259C3[];
extern  VTBL_ENTRY _ZTV7S4259C3[];
Class_Descriptor cd_S4259C3 = {  "S4259C3", // class name
  0,0,//no base classes
  &(vtc_S4259C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,68), // object size
  NSPAIRA(_ZTI7S4259C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4259C3),32, //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  S4259C2  : S4259C3 {
  int s4259c2f0[5];
  virtual  ~S4259C2(); // _ZN7S4259C2D1Ev
  virtual void  v42(); // _ZN7S4259C23v42Ev
  virtual void  v43(); // _ZN7S4259C23v43Ev
  virtual void  v44(); // _ZN7S4259C23v44Ev
  virtual void  v45(); // _ZN7S4259C23v45Ev
  virtual void  v46(); // _ZN7S4259C23v46Ev
  virtual void  v47(); // _ZN7S4259C23v47Ev
  S4259C2(); // tgen
};
//SIG(-1 S4259C2) C1{ BC2{ 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 Fi Fp FC3{ m Fp Fi[2] FC4{ m}} FC5{ vd v35 v36 v37 FC6{ m Fp Fi[2] FC7{ m}}} Fp[3] Fi[2]} vd v1 v2 v3 v4 v5 v6 Fi[5]}


 S4259C2 ::~S4259C2(){ note_dtor("S4259C2", this);}
void  S4259C2 ::v42(){vfunc_called(this, "_ZN7S4259C23v42Ev");}
void  S4259C2 ::v43(){vfunc_called(this, "_ZN7S4259C23v43Ev");}
void  S4259C2 ::v44(){vfunc_called(this, "_ZN7S4259C23v44Ev");}
void  S4259C2 ::v45(){vfunc_called(this, "_ZN7S4259C23v45Ev");}
void  S4259C2 ::v46(){vfunc_called(this, "_ZN7S4259C23v46Ev");}
void  S4259C2 ::v47(){vfunc_called(this, "_ZN7S4259C23v47Ev");}
S4259C2 ::S4259C2(){ note_ctor("S4259C2", this);} // tgen

static void Test_S4259C2()
{
  extern Class_Descriptor cd_S4259C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,23)];
    init_test(&cd_S4259C2, buf);
    S4259C2 *dp, &lv = *(dp=new (buf) S4259C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,88), "sizeof(S4259C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4259C2)");
    check_base_class_offset(lv, (S4259C3*), 0, "S4259C2");
    check_field_offset(lv, s4259c2f0, ABISELECT(112,68), "S4259C2.s4259c2f0");
    test_class_info(&lv, &cd_S4259C2);
    dp->~S4259C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4259C2(Test_S4259C2, "S4259C2", ABISELECT(136,88));

#else // __cplusplus

extern void _ZN7S4259C2C1Ev();
extern void _ZN7S4259C2D1Ev();
Name_Map name_map_S4259C2[] = {
  NSPAIR(_ZN7S4259C2C1Ev),
  NSPAIR(_ZN7S4259C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4259C3;
extern VTBL_ENTRY _ZTI7S4259C3[];
extern  VTBL_ENTRY _ZTV7S4259C3[];
static Base_Class bases_S4259C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4259C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S4259C2[];
extern void _ZN7S4259C2D1Ev();
extern void _ZN7S4259C2D0Ev();
extern void _ZN7S4259C33v14Ev();
extern void _ZN7S4259C33v15Ev();
extern void _ZN7S4259C33v16Ev();
extern void _ZN7S4259C33v17Ev();
extern void _ZN7S4259C33v18Ev();
extern void _ZN7S4259C33v19Ev();
extern void _ZN7S4259C33v20Ev();
extern void _ZN7S4259C33v21Ev();
extern void _ZN7S4259C33v22Ev();
extern void _ZN7S4259C33v23Ev();
extern void _ZN7S4259C33v24Ev();
extern void _ZN7S4259C33v25Ev();
extern void _ZN7S4259C33v26Ev();
extern void _ZN7S4259C33v27Ev();
extern void _ZN7S4259C33v28Ev();
extern void _ZN7S4259C33v29Ev();
extern void _ZN7S4259C33v30Ev();
extern void _ZN7S4259C33v31Ev();
extern void _ZN7S4259C33v32Ev();
extern void _ZN7S4259C33v33Ev();
extern void _ZN7S4259C33v34Ev();
extern void _ZN7S4259C33v35Ev();
extern void _ZN7S4259C33v36Ev();
extern void _ZN7S4259C33v37Ev();
extern void _ZN7S4259C33v38Ev();
extern void _ZN7S4259C33v39Ev();
extern void _ZN7S4259C33v40Ev();
extern void _ZN7S4259C33v41Ev();
extern void _ZN7S4259C23v42Ev();
extern void _ZN7S4259C23v43Ev();
extern void _ZN7S4259C23v44Ev();
extern void _ZN7S4259C23v45Ev();
extern void _ZN7S4259C23v46Ev();
extern void _ZN7S4259C23v47Ev();
static  VTBL_ENTRY vtc_S4259C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4259C2[0]),
  (VTBL_ENTRY)&_ZN7S4259C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4259C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4259C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4259C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4259C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4259C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4259C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4259C23v47Ev,
};
extern VTBL_ENTRY _ZTI7S4259C2[];
extern  VTBL_ENTRY _ZTV7S4259C2[];
Class_Descriptor cd_S4259C2 = {  "S4259C2", // class name
  bases_S4259C2, 1,
  &(vtc_S4259C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI7S4259C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4259C2),38, //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  S4259C12  {
  int s4259c12f0;
  char s4259c12f1[438];
  int s4259c12f2;
  char s4259c12f3[257];
  int s4259c12f4[2];
};
//SIG(1 S4259C12) C1{ Fi Fc[438] Fi Fc[257] Fi[2]}



static void Test_S4259C12()
{
  {
    init_simple_test("S4259C12");
    S4259C12 lv;
    check2(sizeof(lv), 716, "sizeof(S4259C12)");
    check2(__alignof__(lv), 4, "__alignof__(S4259C12)");
    check_field_offset(lv, s4259c12f0, 0, "S4259C12.s4259c12f0");
    check_field_offset(lv, s4259c12f1, 4, "S4259C12.s4259c12f1");
    check_field_offset(lv, s4259c12f2, 444, "S4259C12.s4259c12f2");
    check_field_offset(lv, s4259c12f3, 448, "S4259C12.s4259c12f3");
    check_field_offset(lv, s4259c12f4, 708, "S4259C12.s4259c12f4");
  }
}
static Arrange_To_Call_Me vS4259C12(Test_S4259C12, "S4259C12", 716);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4259C13  {
  int s4259c13f0;
  char s4259c13f1[514];
  int s4259c13f2;
};
//SIG(1 S4259C13) C1{ Fi Fc[514] Fi}



static void Test_S4259C13()
{
  {
    init_simple_test("S4259C13");
    S4259C13 lv;
    check2(sizeof(lv), 524, "sizeof(S4259C13)");
    check2(__alignof__(lv), 4, "__alignof__(S4259C13)");
    check_field_offset(lv, s4259c13f0, 0, "S4259C13.s4259c13f0");
    check_field_offset(lv, s4259c13f1, 4, "S4259C13.s4259c13f1");
    check_field_offset(lv, s4259c13f2, 520, "S4259C13.s4259c13f2");
  }
}
static Arrange_To_Call_Me vS4259C13(Test_S4259C13, "S4259C13", 524);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4259C1  : S4259C2 {
  ::S2007C10 s4259c1f0;
  ::S2007C11 s4259c1f1;
  ::S2007C12 s4259c1f2;
  int s4259c1f3[8];
  char s4259c1f4[438];
  int s4259c1f5;
  char s4259c1f6[257];
  int s4259c1f7[4];
  ::S4259C12 s4259c1f8[16];
  ::S4259C13 s4259c1f9[16];
  virtual  ~S4259C1(); // _ZN7S4259C1D1Ev
  virtual void  v1(); // _ZN7S4259C12v1Ev
  virtual void  v2(); // _ZN7S4259C12v2Ev
  virtual void  v3(); // _ZN7S4259C12v3Ev
  virtual void  v4(); // _ZN7S4259C12v4Ev
  virtual void  v5(); // _ZN7S4259C12v5Ev
  virtual void  v6(); // _ZN7S4259C12v6Ev
  virtual void  v7(); // _ZN7S4259C12v7Ev
  virtual void  v8(); // _ZN7S4259C12v8Ev
  virtual void  v9(); // _ZN7S4259C12v9Ev
  virtual void  v10(); // _ZN7S4259C13v10Ev
  virtual void  v11(); // _ZN7S4259C13v11Ev
  virtual void  v12(); // _ZN7S4259C13v12Ev
  virtual void  v13(); // _ZN7S4259C13v13Ev
  S4259C1(); // tgen
};
//SIG(1 S4259C1) C1{ BC2{ BC3{ vd 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 Fi Fp FC4{ m Fp Fi[2] FC5{ m}} FC6{ vd v48 v49 v50 FC7{ m Fp Fi[2] FC8{ m}}} Fp[3] Fi[2]} vd v42 v43 v44 v45 v46 v47 Fi[5]} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 FC9{ Fi Fc[320]} FC10{ Fc[256]} FC11{ Fc[205]} Fi[8] Fc[438] Fi Fc[257] Fi[4] FC12{ Fi Fc[438] Fi Fc[257] Fi[2]}[16] FC13{ Fi Fc[514] Fi}[16]}


 S4259C1 ::~S4259C1(){ note_dtor("S4259C1", this);}
void  S4259C1 ::v1(){vfunc_called(this, "_ZN7S4259C12v1Ev");}
void  S4259C1 ::v2(){vfunc_called(this, "_ZN7S4259C12v2Ev");}
void  S4259C1 ::v3(){vfunc_called(this, "_ZN7S4259C12v3Ev");}
void  S4259C1 ::v4(){vfunc_called(this, "_ZN7S4259C12v4Ev");}
void  S4259C1 ::v5(){vfunc_called(this, "_ZN7S4259C12v5Ev");}
void  S4259C1 ::v6(){vfunc_called(this, "_ZN7S4259C12v6Ev");}
void  S4259C1 ::v7(){vfunc_called(this, "_ZN7S4259C12v7Ev");}
void  S4259C1 ::v8(){vfunc_called(this, "_ZN7S4259C12v8Ev");}
void  S4259C1 ::v9(){vfunc_called(this, "_ZN7S4259C12v9Ev");}
void  S4259C1 ::v10(){vfunc_called(this, "_ZN7S4259C13v10Ev");}
void  S4259C1 ::v11(){vfunc_called(this, "_ZN7S4259C13v11Ev");}
void  S4259C1 ::v12(){vfunc_called(this, "_ZN7S4259C13v12Ev");}
void  S4259C1 ::v13(){vfunc_called(this, "_ZN7S4259C13v13Ev");}
S4259C1 ::S4259C1(){ note_ctor("S4259C1", this);} // tgen

static void Test_S4259C1()
{
  extern Class_Descriptor cd_S4259C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2690,5368)];
    init_test(&cd_S4259C1, buf);
    S4259C1 *dp, &lv = *(dp=new (buf) S4259C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(21512,21468), "sizeof(S4259C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4259C1)");
    check_base_class_offset(lv, (S4259C3*)(S4259C2*), 0, "S4259C1");
    check_base_class_offset(lv, (S4259C2*), 0, "S4259C1");
    check_field_offset(lv, s4259c1f0, ABISELECT(132,88), "S4259C1.s4259c1f0");
    check_field_offset(lv, s4259c1f1, ABISELECT(456,412), "S4259C1.s4259c1f1");
    check_field_offset(lv, s4259c1f2, ABISELECT(712,668), "S4259C1.s4259c1f2");
    check_field_offset(lv, s4259c1f3, ABISELECT(920,876), "S4259C1.s4259c1f3");
    check_field_offset(lv, s4259c1f4, ABISELECT(952,908), "S4259C1.s4259c1f4");
    check_field_offset(lv, s4259c1f5, ABISELECT(1392,1348), "S4259C1.s4259c1f5");
    check_field_offset(lv, s4259c1f6, ABISELECT(1396,1352), "S4259C1.s4259c1f6");
    check_field_offset(lv, s4259c1f7, ABISELECT(1656,1612), "S4259C1.s4259c1f7");
    check_field_offset(lv, s4259c1f8, ABISELECT(1672,1628), "S4259C1.s4259c1f8");
    check_field_offset(lv, s4259c1f9, ABISELECT(13128,13084), "S4259C1.s4259c1f9");
    test_class_info(&lv, &cd_S4259C1);
    dp->~S4259C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4259C1(Test_S4259C1, "S4259C1", ABISELECT(21512,21468));

#else // __cplusplus

extern void _ZN7S4259C1C1Ev();
extern void _ZN7S4259C1D1Ev();
Name_Map name_map_S4259C1[] = {
  NSPAIR(_ZN7S4259C1C1Ev),
  NSPAIR(_ZN7S4259C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4259C3;
extern VTBL_ENTRY _ZTI7S4259C3[];
extern  VTBL_ENTRY _ZTV7S4259C3[];
extern Class_Descriptor cd_S4259C2;
extern VTBL_ENTRY _ZTI7S4259C2[];
extern  VTBL_ENTRY _ZTV7S4259C2[];
static Base_Class bases_S4259C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4259C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4259C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4259C1[];
extern void _ZN7S4259C1D1Ev();
extern void _ZN7S4259C1D0Ev();
extern void _ZN7S4259C33v14Ev();
extern void _ZN7S4259C33v15Ev();
extern void _ZN7S4259C33v16Ev();
extern void _ZN7S4259C33v17Ev();
extern void _ZN7S4259C33v18Ev();
extern void _ZN7S4259C33v19Ev();
extern void _ZN7S4259C33v20Ev();
extern void _ZN7S4259C33v21Ev();
extern void _ZN7S4259C33v22Ev();
extern void _ZN7S4259C33v23Ev();
extern void _ZN7S4259C33v24Ev();
extern void _ZN7S4259C33v25Ev();
extern void _ZN7S4259C33v26Ev();
extern void _ZN7S4259C33v27Ev();
extern void _ZN7S4259C33v28Ev();
extern void _ZN7S4259C33v29Ev();
extern void _ZN7S4259C33v30Ev();
extern void _ZN7S4259C33v31Ev();
extern void _ZN7S4259C33v32Ev();
extern void _ZN7S4259C33v33Ev();
extern void _ZN7S4259C33v34Ev();
extern void _ZN7S4259C33v35Ev();
extern void _ZN7S4259C33v36Ev();
extern void _ZN7S4259C33v37Ev();
extern void _ZN7S4259C33v38Ev();
extern void _ZN7S4259C33v39Ev();
extern void _ZN7S4259C33v40Ev();
extern void _ZN7S4259C33v41Ev();
extern void _ZN7S4259C23v42Ev();
extern void _ZN7S4259C23v43Ev();
extern void _ZN7S4259C23v44Ev();
extern void _ZN7S4259C23v45Ev();
extern void _ZN7S4259C23v46Ev();
extern void _ZN7S4259C23v47Ev();
extern void _ZN7S4259C12v1Ev();
extern void _ZN7S4259C12v2Ev();
extern void _ZN7S4259C12v3Ev();
extern void _ZN7S4259C12v4Ev();
extern void _ZN7S4259C12v5Ev();
extern void _ZN7S4259C12v6Ev();
extern void _ZN7S4259C12v7Ev();
extern void _ZN7S4259C12v8Ev();
extern void _ZN7S4259C12v9Ev();
extern void _ZN7S4259C13v10Ev();
extern void _ZN7S4259C13v11Ev();
extern void _ZN7S4259C13v12Ev();
extern void _ZN7S4259C13v13Ev();
static  VTBL_ENTRY vtc_S4259C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4259C1[0]),
  (VTBL_ENTRY)&_ZN7S4259C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4259C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v14Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v15Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v16Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v17Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v18Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v19Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v20Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v21Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v22Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v23Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v24Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v25Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v26Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v27Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v28Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v29Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v30Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v31Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v32Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v33Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v34Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v35Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v36Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v37Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v38Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v39Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v40Ev,
  (VTBL_ENTRY)&_ZN7S4259C33v41Ev,
  (VTBL_ENTRY)&_ZN7S4259C23v42Ev,
  (VTBL_ENTRY)&_ZN7S4259C23v43Ev,
  (VTBL_ENTRY)&_ZN7S4259C23v44Ev,
  (VTBL_ENTRY)&_ZN7S4259C23v45Ev,
  (VTBL_ENTRY)&_ZN7S4259C23v46Ev,
  (VTBL_ENTRY)&_ZN7S4259C23v47Ev,
  (VTBL_ENTRY)&_ZN7S4259C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4259C12v2Ev,
  (VTBL_ENTRY)&_ZN7S4259C12v3Ev,
  (VTBL_ENTRY)&_ZN7S4259C12v4Ev,
  (VTBL_ENTRY)&_ZN7S4259C12v5Ev,
  (VTBL_ENTRY)&_ZN7S4259C12v6Ev,
  (VTBL_ENTRY)&_ZN7S4259C12v7Ev,
  (VTBL_ENTRY)&_ZN7S4259C12v8Ev,
  (VTBL_ENTRY)&_ZN7S4259C12v9Ev,
  (VTBL_ENTRY)&_ZN7S4259C13v10Ev,
  (VTBL_ENTRY)&_ZN7S4259C13v11Ev,
  (VTBL_ENTRY)&_ZN7S4259C13v12Ev,
  (VTBL_ENTRY)&_ZN7S4259C13v13Ev,
};
extern VTBL_ENTRY _ZTI7S4259C1[];
extern  VTBL_ENTRY _ZTV7S4259C1[];
Class_Descriptor cd_S4259C1 = {  "S4259C1", // class name
  bases_S4259C1, 2,
  &(vtc_S4259C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(21512,21468), // object size
  NSPAIRA(_ZTI7S4259C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4259C1),51, //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  S19566C6  {
  char  :0;
  unsigned char s19566c6f1:1;
  void *s19566c6f2;
  __tsi64 s19566c6f3[2];
  void *s19566c6f4[8];
  __tsi64 s19566c6f5;
  void *s19566c6f6;
  void  mf19566c6(); // _ZN8S19566C69mf19566c6Ev
};
//SIG(-1 S19566C6) C1{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}


void  S19566C6 ::mf19566c6(){}

static void Test_S19566C6()
{
  {
    init_simple_test("S19566C6");
    static S19566C6 lv;
    check2(sizeof(lv), ABISELECT(112,68), "sizeof(S19566C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19566C6)");
    set_bf_and_test(lv, s19566c6f1, 0, 0, 1, 1, "S19566C6");
    check_field_offset(lv, s19566c6f2, ABISELECT(8,4), "S19566C6.s19566c6f2");
    check_field_offset(lv, s19566c6f3, ABISELECT(16,8), "S19566C6.s19566c6f3");
    check_field_offset(lv, s19566c6f4, ABISELECT(32,24), "S19566C6.s19566c6f4");
    check_field_offset(lv, s19566c6f5, ABISELECT(96,56), "S19566C6.s19566c6f5");
    check_field_offset(lv, s19566c6f6, ABISELECT(104,64), "S19566C6.s19566c6f6");
  }
}
static Arrange_To_Call_Me vS19566C6(Test_S19566C6, "S19566C6", ABISELECT(112,68));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S19566C6[];
VTBL_ENTRY *P__ZTI8S19566C6 = _ZTI8S19566C6; 
Class_Descriptor cd_S19566C6 = {  "S19566C6", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(112,68), // object size
  NSPAIRA(_ZTI8S19566C6),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  S19566C5  {
  __tsi64 s19566c5f0;
  void *s19566c5f1;
  ::S19566C6 s19566c5f2[3];
  char s19566c5f3;
  void  mf19566c5(); // _ZN8S19566C59mf19566c5Ev
};
//SIG(-1 S19566C5) C1{ m FL Fp FC2{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc}


void  S19566C5 ::mf19566c5(){}

static void Test_S19566C5()
{
  {
    init_simple_test("S19566C5");
    static S19566C5 lv;
    check2(sizeof(lv), ABISELECT(360,220), "sizeof(S19566C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19566C5)");
    check_field_offset(lv, s19566c5f0, 0, "S19566C5.s19566c5f0");
    check_field_offset(lv, s19566c5f1, 8, "S19566C5.s19566c5f1");
    check_field_offset(lv, s19566c5f2, ABISELECT(16,12), "S19566C5.s19566c5f2");
    check_field_offset(lv, s19566c5f3, ABISELECT(352,216), "S19566C5.s19566c5f3");
  }
}
static Arrange_To_Call_Me vS19566C5(Test_S19566C5, "S19566C5", ABISELECT(360,220));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S19566C5[];
VTBL_ENTRY *P__ZTI8S19566C5 = _ZTI8S19566C5; 
Class_Descriptor cd_S19566C5 = {  "S19566C5", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(360,220), // object size
  NSPAIRA(_ZTI8S19566C5),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19566C4  : virtual S19566C5 , S19566C6 {
  ::S19566C5 s19566c4f0[3];
  int s19566c4f1[4];
  ~S19566C4(); // tgen
  S19566C4(); // tgen
};
//SIG(-1 S19566C4) C1{ VBC2{ m FL Fp FC3{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC3 FC2[3] Fi[4]}


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

static void Test_S19566C4()
{
  extern Class_Descriptor cd_S19566C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(198,243)];
    init_test(&cd_S19566C4, buf);
    S19566C4 *dp, &lv = *(dp=new (buf) S19566C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1576,968), "sizeof(S19566C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19566C4)");
    check_base_class_offset(lv, (S19566C5*), ABISELECT(1216,748), "S19566C4");
    check_base_class_offset(lv, (S19566C6*), ABISELECT(8,4), "S19566C4");
    check_field_offset(lv, s19566c4f0, ABISELECT(120,72), "S19566C4.s19566c4f0");
    check_field_offset(lv, s19566c4f1, ABISELECT(1200,732), "S19566C4.s19566c4f1");
    test_class_info(&lv, &cd_S19566C4);
    dp->~S19566C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19566C4(Test_S19566C4, "S19566C4", ABISELECT(1576,968));

#else // __cplusplus

extern void _ZN8S19566C4C1Ev();
extern void _ZN8S19566C4D1Ev();
Name_Map name_map_S19566C4[] = {
  NSPAIR(_ZN8S19566C4C1Ev),
  NSPAIR(_ZN8S19566C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
static Base_Class bases_S19566C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19566C6,    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 _ZTI8S19566C4[];
static  VTBL_ENTRY vtc_S19566C4[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
extern VTBL_ENTRY _ZTV8S19566C4[];
static  VTT_ENTRY vtt_S19566C4[] = {
  {&(_ZTV8S19566C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
Class_Descriptor cd_S19566C4 = {  "S19566C4", // class name
  bases_S19566C4, 2,
  &(vtc_S19566C4[0]), // expected_vtbl_contents
  &(vtt_S19566C4[0]), // expected_vtt_contents
  ABISELECT(1576,968), // object size
  NSPAIRA(_ZTI8S19566C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19566C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19566C4),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  S19566C7  : S19566C4 , S19566C6 , S19566C5 {
  __tsi64 s19566c7f0[6];
  int s19566c7f1;
  ::S19566C5 s19566c7f2;
  void *s19566c7f3;
  ::S19566C6 s19566c7f4;
  int s19566c7f5;
  void *s19566c7f6[7];
  virtual  ~S19566C7(); // _ZN8S19566C7D2Ev
  S19566C7(); // tgen
};
//SIG(-1 S19566C7) C1{ BC2{ VBC3{ m FL Fp FC4{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC4 FC3[3] Fi[4]} BC4 BC3 vd FL[6] Fi FC3 Fp FC4 Fi Fp[7]}


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

static void Test_S19566C7()
{
  extern Class_Descriptor cd_S19566C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(332,409)];
    init_test(&cd_S19566C7, buf);
    S19566C7 *dp, &lv = *(dp=new (buf) S19566C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2648,1632), "sizeof(S19566C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19566C7)");
    check_base_class_offset(lv, (S19566C5*)(S19566C4*), ABISELECT(2288,1412), "S19566C7");
    check_base_class_offset(lv, (S19566C6*)(S19566C4*), ABISELECT(8,4), "S19566C7");
    check_base_class_offset(lv, (S19566C4*), 0, "S19566C7");
    /*is_ambiguous_... S19566C7::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*), ABISELECT(1216,748), "S19566C7");
    /*is_ambiguous_... S19566C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(1328,816), "S19566C7");
    check_field_offset(lv, s19566c7f0, ABISELECT(1688,1036), "S19566C7.s19566c7f0");
    check_field_offset(lv, s19566c7f1, ABISELECT(1736,1084), "S19566C7.s19566c7f1");
    check_field_offset(lv, s19566c7f2, ABISELECT(1744,1088), "S19566C7.s19566c7f2");
    check_field_offset(lv, s19566c7f3, ABISELECT(2104,1308), "S19566C7.s19566c7f3");
    check_field_offset(lv, s19566c7f4, ABISELECT(2112,1312), "S19566C7.s19566c7f4");
    check_field_offset(lv, s19566c7f5, ABISELECT(2224,1380), "S19566C7.s19566c7f5");
    check_field_offset(lv, s19566c7f6, ABISELECT(2232,1384), "S19566C7.s19566c7f6");
    test_class_info(&lv, &cd_S19566C7);
    dp->~S19566C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19566C7(Test_S19566C7, "S19566C7", ABISELECT(2648,1632));

#else // __cplusplus

extern void _ZN8S19566C7C1Ev();
extern void _ZN8S19566C7D2Ev();
Name_Map name_map_S19566C7[] = {
  NSPAIR(_ZN8S19566C7C1Ev),
  NSPAIR(_ZN8S19566C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
static Base_Class bases_S19566C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    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_S19566C4,    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_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19566C7[];
extern void _ZN8S19566C7D1Ev();
extern void _ZN8S19566C7D0Ev();
static  VTBL_ENTRY vtc_S19566C7[] = {
  ABISELECT(2288,1412),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C7[0]),
  (VTBL_ENTRY)&_ZN8S19566C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C7D0Ev,
};
extern VTBL_ENTRY _ZTV8S19566C7[];
static  VTBL_ENTRY _tg__ZTV8S19566C4__8S19566C7[] = {
  ABISELECT(2288,1412),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
static  VTT_ENTRY vtt_S19566C7[] = {
  {&(_ZTV8S19566C7[3]),  3,5},
  {&(_tg__ZTV8S19566C4__8S19566C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19566C7[];
extern  VTBL_ENTRY _ZTV8S19566C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C7[];
Class_Descriptor cd_S19566C7 = {  "S19566C7", // class name
  bases_S19566C7, 5,
  &(vtc_S19566C7[0]), // expected_vtbl_contents
  &(vtt_S19566C7[0]), // expected_vtt_contents
  ABISELECT(2648,1632), // object size
  NSPAIRA(_ZTI8S19566C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19566C7),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19566C7),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  S19566C3  : virtual S19566C4 , S19566C6 , S19566C5 , S19566C7 {
  int s19566c3f0;
  ::S19566C4 s19566c3f1;
  short s19566c3f2;
  void *s19566c3f3;
  int s19566c3f4[5];
  ~S19566C3(); // tgen
  S19566C3(); // tgen
};
//SIG(-1 S19566C3) C1{ VBC2{ VBC3{ m FL Fp FC4{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC4 FC3[3] Fi[4]} BC4 BC3 BC5{ BC2 BC4 BC3 vd FL[6] Fi FC3 Fp FC4 Fi Fp[7]} Fi FC2 Fs Fp Fi[5]}


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

static void Test_S19566C3()
{
  extern Class_Descriptor cd_S19566C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(746,918)];
    init_test(&cd_S19566C3, buf);
    S19566C3 *dp, &lv = *(dp=new (buf) S19566C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5960,3668), "sizeof(S19566C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19566C3)");
    /*is_ambiguous_... S19566C3::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C4*), ABISELECT(5600,3448), "S19566C3");
    check_base_class_offset(lv, (S19566C5*)(S19566C4*)(S19566C7*), ABISELECT(5600,3448), "S19566C3");
    /*is_ambiguous_... S19566C3::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C4*), ABISELECT(4392,2704), "S19566C3");
    /*is_ambiguous_... S19566C3::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C4*), ABISELECT(4384,2700), "S19566C3");
    /*is_ambiguous_... S19566C3::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*), ABISELECT(2288,1412), "S19566C3");
    /*is_ambiguous_... S19566C3::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(2400,1480), "S19566C3");
    check_base_class_offset(lv, (S19566C6*)(S19566C4*)(S19566C7*), ABISELECT(8,4), "S19566C3");
    check_base_class_offset(lv, (S19566C4*)(S19566C7*), 0, "S19566C3");
    /*is_ambiguous_... S19566C7::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C7*), ABISELECT(1216,748), "S19566C3");
    /*is_ambiguous_... S19566C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C7*), ABISELECT(1328,816), "S19566C3");
    check_base_class_offset(lv, (S19566C7*), 0, "S19566C3");
    check_field_offset(lv, s19566c3f0, ABISELECT(2760,1700), "S19566C3.s19566c3f0");
    check_field_offset(lv, s19566c3f1, ABISELECT(2768,1704), "S19566C3.s19566c3f1");
    check_field_offset(lv, s19566c3f2, ABISELECT(4344,2672), "S19566C3.s19566c3f2");
    check_field_offset(lv, s19566c3f3, ABISELECT(4352,2676), "S19566C3.s19566c3f3");
    check_field_offset(lv, s19566c3f4, ABISELECT(4360,2680), "S19566C3.s19566c3f4");
    test_class_info(&lv, &cd_S19566C3);
    dp->~S19566C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19566C3(Test_S19566C3, "S19566C3", ABISELECT(5960,3668));

#else // __cplusplus

extern void _ZN8S19566C3C1Ev();
extern void _ZN8S19566C3D1Ev();
Name_Map name_map_S19566C3[] = {
  NSPAIR(_ZN8S19566C3C1Ev),
  NSPAIR(_ZN8S19566C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C7;
extern VTBL_ENTRY _ZTI8S19566C7[];
extern  VTBL_ENTRY _ZTV8S19566C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C7[];
static Base_Class bases_S19566C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(5600,3448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(4392,2704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C4,    ABISELECT(4384,2700), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19566C5,    ABISELECT(2400,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
  1, 0},
  {&cd_S19566C6,    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
    6, //immediately_derived
  0, 0},
  {&cd_S19566C4,    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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C7,    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 _ZTI8S19566C3[];
extern void _ZN8S19566C3D1Ev();
extern void _ZN8S19566C3D0Ev();
static  VTBL_ENTRY vtc_S19566C3[] = {
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C3[0]),
  (VTBL_ENTRY)&_ZN8S19566C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C3D0Ev,
  ABISELECT(1216,748),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI8S19566C3[0]),
};
extern VTBL_ENTRY _ZTV8S19566C3[];
extern void _ZN8S19566C7D1Ev();
extern void _ZN8S19566C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C7__8S19566C3[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C7[0]),
  (VTBL_ENTRY)&_ZN8S19566C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19566C48S19566C7__A1__8S19566C3[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__8S19566C3[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
static  VTT_ENTRY vtt_S19566C3[] = {
  {&(_ZTV8S19566C3[4]),  4,9},
  {&(_tg__ZTV8S19566C7__8S19566C3[3]),  3,5},
  {&(_tg__ZTV8S19566C48S19566C7__A1__8S19566C3[3]),  3,3},
  {&(_ZTV8S19566C3[9]),  9,9},
  {&(_tg__ZTV8S19566C4__8S19566C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19566C3[];
extern  VTBL_ENTRY _ZTV8S19566C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C3[];
Class_Descriptor cd_S19566C3 = {  "S19566C3", // class name
  bases_S19566C3, 10,
  &(vtc_S19566C3[0]), // expected_vtbl_contents
  &(vtt_S19566C3[0]), // expected_vtt_contents
  ABISELECT(5960,3668), // object size
  NSPAIRA(_ZTI8S19566C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19566C3),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19566C3),5, //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  S19566C2  : S19566C3 , S19566C4 , S19566C7 , S19566C5 {
  ::S3052C22_nt s19566c2f0;
  int s19566c2f1[2];
  long s19566c2f2;
  void *s19566c2f3;
  virtual  ~S19566C2(); // _ZN8S19566C2D2Ev
  virtual void  v1(); // _ZN8S19566C22v1Ev
  S19566C2(); // tgen
};
//SIG(-1 S19566C2) C1{ BC2{ VBC3{ VBC4{ m FL Fp FC5{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC5 FC4[3] Fi[4]} BC5 BC4 BC6{ BC3 BC5 BC4 vd FL[6] Fi FC4 Fp FC5 Fi Fp[7]} Fi FC3 Fs Fp Fi[5]} BC3 BC6 BC4 vd v1 FC7{} Fi[2] Fl Fp}


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

static void Test_S19566C2()
{
  extern Class_Descriptor cd_S19566C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1233,1518)];
    init_test(&cd_S19566C2, buf);
    S19566C2 *dp, &lv = *(dp=new (buf) S19566C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9856,6068), "sizeof(S19566C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19566C2)");
    /*is_ambiguous_... S19566C2::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C4*), ABISELECT(9496,5848), "S19566C2");
    check_base_class_offset(lv, (S19566C5*)(S19566C4*)(S19566C7*)(S19566C3*), ABISELECT(9496,5848), "S19566C2");
    /*is_ambiguous_... S19566C2::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C4*), ABISELECT(9496,5848), "S19566C2");
    /*is_ambiguous_... S19566C2::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C4*)(S19566C7*), ABISELECT(9496,5848), "S19566C2");
    /*is_ambiguous_... S19566C2::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C4*), ABISELECT(8288,5104), "S19566C2");
    /*is_ambiguous_... S19566C3::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C4*)(S19566C3*), ABISELECT(8280,5100), "S19566C2");
    /*is_ambiguous_... S19566C3::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C3*), ABISELECT(2288,1412), "S19566C2");
    /*is_ambiguous_... S19566C3::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C3*), ABISELECT(2400,1480), "S19566C2");
    check_base_class_offset(lv, (S19566C6*)(S19566C4*)(S19566C7*)(S19566C3*), ABISELECT(8,4), "S19566C2");
    check_base_class_offset(lv, (S19566C4*)(S19566C7*)(S19566C3*), 0, "S19566C2");
    /*is_ambiguous_... S19566C7::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C7*)(S19566C3*), ABISELECT(1216,748), "S19566C2");
    /*is_ambiguous_... S19566C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C7*)(S19566C3*), ABISELECT(1328,816), "S19566C2");
    check_base_class_offset(lv, (S19566C7*)(S19566C3*), 0, "S19566C2");
    check_base_class_offset(lv, (S19566C3*), 0, "S19566C2");
    /*is_ambiguous_... S19566C2::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C4*), ABISELECT(4392,2704), "S19566C2");
    /*is_ambiguous_... S19566C2::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C4*), ABISELECT(4384,2700), "S19566C2");
    /*is_ambiguous_... S19566C2::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C4*)(S19566C7*), ABISELECT(5608,3452), "S19566C2");
    /*is_ambiguous_... S19566C2::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C4*)(S19566C7*), ABISELECT(5600,3448), "S19566C2");
    /*is_ambiguous_... S19566C2::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C7*), ABISELECT(6816,4196), "S19566C2");
    /*is_ambiguous_... S19566C2::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C7*), ABISELECT(6928,4264), "S19566C2");
    /*is_ambiguous_... S19566C2::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C7*), ABISELECT(5600,3448), "S19566C2");
    /*is_ambiguous_... S19566C2::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(7888,4860), "S19566C2");
    check_field_offset(lv, s19566c2f0, ABISELECT(8248,5080), "S19566C2.s19566c2f0");
    check_field_offset(lv, s19566c2f1, ABISELECT(8252,5084), "S19566C2.s19566c2f1");
    check_field_offset(lv, s19566c2f2, ABISELECT(8264,5092), "S19566C2.s19566c2f2");
    check_field_offset(lv, s19566c2f3, ABISELECT(8272,5096), "S19566C2.s19566c2f3");
    test_class_info(&lv, &cd_S19566C2);
    dp->~S19566C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19566C2(Test_S19566C2, "S19566C2", ABISELECT(9856,6068));

#else // __cplusplus

extern void _ZN8S19566C2C1Ev();
extern void _ZN8S19566C2D2Ev();
Name_Map name_map_S19566C2[] = {
  NSPAIR(_ZN8S19566C2C1Ev),
  NSPAIR(_ZN8S19566C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C7;
extern VTBL_ENTRY _ZTI8S19566C7[];
extern  VTBL_ENTRY _ZTV8S19566C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C7[];
extern Class_Descriptor cd_S19566C3;
extern VTBL_ENTRY _ZTI8S19566C3[];
extern  VTBL_ENTRY _ZTV8S19566C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C7;
extern VTBL_ENTRY _ZTI8S19566C7[];
extern  VTBL_ENTRY _ZTV8S19566C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C7[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
static Base_Class bases_S19566C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(9496,5848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(8288,5104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C4,    ABISELECT(8280,5100), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(2400,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
    10, //immediately_derived
  0, 0},
  {&cd_S19566C6,    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
    6, //immediately_derived
  0, 0},
  {&cd_S19566C4,    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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C7,    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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19566C3,    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_S19566C6,    ABISELECT(4392,2704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C4,    ABISELECT(4384,2700), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19566C6,    ABISELECT(5608,3452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C4,    ABISELECT(5600,3448), //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
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(6816,4196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(6928,4264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C7,    ABISELECT(5600,3448), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19566C5,    ABISELECT(7888,4860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19566C2[];
extern void _ZN8S19566C2D1Ev();
extern void _ZN8S19566C2D0Ev();
extern void _ZN8S19566C22v1Ev();
extern void ABISELECT(_ZThn5600_N8S19566C2D1Ev,_ZThn3448_N8S19566C2D1Ev)();
extern void ABISELECT(_ZThn5600_N8S19566C2D0Ev,_ZThn3448_N8S19566C2D0Ev)();
static  VTBL_ENTRY vtc_S19566C2[] = {
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C2[0]),
  (VTBL_ENTRY)&_ZN8S19566C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19566C22v1Ev,
  ABISELECT(5112,3148),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI8S19566C2[0]),
  ABISELECT(3896,2400),
  ABISELECT(-5600,-3448),
  (VTBL_ENTRY)&(_ZTI8S19566C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S19566C2D1Ev,_ZThn3448_N8S19566C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S19566C2D0Ev,_ZThn3448_N8S19566C2D0Ev),
  ABISELECT(1216,748),
  ABISELECT(-8280,-5100),
  (VTBL_ENTRY)&(_ZTI8S19566C2[0]),
};
extern VTBL_ENTRY _ZTV8S19566C2[];
extern void _ZN8S19566C3D1Ev();
extern void _ZN8S19566C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C3__8S19566C2[] = {
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C3[0]),
  (VTBL_ENTRY)&_ZN8S19566C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C3D0Ev,
};
extern void _ZN8S19566C7D1Ev();
extern void _ZN8S19566C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C78S19566C3__8S19566C2[] = {
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C7[0]),
  (VTBL_ENTRY)&_ZN8S19566C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19566C48S19566C78S19566C3__A1__8S19566C2[] = {
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__8S19566C3__8S19566C2[] = {
  ABISELECT(1216,748),
  ABISELECT(-8280,-5100),
  (VTBL_ENTRY)&(_ZTI8S19566C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__A__8S19566C2[] = {
  ABISELECT(5112,3148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
extern void _ZN8S19566C7D1Ev();
extern void _ZN8S19566C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C7__A1__8S19566C2[] = {
  ABISELECT(3896,2400),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C7[0]),
  (VTBL_ENTRY)&_ZN8S19566C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19566C48S19566C7__A3__8S19566C2[] = {
  ABISELECT(3896,2400),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__8S19566C2[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
static  VTT_ENTRY vtt_S19566C2[] = {
  {&(_ZTV8S19566C2[4]),  4,18},
  {&(_tg__ZTV8S19566C3__8S19566C2[4]),  4,6},
  {&(_tg__ZTV8S19566C78S19566C3__8S19566C2[3]),  3,5},
  {&(_tg__ZTV8S19566C48S19566C78S19566C3__A1__8S19566C2[3]),  3,3},
  {&(_tg__ZTV8S19566C4__8S19566C3__8S19566C2[3]),  3,3},
  {&(_tg__ZTV8S19566C4__A__8S19566C2[3]),  3,3},
  {&(_tg__ZTV8S19566C7__A1__8S19566C2[3]),  3,5},
  {&(_tg__ZTV8S19566C48S19566C7__A3__8S19566C2[3]),  3,3},
  {&(_ZTV8S19566C2[18]),  18,18},
  {&(_ZTV8S19566C2[10]),  10,18},
  {&(_ZTV8S19566C2[13]),  13,18},
  {&(_tg__ZTV8S19566C4__8S19566C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19566C2[];
extern  VTBL_ENTRY _ZTV8S19566C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C2[];
Class_Descriptor cd_S19566C2 = {  "S19566C2", // class name
  bases_S19566C2, 19,
  &(vtc_S19566C2[0]), // expected_vtbl_contents
  &(vtt_S19566C2[0]), // expected_vtt_contents
  ABISELECT(9856,6068), // object size
  NSPAIRA(_ZTI8S19566C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19566C2),18, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19566C2),12, //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  S19566C11  {
  void *s19566c11f0;
  char s19566c11f1;
  int s19566c11f2:6;
  long s19566c11f3;
  ::S3052C22_nt s19566c11f4;
  int s19566c11f5;
  void  mf19566c11(); // _ZN9S19566C1110mf19566c11Ev
};
//SIG(-1 S19566C11) C1{ m Fp Fc Fi:6 Fl FC2{} Fi}


void  S19566C11 ::mf19566c11(){}

static void Test_S19566C11()
{
  {
    init_simple_test("S19566C11");
    static S19566C11 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19566C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19566C11)");
    check_field_offset(lv, s19566c11f0, 0, "S19566C11.s19566c11f0");
    check_field_offset(lv, s19566c11f1, ABISELECT(8,4), "S19566C11.s19566c11f1");
    set_bf_and_test(lv, s19566c11f2, ABISELECT(9,5), 0, 6, 1, "S19566C11");
    set_bf_and_test(lv, s19566c11f2, ABISELECT(9,5), 0, 6, hide_sll(1LL<<5), "S19566C11");
    check_field_offset(lv, s19566c11f3, ABISELECT(16,8), "S19566C11.s19566c11f3");
    check_field_offset(lv, s19566c11f4, ABISELECT(24,12), "S19566C11.s19566c11f4");
    check_field_offset(lv, s19566c11f5, ABISELECT(28,16), "S19566C11.s19566c11f5");
  }
}
static Arrange_To_Call_Me vS19566C11(Test_S19566C11, "S19566C11", ABISELECT(32,20));

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S19566C11[];
VTBL_ENTRY *P__ZTI9S19566C11 = _ZTI9S19566C11; 
Class_Descriptor cd_S19566C11 = {  "S19566C11", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI9S19566C11),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19566C10  : virtual S19566C3 , virtual S19566C7 , virtual S19566C2 , S19566C5 , virtual S19566C11 {
  int s19566c10f0;
  virtual  ~S19566C10(); // _ZN9S19566C10D2Ev
  virtual void  v2(); // _ZN9S19566C102v2Ev
  S19566C10(); // tgen
};
//SIG(-1 S19566C10) C1{ VBC2{ VBC3{ VBC4{ m FL Fp FC5{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC5 FC4[3] Fi[4]} BC5 BC4 BC6{ BC3 BC5 BC4 vd FL[6] Fi FC4 Fp FC5 Fi Fp[7]} Fi FC3 Fs Fp Fi[5]} VBC6 VBC7{ BC2 BC3 BC6 BC4 vd v2 FC8{} Fi[2] Fl Fp} BC4 VBC9{ m Fp Fc Fi:6 Fl FC8 Fi} vd v1 Fi}


 S19566C10 ::~S19566C10(){ note_dtor("S19566C10", this);}
void  S19566C10 ::v2(){vfunc_called(this, "_ZN9S19566C102v2Ev");}
S19566C10 ::S19566C10(){ note_ctor("S19566C10", this);} // tgen

static void Test_S19566C10()
{
  extern Class_Descriptor cd_S19566C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2118,2608)];
    init_test(&cd_S19566C10, buf);
    S19566C10 *dp, &lv = *(dp=new (buf) S19566C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16936,10428), "sizeof(S19566C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19566C10)");
    /*is_ambiguous_... S19566C10::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C4*), ABISELECT(5976,3676), "S19566C10");
    /*is_ambiguous_... S19566C10::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C4*)(S19566C7*)(S19566C3*), ABISELECT(5976,3676), "S19566C10");
    /*is_ambiguous_... S19566C10::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C4*)(S19566C7*), ABISELECT(5976,3676), "S19566C10");
    check_base_class_offset(lv, (S19566C5*)(S19566C4*)(S19566C7*)(S19566C3*)(S19566C2*), ABISELECT(5976,3676), "S19566C10");
    /*is_ambiguous_... S19566C2::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C4*)(S19566C2*), ABISELECT(5976,3676), "S19566C10");
    /*is_ambiguous_... S19566C2::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C4*)(S19566C7*)(S19566C2*), ABISELECT(5976,3676), "S19566C10");
    /*is_ambiguous_... S19566C10::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C4*), ABISELECT(4768,2932), "S19566C10");
    /*is_ambiguous_... S19566C10::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C4*)(S19566C3*), ABISELECT(4760,2928), "S19566C10");
    /*is_ambiguous_... S19566C3::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C4*)(S19566C3*)(S19566C2*), ABISELECT(4760,2928), "S19566C10");
    /*is_ambiguous_... S19566C10::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C3*), ABISELECT(2664,1640), "S19566C10");
    /*is_ambiguous_... S19566C10::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C3*), ABISELECT(2776,1708), "S19566C10");
    /*is_ambiguous_... S19566C10::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C4*)(S19566C7*)(S19566C3*), ABISELECT(384,232), "S19566C10");
    /*is_ambiguous_... S19566C10::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C4*)(S19566C7*)(S19566C3*), ABISELECT(376,228), "S19566C10");
    /*is_ambiguous_... S19566C10::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C7*)(S19566C3*), ABISELECT(1592,976), "S19566C10");
    /*is_ambiguous_... S19566C10::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C7*)(S19566C3*), ABISELECT(1704,1044), "S19566C10");
    /*is_ambiguous_... S19566C10::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C7*)(S19566C3*), ABISELECT(376,228), "S19566C10");
    /*is_ambiguous_... S19566C10::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C3*), ABISELECT(376,228), "S19566C10");
    /*is_ambiguous_... S19566C10::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C4*)(S19566C7*), ABISELECT(6344,3900), "S19566C10");
    /*is_ambiguous_... S19566C10::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C4*)(S19566C7*), ABISELECT(6336,3896), "S19566C10");
    /*is_ambiguous_... S19566C10::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C7*), ABISELECT(7552,4644), "S19566C10");
    /*is_ambiguous_... S19566C10::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C7*), ABISELECT(7664,4712), "S19566C10");
    /*is_ambiguous_... S19566C10::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C7*), ABISELECT(6336,3896), "S19566C10");
    /*is_ambiguous_... S19566C3::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C3*)(S19566C2*), ABISELECT(10912,6720), "S19566C10");
    /*is_ambiguous_... S19566C3::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C3*)(S19566C2*), ABISELECT(11024,6788), "S19566C10");
    check_base_class_offset(lv, (S19566C6*)(S19566C4*)(S19566C7*)(S19566C3*)(S19566C2*), ABISELECT(8632,5312), "S19566C10");
    check_base_class_offset(lv, (S19566C4*)(S19566C7*)(S19566C3*)(S19566C2*), ABISELECT(8624,5308), "S19566C10");
    /*is_ambiguous_... S19566C7::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C7*)(S19566C3*)(S19566C2*), ABISELECT(9840,6056), "S19566C10");
    /*is_ambiguous_... S19566C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C7*)(S19566C3*)(S19566C2*), ABISELECT(9952,6124), "S19566C10");
    check_base_class_offset(lv, (S19566C7*)(S19566C3*)(S19566C2*), ABISELECT(8624,5308), "S19566C10");
    check_base_class_offset(lv, (S19566C3*)(S19566C2*), ABISELECT(8624,5308), "S19566C10");
    /*is_ambiguous_... S19566C2::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C4*)(S19566C2*), ABISELECT(13016,8012), "S19566C10");
    /*is_ambiguous_... S19566C2::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C4*)(S19566C2*), ABISELECT(13008,8008), "S19566C10");
    /*is_ambiguous_... S19566C2::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C4*)(S19566C7*)(S19566C2*), ABISELECT(14232,8760), "S19566C10");
    /*is_ambiguous_... S19566C2::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C4*)(S19566C7*)(S19566C2*), ABISELECT(14224,8756), "S19566C10");
    /*is_ambiguous_... S19566C2::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C7*)(S19566C2*), ABISELECT(15440,9504), "S19566C10");
    /*is_ambiguous_... S19566C2::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C7*)(S19566C2*), ABISELECT(15552,9572), "S19566C10");
    /*is_ambiguous_... S19566C2::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C7*)(S19566C2*), ABISELECT(14224,8756), "S19566C10");
    /*is_ambiguous_... S19566C2::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C2*), ABISELECT(16512,10168), "S19566C10");
    check_base_class_offset(lv, (S19566C2*), ABISELECT(8624,5308), "S19566C10");
    /*is_ambiguous_... S19566C10::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(8,4), "S19566C10");
    check_base_class_offset(lv, (S19566C11*), ABISELECT(16904,10408), "S19566C10");
    check_field_offset(lv, s19566c10f0, ABISELECT(368,224), "S19566C10.s19566c10f0");
    test_class_info(&lv, &cd_S19566C10);
    dp->~S19566C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19566C10(Test_S19566C10, "S19566C10", ABISELECT(16936,10428));

#else // __cplusplus

extern void _ZN9S19566C10C1Ev();
extern void _ZN9S19566C10D2Ev();
Name_Map name_map_S19566C10[] = {
  NSPAIR(_ZN9S19566C10C1Ev),
  NSPAIR(_ZN9S19566C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C7;
extern VTBL_ENTRY _ZTI8S19566C7[];
extern  VTBL_ENTRY _ZTV8S19566C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C7[];
extern Class_Descriptor cd_S19566C3;
extern VTBL_ENTRY _ZTI8S19566C3[];
extern  VTBL_ENTRY _ZTV8S19566C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C7;
extern VTBL_ENTRY _ZTI8S19566C7[];
extern  VTBL_ENTRY _ZTV8S19566C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C7;
extern VTBL_ENTRY _ZTI8S19566C7[];
extern  VTBL_ENTRY _ZTV8S19566C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C7[];
extern Class_Descriptor cd_S19566C3;
extern VTBL_ENTRY _ZTI8S19566C3[];
extern  VTBL_ENTRY _ZTV8S19566C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C7;
extern VTBL_ENTRY _ZTI8S19566C7[];
extern  VTBL_ENTRY _ZTV8S19566C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C7[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C2;
extern VTBL_ENTRY _ZTI8S19566C2[];
extern  VTBL_ENTRY _ZTV8S19566C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C2[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C11;
extern VTBL_ENTRY _ZTI9S19566C11[];
static Base_Class bases_S19566C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(5976,3676), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(4768,2932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C4,    ABISELECT(4760,2928), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(2664,1640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(2776,1708), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(384,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
    6, //immediately_derived
  0, 0},
  {&cd_S19566C4,    ABISELECT(376,228), //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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1592,976), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1704,1044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C7,    ABISELECT(376,228), //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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19566C3,    ABISELECT(376,228), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(6344,3900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C4,    ABISELECT(6336,3896), //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
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(7552,4644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 0},
  {&cd_S19566C5,    ABISELECT(7664,4712), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 0},
  {&cd_S19566C7,    ABISELECT(6336,3896), //bcp->offset
    21, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(10912,6720), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(11024,6788), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(8632,5312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C4,    ABISELECT(8624,5308), //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
    7, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(9840,6056), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(9952,6124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C7,    ABISELECT(8624,5308), //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
    8, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19566C3,    ABISELECT(8624,5308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(13016,8012), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C4,    ABISELECT(13008,8008), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(14232,8760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19566C4,    ABISELECT(14224,8756), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(15440,9504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(15552,9572), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C7,    ABISELECT(14224,8756), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(16512,10168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C2,    ABISELECT(8624,5308), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C5,    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_S19566C11,    ABISELECT(16904,10408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S19566C10[];
extern void _ZN9S19566C10D1Ev();
extern void _ZN9S19566C10D0Ev();
extern void _ZN9S19566C102v2Ev();
extern void ABISELECT(_ZTv0_n40_N9S19566C10D1Ev,_ZTv0_n20_N9S19566C10D1Ev)();
extern void ABISELECT(_ZThn376_N9S19566C10D1Ev,_ZThn228_N9S19566C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19566C10D0Ev,_ZTv0_n20_N9S19566C10D0Ev)();
extern void ABISELECT(_ZThn376_N9S19566C10D0Ev,_ZThn228_N9S19566C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19566C10D1Ev,_ZTv0_n16_N9S19566C10D1Ev)();
extern void ABISELECT(_ZThn6336_N9S19566C10D1Ev,_ZThn3896_N9S19566C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19566C10D0Ev,_ZTv0_n16_N9S19566C10D0Ev)();
extern void ABISELECT(_ZThn6336_N9S19566C10D0Ev,_ZThn3896_N9S19566C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19566C10D1Ev,_ZTv0_n20_N9S19566C10D1Ev)();
extern void ABISELECT(_ZThn8624_N9S19566C10D1Ev,_ZThn5308_N9S19566C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19566C10D0Ev,_ZTv0_n20_N9S19566C10D0Ev)();
extern void ABISELECT(_ZThn8624_N9S19566C10D0Ev,_ZThn5308_N9S19566C10D0Ev)() __attribute__((weak));
extern void _ZN8S19566C22v1Ev();
extern void ABISELECT(_ZTvn5600_n40_N9S19566C10D1Ev,_ZTvn3448_n20_N9S19566C10D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N9S19566C10D0Ev,_ZTvn3448_n20_N9S19566C10D0Ev)();
static  VTBL_ENTRY vtc_S19566C10[] = {
  ABISELECT(16904,10408),
  ABISELECT(8624,5308),
  ABISELECT(6336,3896),
  ABISELECT(5976,3676),
  ABISELECT(4760,2928),
  ABISELECT(376,228),
  0,
  (VTBL_ENTRY)&(_ZTI9S19566C10[0]),
  (VTBL_ENTRY)&_ZN9S19566C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19566C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19566C102v2Ev,
  ABISELECT(-376,-228),
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  ABISELECT(-376,-228),
  (VTBL_ENTRY)&(_ZTI9S19566C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19566C10D1Ev,_ZTv0_n20_N9S19566C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19566C10D0Ev,_ZTv0_n20_N9S19566C10D0Ev),
  ABISELECT(1216,748),
  ABISELECT(-4760,-2928),
  (VTBL_ENTRY)&(_ZTI9S19566C10[0]),
  ABISELECT(-6336,-3896),
  ABISELECT(-360,-220),
  ABISELECT(-6336,-3896),
  (VTBL_ENTRY)&(_ZTI9S19566C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19566C10D1Ev,_ZTv0_n16_N9S19566C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19566C10D0Ev,_ZTv0_n16_N9S19566C10D0Ev),
  0,
  ABISELECT(-8624,-5308),
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  ABISELECT(-8624,-5308),
  (VTBL_ENTRY)&(_ZTI9S19566C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19566C10D1Ev,_ZTv0_n20_N9S19566C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19566C10D0Ev,_ZTv0_n20_N9S19566C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19566C22v1Ev,
  ABISELECT(-7032,-4332),
  ABISELECT(-13008,-8008),
  (VTBL_ENTRY)&(_ZTI9S19566C10[0]),
  ABISELECT(-8248,-5080),
  ABISELECT(-14224,-8756),
  (VTBL_ENTRY)&(_ZTI9S19566C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N9S19566C10D1Ev,_ZTvn3448_n20_N9S19566C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N9S19566C10D0Ev,_ZTvn3448_n20_N9S19566C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S19566C10[];
extern void _ZN8S19566C3D1Ev();
extern void _ZN8S19566C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C3__9S19566C10[] = {
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C3[0]),
  (VTBL_ENTRY)&_ZN8S19566C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C3D0Ev,
};
extern void _ZN8S19566C7D1Ev();
extern void _ZN8S19566C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C78S19566C3__9S19566C10[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C7[0]),
  (VTBL_ENTRY)&_ZN8S19566C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19566C48S19566C78S19566C3__A1__9S19566C10[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__8S19566C3__9S19566C10[] = {
  ABISELECT(1216,748),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI8S19566C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__9S19566C10[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
extern void _ZN8S19566C7D1Ev();
extern void _ZN8S19566C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C7__A1__9S19566C10[] = {
  ABISELECT(-360,-220),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C7[0]),
  (VTBL_ENTRY)&_ZN8S19566C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19566C48S19566C7__A2__9S19566C10[] = {
  ABISELECT(-360,-220),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
extern void _ZN8S19566C2D1Ev();
extern void _ZN8S19566C2D0Ev();
extern void _ZN8S19566C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C2__9S19566C10[] = {
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C2[0]),
  (VTBL_ENTRY)&_ZN8S19566C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19566C22v1Ev,
};
extern void _ZN8S19566C3D1Ev();
extern void _ZN8S19566C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C38S19566C2__A1__9S19566C10[] = {
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C3[0]),
  (VTBL_ENTRY)&_ZN8S19566C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C3D0Ev,
};
extern void _ZN8S19566C7D1Ev();
extern void _ZN8S19566C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C78S19566C38S19566C2__A2__9S19566C10[] = {
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C7[0]),
  (VTBL_ENTRY)&_ZN8S19566C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19566C48S19566C78S19566C38S19566C2__A3__9S19566C10[] = {
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__8S19566C38S19566C2__A1__9S19566C10[] = {
  ABISELECT(1216,748),
  ABISELECT(3864,2380),
  (VTBL_ENTRY)&(_ZTI8S19566C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C48S19566C2__A4__9S19566C10[] = {
  ABISELECT(-7032,-4332),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
extern void _ZN8S19566C7D1Ev();
extern void _ZN8S19566C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C78S19566C2__A3__9S19566C10[] = {
  ABISELECT(-8248,-5080),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C7[0]),
  (VTBL_ENTRY)&_ZN8S19566C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19566C48S19566C78S19566C2__A5__9S19566C10[] = {
  ABISELECT(-8248,-5080),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__8S19566C2__9S19566C10[] = {
  ABISELECT(1216,748),
  ABISELECT(3864,2380),
  (VTBL_ENTRY)&(_ZTI8S19566C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__A__8S19566C2__9S19566C10[] = {
  ABISELECT(-7032,-4332),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI8S19566C2[0]),
};
extern void ABISELECT(_ZThn5600_N8S19566C2D1Ev,_ZThn3448_N8S19566C2D1Ev)();
extern void ABISELECT(_ZThn5600_N8S19566C2D0Ev,_ZThn3448_N8S19566C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19566C7__A1__8S19566C2__9S19566C10[] = {
  ABISELECT(-8248,-5080),
  ABISELECT(-5600,-3448),
  (VTBL_ENTRY)&(_ZTI8S19566C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S19566C2D1Ev,_ZThn3448_N8S19566C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S19566C2D0Ev,_ZThn3448_N8S19566C2D0Ev),
};
static  VTT_ENTRY vtt_S19566C10[] = {
  {&(_ZTV9S19566C10[8]),  8,44},
  {&(_ZTV9S19566C10[16]),  16,44},
  {&(_ZTV9S19566C10[21]),  21,44},
  {&(_ZTV9S19566C10[25]),  25,44},
  {&(_ZTV9S19566C10[33]),  33,44},
  {&(_ZTV9S19566C10[39]),  39,44},
  {&(_ZTV9S19566C10[42]),  42,44},
  {&(_tg__ZTV8S19566C3__9S19566C10[4]),  4,6},
  {&(_tg__ZTV8S19566C78S19566C3__9S19566C10[3]),  3,5},
  {&(_tg__ZTV8S19566C48S19566C78S19566C3__A1__9S19566C10[3]),  3,3},
  {&(_tg__ZTV8S19566C4__8S19566C3__9S19566C10[3]),  3,3},
  {&(_tg__ZTV8S19566C4__9S19566C10[3]),  3,3},
  {&(_tg__ZTV8S19566C7__A1__9S19566C10[3]),  3,5},
  {&(_tg__ZTV8S19566C48S19566C7__A2__9S19566C10[3]),  3,3},
  {&(_tg__ZTV8S19566C2__9S19566C10[4]),  4,7},
  {&(_tg__ZTV8S19566C38S19566C2__A1__9S19566C10[4]),  4,6},
  {&(_tg__ZTV8S19566C78S19566C38S19566C2__A2__9S19566C10[3]),  3,5},
  {&(_tg__ZTV8S19566C48S19566C78S19566C38S19566C2__A3__9S19566C10[3]),  3,3},
  {&(_tg__ZTV8S19566C4__8S19566C38S19566C2__A1__9S19566C10[3]),  3,3},
  {&(_tg__ZTV8S19566C48S19566C2__A4__9S19566C10[3]),  3,3},
  {&(_tg__ZTV8S19566C78S19566C2__A3__9S19566C10[3]),  3,5},
  {&(_tg__ZTV8S19566C48S19566C78S19566C2__A5__9S19566C10[3]),  3,3},
  {&(_tg__ZTV8S19566C4__8S19566C2__9S19566C10[3]),  3,3},
  {&(_tg__ZTV8S19566C4__A__8S19566C2__9S19566C10[3]),  3,3},
  {&(_tg__ZTV8S19566C7__A1__8S19566C2__9S19566C10[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19566C10[];
extern  VTBL_ENTRY _ZTV9S19566C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19566C10[];
static VTBL_ENTRY alt_thunk_names77[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19566C10D0Ev,_ZTv0_n16_N9S19566C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6336_N9S19566C10D0Ev,_ZThn3896_N9S19566C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19566C10D1Ev,_ZTv0_n16_N9S19566C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6336_N9S19566C10D1Ev,_ZThn3896_N9S19566C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19566C10D0Ev,_ZTv0_n20_N9S19566C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8624_N9S19566C10D0Ev,_ZThn5308_N9S19566C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn376_N9S19566C10D0Ev,_ZThn228_N9S19566C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19566C10D1Ev,_ZTv0_n20_N9S19566C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8624_N9S19566C10D1Ev,_ZThn5308_N9S19566C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn376_N9S19566C10D1Ev,_ZThn228_N9S19566C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19566C10 = {  "S19566C10", // class name
  bases_S19566C10, 35,
  &(vtc_S19566C10[0]), // expected_vtbl_contents
  &(vtt_S19566C10[0]), // expected_vtt_contents
  ABISELECT(16936,10428), // object size
  NSPAIRA(_ZTI9S19566C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19566C10),44, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19566C10),25, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names77,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19566C9  : virtual S19566C10 {
  short s19566c9f0;
  virtual void  v3(); // _ZN8S19566C92v3Ev
  ~S19566C9(); // tgen
  S19566C9(); // tgen
};
//SIG(-1 S19566C9) C1{ VBC2{ VBC3{ VBC4{ VBC5{ m FL Fp FC6{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC6 FC5[3] Fi[4]} BC6 BC5 BC7{ BC4 BC6 BC5 vd FL[6] Fi FC5 Fp FC6 Fi Fp[7]} Fi FC4 Fs Fp Fi[5]} VBC7 VBC8{ BC3 BC4 BC7 BC5 vd v2 FC9{} Fi[2] Fl Fp} BC5 VBC10{ m Fp Fc Fi:6 Fl FC9 Fi} vd v3 Fi} v1 Fs}


void  S19566C9 ::v3(){vfunc_called(this, "_ZN8S19566C92v3Ev");}
S19566C9 ::~S19566C9(){ note_dtor("S19566C9", this);} // tgen
S19566C9 ::S19566C9(){ note_ctor("S19566C9", this);} // tgen

static void Test_S19566C9()
{
  extern Class_Descriptor cd_S19566C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2120,2610)];
    init_test(&cd_S19566C9, buf);
    S19566C9 *dp, &lv = *(dp=new (buf) S19566C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16952,10436), "sizeof(S19566C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19566C9)");
    /*is_ambiguous_... S19566C9::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C4*), ABISELECT(5992,3684), "S19566C9");
    /*is_ambiguous_... S19566C9::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C4*)(S19566C7*)(S19566C3*), ABISELECT(5992,3684), "S19566C9");
    /*is_ambiguous_... S19566C9::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C4*)(S19566C7*), ABISELECT(5992,3684), "S19566C9");
    check_base_class_offset(lv, (S19566C5*)(S19566C4*)(S19566C7*)(S19566C3*)(S19566C2*), ABISELECT(5992,3684), "S19566C9");
    /*is_ambiguous_... S19566C2::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C4*)(S19566C2*), ABISELECT(5992,3684), "S19566C9");
    /*is_ambiguous_... S19566C2::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C4*)(S19566C7*)(S19566C2*), ABISELECT(5992,3684), "S19566C9");
    /*is_ambiguous_... S19566C9::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C4*), ABISELECT(4784,2940), "S19566C9");
    /*is_ambiguous_... S19566C9::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C4*)(S19566C3*), ABISELECT(4776,2936), "S19566C9");
    /*is_ambiguous_... S19566C3::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C4*)(S19566C3*)(S19566C2*), ABISELECT(4776,2936), "S19566C9");
    /*is_ambiguous_... S19566C9::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C3*), ABISELECT(2680,1648), "S19566C9");
    /*is_ambiguous_... S19566C9::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C3*), ABISELECT(2792,1716), "S19566C9");
    /*is_ambiguous_... S19566C9::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C4*)(S19566C7*)(S19566C3*), ABISELECT(400,240), "S19566C9");
    /*is_ambiguous_... S19566C9::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C4*)(S19566C7*)(S19566C3*), ABISELECT(392,236), "S19566C9");
    /*is_ambiguous_... S19566C9::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C7*)(S19566C3*), ABISELECT(1608,984), "S19566C9");
    /*is_ambiguous_... S19566C9::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C7*)(S19566C3*), ABISELECT(1720,1052), "S19566C9");
    /*is_ambiguous_... S19566C9::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C7*)(S19566C3*), ABISELECT(392,236), "S19566C9");
    /*is_ambiguous_... S19566C10::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C3*)(S19566C10*), ABISELECT(392,236), "S19566C9");
    /*is_ambiguous_... S19566C9::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C4*)(S19566C7*), ABISELECT(6360,3908), "S19566C9");
    /*is_ambiguous_... S19566C9::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C4*)(S19566C7*), ABISELECT(6352,3904), "S19566C9");
    /*is_ambiguous_... S19566C9::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C7*), ABISELECT(7568,4652), "S19566C9");
    /*is_ambiguous_... S19566C9::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C7*), ABISELECT(7680,4720), "S19566C9");
    /*is_ambiguous_... S19566C10::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C7*)(S19566C10*), ABISELECT(6352,3904), "S19566C9");
    /*is_ambiguous_... S19566C3::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C3*)(S19566C2*), ABISELECT(10928,6728), "S19566C9");
    /*is_ambiguous_... S19566C3::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C3*)(S19566C2*), ABISELECT(11040,6796), "S19566C9");
    check_base_class_offset(lv, (S19566C6*)(S19566C4*)(S19566C7*)(S19566C3*)(S19566C2*), ABISELECT(8648,5320), "S19566C9");
    check_base_class_offset(lv, (S19566C4*)(S19566C7*)(S19566C3*)(S19566C2*), ABISELECT(8640,5316), "S19566C9");
    /*is_ambiguous_... S19566C7::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C7*)(S19566C3*)(S19566C2*), ABISELECT(9856,6064), "S19566C9");
    /*is_ambiguous_... S19566C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C7*)(S19566C3*)(S19566C2*), ABISELECT(9968,6132), "S19566C9");
    check_base_class_offset(lv, (S19566C7*)(S19566C3*)(S19566C2*), ABISELECT(8640,5316), "S19566C9");
    check_base_class_offset(lv, (S19566C3*)(S19566C2*), ABISELECT(8640,5316), "S19566C9");
    /*is_ambiguous_... S19566C2::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C4*)(S19566C2*), ABISELECT(13032,8020), "S19566C9");
    /*is_ambiguous_... S19566C2::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C4*)(S19566C2*), ABISELECT(13024,8016), "S19566C9");
    /*is_ambiguous_... S19566C2::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C4*)(S19566C7*)(S19566C2*), ABISELECT(14248,8768), "S19566C9");
    /*is_ambiguous_... S19566C2::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C4*)(S19566C7*)(S19566C2*), ABISELECT(14240,8764), "S19566C9");
    /*is_ambiguous_... S19566C2::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C7*)(S19566C2*), ABISELECT(15456,9512), "S19566C9");
    /*is_ambiguous_... S19566C2::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C7*)(S19566C2*), ABISELECT(15568,9580), "S19566C9");
    /*is_ambiguous_... S19566C2::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C7*)(S19566C2*), ABISELECT(14240,8764), "S19566C9");
    /*is_ambiguous_... S19566C2::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C2*), ABISELECT(16528,10176), "S19566C9");
    check_base_class_offset(lv, (S19566C2*)(S19566C10*), ABISELECT(8640,5316), "S19566C9");
    /*is_ambiguous_... S19566C10::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C10*), ABISELECT(24,12), "S19566C9");
    check_base_class_offset(lv, (S19566C11*)(S19566C10*), ABISELECT(16920,10416), "S19566C9");
    check_base_class_offset(lv, (S19566C10*), ABISELECT(16,8), "S19566C9");
    check_field_offset(lv, s19566c9f0, ABISELECT(8,4), "S19566C9.s19566c9f0");
    test_class_info(&lv, &cd_S19566C9);
    dp->~S19566C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19566C9(Test_S19566C9, "S19566C9", ABISELECT(16952,10436));

#else // __cplusplus

extern void _ZN8S19566C9C1Ev();
extern void _ZN8S19566C9D1Ev();
Name_Map name_map_S19566C9[] = {
  NSPAIR(_ZN8S19566C9C1Ev),
  NSPAIR(_ZN8S19566C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C7;
extern VTBL_ENTRY _ZTI8S19566C7[];
extern  VTBL_ENTRY _ZTV8S19566C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C7[];
extern Class_Descriptor cd_S19566C3;
extern VTBL_ENTRY _ZTI8S19566C3[];
extern  VTBL_ENTRY _ZTV8S19566C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C7;
extern VTBL_ENTRY _ZTI8S19566C7[];
extern  VTBL_ENTRY _ZTV8S19566C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C7;
extern VTBL_ENTRY _ZTI8S19566C7[];
extern  VTBL_ENTRY _ZTV8S19566C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C7[];
extern Class_Descriptor cd_S19566C3;
extern VTBL_ENTRY _ZTI8S19566C3[];
extern  VTBL_ENTRY _ZTV8S19566C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C7;
extern VTBL_ENTRY _ZTI8S19566C7[];
extern  VTBL_ENTRY _ZTV8S19566C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C7[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C2;
extern VTBL_ENTRY _ZTI8S19566C2[];
extern  VTBL_ENTRY _ZTV8S19566C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C2[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C11;
extern VTBL_ENTRY _ZTI9S19566C11[];
extern Class_Descriptor cd_S19566C10;
extern VTBL_ENTRY _ZTI9S19566C10[];
extern  VTBL_ENTRY _ZTV9S19566C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19566C10[];
static Base_Class bases_S19566C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(5992,3684), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(4784,2940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C4,    ABISELECT(4776,2936), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(2680,1648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(2792,1716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(400,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C4,    ABISELECT(392,236), //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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1608,984), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1720,1052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C7,    ABISELECT(392,236), //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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19566C3,    ABISELECT(392,236), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(6360,3908), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C4,    ABISELECT(6352,3904), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(7568,4652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 0},
  {&cd_S19566C5,    ABISELECT(7680,4720), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 0},
  {&cd_S19566C7,    ABISELECT(6352,3904), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(10928,6728), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(11040,6796), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(8648,5320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C4,    ABISELECT(8640,5316), //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
    7, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(9856,6064), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(9968,6132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C7,    ABISELECT(8640,5316), //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
    8, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19566C3,    ABISELECT(8640,5316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(13032,8020), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C4,    ABISELECT(13024,8016), //bcp->offset
    50, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(14248,8768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19566C4,    ABISELECT(14240,8764), //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
    11, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(15456,9512), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(15568,9580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C7,    ABISELECT(14240,8764), //bcp->offset
    53, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(16528,10176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C2,    ABISELECT(8640,5316), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S19566C5,    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
    35, //immediately_derived
  0, 0},
  {&cd_S19566C11,    ABISELECT(16920,10416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S19566C10,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19566C9[];
extern void _ZN8S19566C92v3Ev();
extern void _ZN8S19566C9D1Ev();
extern void _ZN8S19566C9D0Ev();
extern void ABISELECT(_ZTv0_n72_N8S19566C9D1Ev,_ZTv0_n36_N8S19566C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19566C9D1Ev,_ZThn8_N8S19566C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19566C9D0Ev,_ZTv0_n36_N8S19566C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19566C9D0Ev,_ZThn8_N8S19566C9D0Ev)() __attribute__((weak));
extern void _ZN9S19566C102v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S19566C9D1Ev,_ZTv0_n20_N8S19566C9D1Ev)();
extern void ABISELECT(_ZThn392_N8S19566C9D1Ev,_ZThn236_N8S19566C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19566C9D0Ev,_ZTv0_n20_N8S19566C9D0Ev)();
extern void ABISELECT(_ZThn392_N8S19566C9D0Ev,_ZThn236_N8S19566C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19566C9D1Ev,_ZTv0_n16_N8S19566C9D1Ev)();
extern void ABISELECT(_ZThn6352_N8S19566C9D1Ev,_ZThn3904_N8S19566C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19566C9D0Ev,_ZTv0_n16_N8S19566C9D0Ev)();
extern void ABISELECT(_ZThn6352_N8S19566C9D0Ev,_ZThn3904_N8S19566C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19566C9D1Ev,_ZTv0_n20_N8S19566C9D1Ev)();
extern void ABISELECT(_ZThn8640_N8S19566C9D1Ev,_ZThn5316_N8S19566C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19566C9D0Ev,_ZTv0_n20_N8S19566C9D0Ev)();
extern void ABISELECT(_ZThn8640_N8S19566C9D0Ev,_ZThn5316_N8S19566C9D0Ev)() __attribute__((weak));
extern void _ZN8S19566C22v1Ev();
extern void ABISELECT(_ZTvn5600_n40_N8S19566C9D1Ev,_ZTvn3448_n20_N8S19566C9D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N8S19566C9D0Ev,_ZTvn3448_n20_N8S19566C9D0Ev)();
static  VTBL_ENTRY vtc_S19566C9[] = {
  ABISELECT(16920,10416),
  ABISELECT(8640,5316),
  ABISELECT(6352,3904),
  ABISELECT(5992,3684),
  ABISELECT(4776,2936),
  ABISELECT(392,236),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C9[0]),
  (VTBL_ENTRY)&_ZN8S19566C92v3Ev,
  (VTBL_ENTRY)&_ZN8S19566C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C9D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(16904,10408),
  ABISELECT(8624,5308),
  ABISELECT(6336,3896),
  ABISELECT(5976,3676),
  ABISELECT(4760,2928),
  ABISELECT(376,228),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19566C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19566C9D1Ev,_ZTv0_n36_N8S19566C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19566C9D0Ev,_ZTv0_n36_N8S19566C9D0Ev),
  (VTBL_ENTRY)&_ZN9S19566C102v2Ev,
  ABISELECT(-392,-236),
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  ABISELECT(-392,-236),
  (VTBL_ENTRY)&(_ZTI8S19566C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19566C9D1Ev,_ZTv0_n20_N8S19566C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19566C9D0Ev,_ZTv0_n20_N8S19566C9D0Ev),
  ABISELECT(1216,748),
  ABISELECT(-4776,-2936),
  (VTBL_ENTRY)&(_ZTI8S19566C9[0]),
  ABISELECT(-6352,-3904),
  ABISELECT(-360,-220),
  ABISELECT(-6352,-3904),
  (VTBL_ENTRY)&(_ZTI8S19566C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19566C9D1Ev,_ZTv0_n16_N8S19566C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19566C9D0Ev,_ZTv0_n16_N8S19566C9D0Ev),
  0,
  ABISELECT(-8640,-5316),
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  ABISELECT(-8640,-5316),
  (VTBL_ENTRY)&(_ZTI8S19566C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19566C9D1Ev,_ZTv0_n20_N8S19566C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19566C9D0Ev,_ZTv0_n20_N8S19566C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19566C22v1Ev,
  ABISELECT(-7032,-4332),
  ABISELECT(-13024,-8016),
  (VTBL_ENTRY)&(_ZTI8S19566C9[0]),
  ABISELECT(-8248,-5080),
  ABISELECT(-14240,-8764),
  (VTBL_ENTRY)&(_ZTI8S19566C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N8S19566C9D1Ev,_ZTvn3448_n20_N8S19566C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N8S19566C9D0Ev,_ZTvn3448_n20_N8S19566C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S19566C9[];
extern void _ZN9S19566C10D1Ev();
extern void _ZN9S19566C10D0Ev();
extern void _ZN9S19566C102v2Ev();
static  VTBL_ENTRY _tg__ZTV9S19566C10__8S19566C9[] = {
  ABISELECT(16904,10408),
  ABISELECT(8624,5308),
  ABISELECT(6336,3896),
  ABISELECT(5976,3676),
  ABISELECT(4760,2928),
  ABISELECT(376,228),
  0,
  (VTBL_ENTRY)&(_ZTI9S19566C10[0]),
  (VTBL_ENTRY)&_ZN9S19566C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19566C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19566C102v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19566C10D1Ev,_ZTv0_n20_N9S19566C10D1Ev)();
extern void ABISELECT(_ZThn376_N9S19566C10D1Ev,_ZThn228_N9S19566C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19566C10D0Ev,_ZTv0_n20_N9S19566C10D0Ev)();
extern void ABISELECT(_ZThn376_N9S19566C10D0Ev,_ZThn228_N9S19566C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19566C3__9S19566C10__8S19566C9[] = {
  ABISELECT(-376,-228),
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  ABISELECT(-376,-228),
  (VTBL_ENTRY)&(_ZTI9S19566C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19566C10D1Ev,_ZTv0_n20_N9S19566C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19566C10D0Ev,_ZTv0_n20_N9S19566C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__9S19566C10__8S19566C9[] = {
  ABISELECT(1216,748),
  ABISELECT(-4760,-2928),
  (VTBL_ENTRY)&(_ZTI9S19566C10[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19566C10D1Ev,_ZTv0_n16_N9S19566C10D1Ev)();
extern void ABISELECT(_ZThn6336_N9S19566C10D1Ev,_ZThn3896_N9S19566C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19566C10D0Ev,_ZTv0_n16_N9S19566C10D0Ev)();
extern void ABISELECT(_ZThn6336_N9S19566C10D0Ev,_ZThn3896_N9S19566C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19566C7__A1__9S19566C10__8S19566C9[] = {
  ABISELECT(-6336,-3896),
  ABISELECT(-360,-220),
  ABISELECT(-6336,-3896),
  (VTBL_ENTRY)&(_ZTI9S19566C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19566C10D1Ev,_ZTv0_n16_N9S19566C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19566C10D0Ev,_ZTv0_n16_N9S19566C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19566C10D1Ev,_ZTv0_n20_N9S19566C10D1Ev)();
extern void ABISELECT(_ZThn8624_N9S19566C10D1Ev,_ZThn5308_N9S19566C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19566C10D0Ev,_ZTv0_n20_N9S19566C10D0Ev)();
extern void ABISELECT(_ZThn8624_N9S19566C10D0Ev,_ZThn5308_N9S19566C10D0Ev)() __attribute__((weak));
extern void _ZN8S19566C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C2__9S19566C10__8S19566C9[] = {
  0,
  ABISELECT(-8624,-5308),
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  ABISELECT(-8624,-5308),
  (VTBL_ENTRY)&(_ZTI9S19566C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19566C10D1Ev,_ZTv0_n20_N9S19566C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19566C10D0Ev,_ZTv0_n20_N9S19566C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19566C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19566C48S19566C2__A4__9S19566C10__8S19566C9[] = {
  ABISELECT(-7032,-4332),
  ABISELECT(-13008,-8008),
  (VTBL_ENTRY)&(_ZTI9S19566C10[0]),
};
extern void ABISELECT(_ZTvn5600_n40_N9S19566C10D1Ev,_ZTvn3448_n20_N9S19566C10D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N9S19566C10D0Ev,_ZTvn3448_n20_N9S19566C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19566C78S19566C2__A3__9S19566C10__8S19566C9[] = {
  ABISELECT(-8248,-5080),
  ABISELECT(-14224,-8756),
  (VTBL_ENTRY)&(_ZTI9S19566C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N9S19566C10D1Ev,_ZTvn3448_n20_N9S19566C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N9S19566C10D0Ev,_ZTvn3448_n20_N9S19566C10D0Ev),
};
extern void _ZN8S19566C3D1Ev();
extern void _ZN8S19566C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C3__8S19566C9[] = {
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C3[0]),
  (VTBL_ENTRY)&_ZN8S19566C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C3D0Ev,
};
extern void _ZN8S19566C7D1Ev();
extern void _ZN8S19566C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C78S19566C3__8S19566C9[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C7[0]),
  (VTBL_ENTRY)&_ZN8S19566C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19566C48S19566C78S19566C3__A1__8S19566C9[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__8S19566C3__8S19566C9[] = {
  ABISELECT(1216,748),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI8S19566C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__8S19566C9[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
extern void _ZN8S19566C7D1Ev();
extern void _ZN8S19566C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C7__A1__8S19566C9[] = {
  ABISELECT(-360,-220),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C7[0]),
  (VTBL_ENTRY)&_ZN8S19566C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19566C48S19566C7__A2__8S19566C9[] = {
  ABISELECT(-360,-220),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
extern void _ZN8S19566C2D1Ev();
extern void _ZN8S19566C2D0Ev();
extern void _ZN8S19566C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C2__8S19566C9[] = {
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C2[0]),
  (VTBL_ENTRY)&_ZN8S19566C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19566C22v1Ev,
};
extern void _ZN8S19566C3D1Ev();
extern void _ZN8S19566C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C38S19566C2__A1__8S19566C9[] = {
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C3[0]),
  (VTBL_ENTRY)&_ZN8S19566C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C3D0Ev,
};
extern void _ZN8S19566C7D1Ev();
extern void _ZN8S19566C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C78S19566C38S19566C2__A2__8S19566C9[] = {
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C7[0]),
  (VTBL_ENTRY)&_ZN8S19566C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19566C48S19566C78S19566C38S19566C2__A3__8S19566C9[] = {
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__8S19566C38S19566C2__A1__8S19566C9[] = {
  ABISELECT(1216,748),
  ABISELECT(3864,2380),
  (VTBL_ENTRY)&(_ZTI8S19566C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C48S19566C2__A4__8S19566C9[] = {
  ABISELECT(-7032,-4332),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
extern void _ZN8S19566C7D1Ev();
extern void _ZN8S19566C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C78S19566C2__A3__8S19566C9[] = {
  ABISELECT(-8248,-5080),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C7[0]),
  (VTBL_ENTRY)&_ZN8S19566C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19566C48S19566C78S19566C2__A5__8S19566C9[] = {
  ABISELECT(-8248,-5080),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__8S19566C2__8S19566C9[] = {
  ABISELECT(1216,748),
  ABISELECT(3864,2380),
  (VTBL_ENTRY)&(_ZTI8S19566C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__A__8S19566C2__8S19566C9[] = {
  ABISELECT(-7032,-4332),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI8S19566C2[0]),
};
extern void ABISELECT(_ZThn5600_N8S19566C2D1Ev,_ZThn3448_N8S19566C2D1Ev)();
extern void ABISELECT(_ZThn5600_N8S19566C2D0Ev,_ZThn3448_N8S19566C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19566C7__A1__8S19566C2__8S19566C9[] = {
  ABISELECT(-8248,-5080),
  ABISELECT(-5600,-3448),
  (VTBL_ENTRY)&(_ZTI8S19566C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S19566C2D1Ev,_ZThn3448_N8S19566C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S19566C2D0Ev,_ZThn3448_N8S19566C2D0Ev),
};
static  VTT_ENTRY vtt_S19566C9[] = {
  {&(_ZTV8S19566C9[9]),  9,58},
  {&(_ZTV8S19566C9[22]),  22,58},
  {&(_ZTV8S19566C9[30]),  30,58},
  {&(_ZTV8S19566C9[35]),  35,58},
  {&(_ZTV8S19566C9[39]),  39,58},
  {&(_ZTV8S19566C9[47]),  47,58},
  {&(_ZTV8S19566C9[53]),  53,58},
  {&(_ZTV8S19566C9[56]),  56,58},
  {&(_tg__ZTV9S19566C10__8S19566C9[8]),  8,11},
  {&(_tg__ZTV8S19566C3__9S19566C10__8S19566C9[5]),  5,7},
  {&(_tg__ZTV8S19566C4__9S19566C10__8S19566C9[3]),  3,3},
  {&(_tg__ZTV8S19566C7__A1__9S19566C10__8S19566C9[4]),  4,6},
  {&(_tg__ZTV8S19566C2__9S19566C10__8S19566C9[6]),  6,9},
  {&(_tg__ZTV8S19566C48S19566C2__A4__9S19566C10__8S19566C9[3]),  3,3},
  {&(_tg__ZTV8S19566C78S19566C2__A3__9S19566C10__8S19566C9[3]),  3,5},
  {&(_tg__ZTV8S19566C3__8S19566C9[4]),  4,6},
  {&(_tg__ZTV8S19566C78S19566C3__8S19566C9[3]),  3,5},
  {&(_tg__ZTV8S19566C48S19566C78S19566C3__A1__8S19566C9[3]),  3,3},
  {&(_tg__ZTV8S19566C4__8S19566C3__8S19566C9[3]),  3,3},
  {&(_tg__ZTV8S19566C4__8S19566C9[3]),  3,3},
  {&(_tg__ZTV8S19566C7__A1__8S19566C9[3]),  3,5},
  {&(_tg__ZTV8S19566C48S19566C7__A2__8S19566C9[3]),  3,3},
  {&(_tg__ZTV8S19566C2__8S19566C9[4]),  4,7},
  {&(_tg__ZTV8S19566C38S19566C2__A1__8S19566C9[4]),  4,6},
  {&(_tg__ZTV8S19566C78S19566C38S19566C2__A2__8S19566C9[3]),  3,5},
  {&(_tg__ZTV8S19566C48S19566C78S19566C38S19566C2__A3__8S19566C9[3]),  3,3},
  {&(_tg__ZTV8S19566C4__8S19566C38S19566C2__A1__8S19566C9[3]),  3,3},
  {&(_tg__ZTV8S19566C48S19566C2__A4__8S19566C9[3]),  3,3},
  {&(_tg__ZTV8S19566C78S19566C2__A3__8S19566C9[3]),  3,5},
  {&(_tg__ZTV8S19566C48S19566C78S19566C2__A5__8S19566C9[3]),  3,3},
  {&(_tg__ZTV8S19566C4__8S19566C2__8S19566C9[3]),  3,3},
  {&(_tg__ZTV8S19566C4__A__8S19566C2__8S19566C9[3]),  3,3},
  {&(_tg__ZTV8S19566C7__A1__8S19566C2__8S19566C9[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19566C9[];
extern  VTBL_ENTRY _ZTV8S19566C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C9[];
static VTBL_ENTRY alt_thunk_names78[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19566C10D0Ev,_ZTv0_n16_N9S19566C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6336_N9S19566C10D0Ev,_ZThn3896_N9S19566C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19566C10D1Ev,_ZTv0_n16_N9S19566C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6336_N9S19566C10D1Ev,_ZThn3896_N9S19566C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19566C10D0Ev,_ZTv0_n20_N9S19566C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8624_N9S19566C10D0Ev,_ZThn5308_N9S19566C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn376_N9S19566C10D0Ev,_ZThn228_N9S19566C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19566C10D1Ev,_ZTv0_n20_N9S19566C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8624_N9S19566C10D1Ev,_ZThn5308_N9S19566C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn376_N9S19566C10D1Ev,_ZThn228_N9S19566C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19566C9D0Ev,_ZTv0_n16_N8S19566C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N8S19566C9D0Ev,_ZThn3904_N8S19566C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19566C9D1Ev,_ZTv0_n16_N8S19566C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N8S19566C9D1Ev,_ZThn3904_N8S19566C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19566C9D0Ev,_ZTv0_n20_N8S19566C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8640_N8S19566C9D0Ev,_ZThn5316_N8S19566C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn392_N8S19566C9D0Ev,_ZThn236_N8S19566C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19566C9D1Ev,_ZTv0_n20_N8S19566C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8640_N8S19566C9D1Ev,_ZThn5316_N8S19566C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn392_N8S19566C9D1Ev,_ZThn236_N8S19566C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19566C9D0Ev,_ZTv0_n36_N8S19566C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19566C9D0Ev,_ZThn8_N8S19566C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19566C9D1Ev,_ZTv0_n36_N8S19566C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19566C9D1Ev,_ZThn8_N8S19566C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19566C9 = {  "S19566C9", // class name
  bases_S19566C9, 36,
  &(vtc_S19566C9[0]), // expected_vtbl_contents
  &(vtt_S19566C9[0]), // expected_vtt_contents
  ABISELECT(16952,10436), // object size
  NSPAIRA(_ZTI8S19566C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19566C9),58, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19566C9),33, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names78,
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S19566C14  {
  int s19566c14f0;
  long double s19566c14f1;
  void  mf19566c14(); // _ZN9S19566C1410mf19566c14Ev
};
//SIG(1 S19566C14) U1{ m Fi FD}

#endif // __cplusplus
#ifdef __cplusplus

struct  S19566C13  : virtual S19566C4 , virtual S19566C6 {
  ::S19566C14 s19566c13f0;
  short s19566c13f1[8];
  virtual  ~S19566C13(); // _ZN9S19566C13D2Ev
  S19566C13(); // tgen
};
//SIG(-1 S19566C13) C1{ VBC2{ VBC3{ m FL Fp FC4{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC4 FC3[3] Fi[4]} VBC4 vd FU5{ m Fi FD} Fs[8]}


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

static void Test_S19566C13()
{
  extern Class_Descriptor cd_S19566C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(110,268)];
    init_test(&cd_S19566C13, buf);
    S19566C13 *dp, &lv = *(dp=new (buf) S19566C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1744,1068), "sizeof(S19566C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19566C13)");
    check_base_class_offset(lv, (S19566C5*)(S19566C4*), ABISELECT(1264,780), "S19566C13");
    check_base_class_offset(lv, (S19566C6*)(S19566C4*), ABISELECT(56,36), "S19566C13");
    check_base_class_offset(lv, (S19566C4*), ABISELECT(48,32), "S19566C13");
    /*is_ambiguous_... S19566C13::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*), ABISELECT(1624,1000), "S19566C13");
    check_field_offset(lv, s19566c13f0, ABISELECT(16,4), "S19566C13.s19566c13f0");
    check_field_offset(lv, s19566c13f1, ABISELECT(32,16), "S19566C13.s19566c13f1");
    test_class_info(&lv, &cd_S19566C13);
    dp->~S19566C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19566C13(Test_S19566C13, "S19566C13", ABISELECT(1744,1068));

#else // __cplusplus

extern void _ZN9S19566C13C1Ev();
extern void _ZN9S19566C13D2Ev();
Name_Map name_map_S19566C13[] = {
  NSPAIR(_ZN9S19566C13C1Ev),
  NSPAIR(_ZN9S19566C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
static Base_Class bases_S19566C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(1264,780), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    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
    2, //immediately_derived
  0, 0},
  {&cd_S19566C4,    ABISELECT(48,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //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_S19566C6,    ABISELECT(1624,1000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S19566C13[];
extern void _ZN9S19566C13D1Ev();
extern void _ZN9S19566C13D0Ev();
static  VTBL_ENTRY vtc_S19566C13[] = {
  ABISELECT(1624,1000),
  ABISELECT(1264,780),
  ABISELECT(48,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S19566C13[0]),
  (VTBL_ENTRY)&_ZN9S19566C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19566C13D0Ev,
  ABISELECT(1216,748),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI9S19566C13[0]),
};
extern VTBL_ENTRY _ZTV9S19566C13[];
static  VTBL_ENTRY _tg__ZTV8S19566C4__9S19566C13[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
static  VTT_ENTRY vtt_S19566C13[] = {
  {&(_ZTV9S19566C13[5]),  5,10},
  {&(_ZTV9S19566C13[10]),  10,10},
  {&(_tg__ZTV8S19566C4__9S19566C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19566C13[];
extern  VTBL_ENTRY _ZTV9S19566C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19566C13[];
Class_Descriptor cd_S19566C13 = {  "S19566C13", // class name
  bases_S19566C13, 4,
  &(vtc_S19566C13[0]), // expected_vtbl_contents
  &(vtt_S19566C13[0]), // expected_vtt_contents
  ABISELECT(1744,1068), // object size
  NSPAIRA(_ZTI9S19566C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19566C13),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19566C13),3, //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  S19566C15  : S19566C3 , S19566C6 {
  int s19566c15f0[7];
  long s19566c15f1[7];
  short s19566c15f2[8];
  short s19566c15f3[8];
  ::S19566C4 s19566c15f4;
  void *s19566c15f5;
  ::S19566C2 s19566c15f6;
  virtual  ~S19566C15(); // _ZN9S19566C15D2Ev
  S19566C15(); // tgen
};
//SIG(-1 S19566C15) C1{ BC2{ VBC3{ VBC4{ m FL Fp FC5{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC5 FC4[3] Fi[4]} BC5 BC4 BC6{ BC3 BC5 BC4 vd FL[6] Fi FC4 Fp FC5 Fi Fp[7]} Fi FC3 Fs Fp Fi[5]} BC5 vd Fi[7] Fl[7] Fs[16] FC3 Fp FC7{ BC2 BC3 BC6 BC4 vd v1 FC8{} Fi[2] Fl Fp}}


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

static void Test_S19566C15()
{
  extern Class_Descriptor cd_S19566C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2205,2717)];
    init_test(&cd_S19566C15, buf);
    S19566C15 *dp, &lv = *(dp=new (buf) S19566C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17632,10864), "sizeof(S19566C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19566C15)");
    /*is_ambiguous_... S19566C15::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C4*), ABISELECT(17272,10644), "S19566C15");
    check_base_class_offset(lv, (S19566C5*)(S19566C4*)(S19566C7*)(S19566C3*), ABISELECT(17272,10644), "S19566C15");
    /*is_ambiguous_... S19566C15::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C4*), ABISELECT(16064,9900), "S19566C15");
    /*is_ambiguous_... S19566C3::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C4*)(S19566C3*), ABISELECT(16056,9896), "S19566C15");
    /*is_ambiguous_... S19566C3::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C3*), ABISELECT(2288,1412), "S19566C15");
    /*is_ambiguous_... S19566C3::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C3*), ABISELECT(2400,1480), "S19566C15");
    check_base_class_offset(lv, (S19566C6*)(S19566C4*)(S19566C7*)(S19566C3*), ABISELECT(8,4), "S19566C15");
    check_base_class_offset(lv, (S19566C4*)(S19566C7*)(S19566C3*), 0, "S19566C15");
    /*is_ambiguous_... S19566C7::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C7*)(S19566C3*), ABISELECT(1216,748), "S19566C15");
    /*is_ambiguous_... S19566C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C7*)(S19566C3*), ABISELECT(1328,816), "S19566C15");
    check_base_class_offset(lv, (S19566C7*)(S19566C3*), 0, "S19566C15");
    check_base_class_offset(lv, (S19566C3*), 0, "S19566C15");
    /*is_ambiguous_... S19566C15::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*), ABISELECT(4384,2700), "S19566C15");
    check_field_offset(lv, s19566c15f0, ABISELECT(4496,2768), "S19566C15.s19566c15f0");
    check_field_offset(lv, s19566c15f1, ABISELECT(4528,2796), "S19566C15.s19566c15f1");
    check_field_offset(lv, s19566c15f2, ABISELECT(4584,2824), "S19566C15.s19566c15f2");
    check_field_offset(lv, s19566c15f3, ABISELECT(4600,2840), "S19566C15.s19566c15f3");
    check_field_offset(lv, s19566c15f4, ABISELECT(4616,2856), "S19566C15.s19566c15f4");
    check_field_offset(lv, s19566c15f5, ABISELECT(6192,3824), "S19566C15.s19566c15f5");
    check_field_offset(lv, s19566c15f6, ABISELECT(6200,3828), "S19566C15.s19566c15f6");
    test_class_info(&lv, &cd_S19566C15);
    dp->~S19566C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19566C15(Test_S19566C15, "S19566C15", ABISELECT(17632,10864));

#else // __cplusplus

extern void _ZN9S19566C15C1Ev();
extern void _ZN9S19566C15D2Ev();
Name_Map name_map_S19566C15[] = {
  NSPAIR(_ZN9S19566C15C1Ev),
  NSPAIR(_ZN9S19566C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C7;
extern VTBL_ENTRY _ZTI8S19566C7[];
extern  VTBL_ENTRY _ZTV8S19566C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C7[];
extern Class_Descriptor cd_S19566C3;
extern VTBL_ENTRY _ZTI8S19566C3[];
extern  VTBL_ENTRY _ZTV8S19566C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
static Base_Class bases_S19566C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(17272,10644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(16064,9900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C4,    ABISELECT(16056,9896), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(2400,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
    10, //immediately_derived
  0, 0},
  {&cd_S19566C6,    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
    6, //immediately_derived
  0, 0},
  {&cd_S19566C4,    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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C7,    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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19566C3,    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_S19566C6,    ABISELECT(4384,2700), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI9S19566C15[];
extern void _ZN9S19566C15D1Ev();
extern void _ZN9S19566C15D0Ev();
static  VTBL_ENTRY vtc_S19566C15[] = {
  ABISELECT(16056,9896),
  ABISELECT(17272,10644),
  0,
  (VTBL_ENTRY)&(_ZTI9S19566C15[0]),
  (VTBL_ENTRY)&_ZN9S19566C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19566C15D0Ev,
  ABISELECT(1216,748),
  ABISELECT(-16056,-9896),
  (VTBL_ENTRY)&(_ZTI9S19566C15[0]),
};
extern VTBL_ENTRY _ZTV9S19566C15[];
extern void _ZN8S19566C3D1Ev();
extern void _ZN8S19566C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C3__9S19566C15[] = {
  ABISELECT(16056,9896),
  ABISELECT(17272,10644),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C3[0]),
  (VTBL_ENTRY)&_ZN8S19566C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C3D0Ev,
};
extern void _ZN8S19566C7D1Ev();
extern void _ZN8S19566C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C78S19566C3__9S19566C15[] = {
  ABISELECT(17272,10644),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C7[0]),
  (VTBL_ENTRY)&_ZN8S19566C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19566C48S19566C78S19566C3__A1__9S19566C15[] = {
  ABISELECT(17272,10644),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__8S19566C3__9S19566C15[] = {
  ABISELECT(1216,748),
  ABISELECT(-16056,-9896),
  (VTBL_ENTRY)&(_ZTI8S19566C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__9S19566C15[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
static  VTT_ENTRY vtt_S19566C15[] = {
  {&(_ZTV9S19566C15[4]),  4,9},
  {&(_tg__ZTV8S19566C3__9S19566C15[4]),  4,6},
  {&(_tg__ZTV8S19566C78S19566C3__9S19566C15[3]),  3,5},
  {&(_tg__ZTV8S19566C48S19566C78S19566C3__A1__9S19566C15[3]),  3,3},
  {&(_tg__ZTV8S19566C4__8S19566C3__9S19566C15[3]),  3,3},
  {&(_ZTV9S19566C15[9]),  9,9},
  {&(_tg__ZTV8S19566C4__9S19566C15[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19566C15[];
extern  VTBL_ENTRY _ZTV9S19566C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19566C15[];
Class_Descriptor cd_S19566C15 = {  "S19566C15", // class name
  bases_S19566C15, 12,
  &(vtc_S19566C15[0]), // expected_vtbl_contents
  &(vtt_S19566C15[0]), // expected_vtt_contents
  ABISELECT(17632,10864), // object size
  NSPAIRA(_ZTI9S19566C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19566C15),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19566C15),7, //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  S19566C12  : S19566C11 , virtual S19566C4 , virtual S19566C13 , virtual S19566C7 , S19566C15 {
  int s19566c12f0;
  virtual  ~S19566C12(); // _ZN9S19566C12D2Ev
  S19566C12(); // tgen
};
//SIG(-1 S19566C12) C1{ BC2{ m Fp Fc Fi:6 Fl FC3{} Fi} VBC4{ VBC5{ m FL Fp FC6{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC6 FC5[3] Fi[4]} VBC7{ VBC4 VBC6 vd FU8{ m Fi FD} Fs[8]} VBC9{ BC4 BC6 BC5 vd FL[6] Fi FC5 Fp FC6 Fi Fp[7]} BC10{ BC11{ VBC4 BC6 BC5 BC9 Fi FC4 Fs Fp Fi[5]} BC6 vd Fi[7] Fl[7] Fs[8] Fs[8] FC4 Fp FC12{ BC11 BC4 BC9 BC5 vd v1 FC3 Fi[2] Fl Fp}} vd Fi}


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

static void Test_S19566C12()
{
  extern Class_Descriptor cd_S19566C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1259,3101)];
    init_test(&cd_S19566C12, buf);
    S19566C12 *dp, &lv = *(dp=new (buf) S19566C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20128,12400), "sizeof(S19566C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19566C12)");
    check_base_class_offset(lv, (S19566C11*), ABISELECT(16056,9896), "S19566C12");
    /*is_ambiguous_... S19566C12::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C4*), ABISELECT(17312,10668), "S19566C12");
    /*is_ambiguous_... S19566C12::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C4*)(S19566C7*), ABISELECT(17312,10668), "S19566C12");
    check_base_class_offset(lv, (S19566C5*)(S19566C4*)(S19566C7*)(S19566C3*)(S19566C15*), ABISELECT(17312,10668), "S19566C12");
    /*is_ambiguous_... S19566C12::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C4*), ABISELECT(16104,9924), "S19566C12");
    /*is_ambiguous_... S19566C12::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C4*), ABISELECT(16096,9920), "S19566C12");
    check_base_class_offset(lv, (S19566C4*)(S19566C13*), ABISELECT(16096,9920), "S19566C12");
    /*is_ambiguous_... S19566C3::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C4*)(S19566C3*)(S19566C15*), ABISELECT(16096,9920), "S19566C12");
    /*is_ambiguous_... S19566C13::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C13*), ABISELECT(17728,10920), "S19566C12");
    check_base_class_offset(lv, (S19566C13*), ABISELECT(17680,10888), "S19566C12");
    /*is_ambiguous_... S19566C12::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C4*)(S19566C7*), ABISELECT(17848,10992), "S19566C12");
    /*is_ambiguous_... S19566C12::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C4*)(S19566C7*), ABISELECT(17840,10988), "S19566C12");
    /*is_ambiguous_... S19566C12::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C7*), ABISELECT(19056,11736), "S19566C12");
    /*is_ambiguous_... S19566C12::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C7*), ABISELECT(19168,11804), "S19566C12");
    /*is_ambiguous_... S19566C12::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C7*), ABISELECT(17840,10988), "S19566C12");
    /*is_ambiguous_... S19566C3::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C3*)(S19566C15*), ABISELECT(2288,1412), "S19566C12");
    /*is_ambiguous_... S19566C3::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C3*)(S19566C15*), ABISELECT(2400,1480), "S19566C12");
    check_base_class_offset(lv, (S19566C6*)(S19566C4*)(S19566C7*)(S19566C3*)(S19566C15*), ABISELECT(8,4), "S19566C12");
    check_base_class_offset(lv, (S19566C4*)(S19566C7*)(S19566C3*)(S19566C15*), 0, "S19566C12");
    /*is_ambiguous_... S19566C7::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C7*)(S19566C3*)(S19566C15*), ABISELECT(1216,748), "S19566C12");
    /*is_ambiguous_... S19566C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C7*)(S19566C3*)(S19566C15*), ABISELECT(1328,816), "S19566C12");
    check_base_class_offset(lv, (S19566C7*)(S19566C3*)(S19566C15*), 0, "S19566C12");
    check_base_class_offset(lv, (S19566C3*)(S19566C15*), 0, "S19566C12");
    /*is_ambiguous_... S19566C15::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C15*), ABISELECT(4384,2700), "S19566C12");
    check_base_class_offset(lv, (S19566C15*), 0, "S19566C12");
    check_field_offset(lv, s19566c12f0, ABISELECT(16088,9916), "S19566C12.s19566c12f0");
    test_class_info(&lv, &cd_S19566C12);
    dp->~S19566C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19566C12(Test_S19566C12, "S19566C12", ABISELECT(20128,12400));

#else // __cplusplus

extern void _ZN9S19566C12C1Ev();
extern void _ZN9S19566C12D2Ev();
Name_Map name_map_S19566C12[] = {
  NSPAIR(_ZN9S19566C12C1Ev),
  NSPAIR(_ZN9S19566C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C11;
extern VTBL_ENTRY _ZTI9S19566C11[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C13;
extern VTBL_ENTRY _ZTI9S19566C13[];
extern  VTBL_ENTRY _ZTV9S19566C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19566C13[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C7;
extern VTBL_ENTRY _ZTI8S19566C7[];
extern  VTBL_ENTRY _ZTV8S19566C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C7;
extern VTBL_ENTRY _ZTI8S19566C7[];
extern  VTBL_ENTRY _ZTV8S19566C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C7[];
extern Class_Descriptor cd_S19566C3;
extern VTBL_ENTRY _ZTI8S19566C3[];
extern  VTBL_ENTRY _ZTV8S19566C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C15;
extern VTBL_ENTRY _ZTI9S19566C15[];
extern  VTBL_ENTRY _ZTV9S19566C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19566C15[];
static Base_Class bases_S19566C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C11,    ABISELECT(16056,9896), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19566C5,    ABISELECT(17312,10668), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(16104,9924), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C4,    ABISELECT(16096,9920), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(17728,10920), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C13,    ABISELECT(17680,10888), //bcp->offset
    12, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(17848,10992), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C4,    ABISELECT(17840,10988), //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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(19056,11736), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(19168,11804), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C7,    ABISELECT(17840,10988), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(2400,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
    18, //immediately_derived
  0, 0},
  {&cd_S19566C6,    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
    14, //immediately_derived
  0, 0},
  {&cd_S19566C4,    0, //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
    5, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C7,    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
    18, //immediately_derived
  0, 0},
  {&cd_S19566C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(4384,2700), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C15,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19566C12[];
extern void _ZN9S19566C12D1Ev();
extern void _ZN9S19566C12D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S19566C12D1Ev,_ZTv0_n24_N9S19566C12D1Ev)();
extern void ABISELECT(_ZThn17680_N9S19566C12D1Ev,_ZThn10888_N9S19566C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19566C12D0Ev,_ZTv0_n24_N9S19566C12D0Ev)();
extern void ABISELECT(_ZThn17680_N9S19566C12D0Ev,_ZThn10888_N9S19566C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19566C12D1Ev,_ZTv0_n16_N9S19566C12D1Ev)();
extern void ABISELECT(_ZThn17840_N9S19566C12D1Ev,_ZThn10988_N9S19566C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19566C12D0Ev,_ZTv0_n16_N9S19566C12D0Ev)();
extern void ABISELECT(_ZThn17840_N9S19566C12D0Ev,_ZThn10988_N9S19566C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19566C12[] = {
  ABISELECT(17840,10988),
  ABISELECT(17728,10920),
  ABISELECT(17680,10888),
  ABISELECT(16096,9920),
  ABISELECT(17312,10668),
  0,
  (VTBL_ENTRY)&(_ZTI9S19566C12[0]),
  (VTBL_ENTRY)&_ZN9S19566C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19566C12D0Ev,
  ABISELECT(1216,748),
  ABISELECT(-16096,-9920),
  (VTBL_ENTRY)&(_ZTI9S19566C12[0]),
  ABISELECT(-17680,-10888),
  ABISELECT(48,32),
  ABISELECT(-368,-220),
  ABISELECT(-1584,-968),
  ABISELECT(-17680,-10888),
  (VTBL_ENTRY)&(_ZTI9S19566C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19566C12D1Ev,_ZTv0_n24_N9S19566C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19566C12D0Ev,_ZTv0_n24_N9S19566C12D0Ev),
  ABISELECT(-17840,-10988),
  ABISELECT(-528,-320),
  ABISELECT(-17840,-10988),
  (VTBL_ENTRY)&(_ZTI9S19566C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19566C12D1Ev,_ZTv0_n16_N9S19566C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19566C12D0Ev,_ZTv0_n16_N9S19566C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S19566C12[];
extern void _ZN9S19566C15D1Ev();
extern void _ZN9S19566C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19566C15__9S19566C12[] = {
  ABISELECT(16096,9920),
  ABISELECT(17312,10668),
  0,
  (VTBL_ENTRY)&(_ZTI9S19566C15[0]),
  (VTBL_ENTRY)&_ZN9S19566C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19566C15D0Ev,
};
extern void _ZN8S19566C3D1Ev();
extern void _ZN8S19566C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C39S19566C15__9S19566C12[] = {
  ABISELECT(16096,9920),
  ABISELECT(17312,10668),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C3[0]),
  (VTBL_ENTRY)&_ZN8S19566C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C3D0Ev,
};
extern void _ZN8S19566C7D1Ev();
extern void _ZN8S19566C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C78S19566C39S19566C15__A1__9S19566C12[] = {
  ABISELECT(17312,10668),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C7[0]),
  (VTBL_ENTRY)&_ZN8S19566C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19566C48S19566C78S19566C39S19566C15__A2__9S19566C12[] = {
  ABISELECT(17312,10668),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__8S19566C39S19566C15__9S19566C12[] = {
  ABISELECT(1216,748),
  ABISELECT(-16096,-9920),
  (VTBL_ENTRY)&(_ZTI8S19566C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__9S19566C15__9S19566C12[] = {
  ABISELECT(1216,748),
  ABISELECT(-16096,-9920),
  (VTBL_ENTRY)&(_ZTI9S19566C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__9S19566C12[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
extern void _ZN9S19566C13D1Ev();
extern void _ZN9S19566C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19566C13__9S19566C12[] = {
  ABISELECT(48,32),
  ABISELECT(-368,-220),
  ABISELECT(-1584,-968),
  0,
  (VTBL_ENTRY)&(_ZTI9S19566C13[0]),
  (VTBL_ENTRY)&_ZN9S19566C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19566C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__9S19566C13__9S19566C12[] = {
  ABISELECT(1216,748),
  ABISELECT(1584,968),
  (VTBL_ENTRY)&(_ZTI9S19566C13[0]),
};
extern void _ZN8S19566C7D1Ev();
extern void _ZN8S19566C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C7__9S19566C12[] = {
  ABISELECT(-528,-320),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C7[0]),
  (VTBL_ENTRY)&_ZN8S19566C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19566C48S19566C7__A1__9S19566C12[] = {
  ABISELECT(-528,-320),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
static  VTT_ENTRY vtt_S19566C12[] = {
  {&(_ZTV9S19566C12[7]),  7,26},
  {&(_tg__ZTV9S19566C15__9S19566C12[4]),  4,6},
  {&(_tg__ZTV8S19566C39S19566C15__9S19566C12[4]),  4,6},
  {&(_tg__ZTV8S19566C78S19566C39S19566C15__A1__9S19566C12[3]),  3,5},
  {&(_tg__ZTV8S19566C48S19566C78S19566C39S19566C15__A2__9S19566C12[3]),  3,3},
  {&(_tg__ZTV8S19566C4__8S19566C39S19566C15__9S19566C12[3]),  3,3},
  {&(_tg__ZTV8S19566C4__9S19566C15__9S19566C12[3]),  3,3},
  {&(_ZTV9S19566C12[12]),  12,26},
  {&(_ZTV9S19566C12[18]),  18,26},
  {&(_ZTV9S19566C12[24]),  24,26},
  {&(_tg__ZTV8S19566C4__9S19566C12[3]),  3,3},
  {&(_tg__ZTV9S19566C13__9S19566C12[5]),  5,7},
  {&(_tg__ZTV8S19566C4__9S19566C13__9S19566C12[3]),  3,3},
  {&(_tg__ZTV8S19566C7__9S19566C12[3]),  3,5},
  {&(_tg__ZTV8S19566C48S19566C7__A1__9S19566C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19566C12[];
extern  VTBL_ENTRY _ZTV9S19566C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19566C12[];
static VTBL_ENTRY alt_thunk_names79[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19566C12D0Ev,_ZTv0_n16_N9S19566C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17840_N9S19566C12D0Ev,_ZThn10988_N9S19566C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19566C12D1Ev,_ZTv0_n16_N9S19566C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17840_N9S19566C12D1Ev,_ZThn10988_N9S19566C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19566C12D0Ev,_ZTv0_n24_N9S19566C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17680_N9S19566C12D0Ev,_ZThn10888_N9S19566C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19566C12D1Ev,_ZTv0_n24_N9S19566C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17680_N9S19566C12D1Ev,_ZThn10888_N9S19566C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19566C12 = {  "S19566C12", // class name
  bases_S19566C12, 21,
  &(vtc_S19566C12[0]), // expected_vtbl_contents
  &(vtt_S19566C12[0]), // expected_vtt_contents
  ABISELECT(20128,12400), // object size
  NSPAIRA(_ZTI9S19566C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19566C12),26, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19566C12),15, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names79,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19566C1  : virtual S19566C2 , S19566C9 , virtual S19566C12 {
  long double s19566c1f0;
  ::S19566C2 s19566c1f1;
  __tsi64 s19566c1f2;
  ::S19566C6 s19566c1f3;
  virtual  ~S19566C1(); // _ZN8S19566C1D2Ev
  S19566C1(); // tgen
};
//SIG(1 S19566C1) C1{ VBC2{ BC3{ VBC4{ VBC5{ m FL Fp FC6{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC6 FC5[3] Fi[4]} BC6 BC5 BC7{ BC4 BC6 BC5 vd FL[6] Fi FC5 Fp FC6 Fi Fp[7]} Fi FC4 Fs Fp Fi[5]} BC4 BC7 BC5 vd v1 FC8{} Fi[2] Fl Fp} BC9{ VBC10{ VBC3 VBC7 VBC2 BC5 VBC11{ m Fp Fc Fi:6 Fl FC8 Fi} vd v2 Fi} v3 Fs} VBC12{ BC11 VBC4 VBC13{ VBC4 VBC6 vd FU14{ m Fi FD} Fs[8]} VBC7 BC15{ BC3 BC6 vd Fi[7] Fl[7] Fs[8] Fs[8] FC4 Fp FC2} vd Fi} vd FD FC2 FL FC6}


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

static void Test_S19566C1()
{
  extern Class_Descriptor cd_S19566C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2701,6654)];
    init_test(&cd_S19566C1, buf);
    S19566C1 *dp, &lv = *(dp=new (buf) S19566C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(43200,26612), "sizeof(S19566C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19566C1)");
    /*is_ambiguous_... S19566C1::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C4*), ABISELECT(19504,12012), "S19566C1");
    check_base_class_offset(lv, (S19566C5*)(S19566C4*)(S19566C7*)(S19566C3*)(S19566C2*), ABISELECT(19504,12012), "S19566C1");
    /*is_ambiguous_... S19566C2::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C4*)(S19566C2*), ABISELECT(19504,12012), "S19566C1");
    /*is_ambiguous_... S19566C2::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C4*)(S19566C7*)(S19566C2*), ABISELECT(19504,12012), "S19566C1");
    /*is_ambiguous_... S19566C1::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C4*)(S19566C7*)(S19566C3*), ABISELECT(19504,12012), "S19566C1");
    /*is_ambiguous_... S19566C1::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C4*)(S19566C7*), ABISELECT(19504,12012), "S19566C1");
    check_base_class_offset(lv, (S19566C5*)(S19566C4*)(S19566C7*)(S19566C3*)(S19566C15*)(S19566C12*), ABISELECT(19504,12012), "S19566C1");
    /*is_ambiguous_... S19566C1::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C4*), ABISELECT(18296,11268), "S19566C1");
    /*is_ambiguous_... S19566C3::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C4*)(S19566C3*)(S19566C2*), ABISELECT(18288,11264), "S19566C1");
    /*is_ambiguous_... S19566C1::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C4*)(S19566C3*), ABISELECT(18288,11264), "S19566C1");
    /*is_ambiguous_... S19566C12::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C4*)(S19566C12*), ABISELECT(18288,11264), "S19566C1");
    check_base_class_offset(lv, (S19566C4*)(S19566C13*), ABISELECT(18288,11264), "S19566C1");
    /*is_ambiguous_... S19566C3::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C4*)(S19566C3*)(S19566C15*)(S19566C12*), ABISELECT(18288,11264), "S19566C1");
    /*is_ambiguous_... S19566C3::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C3*)(S19566C2*), ABISELECT(12296,7576), "S19566C1");
    /*is_ambiguous_... S19566C3::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C3*)(S19566C2*), ABISELECT(12408,7644), "S19566C1");
    check_base_class_offset(lv, (S19566C6*)(S19566C4*)(S19566C7*)(S19566C3*)(S19566C2*), ABISELECT(10016,6168), "S19566C1");
    check_base_class_offset(lv, (S19566C4*)(S19566C7*)(S19566C3*)(S19566C2*), ABISELECT(10008,6164), "S19566C1");
    /*is_ambiguous_... S19566C7::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C7*)(S19566C3*)(S19566C2*), ABISELECT(11224,6912), "S19566C1");
    /*is_ambiguous_... S19566C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C7*)(S19566C3*)(S19566C2*), ABISELECT(11336,6980), "S19566C1");
    check_base_class_offset(lv, (S19566C7*)(S19566C3*)(S19566C2*), ABISELECT(10008,6164), "S19566C1");
    check_base_class_offset(lv, (S19566C3*)(S19566C2*), ABISELECT(10008,6164), "S19566C1");
    /*is_ambiguous_... S19566C2::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C4*)(S19566C2*), ABISELECT(14400,8868), "S19566C1");
    /*is_ambiguous_... S19566C2::S19566C4 */ AMB_check_base_class_offset(lv, (S19566C4*)(S19566C2*), ABISELECT(14392,8864), "S19566C1");
    /*is_ambiguous_... S19566C2::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C4*)(S19566C7*)(S19566C2*), ABISELECT(15616,9616), "S19566C1");
    /*is_ambiguous_... S19566C2::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C4*)(S19566C7*)(S19566C2*), ABISELECT(15608,9612), "S19566C1");
    /*is_ambiguous_... S19566C2::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C7*)(S19566C2*), ABISELECT(16824,10360), "S19566C1");
    /*is_ambiguous_... S19566C2::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C7*)(S19566C2*), ABISELECT(16936,10428), "S19566C1");
    /*is_ambiguous_... S19566C2::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C7*)(S19566C2*), ABISELECT(15608,9612), "S19566C1");
    /*is_ambiguous_... S19566C2::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C2*), ABISELECT(17896,11024), "S19566C1");
    check_base_class_offset(lv, (S19566C2*), ABISELECT(10008,6164), "S19566C1");
    check_base_class_offset(lv, (S19566C2*)(S19566C10*), ABISELECT(10008,6164), "S19566C1");
    /*is_ambiguous_... S19566C1::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C3*), ABISELECT(22528,13872), "S19566C1");
    /*is_ambiguous_... S19566C1::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C3*), ABISELECT(22640,13940), "S19566C1");
    /*is_ambiguous_... S19566C1::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C4*)(S19566C7*)(S19566C3*), ABISELECT(20248,12464), "S19566C1");
    /*is_ambiguous_... S19566C1::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C4*)(S19566C7*)(S19566C3*), ABISELECT(20240,12460), "S19566C1");
    /*is_ambiguous_... S19566C1::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C7*)(S19566C3*), ABISELECT(21456,13208), "S19566C1");
    /*is_ambiguous_... S19566C1::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C7*)(S19566C3*), ABISELECT(21568,13276), "S19566C1");
    /*is_ambiguous_... S19566C1::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C7*)(S19566C3*), ABISELECT(20240,12460), "S19566C1");
    /*is_ambiguous_... S19566C10::S19566C3 */ AMB_check_base_class_offset(lv, (S19566C3*)(S19566C10*), ABISELECT(20240,12460), "S19566C1");
    /*is_ambiguous_... S19566C1::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C4*)(S19566C7*), ABISELECT(24632,15164), "S19566C1");
    /*is_ambiguous_... S19566C1::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C4*)(S19566C7*), ABISELECT(24624,15160), "S19566C1");
    /*is_ambiguous_... S19566C1::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C7*), ABISELECT(25840,15908), "S19566C1");
    /*is_ambiguous_... S19566C1::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C7*), ABISELECT(25952,15976), "S19566C1");
    /*is_ambiguous_... S19566C10::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C7*)(S19566C10*), ABISELECT(24624,15160), "S19566C1");
    /*is_ambiguous_... S19566C12::S19566C7 */ AMB_check_base_class_offset(lv, (S19566C7*)(S19566C12*), ABISELECT(24624,15160), "S19566C1");
    /*is_ambiguous_... S19566C10::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C10*), ABISELECT(19872,12236), "S19566C1");
    check_base_class_offset(lv, (S19566C11*)(S19566C10*), ABISELECT(26912,16572), "S19566C1");
    check_base_class_offset(lv, (S19566C10*)(S19566C9*), ABISELECT(19864,12232), "S19566C1");
    check_base_class_offset(lv, (S19566C9*), 0, "S19566C1");
    check_base_class_offset(lv, (S19566C11*)(S19566C12*), ABISELECT(43000,26488), "S19566C1");
    /*is_ambiguous_... S19566C13::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C13*), ABISELECT(43088,26544), "S19566C1");
    check_base_class_offset(lv, (S19566C13*)(S19566C12*), ABISELECT(43040,26512), "S19566C1");
    /*is_ambiguous_... S19566C3::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C3*)(S19566C15*)(S19566C12*), ABISELECT(29232,18004), "S19566C1");
    /*is_ambiguous_... S19566C3::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C3*)(S19566C15*)(S19566C12*), ABISELECT(29344,18072), "S19566C1");
    check_base_class_offset(lv, (S19566C6*)(S19566C4*)(S19566C7*)(S19566C3*)(S19566C15*)(S19566C12*), ABISELECT(26952,16596), "S19566C1");
    check_base_class_offset(lv, (S19566C4*)(S19566C7*)(S19566C3*)(S19566C15*)(S19566C12*), ABISELECT(26944,16592), "S19566C1");
    /*is_ambiguous_... S19566C7::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C7*)(S19566C3*)(S19566C15*)(S19566C12*), ABISELECT(28160,17340), "S19566C1");
    /*is_ambiguous_... S19566C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19566C7*)(S19566C3*)(S19566C15*)(S19566C12*), ABISELECT(28272,17408), "S19566C1");
    check_base_class_offset(lv, (S19566C7*)(S19566C3*)(S19566C15*)(S19566C12*), ABISELECT(26944,16592), "S19566C1");
    check_base_class_offset(lv, (S19566C3*)(S19566C15*)(S19566C12*), ABISELECT(26944,16592), "S19566C1");
    /*is_ambiguous_... S19566C15::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19566C15*)(S19566C12*), ABISELECT(31328,19292), "S19566C1");
    check_base_class_offset(lv, (S19566C15*)(S19566C12*), ABISELECT(26944,16592), "S19566C1");
    check_base_class_offset(lv, (S19566C12*), ABISELECT(26944,16592), "S19566C1");
    check_field_offset(lv, s19566c1f0, ABISELECT(16,8), "S19566C1.s19566c1f0");
    check_field_offset(lv, s19566c1f1, ABISELECT(32,20), "S19566C1.s19566c1f1");
    check_field_offset(lv, s19566c1f2, ABISELECT(9888,6088), "S19566C1.s19566c1f2");
    check_field_offset(lv, s19566c1f3, ABISELECT(9896,6096), "S19566C1.s19566c1f3");
    test_class_info(&lv, &cd_S19566C1);
    dp->~S19566C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19566C1(Test_S19566C1, "S19566C1", ABISELECT(43200,26612));

#else // __cplusplus

extern void _ZN8S19566C1C1Ev();
extern void _ZN8S19566C1D2Ev();
Name_Map name_map_S19566C1[] = {
  NSPAIR(_ZN8S19566C1C1Ev),
  NSPAIR(_ZN8S19566C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C7;
extern VTBL_ENTRY _ZTI8S19566C7[];
extern  VTBL_ENTRY _ZTV8S19566C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C7[];
extern Class_Descriptor cd_S19566C3;
extern VTBL_ENTRY _ZTI8S19566C3[];
extern  VTBL_ENTRY _ZTV8S19566C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C7;
extern VTBL_ENTRY _ZTI8S19566C7[];
extern  VTBL_ENTRY _ZTV8S19566C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C7[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C2;
extern VTBL_ENTRY _ZTI8S19566C2[];
extern  VTBL_ENTRY _ZTV8S19566C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C2[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C7;
extern VTBL_ENTRY _ZTI8S19566C7[];
extern  VTBL_ENTRY _ZTV8S19566C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C7[];
extern Class_Descriptor cd_S19566C3;
extern VTBL_ENTRY _ZTI8S19566C3[];
extern  VTBL_ENTRY _ZTV8S19566C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C7;
extern VTBL_ENTRY _ZTI8S19566C7[];
extern  VTBL_ENTRY _ZTV8S19566C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C7[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C11;
extern VTBL_ENTRY _ZTI9S19566C11[];
extern Class_Descriptor cd_S19566C10;
extern VTBL_ENTRY _ZTI9S19566C10[];
extern  VTBL_ENTRY _ZTV9S19566C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19566C10[];
extern Class_Descriptor cd_S19566C9;
extern VTBL_ENTRY _ZTI8S19566C9[];
extern  VTBL_ENTRY _ZTV8S19566C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C9[];
extern Class_Descriptor cd_S19566C11;
extern VTBL_ENTRY _ZTI9S19566C11[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C13;
extern VTBL_ENTRY _ZTI9S19566C13[];
extern  VTBL_ENTRY _ZTV9S19566C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19566C13[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C4;
extern VTBL_ENTRY _ZTI8S19566C4[];
extern  VTBL_ENTRY _ZTV8S19566C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C7;
extern VTBL_ENTRY _ZTI8S19566C7[];
extern  VTBL_ENTRY _ZTV8S19566C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C7[];
extern Class_Descriptor cd_S19566C3;
extern VTBL_ENTRY _ZTI8S19566C3[];
extern  VTBL_ENTRY _ZTV8S19566C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C15;
extern VTBL_ENTRY _ZTI9S19566C15[];
extern  VTBL_ENTRY _ZTV9S19566C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19566C15[];
extern Class_Descriptor cd_S19566C12;
extern VTBL_ENTRY _ZTI9S19566C12[];
extern  VTBL_ENTRY _ZTV9S19566C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19566C12[];
static Base_Class bases_S19566C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(19504,12012), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(18296,11268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C4,    ABISELECT(18288,11264), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(12296,7576), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(12408,7644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(10016,6168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C4,    ABISELECT(10008,6164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(11224,6912), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(11336,6980), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C7,    ABISELECT(10008,6164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19566C3,    ABISELECT(10008,6164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(14400,8868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C4,    ABISELECT(14392,8864), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(15616,9616), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C4,    ABISELECT(15608,9612), //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
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(16824,10360), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(16936,10428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C7,    ABISELECT(15608,9612), //bcp->offset
    27, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(17896,11024), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C2,    ABISELECT(10008,6164), //bcp->offset
    15, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(22528,13872), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(22640,13940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(20248,12464), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C4,    ABISELECT(20240,12460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(21456,13208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(21568,13276), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C7,    ABISELECT(20240,12460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19566C3,    ABISELECT(20240,12460), //bcp->offset
    48, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(24632,15164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19566C4,    ABISELECT(24624,15160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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
    32, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(25840,15908), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(25952,15976), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C7,    ABISELECT(24624,15160), //bcp->offset
    55, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S19566C5,    ABISELECT(19872,12236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S19566C11,    ABISELECT(26912,16572), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S19566C10,    ABISELECT(19864,12232), //bcp->offset
    35, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    36, //immediately_derived
  0, 1},
  {&cd_S19566C9,    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
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19566C11,    ABISELECT(43000,26488), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(43088,26544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 1},
  {&cd_S19566C13,    ABISELECT(43040,26512), //bcp->offset
    71, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    50, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(29232,18004), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(29344,18072), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(26952,16596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S19566C4,    ABISELECT(26944,16592), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(28160,17340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(28272,17408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S19566C7,    ABISELECT(26944,16592), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S19566C3,    ABISELECT(26944,16592), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(31328,19292), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S19566C15,    ABISELECT(26944,16592), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S19566C12,    ABISELECT(26944,16592), //bcp->offset
    61, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19566C1[];
extern void _ZN8S19566C92v3Ev();
extern void _ZN8S19566C1D1Ev();
extern void _ZN8S19566C1D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S19566C1D1Ev,_ZTv0_n20_N8S19566C1D1Ev)();
extern void ABISELECT(_ZThn10008_N8S19566C1D1Ev,_ZThn6164_N8S19566C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19566C1D0Ev,_ZTv0_n20_N8S19566C1D0Ev)();
extern void ABISELECT(_ZThn10008_N8S19566C1D0Ev,_ZThn6164_N8S19566C1D0Ev)() __attribute__((weak));
extern void _ZN8S19566C22v1Ev();
extern void ABISELECT(_ZTvn5600_n40_N8S19566C1D1Ev,_ZTvn3448_n20_N8S19566C1D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N8S19566C1D0Ev,_ZTvn3448_n20_N8S19566C1D0Ev)();
extern void ABISELECT(_ZTv0_n72_N8S19566C1D1Ev,_ZTv0_n36_N8S19566C1D1Ev)();
extern void ABISELECT(_ZThn19864_N8S19566C1D1Ev,_ZThn12232_N8S19566C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19566C1D0Ev,_ZTv0_n36_N8S19566C1D0Ev)();
extern void ABISELECT(_ZThn19864_N8S19566C1D0Ev,_ZThn12232_N8S19566C1D0Ev)() __attribute__((weak));
extern void _ZN9S19566C102v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S19566C1D1Ev,_ZTv0_n20_N8S19566C1D1Ev)();
extern void ABISELECT(_ZThn20240_N8S19566C1D1Ev,_ZThn12460_N8S19566C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19566C1D0Ev,_ZTv0_n20_N8S19566C1D0Ev)();
extern void ABISELECT(_ZThn20240_N8S19566C1D0Ev,_ZThn12460_N8S19566C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19566C1D1Ev,_ZTv0_n16_N8S19566C1D1Ev)();
extern void ABISELECT(_ZThn24624_N8S19566C1D1Ev,_ZThn15160_N8S19566C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19566C1D0Ev,_ZTv0_n16_N8S19566C1D0Ev)();
extern void ABISELECT(_ZThn24624_N8S19566C1D0Ev,_ZThn15160_N8S19566C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19566C1D1Ev,_ZTv0_n32_N8S19566C1D1Ev)();
extern void ABISELECT(_ZThn26944_N8S19566C1D1Ev,_ZThn16592_N8S19566C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19566C1D0Ev,_ZTv0_n32_N8S19566C1D0Ev)();
extern void ABISELECT(_ZThn26944_N8S19566C1D0Ev,_ZThn16592_N8S19566C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19566C1D1Ev,_ZTv0_n24_N8S19566C1D1Ev)();
extern void ABISELECT(_ZThn43040_N8S19566C1D1Ev,_ZThn26512_N8S19566C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19566C1D0Ev,_ZTv0_n24_N8S19566C1D0Ev)();
extern void ABISELECT(_ZThn43040_N8S19566C1D0Ev,_ZThn26512_N8S19566C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19566C1[] = {
  ABISELECT(43088,26544),
  ABISELECT(43040,26512),
  ABISELECT(26944,16592),
  ABISELECT(26912,16572),
  ABISELECT(10008,6164),
  ABISELECT(24624,15160),
  ABISELECT(19504,12012),
  ABISELECT(18288,11264),
  ABISELECT(20240,12460),
  ABISELECT(19864,12232),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C1[0]),
  (VTBL_ENTRY)&_ZN8S19566C92v3Ev,
  (VTBL_ENTRY)&_ZN8S19566C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C1D0Ev,
  0,
  ABISELECT(-10008,-6164),
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  ABISELECT(-10008,-6164),
  (VTBL_ENTRY)&(_ZTI8S19566C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19566C1D1Ev,_ZTv0_n20_N8S19566C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19566C1D0Ev,_ZTv0_n20_N8S19566C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19566C22v1Ev,
  ABISELECT(5112,3148),
  ABISELECT(-14392,-8864),
  (VTBL_ENTRY)&(_ZTI8S19566C1[0]),
  ABISELECT(3896,2400),
  ABISELECT(-15608,-9612),
  (VTBL_ENTRY)&(_ZTI8S19566C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N8S19566C1D1Ev,_ZTvn3448_n20_N8S19566C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N8S19566C1D0Ev,_ZTvn3448_n20_N8S19566C1D0Ev),
  ABISELECT(1216,748),
  ABISELECT(-18288,-11264),
  (VTBL_ENTRY)&(_ZTI8S19566C1[0]),
  0,
  ABISELECT(-19864,-12232),
  ABISELECT(7048,4340),
  ABISELECT(-9856,-6068),
  ABISELECT(4760,2928),
  ABISELECT(-360,-220),
  ABISELECT(-1576,-968),
  ABISELECT(376,228),
  ABISELECT(-19864,-12232),
  (VTBL_ENTRY)&(_ZTI8S19566C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19566C1D1Ev,_ZTv0_n36_N8S19566C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19566C1D0Ev,_ZTv0_n36_N8S19566C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19566C102v2Ev,
  ABISELECT(-20240,-12460),
  ABISELECT(-1952,-1196),
  ABISELECT(-736,-448),
  ABISELECT(-20240,-12460),
  (VTBL_ENTRY)&(_ZTI8S19566C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19566C1D1Ev,_ZTv0_n20_N8S19566C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19566C1D0Ev,_ZTv0_n20_N8S19566C1D0Ev),
  ABISELECT(-24624,-15160),
  ABISELECT(-5120,-3148),
  ABISELECT(-24624,-15160),
  (VTBL_ENTRY)&(_ZTI8S19566C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19566C1D1Ev,_ZTv0_n16_N8S19566C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19566C1D0Ev,_ZTv0_n16_N8S19566C1D0Ev),
  ABISELECT(-26944,-16592),
  ABISELECT(-2320,-1432),
  ABISELECT(16144,9952),
  ABISELECT(16096,9920),
  ABISELECT(-8656,-5328),
  ABISELECT(-7440,-4580),
  ABISELECT(-26944,-16592),
  (VTBL_ENTRY)&(_ZTI8S19566C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19566C1D1Ev,_ZTv0_n32_N8S19566C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19566C1D0Ev,_ZTv0_n32_N8S19566C1D0Ev),
  ABISELECT(-43040,-26512),
  ABISELECT(48,32),
  ABISELECT(-23536,-14500),
  ABISELECT(-24752,-15248),
  ABISELECT(-43040,-26512),
  (VTBL_ENTRY)&(_ZTI8S19566C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19566C1D1Ev,_ZTv0_n24_N8S19566C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19566C1D0Ev,_ZTv0_n24_N8S19566C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19566C1[];
extern void _ZN8S19566C92v3Ev();
extern void _ZN8S19566C9D1Ev();
extern void _ZN8S19566C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C9__8S19566C1[] = {
  ABISELECT(26912,16572),
  ABISELECT(10008,6164),
  ABISELECT(24624,15160),
  ABISELECT(19504,12012),
  ABISELECT(18288,11264),
  ABISELECT(20240,12460),
  ABISELECT(19864,12232),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C9[0]),
  (VTBL_ENTRY)&_ZN8S19566C92v3Ev,
  (VTBL_ENTRY)&_ZN8S19566C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C9D0Ev,
};
extern void ABISELECT(_ZTv0_n72_N8S19566C9D1Ev,_ZTv0_n36_N8S19566C9D1Ev)();
extern void ABISELECT(_ZThn19864_N8S19566C9D1Ev,_ZThn12232_N8S19566C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19566C9D0Ev,_ZTv0_n36_N8S19566C9D0Ev)();
extern void ABISELECT(_ZThn19864_N8S19566C9D0Ev,_ZThn12232_N8S19566C9D0Ev)() __attribute__((weak));
extern void _ZN9S19566C102v2Ev();
static  VTBL_ENTRY _tg__ZTV9S19566C10__8S19566C9__8S19566C1[] = {
  0,
  ABISELECT(-19864,-12232),
  ABISELECT(7048,4340),
  ABISELECT(-9856,-6068),
  ABISELECT(4760,2928),
  ABISELECT(-360,-220),
  ABISELECT(-1576,-968),
  ABISELECT(376,228),
  ABISELECT(-19864,-12232),
  (VTBL_ENTRY)&(_ZTI8S19566C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19566C9D1Ev,_ZTv0_n36_N8S19566C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19566C9D0Ev,_ZTv0_n36_N8S19566C9D0Ev),
  (VTBL_ENTRY)&_ZN9S19566C102v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19566C9D1Ev,_ZTv0_n20_N8S19566C9D1Ev)();
extern void ABISELECT(_ZThn20240_N8S19566C9D1Ev,_ZThn12460_N8S19566C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19566C9D0Ev,_ZTv0_n20_N8S19566C9D0Ev)();
extern void ABISELECT(_ZThn20240_N8S19566C9D0Ev,_ZThn12460_N8S19566C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19566C3__8S19566C9__8S19566C1[] = {
  ABISELECT(-20240,-12460),
  ABISELECT(-1952,-1196),
  ABISELECT(-736,-448),
  ABISELECT(-20240,-12460),
  (VTBL_ENTRY)&(_ZTI8S19566C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19566C9D1Ev,_ZTv0_n20_N8S19566C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19566C9D0Ev,_ZTv0_n20_N8S19566C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__8S19566C9__8S19566C1[] = {
  ABISELECT(1216,748),
  ABISELECT(-18288,-11264),
  (VTBL_ENTRY)&(_ZTI8S19566C9[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19566C9D1Ev,_ZTv0_n16_N8S19566C9D1Ev)();
extern void ABISELECT(_ZThn24624_N8S19566C9D1Ev,_ZThn15160_N8S19566C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19566C9D0Ev,_ZTv0_n16_N8S19566C9D0Ev)();
extern void ABISELECT(_ZThn24624_N8S19566C9D0Ev,_ZThn15160_N8S19566C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19566C7__A1__8S19566C9__8S19566C1[] = {
  ABISELECT(-24624,-15160),
  ABISELECT(-5120,-3148),
  ABISELECT(-24624,-15160),
  (VTBL_ENTRY)&(_ZTI8S19566C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19566C9D1Ev,_ZTv0_n16_N8S19566C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19566C9D0Ev,_ZTv0_n16_N8S19566C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19566C9D1Ev,_ZTv0_n20_N8S19566C9D1Ev)();
extern void ABISELECT(_ZThn10008_N8S19566C9D1Ev,_ZThn6164_N8S19566C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19566C9D0Ev,_ZTv0_n20_N8S19566C9D0Ev)();
extern void ABISELECT(_ZThn10008_N8S19566C9D0Ev,_ZThn6164_N8S19566C9D0Ev)() __attribute__((weak));
extern void _ZN8S19566C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C2__8S19566C9__8S19566C1[] = {
  0,
  ABISELECT(-10008,-6164),
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  ABISELECT(-10008,-6164),
  (VTBL_ENTRY)&(_ZTI8S19566C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19566C9D1Ev,_ZTv0_n20_N8S19566C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19566C9D0Ev,_ZTv0_n20_N8S19566C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19566C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19566C48S19566C2__A4__8S19566C9__8S19566C1[] = {
  ABISELECT(5112,3148),
  ABISELECT(-14392,-8864),
  (VTBL_ENTRY)&(_ZTI8S19566C9[0]),
};
extern void ABISELECT(_ZTvn5600_n40_N8S19566C9D1Ev,_ZTvn3448_n20_N8S19566C9D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N8S19566C9D0Ev,_ZTvn3448_n20_N8S19566C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19566C78S19566C2__A3__8S19566C9__8S19566C1[] = {
  ABISELECT(3896,2400),
  ABISELECT(-15608,-9612),
  (VTBL_ENTRY)&(_ZTI8S19566C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N8S19566C9D1Ev,_ZTvn3448_n20_N8S19566C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N8S19566C9D0Ev,_ZTvn3448_n20_N8S19566C9D0Ev),
};
extern void _ZN8S19566C2D1Ev();
extern void _ZN8S19566C2D0Ev();
extern void _ZN8S19566C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C2__8S19566C1[] = {
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C2[0]),
  (VTBL_ENTRY)&_ZN8S19566C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19566C22v1Ev,
};
extern void _ZN8S19566C3D1Ev();
extern void _ZN8S19566C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C38S19566C2__8S19566C1[] = {
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C3[0]),
  (VTBL_ENTRY)&_ZN8S19566C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C3D0Ev,
};
extern void _ZN8S19566C7D1Ev();
extern void _ZN8S19566C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C78S19566C38S19566C2__8S19566C1[] = {
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C7[0]),
  (VTBL_ENTRY)&_ZN8S19566C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19566C48S19566C78S19566C38S19566C2__A1__8S19566C1[] = {
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__8S19566C38S19566C2__8S19566C1[] = {
  ABISELECT(1216,748),
  ABISELECT(-8280,-5100),
  (VTBL_ENTRY)&(_ZTI8S19566C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C48S19566C2__A2__8S19566C1[] = {
  ABISELECT(5112,3148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
extern void _ZN8S19566C7D1Ev();
extern void _ZN8S19566C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C78S19566C2__A1__8S19566C1[] = {
  ABISELECT(3896,2400),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C7[0]),
  (VTBL_ENTRY)&_ZN8S19566C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19566C48S19566C78S19566C2__A3__8S19566C1[] = {
  ABISELECT(3896,2400),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__8S19566C2__8S19566C1[] = {
  ABISELECT(1216,748),
  ABISELECT(-8280,-5100),
  (VTBL_ENTRY)&(_ZTI8S19566C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__A__8S19566C2__8S19566C1[] = {
  ABISELECT(5112,3148),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI8S19566C2[0]),
};
extern void ABISELECT(_ZThn5600_N8S19566C2D1Ev,_ZThn3448_N8S19566C2D1Ev)();
extern void ABISELECT(_ZThn5600_N8S19566C2D0Ev,_ZThn3448_N8S19566C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19566C7__A1__8S19566C2__8S19566C1[] = {
  ABISELECT(3896,2400),
  ABISELECT(-5600,-3448),
  (VTBL_ENTRY)&(_ZTI8S19566C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S19566C2D1Ev,_ZThn3448_N8S19566C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S19566C2D0Ev,_ZThn3448_N8S19566C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__8S19566C1[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
extern void _ZN9S19566C10D1Ev();
extern void _ZN9S19566C10D0Ev();
extern void _ZN9S19566C102v2Ev();
static  VTBL_ENTRY _tg__ZTV9S19566C10__8S19566C1[] = {
  ABISELECT(7048,4340),
  ABISELECT(-9856,-6068),
  ABISELECT(4760,2928),
  ABISELECT(-360,-220),
  ABISELECT(-1576,-968),
  ABISELECT(376,228),
  0,
  (VTBL_ENTRY)&(_ZTI9S19566C10[0]),
  (VTBL_ENTRY)&_ZN9S19566C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19566C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19566C102v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19566C10D1Ev,_ZTv0_n20_N9S19566C10D1Ev)();
extern void ABISELECT(_ZThn376_N9S19566C10D1Ev,_ZThn228_N9S19566C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19566C10D0Ev,_ZTv0_n20_N9S19566C10D0Ev)();
extern void ABISELECT(_ZThn376_N9S19566C10D0Ev,_ZThn228_N9S19566C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19566C3__9S19566C10__8S19566C1[] = {
  ABISELECT(-376,-228),
  ABISELECT(-1952,-1196),
  ABISELECT(-736,-448),
  ABISELECT(-376,-228),
  (VTBL_ENTRY)&(_ZTI9S19566C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19566C10D1Ev,_ZTv0_n20_N9S19566C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19566C10D0Ev,_ZTv0_n20_N9S19566C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__9S19566C10__8S19566C1[] = {
  ABISELECT(1216,748),
  ABISELECT(1576,968),
  (VTBL_ENTRY)&(_ZTI9S19566C10[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19566C10D1Ev,_ZTv0_n16_N9S19566C10D1Ev)();
extern void ABISELECT(_ZThn4760_N9S19566C10D1Ev,_ZThn2928_N9S19566C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19566C10D0Ev,_ZTv0_n16_N9S19566C10D0Ev)();
extern void ABISELECT(_ZThn4760_N9S19566C10D0Ev,_ZThn2928_N9S19566C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19566C7__A1__9S19566C10__8S19566C1[] = {
  ABISELECT(-4760,-2928),
  ABISELECT(-5120,-3148),
  ABISELECT(-4760,-2928),
  (VTBL_ENTRY)&(_ZTI9S19566C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19566C10D1Ev,_ZTv0_n16_N9S19566C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19566C10D0Ev,_ZTv0_n16_N9S19566C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19566C10D1Ev,_ZTv0_n20_N9S19566C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19566C10D0Ev,_ZTv0_n20_N9S19566C10D0Ev)();
extern void _ZN8S19566C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C2__9S19566C10__8S19566C1[] = {
  0,
  ABISELECT(9856,6068),
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  ABISELECT(9856,6068),
  (VTBL_ENTRY)&(_ZTI9S19566C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19566C10D1Ev,_ZTv0_n20_N9S19566C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19566C10D0Ev,_ZTv0_n20_N9S19566C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19566C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19566C48S19566C2__A4__9S19566C10__8S19566C1[] = {
  ABISELECT(5112,3148),
  ABISELECT(5472,3368),
  (VTBL_ENTRY)&(_ZTI9S19566C10[0]),
};
extern void ABISELECT(_ZTvn5600_n40_N9S19566C10D1Ev,_ZTvn3448_n20_N9S19566C10D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N9S19566C10D0Ev,_ZTvn3448_n20_N9S19566C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19566C78S19566C2__A3__9S19566C10__8S19566C1[] = {
  ABISELECT(3896,2400),
  ABISELECT(4256,2620),
  (VTBL_ENTRY)&(_ZTI9S19566C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N9S19566C10D1Ev,_ZTvn3448_n20_N9S19566C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N9S19566C10D0Ev,_ZTvn3448_n20_N9S19566C10D0Ev),
};
extern void _ZN8S19566C3D1Ev();
extern void _ZN8S19566C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C3__A1__8S19566C1[] = {
  ABISELECT(-1952,-1196),
  ABISELECT(-736,-448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C3[0]),
  (VTBL_ENTRY)&_ZN8S19566C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C3D0Ev,
};
extern void _ZN8S19566C7D1Ev();
extern void _ZN8S19566C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C78S19566C3__A2__8S19566C1[] = {
  ABISELECT(-736,-448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C7[0]),
  (VTBL_ENTRY)&_ZN8S19566C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19566C48S19566C78S19566C3__A4__8S19566C1[] = {
  ABISELECT(-736,-448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__8S19566C3__A1__8S19566C1[] = {
  ABISELECT(1216,748),
  ABISELECT(1952,1196),
  (VTBL_ENTRY)&(_ZTI8S19566C3[0]),
};
extern void _ZN8S19566C7D1Ev();
extern void _ZN8S19566C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C7__A3__8S19566C1[] = {
  ABISELECT(-5120,-3148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C7[0]),
  (VTBL_ENTRY)&_ZN8S19566C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19566C48S19566C7__A5__8S19566C1[] = {
  ABISELECT(-5120,-3148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
extern void _ZN9S19566C12D1Ev();
extern void _ZN9S19566C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19566C12__8S19566C1[] = {
  ABISELECT(-2320,-1432),
  ABISELECT(16144,9952),
  ABISELECT(16096,9920),
  ABISELECT(-8656,-5328),
  ABISELECT(-7440,-4580),
  0,
  (VTBL_ENTRY)&(_ZTI9S19566C12[0]),
  (VTBL_ENTRY)&_ZN9S19566C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19566C12D0Ev,
};
extern void _ZN9S19566C15D1Ev();
extern void _ZN9S19566C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19566C159S19566C12__8S19566C1[] = {
  ABISELECT(-8656,-5328),
  ABISELECT(-7440,-4580),
  0,
  (VTBL_ENTRY)&(_ZTI9S19566C15[0]),
  (VTBL_ENTRY)&_ZN9S19566C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19566C15D0Ev,
};
extern void _ZN8S19566C3D1Ev();
extern void _ZN8S19566C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C39S19566C159S19566C12__A2__8S19566C1[] = {
  ABISELECT(-8656,-5328),
  ABISELECT(-7440,-4580),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C3[0]),
  (VTBL_ENTRY)&_ZN8S19566C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C3D0Ev,
};
extern void _ZN8S19566C7D1Ev();
extern void _ZN8S19566C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19566C78S19566C39S19566C159S19566C12__A4__8S19566C1[] = {
  ABISELECT(-7440,-4580),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C7[0]),
  (VTBL_ENTRY)&_ZN8S19566C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19566C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19566C48S19566C78S19566C39S19566C159S19566C12__A6__8S19566C1[] = {
  ABISELECT(-7440,-4580),
  0,
  (VTBL_ENTRY)&(_ZTI8S19566C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__8S19566C39S19566C159S19566C12__A2__8S19566C1[] = {
  ABISELECT(1216,748),
  ABISELECT(8656,5328),
  (VTBL_ENTRY)&(_ZTI8S19566C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__9S19566C159S19566C12__8S19566C1[] = {
  ABISELECT(1216,748),
  ABISELECT(8656,5328),
  (VTBL_ENTRY)&(_ZTI9S19566C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__9S19566C12__8S19566C1[] = {
  ABISELECT(1216,748),
  ABISELECT(8656,5328),
  (VTBL_ENTRY)&(_ZTI9S19566C12[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19566C12D1Ev,_ZTv0_n24_N9S19566C12D1Ev)();
extern void ABISELECT(_ZThn16096_N9S19566C12D1Ev,_ZThn9920_N9S19566C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19566C12D0Ev,_ZTv0_n24_N9S19566C12D0Ev)();
extern void ABISELECT(_ZThn16096_N9S19566C12D0Ev,_ZThn9920_N9S19566C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19566C13__9S19566C12__8S19566C1[] = {
  ABISELECT(-16096,-9920),
  ABISELECT(48,32),
  ABISELECT(-23536,-14500),
  ABISELECT(-24752,-15248),
  ABISELECT(-16096,-9920),
  (VTBL_ENTRY)&(_ZTI9S19566C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19566C12D1Ev,_ZTv0_n24_N9S19566C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19566C12D0Ev,_ZTv0_n24_N9S19566C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19566C12D1Ev,_ZTv0_n16_N9S19566C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19566C12D0Ev,_ZTv0_n16_N9S19566C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19566C7__9S19566C12__8S19566C1[] = {
  ABISELECT(2320,1432),
  ABISELECT(-5120,-3148),
  ABISELECT(2320,1432),
  (VTBL_ENTRY)&(_ZTI9S19566C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19566C12D1Ev,_ZTv0_n16_N9S19566C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19566C12D0Ev,_ZTv0_n16_N9S19566C12D0Ev),
};
extern void _ZN9S19566C13D1Ev();
extern void _ZN9S19566C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19566C13__8S19566C1[] = {
  ABISELECT(48,32),
  ABISELECT(-23536,-14500),
  ABISELECT(-24752,-15248),
  0,
  (VTBL_ENTRY)&(_ZTI9S19566C13[0]),
  (VTBL_ENTRY)&_ZN9S19566C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19566C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19566C4__9S19566C13__8S19566C1[] = {
  ABISELECT(1216,748),
  ABISELECT(24752,15248),
  (VTBL_ENTRY)&(_ZTI9S19566C13[0]),
};
static  VTT_ENTRY vtt_S19566C1[] = {
  {&(_ZTV8S19566C1[12]),  12,79},
  {&(_tg__ZTV8S19566C9__8S19566C1[9]),  9,12},
  {&(_tg__ZTV9S19566C10__8S19566C9__8S19566C1[10]),  10,13},
  {&(_tg__ZTV8S19566C3__8S19566C9__8S19566C1[5]),  5,7},
  {&(_tg__ZTV8S19566C4__8S19566C9__8S19566C1[3]),  3,3},
  {&(_tg__ZTV8S19566C7__A1__8S19566C9__8S19566C1[4]),  4,6},
  {&(_tg__ZTV8S19566C2__8S19566C9__8S19566C1[6]),  6,9},
  {&(_tg__ZTV8S19566C48S19566C2__A4__8S19566C9__8S19566C1[3]),  3,3},
  {&(_tg__ZTV8S19566C78S19566C2__A3__8S19566C9__8S19566C1[3]),  3,5},
  {&(_ZTV8S19566C1[21]),  21,79},
  {&(_ZTV8S19566C1[35]),  35,79},
  {&(_ZTV8S19566C1[27]),  27,79},
  {&(_ZTV8S19566C1[30]),  30,79},
  {&(_ZTV8S19566C1[45]),  45,79},
  {&(_ZTV8S19566C1[53]),  53,79},
  {&(_ZTV8S19566C1[59]),  59,79},
  {&(_ZTV8S19566C1[69]),  69,79},
  {&(_ZTV8S19566C1[77]),  77,79},
  {&(_tg__ZTV8S19566C2__8S19566C1[4]),  4,7},
  {&(_tg__ZTV8S19566C38S19566C2__8S19566C1[4]),  4,6},
  {&(_tg__ZTV8S19566C78S19566C38S19566C2__8S19566C1[3]),  3,5},
  {&(_tg__ZTV8S19566C48S19566C78S19566C38S19566C2__A1__8S19566C1[3]),  3,3},
  {&(_tg__ZTV8S19566C4__8S19566C38S19566C2__8S19566C1[3]),  3,3},
  {&(_tg__ZTV8S19566C48S19566C2__A2__8S19566C1[3]),  3,3},
  {&(_tg__ZTV8S19566C78S19566C2__A1__8S19566C1[3]),  3,5},
  {&(_tg__ZTV8S19566C48S19566C78S19566C2__A3__8S19566C1[3]),  3,3},
  {&(_tg__ZTV8S19566C4__8S19566C2__8S19566C1[3]),  3,3},
  {&(_tg__ZTV8S19566C4__A__8S19566C2__8S19566C1[3]),  3,3},
  {&(_tg__ZTV8S19566C7__A1__8S19566C2__8S19566C1[3]),  3,5},
  {&(_tg__ZTV8S19566C4__8S19566C1[3]),  3,3},
  {&(_tg__ZTV9S19566C10__8S19566C1[8]),  8,11},
  {&(_tg__ZTV8S19566C3__9S19566C10__8S19566C1[5]),  5,7},
  {&(_tg__ZTV8S19566C4__9S19566C10__8S19566C1[3]),  3,3},
  {&(_tg__ZTV8S19566C7__A1__9S19566C10__8S19566C1[4]),  4,6},
  {&(_tg__ZTV8S19566C2__9S19566C10__8S19566C1[6]),  6,9},
  {&(_tg__ZTV8S19566C48S19566C2__A4__9S19566C10__8S19566C1[3]),  3,3},
  {&(_tg__ZTV8S19566C78S19566C2__A3__9S19566C10__8S19566C1[3]),  3,5},
  {&(_tg__ZTV8S19566C3__A1__8S19566C1[4]),  4,6},
  {&(_tg__ZTV8S19566C78S19566C3__A2__8S19566C1[3]),  3,5},
  {&(_tg__ZTV8S19566C48S19566C78S19566C3__A4__8S19566C1[3]),  3,3},
  {&(_tg__ZTV8S19566C4__8S19566C3__A1__8S19566C1[3]),  3,3},
  {&(_tg__ZTV8S19566C7__A3__8S19566C1[3]),  3,5},
  {&(_tg__ZTV8S19566C48S19566C7__A5__8S19566C1[3]),  3,3},
  {&(_tg__ZTV9S19566C12__8S19566C1[7]),  7,9},
  {&(_tg__ZTV9S19566C159S19566C12__8S19566C1[4]),  4,6},
  {&(_tg__ZTV8S19566C39S19566C159S19566C12__A2__8S19566C1[4]),  4,6},
  {&(_tg__ZTV8S19566C78S19566C39S19566C159S19566C12__A4__8S19566C1[3]),  3,5},
  {&(_tg__ZTV8S19566C48S19566C78S19566C39S19566C159S19566C12__A6__8S19566C1[3]),  3,3},
  {&(_tg__ZTV8S19566C4__8S19566C39S19566C159S19566C12__A2__8S19566C1[3]),  3,3},
  {&(_tg__ZTV8S19566C4__9S19566C159S19566C12__8S19566C1[3]),  3,3},
  {&(_tg__ZTV8S19566C4__9S19566C12__8S19566C1[3]),  3,3},
  {&(_tg__ZTV9S19566C13__9S19566C12__8S19566C1[6]),  6,8},
  {&(_tg__ZTV8S19566C7__9S19566C12__8S19566C1[4]),  4,6},
  {&(_tg__ZTV9S19566C13__8S19566C1[5]),  5,7},
  {&(_tg__ZTV8S19566C4__9S19566C13__8S19566C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19566C1[];
extern  VTBL_ENTRY _ZTV8S19566C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19566C1[];
static VTBL_ENTRY alt_thunk_names80[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19566C12D0Ev,_ZTv0_n24_N9S19566C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16096_N9S19566C12D0Ev,_ZThn9920_N9S19566C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19566C12D1Ev,_ZTv0_n24_N9S19566C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16096_N9S19566C12D1Ev,_ZThn9920_N9S19566C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19566C10D0Ev,_ZTv0_n16_N9S19566C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4760_N9S19566C10D0Ev,_ZThn2928_N9S19566C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19566C10D1Ev,_ZTv0_n16_N9S19566C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4760_N9S19566C10D1Ev,_ZThn2928_N9S19566C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19566C10D0Ev,_ZTv0_n20_N9S19566C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N9S19566C10D0Ev,_ZThn228_N9S19566C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19566C10D1Ev,_ZTv0_n20_N9S19566C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N9S19566C10D1Ev,_ZThn228_N9S19566C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19566C9D0Ev,_ZTv0_n16_N8S19566C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24624_N8S19566C9D0Ev,_ZThn15160_N8S19566C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19566C9D1Ev,_ZTv0_n16_N8S19566C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24624_N8S19566C9D1Ev,_ZThn15160_N8S19566C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19566C9D0Ev,_ZTv0_n20_N8S19566C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10008_N8S19566C9D0Ev,_ZThn6164_N8S19566C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn20240_N8S19566C9D0Ev,_ZThn12460_N8S19566C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19566C9D1Ev,_ZTv0_n20_N8S19566C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10008_N8S19566C9D1Ev,_ZThn6164_N8S19566C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn20240_N8S19566C9D1Ev,_ZThn12460_N8S19566C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19566C9D0Ev,_ZTv0_n36_N8S19566C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19864_N8S19566C9D0Ev,_ZThn12232_N8S19566C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19566C9D1Ev,_ZTv0_n36_N8S19566C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19864_N8S19566C9D1Ev,_ZThn12232_N8S19566C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19566C1D0Ev,_ZTv0_n24_N8S19566C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43040_N8S19566C1D0Ev,_ZThn26512_N8S19566C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19566C1D1Ev,_ZTv0_n24_N8S19566C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43040_N8S19566C1D1Ev,_ZThn26512_N8S19566C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19566C1D0Ev,_ZTv0_n32_N8S19566C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26944_N8S19566C1D0Ev,_ZThn16592_N8S19566C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19566C1D1Ev,_ZTv0_n32_N8S19566C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26944_N8S19566C1D1Ev,_ZThn16592_N8S19566C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19566C1D0Ev,_ZTv0_n16_N8S19566C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24624_N8S19566C1D0Ev,_ZThn15160_N8S19566C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19566C1D1Ev,_ZTv0_n16_N8S19566C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24624_N8S19566C1D1Ev,_ZThn15160_N8S19566C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19566C1D0Ev,_ZTv0_n36_N8S19566C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19864_N8S19566C1D0Ev,_ZThn12232_N8S19566C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19566C1D1Ev,_ZTv0_n36_N8S19566C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19864_N8S19566C1D1Ev,_ZThn12232_N8S19566C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19566C1D0Ev,_ZTv0_n20_N8S19566C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20240_N8S19566C1D0Ev,_ZThn12460_N8S19566C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10008_N8S19566C1D0Ev,_ZThn6164_N8S19566C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19566C1D1Ev,_ZTv0_n20_N8S19566C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20240_N8S19566C1D1Ev,_ZThn12460_N8S19566C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10008_N8S19566C1D1Ev,_ZThn6164_N8S19566C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19566C1 = {  "S19566C1", // class name
  bases_S19566C1, 51,
  &(vtc_S19566C1[0]), // expected_vtbl_contents
  &(vtt_S19566C1[0]), // expected_vtt_contents
  ABISELECT(43200,26612), // object size
  NSPAIRA(_ZTI8S19566C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19566C1),79, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19566C1),55, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names80,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19565C4  : virtual S19566C5 , S19566C6 {
  ::S19566C5 s19565c4f0[3];
  int s19565c4f1[4];
  ~S19565C4(); // tgen
  S19565C4(); // tgen
};
//SIG(-1 S19565C4) C1{ VBC2{ m FL Fp FC3{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC3 FC2[3] Fi[4]}


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

static void Test_S19565C4()
{
  extern Class_Descriptor cd_S19565C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(198,243)];
    init_test(&cd_S19565C4, buf);
    S19565C4 *dp, &lv = *(dp=new (buf) S19565C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1576,968), "sizeof(S19565C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19565C4)");
    check_base_class_offset(lv, (S19566C5*), ABISELECT(1216,748), "S19565C4");
    check_base_class_offset(lv, (S19566C6*), ABISELECT(8,4), "S19565C4");
    check_field_offset(lv, s19565c4f0, ABISELECT(120,72), "S19565C4.s19565c4f0");
    check_field_offset(lv, s19565c4f1, ABISELECT(1200,732), "S19565C4.s19565c4f1");
    test_class_info(&lv, &cd_S19565C4);
    dp->~S19565C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19565C4(Test_S19565C4, "S19565C4", ABISELECT(1576,968));

#else // __cplusplus

extern void _ZN8S19565C4C1Ev();
extern void _ZN8S19565C4D1Ev();
Name_Map name_map_S19565C4[] = {
  NSPAIR(_ZN8S19565C4C1Ev),
  NSPAIR(_ZN8S19565C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
static Base_Class bases_S19565C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19566C6,    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 _ZTI8S19565C4[];
static  VTBL_ENTRY vtc_S19565C4[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
extern VTBL_ENTRY _ZTV8S19565C4[];
static  VTT_ENTRY vtt_S19565C4[] = {
  {&(_ZTV8S19565C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
Class_Descriptor cd_S19565C4 = {  "S19565C4", // class name
  bases_S19565C4, 2,
  &(vtc_S19565C4[0]), // expected_vtbl_contents
  &(vtt_S19565C4[0]), // expected_vtt_contents
  ABISELECT(1576,968), // object size
  NSPAIRA(_ZTI8S19565C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19565C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19565C4),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  S19565C7  : S19565C4 , S19566C6 , S19566C5 {
  __tsi64 s19565c7f0[6];
  int s19565c7f1;
  ::S19566C5 s19565c7f2;
  void *s19565c7f3;
  ::S19566C6 s19565c7f4;
  int s19565c7f5;
  void *s19565c7f6[7];
  virtual  ~S19565C7(); // _ZN8S19565C7D2Ev
  S19565C7(); // tgen
};
//SIG(-1 S19565C7) C1{ BC2{ VBC3{ m FL Fp FC4{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC4 FC3[3] Fi[4]} BC4 BC3 vd FL[6] Fi FC3 Fp FC4 Fi Fp[7]}


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

static void Test_S19565C7()
{
  extern Class_Descriptor cd_S19565C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(332,409)];
    init_test(&cd_S19565C7, buf);
    S19565C7 *dp, &lv = *(dp=new (buf) S19565C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2648,1632), "sizeof(S19565C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19565C7)");
    check_base_class_offset(lv, (S19566C5*)(S19565C4*), ABISELECT(2288,1412), "S19565C7");
    check_base_class_offset(lv, (S19566C6*)(S19565C4*), ABISELECT(8,4), "S19565C7");
    check_base_class_offset(lv, (S19565C4*), 0, "S19565C7");
    /*is_ambiguous_... S19565C7::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*), ABISELECT(1216,748), "S19565C7");
    /*is_ambiguous_... S19565C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(1328,816), "S19565C7");
    check_field_offset(lv, s19565c7f0, ABISELECT(1688,1036), "S19565C7.s19565c7f0");
    check_field_offset(lv, s19565c7f1, ABISELECT(1736,1084), "S19565C7.s19565c7f1");
    check_field_offset(lv, s19565c7f2, ABISELECT(1744,1088), "S19565C7.s19565c7f2");
    check_field_offset(lv, s19565c7f3, ABISELECT(2104,1308), "S19565C7.s19565c7f3");
    check_field_offset(lv, s19565c7f4, ABISELECT(2112,1312), "S19565C7.s19565c7f4");
    check_field_offset(lv, s19565c7f5, ABISELECT(2224,1380), "S19565C7.s19565c7f5");
    check_field_offset(lv, s19565c7f6, ABISELECT(2232,1384), "S19565C7.s19565c7f6");
    test_class_info(&lv, &cd_S19565C7);
    dp->~S19565C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19565C7(Test_S19565C7, "S19565C7", ABISELECT(2648,1632));

#else // __cplusplus

extern void _ZN8S19565C7C1Ev();
extern void _ZN8S19565C7D2Ev();
Name_Map name_map_S19565C7[] = {
  NSPAIR(_ZN8S19565C7C1Ev),
  NSPAIR(_ZN8S19565C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
static Base_Class bases_S19565C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    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_S19565C4,    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_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19565C7[];
extern void _ZN8S19565C7D1Ev();
extern void _ZN8S19565C7D0Ev();
static  VTBL_ENTRY vtc_S19565C7[] = {
  ABISELECT(2288,1412),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C7[0]),
  (VTBL_ENTRY)&_ZN8S19565C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C7D0Ev,
};
extern VTBL_ENTRY _ZTV8S19565C7[];
static  VTBL_ENTRY _tg__ZTV8S19565C4__8S19565C7[] = {
  ABISELECT(2288,1412),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
static  VTT_ENTRY vtt_S19565C7[] = {
  {&(_ZTV8S19565C7[3]),  3,5},
  {&(_tg__ZTV8S19565C4__8S19565C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19565C7[];
extern  VTBL_ENTRY _ZTV8S19565C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C7[];
Class_Descriptor cd_S19565C7 = {  "S19565C7", // class name
  bases_S19565C7, 5,
  &(vtc_S19565C7[0]), // expected_vtbl_contents
  &(vtt_S19565C7[0]), // expected_vtt_contents
  ABISELECT(2648,1632), // object size
  NSPAIRA(_ZTI8S19565C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19565C7),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19565C7),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  S19565C3  : virtual S19565C4 , S19566C6 , S19566C5 , S19565C7 {
  int s19565c3f0;
  ::S19565C4 s19565c3f1;
  short s19565c3f2;
  void *s19565c3f3;
  int s19565c3f4[5];
  ~S19565C3(); // tgen
  S19565C3(); // tgen
};
//SIG(-1 S19565C3) C1{ VBC2{ VBC3{ m FL Fp FC4{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC4 FC3[3] Fi[4]} BC4 BC3 BC5{ BC2 BC4 BC3 vd FL[6] Fi FC3 Fp FC4 Fi Fp[7]} Fi FC2 Fs Fp Fi[5]}


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

static void Test_S19565C3()
{
  extern Class_Descriptor cd_S19565C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(746,918)];
    init_test(&cd_S19565C3, buf);
    S19565C3 *dp, &lv = *(dp=new (buf) S19565C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5960,3668), "sizeof(S19565C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19565C3)");
    /*is_ambiguous_... S19565C3::S19565C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C4*), ABISELECT(5600,3448), "S19565C3");
    check_base_class_offset(lv, (S19566C5*)(S19565C4*)(S19565C7*), ABISELECT(5600,3448), "S19565C3");
    /*is_ambiguous_... S19565C3::S19565C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C4*), ABISELECT(4392,2704), "S19565C3");
    /*is_ambiguous_... S19565C3::S19565C4 */ AMB_check_base_class_offset(lv, (S19565C4*), ABISELECT(4384,2700), "S19565C3");
    /*is_ambiguous_... S19565C3::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*), ABISELECT(2288,1412), "S19565C3");
    /*is_ambiguous_... S19565C3::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(2400,1480), "S19565C3");
    check_base_class_offset(lv, (S19566C6*)(S19565C4*)(S19565C7*), ABISELECT(8,4), "S19565C3");
    check_base_class_offset(lv, (S19565C4*)(S19565C7*), 0, "S19565C3");
    /*is_ambiguous_... S19565C7::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C7*), ABISELECT(1216,748), "S19565C3");
    /*is_ambiguous_... S19565C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C7*), ABISELECT(1328,816), "S19565C3");
    check_base_class_offset(lv, (S19565C7*), 0, "S19565C3");
    check_field_offset(lv, s19565c3f0, ABISELECT(2760,1700), "S19565C3.s19565c3f0");
    check_field_offset(lv, s19565c3f1, ABISELECT(2768,1704), "S19565C3.s19565c3f1");
    check_field_offset(lv, s19565c3f2, ABISELECT(4344,2672), "S19565C3.s19565c3f2");
    check_field_offset(lv, s19565c3f3, ABISELECT(4352,2676), "S19565C3.s19565c3f3");
    check_field_offset(lv, s19565c3f4, ABISELECT(4360,2680), "S19565C3.s19565c3f4");
    test_class_info(&lv, &cd_S19565C3);
    dp->~S19565C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19565C3(Test_S19565C3, "S19565C3", ABISELECT(5960,3668));

#else // __cplusplus

extern void _ZN8S19565C3C1Ev();
extern void _ZN8S19565C3D1Ev();
Name_Map name_map_S19565C3[] = {
  NSPAIR(_ZN8S19565C3C1Ev),
  NSPAIR(_ZN8S19565C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19565C7;
extern VTBL_ENTRY _ZTI8S19565C7[];
extern  VTBL_ENTRY _ZTV8S19565C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C7[];
static Base_Class bases_S19565C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(5600,3448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(4392,2704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C4,    ABISELECT(4384,2700), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19566C5,    ABISELECT(2400,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
  1, 0},
  {&cd_S19566C6,    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
    6, //immediately_derived
  0, 0},
  {&cd_S19565C4,    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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C7,    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 _ZTI8S19565C3[];
extern void _ZN8S19565C3D1Ev();
extern void _ZN8S19565C3D0Ev();
static  VTBL_ENTRY vtc_S19565C3[] = {
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C3[0]),
  (VTBL_ENTRY)&_ZN8S19565C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C3D0Ev,
  ABISELECT(1216,748),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI8S19565C3[0]),
};
extern VTBL_ENTRY _ZTV8S19565C3[];
extern void _ZN8S19565C7D1Ev();
extern void _ZN8S19565C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C7__8S19565C3[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C7[0]),
  (VTBL_ENTRY)&_ZN8S19565C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19565C48S19565C7__A1__8S19565C3[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__8S19565C3[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
static  VTT_ENTRY vtt_S19565C3[] = {
  {&(_ZTV8S19565C3[4]),  4,9},
  {&(_tg__ZTV8S19565C7__8S19565C3[3]),  3,5},
  {&(_tg__ZTV8S19565C48S19565C7__A1__8S19565C3[3]),  3,3},
  {&(_ZTV8S19565C3[9]),  9,9},
  {&(_tg__ZTV8S19565C4__8S19565C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19565C3[];
extern  VTBL_ENTRY _ZTV8S19565C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C3[];
Class_Descriptor cd_S19565C3 = {  "S19565C3", // class name
  bases_S19565C3, 10,
  &(vtc_S19565C3[0]), // expected_vtbl_contents
  &(vtt_S19565C3[0]), // expected_vtt_contents
  ABISELECT(5960,3668), // object size
  NSPAIRA(_ZTI8S19565C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19565C3),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19565C3),5, //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  S19565C2  : S19565C3 , S19565C4 , S19565C7 , S19566C5 {
  ::S3052C22_nt s19565c2f0;
  int s19565c2f1[2];
  long s19565c2f2;
  void *s19565c2f3;
  virtual  ~S19565C2(); // _ZN8S19565C2D2Ev
  virtual void  v1(); // _ZN8S19565C22v1Ev
  S19565C2(); // tgen
};
//SIG(-1 S19565C2) C1{ BC2{ VBC3{ VBC4{ m FL Fp FC5{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC5 FC4[3] Fi[4]} BC5 BC4 BC6{ BC3 BC5 BC4 vd FL[6] Fi FC4 Fp FC5 Fi Fp[7]} Fi FC3 Fs Fp Fi[5]} BC3 BC6 BC4 vd v1 FC7{} Fi[2] Fl Fp}


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

static void Test_S19565C2()
{
  extern Class_Descriptor cd_S19565C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1233,1518)];
    init_test(&cd_S19565C2, buf);
    S19565C2 *dp, &lv = *(dp=new (buf) S19565C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9856,6068), "sizeof(S19565C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19565C2)");
    /*is_ambiguous_... S19565C2::S19565C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C4*), ABISELECT(9496,5848), "S19565C2");
    check_base_class_offset(lv, (S19566C5*)(S19565C4*)(S19565C7*)(S19565C3*), ABISELECT(9496,5848), "S19565C2");
    /*is_ambiguous_... S19565C2::S19565C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C4*), ABISELECT(9496,5848), "S19565C2");
    /*is_ambiguous_... S19565C2::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C4*)(S19565C7*), ABISELECT(9496,5848), "S19565C2");
    /*is_ambiguous_... S19565C2::S19565C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C4*), ABISELECT(8288,5104), "S19565C2");
    /*is_ambiguous_... S19565C3::S19565C4 */ AMB_check_base_class_offset(lv, (S19565C4*)(S19565C3*), ABISELECT(8280,5100), "S19565C2");
    /*is_ambiguous_... S19565C3::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C3*), ABISELECT(2288,1412), "S19565C2");
    /*is_ambiguous_... S19565C3::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C3*), ABISELECT(2400,1480), "S19565C2");
    check_base_class_offset(lv, (S19566C6*)(S19565C4*)(S19565C7*)(S19565C3*), ABISELECT(8,4), "S19565C2");
    check_base_class_offset(lv, (S19565C4*)(S19565C7*)(S19565C3*), 0, "S19565C2");
    /*is_ambiguous_... S19565C7::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C7*)(S19565C3*), ABISELECT(1216,748), "S19565C2");
    /*is_ambiguous_... S19565C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C7*)(S19565C3*), ABISELECT(1328,816), "S19565C2");
    check_base_class_offset(lv, (S19565C7*)(S19565C3*), 0, "S19565C2");
    check_base_class_offset(lv, (S19565C3*), 0, "S19565C2");
    /*is_ambiguous_... S19565C2::S19565C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C4*), ABISELECT(4392,2704), "S19565C2");
    /*is_ambiguous_... S19565C2::S19565C4 */ AMB_check_base_class_offset(lv, (S19565C4*), ABISELECT(4384,2700), "S19565C2");
    /*is_ambiguous_... S19565C2::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C4*)(S19565C7*), ABISELECT(5608,3452), "S19565C2");
    /*is_ambiguous_... S19565C2::S19565C7 */ AMB_check_base_class_offset(lv, (S19565C4*)(S19565C7*), ABISELECT(5600,3448), "S19565C2");
    /*is_ambiguous_... S19565C2::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C7*), ABISELECT(6816,4196), "S19565C2");
    /*is_ambiguous_... S19565C2::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C7*), ABISELECT(6928,4264), "S19565C2");
    /*is_ambiguous_... S19565C2::S19565C7 */ AMB_check_base_class_offset(lv, (S19565C7*), ABISELECT(5600,3448), "S19565C2");
    /*is_ambiguous_... S19565C2::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(7888,4860), "S19565C2");
    check_field_offset(lv, s19565c2f0, ABISELECT(8248,5080), "S19565C2.s19565c2f0");
    check_field_offset(lv, s19565c2f1, ABISELECT(8252,5084), "S19565C2.s19565c2f1");
    check_field_offset(lv, s19565c2f2, ABISELECT(8264,5092), "S19565C2.s19565c2f2");
    check_field_offset(lv, s19565c2f3, ABISELECT(8272,5096), "S19565C2.s19565c2f3");
    test_class_info(&lv, &cd_S19565C2);
    dp->~S19565C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19565C2(Test_S19565C2, "S19565C2", ABISELECT(9856,6068));

#else // __cplusplus

extern void _ZN8S19565C2C1Ev();
extern void _ZN8S19565C2D2Ev();
Name_Map name_map_S19565C2[] = {
  NSPAIR(_ZN8S19565C2C1Ev),
  NSPAIR(_ZN8S19565C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19565C7;
extern VTBL_ENTRY _ZTI8S19565C7[];
extern  VTBL_ENTRY _ZTV8S19565C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C7[];
extern Class_Descriptor cd_S19565C3;
extern VTBL_ENTRY _ZTI8S19565C3[];
extern  VTBL_ENTRY _ZTV8S19565C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19565C7;
extern VTBL_ENTRY _ZTI8S19565C7[];
extern  VTBL_ENTRY _ZTV8S19565C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C7[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
static Base_Class bases_S19565C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(9496,5848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(8288,5104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C4,    ABISELECT(8280,5100), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(2400,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
    10, //immediately_derived
  0, 0},
  {&cd_S19566C6,    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
    6, //immediately_derived
  0, 0},
  {&cd_S19565C4,    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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C7,    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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19565C3,    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_S19566C6,    ABISELECT(4392,2704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C4,    ABISELECT(4384,2700), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19566C6,    ABISELECT(5608,3452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C4,    ABISELECT(5600,3448), //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
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(6816,4196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(6928,4264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C7,    ABISELECT(5600,3448), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19566C5,    ABISELECT(7888,4860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19565C2[];
extern void _ZN8S19565C2D1Ev();
extern void _ZN8S19565C2D0Ev();
extern void _ZN8S19565C22v1Ev();
extern void ABISELECT(_ZThn5600_N8S19565C2D1Ev,_ZThn3448_N8S19565C2D1Ev)();
extern void ABISELECT(_ZThn5600_N8S19565C2D0Ev,_ZThn3448_N8S19565C2D0Ev)();
static  VTBL_ENTRY vtc_S19565C2[] = {
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C2[0]),
  (VTBL_ENTRY)&_ZN8S19565C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19565C22v1Ev,
  ABISELECT(5112,3148),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI8S19565C2[0]),
  ABISELECT(3896,2400),
  ABISELECT(-5600,-3448),
  (VTBL_ENTRY)&(_ZTI8S19565C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S19565C2D1Ev,_ZThn3448_N8S19565C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S19565C2D0Ev,_ZThn3448_N8S19565C2D0Ev),
  ABISELECT(1216,748),
  ABISELECT(-8280,-5100),
  (VTBL_ENTRY)&(_ZTI8S19565C2[0]),
};
extern VTBL_ENTRY _ZTV8S19565C2[];
extern void _ZN8S19565C3D1Ev();
extern void _ZN8S19565C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C3__8S19565C2[] = {
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C3[0]),
  (VTBL_ENTRY)&_ZN8S19565C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C3D0Ev,
};
extern void _ZN8S19565C7D1Ev();
extern void _ZN8S19565C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C78S19565C3__8S19565C2[] = {
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C7[0]),
  (VTBL_ENTRY)&_ZN8S19565C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19565C48S19565C78S19565C3__A1__8S19565C2[] = {
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__8S19565C3__8S19565C2[] = {
  ABISELECT(1216,748),
  ABISELECT(-8280,-5100),
  (VTBL_ENTRY)&(_ZTI8S19565C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__A__8S19565C2[] = {
  ABISELECT(5112,3148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
extern void _ZN8S19565C7D1Ev();
extern void _ZN8S19565C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C7__A1__8S19565C2[] = {
  ABISELECT(3896,2400),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C7[0]),
  (VTBL_ENTRY)&_ZN8S19565C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19565C48S19565C7__A3__8S19565C2[] = {
  ABISELECT(3896,2400),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__8S19565C2[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
static  VTT_ENTRY vtt_S19565C2[] = {
  {&(_ZTV8S19565C2[4]),  4,18},
  {&(_tg__ZTV8S19565C3__8S19565C2[4]),  4,6},
  {&(_tg__ZTV8S19565C78S19565C3__8S19565C2[3]),  3,5},
  {&(_tg__ZTV8S19565C48S19565C78S19565C3__A1__8S19565C2[3]),  3,3},
  {&(_tg__ZTV8S19565C4__8S19565C3__8S19565C2[3]),  3,3},
  {&(_tg__ZTV8S19565C4__A__8S19565C2[3]),  3,3},
  {&(_tg__ZTV8S19565C7__A1__8S19565C2[3]),  3,5},
  {&(_tg__ZTV8S19565C48S19565C7__A3__8S19565C2[3]),  3,3},
  {&(_ZTV8S19565C2[18]),  18,18},
  {&(_ZTV8S19565C2[10]),  10,18},
  {&(_ZTV8S19565C2[13]),  13,18},
  {&(_tg__ZTV8S19565C4__8S19565C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19565C2[];
extern  VTBL_ENTRY _ZTV8S19565C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C2[];
Class_Descriptor cd_S19565C2 = {  "S19565C2", // class name
  bases_S19565C2, 19,
  &(vtc_S19565C2[0]), // expected_vtbl_contents
  &(vtt_S19565C2[0]), // expected_vtt_contents
  ABISELECT(9856,6068), // object size
  NSPAIRA(_ZTI8S19565C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19565C2),18, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19565C2),12, //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  S19565C10  : virtual S19565C3 , virtual S19565C7 , virtual S19565C2 , S19566C5 , virtual S19566C11 {
  int s19565c10f0;
  virtual  ~S19565C10(); // _ZN9S19565C10D2Ev
  virtual void  v2(); // _ZN9S19565C102v2Ev
  S19565C10(); // tgen
};
//SIG(-1 S19565C10) C1{ VBC2{ VBC3{ VBC4{ m FL Fp FC5{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC5 FC4[3] Fi[4]} BC5 BC4 BC6{ BC3 BC5 BC4 vd FL[6] Fi FC4 Fp FC5 Fi Fp[7]} Fi FC3 Fs Fp Fi[5]} VBC6 VBC7{ BC2 BC3 BC6 BC4 vd v2 FC8{} Fi[2] Fl Fp} BC4 VBC9{ m Fp Fc Fi:6 Fl FC8 Fi} vd v1 Fi}


 S19565C10 ::~S19565C10(){ note_dtor("S19565C10", this);}
void  S19565C10 ::v2(){vfunc_called(this, "_ZN9S19565C102v2Ev");}
S19565C10 ::S19565C10(){ note_ctor("S19565C10", this);} // tgen

static void Test_S19565C10()
{
  extern Class_Descriptor cd_S19565C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2118,2608)];
    init_test(&cd_S19565C10, buf);
    S19565C10 *dp, &lv = *(dp=new (buf) S19565C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16936,10428), "sizeof(S19565C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19565C10)");
    /*is_ambiguous_... S19565C10::S19565C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C4*), ABISELECT(5976,3676), "S19565C10");
    /*is_ambiguous_... S19565C10::S19565C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C4*)(S19565C7*)(S19565C3*), ABISELECT(5976,3676), "S19565C10");
    /*is_ambiguous_... S19565C10::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C4*)(S19565C7*), ABISELECT(5976,3676), "S19565C10");
    check_base_class_offset(lv, (S19566C5*)(S19565C4*)(S19565C7*)(S19565C3*)(S19565C2*), ABISELECT(5976,3676), "S19565C10");
    /*is_ambiguous_... S19565C2::S19565C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C4*)(S19565C2*), ABISELECT(5976,3676), "S19565C10");
    /*is_ambiguous_... S19565C2::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C4*)(S19565C7*)(S19565C2*), ABISELECT(5976,3676), "S19565C10");
    /*is_ambiguous_... S19565C10::S19565C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C4*), ABISELECT(4768,2932), "S19565C10");
    /*is_ambiguous_... S19565C10::S19565C3 */ AMB_check_base_class_offset(lv, (S19565C4*)(S19565C3*), ABISELECT(4760,2928), "S19565C10");
    /*is_ambiguous_... S19565C3::S19565C4 */ AMB_check_base_class_offset(lv, (S19565C4*)(S19565C3*)(S19565C2*), ABISELECT(4760,2928), "S19565C10");
    /*is_ambiguous_... S19565C10::S19565C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C3*), ABISELECT(2664,1640), "S19565C10");
    /*is_ambiguous_... S19565C10::S19565C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C3*), ABISELECT(2776,1708), "S19565C10");
    /*is_ambiguous_... S19565C10::S19565C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C4*)(S19565C7*)(S19565C3*), ABISELECT(384,232), "S19565C10");
    /*is_ambiguous_... S19565C10::S19565C3 */ AMB_check_base_class_offset(lv, (S19565C4*)(S19565C7*)(S19565C3*), ABISELECT(376,228), "S19565C10");
    /*is_ambiguous_... S19565C10::S19565C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C7*)(S19565C3*), ABISELECT(1592,976), "S19565C10");
    /*is_ambiguous_... S19565C10::S19565C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C7*)(S19565C3*), ABISELECT(1704,1044), "S19565C10");
    /*is_ambiguous_... S19565C10::S19565C3 */ AMB_check_base_class_offset(lv, (S19565C7*)(S19565C3*), ABISELECT(376,228), "S19565C10");
    /*is_ambiguous_... S19565C10::S19565C3 */ AMB_check_base_class_offset(lv, (S19565C3*), ABISELECT(376,228), "S19565C10");
    /*is_ambiguous_... S19565C10::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C4*)(S19565C7*), ABISELECT(6344,3900), "S19565C10");
    /*is_ambiguous_... S19565C10::S19565C7 */ AMB_check_base_class_offset(lv, (S19565C4*)(S19565C7*), ABISELECT(6336,3896), "S19565C10");
    /*is_ambiguous_... S19565C10::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C7*), ABISELECT(7552,4644), "S19565C10");
    /*is_ambiguous_... S19565C10::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C7*), ABISELECT(7664,4712), "S19565C10");
    /*is_ambiguous_... S19565C10::S19565C7 */ AMB_check_base_class_offset(lv, (S19565C7*), ABISELECT(6336,3896), "S19565C10");
    /*is_ambiguous_... S19565C3::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C3*)(S19565C2*), ABISELECT(10912,6720), "S19565C10");
    /*is_ambiguous_... S19565C3::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C3*)(S19565C2*), ABISELECT(11024,6788), "S19565C10");
    check_base_class_offset(lv, (S19566C6*)(S19565C4*)(S19565C7*)(S19565C3*)(S19565C2*), ABISELECT(8632,5312), "S19565C10");
    check_base_class_offset(lv, (S19565C4*)(S19565C7*)(S19565C3*)(S19565C2*), ABISELECT(8624,5308), "S19565C10");
    /*is_ambiguous_... S19565C7::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C7*)(S19565C3*)(S19565C2*), ABISELECT(9840,6056), "S19565C10");
    /*is_ambiguous_... S19565C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C7*)(S19565C3*)(S19565C2*), ABISELECT(9952,6124), "S19565C10");
    check_base_class_offset(lv, (S19565C7*)(S19565C3*)(S19565C2*), ABISELECT(8624,5308), "S19565C10");
    check_base_class_offset(lv, (S19565C3*)(S19565C2*), ABISELECT(8624,5308), "S19565C10");
    /*is_ambiguous_... S19565C2::S19565C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C4*)(S19565C2*), ABISELECT(13016,8012), "S19565C10");
    /*is_ambiguous_... S19565C2::S19565C4 */ AMB_check_base_class_offset(lv, (S19565C4*)(S19565C2*), ABISELECT(13008,8008), "S19565C10");
    /*is_ambiguous_... S19565C2::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C4*)(S19565C7*)(S19565C2*), ABISELECT(14232,8760), "S19565C10");
    /*is_ambiguous_... S19565C2::S19565C7 */ AMB_check_base_class_offset(lv, (S19565C4*)(S19565C7*)(S19565C2*), ABISELECT(14224,8756), "S19565C10");
    /*is_ambiguous_... S19565C2::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C7*)(S19565C2*), ABISELECT(15440,9504), "S19565C10");
    /*is_ambiguous_... S19565C2::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C7*)(S19565C2*), ABISELECT(15552,9572), "S19565C10");
    /*is_ambiguous_... S19565C2::S19565C7 */ AMB_check_base_class_offset(lv, (S19565C7*)(S19565C2*), ABISELECT(14224,8756), "S19565C10");
    /*is_ambiguous_... S19565C2::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C2*), ABISELECT(16512,10168), "S19565C10");
    check_base_class_offset(lv, (S19565C2*), ABISELECT(8624,5308), "S19565C10");
    /*is_ambiguous_... S19565C10::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(8,4), "S19565C10");
    check_base_class_offset(lv, (S19566C11*), ABISELECT(16904,10408), "S19565C10");
    check_field_offset(lv, s19565c10f0, ABISELECT(368,224), "S19565C10.s19565c10f0");
    test_class_info(&lv, &cd_S19565C10);
    dp->~S19565C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19565C10(Test_S19565C10, "S19565C10", ABISELECT(16936,10428));

#else // __cplusplus

extern void _ZN9S19565C10C1Ev();
extern void _ZN9S19565C10D2Ev();
Name_Map name_map_S19565C10[] = {
  NSPAIR(_ZN9S19565C10C1Ev),
  NSPAIR(_ZN9S19565C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19565C7;
extern VTBL_ENTRY _ZTI8S19565C7[];
extern  VTBL_ENTRY _ZTV8S19565C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C7[];
extern Class_Descriptor cd_S19565C3;
extern VTBL_ENTRY _ZTI8S19565C3[];
extern  VTBL_ENTRY _ZTV8S19565C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19565C7;
extern VTBL_ENTRY _ZTI8S19565C7[];
extern  VTBL_ENTRY _ZTV8S19565C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19565C7;
extern VTBL_ENTRY _ZTI8S19565C7[];
extern  VTBL_ENTRY _ZTV8S19565C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C7[];
extern Class_Descriptor cd_S19565C3;
extern VTBL_ENTRY _ZTI8S19565C3[];
extern  VTBL_ENTRY _ZTV8S19565C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19565C7;
extern VTBL_ENTRY _ZTI8S19565C7[];
extern  VTBL_ENTRY _ZTV8S19565C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C7[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19565C2;
extern VTBL_ENTRY _ZTI8S19565C2[];
extern  VTBL_ENTRY _ZTV8S19565C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C2[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C11;
extern VTBL_ENTRY _ZTI9S19566C11[];
static Base_Class bases_S19565C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(5976,3676), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(4768,2932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C4,    ABISELECT(4760,2928), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(2664,1640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(2776,1708), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(384,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
    6, //immediately_derived
  0, 0},
  {&cd_S19565C4,    ABISELECT(376,228), //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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1592,976), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1704,1044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C7,    ABISELECT(376,228), //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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19565C3,    ABISELECT(376,228), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(6344,3900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C4,    ABISELECT(6336,3896), //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
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(7552,4644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 0},
  {&cd_S19566C5,    ABISELECT(7664,4712), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 0},
  {&cd_S19565C7,    ABISELECT(6336,3896), //bcp->offset
    21, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(10912,6720), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(11024,6788), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(8632,5312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C4,    ABISELECT(8624,5308), //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
    7, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(9840,6056), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(9952,6124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C7,    ABISELECT(8624,5308), //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
    8, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19565C3,    ABISELECT(8624,5308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(13016,8012), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C4,    ABISELECT(13008,8008), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(14232,8760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19565C4,    ABISELECT(14224,8756), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(15440,9504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(15552,9572), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C7,    ABISELECT(14224,8756), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(16512,10168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C2,    ABISELECT(8624,5308), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C5,    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_S19566C11,    ABISELECT(16904,10408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S19565C10[];
extern void _ZN9S19565C10D1Ev();
extern void _ZN9S19565C10D0Ev();
extern void _ZN9S19565C102v2Ev();
extern void ABISELECT(_ZTv0_n40_N9S19565C10D1Ev,_ZTv0_n20_N9S19565C10D1Ev)();
extern void ABISELECT(_ZThn376_N9S19565C10D1Ev,_ZThn228_N9S19565C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19565C10D0Ev,_ZTv0_n20_N9S19565C10D0Ev)();
extern void ABISELECT(_ZThn376_N9S19565C10D0Ev,_ZThn228_N9S19565C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19565C10D1Ev,_ZTv0_n16_N9S19565C10D1Ev)();
extern void ABISELECT(_ZThn6336_N9S19565C10D1Ev,_ZThn3896_N9S19565C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19565C10D0Ev,_ZTv0_n16_N9S19565C10D0Ev)();
extern void ABISELECT(_ZThn6336_N9S19565C10D0Ev,_ZThn3896_N9S19565C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19565C10D1Ev,_ZTv0_n20_N9S19565C10D1Ev)();
extern void ABISELECT(_ZThn8624_N9S19565C10D1Ev,_ZThn5308_N9S19565C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19565C10D0Ev,_ZTv0_n20_N9S19565C10D0Ev)();
extern void ABISELECT(_ZThn8624_N9S19565C10D0Ev,_ZThn5308_N9S19565C10D0Ev)() __attribute__((weak));
extern void _ZN8S19565C22v1Ev();
extern void ABISELECT(_ZTvn5600_n40_N9S19565C10D1Ev,_ZTvn3448_n20_N9S19565C10D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N9S19565C10D0Ev,_ZTvn3448_n20_N9S19565C10D0Ev)();
static  VTBL_ENTRY vtc_S19565C10[] = {
  ABISELECT(16904,10408),
  ABISELECT(8624,5308),
  ABISELECT(6336,3896),
  ABISELECT(5976,3676),
  ABISELECT(4760,2928),
  ABISELECT(376,228),
  0,
  (VTBL_ENTRY)&(_ZTI9S19565C10[0]),
  (VTBL_ENTRY)&_ZN9S19565C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19565C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19565C102v2Ev,
  ABISELECT(-376,-228),
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  ABISELECT(-376,-228),
  (VTBL_ENTRY)&(_ZTI9S19565C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19565C10D1Ev,_ZTv0_n20_N9S19565C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19565C10D0Ev,_ZTv0_n20_N9S19565C10D0Ev),
  ABISELECT(1216,748),
  ABISELECT(-4760,-2928),
  (VTBL_ENTRY)&(_ZTI9S19565C10[0]),
  ABISELECT(-6336,-3896),
  ABISELECT(-360,-220),
  ABISELECT(-6336,-3896),
  (VTBL_ENTRY)&(_ZTI9S19565C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19565C10D1Ev,_ZTv0_n16_N9S19565C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19565C10D0Ev,_ZTv0_n16_N9S19565C10D0Ev),
  0,
  ABISELECT(-8624,-5308),
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  ABISELECT(-8624,-5308),
  (VTBL_ENTRY)&(_ZTI9S19565C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19565C10D1Ev,_ZTv0_n20_N9S19565C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19565C10D0Ev,_ZTv0_n20_N9S19565C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19565C22v1Ev,
  ABISELECT(-7032,-4332),
  ABISELECT(-13008,-8008),
  (VTBL_ENTRY)&(_ZTI9S19565C10[0]),
  ABISELECT(-8248,-5080),
  ABISELECT(-14224,-8756),
  (VTBL_ENTRY)&(_ZTI9S19565C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N9S19565C10D1Ev,_ZTvn3448_n20_N9S19565C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N9S19565C10D0Ev,_ZTvn3448_n20_N9S19565C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S19565C10[];
extern void _ZN8S19565C3D1Ev();
extern void _ZN8S19565C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C3__9S19565C10[] = {
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C3[0]),
  (VTBL_ENTRY)&_ZN8S19565C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C3D0Ev,
};
extern void _ZN8S19565C7D1Ev();
extern void _ZN8S19565C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C78S19565C3__9S19565C10[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C7[0]),
  (VTBL_ENTRY)&_ZN8S19565C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19565C48S19565C78S19565C3__A1__9S19565C10[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__8S19565C3__9S19565C10[] = {
  ABISELECT(1216,748),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI8S19565C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__9S19565C10[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
extern void _ZN8S19565C7D1Ev();
extern void _ZN8S19565C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C7__A1__9S19565C10[] = {
  ABISELECT(-360,-220),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C7[0]),
  (VTBL_ENTRY)&_ZN8S19565C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19565C48S19565C7__A2__9S19565C10[] = {
  ABISELECT(-360,-220),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
extern void _ZN8S19565C2D1Ev();
extern void _ZN8S19565C2D0Ev();
extern void _ZN8S19565C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C2__9S19565C10[] = {
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C2[0]),
  (VTBL_ENTRY)&_ZN8S19565C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19565C22v1Ev,
};
extern void _ZN8S19565C3D1Ev();
extern void _ZN8S19565C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C38S19565C2__A1__9S19565C10[] = {
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C3[0]),
  (VTBL_ENTRY)&_ZN8S19565C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C3D0Ev,
};
extern void _ZN8S19565C7D1Ev();
extern void _ZN8S19565C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C78S19565C38S19565C2__A2__9S19565C10[] = {
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C7[0]),
  (VTBL_ENTRY)&_ZN8S19565C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19565C48S19565C78S19565C38S19565C2__A3__9S19565C10[] = {
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__8S19565C38S19565C2__A1__9S19565C10[] = {
  ABISELECT(1216,748),
  ABISELECT(3864,2380),
  (VTBL_ENTRY)&(_ZTI8S19565C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C48S19565C2__A4__9S19565C10[] = {
  ABISELECT(-7032,-4332),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
extern void _ZN8S19565C7D1Ev();
extern void _ZN8S19565C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C78S19565C2__A3__9S19565C10[] = {
  ABISELECT(-8248,-5080),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C7[0]),
  (VTBL_ENTRY)&_ZN8S19565C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19565C48S19565C78S19565C2__A5__9S19565C10[] = {
  ABISELECT(-8248,-5080),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__8S19565C2__9S19565C10[] = {
  ABISELECT(1216,748),
  ABISELECT(3864,2380),
  (VTBL_ENTRY)&(_ZTI8S19565C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__A__8S19565C2__9S19565C10[] = {
  ABISELECT(-7032,-4332),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI8S19565C2[0]),
};
extern void ABISELECT(_ZThn5600_N8S19565C2D1Ev,_ZThn3448_N8S19565C2D1Ev)();
extern void ABISELECT(_ZThn5600_N8S19565C2D0Ev,_ZThn3448_N8S19565C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19565C7__A1__8S19565C2__9S19565C10[] = {
  ABISELECT(-8248,-5080),
  ABISELECT(-5600,-3448),
  (VTBL_ENTRY)&(_ZTI8S19565C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S19565C2D1Ev,_ZThn3448_N8S19565C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S19565C2D0Ev,_ZThn3448_N8S19565C2D0Ev),
};
static  VTT_ENTRY vtt_S19565C10[] = {
  {&(_ZTV9S19565C10[8]),  8,44},
  {&(_ZTV9S19565C10[16]),  16,44},
  {&(_ZTV9S19565C10[21]),  21,44},
  {&(_ZTV9S19565C10[25]),  25,44},
  {&(_ZTV9S19565C10[33]),  33,44},
  {&(_ZTV9S19565C10[39]),  39,44},
  {&(_ZTV9S19565C10[42]),  42,44},
  {&(_tg__ZTV8S19565C3__9S19565C10[4]),  4,6},
  {&(_tg__ZTV8S19565C78S19565C3__9S19565C10[3]),  3,5},
  {&(_tg__ZTV8S19565C48S19565C78S19565C3__A1__9S19565C10[3]),  3,3},
  {&(_tg__ZTV8S19565C4__8S19565C3__9S19565C10[3]),  3,3},
  {&(_tg__ZTV8S19565C4__9S19565C10[3]),  3,3},
  {&(_tg__ZTV8S19565C7__A1__9S19565C10[3]),  3,5},
  {&(_tg__ZTV8S19565C48S19565C7__A2__9S19565C10[3]),  3,3},
  {&(_tg__ZTV8S19565C2__9S19565C10[4]),  4,7},
  {&(_tg__ZTV8S19565C38S19565C2__A1__9S19565C10[4]),  4,6},
  {&(_tg__ZTV8S19565C78S19565C38S19565C2__A2__9S19565C10[3]),  3,5},
  {&(_tg__ZTV8S19565C48S19565C78S19565C38S19565C2__A3__9S19565C10[3]),  3,3},
  {&(_tg__ZTV8S19565C4__8S19565C38S19565C2__A1__9S19565C10[3]),  3,3},
  {&(_tg__ZTV8S19565C48S19565C2__A4__9S19565C10[3]),  3,3},
  {&(_tg__ZTV8S19565C78S19565C2__A3__9S19565C10[3]),  3,5},
  {&(_tg__ZTV8S19565C48S19565C78S19565C2__A5__9S19565C10[3]),  3,3},
  {&(_tg__ZTV8S19565C4__8S19565C2__9S19565C10[3]),  3,3},
  {&(_tg__ZTV8S19565C4__A__8S19565C2__9S19565C10[3]),  3,3},
  {&(_tg__ZTV8S19565C7__A1__8S19565C2__9S19565C10[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19565C10[];
extern  VTBL_ENTRY _ZTV9S19565C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19565C10[];
static VTBL_ENTRY alt_thunk_names81[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19565C10D0Ev,_ZTv0_n16_N9S19565C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6336_N9S19565C10D0Ev,_ZThn3896_N9S19565C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19565C10D1Ev,_ZTv0_n16_N9S19565C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6336_N9S19565C10D1Ev,_ZThn3896_N9S19565C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19565C10D0Ev,_ZTv0_n20_N9S19565C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8624_N9S19565C10D0Ev,_ZThn5308_N9S19565C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn376_N9S19565C10D0Ev,_ZThn228_N9S19565C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19565C10D1Ev,_ZTv0_n20_N9S19565C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8624_N9S19565C10D1Ev,_ZThn5308_N9S19565C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn376_N9S19565C10D1Ev,_ZThn228_N9S19565C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19565C10 = {  "S19565C10", // class name
  bases_S19565C10, 35,
  &(vtc_S19565C10[0]), // expected_vtbl_contents
  &(vtt_S19565C10[0]), // expected_vtt_contents
  ABISELECT(16936,10428), // object size
  NSPAIRA(_ZTI9S19565C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19565C10),44, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19565C10),25, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names81,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19565C9  : virtual S19565C10 {
  short s19565c9f0;
  virtual void  v3(); // _ZN8S19565C92v3Ev
  ~S19565C9(); // tgen
  S19565C9(); // tgen
};
//SIG(-1 S19565C9) C1{ VBC2{ VBC3{ VBC4{ VBC5{ m FL Fp FC6{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC6 FC5[3] Fi[4]} BC6 BC5 BC7{ BC4 BC6 BC5 vd FL[6] Fi FC5 Fp FC6 Fi Fp[7]} Fi FC4 Fs Fp Fi[5]} VBC7 VBC8{ BC3 BC4 BC7 BC5 vd v2 FC9{} Fi[2] Fl Fp} BC5 VBC10{ m Fp Fc Fi:6 Fl FC9 Fi} vd v3 Fi} v1 Fs}


void  S19565C9 ::v3(){vfunc_called(this, "_ZN8S19565C92v3Ev");}
S19565C9 ::~S19565C9(){ note_dtor("S19565C9", this);} // tgen
S19565C9 ::S19565C9(){ note_ctor("S19565C9", this);} // tgen

static void Test_S19565C9()
{
  extern Class_Descriptor cd_S19565C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2120,2610)];
    init_test(&cd_S19565C9, buf);
    S19565C9 *dp, &lv = *(dp=new (buf) S19565C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16952,10436), "sizeof(S19565C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19565C9)");
    /*is_ambiguous_... S19565C9::S19565C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C4*), ABISELECT(5992,3684), "S19565C9");
    /*is_ambiguous_... S19565C9::S19565C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C4*)(S19565C7*)(S19565C3*), ABISELECT(5992,3684), "S19565C9");
    /*is_ambiguous_... S19565C9::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C4*)(S19565C7*), ABISELECT(5992,3684), "S19565C9");
    check_base_class_offset(lv, (S19566C5*)(S19565C4*)(S19565C7*)(S19565C3*)(S19565C2*), ABISELECT(5992,3684), "S19565C9");
    /*is_ambiguous_... S19565C2::S19565C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C4*)(S19565C2*), ABISELECT(5992,3684), "S19565C9");
    /*is_ambiguous_... S19565C2::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C4*)(S19565C7*)(S19565C2*), ABISELECT(5992,3684), "S19565C9");
    /*is_ambiguous_... S19565C9::S19565C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C4*), ABISELECT(4784,2940), "S19565C9");
    /*is_ambiguous_... S19565C9::S19565C3 */ AMB_check_base_class_offset(lv, (S19565C4*)(S19565C3*), ABISELECT(4776,2936), "S19565C9");
    /*is_ambiguous_... S19565C3::S19565C4 */ AMB_check_base_class_offset(lv, (S19565C4*)(S19565C3*)(S19565C2*), ABISELECT(4776,2936), "S19565C9");
    /*is_ambiguous_... S19565C9::S19565C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C3*), ABISELECT(2680,1648), "S19565C9");
    /*is_ambiguous_... S19565C9::S19565C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C3*), ABISELECT(2792,1716), "S19565C9");
    /*is_ambiguous_... S19565C9::S19565C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C4*)(S19565C7*)(S19565C3*), ABISELECT(400,240), "S19565C9");
    /*is_ambiguous_... S19565C9::S19565C3 */ AMB_check_base_class_offset(lv, (S19565C4*)(S19565C7*)(S19565C3*), ABISELECT(392,236), "S19565C9");
    /*is_ambiguous_... S19565C9::S19565C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C7*)(S19565C3*), ABISELECT(1608,984), "S19565C9");
    /*is_ambiguous_... S19565C9::S19565C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C7*)(S19565C3*), ABISELECT(1720,1052), "S19565C9");
    /*is_ambiguous_... S19565C9::S19565C3 */ AMB_check_base_class_offset(lv, (S19565C7*)(S19565C3*), ABISELECT(392,236), "S19565C9");
    /*is_ambiguous_... S19565C10::S19565C3 */ AMB_check_base_class_offset(lv, (S19565C3*)(S19565C10*), ABISELECT(392,236), "S19565C9");
    /*is_ambiguous_... S19565C9::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C4*)(S19565C7*), ABISELECT(6360,3908), "S19565C9");
    /*is_ambiguous_... S19565C9::S19565C7 */ AMB_check_base_class_offset(lv, (S19565C4*)(S19565C7*), ABISELECT(6352,3904), "S19565C9");
    /*is_ambiguous_... S19565C9::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C7*), ABISELECT(7568,4652), "S19565C9");
    /*is_ambiguous_... S19565C9::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C7*), ABISELECT(7680,4720), "S19565C9");
    /*is_ambiguous_... S19565C10::S19565C7 */ AMB_check_base_class_offset(lv, (S19565C7*)(S19565C10*), ABISELECT(6352,3904), "S19565C9");
    /*is_ambiguous_... S19565C3::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C3*)(S19565C2*), ABISELECT(10928,6728), "S19565C9");
    /*is_ambiguous_... S19565C3::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C3*)(S19565C2*), ABISELECT(11040,6796), "S19565C9");
    check_base_class_offset(lv, (S19566C6*)(S19565C4*)(S19565C7*)(S19565C3*)(S19565C2*), ABISELECT(8648,5320), "S19565C9");
    check_base_class_offset(lv, (S19565C4*)(S19565C7*)(S19565C3*)(S19565C2*), ABISELECT(8640,5316), "S19565C9");
    /*is_ambiguous_... S19565C7::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C7*)(S19565C3*)(S19565C2*), ABISELECT(9856,6064), "S19565C9");
    /*is_ambiguous_... S19565C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C7*)(S19565C3*)(S19565C2*), ABISELECT(9968,6132), "S19565C9");
    check_base_class_offset(lv, (S19565C7*)(S19565C3*)(S19565C2*), ABISELECT(8640,5316), "S19565C9");
    check_base_class_offset(lv, (S19565C3*)(S19565C2*), ABISELECT(8640,5316), "S19565C9");
    /*is_ambiguous_... S19565C2::S19565C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C4*)(S19565C2*), ABISELECT(13032,8020), "S19565C9");
    /*is_ambiguous_... S19565C2::S19565C4 */ AMB_check_base_class_offset(lv, (S19565C4*)(S19565C2*), ABISELECT(13024,8016), "S19565C9");
    /*is_ambiguous_... S19565C2::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C4*)(S19565C7*)(S19565C2*), ABISELECT(14248,8768), "S19565C9");
    /*is_ambiguous_... S19565C2::S19565C7 */ AMB_check_base_class_offset(lv, (S19565C4*)(S19565C7*)(S19565C2*), ABISELECT(14240,8764), "S19565C9");
    /*is_ambiguous_... S19565C2::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C7*)(S19565C2*), ABISELECT(15456,9512), "S19565C9");
    /*is_ambiguous_... S19565C2::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C7*)(S19565C2*), ABISELECT(15568,9580), "S19565C9");
    /*is_ambiguous_... S19565C2::S19565C7 */ AMB_check_base_class_offset(lv, (S19565C7*)(S19565C2*), ABISELECT(14240,8764), "S19565C9");
    /*is_ambiguous_... S19565C2::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C2*), ABISELECT(16528,10176), "S19565C9");
    check_base_class_offset(lv, (S19565C2*)(S19565C10*), ABISELECT(8640,5316), "S19565C9");
    /*is_ambiguous_... S19565C10::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C10*), ABISELECT(24,12), "S19565C9");
    check_base_class_offset(lv, (S19566C11*)(S19565C10*), ABISELECT(16920,10416), "S19565C9");
    check_base_class_offset(lv, (S19565C10*), ABISELECT(16,8), "S19565C9");
    check_field_offset(lv, s19565c9f0, ABISELECT(8,4), "S19565C9.s19565c9f0");
    test_class_info(&lv, &cd_S19565C9);
    dp->~S19565C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19565C9(Test_S19565C9, "S19565C9", ABISELECT(16952,10436));

#else // __cplusplus

extern void _ZN8S19565C9C1Ev();
extern void _ZN8S19565C9D1Ev();
Name_Map name_map_S19565C9[] = {
  NSPAIR(_ZN8S19565C9C1Ev),
  NSPAIR(_ZN8S19565C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19565C7;
extern VTBL_ENTRY _ZTI8S19565C7[];
extern  VTBL_ENTRY _ZTV8S19565C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C7[];
extern Class_Descriptor cd_S19565C3;
extern VTBL_ENTRY _ZTI8S19565C3[];
extern  VTBL_ENTRY _ZTV8S19565C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19565C7;
extern VTBL_ENTRY _ZTI8S19565C7[];
extern  VTBL_ENTRY _ZTV8S19565C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19565C7;
extern VTBL_ENTRY _ZTI8S19565C7[];
extern  VTBL_ENTRY _ZTV8S19565C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C7[];
extern Class_Descriptor cd_S19565C3;
extern VTBL_ENTRY _ZTI8S19565C3[];
extern  VTBL_ENTRY _ZTV8S19565C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19565C7;
extern VTBL_ENTRY _ZTI8S19565C7[];
extern  VTBL_ENTRY _ZTV8S19565C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C7[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19565C2;
extern VTBL_ENTRY _ZTI8S19565C2[];
extern  VTBL_ENTRY _ZTV8S19565C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C2[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C11;
extern VTBL_ENTRY _ZTI9S19566C11[];
extern Class_Descriptor cd_S19565C10;
extern VTBL_ENTRY _ZTI9S19565C10[];
extern  VTBL_ENTRY _ZTV9S19565C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19565C10[];
static Base_Class bases_S19565C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(5992,3684), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(4784,2940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C4,    ABISELECT(4776,2936), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(2680,1648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(2792,1716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(400,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C4,    ABISELECT(392,236), //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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1608,984), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1720,1052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C7,    ABISELECT(392,236), //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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19565C3,    ABISELECT(392,236), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(6360,3908), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C4,    ABISELECT(6352,3904), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(7568,4652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 0},
  {&cd_S19566C5,    ABISELECT(7680,4720), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 0},
  {&cd_S19565C7,    ABISELECT(6352,3904), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(10928,6728), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(11040,6796), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(8648,5320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C4,    ABISELECT(8640,5316), //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
    7, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(9856,6064), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(9968,6132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C7,    ABISELECT(8640,5316), //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
    8, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19565C3,    ABISELECT(8640,5316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(13032,8020), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C4,    ABISELECT(13024,8016), //bcp->offset
    50, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(14248,8768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19565C4,    ABISELECT(14240,8764), //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
    11, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(15456,9512), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(15568,9580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C7,    ABISELECT(14240,8764), //bcp->offset
    53, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(16528,10176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C2,    ABISELECT(8640,5316), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S19566C5,    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
    35, //immediately_derived
  0, 0},
  {&cd_S19566C11,    ABISELECT(16920,10416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S19565C10,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19565C9[];
extern void _ZN8S19565C92v3Ev();
extern void _ZN8S19565C9D1Ev();
extern void _ZN8S19565C9D0Ev();
extern void ABISELECT(_ZTv0_n72_N8S19565C9D1Ev,_ZTv0_n36_N8S19565C9D1Ev)();
extern void ABISELECT(_ZThn16_N8S19565C9D1Ev,_ZThn8_N8S19565C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19565C9D0Ev,_ZTv0_n36_N8S19565C9D0Ev)();
extern void ABISELECT(_ZThn16_N8S19565C9D0Ev,_ZThn8_N8S19565C9D0Ev)() __attribute__((weak));
extern void _ZN9S19565C102v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S19565C9D1Ev,_ZTv0_n20_N8S19565C9D1Ev)();
extern void ABISELECT(_ZThn392_N8S19565C9D1Ev,_ZThn236_N8S19565C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19565C9D0Ev,_ZTv0_n20_N8S19565C9D0Ev)();
extern void ABISELECT(_ZThn392_N8S19565C9D0Ev,_ZThn236_N8S19565C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19565C9D1Ev,_ZTv0_n16_N8S19565C9D1Ev)();
extern void ABISELECT(_ZThn6352_N8S19565C9D1Ev,_ZThn3904_N8S19565C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19565C9D0Ev,_ZTv0_n16_N8S19565C9D0Ev)();
extern void ABISELECT(_ZThn6352_N8S19565C9D0Ev,_ZThn3904_N8S19565C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19565C9D1Ev,_ZTv0_n20_N8S19565C9D1Ev)();
extern void ABISELECT(_ZThn8640_N8S19565C9D1Ev,_ZThn5316_N8S19565C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19565C9D0Ev,_ZTv0_n20_N8S19565C9D0Ev)();
extern void ABISELECT(_ZThn8640_N8S19565C9D0Ev,_ZThn5316_N8S19565C9D0Ev)() __attribute__((weak));
extern void _ZN8S19565C22v1Ev();
extern void ABISELECT(_ZTvn5600_n40_N8S19565C9D1Ev,_ZTvn3448_n20_N8S19565C9D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N8S19565C9D0Ev,_ZTvn3448_n20_N8S19565C9D0Ev)();
static  VTBL_ENTRY vtc_S19565C9[] = {
  ABISELECT(16920,10416),
  ABISELECT(8640,5316),
  ABISELECT(6352,3904),
  ABISELECT(5992,3684),
  ABISELECT(4776,2936),
  ABISELECT(392,236),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C9[0]),
  (VTBL_ENTRY)&_ZN8S19565C92v3Ev,
  (VTBL_ENTRY)&_ZN8S19565C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C9D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(16904,10408),
  ABISELECT(8624,5308),
  ABISELECT(6336,3896),
  ABISELECT(5976,3676),
  ABISELECT(4760,2928),
  ABISELECT(376,228),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19565C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19565C9D1Ev,_ZTv0_n36_N8S19565C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19565C9D0Ev,_ZTv0_n36_N8S19565C9D0Ev),
  (VTBL_ENTRY)&_ZN9S19565C102v2Ev,
  ABISELECT(-392,-236),
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  ABISELECT(-392,-236),
  (VTBL_ENTRY)&(_ZTI8S19565C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19565C9D1Ev,_ZTv0_n20_N8S19565C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19565C9D0Ev,_ZTv0_n20_N8S19565C9D0Ev),
  ABISELECT(1216,748),
  ABISELECT(-4776,-2936),
  (VTBL_ENTRY)&(_ZTI8S19565C9[0]),
  ABISELECT(-6352,-3904),
  ABISELECT(-360,-220),
  ABISELECT(-6352,-3904),
  (VTBL_ENTRY)&(_ZTI8S19565C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19565C9D1Ev,_ZTv0_n16_N8S19565C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19565C9D0Ev,_ZTv0_n16_N8S19565C9D0Ev),
  0,
  ABISELECT(-8640,-5316),
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  ABISELECT(-8640,-5316),
  (VTBL_ENTRY)&(_ZTI8S19565C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19565C9D1Ev,_ZTv0_n20_N8S19565C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19565C9D0Ev,_ZTv0_n20_N8S19565C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19565C22v1Ev,
  ABISELECT(-7032,-4332),
  ABISELECT(-13024,-8016),
  (VTBL_ENTRY)&(_ZTI8S19565C9[0]),
  ABISELECT(-8248,-5080),
  ABISELECT(-14240,-8764),
  (VTBL_ENTRY)&(_ZTI8S19565C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N8S19565C9D1Ev,_ZTvn3448_n20_N8S19565C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N8S19565C9D0Ev,_ZTvn3448_n20_N8S19565C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S19565C9[];
extern void _ZN9S19565C10D1Ev();
extern void _ZN9S19565C10D0Ev();
extern void _ZN9S19565C102v2Ev();
static  VTBL_ENTRY _tg__ZTV9S19565C10__8S19565C9[] = {
  ABISELECT(16904,10408),
  ABISELECT(8624,5308),
  ABISELECT(6336,3896),
  ABISELECT(5976,3676),
  ABISELECT(4760,2928),
  ABISELECT(376,228),
  0,
  (VTBL_ENTRY)&(_ZTI9S19565C10[0]),
  (VTBL_ENTRY)&_ZN9S19565C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19565C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19565C102v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19565C10D1Ev,_ZTv0_n20_N9S19565C10D1Ev)();
extern void ABISELECT(_ZThn376_N9S19565C10D1Ev,_ZThn228_N9S19565C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19565C10D0Ev,_ZTv0_n20_N9S19565C10D0Ev)();
extern void ABISELECT(_ZThn376_N9S19565C10D0Ev,_ZThn228_N9S19565C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19565C3__9S19565C10__8S19565C9[] = {
  ABISELECT(-376,-228),
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  ABISELECT(-376,-228),
  (VTBL_ENTRY)&(_ZTI9S19565C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19565C10D1Ev,_ZTv0_n20_N9S19565C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19565C10D0Ev,_ZTv0_n20_N9S19565C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__9S19565C10__8S19565C9[] = {
  ABISELECT(1216,748),
  ABISELECT(-4760,-2928),
  (VTBL_ENTRY)&(_ZTI9S19565C10[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19565C10D1Ev,_ZTv0_n16_N9S19565C10D1Ev)();
extern void ABISELECT(_ZThn6336_N9S19565C10D1Ev,_ZThn3896_N9S19565C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19565C10D0Ev,_ZTv0_n16_N9S19565C10D0Ev)();
extern void ABISELECT(_ZThn6336_N9S19565C10D0Ev,_ZThn3896_N9S19565C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19565C7__A1__9S19565C10__8S19565C9[] = {
  ABISELECT(-6336,-3896),
  ABISELECT(-360,-220),
  ABISELECT(-6336,-3896),
  (VTBL_ENTRY)&(_ZTI9S19565C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19565C10D1Ev,_ZTv0_n16_N9S19565C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19565C10D0Ev,_ZTv0_n16_N9S19565C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19565C10D1Ev,_ZTv0_n20_N9S19565C10D1Ev)();
extern void ABISELECT(_ZThn8624_N9S19565C10D1Ev,_ZThn5308_N9S19565C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19565C10D0Ev,_ZTv0_n20_N9S19565C10D0Ev)();
extern void ABISELECT(_ZThn8624_N9S19565C10D0Ev,_ZThn5308_N9S19565C10D0Ev)() __attribute__((weak));
extern void _ZN8S19565C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C2__9S19565C10__8S19565C9[] = {
  0,
  ABISELECT(-8624,-5308),
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  ABISELECT(-8624,-5308),
  (VTBL_ENTRY)&(_ZTI9S19565C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19565C10D1Ev,_ZTv0_n20_N9S19565C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19565C10D0Ev,_ZTv0_n20_N9S19565C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19565C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19565C48S19565C2__A4__9S19565C10__8S19565C9[] = {
  ABISELECT(-7032,-4332),
  ABISELECT(-13008,-8008),
  (VTBL_ENTRY)&(_ZTI9S19565C10[0]),
};
extern void ABISELECT(_ZTvn5600_n40_N9S19565C10D1Ev,_ZTvn3448_n20_N9S19565C10D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N9S19565C10D0Ev,_ZTvn3448_n20_N9S19565C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19565C78S19565C2__A3__9S19565C10__8S19565C9[] = {
  ABISELECT(-8248,-5080),
  ABISELECT(-14224,-8756),
  (VTBL_ENTRY)&(_ZTI9S19565C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N9S19565C10D1Ev,_ZTvn3448_n20_N9S19565C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N9S19565C10D0Ev,_ZTvn3448_n20_N9S19565C10D0Ev),
};
extern void _ZN8S19565C3D1Ev();
extern void _ZN8S19565C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C3__8S19565C9[] = {
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C3[0]),
  (VTBL_ENTRY)&_ZN8S19565C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C3D0Ev,
};
extern void _ZN8S19565C7D1Ev();
extern void _ZN8S19565C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C78S19565C3__8S19565C9[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C7[0]),
  (VTBL_ENTRY)&_ZN8S19565C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19565C48S19565C78S19565C3__A1__8S19565C9[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__8S19565C3__8S19565C9[] = {
  ABISELECT(1216,748),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI8S19565C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__8S19565C9[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
extern void _ZN8S19565C7D1Ev();
extern void _ZN8S19565C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C7__A1__8S19565C9[] = {
  ABISELECT(-360,-220),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C7[0]),
  (VTBL_ENTRY)&_ZN8S19565C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19565C48S19565C7__A2__8S19565C9[] = {
  ABISELECT(-360,-220),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
extern void _ZN8S19565C2D1Ev();
extern void _ZN8S19565C2D0Ev();
extern void _ZN8S19565C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C2__8S19565C9[] = {
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C2[0]),
  (VTBL_ENTRY)&_ZN8S19565C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19565C22v1Ev,
};
extern void _ZN8S19565C3D1Ev();
extern void _ZN8S19565C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C38S19565C2__A1__8S19565C9[] = {
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C3[0]),
  (VTBL_ENTRY)&_ZN8S19565C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C3D0Ev,
};
extern void _ZN8S19565C7D1Ev();
extern void _ZN8S19565C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C78S19565C38S19565C2__A2__8S19565C9[] = {
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C7[0]),
  (VTBL_ENTRY)&_ZN8S19565C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19565C48S19565C78S19565C38S19565C2__A3__8S19565C9[] = {
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__8S19565C38S19565C2__A1__8S19565C9[] = {
  ABISELECT(1216,748),
  ABISELECT(3864,2380),
  (VTBL_ENTRY)&(_ZTI8S19565C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C48S19565C2__A4__8S19565C9[] = {
  ABISELECT(-7032,-4332),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
extern void _ZN8S19565C7D1Ev();
extern void _ZN8S19565C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C78S19565C2__A3__8S19565C9[] = {
  ABISELECT(-8248,-5080),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C7[0]),
  (VTBL_ENTRY)&_ZN8S19565C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19565C48S19565C78S19565C2__A5__8S19565C9[] = {
  ABISELECT(-8248,-5080),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__8S19565C2__8S19565C9[] = {
  ABISELECT(1216,748),
  ABISELECT(3864,2380),
  (VTBL_ENTRY)&(_ZTI8S19565C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__A__8S19565C2__8S19565C9[] = {
  ABISELECT(-7032,-4332),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI8S19565C2[0]),
};
extern void ABISELECT(_ZThn5600_N8S19565C2D1Ev,_ZThn3448_N8S19565C2D1Ev)();
extern void ABISELECT(_ZThn5600_N8S19565C2D0Ev,_ZThn3448_N8S19565C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19565C7__A1__8S19565C2__8S19565C9[] = {
  ABISELECT(-8248,-5080),
  ABISELECT(-5600,-3448),
  (VTBL_ENTRY)&(_ZTI8S19565C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S19565C2D1Ev,_ZThn3448_N8S19565C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S19565C2D0Ev,_ZThn3448_N8S19565C2D0Ev),
};
static  VTT_ENTRY vtt_S19565C9[] = {
  {&(_ZTV8S19565C9[9]),  9,58},
  {&(_ZTV8S19565C9[22]),  22,58},
  {&(_ZTV8S19565C9[30]),  30,58},
  {&(_ZTV8S19565C9[35]),  35,58},
  {&(_ZTV8S19565C9[39]),  39,58},
  {&(_ZTV8S19565C9[47]),  47,58},
  {&(_ZTV8S19565C9[53]),  53,58},
  {&(_ZTV8S19565C9[56]),  56,58},
  {&(_tg__ZTV9S19565C10__8S19565C9[8]),  8,11},
  {&(_tg__ZTV8S19565C3__9S19565C10__8S19565C9[5]),  5,7},
  {&(_tg__ZTV8S19565C4__9S19565C10__8S19565C9[3]),  3,3},
  {&(_tg__ZTV8S19565C7__A1__9S19565C10__8S19565C9[4]),  4,6},
  {&(_tg__ZTV8S19565C2__9S19565C10__8S19565C9[6]),  6,9},
  {&(_tg__ZTV8S19565C48S19565C2__A4__9S19565C10__8S19565C9[3]),  3,3},
  {&(_tg__ZTV8S19565C78S19565C2__A3__9S19565C10__8S19565C9[3]),  3,5},
  {&(_tg__ZTV8S19565C3__8S19565C9[4]),  4,6},
  {&(_tg__ZTV8S19565C78S19565C3__8S19565C9[3]),  3,5},
  {&(_tg__ZTV8S19565C48S19565C78S19565C3__A1__8S19565C9[3]),  3,3},
  {&(_tg__ZTV8S19565C4__8S19565C3__8S19565C9[3]),  3,3},
  {&(_tg__ZTV8S19565C4__8S19565C9[3]),  3,3},
  {&(_tg__ZTV8S19565C7__A1__8S19565C9[3]),  3,5},
  {&(_tg__ZTV8S19565C48S19565C7__A2__8S19565C9[3]),  3,3},
  {&(_tg__ZTV8S19565C2__8S19565C9[4]),  4,7},
  {&(_tg__ZTV8S19565C38S19565C2__A1__8S19565C9[4]),  4,6},
  {&(_tg__ZTV8S19565C78S19565C38S19565C2__A2__8S19565C9[3]),  3,5},
  {&(_tg__ZTV8S19565C48S19565C78S19565C38S19565C2__A3__8S19565C9[3]),  3,3},
  {&(_tg__ZTV8S19565C4__8S19565C38S19565C2__A1__8S19565C9[3]),  3,3},
  {&(_tg__ZTV8S19565C48S19565C2__A4__8S19565C9[3]),  3,3},
  {&(_tg__ZTV8S19565C78S19565C2__A3__8S19565C9[3]),  3,5},
  {&(_tg__ZTV8S19565C48S19565C78S19565C2__A5__8S19565C9[3]),  3,3},
  {&(_tg__ZTV8S19565C4__8S19565C2__8S19565C9[3]),  3,3},
  {&(_tg__ZTV8S19565C4__A__8S19565C2__8S19565C9[3]),  3,3},
  {&(_tg__ZTV8S19565C7__A1__8S19565C2__8S19565C9[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19565C9[];
extern  VTBL_ENTRY _ZTV8S19565C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C9[];
static VTBL_ENTRY alt_thunk_names82[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19565C10D0Ev,_ZTv0_n16_N9S19565C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6336_N9S19565C10D0Ev,_ZThn3896_N9S19565C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19565C10D1Ev,_ZTv0_n16_N9S19565C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6336_N9S19565C10D1Ev,_ZThn3896_N9S19565C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19565C10D0Ev,_ZTv0_n20_N9S19565C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8624_N9S19565C10D0Ev,_ZThn5308_N9S19565C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn376_N9S19565C10D0Ev,_ZThn228_N9S19565C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19565C10D1Ev,_ZTv0_n20_N9S19565C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8624_N9S19565C10D1Ev,_ZThn5308_N9S19565C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn376_N9S19565C10D1Ev,_ZThn228_N9S19565C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19565C9D0Ev,_ZTv0_n16_N8S19565C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N8S19565C9D0Ev,_ZThn3904_N8S19565C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19565C9D1Ev,_ZTv0_n16_N8S19565C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N8S19565C9D1Ev,_ZThn3904_N8S19565C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19565C9D0Ev,_ZTv0_n20_N8S19565C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8640_N8S19565C9D0Ev,_ZThn5316_N8S19565C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn392_N8S19565C9D0Ev,_ZThn236_N8S19565C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19565C9D1Ev,_ZTv0_n20_N8S19565C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8640_N8S19565C9D1Ev,_ZThn5316_N8S19565C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn392_N8S19565C9D1Ev,_ZThn236_N8S19565C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19565C9D0Ev,_ZTv0_n36_N8S19565C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19565C9D0Ev,_ZThn8_N8S19565C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19565C9D1Ev,_ZTv0_n36_N8S19565C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19565C9D1Ev,_ZThn8_N8S19565C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19565C9 = {  "S19565C9", // class name
  bases_S19565C9, 36,
  &(vtc_S19565C9[0]), // expected_vtbl_contents
  &(vtt_S19565C9[0]), // expected_vtt_contents
  ABISELECT(16952,10436), // object size
  NSPAIRA(_ZTI8S19565C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19565C9),58, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19565C9),33, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names82,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19565C13  : virtual S19565C4 , virtual S19566C6 {
  ::S19566C14 s19565c13f0;
  short s19565c13f1[8];
  virtual  ~S19565C13(); // _ZN9S19565C13D2Ev
  S19565C13(); // tgen
};
//SIG(-1 S19565C13) C1{ VBC2{ VBC3{ m FL Fp FC4{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC4 FC3[3] Fi[4]} VBC4 vd FU5{ m Fi FD} Fs[8]}


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

static void Test_S19565C13()
{
  extern Class_Descriptor cd_S19565C13;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(110,268)];
    init_test(&cd_S19565C13, buf);
    S19565C13 *dp, &lv = *(dp=new (buf) S19565C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1744,1068), "sizeof(S19565C13)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19565C13)");
    check_base_class_offset(lv, (S19566C5*)(S19565C4*), ABISELECT(1264,780), "S19565C13");
    check_base_class_offset(lv, (S19566C6*)(S19565C4*), ABISELECT(56,36), "S19565C13");
    check_base_class_offset(lv, (S19565C4*), ABISELECT(48,32), "S19565C13");
    /*is_ambiguous_... S19565C13::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*), ABISELECT(1624,1000), "S19565C13");
    check_field_offset(lv, s19565c13f0, ABISELECT(16,4), "S19565C13.s19565c13f0");
    check_field_offset(lv, s19565c13f1, ABISELECT(32,16), "S19565C13.s19565c13f1");
    test_class_info(&lv, &cd_S19565C13);
    dp->~S19565C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19565C13(Test_S19565C13, "S19565C13", ABISELECT(1744,1068));

#else // __cplusplus

extern void _ZN9S19565C13C1Ev();
extern void _ZN9S19565C13D2Ev();
Name_Map name_map_S19565C13[] = {
  NSPAIR(_ZN9S19565C13C1Ev),
  NSPAIR(_ZN9S19565C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
static Base_Class bases_S19565C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(1264,780), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    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
    2, //immediately_derived
  0, 0},
  {&cd_S19565C4,    ABISELECT(48,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //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_S19566C6,    ABISELECT(1624,1000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S19565C13[];
extern void _ZN9S19565C13D1Ev();
extern void _ZN9S19565C13D0Ev();
static  VTBL_ENTRY vtc_S19565C13[] = {
  ABISELECT(1624,1000),
  ABISELECT(1264,780),
  ABISELECT(48,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S19565C13[0]),
  (VTBL_ENTRY)&_ZN9S19565C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19565C13D0Ev,
  ABISELECT(1216,748),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI9S19565C13[0]),
};
extern VTBL_ENTRY _ZTV9S19565C13[];
static  VTBL_ENTRY _tg__ZTV8S19565C4__9S19565C13[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
static  VTT_ENTRY vtt_S19565C13[] = {
  {&(_ZTV9S19565C13[5]),  5,10},
  {&(_ZTV9S19565C13[10]),  10,10},
  {&(_tg__ZTV8S19565C4__9S19565C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19565C13[];
extern  VTBL_ENTRY _ZTV9S19565C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19565C13[];
Class_Descriptor cd_S19565C13 = {  "S19565C13", // class name
  bases_S19565C13, 4,
  &(vtc_S19565C13[0]), // expected_vtbl_contents
  &(vtt_S19565C13[0]), // expected_vtt_contents
  ABISELECT(1744,1068), // object size
  NSPAIRA(_ZTI9S19565C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19565C13),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19565C13),3, //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  S19565C15  : S19565C3 , S19566C6 {
  int s19565c15f0[7];
  long s19565c15f1[7];
  short s19565c15f2[8];
  short s19565c15f3[8];
  ::S19565C4 s19565c15f4;
  void *s19565c15f5;
  ::S19565C2 s19565c15f6;
  virtual  ~S19565C15(); // _ZN9S19565C15D2Ev
  S19565C15(); // tgen
};
//SIG(-1 S19565C15) C1{ BC2{ VBC3{ VBC4{ m FL Fp FC5{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC5 FC4[3] Fi[4]} BC5 BC4 BC6{ BC3 BC5 BC4 vd FL[6] Fi FC4 Fp FC5 Fi Fp[7]} Fi FC3 Fs Fp Fi[5]} BC5 vd Fi[7] Fl[7] Fs[16] FC3 Fp FC7{ BC2 BC3 BC6 BC4 vd v1 FC8{} Fi[2] Fl Fp}}


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

static void Test_S19565C15()
{
  extern Class_Descriptor cd_S19565C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2205,2717)];
    init_test(&cd_S19565C15, buf);
    S19565C15 *dp, &lv = *(dp=new (buf) S19565C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17632,10864), "sizeof(S19565C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19565C15)");
    /*is_ambiguous_... S19565C15::S19565C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C4*), ABISELECT(17272,10644), "S19565C15");
    check_base_class_offset(lv, (S19566C5*)(S19565C4*)(S19565C7*)(S19565C3*), ABISELECT(17272,10644), "S19565C15");
    /*is_ambiguous_... S19565C15::S19565C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C4*), ABISELECT(16064,9900), "S19565C15");
    /*is_ambiguous_... S19565C3::S19565C4 */ AMB_check_base_class_offset(lv, (S19565C4*)(S19565C3*), ABISELECT(16056,9896), "S19565C15");
    /*is_ambiguous_... S19565C3::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C3*), ABISELECT(2288,1412), "S19565C15");
    /*is_ambiguous_... S19565C3::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C3*), ABISELECT(2400,1480), "S19565C15");
    check_base_class_offset(lv, (S19566C6*)(S19565C4*)(S19565C7*)(S19565C3*), ABISELECT(8,4), "S19565C15");
    check_base_class_offset(lv, (S19565C4*)(S19565C7*)(S19565C3*), 0, "S19565C15");
    /*is_ambiguous_... S19565C7::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C7*)(S19565C3*), ABISELECT(1216,748), "S19565C15");
    /*is_ambiguous_... S19565C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C7*)(S19565C3*), ABISELECT(1328,816), "S19565C15");
    check_base_class_offset(lv, (S19565C7*)(S19565C3*), 0, "S19565C15");
    check_base_class_offset(lv, (S19565C3*), 0, "S19565C15");
    /*is_ambiguous_... S19565C15::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*), ABISELECT(4384,2700), "S19565C15");
    check_field_offset(lv, s19565c15f0, ABISELECT(4496,2768), "S19565C15.s19565c15f0");
    check_field_offset(lv, s19565c15f1, ABISELECT(4528,2796), "S19565C15.s19565c15f1");
    check_field_offset(lv, s19565c15f2, ABISELECT(4584,2824), "S19565C15.s19565c15f2");
    check_field_offset(lv, s19565c15f3, ABISELECT(4600,2840), "S19565C15.s19565c15f3");
    check_field_offset(lv, s19565c15f4, ABISELECT(4616,2856), "S19565C15.s19565c15f4");
    check_field_offset(lv, s19565c15f5, ABISELECT(6192,3824), "S19565C15.s19565c15f5");
    check_field_offset(lv, s19565c15f6, ABISELECT(6200,3828), "S19565C15.s19565c15f6");
    test_class_info(&lv, &cd_S19565C15);
    dp->~S19565C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19565C15(Test_S19565C15, "S19565C15", ABISELECT(17632,10864));

#else // __cplusplus

extern void _ZN9S19565C15C1Ev();
extern void _ZN9S19565C15D2Ev();
Name_Map name_map_S19565C15[] = {
  NSPAIR(_ZN9S19565C15C1Ev),
  NSPAIR(_ZN9S19565C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19565C7;
extern VTBL_ENTRY _ZTI8S19565C7[];
extern  VTBL_ENTRY _ZTV8S19565C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C7[];
extern Class_Descriptor cd_S19565C3;
extern VTBL_ENTRY _ZTI8S19565C3[];
extern  VTBL_ENTRY _ZTV8S19565C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
static Base_Class bases_S19565C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(17272,10644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(16064,9900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C4,    ABISELECT(16056,9896), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(2400,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
    10, //immediately_derived
  0, 0},
  {&cd_S19566C6,    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
    6, //immediately_derived
  0, 0},
  {&cd_S19565C4,    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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C7,    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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19565C3,    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_S19566C6,    ABISELECT(4384,2700), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI9S19565C15[];
extern void _ZN9S19565C15D1Ev();
extern void _ZN9S19565C15D0Ev();
static  VTBL_ENTRY vtc_S19565C15[] = {
  ABISELECT(16056,9896),
  ABISELECT(17272,10644),
  0,
  (VTBL_ENTRY)&(_ZTI9S19565C15[0]),
  (VTBL_ENTRY)&_ZN9S19565C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19565C15D0Ev,
  ABISELECT(1216,748),
  ABISELECT(-16056,-9896),
  (VTBL_ENTRY)&(_ZTI9S19565C15[0]),
};
extern VTBL_ENTRY _ZTV9S19565C15[];
extern void _ZN8S19565C3D1Ev();
extern void _ZN8S19565C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C3__9S19565C15[] = {
  ABISELECT(16056,9896),
  ABISELECT(17272,10644),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C3[0]),
  (VTBL_ENTRY)&_ZN8S19565C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C3D0Ev,
};
extern void _ZN8S19565C7D1Ev();
extern void _ZN8S19565C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C78S19565C3__9S19565C15[] = {
  ABISELECT(17272,10644),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C7[0]),
  (VTBL_ENTRY)&_ZN8S19565C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19565C48S19565C78S19565C3__A1__9S19565C15[] = {
  ABISELECT(17272,10644),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__8S19565C3__9S19565C15[] = {
  ABISELECT(1216,748),
  ABISELECT(-16056,-9896),
  (VTBL_ENTRY)&(_ZTI8S19565C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__9S19565C15[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
static  VTT_ENTRY vtt_S19565C15[] = {
  {&(_ZTV9S19565C15[4]),  4,9},
  {&(_tg__ZTV8S19565C3__9S19565C15[4]),  4,6},
  {&(_tg__ZTV8S19565C78S19565C3__9S19565C15[3]),  3,5},
  {&(_tg__ZTV8S19565C48S19565C78S19565C3__A1__9S19565C15[3]),  3,3},
  {&(_tg__ZTV8S19565C4__8S19565C3__9S19565C15[3]),  3,3},
  {&(_ZTV9S19565C15[9]),  9,9},
  {&(_tg__ZTV8S19565C4__9S19565C15[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19565C15[];
extern  VTBL_ENTRY _ZTV9S19565C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19565C15[];
Class_Descriptor cd_S19565C15 = {  "S19565C15", // class name
  bases_S19565C15, 12,
  &(vtc_S19565C15[0]), // expected_vtbl_contents
  &(vtt_S19565C15[0]), // expected_vtt_contents
  ABISELECT(17632,10864), // object size
  NSPAIRA(_ZTI9S19565C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19565C15),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19565C15),7, //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  S19565C12  : S19566C11 , virtual S19565C4 , virtual S19565C13 , virtual S19565C7 , S19565C15 {
  int s19565c12f0;
  virtual  ~S19565C12(); // _ZN9S19565C12D2Ev
  S19565C12(); // tgen
};
//SIG(-1 S19565C12) C1{ BC2{ m Fp Fc Fi:6 Fl FC3{} Fi} VBC4{ VBC5{ m FL Fp FC6{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC6 FC5[3] Fi[4]} VBC7{ VBC4 VBC6 vd FU8{ m Fi FD} Fs[8]} VBC9{ BC4 BC6 BC5 vd FL[6] Fi FC5 Fp FC6 Fi Fp[7]} BC10{ BC11{ VBC4 BC6 BC5 BC9 Fi FC4 Fs Fp Fi[5]} BC6 vd Fi[7] Fl[7] Fs[8] Fs[8] FC4 Fp FC12{ BC11 BC4 BC9 BC5 vd v1 FC3 Fi[2] Fl Fp}} vd Fi}


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

static void Test_S19565C12()
{
  extern Class_Descriptor cd_S19565C12;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1259,3101)];
    init_test(&cd_S19565C12, buf);
    S19565C12 *dp, &lv = *(dp=new (buf) S19565C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20128,12400), "sizeof(S19565C12)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19565C12)");
    check_base_class_offset(lv, (S19566C11*), ABISELECT(16056,9896), "S19565C12");
    /*is_ambiguous_... S19565C12::S19565C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C4*), ABISELECT(17312,10668), "S19565C12");
    /*is_ambiguous_... S19565C12::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C4*)(S19565C7*), ABISELECT(17312,10668), "S19565C12");
    check_base_class_offset(lv, (S19566C5*)(S19565C4*)(S19565C7*)(S19565C3*)(S19565C15*), ABISELECT(17312,10668), "S19565C12");
    /*is_ambiguous_... S19565C12::S19565C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C4*), ABISELECT(16104,9924), "S19565C12");
    /*is_ambiguous_... S19565C12::S19565C4 */ AMB_check_base_class_offset(lv, (S19565C4*), ABISELECT(16096,9920), "S19565C12");
    check_base_class_offset(lv, (S19565C4*)(S19565C13*), ABISELECT(16096,9920), "S19565C12");
    /*is_ambiguous_... S19565C3::S19565C4 */ AMB_check_base_class_offset(lv, (S19565C4*)(S19565C3*)(S19565C15*), ABISELECT(16096,9920), "S19565C12");
    /*is_ambiguous_... S19565C13::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C13*), ABISELECT(17728,10920), "S19565C12");
    check_base_class_offset(lv, (S19565C13*), ABISELECT(17680,10888), "S19565C12");
    /*is_ambiguous_... S19565C12::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C4*)(S19565C7*), ABISELECT(17848,10992), "S19565C12");
    /*is_ambiguous_... S19565C12::S19565C7 */ AMB_check_base_class_offset(lv, (S19565C4*)(S19565C7*), ABISELECT(17840,10988), "S19565C12");
    /*is_ambiguous_... S19565C12::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C7*), ABISELECT(19056,11736), "S19565C12");
    /*is_ambiguous_... S19565C12::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C7*), ABISELECT(19168,11804), "S19565C12");
    /*is_ambiguous_... S19565C12::S19565C7 */ AMB_check_base_class_offset(lv, (S19565C7*), ABISELECT(17840,10988), "S19565C12");
    /*is_ambiguous_... S19565C3::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C3*)(S19565C15*), ABISELECT(2288,1412), "S19565C12");
    /*is_ambiguous_... S19565C3::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C3*)(S19565C15*), ABISELECT(2400,1480), "S19565C12");
    check_base_class_offset(lv, (S19566C6*)(S19565C4*)(S19565C7*)(S19565C3*)(S19565C15*), ABISELECT(8,4), "S19565C12");
    check_base_class_offset(lv, (S19565C4*)(S19565C7*)(S19565C3*)(S19565C15*), 0, "S19565C12");
    /*is_ambiguous_... S19565C7::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C7*)(S19565C3*)(S19565C15*), ABISELECT(1216,748), "S19565C12");
    /*is_ambiguous_... S19565C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C7*)(S19565C3*)(S19565C15*), ABISELECT(1328,816), "S19565C12");
    check_base_class_offset(lv, (S19565C7*)(S19565C3*)(S19565C15*), 0, "S19565C12");
    check_base_class_offset(lv, (S19565C3*)(S19565C15*), 0, "S19565C12");
    /*is_ambiguous_... S19565C15::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C15*), ABISELECT(4384,2700), "S19565C12");
    check_base_class_offset(lv, (S19565C15*), 0, "S19565C12");
    check_field_offset(lv, s19565c12f0, ABISELECT(16088,9916), "S19565C12.s19565c12f0");
    test_class_info(&lv, &cd_S19565C12);
    dp->~S19565C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19565C12(Test_S19565C12, "S19565C12", ABISELECT(20128,12400));

#else // __cplusplus

extern void _ZN9S19565C12C1Ev();
extern void _ZN9S19565C12D2Ev();
Name_Map name_map_S19565C12[] = {
  NSPAIR(_ZN9S19565C12C1Ev),
  NSPAIR(_ZN9S19565C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C11;
extern VTBL_ENTRY _ZTI9S19566C11[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C13;
extern VTBL_ENTRY _ZTI9S19565C13[];
extern  VTBL_ENTRY _ZTV9S19565C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19565C13[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19565C7;
extern VTBL_ENTRY _ZTI8S19565C7[];
extern  VTBL_ENTRY _ZTV8S19565C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19565C7;
extern VTBL_ENTRY _ZTI8S19565C7[];
extern  VTBL_ENTRY _ZTV8S19565C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C7[];
extern Class_Descriptor cd_S19565C3;
extern VTBL_ENTRY _ZTI8S19565C3[];
extern  VTBL_ENTRY _ZTV8S19565C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C15;
extern VTBL_ENTRY _ZTI9S19565C15[];
extern  VTBL_ENTRY _ZTV9S19565C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19565C15[];
static Base_Class bases_S19565C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C11,    ABISELECT(16056,9896), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19566C5,    ABISELECT(17312,10668), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(16104,9924), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C4,    ABISELECT(16096,9920), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(17728,10920), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C13,    ABISELECT(17680,10888), //bcp->offset
    12, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(17848,10992), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C4,    ABISELECT(17840,10988), //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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(19056,11736), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(19168,11804), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C7,    ABISELECT(17840,10988), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(2400,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
    18, //immediately_derived
  0, 0},
  {&cd_S19566C6,    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
    14, //immediately_derived
  0, 0},
  {&cd_S19565C4,    0, //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
    5, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C7,    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
    18, //immediately_derived
  0, 0},
  {&cd_S19565C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(4384,2700), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C15,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19565C12[];
extern void _ZN9S19565C12D1Ev();
extern void _ZN9S19565C12D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S19565C12D1Ev,_ZTv0_n24_N9S19565C12D1Ev)();
extern void ABISELECT(_ZThn17680_N9S19565C12D1Ev,_ZThn10888_N9S19565C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19565C12D0Ev,_ZTv0_n24_N9S19565C12D0Ev)();
extern void ABISELECT(_ZThn17680_N9S19565C12D0Ev,_ZThn10888_N9S19565C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19565C12D1Ev,_ZTv0_n16_N9S19565C12D1Ev)();
extern void ABISELECT(_ZThn17840_N9S19565C12D1Ev,_ZThn10988_N9S19565C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19565C12D0Ev,_ZTv0_n16_N9S19565C12D0Ev)();
extern void ABISELECT(_ZThn17840_N9S19565C12D0Ev,_ZThn10988_N9S19565C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19565C12[] = {
  ABISELECT(17840,10988),
  ABISELECT(17728,10920),
  ABISELECT(17680,10888),
  ABISELECT(16096,9920),
  ABISELECT(17312,10668),
  0,
  (VTBL_ENTRY)&(_ZTI9S19565C12[0]),
  (VTBL_ENTRY)&_ZN9S19565C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19565C12D0Ev,
  ABISELECT(1216,748),
  ABISELECT(-16096,-9920),
  (VTBL_ENTRY)&(_ZTI9S19565C12[0]),
  ABISELECT(-17680,-10888),
  ABISELECT(48,32),
  ABISELECT(-368,-220),
  ABISELECT(-1584,-968),
  ABISELECT(-17680,-10888),
  (VTBL_ENTRY)&(_ZTI9S19565C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19565C12D1Ev,_ZTv0_n24_N9S19565C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19565C12D0Ev,_ZTv0_n24_N9S19565C12D0Ev),
  ABISELECT(-17840,-10988),
  ABISELECT(-528,-320),
  ABISELECT(-17840,-10988),
  (VTBL_ENTRY)&(_ZTI9S19565C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19565C12D1Ev,_ZTv0_n16_N9S19565C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19565C12D0Ev,_ZTv0_n16_N9S19565C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S19565C12[];
extern void _ZN9S19565C15D1Ev();
extern void _ZN9S19565C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19565C15__9S19565C12[] = {
  ABISELECT(16096,9920),
  ABISELECT(17312,10668),
  0,
  (VTBL_ENTRY)&(_ZTI9S19565C15[0]),
  (VTBL_ENTRY)&_ZN9S19565C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19565C15D0Ev,
};
extern void _ZN8S19565C3D1Ev();
extern void _ZN8S19565C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C39S19565C15__9S19565C12[] = {
  ABISELECT(16096,9920),
  ABISELECT(17312,10668),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C3[0]),
  (VTBL_ENTRY)&_ZN8S19565C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C3D0Ev,
};
extern void _ZN8S19565C7D1Ev();
extern void _ZN8S19565C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C78S19565C39S19565C15__A1__9S19565C12[] = {
  ABISELECT(17312,10668),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C7[0]),
  (VTBL_ENTRY)&_ZN8S19565C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19565C48S19565C78S19565C39S19565C15__A2__9S19565C12[] = {
  ABISELECT(17312,10668),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__8S19565C39S19565C15__9S19565C12[] = {
  ABISELECT(1216,748),
  ABISELECT(-16096,-9920),
  (VTBL_ENTRY)&(_ZTI8S19565C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__9S19565C15__9S19565C12[] = {
  ABISELECT(1216,748),
  ABISELECT(-16096,-9920),
  (VTBL_ENTRY)&(_ZTI9S19565C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__9S19565C12[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
extern void _ZN9S19565C13D1Ev();
extern void _ZN9S19565C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19565C13__9S19565C12[] = {
  ABISELECT(48,32),
  ABISELECT(-368,-220),
  ABISELECT(-1584,-968),
  0,
  (VTBL_ENTRY)&(_ZTI9S19565C13[0]),
  (VTBL_ENTRY)&_ZN9S19565C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19565C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__9S19565C13__9S19565C12[] = {
  ABISELECT(1216,748),
  ABISELECT(1584,968),
  (VTBL_ENTRY)&(_ZTI9S19565C13[0]),
};
extern void _ZN8S19565C7D1Ev();
extern void _ZN8S19565C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C7__9S19565C12[] = {
  ABISELECT(-528,-320),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C7[0]),
  (VTBL_ENTRY)&_ZN8S19565C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19565C48S19565C7__A1__9S19565C12[] = {
  ABISELECT(-528,-320),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
static  VTT_ENTRY vtt_S19565C12[] = {
  {&(_ZTV9S19565C12[7]),  7,26},
  {&(_tg__ZTV9S19565C15__9S19565C12[4]),  4,6},
  {&(_tg__ZTV8S19565C39S19565C15__9S19565C12[4]),  4,6},
  {&(_tg__ZTV8S19565C78S19565C39S19565C15__A1__9S19565C12[3]),  3,5},
  {&(_tg__ZTV8S19565C48S19565C78S19565C39S19565C15__A2__9S19565C12[3]),  3,3},
  {&(_tg__ZTV8S19565C4__8S19565C39S19565C15__9S19565C12[3]),  3,3},
  {&(_tg__ZTV8S19565C4__9S19565C15__9S19565C12[3]),  3,3},
  {&(_ZTV9S19565C12[12]),  12,26},
  {&(_ZTV9S19565C12[18]),  18,26},
  {&(_ZTV9S19565C12[24]),  24,26},
  {&(_tg__ZTV8S19565C4__9S19565C12[3]),  3,3},
  {&(_tg__ZTV9S19565C13__9S19565C12[5]),  5,7},
  {&(_tg__ZTV8S19565C4__9S19565C13__9S19565C12[3]),  3,3},
  {&(_tg__ZTV8S19565C7__9S19565C12[3]),  3,5},
  {&(_tg__ZTV8S19565C48S19565C7__A1__9S19565C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19565C12[];
extern  VTBL_ENTRY _ZTV9S19565C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19565C12[];
static VTBL_ENTRY alt_thunk_names83[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19565C12D0Ev,_ZTv0_n16_N9S19565C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17840_N9S19565C12D0Ev,_ZThn10988_N9S19565C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19565C12D1Ev,_ZTv0_n16_N9S19565C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17840_N9S19565C12D1Ev,_ZThn10988_N9S19565C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19565C12D0Ev,_ZTv0_n24_N9S19565C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17680_N9S19565C12D0Ev,_ZThn10888_N9S19565C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19565C12D1Ev,_ZTv0_n24_N9S19565C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17680_N9S19565C12D1Ev,_ZThn10888_N9S19565C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19565C12 = {  "S19565C12", // class name
  bases_S19565C12, 21,
  &(vtc_S19565C12[0]), // expected_vtbl_contents
  &(vtt_S19565C12[0]), // expected_vtt_contents
  ABISELECT(20128,12400), // object size
  NSPAIRA(_ZTI9S19565C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19565C12),26, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19565C12),15, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names83,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19565C1  : virtual S19565C2 , S19565C9 , virtual S19565C12 {
  long double s19565c1f0;
  ::S19565C2 s19565c1f1;
  long s19565c1f2;
  ::S19566C6 s19565c1f3;
  virtual  ~S19565C1(); // _ZN8S19565C1D2Ev
  S19565C1(); // tgen
};
//SIG(1 S19565C1) C1{ VBC2{ BC3{ VBC4{ VBC5{ m FL Fp FC6{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC6 FC5[3] Fi[4]} BC6 BC5 BC7{ BC4 BC6 BC5 vd FL[6] Fi FC5 Fp FC6 Fi Fp[7]} Fi FC4 Fs Fp Fi[5]} BC4 BC7 BC5 vd v1 FC8{} Fi[2] Fl Fp} BC9{ VBC10{ VBC3 VBC7 VBC2 BC5 VBC11{ m Fp Fc Fi:6 Fl FC8 Fi} vd v2 Fi} v3 Fs} VBC12{ BC11 VBC4 VBC13{ VBC4 VBC6 vd FU14{ m Fi FD} Fs[8]} VBC7 BC15{ BC3 BC6 vd Fi[7] Fl[7] Fs[8] Fs[8] FC4 Fp FC2} vd Fi} vd FD FC2 Fl FC6}


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

static void Test_S19565C1()
{
  extern Class_Descriptor cd_S19565C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2701,6653)];
    init_test(&cd_S19565C1, buf);
    S19565C1 *dp, &lv = *(dp=new (buf) S19565C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(43200,26608), "sizeof(S19565C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19565C1)");
    /*is_ambiguous_... S19565C1::S19565C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C4*), ABISELECT(19504,12008), "S19565C1");
    check_base_class_offset(lv, (S19566C5*)(S19565C4*)(S19565C7*)(S19565C3*)(S19565C2*), ABISELECT(19504,12008), "S19565C1");
    /*is_ambiguous_... S19565C2::S19565C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C4*)(S19565C2*), ABISELECT(19504,12008), "S19565C1");
    /*is_ambiguous_... S19565C2::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C4*)(S19565C7*)(S19565C2*), ABISELECT(19504,12008), "S19565C1");
    /*is_ambiguous_... S19565C1::S19565C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C4*)(S19565C7*)(S19565C3*), ABISELECT(19504,12008), "S19565C1");
    /*is_ambiguous_... S19565C1::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C4*)(S19565C7*), ABISELECT(19504,12008), "S19565C1");
    check_base_class_offset(lv, (S19566C5*)(S19565C4*)(S19565C7*)(S19565C3*)(S19565C15*)(S19565C12*), ABISELECT(19504,12008), "S19565C1");
    /*is_ambiguous_... S19565C1::S19565C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C4*), ABISELECT(18296,11264), "S19565C1");
    /*is_ambiguous_... S19565C3::S19565C4 */ AMB_check_base_class_offset(lv, (S19565C4*)(S19565C3*)(S19565C2*), ABISELECT(18288,11260), "S19565C1");
    /*is_ambiguous_... S19565C1::S19565C3 */ AMB_check_base_class_offset(lv, (S19565C4*)(S19565C3*), ABISELECT(18288,11260), "S19565C1");
    /*is_ambiguous_... S19565C12::S19565C4 */ AMB_check_base_class_offset(lv, (S19565C4*)(S19565C12*), ABISELECT(18288,11260), "S19565C1");
    check_base_class_offset(lv, (S19565C4*)(S19565C13*), ABISELECT(18288,11260), "S19565C1");
    /*is_ambiguous_... S19565C3::S19565C4 */ AMB_check_base_class_offset(lv, (S19565C4*)(S19565C3*)(S19565C15*)(S19565C12*), ABISELECT(18288,11260), "S19565C1");
    /*is_ambiguous_... S19565C3::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C3*)(S19565C2*), ABISELECT(12296,7572), "S19565C1");
    /*is_ambiguous_... S19565C3::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C3*)(S19565C2*), ABISELECT(12408,7640), "S19565C1");
    check_base_class_offset(lv, (S19566C6*)(S19565C4*)(S19565C7*)(S19565C3*)(S19565C2*), ABISELECT(10016,6164), "S19565C1");
    check_base_class_offset(lv, (S19565C4*)(S19565C7*)(S19565C3*)(S19565C2*), ABISELECT(10008,6160), "S19565C1");
    /*is_ambiguous_... S19565C7::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C7*)(S19565C3*)(S19565C2*), ABISELECT(11224,6908), "S19565C1");
    /*is_ambiguous_... S19565C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C7*)(S19565C3*)(S19565C2*), ABISELECT(11336,6976), "S19565C1");
    check_base_class_offset(lv, (S19565C7*)(S19565C3*)(S19565C2*), ABISELECT(10008,6160), "S19565C1");
    check_base_class_offset(lv, (S19565C3*)(S19565C2*), ABISELECT(10008,6160), "S19565C1");
    /*is_ambiguous_... S19565C2::S19565C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C4*)(S19565C2*), ABISELECT(14400,8864), "S19565C1");
    /*is_ambiguous_... S19565C2::S19565C4 */ AMB_check_base_class_offset(lv, (S19565C4*)(S19565C2*), ABISELECT(14392,8860), "S19565C1");
    /*is_ambiguous_... S19565C2::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C4*)(S19565C7*)(S19565C2*), ABISELECT(15616,9612), "S19565C1");
    /*is_ambiguous_... S19565C2::S19565C7 */ AMB_check_base_class_offset(lv, (S19565C4*)(S19565C7*)(S19565C2*), ABISELECT(15608,9608), "S19565C1");
    /*is_ambiguous_... S19565C2::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C7*)(S19565C2*), ABISELECT(16824,10356), "S19565C1");
    /*is_ambiguous_... S19565C2::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C7*)(S19565C2*), ABISELECT(16936,10424), "S19565C1");
    /*is_ambiguous_... S19565C2::S19565C7 */ AMB_check_base_class_offset(lv, (S19565C7*)(S19565C2*), ABISELECT(15608,9608), "S19565C1");
    /*is_ambiguous_... S19565C2::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C2*), ABISELECT(17896,11020), "S19565C1");
    check_base_class_offset(lv, (S19565C2*), ABISELECT(10008,6160), "S19565C1");
    check_base_class_offset(lv, (S19565C2*)(S19565C10*), ABISELECT(10008,6160), "S19565C1");
    /*is_ambiguous_... S19565C1::S19565C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C3*), ABISELECT(22528,13868), "S19565C1");
    /*is_ambiguous_... S19565C1::S19565C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C3*), ABISELECT(22640,13936), "S19565C1");
    /*is_ambiguous_... S19565C1::S19565C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C4*)(S19565C7*)(S19565C3*), ABISELECT(20248,12460), "S19565C1");
    /*is_ambiguous_... S19565C1::S19565C3 */ AMB_check_base_class_offset(lv, (S19565C4*)(S19565C7*)(S19565C3*), ABISELECT(20240,12456), "S19565C1");
    /*is_ambiguous_... S19565C1::S19565C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C7*)(S19565C3*), ABISELECT(21456,13204), "S19565C1");
    /*is_ambiguous_... S19565C1::S19565C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C7*)(S19565C3*), ABISELECT(21568,13272), "S19565C1");
    /*is_ambiguous_... S19565C1::S19565C3 */ AMB_check_base_class_offset(lv, (S19565C7*)(S19565C3*), ABISELECT(20240,12456), "S19565C1");
    /*is_ambiguous_... S19565C10::S19565C3 */ AMB_check_base_class_offset(lv, (S19565C3*)(S19565C10*), ABISELECT(20240,12456), "S19565C1");
    /*is_ambiguous_... S19565C1::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C4*)(S19565C7*), ABISELECT(24632,15160), "S19565C1");
    /*is_ambiguous_... S19565C1::S19565C7 */ AMB_check_base_class_offset(lv, (S19565C4*)(S19565C7*), ABISELECT(24624,15156), "S19565C1");
    /*is_ambiguous_... S19565C1::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C7*), ABISELECT(25840,15904), "S19565C1");
    /*is_ambiguous_... S19565C1::S19565C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C7*), ABISELECT(25952,15972), "S19565C1");
    /*is_ambiguous_... S19565C10::S19565C7 */ AMB_check_base_class_offset(lv, (S19565C7*)(S19565C10*), ABISELECT(24624,15156), "S19565C1");
    /*is_ambiguous_... S19565C12::S19565C7 */ AMB_check_base_class_offset(lv, (S19565C7*)(S19565C12*), ABISELECT(24624,15156), "S19565C1");
    /*is_ambiguous_... S19565C10::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C10*), ABISELECT(19872,12232), "S19565C1");
    check_base_class_offset(lv, (S19566C11*)(S19565C10*), ABISELECT(26912,16568), "S19565C1");
    check_base_class_offset(lv, (S19565C10*)(S19565C9*), ABISELECT(19864,12228), "S19565C1");
    check_base_class_offset(lv, (S19565C9*), 0, "S19565C1");
    check_base_class_offset(lv, (S19566C11*)(S19565C12*), ABISELECT(43000,26484), "S19565C1");
    /*is_ambiguous_... S19565C13::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C13*), ABISELECT(43088,26540), "S19565C1");
    check_base_class_offset(lv, (S19565C13*)(S19565C12*), ABISELECT(43040,26508), "S19565C1");
    /*is_ambiguous_... S19565C3::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C3*)(S19565C15*)(S19565C12*), ABISELECT(29232,18000), "S19565C1");
    /*is_ambiguous_... S19565C3::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C3*)(S19565C15*)(S19565C12*), ABISELECT(29344,18068), "S19565C1");
    check_base_class_offset(lv, (S19566C6*)(S19565C4*)(S19565C7*)(S19565C3*)(S19565C15*)(S19565C12*), ABISELECT(26952,16592), "S19565C1");
    check_base_class_offset(lv, (S19565C4*)(S19565C7*)(S19565C3*)(S19565C15*)(S19565C12*), ABISELECT(26944,16588), "S19565C1");
    /*is_ambiguous_... S19565C7::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C7*)(S19565C3*)(S19565C15*)(S19565C12*), ABISELECT(28160,17336), "S19565C1");
    /*is_ambiguous_... S19565C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19565C7*)(S19565C3*)(S19565C15*)(S19565C12*), ABISELECT(28272,17404), "S19565C1");
    check_base_class_offset(lv, (S19565C7*)(S19565C3*)(S19565C15*)(S19565C12*), ABISELECT(26944,16588), "S19565C1");
    check_base_class_offset(lv, (S19565C3*)(S19565C15*)(S19565C12*), ABISELECT(26944,16588), "S19565C1");
    /*is_ambiguous_... S19565C15::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19565C15*)(S19565C12*), ABISELECT(31328,19288), "S19565C1");
    check_base_class_offset(lv, (S19565C15*)(S19565C12*), ABISELECT(26944,16588), "S19565C1");
    check_base_class_offset(lv, (S19565C12*), ABISELECT(26944,16588), "S19565C1");
    check_field_offset(lv, s19565c1f0, ABISELECT(16,8), "S19565C1.s19565c1f0");
    check_field_offset(lv, s19565c1f1, ABISELECT(32,20), "S19565C1.s19565c1f1");
    check_field_offset(lv, s19565c1f2, ABISELECT(9888,6088), "S19565C1.s19565c1f2");
    check_field_offset(lv, s19565c1f3, ABISELECT(9896,6092), "S19565C1.s19565c1f3");
    test_class_info(&lv, &cd_S19565C1);
    dp->~S19565C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19565C1(Test_S19565C1, "S19565C1", ABISELECT(43200,26608));

#else // __cplusplus

extern void _ZN8S19565C1C1Ev();
extern void _ZN8S19565C1D2Ev();
Name_Map name_map_S19565C1[] = {
  NSPAIR(_ZN8S19565C1C1Ev),
  NSPAIR(_ZN8S19565C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19565C7;
extern VTBL_ENTRY _ZTI8S19565C7[];
extern  VTBL_ENTRY _ZTV8S19565C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C7[];
extern Class_Descriptor cd_S19565C3;
extern VTBL_ENTRY _ZTI8S19565C3[];
extern  VTBL_ENTRY _ZTV8S19565C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19565C7;
extern VTBL_ENTRY _ZTI8S19565C7[];
extern  VTBL_ENTRY _ZTV8S19565C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C7[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19565C2;
extern VTBL_ENTRY _ZTI8S19565C2[];
extern  VTBL_ENTRY _ZTV8S19565C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C2[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19565C7;
extern VTBL_ENTRY _ZTI8S19565C7[];
extern  VTBL_ENTRY _ZTV8S19565C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C7[];
extern Class_Descriptor cd_S19565C3;
extern VTBL_ENTRY _ZTI8S19565C3[];
extern  VTBL_ENTRY _ZTV8S19565C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19565C7;
extern VTBL_ENTRY _ZTI8S19565C7[];
extern  VTBL_ENTRY _ZTV8S19565C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C7[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C11;
extern VTBL_ENTRY _ZTI9S19566C11[];
extern Class_Descriptor cd_S19565C10;
extern VTBL_ENTRY _ZTI9S19565C10[];
extern  VTBL_ENTRY _ZTV9S19565C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19565C10[];
extern Class_Descriptor cd_S19565C9;
extern VTBL_ENTRY _ZTI8S19565C9[];
extern  VTBL_ENTRY _ZTV8S19565C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C9[];
extern Class_Descriptor cd_S19566C11;
extern VTBL_ENTRY _ZTI9S19566C11[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C13;
extern VTBL_ENTRY _ZTI9S19565C13[];
extern  VTBL_ENTRY _ZTV9S19565C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19565C13[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C4;
extern VTBL_ENTRY _ZTI8S19565C4[];
extern  VTBL_ENTRY _ZTV8S19565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19565C7;
extern VTBL_ENTRY _ZTI8S19565C7[];
extern  VTBL_ENTRY _ZTV8S19565C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C7[];
extern Class_Descriptor cd_S19565C3;
extern VTBL_ENTRY _ZTI8S19565C3[];
extern  VTBL_ENTRY _ZTV8S19565C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19565C15;
extern VTBL_ENTRY _ZTI9S19565C15[];
extern  VTBL_ENTRY _ZTV9S19565C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19565C15[];
extern Class_Descriptor cd_S19565C12;
extern VTBL_ENTRY _ZTI9S19565C12[];
extern  VTBL_ENTRY _ZTV9S19565C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19565C12[];
static Base_Class bases_S19565C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(19504,12008), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(18296,11264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C4,    ABISELECT(18288,11260), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(12296,7572), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(12408,7640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(10016,6164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C4,    ABISELECT(10008,6160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(11224,6908), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(11336,6976), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C7,    ABISELECT(10008,6160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19565C3,    ABISELECT(10008,6160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(14400,8864), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C4,    ABISELECT(14392,8860), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(15616,9612), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C4,    ABISELECT(15608,9608), //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
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(16824,10356), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(16936,10424), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C7,    ABISELECT(15608,9608), //bcp->offset
    27, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(17896,11020), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C2,    ABISELECT(10008,6160), //bcp->offset
    15, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(22528,13868), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(22640,13936), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(20248,12460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C4,    ABISELECT(20240,12456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(21456,13204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(21568,13272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C7,    ABISELECT(20240,12456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19565C3,    ABISELECT(20240,12456), //bcp->offset
    48, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(24632,15160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19565C4,    ABISELECT(24624,15156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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
    32, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(25840,15904), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(25952,15972), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19565C7,    ABISELECT(24624,15156), //bcp->offset
    55, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S19566C5,    ABISELECT(19872,12232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S19566C11,    ABISELECT(26912,16568), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S19565C10,    ABISELECT(19864,12228), //bcp->offset
    35, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    36, //immediately_derived
  0, 1},
  {&cd_S19565C9,    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
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19566C11,    ABISELECT(43000,26484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(43088,26540), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 1},
  {&cd_S19565C13,    ABISELECT(43040,26508), //bcp->offset
    71, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    50, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(29232,18000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(29344,18068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(26952,16592), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S19565C4,    ABISELECT(26944,16588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(28160,17336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(28272,17404), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S19565C7,    ABISELECT(26944,16588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S19565C3,    ABISELECT(26944,16588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(31328,19288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S19565C15,    ABISELECT(26944,16588), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S19565C12,    ABISELECT(26944,16588), //bcp->offset
    61, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19565C1[];
extern void _ZN8S19565C92v3Ev();
extern void _ZN8S19565C1D1Ev();
extern void _ZN8S19565C1D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S19565C1D1Ev,_ZTv0_n20_N8S19565C1D1Ev)();
extern void ABISELECT(_ZThn10008_N8S19565C1D1Ev,_ZThn6160_N8S19565C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19565C1D0Ev,_ZTv0_n20_N8S19565C1D0Ev)();
extern void ABISELECT(_ZThn10008_N8S19565C1D0Ev,_ZThn6160_N8S19565C1D0Ev)() __attribute__((weak));
extern void _ZN8S19565C22v1Ev();
extern void ABISELECT(_ZTvn5600_n40_N8S19565C1D1Ev,_ZTvn3448_n20_N8S19565C1D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N8S19565C1D0Ev,_ZTvn3448_n20_N8S19565C1D0Ev)();
extern void ABISELECT(_ZTv0_n72_N8S19565C1D1Ev,_ZTv0_n36_N8S19565C1D1Ev)();
extern void ABISELECT(_ZThn19864_N8S19565C1D1Ev,_ZThn12228_N8S19565C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19565C1D0Ev,_ZTv0_n36_N8S19565C1D0Ev)();
extern void ABISELECT(_ZThn19864_N8S19565C1D0Ev,_ZThn12228_N8S19565C1D0Ev)() __attribute__((weak));
extern void _ZN9S19565C102v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S19565C1D1Ev,_ZTv0_n20_N8S19565C1D1Ev)();
extern void ABISELECT(_ZThn20240_N8S19565C1D1Ev,_ZThn12456_N8S19565C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19565C1D0Ev,_ZTv0_n20_N8S19565C1D0Ev)();
extern void ABISELECT(_ZThn20240_N8S19565C1D0Ev,_ZThn12456_N8S19565C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19565C1D1Ev,_ZTv0_n16_N8S19565C1D1Ev)();
extern void ABISELECT(_ZThn24624_N8S19565C1D1Ev,_ZThn15156_N8S19565C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19565C1D0Ev,_ZTv0_n16_N8S19565C1D0Ev)();
extern void ABISELECT(_ZThn24624_N8S19565C1D0Ev,_ZThn15156_N8S19565C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19565C1D1Ev,_ZTv0_n32_N8S19565C1D1Ev)();
extern void ABISELECT(_ZThn26944_N8S19565C1D1Ev,_ZThn16588_N8S19565C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19565C1D0Ev,_ZTv0_n32_N8S19565C1D0Ev)();
extern void ABISELECT(_ZThn26944_N8S19565C1D0Ev,_ZThn16588_N8S19565C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19565C1D1Ev,_ZTv0_n24_N8S19565C1D1Ev)();
extern void ABISELECT(_ZThn43040_N8S19565C1D1Ev,_ZThn26508_N8S19565C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19565C1D0Ev,_ZTv0_n24_N8S19565C1D0Ev)();
extern void ABISELECT(_ZThn43040_N8S19565C1D0Ev,_ZThn26508_N8S19565C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19565C1[] = {
  ABISELECT(43088,26540),
  ABISELECT(43040,26508),
  ABISELECT(26944,16588),
  ABISELECT(26912,16568),
  ABISELECT(10008,6160),
  ABISELECT(24624,15156),
  ABISELECT(19504,12008),
  ABISELECT(18288,11260),
  ABISELECT(20240,12456),
  ABISELECT(19864,12228),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C1[0]),
  (VTBL_ENTRY)&_ZN8S19565C92v3Ev,
  (VTBL_ENTRY)&_ZN8S19565C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C1D0Ev,
  0,
  ABISELECT(-10008,-6160),
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  ABISELECT(-10008,-6160),
  (VTBL_ENTRY)&(_ZTI8S19565C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19565C1D1Ev,_ZTv0_n20_N8S19565C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19565C1D0Ev,_ZTv0_n20_N8S19565C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19565C22v1Ev,
  ABISELECT(5112,3148),
  ABISELECT(-14392,-8860),
  (VTBL_ENTRY)&(_ZTI8S19565C1[0]),
  ABISELECT(3896,2400),
  ABISELECT(-15608,-9608),
  (VTBL_ENTRY)&(_ZTI8S19565C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N8S19565C1D1Ev,_ZTvn3448_n20_N8S19565C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N8S19565C1D0Ev,_ZTvn3448_n20_N8S19565C1D0Ev),
  ABISELECT(1216,748),
  ABISELECT(-18288,-11260),
  (VTBL_ENTRY)&(_ZTI8S19565C1[0]),
  0,
  ABISELECT(-19864,-12228),
  ABISELECT(7048,4340),
  ABISELECT(-9856,-6068),
  ABISELECT(4760,2928),
  ABISELECT(-360,-220),
  ABISELECT(-1576,-968),
  ABISELECT(376,228),
  ABISELECT(-19864,-12228),
  (VTBL_ENTRY)&(_ZTI8S19565C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19565C1D1Ev,_ZTv0_n36_N8S19565C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19565C1D0Ev,_ZTv0_n36_N8S19565C1D0Ev),
  (VTBL_ENTRY)&_ZN9S19565C102v2Ev,
  ABISELECT(-20240,-12456),
  ABISELECT(-1952,-1196),
  ABISELECT(-736,-448),
  ABISELECT(-20240,-12456),
  (VTBL_ENTRY)&(_ZTI8S19565C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19565C1D1Ev,_ZTv0_n20_N8S19565C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19565C1D0Ev,_ZTv0_n20_N8S19565C1D0Ev),
  ABISELECT(-24624,-15156),
  ABISELECT(-5120,-3148),
  ABISELECT(-24624,-15156),
  (VTBL_ENTRY)&(_ZTI8S19565C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19565C1D1Ev,_ZTv0_n16_N8S19565C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19565C1D0Ev,_ZTv0_n16_N8S19565C1D0Ev),
  ABISELECT(-26944,-16588),
  ABISELECT(-2320,-1432),
  ABISELECT(16144,9952),
  ABISELECT(16096,9920),
  ABISELECT(-8656,-5328),
  ABISELECT(-7440,-4580),
  ABISELECT(-26944,-16588),
  (VTBL_ENTRY)&(_ZTI8S19565C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19565C1D1Ev,_ZTv0_n32_N8S19565C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19565C1D0Ev,_ZTv0_n32_N8S19565C1D0Ev),
  ABISELECT(-43040,-26508),
  ABISELECT(48,32),
  ABISELECT(-23536,-14500),
  ABISELECT(-24752,-15248),
  ABISELECT(-43040,-26508),
  (VTBL_ENTRY)&(_ZTI8S19565C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19565C1D1Ev,_ZTv0_n24_N8S19565C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19565C1D0Ev,_ZTv0_n24_N8S19565C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19565C1[];
extern void _ZN8S19565C92v3Ev();
extern void _ZN8S19565C9D1Ev();
extern void _ZN8S19565C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C9__8S19565C1[] = {
  ABISELECT(26912,16568),
  ABISELECT(10008,6160),
  ABISELECT(24624,15156),
  ABISELECT(19504,12008),
  ABISELECT(18288,11260),
  ABISELECT(20240,12456),
  ABISELECT(19864,12228),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C9[0]),
  (VTBL_ENTRY)&_ZN8S19565C92v3Ev,
  (VTBL_ENTRY)&_ZN8S19565C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C9D0Ev,
};
extern void ABISELECT(_ZTv0_n72_N8S19565C9D1Ev,_ZTv0_n36_N8S19565C9D1Ev)();
extern void ABISELECT(_ZThn19864_N8S19565C9D1Ev,_ZThn12228_N8S19565C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S19565C9D0Ev,_ZTv0_n36_N8S19565C9D0Ev)();
extern void ABISELECT(_ZThn19864_N8S19565C9D0Ev,_ZThn12228_N8S19565C9D0Ev)() __attribute__((weak));
extern void _ZN9S19565C102v2Ev();
static  VTBL_ENTRY _tg__ZTV9S19565C10__8S19565C9__8S19565C1[] = {
  0,
  ABISELECT(-19864,-12228),
  ABISELECT(7048,4340),
  ABISELECT(-9856,-6068),
  ABISELECT(4760,2928),
  ABISELECT(-360,-220),
  ABISELECT(-1576,-968),
  ABISELECT(376,228),
  ABISELECT(-19864,-12228),
  (VTBL_ENTRY)&(_ZTI8S19565C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19565C9D1Ev,_ZTv0_n36_N8S19565C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S19565C9D0Ev,_ZTv0_n36_N8S19565C9D0Ev),
  (VTBL_ENTRY)&_ZN9S19565C102v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S19565C9D1Ev,_ZTv0_n20_N8S19565C9D1Ev)();
extern void ABISELECT(_ZThn20240_N8S19565C9D1Ev,_ZThn12456_N8S19565C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19565C9D0Ev,_ZTv0_n20_N8S19565C9D0Ev)();
extern void ABISELECT(_ZThn20240_N8S19565C9D0Ev,_ZThn12456_N8S19565C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19565C3__8S19565C9__8S19565C1[] = {
  ABISELECT(-20240,-12456),
  ABISELECT(-1952,-1196),
  ABISELECT(-736,-448),
  ABISELECT(-20240,-12456),
  (VTBL_ENTRY)&(_ZTI8S19565C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19565C9D1Ev,_ZTv0_n20_N8S19565C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19565C9D0Ev,_ZTv0_n20_N8S19565C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__8S19565C9__8S19565C1[] = {
  ABISELECT(1216,748),
  ABISELECT(-18288,-11260),
  (VTBL_ENTRY)&(_ZTI8S19565C9[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S19565C9D1Ev,_ZTv0_n16_N8S19565C9D1Ev)();
extern void ABISELECT(_ZThn24624_N8S19565C9D1Ev,_ZThn15156_N8S19565C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19565C9D0Ev,_ZTv0_n16_N8S19565C9D0Ev)();
extern void ABISELECT(_ZThn24624_N8S19565C9D0Ev,_ZThn15156_N8S19565C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19565C7__A1__8S19565C9__8S19565C1[] = {
  ABISELECT(-24624,-15156),
  ABISELECT(-5120,-3148),
  ABISELECT(-24624,-15156),
  (VTBL_ENTRY)&(_ZTI8S19565C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19565C9D1Ev,_ZTv0_n16_N8S19565C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19565C9D0Ev,_ZTv0_n16_N8S19565C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S19565C9D1Ev,_ZTv0_n20_N8S19565C9D1Ev)();
extern void ABISELECT(_ZThn10008_N8S19565C9D1Ev,_ZThn6160_N8S19565C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S19565C9D0Ev,_ZTv0_n20_N8S19565C9D0Ev)();
extern void ABISELECT(_ZThn10008_N8S19565C9D0Ev,_ZThn6160_N8S19565C9D0Ev)() __attribute__((weak));
extern void _ZN8S19565C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C2__8S19565C9__8S19565C1[] = {
  0,
  ABISELECT(-10008,-6160),
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  ABISELECT(-10008,-6160),
  (VTBL_ENTRY)&(_ZTI8S19565C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19565C9D1Ev,_ZTv0_n20_N8S19565C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S19565C9D0Ev,_ZTv0_n20_N8S19565C9D0Ev),
  (VTBL_ENTRY)&_ZN8S19565C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19565C48S19565C2__A4__8S19565C9__8S19565C1[] = {
  ABISELECT(5112,3148),
  ABISELECT(-14392,-8860),
  (VTBL_ENTRY)&(_ZTI8S19565C9[0]),
};
extern void ABISELECT(_ZTvn5600_n40_N8S19565C9D1Ev,_ZTvn3448_n20_N8S19565C9D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N8S19565C9D0Ev,_ZTvn3448_n20_N8S19565C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19565C78S19565C2__A3__8S19565C9__8S19565C1[] = {
  ABISELECT(3896,2400),
  ABISELECT(-15608,-9608),
  (VTBL_ENTRY)&(_ZTI8S19565C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N8S19565C9D1Ev,_ZTvn3448_n20_N8S19565C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N8S19565C9D0Ev,_ZTvn3448_n20_N8S19565C9D0Ev),
};
extern void _ZN8S19565C2D1Ev();
extern void _ZN8S19565C2D0Ev();
extern void _ZN8S19565C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C2__8S19565C1[] = {
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C2[0]),
  (VTBL_ENTRY)&_ZN8S19565C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19565C22v1Ev,
};
extern void _ZN8S19565C3D1Ev();
extern void _ZN8S19565C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C38S19565C2__8S19565C1[] = {
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C3[0]),
  (VTBL_ENTRY)&_ZN8S19565C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C3D0Ev,
};
extern void _ZN8S19565C7D1Ev();
extern void _ZN8S19565C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C78S19565C38S19565C2__8S19565C1[] = {
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C7[0]),
  (VTBL_ENTRY)&_ZN8S19565C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19565C48S19565C78S19565C38S19565C2__A1__8S19565C1[] = {
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__8S19565C38S19565C2__8S19565C1[] = {
  ABISELECT(1216,748),
  ABISELECT(-8280,-5100),
  (VTBL_ENTRY)&(_ZTI8S19565C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C48S19565C2__A2__8S19565C1[] = {
  ABISELECT(5112,3148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
extern void _ZN8S19565C7D1Ev();
extern void _ZN8S19565C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C78S19565C2__A1__8S19565C1[] = {
  ABISELECT(3896,2400),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C7[0]),
  (VTBL_ENTRY)&_ZN8S19565C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19565C48S19565C78S19565C2__A3__8S19565C1[] = {
  ABISELECT(3896,2400),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__8S19565C2__8S19565C1[] = {
  ABISELECT(1216,748),
  ABISELECT(-8280,-5100),
  (VTBL_ENTRY)&(_ZTI8S19565C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__A__8S19565C2__8S19565C1[] = {
  ABISELECT(5112,3148),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI8S19565C2[0]),
};
extern void ABISELECT(_ZThn5600_N8S19565C2D1Ev,_ZThn3448_N8S19565C2D1Ev)();
extern void ABISELECT(_ZThn5600_N8S19565C2D0Ev,_ZThn3448_N8S19565C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19565C7__A1__8S19565C2__8S19565C1[] = {
  ABISELECT(3896,2400),
  ABISELECT(-5600,-3448),
  (VTBL_ENTRY)&(_ZTI8S19565C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S19565C2D1Ev,_ZThn3448_N8S19565C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S19565C2D0Ev,_ZThn3448_N8S19565C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__8S19565C1[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
extern void _ZN9S19565C10D1Ev();
extern void _ZN9S19565C10D0Ev();
extern void _ZN9S19565C102v2Ev();
static  VTBL_ENTRY _tg__ZTV9S19565C10__8S19565C1[] = {
  ABISELECT(7048,4340),
  ABISELECT(-9856,-6068),
  ABISELECT(4760,2928),
  ABISELECT(-360,-220),
  ABISELECT(-1576,-968),
  ABISELECT(376,228),
  0,
  (VTBL_ENTRY)&(_ZTI9S19565C10[0]),
  (VTBL_ENTRY)&_ZN9S19565C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19565C10D0Ev,
  (VTBL_ENTRY)&_ZN9S19565C102v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S19565C10D1Ev,_ZTv0_n20_N9S19565C10D1Ev)();
extern void ABISELECT(_ZThn376_N9S19565C10D1Ev,_ZThn228_N9S19565C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S19565C10D0Ev,_ZTv0_n20_N9S19565C10D0Ev)();
extern void ABISELECT(_ZThn376_N9S19565C10D0Ev,_ZThn228_N9S19565C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19565C3__9S19565C10__8S19565C1[] = {
  ABISELECT(-376,-228),
  ABISELECT(-1952,-1196),
  ABISELECT(-736,-448),
  ABISELECT(-376,-228),
  (VTBL_ENTRY)&(_ZTI9S19565C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19565C10D1Ev,_ZTv0_n20_N9S19565C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19565C10D0Ev,_ZTv0_n20_N9S19565C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__9S19565C10__8S19565C1[] = {
  ABISELECT(1216,748),
  ABISELECT(1576,968),
  (VTBL_ENTRY)&(_ZTI9S19565C10[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19565C10D1Ev,_ZTv0_n16_N9S19565C10D1Ev)();
extern void ABISELECT(_ZThn4760_N9S19565C10D1Ev,_ZThn2928_N9S19565C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19565C10D0Ev,_ZTv0_n16_N9S19565C10D0Ev)();
extern void ABISELECT(_ZThn4760_N9S19565C10D0Ev,_ZThn2928_N9S19565C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19565C7__A1__9S19565C10__8S19565C1[] = {
  ABISELECT(-4760,-2928),
  ABISELECT(-5120,-3148),
  ABISELECT(-4760,-2928),
  (VTBL_ENTRY)&(_ZTI9S19565C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19565C10D1Ev,_ZTv0_n16_N9S19565C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19565C10D0Ev,_ZTv0_n16_N9S19565C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S19565C10D1Ev,_ZTv0_n20_N9S19565C10D1Ev)();
extern void ABISELECT(_ZTv0_n40_N9S19565C10D0Ev,_ZTv0_n20_N9S19565C10D0Ev)();
extern void _ZN8S19565C22v1Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C2__9S19565C10__8S19565C1[] = {
  0,
  ABISELECT(9856,6068),
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  ABISELECT(9856,6068),
  (VTBL_ENTRY)&(_ZTI9S19565C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19565C10D1Ev,_ZTv0_n20_N9S19565C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S19565C10D0Ev,_ZTv0_n20_N9S19565C10D0Ev),
  (VTBL_ENTRY)&_ZN8S19565C22v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19565C48S19565C2__A4__9S19565C10__8S19565C1[] = {
  ABISELECT(5112,3148),
  ABISELECT(5472,3368),
  (VTBL_ENTRY)&(_ZTI9S19565C10[0]),
};
extern void ABISELECT(_ZTvn5600_n40_N9S19565C10D1Ev,_ZTvn3448_n20_N9S19565C10D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N9S19565C10D0Ev,_ZTvn3448_n20_N9S19565C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19565C78S19565C2__A3__9S19565C10__8S19565C1[] = {
  ABISELECT(3896,2400),
  ABISELECT(4256,2620),
  (VTBL_ENTRY)&(_ZTI9S19565C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N9S19565C10D1Ev,_ZTvn3448_n20_N9S19565C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N9S19565C10D0Ev,_ZTvn3448_n20_N9S19565C10D0Ev),
};
extern void _ZN8S19565C3D1Ev();
extern void _ZN8S19565C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C3__A1__8S19565C1[] = {
  ABISELECT(-1952,-1196),
  ABISELECT(-736,-448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C3[0]),
  (VTBL_ENTRY)&_ZN8S19565C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C3D0Ev,
};
extern void _ZN8S19565C7D1Ev();
extern void _ZN8S19565C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C78S19565C3__A2__8S19565C1[] = {
  ABISELECT(-736,-448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C7[0]),
  (VTBL_ENTRY)&_ZN8S19565C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19565C48S19565C78S19565C3__A4__8S19565C1[] = {
  ABISELECT(-736,-448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__8S19565C3__A1__8S19565C1[] = {
  ABISELECT(1216,748),
  ABISELECT(1952,1196),
  (VTBL_ENTRY)&(_ZTI8S19565C3[0]),
};
extern void _ZN8S19565C7D1Ev();
extern void _ZN8S19565C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C7__A3__8S19565C1[] = {
  ABISELECT(-5120,-3148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C7[0]),
  (VTBL_ENTRY)&_ZN8S19565C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19565C48S19565C7__A5__8S19565C1[] = {
  ABISELECT(-5120,-3148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
extern void _ZN9S19565C12D1Ev();
extern void _ZN9S19565C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19565C12__8S19565C1[] = {
  ABISELECT(-2320,-1432),
  ABISELECT(16144,9952),
  ABISELECT(16096,9920),
  ABISELECT(-8656,-5328),
  ABISELECT(-7440,-4580),
  0,
  (VTBL_ENTRY)&(_ZTI9S19565C12[0]),
  (VTBL_ENTRY)&_ZN9S19565C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19565C12D0Ev,
};
extern void _ZN9S19565C15D1Ev();
extern void _ZN9S19565C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19565C159S19565C12__8S19565C1[] = {
  ABISELECT(-8656,-5328),
  ABISELECT(-7440,-4580),
  0,
  (VTBL_ENTRY)&(_ZTI9S19565C15[0]),
  (VTBL_ENTRY)&_ZN9S19565C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19565C15D0Ev,
};
extern void _ZN8S19565C3D1Ev();
extern void _ZN8S19565C3D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C39S19565C159S19565C12__A2__8S19565C1[] = {
  ABISELECT(-8656,-5328),
  ABISELECT(-7440,-4580),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C3[0]),
  (VTBL_ENTRY)&_ZN8S19565C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C3D0Ev,
};
extern void _ZN8S19565C7D1Ev();
extern void _ZN8S19565C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19565C78S19565C39S19565C159S19565C12__A4__8S19565C1[] = {
  ABISELECT(-7440,-4580),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C7[0]),
  (VTBL_ENTRY)&_ZN8S19565C7D1Ev,
  (VTBL_ENTRY)&_ZN8S19565C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19565C48S19565C78S19565C39S19565C159S19565C12__A6__8S19565C1[] = {
  ABISELECT(-7440,-4580),
  0,
  (VTBL_ENTRY)&(_ZTI8S19565C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__8S19565C39S19565C159S19565C12__A2__8S19565C1[] = {
  ABISELECT(1216,748),
  ABISELECT(8656,5328),
  (VTBL_ENTRY)&(_ZTI8S19565C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__9S19565C159S19565C12__8S19565C1[] = {
  ABISELECT(1216,748),
  ABISELECT(8656,5328),
  (VTBL_ENTRY)&(_ZTI9S19565C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__9S19565C12__8S19565C1[] = {
  ABISELECT(1216,748),
  ABISELECT(8656,5328),
  (VTBL_ENTRY)&(_ZTI9S19565C12[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S19565C12D1Ev,_ZTv0_n24_N9S19565C12D1Ev)();
extern void ABISELECT(_ZThn16096_N9S19565C12D1Ev,_ZThn9920_N9S19565C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S19565C12D0Ev,_ZTv0_n24_N9S19565C12D0Ev)();
extern void ABISELECT(_ZThn16096_N9S19565C12D0Ev,_ZThn9920_N9S19565C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19565C13__9S19565C12__8S19565C1[] = {
  ABISELECT(-16096,-9920),
  ABISELECT(48,32),
  ABISELECT(-23536,-14500),
  ABISELECT(-24752,-15248),
  ABISELECT(-16096,-9920),
  (VTBL_ENTRY)&(_ZTI9S19565C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19565C12D1Ev,_ZTv0_n24_N9S19565C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S19565C12D0Ev,_ZTv0_n24_N9S19565C12D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19565C12D1Ev,_ZTv0_n16_N9S19565C12D1Ev)();
extern void ABISELECT(_ZTv0_n32_N9S19565C12D0Ev,_ZTv0_n16_N9S19565C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19565C7__9S19565C12__8S19565C1[] = {
  ABISELECT(2320,1432),
  ABISELECT(-5120,-3148),
  ABISELECT(2320,1432),
  (VTBL_ENTRY)&(_ZTI9S19565C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19565C12D1Ev,_ZTv0_n16_N9S19565C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19565C12D0Ev,_ZTv0_n16_N9S19565C12D0Ev),
};
extern void _ZN9S19565C13D1Ev();
extern void _ZN9S19565C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19565C13__8S19565C1[] = {
  ABISELECT(48,32),
  ABISELECT(-23536,-14500),
  ABISELECT(-24752,-15248),
  0,
  (VTBL_ENTRY)&(_ZTI9S19565C13[0]),
  (VTBL_ENTRY)&_ZN9S19565C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19565C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19565C4__9S19565C13__8S19565C1[] = {
  ABISELECT(1216,748),
  ABISELECT(24752,15248),
  (VTBL_ENTRY)&(_ZTI9S19565C13[0]),
};
static  VTT_ENTRY vtt_S19565C1[] = {
  {&(_ZTV8S19565C1[12]),  12,79},
  {&(_tg__ZTV8S19565C9__8S19565C1[9]),  9,12},
  {&(_tg__ZTV9S19565C10__8S19565C9__8S19565C1[10]),  10,13},
  {&(_tg__ZTV8S19565C3__8S19565C9__8S19565C1[5]),  5,7},
  {&(_tg__ZTV8S19565C4__8S19565C9__8S19565C1[3]),  3,3},
  {&(_tg__ZTV8S19565C7__A1__8S19565C9__8S19565C1[4]),  4,6},
  {&(_tg__ZTV8S19565C2__8S19565C9__8S19565C1[6]),  6,9},
  {&(_tg__ZTV8S19565C48S19565C2__A4__8S19565C9__8S19565C1[3]),  3,3},
  {&(_tg__ZTV8S19565C78S19565C2__A3__8S19565C9__8S19565C1[3]),  3,5},
  {&(_ZTV8S19565C1[21]),  21,79},
  {&(_ZTV8S19565C1[35]),  35,79},
  {&(_ZTV8S19565C1[27]),  27,79},
  {&(_ZTV8S19565C1[30]),  30,79},
  {&(_ZTV8S19565C1[45]),  45,79},
  {&(_ZTV8S19565C1[53]),  53,79},
  {&(_ZTV8S19565C1[59]),  59,79},
  {&(_ZTV8S19565C1[69]),  69,79},
  {&(_ZTV8S19565C1[77]),  77,79},
  {&(_tg__ZTV8S19565C2__8S19565C1[4]),  4,7},
  {&(_tg__ZTV8S19565C38S19565C2__8S19565C1[4]),  4,6},
  {&(_tg__ZTV8S19565C78S19565C38S19565C2__8S19565C1[3]),  3,5},
  {&(_tg__ZTV8S19565C48S19565C78S19565C38S19565C2__A1__8S19565C1[3]),  3,3},
  {&(_tg__ZTV8S19565C4__8S19565C38S19565C2__8S19565C1[3]),  3,3},
  {&(_tg__ZTV8S19565C48S19565C2__A2__8S19565C1[3]),  3,3},
  {&(_tg__ZTV8S19565C78S19565C2__A1__8S19565C1[3]),  3,5},
  {&(_tg__ZTV8S19565C48S19565C78S19565C2__A3__8S19565C1[3]),  3,3},
  {&(_tg__ZTV8S19565C4__8S19565C2__8S19565C1[3]),  3,3},
  {&(_tg__ZTV8S19565C4__A__8S19565C2__8S19565C1[3]),  3,3},
  {&(_tg__ZTV8S19565C7__A1__8S19565C2__8S19565C1[3]),  3,5},
  {&(_tg__ZTV8S19565C4__8S19565C1[3]),  3,3},
  {&(_tg__ZTV9S19565C10__8S19565C1[8]),  8,11},
  {&(_tg__ZTV8S19565C3__9S19565C10__8S19565C1[5]),  5,7},
  {&(_tg__ZTV8S19565C4__9S19565C10__8S19565C1[3]),  3,3},
  {&(_tg__ZTV8S19565C7__A1__9S19565C10__8S19565C1[4]),  4,6},
  {&(_tg__ZTV8S19565C2__9S19565C10__8S19565C1[6]),  6,9},
  {&(_tg__ZTV8S19565C48S19565C2__A4__9S19565C10__8S19565C1[3]),  3,3},
  {&(_tg__ZTV8S19565C78S19565C2__A3__9S19565C10__8S19565C1[3]),  3,5},
  {&(_tg__ZTV8S19565C3__A1__8S19565C1[4]),  4,6},
  {&(_tg__ZTV8S19565C78S19565C3__A2__8S19565C1[3]),  3,5},
  {&(_tg__ZTV8S19565C48S19565C78S19565C3__A4__8S19565C1[3]),  3,3},
  {&(_tg__ZTV8S19565C4__8S19565C3__A1__8S19565C1[3]),  3,3},
  {&(_tg__ZTV8S19565C7__A3__8S19565C1[3]),  3,5},
  {&(_tg__ZTV8S19565C48S19565C7__A5__8S19565C1[3]),  3,3},
  {&(_tg__ZTV9S19565C12__8S19565C1[7]),  7,9},
  {&(_tg__ZTV9S19565C159S19565C12__8S19565C1[4]),  4,6},
  {&(_tg__ZTV8S19565C39S19565C159S19565C12__A2__8S19565C1[4]),  4,6},
  {&(_tg__ZTV8S19565C78S19565C39S19565C159S19565C12__A4__8S19565C1[3]),  3,5},
  {&(_tg__ZTV8S19565C48S19565C78S19565C39S19565C159S19565C12__A6__8S19565C1[3]),  3,3},
  {&(_tg__ZTV8S19565C4__8S19565C39S19565C159S19565C12__A2__8S19565C1[3]),  3,3},
  {&(_tg__ZTV8S19565C4__9S19565C159S19565C12__8S19565C1[3]),  3,3},
  {&(_tg__ZTV8S19565C4__9S19565C12__8S19565C1[3]),  3,3},
  {&(_tg__ZTV9S19565C13__9S19565C12__8S19565C1[6]),  6,8},
  {&(_tg__ZTV8S19565C7__9S19565C12__8S19565C1[4]),  4,6},
  {&(_tg__ZTV9S19565C13__8S19565C1[5]),  5,7},
  {&(_tg__ZTV8S19565C4__9S19565C13__8S19565C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19565C1[];
extern  VTBL_ENTRY _ZTV8S19565C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19565C1[];
static VTBL_ENTRY alt_thunk_names84[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19565C12D0Ev,_ZTv0_n24_N9S19565C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16096_N9S19565C12D0Ev,_ZThn9920_N9S19565C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S19565C12D1Ev,_ZTv0_n24_N9S19565C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16096_N9S19565C12D1Ev,_ZThn9920_N9S19565C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19565C10D0Ev,_ZTv0_n16_N9S19565C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4760_N9S19565C10D0Ev,_ZThn2928_N9S19565C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19565C10D1Ev,_ZTv0_n16_N9S19565C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4760_N9S19565C10D1Ev,_ZThn2928_N9S19565C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19565C10D0Ev,_ZTv0_n20_N9S19565C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N9S19565C10D0Ev,_ZThn228_N9S19565C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S19565C10D1Ev,_ZTv0_n20_N9S19565C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N9S19565C10D1Ev,_ZThn228_N9S19565C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19565C9D0Ev,_ZTv0_n16_N8S19565C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24624_N8S19565C9D0Ev,_ZThn15156_N8S19565C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19565C9D1Ev,_ZTv0_n16_N8S19565C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24624_N8S19565C9D1Ev,_ZThn15156_N8S19565C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19565C9D0Ev,_ZTv0_n20_N8S19565C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10008_N8S19565C9D0Ev,_ZThn6160_N8S19565C9D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn20240_N8S19565C9D0Ev,_ZThn12456_N8S19565C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19565C9D1Ev,_ZTv0_n20_N8S19565C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10008_N8S19565C9D1Ev,_ZThn6160_N8S19565C9D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn20240_N8S19565C9D1Ev,_ZThn12456_N8S19565C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19565C9D0Ev,_ZTv0_n36_N8S19565C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19864_N8S19565C9D0Ev,_ZThn12228_N8S19565C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19565C9D1Ev,_ZTv0_n36_N8S19565C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19864_N8S19565C9D1Ev,_ZThn12228_N8S19565C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19565C1D0Ev,_ZTv0_n24_N8S19565C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43040_N8S19565C1D0Ev,_ZThn26508_N8S19565C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19565C1D1Ev,_ZTv0_n24_N8S19565C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn43040_N8S19565C1D1Ev,_ZThn26508_N8S19565C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19565C1D0Ev,_ZTv0_n32_N8S19565C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26944_N8S19565C1D0Ev,_ZThn16588_N8S19565C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19565C1D1Ev,_ZTv0_n32_N8S19565C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26944_N8S19565C1D1Ev,_ZThn16588_N8S19565C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19565C1D0Ev,_ZTv0_n16_N8S19565C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24624_N8S19565C1D0Ev,_ZThn15156_N8S19565C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19565C1D1Ev,_ZTv0_n16_N8S19565C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24624_N8S19565C1D1Ev,_ZThn15156_N8S19565C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19565C1D0Ev,_ZTv0_n36_N8S19565C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19864_N8S19565C1D0Ev,_ZThn12228_N8S19565C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S19565C1D1Ev,_ZTv0_n36_N8S19565C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn19864_N8S19565C1D1Ev,_ZThn12228_N8S19565C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19565C1D0Ev,_ZTv0_n20_N8S19565C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20240_N8S19565C1D0Ev,_ZThn12456_N8S19565C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10008_N8S19565C1D0Ev,_ZThn6160_N8S19565C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S19565C1D1Ev,_ZTv0_n20_N8S19565C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20240_N8S19565C1D1Ev,_ZThn12456_N8S19565C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10008_N8S19565C1D1Ev,_ZThn6160_N8S19565C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19565C1 = {  "S19565C1", // class name
  bases_S19565C1, 51,
  &(vtc_S19565C1[0]), // expected_vtbl_contents
  &(vtt_S19565C1[0]), // expected_vtt_contents
  ABISELECT(43200,26608), // object size
  NSPAIRA(_ZTI8S19565C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19565C1),79, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19565C1),55, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names84,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8616C2  {
  int s8616c2f0;
  void *s8616c2f1;
  ::S8549C3 s8616c2f2;
  void *s8616c2f3;
  ::S5635C32 s8616c2f4;
  int s8616c2f5;
  void *s8616c2f6[2];
  ::S8549C5_nt s8616c2f7;
  ::S5634C32 s8616c2f8;
  ::S8549C9 s8616c2f9;
  int s8616c2f10[2];
  char s8616c2f11[5];
  int s8616c2f12;
  ::S5634C30_nt s8616c2f13;
  void *s8616c2f14;
  int s8616c2f15;
  ::S2264C13_nt s8616c2f16;
  ::S2264C13_nt s8616c2f17;
  ::S2264C13_nt s8616c2f18;
  virtual  ~S8616C2(); // _ZN7S8616C2D1Ev
  virtual void  v15(); // _ZN7S8616C23v15Ev
  virtual void  v16(); // _ZN7S8616C23v16Ev
  virtual void  v17(); // _ZN7S8616C23v17Ev
  virtual void  v18(); // _ZN7S8616C23v18Ev
  virtual void  v19(); // _ZN7S8616C23v19Ev
  virtual void  v20(); // _ZN7S8616C23v20Ev
  virtual void  v21(); // _ZN7S8616C23v21Ev
  virtual void  v22(); // _ZN7S8616C23v22Ev
  virtual void  v23(); // _ZN7S8616C23v23Ev
  virtual void  v24(); // _ZN7S8616C23v24Ev
  virtual void  v25(); // _ZN7S8616C23v25Ev
  virtual void  v26(); // _ZN7S8616C23v26Ev
  virtual void  v27(); // _ZN7S8616C23v27Ev
  virtual void  v28(); // _ZN7S8616C23v28Ev
  virtual void  v29(); // _ZN7S8616C23v29Ev
  virtual void  v30(); // _ZN7S8616C23v30Ev
  virtual void  v31(); // _ZN7S8616C23v31Ev
  virtual void  v32(); // _ZN7S8616C23v32Ev
  virtual void  v33(); // _ZN7S8616C23v33Ev
  virtual void  v34(); // _ZN7S8616C23v34Ev
  virtual void  v35(); // _ZN7S8616C23v35Ev
  virtual void  v36(); // _ZN7S8616C23v36Ev
  virtual void  v37(); // _ZN7S8616C23v37Ev
  virtual void  v38(); // _ZN7S8616C23v38Ev
  virtual void  v39(); // _ZN7S8616C23v39Ev
  S8616C2(); // tgen
};
//SIG(-1 S8616C2) 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 Fi Fp FC2{ vd v26 v27 v28 v29 v30 v31 Fi Fp[2] Fi} Fp FC3{ m Fp} Fi Fp[2] FC4{ m FC5{ m Fp Fi[2] FC6{ m}} Fp[2]} FC7{ m Fp} FC8{ m FL Fc FC9{ m Fp Fi[2] FC10{ m}} Fi} Fi[2] Fc[5] Fi FC11{ m Fp} Fp Fi FC12{ m FC13{ m FL[2]}} FC12 FC12}


 S8616C2 ::~S8616C2(){ note_dtor("S8616C2", this);}
void  S8616C2 ::v15(){vfunc_called(this, "_ZN7S8616C23v15Ev");}
void  S8616C2 ::v16(){vfunc_called(this, "_ZN7S8616C23v16Ev");}
void  S8616C2 ::v17(){vfunc_called(this, "_ZN7S8616C23v17Ev");}
void  S8616C2 ::v18(){vfunc_called(this, "_ZN7S8616C23v18Ev");}
void  S8616C2 ::v19(){vfunc_called(this, "_ZN7S8616C23v19Ev");}
void  S8616C2 ::v20(){vfunc_called(this, "_ZN7S8616C23v20Ev");}
void  S8616C2 ::v21(){vfunc_called(this, "_ZN7S8616C23v21Ev");}
void  S8616C2 ::v22(){vfunc_called(this, "_ZN7S8616C23v22Ev");}
void  S8616C2 ::v23(){vfunc_called(this, "_ZN7S8616C23v23Ev");}
void  S8616C2 ::v24(){vfunc_called(this, "_ZN7S8616C23v24Ev");}
void  S8616C2 ::v25(){vfunc_called(this, "_ZN7S8616C23v25Ev");}
void  S8616C2 ::v26(){vfunc_called(this, "_ZN7S8616C23v26Ev");}
void  S8616C2 ::v27(){vfunc_called(this, "_ZN7S8616C23v27Ev");}
void  S8616C2 ::v28(){vfunc_called(this, "_ZN7S8616C23v28Ev");}
void  S8616C2 ::v29(){vfunc_called(this, "_ZN7S8616C23v29Ev");}
void  S8616C2 ::v30(){vfunc_called(this, "_ZN7S8616C23v30Ev");}
void  S8616C2 ::v31(){vfunc_called(this, "_ZN7S8616C23v31Ev");}
void  S8616C2 ::v32(){vfunc_called(this, "_ZN7S8616C23v32Ev");}
void  S8616C2 ::v33(){vfunc_called(this, "_ZN7S8616C23v33Ev");}
void  S8616C2 ::v34(){vfunc_called(this, "_ZN7S8616C23v34Ev");}
void  S8616C2 ::v35(){vfunc_called(this, "_ZN7S8616C23v35Ev");}
void  S8616C2 ::v36(){vfunc_called(this, "_ZN7S8616C23v36Ev");}
void  S8616C2 ::v37(){vfunc_called(this, "_ZN7S8616C23v37Ev");}
void  S8616C2 ::v38(){vfunc_called(this, "_ZN7S8616C23v38Ev");}
void  S8616C2 ::v39(){vfunc_called(this, "_ZN7S8616C23v39Ev");}
S8616C2 ::S8616C2(){ note_ctor("S8616C2", this);} // tgen

static void Test_S8616C2()
{
  extern Class_Descriptor cd_S8616C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(38,49)];
    init_test(&cd_S8616C2, buf);
    S8616C2 *dp, &lv = *(dp=new (buf) S8616C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(296,192), "sizeof(S8616C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8616C2)");
    check_field_offset(lv, s8616c2f0, ABISELECT(8,4), "S8616C2.s8616c2f0");
    check_field_offset(lv, s8616c2f1, ABISELECT(16,8), "S8616C2.s8616c2f1");
    check_field_offset(lv, s8616c2f2, ABISELECT(24,12), "S8616C2.s8616c2f2");
    check_field_offset(lv, s8616c2f3, ABISELECT(64,32), "S8616C2.s8616c2f3");
    check_field_offset(lv, s8616c2f4, ABISELECT(72,36), "S8616C2.s8616c2f4");
    check_field_offset(lv, s8616c2f5, ABISELECT(80,40), "S8616C2.s8616c2f5");
    check_field_offset(lv, s8616c2f6, ABISELECT(88,44), "S8616C2.s8616c2f6");
    check_field_offset(lv, s8616c2f7, ABISELECT(104,52), "S8616C2.s8616c2f7");
    check_field_offset(lv, s8616c2f8, ABISELECT(144,76), "S8616C2.s8616c2f8");
    check_field_offset(lv, s8616c2f9, ABISELECT(152,80), "S8616C2.s8616c2f9");
    check_field_offset(lv, s8616c2f10, ABISELECT(200,112), "S8616C2.s8616c2f10");
    check_field_offset(lv, s8616c2f11, ABISELECT(208,120), "S8616C2.s8616c2f11");
    check_field_offset(lv, s8616c2f12, ABISELECT(216,128), "S8616C2.s8616c2f12");
    check_field_offset(lv, s8616c2f13, ABISELECT(224,132), "S8616C2.s8616c2f13");
    check_field_offset(lv, s8616c2f14, ABISELECT(232,136), "S8616C2.s8616c2f14");
    check_field_offset(lv, s8616c2f15, ABISELECT(240,140), "S8616C2.s8616c2f15");
    check_field_offset(lv, s8616c2f16, ABISELECT(248,144), "S8616C2.s8616c2f16");
    check_field_offset(lv, s8616c2f17, ABISELECT(264,160), "S8616C2.s8616c2f17");
    check_field_offset(lv, s8616c2f18, ABISELECT(280,176), "S8616C2.s8616c2f18");
    test_class_info(&lv, &cd_S8616C2);
    dp->~S8616C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8616C2(Test_S8616C2, "S8616C2", ABISELECT(296,192));

#else // __cplusplus

extern void _ZN7S8616C2C1Ev();
extern void _ZN7S8616C2D1Ev();
Name_Map name_map_S8616C2[] = {
  NSPAIR(_ZN7S8616C2C1Ev),
  NSPAIR(_ZN7S8616C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8616C2[];
extern void _ZN7S8616C2D1Ev();
extern void _ZN7S8616C2D0Ev();
extern void _ZN7S8616C23v15Ev();
extern void _ZN7S8616C23v16Ev();
extern void _ZN7S8616C23v17Ev();
extern void _ZN7S8616C23v18Ev();
extern void _ZN7S8616C23v19Ev();
extern void _ZN7S8616C23v20Ev();
extern void _ZN7S8616C23v21Ev();
extern void _ZN7S8616C23v22Ev();
extern void _ZN7S8616C23v23Ev();
extern void _ZN7S8616C23v24Ev();
extern void _ZN7S8616C23v25Ev();
extern void _ZN7S8616C23v26Ev();
extern void _ZN7S8616C23v27Ev();
extern void _ZN7S8616C23v28Ev();
extern void _ZN7S8616C23v29Ev();
extern void _ZN7S8616C23v30Ev();
extern void _ZN7S8616C23v31Ev();
extern void _ZN7S8616C23v32Ev();
extern void _ZN7S8616C23v33Ev();
extern void _ZN7S8616C23v34Ev();
extern void _ZN7S8616C23v35Ev();
extern void _ZN7S8616C23v36Ev();
extern void _ZN7S8616C23v37Ev();
extern void _ZN7S8616C23v38Ev();
extern void _ZN7S8616C23v39Ev();
static  VTBL_ENTRY vtc_S8616C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8616C2[0]),
  (VTBL_ENTRY)&_ZN7S8616C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8616C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v21Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v22Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v23Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v24Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v25Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v26Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v27Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v28Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v29Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v30Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v31Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v32Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v33Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v34Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v35Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v36Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v37Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v38Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v39Ev,
};
extern VTBL_ENTRY _ZTI7S8616C2[];
extern  VTBL_ENTRY _ZTV7S8616C2[];
Class_Descriptor cd_S8616C2 = {  "S8616C2", // class name
  0,0,//no base classes
  &(vtc_S8616C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(296,192), // object size
  NSPAIRA(_ZTI7S8616C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8616C2),29, //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  S8616C1  : S8616C2 {
  void *s8616c1f0[4];
  int s8616c1f1;
  ::S5635C32 s8616c1f2;
  virtual  ~S8616C1(); // _ZN7S8616C1D1Ev
  virtual void  v1(); // _ZN7S8616C12v1Ev
  virtual void  v2(); // _ZN7S8616C12v2Ev
  virtual void  v3(); // _ZN7S8616C12v3Ev
  virtual void  v4(); // _ZN7S8616C12v4Ev
  virtual void  v5(); // _ZN7S8616C12v5Ev
  virtual void  v6(); // _ZN7S8616C12v6Ev
  virtual void  v7(); // _ZN7S8616C12v7Ev
  virtual void  v8(); // _ZN7S8616C12v8Ev
  virtual void  v9(); // _ZN7S8616C12v9Ev
  virtual void  v10(); // _ZN7S8616C13v10Ev
  virtual void  v11(); // _ZN7S8616C13v11Ev
  virtual void  v12(); // _ZN7S8616C13v12Ev
  virtual void  v13(); // _ZN7S8616C13v13Ev
  virtual void  v14(); // _ZN7S8616C13v14Ev
  S8616C1(); // tgen
};
//SIG(1 S8616C1) C1{ BC2{ vd 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 Fi Fp FC3{ vd v40 v41 v42 v43 v44 v45 Fi Fp[2] Fi} Fp FC4{ m Fp} Fi Fp[2] FC5{ m FC6{ m Fp Fi[2] FC7{ m}} Fp[2]} FC8{ m Fp} FC9{ m FL Fc FC10{ m Fp Fi[2] FC11{ m}} Fi} Fi[2] Fc[5] Fi FC12{ m Fp} Fp Fi FC13{ m FC14{ m FL[2]}} FC13 FC13} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 v11 v12 v13 v14 Fp[4] Fi FC4}


 S8616C1 ::~S8616C1(){ note_dtor("S8616C1", this);}
void  S8616C1 ::v1(){vfunc_called(this, "_ZN7S8616C12v1Ev");}
void  S8616C1 ::v2(){vfunc_called(this, "_ZN7S8616C12v2Ev");}
void  S8616C1 ::v3(){vfunc_called(this, "_ZN7S8616C12v3Ev");}
void  S8616C1 ::v4(){vfunc_called(this, "_ZN7S8616C12v4Ev");}
void  S8616C1 ::v5(){vfunc_called(this, "_ZN7S8616C12v5Ev");}
void  S8616C1 ::v6(){vfunc_called(this, "_ZN7S8616C12v6Ev");}
void  S8616C1 ::v7(){vfunc_called(this, "_ZN7S8616C12v7Ev");}
void  S8616C1 ::v8(){vfunc_called(this, "_ZN7S8616C12v8Ev");}
void  S8616C1 ::v9(){vfunc_called(this, "_ZN7S8616C12v9Ev");}
void  S8616C1 ::v10(){vfunc_called(this, "_ZN7S8616C13v10Ev");}
void  S8616C1 ::v11(){vfunc_called(this, "_ZN7S8616C13v11Ev");}
void  S8616C1 ::v12(){vfunc_called(this, "_ZN7S8616C13v12Ev");}
void  S8616C1 ::v13(){vfunc_called(this, "_ZN7S8616C13v13Ev");}
void  S8616C1 ::v14(){vfunc_called(this, "_ZN7S8616C13v14Ev");}
S8616C1 ::S8616C1(){ note_ctor("S8616C1", this);} // tgen

static void Test_S8616C1()
{
  extern Class_Descriptor cd_S8616C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(44,55)];
    init_test(&cd_S8616C1, buf);
    S8616C1 *dp, &lv = *(dp=new (buf) S8616C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(344,216), "sizeof(S8616C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8616C1)");
    check_base_class_offset(lv, (S8616C2*), 0, "S8616C1");
    check_field_offset(lv, s8616c1f0, ABISELECT(296,192), "S8616C1.s8616c1f0");
    check_field_offset(lv, s8616c1f1, ABISELECT(328,208), "S8616C1.s8616c1f1");
    check_field_offset(lv, s8616c1f2, ABISELECT(336,212), "S8616C1.s8616c1f2");
    test_class_info(&lv, &cd_S8616C1);
    dp->~S8616C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8616C1(Test_S8616C1, "S8616C1", ABISELECT(344,216));

#else // __cplusplus

extern void _ZN7S8616C1C1Ev();
extern void _ZN7S8616C1D1Ev();
Name_Map name_map_S8616C1[] = {
  NSPAIR(_ZN7S8616C1C1Ev),
  NSPAIR(_ZN7S8616C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8616C2;
extern VTBL_ENTRY _ZTI7S8616C2[];
extern  VTBL_ENTRY _ZTV7S8616C2[];
static Base_Class bases_S8616C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8616C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S8616C1[];
extern void _ZN7S8616C1D1Ev();
extern void _ZN7S8616C1D0Ev();
extern void _ZN7S8616C23v15Ev();
extern void _ZN7S8616C23v16Ev();
extern void _ZN7S8616C23v17Ev();
extern void _ZN7S8616C23v18Ev();
extern void _ZN7S8616C23v19Ev();
extern void _ZN7S8616C23v20Ev();
extern void _ZN7S8616C23v21Ev();
extern void _ZN7S8616C23v22Ev();
extern void _ZN7S8616C23v23Ev();
extern void _ZN7S8616C23v24Ev();
extern void _ZN7S8616C23v25Ev();
extern void _ZN7S8616C23v26Ev();
extern void _ZN7S8616C23v27Ev();
extern void _ZN7S8616C23v28Ev();
extern void _ZN7S8616C23v29Ev();
extern void _ZN7S8616C23v30Ev();
extern void _ZN7S8616C23v31Ev();
extern void _ZN7S8616C23v32Ev();
extern void _ZN7S8616C23v33Ev();
extern void _ZN7S8616C23v34Ev();
extern void _ZN7S8616C23v35Ev();
extern void _ZN7S8616C23v36Ev();
extern void _ZN7S8616C23v37Ev();
extern void _ZN7S8616C23v38Ev();
extern void _ZN7S8616C23v39Ev();
extern void _ZN7S8616C12v1Ev();
extern void _ZN7S8616C12v2Ev();
extern void _ZN7S8616C12v3Ev();
extern void _ZN7S8616C12v4Ev();
extern void _ZN7S8616C12v5Ev();
extern void _ZN7S8616C12v6Ev();
extern void _ZN7S8616C12v7Ev();
extern void _ZN7S8616C12v8Ev();
extern void _ZN7S8616C12v9Ev();
extern void _ZN7S8616C13v10Ev();
extern void _ZN7S8616C13v11Ev();
extern void _ZN7S8616C13v12Ev();
extern void _ZN7S8616C13v13Ev();
extern void _ZN7S8616C13v14Ev();
static  VTBL_ENTRY vtc_S8616C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8616C1[0]),
  (VTBL_ENTRY)&_ZN7S8616C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8616C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v15Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v16Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v17Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v18Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v19Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v20Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v21Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v22Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v23Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v24Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v25Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v26Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v27Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v28Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v29Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v30Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v31Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v32Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v33Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v34Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v35Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v36Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v37Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v38Ev,
  (VTBL_ENTRY)&_ZN7S8616C23v39Ev,
  (VTBL_ENTRY)&_ZN7S8616C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8616C12v2Ev,
  (VTBL_ENTRY)&_ZN7S8616C12v3Ev,
  (VTBL_ENTRY)&_ZN7S8616C12v4Ev,
  (VTBL_ENTRY)&_ZN7S8616C12v5Ev,
  (VTBL_ENTRY)&_ZN7S8616C12v6Ev,
  (VTBL_ENTRY)&_ZN7S8616C12v7Ev,
  (VTBL_ENTRY)&_ZN7S8616C12v8Ev,
  (VTBL_ENTRY)&_ZN7S8616C12v9Ev,
  (VTBL_ENTRY)&_ZN7S8616C13v10Ev,
  (VTBL_ENTRY)&_ZN7S8616C13v11Ev,
  (VTBL_ENTRY)&_ZN7S8616C13v12Ev,
  (VTBL_ENTRY)&_ZN7S8616C13v13Ev,
  (VTBL_ENTRY)&_ZN7S8616C13v14Ev,
};
extern VTBL_ENTRY _ZTI7S8616C1[];
extern  VTBL_ENTRY _ZTV7S8616C1[];
Class_Descriptor cd_S8616C1 = {  "S8616C1", // class name
  bases_S8616C1, 1,
  &(vtc_S8616C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(344,216), // object size
  NSPAIRA(_ZTI7S8616C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8616C1),43, //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  S20731C4_nt  : S2264C28 {
  virtual  ~S20731C4_nt(); // _ZN11S20731C4_ntD1Ev
  S20731C4_nt(); // tgen
};
//SIG(-1 S20731C4_nt) C1{ BC2{ m} vd}


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

//skip512 S20731C4_nt

#else // __cplusplus

extern void _ZN11S20731C4_ntC1Ev();
extern void _ZN11S20731C4_ntD1Ev();
Name_Map name_map_S20731C4_nt[] = {
  NSPAIR(_ZN11S20731C4_ntC1Ev),
  NSPAIR(_ZN11S20731C4_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S20731C4_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI11S20731C4_nt[];
extern void _ZN11S20731C4_ntD1Ev();
extern void _ZN11S20731C4_ntD0Ev();
static  VTBL_ENTRY vtc_S20731C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C4_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C4_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
VTBL_ENTRY *P__ZTI11S20731C4_nt = _ZTI11S20731C4_nt; 
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
Class_Descriptor cd_S20731C4_nt = {  "S20731C4_nt", // class name
  bases_S20731C4_nt, 1,
  &(vtc_S20731C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S20731C4_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV11S20731C4_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  S20731C10_nt  : virtual S2264C28 {
  ::S2264C28 s20731c10f0;
  ~S20731C10_nt(); // tgen
  S20731C10_nt(); // tgen
};
//SIG(-1 S20731C10_nt) C1{ VBC2{ m} FC2}


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

//skip512 S20731C10_nt

#else // __cplusplus

extern void _ZN12S20731C10_ntC1Ev();
extern void _ZN12S20731C10_ntD1Ev();
Name_Map name_map_S20731C10_nt[] = {
  NSPAIR(_ZN12S20731C10_ntC1Ev),
  NSPAIR(_ZN12S20731C10_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S20731C10_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI12S20731C10_nt[];
static  VTBL_ENTRY vtc_S20731C10_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern VTBL_ENTRY _ZTV12S20731C10_nt[];
static  VTT_ENTRY vtt_S20731C10_nt[] = {
  {&(_ZTV12S20731C10_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
VTBL_ENTRY *P__ZTI12S20731C10_nt = _ZTI12S20731C10_nt; 
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
Class_Descriptor cd_S20731C10_nt = {  "S20731C10_nt", // class name
  bases_S20731C10_nt, 1,
  &(vtc_S20731C10_nt[0]), // expected_vtbl_contents
  &(vtt_S20731C10_nt[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI12S20731C10_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV12S20731C10_nt),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT12S20731C10_nt),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  S20731C11_nt  : virtual S2264C28 {
  virtual  ~S20731C11_nt(); // _ZN12S20731C11_ntD2Ev
  S20731C11_nt(); // tgen
};
//SIG(-1 S20731C11_nt) C1{ VBC2{ m} vd}


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

//skip512 S20731C11_nt

#else // __cplusplus

extern void _ZN12S20731C11_ntC1Ev();
extern void _ZN12S20731C11_ntD2Ev();
Name_Map name_map_S20731C11_nt[] = {
  NSPAIR(_ZN12S20731C11_ntC1Ev),
  NSPAIR(_ZN12S20731C11_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S20731C11_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI12S20731C11_nt[];
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY vtc_S20731C11_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
extern VTBL_ENTRY _ZTV12S20731C11_nt[];
static  VTT_ENTRY vtt_S20731C11_nt[] = {
  {&(_ZTV12S20731C11_nt[3]),  3,5},
};
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
VTBL_ENTRY *P__ZTI12S20731C11_nt = _ZTI12S20731C11_nt; 
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
Class_Descriptor cd_S20731C11_nt = {  "S20731C11_nt", // class name
  bases_S20731C11_nt, 1,
  &(vtc_S20731C11_nt[0]), // expected_vtbl_contents
  &(vtt_S20731C11_nt[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI12S20731C11_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV12S20731C11_nt),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT12S20731C11_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  S20731C12_nt  : virtual S2264C28 , S20731C10_nt {
  char s20731c12f0:3;
  ~S20731C12_nt(); // tgen
  S20731C12_nt(); // tgen
};
//SIG(-1 S20731C12_nt) C1{ VBC2{ m} BC3{ VBC2 FC2} Fc:3}


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

//skip512 S20731C12_nt

#else // __cplusplus

extern void _ZN12S20731C12_ntC1Ev();
extern void _ZN12S20731C12_ntD1Ev();
Name_Map name_map_S20731C12_nt[] = {
  NSPAIR(_ZN12S20731C12_ntC1Ev),
  NSPAIR(_ZN12S20731C12_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
static Base_Class bases_S20731C12_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20731C10_nt,    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 _ZTI12S20731C12_nt[];
static  VTBL_ENTRY vtc_S20731C12_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
extern VTBL_ENTRY _ZTV12S20731C12_nt[];
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__12S20731C12_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
static  VTT_ENTRY vtt_S20731C12_nt[] = {
  {&(_ZTV12S20731C12_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt__12S20731C12_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
VTBL_ENTRY *P__ZTI12S20731C12_nt = _ZTI12S20731C12_nt; 
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
Class_Descriptor cd_S20731C12_nt = {  "S20731C12_nt", // class name
  bases_S20731C12_nt, 2,
  &(vtc_S20731C12_nt[0]), // expected_vtbl_contents
  &(vtt_S20731C12_nt[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI12S20731C12_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV12S20731C12_nt),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT12S20731C12_nt),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  S20731C9_nt  : virtual S20731C4_nt , virtual S20731C10_nt , S20731C11_nt , S20731C12_nt {
  ~S20731C9_nt(); // tgen
  S20731C9_nt(); // tgen
};
//SIG(-1 S20731C9_nt) C1{ VBC2{ BC3{ m} vd} VBC4{ VBC3 FC3} BC5{ VBC3 vd} BC6{ VBC3 BC4 Fc:3}}


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

//skip512 S20731C9_nt

#else // __cplusplus

extern void _ZN11S20731C9_ntC1Ev();
extern void _ZN11S20731C9_ntD1Ev();
Name_Map name_map_S20731C9_nt[] = {
  NSPAIR(_ZN11S20731C9_ntC1Ev),
  NSPAIR(_ZN11S20731C9_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C4_nt;
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
static Base_Class bases_S20731C9_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    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
  0, 0},
  {&cd_S20731C4_nt,    ABISELECT(24,12), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20731C10_nt,    ABISELECT(32,16), //bcp->offset
    15, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20731C11_nt,    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_S20731C10_nt,    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
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZThn24_N11S20731C9_ntD1Ev,_ZThn12_N11S20731C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
extern void ABISELECT(_ZThn24_N11S20731C9_ntD0Ev,_ZThn12_N11S20731C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20731C9_nt[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
extern VTBL_ENTRY _ZTV11S20731C9_nt[];
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt__11S20731C9_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt__A1__11S20731C9_nt[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
static  VTT_ENTRY vtt_S20731C9_nt[] = {
  {&(_ZTV11S20731C9_nt[5]),  5,18},
  {&(_tg__ZTV12S20731C11_nt__11S20731C9_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt__A1__11S20731C9_nt[3]),  3,3},
  {&(_ZTV11S20731C9_nt[13]),  13,18},
  {&(_ZTV11S20731C9_nt[18]),  18,18},
  {&(_ZTV11S20731C9_nt[10]),  10,18},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
VTBL_ENTRY *P__ZTI11S20731C9_nt = _ZTI11S20731C9_nt; 
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
static VTBL_ENTRY alt_thunk_names85[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N11S20731C9_ntD0Ev,_ZThn12_N11S20731C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N11S20731C9_ntD1Ev,_ZThn12_N11S20731C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20731C9_nt = {  "S20731C9_nt", // class name
  bases_S20731C9_nt, 7,
  &(vtc_S20731C9_nt[0]), // expected_vtbl_contents
  &(vtt_S20731C9_nt[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI11S20731C9_nt),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV11S20731C9_nt),18, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S20731C9_nt),8, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names85,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20731C8_nt  : virtual S20731C4_nt , S20731C9_nt {
  __tsi64 s20731c8f0;
  virtual  ~S20731C8_nt(); // _ZN11S20731C8_ntD2Ev
  S20731C8_nt(); // tgen
};
//SIG(-1 S20731C8_nt) C1{ VBC2{ BC3{ m} vd} BC4{ VBC2 VBC5{ VBC3 FC3} BC6{ VBC3 vd} BC7{ VBC3 BC5 Fc:3}} vd FL}


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

//skip512 S20731C8_nt

#else // __cplusplus

extern void _ZN11S20731C8_ntC1Ev();
extern void _ZN11S20731C8_ntD2Ev();
Name_Map name_map_S20731C8_nt[] = {
  NSPAIR(_ZN11S20731C8_ntC1Ev),
  NSPAIR(_ZN11S20731C8_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C4_nt;
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
static Base_Class bases_S20731C8_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    ABISELECT(32,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
  0, 0},
  {&cd_S20731C4_nt,    ABISELECT(32,20), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20731C10_nt,    ABISELECT(40,24), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20731C11_nt,    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
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    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
    4, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S20731C8_nt[];
extern void _ZN11S20731C8_ntD1Ev();
extern void _ZN11S20731C8_ntD0Ev();
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev)();
extern void ABISELECT(_ZThn32_N11S20731C8_ntD1Ev,_ZThn20_N11S20731C8_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev)();
extern void ABISELECT(_ZThn32_N11S20731C8_ntD0Ev,_ZThn20_N11S20731C8_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20731C8_nt[] = {
  ABISELECT(40,24),
  ABISELECT(32,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C8_ntD0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
extern VTBL_ENTRY _ZTV11S20731C8_nt[];
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__11S20731C8_nt[] = {
  ABISELECT(40,24),
  ABISELECT(32,20),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt__11S20731C8_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt__A1__11S20731C8_nt[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZThn32_N11S20731C9_ntD1Ev,_ZThn20_N11S20731C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
extern void ABISELECT(_ZThn32_N11S20731C9_ntD0Ev,_ZThn20_N11S20731C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt__11S20731C8_nt[] = {
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt__11S20731C8_nt[] = {
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt__11S20731C8_nt[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C8_nt[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
static  VTT_ENTRY vtt_S20731C8_nt[] = {
  {&(_ZTV11S20731C8_nt[5]),  5,18},
  {&(_tg__ZTV11S20731C9_nt__11S20731C8_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt__11S20731C8_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt__A1__11S20731C8_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt__11S20731C8_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt__11S20731C8_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt__11S20731C8_nt[3]),  3,3},
  {&(_ZTV11S20731C8_nt[13]),  13,18},
  {&(_ZTV11S20731C8_nt[18]),  18,18},
  {&(_ZTV11S20731C8_nt[10]),  10,18},
  {&(_tg__ZTV12S20731C10_nt__11S20731C8_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI11S20731C8_nt[];
VTBL_ENTRY *P__ZTI11S20731C8_nt = _ZTI11S20731C8_nt; 
extern  VTBL_ENTRY _ZTV11S20731C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C8_nt[];
static VTBL_ENTRY alt_thunk_names86[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N11S20731C9_ntD0Ev,_ZThn20_N11S20731C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N11S20731C9_ntD1Ev,_ZThn20_N11S20731C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N11S20731C8_ntD0Ev,_ZThn20_N11S20731C8_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N11S20731C8_ntD1Ev,_ZThn20_N11S20731C8_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20731C8_nt = {  "S20731C8_nt", // class name
  bases_S20731C8_nt, 8,
  &(vtc_S20731C8_nt[0]), // expected_vtbl_contents
  &(vtt_S20731C8_nt[0]), // expected_vtt_contents
  ABISELECT(56,32), // object size
  NSPAIRA(_ZTI11S20731C8_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV11S20731C8_nt),18, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S20731C8_nt),12, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names86,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20731C13_nt  : S20731C10_nt , virtual S20731C9_nt , S2264C28 {
  ~S20731C13_nt(); // tgen
  S20731C13_nt(); // tgen
};
//SIG(-1 S20731C13_nt) C1{ BC2{ VBC3{ m} FC3} VBC4{ VBC5{ BC3 vd} VBC2 BC6{ VBC3 vd} BC7{ VBC3 BC2 Fc:3}} BC3}


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

//skip512 S20731C13_nt

#else // __cplusplus

extern void _ZN12S20731C13_ntC1Ev();
extern void _ZN12S20731C13_ntD1Ev();
Name_Map name_map_S20731C13_nt[] = {
  NSPAIR(_ZN12S20731C13_ntC1Ev),
  NSPAIR(_ZN12S20731C13_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C4_nt;
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S20731C13_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20731C10_nt,    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_S2264C28,    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
    3, //immediately_derived
  0, 0},
  {&cd_S20731C4_nt,    ABISELECT(40,20), //bcp->offset
    19, //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
    8, //immediately_derived
  0, 1},
  {&cd_S20731C10_nt,    ABISELECT(48,24), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //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_S20731C11_nt,    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
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    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
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(24,12), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI12S20731C13_nt[];
extern void _ZN12S20731C13_ntD1Ev();
extern void _ZN12S20731C13_ntD0Ev();
extern void ABISELECT(_ZTv0_n48_N12S20731C13_ntD1Ev,_ZTv0_n24_N12S20731C13_ntD1Ev)();
extern void ABISELECT(_ZThn16_N12S20731C13_ntD1Ev,_ZThn8_N12S20731C13_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N12S20731C13_ntD0Ev,_ZTv0_n24_N12S20731C13_ntD0Ev)();
extern void ABISELECT(_ZThn16_N12S20731C13_ntD0Ev,_ZThn8_N12S20731C13_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C13_ntD1Ev,_ZTv0_n12_N12S20731C13_ntD1Ev)();
extern void ABISELECT(_ZThn40_N12S20731C13_ntD1Ev,_ZThn20_N12S20731C13_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C13_ntD0Ev,_ZTv0_n12_N12S20731C13_ntD0Ev)();
extern void ABISELECT(_ZThn40_N12S20731C13_ntD0Ev,_ZThn20_N12S20731C13_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20731C13_nt[] = {
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(16,8),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C13_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C13_ntD0Ev,
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(-7,-3),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C13_ntD1Ev,_ZTv0_n24_N12S20731C13_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C13_ntD0Ev,_ZTv0_n24_N12S20731C13_ntD0Ev),
  ABISELECT(-15,-7),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C13_ntD1Ev,_ZTv0_n12_N12S20731C13_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C13_ntD0Ev,_ZTv0_n12_N12S20731C13_ntD0Ev),
  ABISELECT(-39,-19),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
};
extern VTBL_ENTRY _ZTV12S20731C13_nt[];
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A__12S20731C13_nt[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__12S20731C13_nt[] = {
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt__12S20731C13_nt[] = {
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C13_nt[] = {
  ABISELECT(-15,-7),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt__A2__12S20731C13_nt[] = {
  ABISELECT(-15,-7),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZThn24_N11S20731C9_ntD1Ev,_ZThn12_N11S20731C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
extern void ABISELECT(_ZThn24_N11S20731C9_ntD0Ev,_ZThn12_N11S20731C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt__12S20731C13_nt[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt__12S20731C13_nt[] = {
  ABISELECT(-39,-19),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt__12S20731C13_nt[] = {
  ABISELECT(-15,-7),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A1__12S20731C13_nt[] = {
  ABISELECT(-39,-19),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
static  VTT_ENTRY vtt_S20731C13_nt[] = {
  {&(_ZTV12S20731C13_nt[6]),  6,27},
  {&(_tg__ZTV12S20731C10_nt__A__12S20731C13_nt[3]),  3,3},
  {&(_ZTV12S20731C13_nt[14]),  14,27},
  {&(_ZTV12S20731C13_nt[22]),  22,27},
  {&(_ZTV12S20731C13_nt[27]),  27,27},
  {&(_ZTV12S20731C13_nt[19]),  19,27},
  {&(_tg__ZTV11S20731C9_nt__12S20731C13_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt__12S20731C13_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C13_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt__A2__12S20731C13_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt__12S20731C13_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt__12S20731C13_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt__12S20731C13_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt__A1__12S20731C13_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI12S20731C13_nt[];
VTBL_ENTRY *P__ZTI12S20731C13_nt = _ZTI12S20731C13_nt; 
extern  VTBL_ENTRY _ZTV12S20731C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C13_nt[];
static VTBL_ENTRY alt_thunk_names87[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N11S20731C9_ntD0Ev,_ZThn12_N11S20731C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N11S20731C9_ntD1Ev,_ZThn12_N11S20731C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C13_ntD0Ev,_ZTv0_n12_N12S20731C13_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N12S20731C13_ntD0Ev,_ZThn20_N12S20731C13_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C13_ntD1Ev,_ZTv0_n12_N12S20731C13_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N12S20731C13_ntD1Ev,_ZThn20_N12S20731C13_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C13_ntD0Ev,_ZTv0_n24_N12S20731C13_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C13_ntD0Ev,_ZThn8_N12S20731C13_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C13_ntD1Ev,_ZTv0_n24_N12S20731C13_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C13_ntD1Ev,_ZThn8_N12S20731C13_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20731C13_nt = {  "S20731C13_nt", // class name
  bases_S20731C13_nt, 10,
  &(vtc_S20731C13_nt[0]), // expected_vtbl_contents
  &(vtt_S20731C13_nt[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI12S20731C13_nt),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV12S20731C13_nt),27, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT12S20731C13_nt),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names87,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20731C14_nt  : S20731C4_nt , virtual S20731C10_nt , S20731C8_nt , virtual S20731C13_nt {
  virtual  ~S20731C14_nt(); // _ZN12S20731C14_ntD2Ev
  S20731C14_nt(); // tgen
};
//SIG(-1 S20731C14_nt) C1{ BC2{ BC3{ m} vd} VBC4{ VBC3 FC3} BC5{ VBC2 BC6{ VBC2 VBC4 BC7{ VBC3 vd} BC8{ VBC3 BC4 Fc:3}} vd FL} VBC9{ BC4 VBC6 BC3} vd}


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

//skip512 S20731C14_nt

#else // __cplusplus

extern void _ZN12S20731C14_ntC1Ev();
extern void _ZN12S20731C14_ntD2Ev();
Name_Map name_map_S20731C14_nt[] = {
  NSPAIR(_ZN12S20731C14_ntC1Ev),
  NSPAIR(_ZN12S20731C14_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C4_nt;
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C4_nt;
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S20731C8_nt;
extern VTBL_ENTRY _ZTI11S20731C8_nt[];
extern  VTBL_ENTRY _ZTV11S20731C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C8_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C13_nt;
extern VTBL_ENTRY _ZTI12S20731C13_nt[];
extern  VTBL_ENTRY _ZTV12S20731C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C13_nt[];
static Base_Class bases_S20731C14_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20731C4_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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C28,    ABISELECT(49,29), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20731C10_nt,    ABISELECT(40,24), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    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
    5, //immediately_derived
  0, 0},
  {&cd_S20731C4_nt,    ABISELECT(56,32), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20731C11_nt,    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
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    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
    11, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(16,8), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    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
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20731C8_nt,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20731C10_nt,    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
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20731C11_nt,    ABISELECT(80,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(88,48), //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
    4, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(88,48), //bcp->offset
    44, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(80,44), //bcp->offset
    36, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S2264C28,    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
    17, //immediately_derived
  0, 0},
  {&cd_S20731C13_nt,    ABISELECT(64,36), //bcp->offset
    27, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI12S20731C14_nt[];
extern void _ZN12S20731C14_ntD1Ev();
extern void _ZN12S20731C14_ntD0Ev();
extern void ABISELECT(_ZThn8_N12S20731C14_ntD1Ev,_ZThn4_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn8_N12S20731C14_ntD0Ev,_ZThn4_N12S20731C14_ntD0Ev)();
extern void ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn56_N12S20731C14_ntD1Ev,_ZThn32_N12S20731C14_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev)();
extern void ABISELECT(_ZThn56_N12S20731C14_ntD0Ev,_ZThn32_N12S20731C14_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn64_N12S20731C14_ntD1Ev,_ZThn36_N12S20731C14_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev)();
extern void ABISELECT(_ZThn64_N12S20731C14_ntD0Ev,_ZThn36_N12S20731C14_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn80_N12S20731C14_ntD1Ev,_ZThn44_N12S20731C14_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev)();
extern void ABISELECT(_ZThn80_N12S20731C14_ntD0Ev,_ZThn44_N12S20731C14_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20731C14_nt[] = {
  ABISELECT(80,44),
  ABISELECT(64,36),
  ABISELECT(56,32),
  ABISELECT(49,29),
  ABISELECT(40,24),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C14_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C14_ntD0Ev,
  ABISELECT(32,20),
  ABISELECT(48,28),
  ABISELECT(41,25),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N12S20731C14_ntD1Ev,_ZThn4_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N12S20731C14_ntD0Ev,_ZThn4_N12S20731C14_ntD0Ev),
  ABISELECT(33,21),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  ABISELECT(9,5),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-24,-12),
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  ABISELECT(-15,-7),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev),
  ABISELECT(-80,-44),
  ABISELECT(-40,-20),
  ABISELECT(-24,-12),
  ABISELECT(-31,-15),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev),
  ABISELECT(-39,-19),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
extern VTBL_ENTRY _ZTV12S20731C14_nt[];
extern void _ZN11S20731C8_ntD1Ev();
extern void _ZN11S20731C8_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt__12S20731C14_nt[] = {
  ABISELECT(32,20),
  ABISELECT(48,28),
  ABISELECT(41,25),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C8_ntD0Ev,
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt11S20731C8_nt__12S20731C14_nt[] = {
  ABISELECT(32,20),
  ABISELECT(48,28),
  ABISELECT(41,25),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt__12S20731C14_nt[] = {
  ABISELECT(41,25),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__12S20731C14_nt[] = {
  ABISELECT(33,21),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt__A1__12S20731C14_nt[] = {
  ABISELECT(33,21),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZThn48_N11S20731C9_ntD1Ev,_ZThn28_N11S20731C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
extern void ABISELECT(_ZThn48_N11S20731C9_ntD0Ev,_ZThn28_N11S20731C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt__12S20731C14_nt[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt__12S20731C14_nt[] = {
  ABISELECT(9,5),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt__12S20731C14_nt[] = {
  ABISELECT(33,21),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev)();
extern void ABISELECT(_ZThn48_N11S20731C8_ntD1Ev,_ZThn28_N11S20731C8_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev)();
extern void ABISELECT(_ZThn48_N11S20731C8_ntD0Ev,_ZThn28_N11S20731C8_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C8_nt__12S20731C14_nt[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C8_nt__12S20731C14_nt[] = {
  ABISELECT(9,5),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt__12S20731C14_nt[] = {
  ABISELECT(33,21),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__12S20731C14_nt[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void _ZN12S20731C13_ntD1Ev();
extern void _ZN12S20731C13_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__12S20731C14_nt[] = {
  ABISELECT(-24,-12),
  ABISELECT(-8,-4),
  ABISELECT(16,8),
  ABISELECT(-15,-7),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C13_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C13_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C13_nt__A2__12S20731C14_nt[] = {
  ABISELECT(-15,-7),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n48_N12S20731C13_ntD1Ev,_ZTv0_n24_N12S20731C13_ntD1Ev)();
extern void ABISELECT(_ZThn16_N12S20731C13_ntD1Ev,_ZThn8_N12S20731C13_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N12S20731C13_ntD0Ev,_ZTv0_n24_N12S20731C13_ntD0Ev)();
extern void ABISELECT(_ZThn16_N12S20731C13_ntD0Ev,_ZThn8_N12S20731C13_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__12S20731C13_nt__12S20731C14_nt[] = {
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(-24,-12),
  ABISELECT(-31,-15),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C13_ntD1Ev,_ZTv0_n24_N12S20731C13_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C13_ntD0Ev,_ZTv0_n24_N12S20731C13_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C13_ntD1Ev,_ZTv0_n12_N12S20731C13_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N12S20731C13_ntD0Ev,_ZTv0_n12_N12S20731C13_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C13_nt__12S20731C14_nt[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C13_ntD1Ev,_ZTv0_n12_N12S20731C13_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C13_ntD0Ev,_ZTv0_n12_N12S20731C13_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A1__12S20731C13_nt__12S20731C14_nt[] = {
  ABISELECT(9,5),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C13_nt__12S20731C14_nt[] = {
  ABISELECT(-39,-19),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__A1__12S20731C14_nt[] = {
  ABISELECT(-40,-20),
  ABISELECT(-24,-12),
  ABISELECT(-31,-15),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt__A1__12S20731C14_nt[] = {
  ABISELECT(-31,-15),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__A1__12S20731C14_nt[] = {
  ABISELECT(-39,-19),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt__A3__12S20731C14_nt[] = {
  ABISELECT(-39,-19),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt__A1__12S20731C14_nt[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt__A1__12S20731C14_nt[] = {
  ABISELECT(9,5),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt__A1__12S20731C14_nt[] = {
  ABISELECT(-39,-19),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTT_ENTRY vtt_S20731C14_nt[] = {
  {&(_ZTV12S20731C14_nt[7]),  7,47},
  {&(_tg__ZTV11S20731C8_nt__12S20731C14_nt[5]),  5,7},
  {&(_tg__ZTV11S20731C9_nt11S20731C8_nt__12S20731C14_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt__12S20731C14_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__12S20731C14_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt__A1__12S20731C14_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt__12S20731C14_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt__12S20731C14_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt__12S20731C14_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C8_nt__12S20731C14_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C8_nt__12S20731C14_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt__12S20731C14_nt[3]),  3,3},
  {&(_ZTV12S20731C14_nt[22]),  22,47},
  {&(_ZTV12S20731C14_nt[14]),  14,47},
  {&(_ZTV12S20731C14_nt[25]),  25,47},
  {&(_ZTV12S20731C14_nt[19]),  19,47},
  {&(_ZTV12S20731C14_nt[34]),  34,47},
  {&(_ZTV12S20731C14_nt[42]),  42,47},
  {&(_ZTV12S20731C14_nt[47]),  47,47},
  {&(_tg__ZTV12S20731C10_nt__12S20731C14_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__12S20731C14_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C10_nt12S20731C13_nt__A2__12S20731C14_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C9_nt__12S20731C13_nt__12S20731C14_nt[6]),  6,8},
  {&(_tg__ZTV11S20731C4_nt__12S20731C13_nt__12S20731C14_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__A1__12S20731C13_nt__12S20731C14_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C13_nt__12S20731C14_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C9_nt__A1__12S20731C14_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt__A1__12S20731C14_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__A1__12S20731C14_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt__A3__12S20731C14_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt__A1__12S20731C14_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt__A1__12S20731C14_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt__A1__12S20731C14_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI12S20731C14_nt[];
VTBL_ENTRY *P__ZTI12S20731C14_nt = _ZTI12S20731C14_nt; 
extern  VTBL_ENTRY _ZTV12S20731C14_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C14_nt[];
static VTBL_ENTRY alt_thunk_names88[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C13_ntD0Ev,_ZTv0_n24_N12S20731C13_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C13_ntD0Ev,_ZThn8_N12S20731C13_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C13_ntD1Ev,_ZTv0_n24_N12S20731C13_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C13_ntD1Ev,_ZThn8_N12S20731C13_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N11S20731C8_ntD0Ev,_ZThn28_N11S20731C8_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N11S20731C8_ntD1Ev,_ZThn28_N11S20731C8_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N11S20731C9_ntD0Ev,_ZThn28_N11S20731C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N11S20731C9_ntD1Ev,_ZThn28_N11S20731C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N12S20731C14_ntD0Ev,_ZThn44_N12S20731C14_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N12S20731C14_ntD1Ev,_ZThn44_N12S20731C14_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N12S20731C14_ntD0Ev,_ZThn36_N12S20731C14_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N12S20731C14_ntD1Ev,_ZThn36_N12S20731C14_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N12S20731C14_ntD0Ev,_ZThn32_N12S20731C14_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N12S20731C14_ntD1Ev,_ZThn32_N12S20731C14_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20731C14_nt = {  "S20731C14_nt", // class name
  bases_S20731C14_nt, 18,
  &(vtc_S20731C14_nt[0]), // expected_vtbl_contents
  &(vtt_S20731C14_nt[0]), // expected_vtt_contents
  ABISELECT(104,56), // object size
  NSPAIRA(_ZTI12S20731C14_nt),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV12S20731C14_nt),47, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT12S20731C14_nt),33, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names88,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20731C16_nt  : virtual S20731C4_nt , S2264C28 , S20731C10_nt {
  virtual  ~S20731C16_nt(); // _ZN12S20731C16_ntD2Ev
  virtual void  v1(); // _ZN12S20731C16_nt2v1Ev
  S20731C16_nt(); // tgen
};
//SIG(-1 S20731C16_nt) C1{ VBC2{ BC3{ m} vd} BC3 BC4{ VBC3 FC3} vd v1}


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

//skip512 S20731C16_nt

#else // __cplusplus

extern void _ZN12S20731C16_ntC1Ev();
extern void _ZN12S20731C16_ntD2Ev();
Name_Map name_map_S20731C16_nt[] = {
  NSPAIR(_ZN12S20731C16_ntC1Ev),
  NSPAIR(_ZN12S20731C16_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C4_nt;
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
static Base_Class bases_S20731C16_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    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, 0},
  {&cd_S20731C4_nt,    ABISELECT(16,8), //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
  1, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C28,    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_S20731C10_nt,    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 _ZTI12S20731C16_nt[];
extern void _ZN12S20731C16_ntD1Ev();
extern void _ZN12S20731C16_ntD0Ev();
extern void _ZN12S20731C16_nt2v1Ev();
extern void ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev)();
extern void ABISELECT(_ZThn16_N12S20731C16_ntD1Ev,_ZThn8_N12S20731C16_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev)();
extern void ABISELECT(_ZThn16_N12S20731C16_ntD0Ev,_ZThn8_N12S20731C16_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20731C16_nt[] = {
  ABISELECT(16,8),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C16_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C16_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C16_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C16_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev),
};
extern VTBL_ENTRY _ZTV12S20731C16_nt[];
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__12S20731C16_nt[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
static  VTT_ENTRY vtt_S20731C16_nt[] = {
  {&(_ZTV12S20731C16_nt[4]),  4,12},
  {&(_tg__ZTV12S20731C10_nt__12S20731C16_nt[3]),  3,3},
  {&(_ZTV12S20731C16_nt[10]),  10,12},
};
extern VTBL_ENTRY _ZTI12S20731C16_nt[];
VTBL_ENTRY *P__ZTI12S20731C16_nt = _ZTI12S20731C16_nt; 
extern  VTBL_ENTRY _ZTV12S20731C16_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C16_nt[];
static VTBL_ENTRY alt_thunk_names89[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C16_ntD0Ev,_ZThn8_N12S20731C16_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C16_ntD1Ev,_ZThn8_N12S20731C16_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20731C16_nt = {  "S20731C16_nt", // class name
  bases_S20731C16_nt, 5,
  &(vtc_S20731C16_nt[0]), // expected_vtbl_contents
  &(vtt_S20731C16_nt[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI12S20731C16_nt),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV12S20731C16_nt),12, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT12S20731C16_nt),3, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names89,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20731C17_nt  : virtual S2264C28 , virtual S20731C16_nt {
  char s20731c17f0;
  ~S20731C17_nt(); // tgen
  S20731C17_nt(); // tgen
};
//SIG(-1 S20731C17_nt) C1{ VBC2{ m} VBC3{ VBC4{ BC2 vd} BC2 BC5{ VBC2 FC2} vd v1} Fc}


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

//skip512 S20731C17_nt

#else // __cplusplus

extern void _ZN12S20731C17_ntC1Ev();
extern void _ZN12S20731C17_ntD1Ev();
Name_Map name_map_S20731C17_nt[] = {
  NSPAIR(_ZN12S20731C17_ntC1Ev),
  NSPAIR(_ZN12S20731C17_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C4_nt;
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C16_nt;
extern VTBL_ENTRY _ZTI12S20731C16_nt[];
extern  VTBL_ENTRY _ZTV12S20731C16_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C16_nt[];
static Base_Class bases_S20731C17_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    ABISELECT(9,5), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20731C4_nt,    0, //bcp->offset
    -1, //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
    5, //immediately_derived
  0, 1},
  {&cd_S2264C28,    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_S20731C10_nt,    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
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20731C16_nt,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //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},
  {0}};
extern VTBL_ENTRY _ZTI12S20731C17_nt[];
extern void _ZN12S20731C17_ntD1Ev();
extern void _ZN12S20731C17_ntD0Ev();
extern void ABISELECT(_ZTv0_n40_N12S20731C17_ntD1Ev,_ZTv0_n20_N12S20731C17_ntD1Ev)();
extern void ABISELECT(_ZThn16_N12S20731C17_ntD1Ev,_ZThn8_N12S20731C17_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S20731C17_ntD0Ev,_ZTv0_n20_N12S20731C17_ntD0Ev)();
extern void ABISELECT(_ZThn16_N12S20731C17_ntD0Ev,_ZThn8_N12S20731C17_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY vtc_S20731C17_nt[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(9,5),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C17_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C17_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C17_ntD0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C17_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C17_ntD1Ev,_ZTv0_n20_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C17_ntD0Ev,_ZTv0_n20_N12S20731C17_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern VTBL_ENTRY _ZTV12S20731C17_nt[];
extern void _ZN12S20731C16_ntD1Ev();
extern void _ZN12S20731C16_ntD0Ev();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C17_nt[] = {
  ABISELECT(-16,-8),
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C16_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C16_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C16_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C16_nt__12S20731C17_nt[] = {
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C16_nt__12S20731C17_nt[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI12S20731C16_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev),
};
static  VTT_ENTRY vtt_S20731C17_nt[] = {
  {&(_ZTV12S20731C17_nt[6]),  6,17},
  {&(_ZTV12S20731C17_nt[14]),  14,17},
  {&(_ZTV12S20731C17_nt[6]),  6,17},
  {&(_tg__ZTV12S20731C16_nt__12S20731C17_nt[4]),  4,7},
  {&(_tg__ZTV12S20731C10_nt12S20731C16_nt__12S20731C17_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__12S20731C16_nt__12S20731C17_nt[3]),  3,5},
};
extern VTBL_ENTRY _ZTI12S20731C17_nt[];
VTBL_ENTRY *P__ZTI12S20731C17_nt = _ZTI12S20731C17_nt; 
extern  VTBL_ENTRY _ZTV12S20731C17_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C17_nt[];
static VTBL_ENTRY alt_thunk_names90[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C17_ntD0Ev,_ZTv0_n20_N12S20731C17_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C17_ntD0Ev,_ZThn8_N12S20731C17_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C17_ntD1Ev,_ZTv0_n20_N12S20731C17_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C17_ntD1Ev,_ZThn8_N12S20731C17_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20731C17_nt = {  "S20731C17_nt", // class name
  bases_S20731C17_nt, 6,
  &(vtc_S20731C17_nt[0]), // expected_vtbl_contents
  &(vtt_S20731C17_nt[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI12S20731C17_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV12S20731C17_nt),17, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT12S20731C17_nt),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names90,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20731C19_nt  : virtual S20731C10_nt , S2264C28 , virtual S20731C11_nt , virtual S20731C12_nt , virtual S20731C4_nt {
  virtual  ~S20731C19_nt(); // _ZN12S20731C19_ntD2Ev
  S20731C19_nt(); // tgen
};
//SIG(-1 S20731C19_nt) C1{ VBC2{ VBC3{ m} FC3} BC3 VBC4{ VBC3 vd} VBC5{ VBC3 BC2 Fc:3} VBC6{ BC3 vd} vd}


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

//skip512 S20731C19_nt

#else // __cplusplus

extern void _ZN12S20731C19_ntC1Ev();
extern void _ZN12S20731C19_ntD2Ev();
Name_Map name_map_S20731C19_nt[] = {
  NSPAIR(_ZN12S20731C19_ntC1Ev),
  NSPAIR(_ZN12S20731C19_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C4_nt;
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
static Base_Class bases_S20731C19_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    ABISELECT(17,9), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20731C10_nt,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20731C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20731C10_nt,    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
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(24,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    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
    7, //immediately_derived
  0, 0},
  {&cd_S20731C4_nt,    ABISELECT(40,20), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI12S20731C19_nt[];
extern void _ZN12S20731C19_ntD1Ev();
extern void _ZN12S20731C19_ntD0Ev();
extern void ABISELECT(_ZTv0_n24_N12S20731C19_ntD1Ev,_ZTv0_n12_N12S20731C19_ntD1Ev)();
extern void ABISELECT(_ZThn40_N12S20731C19_ntD1Ev,_ZThn20_N12S20731C19_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C19_ntD0Ev,_ZTv0_n12_N12S20731C19_ntD0Ev)();
extern void ABISELECT(_ZThn40_N12S20731C19_ntD0Ev,_ZThn20_N12S20731C19_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20731C19_nt[] = {
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  ABISELECT(17,9),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C19_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C19_ntD0Ev,
  ABISELECT(9,5),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
  ABISELECT(-7,-3),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C19_ntD1Ev,_ZTv0_n12_N12S20731C19_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C19_ntD0Ev,_ZTv0_n12_N12S20731C19_ntD0Ev),
};
extern VTBL_ENTRY _ZTV12S20731C19_nt[];
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__12S20731C19_nt[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt__12S20731C19_nt[] = {
  ABISELECT(17,9),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__12S20731C19_nt[] = {
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt__A1__12S20731C19_nt[] = {
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
static  VTT_ENTRY vtt_S20731C19_nt[] = {
  {&(_ZTV12S20731C19_nt[8]),  8,21},
  {&(_ZTV12S20731C19_nt[13]),  13,21},
  {&(_ZTV12S20731C19_nt[8]),  8,21},
  {&(_ZTV12S20731C19_nt[16]),  16,21},
  {&(_ZTV12S20731C19_nt[19]),  19,21},
  {&(_tg__ZTV12S20731C10_nt__12S20731C19_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C11_nt__12S20731C19_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt__12S20731C19_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt__A1__12S20731C19_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI12S20731C19_nt[];
VTBL_ENTRY *P__ZTI12S20731C19_nt = _ZTI12S20731C19_nt; 
extern  VTBL_ENTRY _ZTV12S20731C19_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C19_nt[];
static VTBL_ENTRY alt_thunk_names91[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C19_ntD0Ev,_ZTv0_n12_N12S20731C19_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N12S20731C19_ntD0Ev,_ZThn20_N12S20731C19_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C19_ntD1Ev,_ZTv0_n12_N12S20731C19_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N12S20731C19_ntD1Ev,_ZThn20_N12S20731C19_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20731C19_nt = {  "S20731C19_nt", // class name
  bases_S20731C19_nt, 8,
  &(vtc_S20731C19_nt[0]), // expected_vtbl_contents
  &(vtt_S20731C19_nt[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI12S20731C19_nt),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV12S20731C19_nt),21, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT12S20731C19_nt),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names91,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20731C18_nt  : virtual S20731C16_nt , S20731C9_nt , virtual S20731C19_nt , S20731C12_nt {
  ::S2264C28 s20731c18f0;
  ~S20731C18_nt(); // tgen
  S20731C18_nt(); // tgen
};
//SIG(-1 S20731C18_nt) C1{ VBC2{ VBC3{ BC4{ m} vd} BC4 BC5{ VBC4 FC4} vd v1} BC6{ VBC3 VBC5 BC7{ VBC4 vd} BC8{ VBC4 BC5 Fc:3}} VBC9{ VBC5 BC4 VBC7 VBC8 VBC3 vd} BC8 FC4}


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

//skip512 S20731C18_nt

#else // __cplusplus

extern void _ZN12S20731C18_ntC1Ev();
extern void _ZN12S20731C18_ntD1Ev();
Name_Map name_map_S20731C18_nt[] = {
  NSPAIR(_ZN12S20731C18_ntC1Ev),
  NSPAIR(_ZN12S20731C18_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C4_nt;
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C16_nt;
extern VTBL_ENTRY _ZTI12S20731C16_nt[];
extern  VTBL_ENTRY _ZTV12S20731C16_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C16_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C19_nt;
extern VTBL_ENTRY _ZTI12S20731C19_nt[];
extern  VTBL_ENTRY _ZTV12S20731C19_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C19_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
static Base_Class bases_S20731C18_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    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
    1, //immediately_derived
  0, 0},
  {&cd_S20731C4_nt,    ABISELECT(56,28), //bcp->offset
    26, //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
    5, //immediately_derived
  0, 1},
  {&cd_S2264C28,    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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20731C10_nt,    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
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S20731C16_nt,    ABISELECT(40,20), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20731C10_nt,    ABISELECT(64,32), //bcp->offset
    31, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20731C11_nt,    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
    10, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    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
    10, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    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_S2264C28,    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
    15, //immediately_derived
  0, 0},
  {&cd_S20731C11_nt,    ABISELECT(80,40), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20731C10_nt,    ABISELECT(88,44), //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
    14, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(88,44), //bcp->offset
    44, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S20731C19_nt,    ABISELECT(80,40), //bcp->offset
    34, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20731C10_nt,    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
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(24,12), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI12S20731C18_nt[];
extern void _ZN12S20731C18_ntD1Ev();
extern void _ZN12S20731C18_ntD0Ev();
extern void ABISELECT(_ZTv0_n40_N12S20731C18_ntD1Ev,_ZTv0_n20_N12S20731C18_ntD1Ev)();
extern void ABISELECT(_ZThn40_N12S20731C18_ntD1Ev,_ZThn20_N12S20731C18_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S20731C18_ntD0Ev,_ZTv0_n20_N12S20731C18_ntD0Ev)();
extern void ABISELECT(_ZThn40_N12S20731C18_ntD0Ev,_ZThn20_N12S20731C18_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
extern void ABISELECT(_ZTv0_n24_N12S20731C18_ntD1Ev,_ZTv0_n12_N12S20731C18_ntD1Ev)();
extern void ABISELECT(_ZThn56_N12S20731C18_ntD1Ev,_ZThn28_N12S20731C18_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C18_ntD0Ev,_ZTv0_n12_N12S20731C18_ntD0Ev)();
extern void ABISELECT(_ZThn56_N12S20731C18_ntD0Ev,_ZThn28_N12S20731C18_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C18_ntD1Ev,_ZTv0_n16_N12S20731C18_ntD1Ev)();
extern void ABISELECT(_ZThn80_N12S20731C18_ntD1Ev,_ZThn40_N12S20731C18_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C18_ntD0Ev,_ZTv0_n16_N12S20731C18_ntD0Ev)();
extern void ABISELECT(_ZThn80_N12S20731C18_ntD0Ev,_ZThn40_N12S20731C18_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20731C18_nt[] = {
  ABISELECT(88,44),
  ABISELECT(80,40),
  ABISELECT(80,40),
  ABISELECT(40,20),
  ABISELECT(64,32),
  ABISELECT(56,28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C18_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C18_ntD0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  0,
  ABISELECT(-40,-20),
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C18_ntD1Ev,_ZTv0_n20_N12S20731C18_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C18_ntD0Ev,_ZTv0_n20_N12S20731C18_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C18_ntD1Ev,_ZTv0_n12_N12S20731C18_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C18_ntD0Ev,_ZTv0_n12_N12S20731C18_ntD0Ev),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  ABISELECT(-24,-12),
  ABISELECT(8,4),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C18_ntD1Ev,_ZTv0_n16_N12S20731C18_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C18_ntD0Ev,_ZTv0_n16_N12S20731C18_ntD0Ev),
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
extern VTBL_ENTRY _ZTV12S20731C18_nt[];
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__12S20731C18_nt[] = {
  ABISELECT(64,32),
  ABISELECT(56,28),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt__12S20731C18_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C18_nt[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt__A2__12S20731C18_nt[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZThn56_N11S20731C9_ntD1Ev,_ZThn28_N11S20731C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
extern void ABISELECT(_ZThn56_N11S20731C9_ntD0Ev,_ZThn28_N11S20731C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt__12S20731C18_nt[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt__12S20731C18_nt[] = {
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt__12S20731C18_nt[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A__12S20731C18_nt[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt__A4__12S20731C18_nt[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void _ZN12S20731C16_ntD1Ev();
extern void _ZN12S20731C16_ntD0Ev();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C18_nt[] = {
  ABISELECT(16,8),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C16_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C16_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C16_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C16_nt__12S20731C18_nt[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev)();
extern void ABISELECT(_ZThn16_N12S20731C16_ntD1Ev,_ZThn8_N12S20731C16_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev)();
extern void ABISELECT(_ZThn16_N12S20731C16_ntD0Ev,_ZThn8_N12S20731C16_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C16_nt__12S20731C18_nt[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C16_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A1__12S20731C18_nt[] = {
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C19_ntD1Ev,_ZTv0_n16_N12S20731C19_ntD1Ev)();
extern void _ZN12S20731C19_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C19_ntD0Ev,_ZTv0_n16_N12S20731C19_ntD0Ev)();
extern void _ZN12S20731C19_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C18_nt[] = {
  ABISELECT(-24,-12),
  ABISELECT(8,4),
  0,
  ABISELECT(-16,-8),
  0,
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C19_ntD1Ev,_ZTv0_n16_N12S20731C19_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C19_ntD0Ev,_ZTv0_n16_N12S20731C19_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__12S20731C19_nt__12S20731C18_nt[] = {
  ABISELECT(-64,-32),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__12S20731C19_nt__12S20731C18_nt[] = {
  ABISELECT(-88,-44),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C19_ntD1Ev,_ZTv0_n12_N12S20731C19_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N12S20731C19_ntD0Ev,_ZTv0_n12_N12S20731C19_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C19_nt__12S20731C18_nt[] = {
  ABISELECT(24,12),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C19_ntD1Ev,_ZTv0_n12_N12S20731C19_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C19_ntD0Ev,_ZTv0_n12_N12S20731C19_ntD0Ev),
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt__A1__12S20731C18_nt[] = {
  ABISELECT(-80,-40),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A1__12S20731C18_nt[] = {
  ABISELECT(-88,-44),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt__A3__12S20731C18_nt[] = {
  ABISELECT(-88,-44),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
static  VTT_ENTRY vtt_S20731C18_nt[] = {
  {&(_ZTV12S20731C18_nt[9]),  9,47},
  {&(_tg__ZTV11S20731C9_nt__12S20731C18_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt__12S20731C18_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C18_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt__A2__12S20731C18_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt__12S20731C18_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt__12S20731C18_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt__12S20731C18_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__A__12S20731C18_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt__A4__12S20731C18_nt[3]),  3,3},
  {&(_ZTV12S20731C18_nt[23]),  23,47},
  {&(_ZTV12S20731C18_nt[29]),  29,47},
  {&(_ZTV12S20731C18_nt[34]),  34,47},
  {&(_ZTV12S20731C18_nt[14]),  14,47},
  {&(_ZTV12S20731C18_nt[42]),  42,47},
  {&(_ZTV12S20731C18_nt[42]),  42,47},
  {&(_ZTV12S20731C18_nt[47]),  47,47},
  {&(_ZTV12S20731C18_nt[17]),  17,47},
  {&(_tg__ZTV12S20731C16_nt__12S20731C18_nt[4]),  4,7},
  {&(_tg__ZTV12S20731C10_nt12S20731C16_nt__12S20731C18_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__12S20731C16_nt__12S20731C18_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__A1__12S20731C18_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C18_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C10_nt__12S20731C19_nt__12S20731C18_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C18_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__12S20731C19_nt__12S20731C18_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__12S20731C19_nt__12S20731C18_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C11_nt__A1__12S20731C18_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt__A1__12S20731C18_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt__A3__12S20731C18_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI12S20731C18_nt[];
VTBL_ENTRY *P__ZTI12S20731C18_nt = _ZTI12S20731C18_nt; 
extern  VTBL_ENTRY _ZTV12S20731C18_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C18_nt[];
static VTBL_ENTRY alt_thunk_names92[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C19_ntD0Ev,_ZTv0_n16_N12S20731C19_ntD0Ev), // 
  (VTBL_ENTRY)_ZN12S20731C19_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C19_ntD1Ev,_ZTv0_n16_N12S20731C19_ntD1Ev), // 
  (VTBL_ENTRY)_ZN12S20731C19_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C16_ntD0Ev,_ZThn8_N12S20731C16_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C16_ntD1Ev,_ZThn8_N12S20731C16_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N11S20731C9_ntD0Ev,_ZThn28_N11S20731C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N11S20731C9_ntD1Ev,_ZThn28_N11S20731C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C18_ntD0Ev,_ZTv0_n16_N12S20731C18_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N12S20731C18_ntD0Ev,_ZThn40_N12S20731C18_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C18_ntD1Ev,_ZTv0_n16_N12S20731C18_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N12S20731C18_ntD1Ev,_ZThn40_N12S20731C18_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C18_ntD0Ev,_ZTv0_n12_N12S20731C18_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N12S20731C18_ntD0Ev,_ZThn28_N12S20731C18_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C18_ntD1Ev,_ZTv0_n12_N12S20731C18_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N12S20731C18_ntD1Ev,_ZThn28_N12S20731C18_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C18_ntD0Ev,_ZTv0_n20_N12S20731C18_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N12S20731C18_ntD0Ev,_ZThn20_N12S20731C18_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C18_ntD1Ev,_ZTv0_n20_N12S20731C18_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N12S20731C18_ntD1Ev,_ZThn20_N12S20731C18_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20731C18_nt = {  "S20731C18_nt", // class name
  bases_S20731C18_nt, 18,
  &(vtc_S20731C18_nt[0]), // expected_vtbl_contents
  &(vtt_S20731C18_nt[0]), // expected_vtt_contents
  ABISELECT(104,52), // object size
  NSPAIRA(_ZTI12S20731C18_nt),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV12S20731C18_nt),47, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT12S20731C18_nt),30, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names92,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20731C15_nt  : S20731C12_nt , virtual S20731C16_nt , virtual S20731C17_nt , virtual S20731C18_nt {
  virtual  ~S20731C15_nt(); // _ZN12S20731C15_ntD2Ev
  virtual void  v2(); // _ZN12S20731C15_nt2v2Ev
  S20731C15_nt(); // tgen
};
//SIG(-1 S20731C15_nt) C1{ BC2{ VBC3{ m} BC4{ VBC3 FC3} Fc:3} VBC5{ VBC6{ BC3 vd} BC3 BC4 vd v2} VBC7{ VBC3 VBC5 Fc} VBC8{ VBC5 BC9{ VBC6 VBC4 BC10{ VBC3 vd} BC2} VBC11{ VBC4 BC3 VBC10 VBC2 VBC6 vd} BC2 FC3} vd v1}


 S20731C15_nt ::~S20731C15_nt(){ note_dtor("S20731C15_nt", this);}
void  S20731C15_nt ::v2(){vfunc_called(this, "_ZN12S20731C15_nt2v2Ev");}
S20731C15_nt ::S20731C15_nt(){ note_ctor("S20731C15_nt", this);} // tgen

//skip512 S20731C15_nt

#else // __cplusplus

extern void _ZN12S20731C15_ntC1Ev();
extern void _ZN12S20731C15_ntD2Ev();
Name_Map name_map_S20731C15_nt[] = {
  NSPAIR(_ZN12S20731C15_ntC1Ev),
  NSPAIR(_ZN12S20731C15_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C4_nt;
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C16_nt;
extern VTBL_ENTRY _ZTI12S20731C16_nt[];
extern  VTBL_ENTRY _ZTV12S20731C16_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C16_nt[];
extern Class_Descriptor cd_S20731C17_nt;
extern VTBL_ENTRY _ZTI12S20731C17_nt[];
extern  VTBL_ENTRY _ZTV12S20731C17_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C17_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C19_nt;
extern VTBL_ENTRY _ZTI12S20731C19_nt[];
extern  VTBL_ENTRY _ZTV12S20731C19_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C19_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C18_nt;
extern VTBL_ENTRY _ZTI12S20731C18_nt[];
extern  VTBL_ENTRY _ZTV12S20731C18_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C18_nt[];
static Base_Class bases_S20731C15_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20731C10_nt,    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
    17, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    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_S2264C28,    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
    4, //immediately_derived
  0, 0},
  {&cd_S20731C4_nt,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2264C28,    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
    7, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    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
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20731C16_nt,    ABISELECT(16,8), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20731C17_nt,    ABISELECT(32,16), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20731C10_nt,    ABISELECT(88,44), //bcp->offset
    49, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S20731C11_nt,    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
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(56,28), //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
    11, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(56,28), //bcp->offset
    43, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2264C28,    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
    18, //immediately_derived
  0, 0},
  {&cd_S20731C11_nt,    ABISELECT(104,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S20731C10_nt,    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
    17, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(112,56), //bcp->offset
    62, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S20731C19_nt,    ABISELECT(104,52), //bcp->offset
    52, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S20731C10_nt,    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
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(72,36), //bcp->offset
    46, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20731C18_nt,    ABISELECT(48,24), //bcp->offset
    31, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI12S20731C15_nt[];
extern void _ZN12S20731C15_ntD1Ev();
extern void _ZN12S20731C15_ntD0Ev();
extern void _ZN12S20731C15_nt2v2Ev();
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn16_N12S20731C15_ntD1Ev,_ZThn8_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn16_N12S20731C15_ntD0Ev,_ZThn8_N12S20731C15_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn32_N12S20731C15_ntD1Ev,_ZThn16_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn32_N12S20731C15_ntD0Ev,_ZThn16_N12S20731C15_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn48_N12S20731C15_ntD1Ev,_ZThn24_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn48_N12S20731C15_ntD0Ev,_ZThn24_N12S20731C15_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn104_N12S20731C15_ntD1Ev,_ZThn52_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn104_N12S20731C15_ntD0Ev,_ZThn52_N12S20731C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20731C15_nt[] = {
  ABISELECT(112,56),
  ABISELECT(104,52),
  ABISELECT(104,52),
  ABISELECT(88,44),
  ABISELECT(48,24),
  ABISELECT(32,16),
  ABISELECT(32,16),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C15_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev),
  ABISELECT(-48,-24),
  ABISELECT(64,32),
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  ABISELECT(-88,-44),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  ABISELECT(-72,-36),
  ABISELECT(8,4),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev),
  ABISELECT(-112,-56),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
extern VTBL_ENTRY _ZTV12S20731C15_nt[];
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A__12S20731C15_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt__12S20731C15_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void _ZN12S20731C16_ntD1Ev();
extern void _ZN12S20731C16_ntD0Ev();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C15_nt[] = {
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C16_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C16_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C16_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C16_nt__A1__12S20731C15_nt[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev)();
extern void ABISELECT(_ZThn16_N12S20731C16_ntD1Ev,_ZThn8_N12S20731C16_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev)();
extern void ABISELECT(_ZThn16_N12S20731C16_ntD0Ev,_ZThn8_N12S20731C16_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C16_nt__12S20731C15_nt[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C16_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev)();
extern void _ZN12S20731C17_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev)();
extern void _ZN12S20731C17_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__12S20731C15_nt[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C17_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C17_ntD1Ev,_ZTv0_n20_N12S20731C17_ntD1Ev)();
extern void ABISELECT(_ZTv0_n40_N12S20731C17_ntD0Ev,_ZTv0_n20_N12S20731C17_ntD0Ev)();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C17_nt__12S20731C15_nt[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI12S20731C17_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C17_ntD1Ev,_ZTv0_n20_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C17_ntD0Ev,_ZTv0_n20_N12S20731C17_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void _ZN12S20731C18_ntD1Ev();
extern void _ZN12S20731C18_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__12S20731C15_nt[] = {
  ABISELECT(64,32),
  ABISELECT(56,28),
  ABISELECT(56,28),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C18_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C18_ntD0Ev,
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt12S20731C18_nt__12S20731C15_nt[] = {
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt12S20731C18_nt__12S20731C15_nt[] = {
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt12S20731C18_nt__A3__12S20731C15_nt[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt12S20731C18_nt__12S20731C15_nt[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt12S20731C18_nt__12S20731C15_nt[] = {
  ABISELECT(-88,-44),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt12S20731C18_nt__12S20731C15_nt[] = {
  ABISELECT(-56,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt[] = {
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C18_nt__A5__12S20731C15_nt[] = {
  ABISELECT(-72,-36),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C18_ntD1Ev,_ZTv0_n20_N12S20731C18_ntD1Ev)();
extern void ABISELECT(_ZTv0_n40_N12S20731C18_ntD0Ev,_ZTv0_n20_N12S20731C18_ntD0Ev)();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C18_nt__12S20731C15_nt[] = {
  0,
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C18_ntD1Ev,_ZTv0_n20_N12S20731C18_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C18_ntD0Ev,_ZTv0_n20_N12S20731C18_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N12S20731C18_ntD1Ev,_ZTv0_n12_N12S20731C18_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N12S20731C18_ntD0Ev,_ZTv0_n12_N12S20731C18_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C18_nt__12S20731C15_nt[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C18_ntD1Ev,_ZTv0_n12_N12S20731C18_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C18_ntD0Ev,_ZTv0_n12_N12S20731C18_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A1__12S20731C18_nt__12S20731C15_nt[] = {
  ABISELECT(-88,-44),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C18_nt__12S20731C15_nt[] = {
  ABISELECT(-56,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C18_ntD1Ev,_ZTv0_n16_N12S20731C18_ntD1Ev)();
extern void ABISELECT(_ZThn56_N12S20731C18_ntD1Ev,_ZThn28_N12S20731C18_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C18_ntD0Ev,_ZTv0_n16_N12S20731C18_ntD0Ev)();
extern void ABISELECT(_ZThn56_N12S20731C18_ntD0Ev,_ZThn28_N12S20731C18_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C18_nt__12S20731C15_nt[] = {
  ABISELECT(-72,-36),
  ABISELECT(8,4),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-56,-28),
  ABISELECT(-104,-52),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C18_ntD1Ev,_ZTv0_n16_N12S20731C18_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C18_ntD0Ev,_ZTv0_n16_N12S20731C18_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A1__12S20731C18_nt__12S20731C15_nt[] = {
  ABISELECT(-112,-56),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A__12S20731C18_nt__12S20731C15_nt[] = {
  ABISELECT(-72,-36),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A2__12S20731C15_nt[] = {
  ABISELECT(-88,-44),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C19_ntD1Ev,_ZTv0_n16_N12S20731C19_ntD1Ev)();
extern void _ZN12S20731C19_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C19_ntD0Ev,_ZTv0_n16_N12S20731C19_ntD0Ev)();
extern void _ZN12S20731C19_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C15_nt[] = {
  ABISELECT(-72,-36),
  ABISELECT(8,4),
  0,
  ABISELECT(-16,-8),
  0,
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C19_ntD1Ev,_ZTv0_n16_N12S20731C19_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C19_ntD0Ev,_ZTv0_n16_N12S20731C19_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__12S20731C19_nt__12S20731C15_nt[] = {
  ABISELECT(-88,-44),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__12S20731C19_nt__12S20731C15_nt[] = {
  ABISELECT(-112,-56),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C19_ntD1Ev,_ZTv0_n12_N12S20731C19_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N12S20731C19_ntD0Ev,_ZTv0_n12_N12S20731C19_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C19_nt__12S20731C15_nt[] = {
  ABISELECT(72,36),
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C19_ntD1Ev,_ZTv0_n12_N12S20731C19_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C19_ntD0Ev,_ZTv0_n12_N12S20731C19_ntD0Ev),
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt__A1__12S20731C15_nt[] = {
  ABISELECT(-104,-52),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A2__12S20731C15_nt[] = {
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt__A4__12S20731C15_nt[] = {
  ABISELECT(-112,-56),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
static  VTT_ENTRY vtt_S20731C15_nt[] = {
  {&(_ZTV12S20731C15_nt[11]),  11,65},
  {&(_tg__ZTV12S20731C12_nt__A__12S20731C15_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt__12S20731C15_nt[3]),  3,3},
  {&(_ZTV12S20731C15_nt[20]),  20,65},
  {&(_ZTV12S20731C15_nt[29]),  29,65},
  {&(_ZTV12S20731C15_nt[29]),  29,65},
  {&(_ZTV12S20731C15_nt[41]),  41,65},
  {&(_ZTV12S20731C15_nt[52]),  52,65},
  {&(_ZTV12S20731C15_nt[46]),  46,65},
  {&(_ZTV12S20731C15_nt[60]),  60,65},
  {&(_ZTV12S20731C15_nt[60]),  60,65},
  {&(_ZTV12S20731C15_nt[65]),  65,65},
  {&(_ZTV12S20731C15_nt[49]),  49,65},
  {&(_tg__ZTV12S20731C16_nt__12S20731C15_nt[4]),  4,7},
  {&(_tg__ZTV12S20731C10_nt12S20731C16_nt__A1__12S20731C15_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__12S20731C16_nt__12S20731C15_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C16_nt__12S20731C17_nt__12S20731C15_nt[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__12S20731C15_nt[9]),  9,11},
  {&(_tg__ZTV11S20731C9_nt12S20731C18_nt__12S20731C15_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt12S20731C18_nt__12S20731C15_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt12S20731C18_nt__A3__12S20731C15_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt12S20731C18_nt__12S20731C15_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt12S20731C18_nt__12S20731C15_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt12S20731C18_nt__12S20731C15_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C18_nt__A5__12S20731C15_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__12S20731C18_nt__12S20731C15_nt[6]),  6,9},
  {&(_tg__ZTV11S20731C4_nt__12S20731C18_nt__12S20731C15_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__A1__12S20731C18_nt__12S20731C15_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C18_nt__12S20731C15_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C18_nt__12S20731C15_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__12S20731C18_nt__12S20731C15_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A1__12S20731C18_nt__12S20731C15_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__A__12S20731C18_nt__12S20731C15_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt__A2__12S20731C15_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C10_nt__12S20731C19_nt__12S20731C15_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__12S20731C19_nt__12S20731C15_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__12S20731C19_nt__12S20731C15_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C11_nt__A1__12S20731C15_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt__A2__12S20731C15_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt__A4__12S20731C15_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI12S20731C15_nt[];
VTBL_ENTRY *P__ZTI12S20731C15_nt = _ZTI12S20731C15_nt; 
extern  VTBL_ENTRY _ZTV12S20731C15_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C15_nt[];
static VTBL_ENTRY alt_thunk_names93[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C19_ntD0Ev,_ZTv0_n16_N12S20731C19_ntD0Ev), // 
  (VTBL_ENTRY)_ZN12S20731C19_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C19_ntD1Ev,_ZTv0_n16_N12S20731C19_ntD1Ev), // 
  (VTBL_ENTRY)_ZN12S20731C19_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C18_ntD0Ev,_ZTv0_n16_N12S20731C18_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N12S20731C18_ntD0Ev,_ZThn28_N12S20731C18_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C18_ntD1Ev,_ZTv0_n16_N12S20731C18_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N12S20731C18_ntD1Ev,_ZThn28_N12S20731C18_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev), // 
  (VTBL_ENTRY)_ZN12S20731C17_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev), // 
  (VTBL_ENTRY)_ZN12S20731C17_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C16_ntD0Ev,_ZThn8_N12S20731C16_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C16_ntD1Ev,_ZThn8_N12S20731C16_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N12S20731C15_ntD0Ev,_ZThn52_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N12S20731C15_ntD1Ev,_ZThn52_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N12S20731C15_ntD0Ev,_ZThn24_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N12S20731C15_ntD1Ev,_ZThn24_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N12S20731C15_ntD0Ev,_ZThn16_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N12S20731C15_ntD1Ev,_ZThn16_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C15_ntD0Ev,_ZThn8_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C15_ntD1Ev,_ZThn8_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20731C15_nt = {  "S20731C15_nt", // class name
  bases_S20731C15_nt, 22,
  &(vtc_S20731C15_nt[0]), // expected_vtbl_contents
  &(vtt_S20731C15_nt[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI12S20731C15_nt),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV12S20731C15_nt),65, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT12S20731C15_nt),46, //virtual table table var
  18, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names93,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20731C7_nt  : S20731C8_nt , virtual S20731C13_nt , S20731C14_nt , S20731C12_nt , S20731C15_nt {
  ::S20731C18_nt s20731c7f0;
  virtual  ~S20731C7_nt(); // _ZN11S20731C7_ntD2Ev
  S20731C7_nt(); // tgen
};
//SIG(-1 S20731C7_nt) C1{ BC2{ VBC3{ BC4{ m} vd} BC5{ VBC3 VBC6{ VBC4 FC4} BC7{ VBC4 vd} BC8{ VBC4 BC6 Fc:3}} vd FL} VBC9{ BC6 VBC5 BC4} BC10{ BC3 VBC6 BC2 VBC9 vd} BC8 BC11{ BC8 VBC12{ VBC3 BC4 BC6 vd v1} VBC13{ VBC4 VBC12 Fc} VBC14{ VBC12 BC5 VBC15{ VBC6 BC4 VBC7 VBC8 VBC3 vd} BC8 FC4} vd v2} vd FC14}


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

//skip512 S20731C7_nt

#else // __cplusplus

extern void _ZN11S20731C7_ntC1Ev();
extern void _ZN11S20731C7_ntD2Ev();
Name_Map name_map_S20731C7_nt[] = {
  NSPAIR(_ZN11S20731C7_ntC1Ev),
  NSPAIR(_ZN11S20731C7_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C4_nt;
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S20731C8_nt;
extern VTBL_ENTRY _ZTI11S20731C8_nt[];
extern  VTBL_ENTRY _ZTV11S20731C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C8_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C13_nt;
extern VTBL_ENTRY _ZTI12S20731C13_nt[];
extern  VTBL_ENTRY _ZTV12S20731C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C13_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C4_nt;
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S20731C8_nt;
extern VTBL_ENTRY _ZTI11S20731C8_nt[];
extern  VTBL_ENTRY _ZTV11S20731C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C8_nt[];
extern Class_Descriptor cd_S20731C14_nt;
extern VTBL_ENTRY _ZTI12S20731C14_nt[];
extern  VTBL_ENTRY _ZTV12S20731C14_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C14_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C16_nt;
extern VTBL_ENTRY _ZTI12S20731C16_nt[];
extern  VTBL_ENTRY _ZTV12S20731C16_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C16_nt[];
extern Class_Descriptor cd_S20731C17_nt;
extern VTBL_ENTRY _ZTI12S20731C17_nt[];
extern  VTBL_ENTRY _ZTV12S20731C17_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C17_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C19_nt;
extern VTBL_ENTRY _ZTI12S20731C19_nt[];
extern  VTBL_ENTRY _ZTV12S20731C19_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C19_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C18_nt;
extern VTBL_ENTRY _ZTI12S20731C18_nt[];
extern  VTBL_ENTRY _ZTV12S20731C18_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C18_nt[];
extern Class_Descriptor cd_S20731C15_nt;
extern VTBL_ENTRY _ZTI12S20731C15_nt[];
extern  VTBL_ENTRY _ZTV12S20731C15_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C15_nt[];
static Base_Class bases_S20731C7_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    ABISELECT(280,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
    1, //immediately_derived
  0, 0},
  {&cd_S20731C4_nt,    ABISELECT(280,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20731C10_nt,    ABISELECT(208,112), //bcp->offset
    54, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    66, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20731C11_nt,    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
    23, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    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
    24, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(8,4), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    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
    26, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20731C8_nt,    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
    27, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20731C10_nt,    ABISELECT(224,120), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20731C11_nt,    ABISELECT(240,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(248,132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(248,132), //bcp->offset
    74, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(240,128), //bcp->offset
    66, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(224,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
    15, //immediately_derived
  0, 0},
  {&cd_S20731C13_nt,    ABISELECT(224,120), //bcp->offset
    57, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    ABISELECT(32,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
    17, //immediately_derived
  0, 0},
  {&cd_S20731C4_nt,    ABISELECT(32,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
    28, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20731C11_nt,    ABISELECT(40,24), //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
    29, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    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
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(48,28), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20731C8_nt,    ABISELECT(40,24), //bcp->offset
    27, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20731C14_nt,    ABISELECT(32,20), //bcp->offset
    18, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    53, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20731C10_nt,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(72,44), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20731C10_nt,    ABISELECT(88,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
    37, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(88,52), //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
    38, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(264,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
    30, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(264,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    81, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20731C16_nt,    ABISELECT(264,140), //bcp->offset
    77, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    58, //bcp->index_in_construction_vtbl_array
    80, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S20731C17_nt,    ABISELECT(280,148), //bcp->offset
    86, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    59, //bcp->index_in_construction_vtbl_array
    83, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    44, //immediately_derived
  0, 1},
  {&cd_S20731C11_nt,    ABISELECT(296,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    88, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(304,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(304,160), //bcp->offset
    106, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    61, //bcp->index_in_construction_vtbl_array
    89, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(296,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    87, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(336,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
    40, //immediately_derived
  0, 0},
  {&cd_S20731C11_nt,    ABISELECT(336,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    63, //bcp->index_in_construction_vtbl_array
    109, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S20731C10_nt,    ABISELECT(344,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    111, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(344,180), //bcp->offset
    122, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    64, //bcp->index_in_construction_vtbl_array
    110, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S20731C19_nt,    ABISELECT(336,176), //bcp->offset
    112, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    62, //bcp->index_in_construction_vtbl_array
    104, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    43, //immediately_derived
  0, 1},
  {&cd_S20731C10_nt,    ABISELECT(320,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    95, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(320,168), //bcp->offset
    109, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    65, //bcp->index_in_construction_vtbl_array
    94, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S20731C18_nt,    ABISELECT(296,156), //bcp->offset
    94, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    60, //bcp->index_in_construction_vtbl_array
    86, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    44, //immediately_derived
  0, 1},
  {&cd_S20731C15_nt,    ABISELECT(88,52), //bcp->offset
    40, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S20731C7_nt[];
extern void _ZN11S20731C7_ntD1Ev();
extern void _ZN11S20731C7_ntD0Ev();
extern void ABISELECT(_ZThn32_N11S20731C7_ntD1Ev,_ZThn20_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn32_N11S20731C7_ntD0Ev,_ZThn20_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn40_N11S20731C7_ntD1Ev,_ZThn24_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn40_N11S20731C7_ntD0Ev,_ZThn24_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn88_N11S20731C7_ntD1Ev,_ZThn52_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn88_N11S20731C7_ntD0Ev,_ZThn52_N11S20731C7_ntD0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
extern void ABISELECT(_ZTv0_n56_N11S20731C7_ntD1Ev,_ZTv0_n28_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn224_N11S20731C7_ntD1Ev,_ZThn120_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N11S20731C7_ntD0Ev,_ZTv0_n28_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn224_N11S20731C7_ntD0Ev,_ZThn120_N11S20731C7_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N11S20731C7_ntD1Ev,_ZTv0_n24_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn240_N11S20731C7_ntD1Ev,_ZThn128_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N11S20731C7_ntD0Ev,_ZTv0_n24_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn240_N11S20731C7_ntD0Ev,_ZThn128_N11S20731C7_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N11S20731C7_ntD1Ev,_ZTv0_n20_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn264_N11S20731C7_ntD1Ev,_ZThn140_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N11S20731C7_ntD0Ev,_ZTv0_n20_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn264_N11S20731C7_ntD0Ev,_ZThn140_N11S20731C7_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
extern void ABISELECT(_ZTv0_n24_N11S20731C7_ntD1Ev,_ZTv0_n12_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn280_N11S20731C7_ntD1Ev,_ZThn148_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C7_ntD0Ev,_ZTv0_n12_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn280_N11S20731C7_ntD0Ev,_ZThn148_N11S20731C7_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N11S20731C7_ntD1Ev,_ZTv0_n40_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn296_N11S20731C7_ntD1Ev,_ZThn156_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N11S20731C7_ntD0Ev,_ZTv0_n40_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn296_N11S20731C7_ntD0Ev,_ZThn156_N11S20731C7_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N11S20731C7_ntD1Ev,_ZTv0_n16_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn336_N11S20731C7_ntD1Ev,_ZThn176_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N11S20731C7_ntD0Ev,_ZTv0_n16_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn336_N11S20731C7_ntD0Ev,_ZThn176_N11S20731C7_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20731C7_nt[] = {
  ABISELECT(344,180),
  ABISELECT(336,176),
  ABISELECT(336,176),
  ABISELECT(296,156),
  ABISELECT(280,148),
  ABISELECT(264,140),
  ABISELECT(240,128),
  ABISELECT(224,120),
  ABISELECT(208,112),
  ABISELECT(280,148),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C7_ntD0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  ABISELECT(208,108),
  ABISELECT(192,100),
  ABISELECT(248,128),
  ABISELECT(-32,-20),
  ABISELECT(176,92),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N11S20731C7_ntD1Ev,_ZThn20_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N11S20731C7_ntD0Ev,_ZThn20_N11S20731C7_ntD0Ev),
  ABISELECT(168,88),
  ABISELECT(240,124),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N11S20731C7_ntD1Ev,_ZThn24_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N11S20731C7_ntD0Ev,_ZThn24_N11S20731C7_ntD0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  ABISELECT(-72,-44),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  ABISELECT(256,128),
  ABISELECT(248,124),
  ABISELECT(248,124),
  ABISELECT(120,60),
  ABISELECT(208,104),
  ABISELECT(192,96),
  ABISELECT(192,96),
  ABISELECT(176,88),
  ABISELECT(-88,-52),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N11S20731C7_ntD1Ev,_ZThn52_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N11S20731C7_ntD0Ev,_ZThn52_N11S20731C7_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
  ABISELECT(-208,-112),
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  ABISELECT(-224,-120),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-224,-120),
  ABISELECT(-224,-120),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S20731C7_ntD1Ev,_ZTv0_n28_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S20731C7_ntD0Ev,_ZTv0_n28_N11S20731C7_ntD0Ev),
  ABISELECT(-240,-128),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-240,-128),
  ABISELECT(-240,-128),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N11S20731C7_ntD1Ev,_ZTv0_n24_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N11S20731C7_ntD0Ev,_ZTv0_n24_N11S20731C7_ntD0Ev),
  ABISELECT(-248,-132),
  ABISELECT(-248,-132),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  0,
  ABISELECT(-264,-140),
  ABISELECT(16,8),
  ABISELECT(-264,-140),
  ABISELECT(-264,-140),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S20731C7_ntD1Ev,_ZTv0_n20_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S20731C7_ntD0Ev,_ZTv0_n20_N11S20731C7_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-280,-148),
  ABISELECT(-280,-148),
  ABISELECT(-280,-148),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C7_ntD1Ev,_ZTv0_n12_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C7_ntD0Ev,_ZTv0_n12_N11S20731C7_ntD0Ev),
  ABISELECT(-296,-156),
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-296,-156),
  ABISELECT(-296,-156),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N11S20731C7_ntD1Ev,_ZTv0_n40_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N11S20731C7_ntD0Ev,_ZTv0_n40_N11S20731C7_ntD0Ev),
  ABISELECT(-304,-160),
  ABISELECT(-304,-160),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  ABISELECT(-320,-168),
  ABISELECT(-320,-168),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  ABISELECT(-56,-28),
  ABISELECT(8,4),
  0,
  ABISELECT(-128,-64),
  ABISELECT(-336,-176),
  ABISELECT(-336,-176),
  ABISELECT(-336,-176),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20731C7_ntD1Ev,_ZTv0_n16_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20731C7_ntD0Ev,_ZTv0_n16_N11S20731C7_ntD0Ev),
  ABISELECT(-344,-180),
  ABISELECT(-344,-180),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern VTBL_ENTRY _ZTV11S20731C7_nt[];
extern void _ZN11S20731C8_ntD1Ev();
extern void _ZN11S20731C8_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt__11S20731C7_nt[] = {
  ABISELECT(208,112),
  ABISELECT(280,148),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C8_ntD0Ev,
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt11S20731C8_nt__11S20731C7_nt[] = {
  ABISELECT(208,112),
  ABISELECT(280,148),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt__11S20731C7_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__11S20731C7_nt[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt__A1__11S20731C7_nt[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZThn280_N11S20731C9_ntD1Ev,_ZThn148_N11S20731C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
extern void ABISELECT(_ZThn280_N11S20731C9_ntD0Ev,_ZThn148_N11S20731C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt__11S20731C7_nt[] = {
  ABISELECT(-280,-148),
  ABISELECT(-280,-148),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt__11S20731C7_nt[] = {
  ABISELECT(-208,-112),
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt__11S20731C7_nt[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev)();
extern void ABISELECT(_ZThn280_N11S20731C8_ntD1Ev,_ZThn148_N11S20731C8_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev)();
extern void ABISELECT(_ZThn280_N11S20731C8_ntD0Ev,_ZThn148_N11S20731C8_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C8_nt__11S20731C7_nt[] = {
  ABISELECT(-280,-148),
  ABISELECT(-280,-148),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C8_nt__11S20731C7_nt[] = {
  ABISELECT(-208,-112),
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt__11S20731C7_nt[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
extern void _ZN12S20731C14_ntD1Ev();
extern void _ZN12S20731C14_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C14_nt__11S20731C7_nt[] = {
  ABISELECT(208,108),
  ABISELECT(192,100),
  ABISELECT(248,128),
  ABISELECT(-32,-20),
  ABISELECT(176,92),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C14_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C14_ntD0Ev,
};
extern void _ZN11S20731C8_ntD1Ev();
extern void _ZN11S20731C8_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt12S20731C14_nt__A1__11S20731C7_nt[] = {
  ABISELECT(168,88),
  ABISELECT(240,124),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C8_ntD0Ev,
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt[] = {
  ABISELECT(168,88),
  ABISELECT(240,124),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt[] = {
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A4__11S20731C7_nt[] = {
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZThn240_N11S20731C9_ntD1Ev,_ZThn124_N11S20731C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
extern void ABISELECT(_ZThn240_N11S20731C9_ntD0Ev,_ZThn124_N11S20731C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt[] = {
  ABISELECT(-240,-124),
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt[] = {
  ABISELECT(-208,-112),
  ABISELECT(-168,-88),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt[] = {
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev)();
extern void ABISELECT(_ZThn240_N11S20731C8_ntD1Ev,_ZThn124_N11S20731C8_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev)();
extern void ABISELECT(_ZThn240_N11S20731C8_ntD0Ev,_ZThn124_N11S20731C8_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C8_nt12S20731C14_nt__A1__11S20731C7_nt[] = {
  ABISELECT(-240,-124),
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C8_nt12S20731C14_nt__A1__11S20731C7_nt[] = {
  ABISELECT(-208,-112),
  ABISELECT(-168,-88),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt12S20731C14_nt__A1__11S20731C7_nt[] = {
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__12S20731C14_nt__11S20731C7_nt[] = {
  ABISELECT(-208,-112),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
extern void ABISELECT(_ZThn8_N12S20731C14_ntD1Ev,_ZThn4_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn8_N12S20731C14_ntD0Ev,_ZThn4_N12S20731C14_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt__12S20731C14_nt__11S20731C7_nt[] = {
  ABISELECT(168,88),
  ABISELECT(240,124),
  ABISELECT(-40,-24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N12S20731C14_ntD1Ev,_ZThn4_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N12S20731C14_ntD0Ev,_ZThn4_N12S20731C14_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn248_N12S20731C14_ntD1Ev,_ZThn128_N12S20731C14_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev)();
extern void ABISELECT(_ZThn248_N12S20731C14_ntD0Ev,_ZThn128_N12S20731C14_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__A1__12S20731C14_nt__11S20731C7_nt[] = {
  ABISELECT(-248,-128),
  ABISELECT(-248,-128),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__12S20731C14_nt__11S20731C7_nt[] = {
  ABISELECT(-48,-28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
extern void ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn192_N12S20731C14_ntD1Ev,_ZThn100_N12S20731C14_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev)();
extern void ABISELECT(_ZThn192_N12S20731C14_ntD0Ev,_ZThn100_N12S20731C14_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__12S20731C14_nt__11S20731C7_nt[] = {
  ABISELECT(-192,-100),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-224,-120),
  ABISELECT(-192,-100),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn208_N12S20731C14_ntD1Ev,_ZThn108_N12S20731C14_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev)();
extern void ABISELECT(_ZThn208_N12S20731C14_ntD0Ev,_ZThn108_N12S20731C14_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__A1__12S20731C14_nt__11S20731C7_nt[] = {
  ABISELECT(-208,-108),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-240,-128),
  ABISELECT(-208,-108),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__A1__12S20731C14_nt__11S20731C7_nt[] = {
  ABISELECT(-248,-132),
  ABISELECT(-216,-112),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A__11S20731C7_nt[] = {
  ABISELECT(-72,-44),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt__A5__11S20731C7_nt[] = {
  ABISELECT(-72,-44),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void _ZN12S20731C15_ntD1Ev();
extern void _ZN12S20731C15_ntD0Ev();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt__11S20731C7_nt[] = {
  ABISELECT(256,128),
  ABISELECT(248,124),
  ABISELECT(248,124),
  ABISELECT(120,60),
  ABISELECT(208,104),
  ABISELECT(192,96),
  ABISELECT(192,96),
  ABISELECT(176,88),
  ABISELECT(-88,-52),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C15_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C15_nt__A4__11S20731C7_nt[] = {
  ABISELECT(-88,-52),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt__A6__11S20731C7_nt[] = {
  ABISELECT(-88,-52),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn176_N12S20731C15_ntD1Ev,_ZThn88_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn176_N12S20731C15_ntD0Ev,_ZThn88_N12S20731C15_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C15_nt__11S20731C7_nt[] = {
  0,
  ABISELECT(-176,-88),
  ABISELECT(16,8),
  ABISELECT(-264,-140),
  ABISELECT(-176,-88),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn192_N12S20731C15_ntD1Ev,_ZThn96_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn192_N12S20731C15_ntD0Ev,_ZThn96_N12S20731C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__12S20731C15_nt__11S20731C7_nt[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-280,-148),
  ABISELECT(-192,-96),
  ABISELECT(-192,-96),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn208_N12S20731C15_ntD1Ev,_ZThn104_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn208_N12S20731C15_ntD0Ev,_ZThn104_N12S20731C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__12S20731C15_nt__11S20731C7_nt[] = {
  ABISELECT(-208,-104),
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-296,-156),
  ABISELECT(-208,-104),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A2__12S20731C15_nt__11S20731C7_nt[] = {
  ABISELECT(-208,-112),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt__11S20731C7_nt[] = {
  ABISELECT(-304,-160),
  ABISELECT(-216,-108),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn248_N12S20731C15_ntD1Ev,_ZThn124_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn248_N12S20731C15_ntD0Ev,_ZThn124_N12S20731C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C15_nt__11S20731C7_nt[] = {
  ABISELECT(-56,-28),
  ABISELECT(8,4),
  0,
  ABISELECT(-128,-64),
  ABISELECT(-248,-124),
  ABISELECT(-336,-176),
  ABISELECT(-248,-124),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A2__12S20731C15_nt__11S20731C7_nt[] = {
  ABISELECT(-344,-180),
  ABISELECT(-256,-128),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt__11S20731C7_nt[] = {
  ABISELECT(-320,-168),
  ABISELECT(-232,-116),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C7_nt[] = {
  ABISELECT(-208,-112),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void _ZN12S20731C13_ntD1Ev();
extern void _ZN12S20731C13_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__11S20731C7_nt[] = {
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-224,-120),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C13_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C13_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C13_nt__A2__11S20731C7_nt[] = {
  ABISELECT(-224,-120),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n48_N12S20731C13_ntD1Ev,_ZTv0_n24_N12S20731C13_ntD1Ev)();
extern void ABISELECT(_ZThn16_N12S20731C13_ntD1Ev,_ZThn8_N12S20731C13_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N12S20731C13_ntD0Ev,_ZTv0_n24_N12S20731C13_ntD0Ev)();
extern void ABISELECT(_ZThn16_N12S20731C13_ntD0Ev,_ZThn8_N12S20731C13_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__12S20731C13_nt__11S20731C7_nt[] = {
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-240,-128),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C13_ntD1Ev,_ZTv0_n24_N12S20731C13_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C13_ntD0Ev,_ZTv0_n24_N12S20731C13_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C13_ntD1Ev,_ZTv0_n12_N12S20731C13_ntD1Ev)();
extern void ABISELECT(_ZThn56_N12S20731C13_ntD1Ev,_ZThn28_N12S20731C13_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C13_ntD0Ev,_ZTv0_n12_N12S20731C13_ntD0Ev)();
extern void ABISELECT(_ZThn56_N12S20731C13_ntD0Ev,_ZThn28_N12S20731C13_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C13_nt__11S20731C7_nt[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C13_ntD1Ev,_ZTv0_n12_N12S20731C13_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C13_ntD0Ev,_ZTv0_n12_N12S20731C13_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A1__12S20731C13_nt__11S20731C7_nt[] = {
  ABISELECT(-208,-112),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C13_nt__11S20731C7_nt[] = {
  ABISELECT(-248,-132),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__A1__11S20731C7_nt[] = {
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-240,-128),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt__A1__11S20731C7_nt[] = {
  ABISELECT(-240,-128),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__A1__11S20731C7_nt[] = {
  ABISELECT(-248,-132),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt__A3__11S20731C7_nt[] = {
  ABISELECT(-248,-132),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZThn40_N11S20731C9_ntD1Ev,_ZThn20_N11S20731C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
extern void ABISELECT(_ZThn40_N11S20731C9_ntD0Ev,_ZThn20_N11S20731C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt__A1__11S20731C7_nt[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt__A1__11S20731C7_nt[] = {
  ABISELECT(-208,-112),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt__A1__11S20731C7_nt[] = {
  ABISELECT(-248,-132),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
extern void _ZN12S20731C16_ntD1Ev();
extern void _ZN12S20731C16_ntD0Ev();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__11S20731C7_nt[] = {
  ABISELECT(16,8),
  ABISELECT(-264,-140),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C16_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C16_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C16_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C16_nt__A7__11S20731C7_nt[] = {
  ABISELECT(-264,-140),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev)();
extern void ABISELECT(_ZThn16_N12S20731C16_ntD1Ev,_ZThn8_N12S20731C16_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev)();
extern void ABISELECT(_ZThn16_N12S20731C16_ntD0Ev,_ZThn8_N12S20731C16_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C16_nt__11S20731C7_nt[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C16_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev)();
extern void _ZN12S20731C17_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev)();
extern void _ZN12S20731C17_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__11S20731C7_nt[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-280,-148),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C17_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C17_ntD1Ev,_ZTv0_n20_N12S20731C17_ntD1Ev)();
extern void ABISELECT(_ZTv0_n40_N12S20731C17_ntD0Ev,_ZTv0_n20_N12S20731C17_ntD0Ev)();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C17_nt__11S20731C7_nt[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-264,-140),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI12S20731C17_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C17_ntD1Ev,_ZTv0_n20_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C17_ntD0Ev,_ZTv0_n20_N12S20731C17_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void _ZN12S20731C18_ntD1Ev();
extern void _ZN12S20731C18_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__11S20731C7_nt[] = {
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-296,-156),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C18_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C18_ntD0Ev,
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt12S20731C18_nt__A3__11S20731C7_nt[] = {
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-296,-156),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt12S20731C18_nt__A3__11S20731C7_nt[] = {
  ABISELECT(-296,-156),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__11S20731C7_nt[] = {
  ABISELECT(-304,-160),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt12S20731C18_nt__A8__11S20731C7_nt[] = {
  ABISELECT(-304,-160),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt12S20731C18_nt__A3__11S20731C7_nt[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt12S20731C18_nt__A3__11S20731C7_nt[] = {
  ABISELECT(-208,-112),
  ABISELECT(88,44),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt12S20731C18_nt__A3__11S20731C7_nt[] = {
  ABISELECT(-304,-160),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A7__11S20731C7_nt[] = {
  ABISELECT(-320,-168),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C18_nt__A10__11S20731C7_nt[] = {
  ABISELECT(-320,-168),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C18_ntD1Ev,_ZTv0_n20_N12S20731C18_ntD1Ev)();
extern void ABISELECT(_ZTv0_n40_N12S20731C18_ntD0Ev,_ZTv0_n20_N12S20731C18_ntD0Ev)();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C18_nt__11S20731C7_nt[] = {
  0,
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-264,-140),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C18_ntD1Ev,_ZTv0_n20_N12S20731C18_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C18_ntD0Ev,_ZTv0_n20_N12S20731C18_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N12S20731C18_ntD1Ev,_ZTv0_n12_N12S20731C18_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N12S20731C18_ntD0Ev,_ZTv0_n12_N12S20731C18_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C18_nt__11S20731C7_nt[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C18_ntD1Ev,_ZTv0_n12_N12S20731C18_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C18_ntD0Ev,_ZTv0_n12_N12S20731C18_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A1__12S20731C18_nt__11S20731C7_nt[] = {
  ABISELECT(-208,-112),
  ABISELECT(88,44),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C18_nt__11S20731C7_nt[] = {
  ABISELECT(-304,-160),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C18_ntD1Ev,_ZTv0_n16_N12S20731C18_ntD1Ev)();
extern void ABISELECT(_ZThn40_N12S20731C18_ntD1Ev,_ZThn20_N12S20731C18_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C18_ntD0Ev,_ZTv0_n16_N12S20731C18_ntD0Ev)();
extern void ABISELECT(_ZThn40_N12S20731C18_ntD0Ev,_ZThn20_N12S20731C18_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C18_nt__11S20731C7_nt[] = {
  ABISELECT(-56,-28),
  ABISELECT(8,4),
  0,
  ABISELECT(-128,-64),
  ABISELECT(-40,-20),
  ABISELECT(-336,-176),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C18_ntD1Ev,_ZTv0_n16_N12S20731C18_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C18_ntD0Ev,_ZTv0_n16_N12S20731C18_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A1__12S20731C18_nt__11S20731C7_nt[] = {
  ABISELECT(-344,-180),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A__12S20731C18_nt__11S20731C7_nt[] = {
  ABISELECT(-320,-168),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C19_ntD1Ev,_ZTv0_n16_N12S20731C19_ntD1Ev)();
extern void _ZN12S20731C19_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C19_ntD0Ev,_ZTv0_n16_N12S20731C19_ntD0Ev)();
extern void _ZN12S20731C19_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__11S20731C7_nt[] = {
  ABISELECT(-56,-28),
  ABISELECT(8,4),
  0,
  ABISELECT(-128,-64),
  0,
  ABISELECT(-336,-176),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C19_ntD1Ev,_ZTv0_n16_N12S20731C19_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C19_ntD0Ev,_ZTv0_n16_N12S20731C19_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__12S20731C19_nt__11S20731C7_nt[] = {
  ABISELECT(-208,-112),
  ABISELECT(128,64),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__12S20731C19_nt__11S20731C7_nt[] = {
  ABISELECT(-344,-180),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C19_ntD1Ev,_ZTv0_n12_N12S20731C19_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N12S20731C19_ntD0Ev,_ZTv0_n12_N12S20731C19_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C19_nt__11S20731C7_nt[] = {
  ABISELECT(56,28),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C19_ntD1Ev,_ZTv0_n12_N12S20731C19_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C19_ntD0Ev,_ZTv0_n12_N12S20731C19_ntD0Ev),
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt__A4__11S20731C7_nt[] = {
  ABISELECT(-336,-176),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A6__11S20731C7_nt[] = {
  ABISELECT(-344,-180),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt__A9__11S20731C7_nt[] = {
  ABISELECT(-344,-180),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
static  VTT_ENTRY vtt_S20731C7_nt[] = {
  {&(_ZTV11S20731C7_nt[13]),  13,125},
  {&(_tg__ZTV11S20731C8_nt__11S20731C7_nt[5]),  5,7},
  {&(_tg__ZTV11S20731C9_nt11S20731C8_nt__11S20731C7_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt__11S20731C7_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt__A1__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt__11S20731C7_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C8_nt__11S20731C7_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C8_nt__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C14_nt__11S20731C7_nt[7]),  7,9},
  {&(_tg__ZTV11S20731C8_nt12S20731C14_nt__A1__11S20731C7_nt[5]),  5,7},
  {&(_tg__ZTV11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A4__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C8_nt12S20731C14_nt__A1__11S20731C7_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C8_nt12S20731C14_nt__A1__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt12S20731C14_nt__A1__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt__12S20731C14_nt__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C8_nt__12S20731C14_nt__11S20731C7_nt[5]),  5,7},
  {&(_tg__ZTV11S20731C4_nt__A1__12S20731C14_nt__11S20731C7_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__12S20731C14_nt__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__12S20731C14_nt__11S20731C7_nt[7]),  7,9},
  {&(_tg__ZTV11S20731C9_nt__A1__12S20731C14_nt__11S20731C7_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__A1__12S20731C14_nt__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__A__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt__A5__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt__11S20731C7_nt[11]),  11,14},
  {&(_tg__ZTV12S20731C12_nt12S20731C15_nt__A4__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt__A6__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__12S20731C15_nt__11S20731C7_nt[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt__11S20731C7_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt__11S20731C7_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__12S20731C15_nt__11S20731C7_nt[10]),  10,12},
  {&(_tg__ZTV12S20731C10_nt__A2__12S20731C15_nt__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt__11S20731C7_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt__11S20731C7_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A2__12S20731C15_nt__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt__11S20731C7_nt[3]),  3,3},
  {&(_ZTV11S20731C7_nt[92]),  92,125},
  {&(_ZTV11S20731C7_nt[57]),  57,125},
  {&(_ZTV11S20731C7_nt[18]),  18,125},
  {&(_ZTV11S20731C7_nt[64]),  64,125},
  {&(_ZTV11S20731C7_nt[72]),  72,125},
  {&(_ZTV11S20731C7_nt[77]),  77,125},
  {&(_ZTV11S20731C7_nt[25]),  25,125},
  {&(_ZTV11S20731C7_nt[32]),  32,125},
  {&(_ZTV11S20731C7_nt[37]),  37,125},
  {&(_ZTV11S20731C7_nt[40]),  40,125},
  {&(_ZTV11S20731C7_nt[51]),  51,125},
  {&(_ZTV11S20731C7_nt[83]),  83,125},
  {&(_ZTV11S20731C7_nt[92]),  92,125},
  {&(_ZTV11S20731C7_nt[104]),  104,125},
  {&(_ZTV11S20731C7_nt[109]),  109,125},
  {&(_ZTV11S20731C7_nt[120]),  120,125},
  {&(_ZTV11S20731C7_nt[120]),  120,125},
  {&(_ZTV11S20731C7_nt[125]),  125,125},
  {&(_ZTV11S20731C7_nt[112]),  112,125},
  {&(_tg__ZTV12S20731C10_nt__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__11S20731C7_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C10_nt12S20731C13_nt__A2__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C9_nt__12S20731C13_nt__11S20731C7_nt[6]),  6,8},
  {&(_tg__ZTV11S20731C4_nt__12S20731C13_nt__11S20731C7_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__A1__12S20731C13_nt__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C13_nt__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C9_nt__A1__11S20731C7_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt__A1__11S20731C7_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__A1__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt__A3__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt__A1__11S20731C7_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt__A1__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt__A1__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__11S20731C7_nt[4]),  4,7},
  {&(_tg__ZTV12S20731C10_nt12S20731C16_nt__A7__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__12S20731C16_nt__11S20731C7_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C17_nt__11S20731C7_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C16_nt__12S20731C17_nt__11S20731C7_nt[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__11S20731C7_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__11S20731C7_nt[9]),  9,11},
  {&(_tg__ZTV11S20731C9_nt12S20731C18_nt__A3__11S20731C7_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt12S20731C18_nt__A3__11S20731C7_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt12S20731C18_nt__A8__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt12S20731C18_nt__A3__11S20731C7_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt12S20731C18_nt__A3__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt12S20731C18_nt__A3__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A7__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C18_nt__A10__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__12S20731C18_nt__11S20731C7_nt[6]),  6,9},
  {&(_tg__ZTV11S20731C4_nt__12S20731C18_nt__11S20731C7_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__A1__12S20731C18_nt__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C18_nt__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C18_nt__11S20731C7_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__12S20731C18_nt__11S20731C7_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A1__12S20731C18_nt__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__A__12S20731C18_nt__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__11S20731C7_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C10_nt__12S20731C19_nt__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__11S20731C7_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__12S20731C19_nt__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__12S20731C19_nt__11S20731C7_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C11_nt__A4__11S20731C7_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt__A6__11S20731C7_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt__A9__11S20731C7_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI11S20731C7_nt[];
VTBL_ENTRY *P__ZTI11S20731C7_nt = _ZTI11S20731C7_nt; 
extern  VTBL_ENTRY _ZTV11S20731C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C7_nt[];
static VTBL_ENTRY alt_thunk_names94[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C19_ntD0Ev,_ZTv0_n16_N12S20731C19_ntD0Ev), // 
  (VTBL_ENTRY)_ZN12S20731C19_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C19_ntD1Ev,_ZTv0_n16_N12S20731C19_ntD1Ev), // 
  (VTBL_ENTRY)_ZN12S20731C19_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C18_ntD0Ev,_ZTv0_n16_N12S20731C18_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N12S20731C18_ntD0Ev,_ZThn20_N12S20731C18_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C18_ntD1Ev,_ZTv0_n16_N12S20731C18_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N12S20731C18_ntD1Ev,_ZThn20_N12S20731C18_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev), // 
  (VTBL_ENTRY)_ZN12S20731C17_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev), // 
  (VTBL_ENTRY)_ZN12S20731C17_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C16_ntD0Ev,_ZThn8_N12S20731C16_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C16_ntD1Ev,_ZThn8_N12S20731C16_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C13_ntD0Ev,_ZTv0_n12_N12S20731C13_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N12S20731C13_ntD0Ev,_ZThn28_N12S20731C13_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C13_ntD1Ev,_ZTv0_n12_N12S20731C13_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N12S20731C13_ntD1Ev,_ZThn28_N12S20731C13_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C13_ntD0Ev,_ZTv0_n24_N12S20731C13_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C13_ntD0Ev,_ZThn8_N12S20731C13_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C13_ntD1Ev,_ZTv0_n24_N12S20731C13_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C13_ntD1Ev,_ZThn8_N12S20731C13_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N12S20731C15_ntD0Ev,_ZThn124_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N12S20731C15_ntD1Ev,_ZThn124_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N12S20731C15_ntD0Ev,_ZThn104_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N12S20731C15_ntD1Ev,_ZThn104_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N12S20731C15_ntD0Ev,_ZThn96_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N12S20731C15_ntD1Ev,_ZThn96_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N12S20731C15_ntD0Ev,_ZThn88_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N12S20731C15_ntD1Ev,_ZThn88_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N12S20731C14_ntD0Ev,_ZThn108_N12S20731C14_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N12S20731C14_ntD1Ev,_ZThn108_N12S20731C14_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N12S20731C14_ntD0Ev,_ZThn100_N12S20731C14_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N12S20731C14_ntD1Ev,_ZThn100_N12S20731C14_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N12S20731C14_ntD0Ev,_ZThn128_N12S20731C14_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N12S20731C14_ntD1Ev,_ZThn128_N12S20731C14_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N11S20731C8_ntD0Ev,_ZThn124_N11S20731C8_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N11S20731C8_ntD0Ev,_ZThn148_N11S20731C8_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N11S20731C8_ntD1Ev,_ZThn124_N11S20731C8_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N11S20731C8_ntD1Ev,_ZThn148_N11S20731C8_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N11S20731C9_ntD0Ev,_ZThn20_N11S20731C9_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N11S20731C9_ntD0Ev,_ZThn124_N11S20731C9_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N11S20731C9_ntD0Ev,_ZThn148_N11S20731C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N11S20731C9_ntD1Ev,_ZThn20_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn240_N11S20731C9_ntD1Ev,_ZThn124_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N11S20731C9_ntD1Ev,_ZThn148_N11S20731C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N11S20731C7_ntD0Ev,_ZTv0_n16_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N11S20731C7_ntD0Ev,_ZThn176_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N11S20731C7_ntD1Ev,_ZTv0_n16_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N11S20731C7_ntD1Ev,_ZThn176_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N11S20731C7_ntD0Ev,_ZTv0_n40_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N11S20731C7_ntD0Ev,_ZThn156_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N11S20731C7_ntD1Ev,_ZTv0_n40_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N11S20731C7_ntD1Ev,_ZThn156_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C7_ntD0Ev,_ZTv0_n12_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N11S20731C7_ntD0Ev,_ZThn148_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C7_ntD1Ev,_ZTv0_n12_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N11S20731C7_ntD1Ev,_ZThn148_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S20731C7_ntD0Ev,_ZTv0_n20_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N11S20731C7_ntD0Ev,_ZThn140_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S20731C7_ntD1Ev,_ZTv0_n20_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N11S20731C7_ntD1Ev,_ZThn140_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N11S20731C7_ntD0Ev,_ZTv0_n24_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N11S20731C7_ntD0Ev,_ZThn128_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N11S20731C7_ntD1Ev,_ZTv0_n24_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N11S20731C7_ntD1Ev,_ZThn128_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N11S20731C7_ntD0Ev,_ZTv0_n28_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N11S20731C7_ntD0Ev,_ZThn120_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N11S20731C7_ntD1Ev,_ZTv0_n28_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N11S20731C7_ntD1Ev,_ZThn120_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20731C7_nt = {  "S20731C7_nt", // class name
  bases_S20731C7_nt, 45,
  &(vtc_S20731C7_nt[0]), // expected_vtbl_contents
  &(vtt_S20731C7_nt[0]), // expected_vtt_contents
  ABISELECT(360,188), // object size
  NSPAIRA(_ZTI11S20731C7_nt),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV11S20731C7_nt),125, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S20731C7_nt),111, //virtual table table var
  39, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names94,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20731C6_nt  : S20731C7_nt {
  ::S20731C17_nt s20731c6f0;
  virtual  ~S20731C6_nt(); // _ZN11S20731C6_ntD2Ev
  S20731C6_nt(); // tgen
};
//SIG(-1 S20731C6_nt) C1{ BC2{ BC3{ VBC4{ BC5{ m} vd} BC6{ VBC4 VBC7{ VBC5 FC5} BC8{ VBC5 vd} BC9{ VBC5 BC7 Fc:3}} vd FL} VBC10{ BC7 VBC6 BC5} BC11{ BC4 VBC7 BC3 VBC10 vd} BC9 BC12{ BC9 VBC13{ VBC4 BC5 BC7 vd v1} VBC14{ VBC5 VBC13 Fc} VBC15{ VBC13 BC6 VBC16{ VBC7 BC5 VBC8 VBC9 VBC4 vd} BC9 FC5} vd v2} vd FC15} vd FC14}


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

//skip512 S20731C6_nt

#else // __cplusplus

extern void _ZN11S20731C6_ntC1Ev();
extern void _ZN11S20731C6_ntD2Ev();
Name_Map name_map_S20731C6_nt[] = {
  NSPAIR(_ZN11S20731C6_ntC1Ev),
  NSPAIR(_ZN11S20731C6_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C4_nt;
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S20731C8_nt;
extern VTBL_ENTRY _ZTI11S20731C8_nt[];
extern  VTBL_ENTRY _ZTV11S20731C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C8_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C13_nt;
extern VTBL_ENTRY _ZTI12S20731C13_nt[];
extern  VTBL_ENTRY _ZTV12S20731C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C13_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C4_nt;
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S20731C8_nt;
extern VTBL_ENTRY _ZTI11S20731C8_nt[];
extern  VTBL_ENTRY _ZTV11S20731C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C8_nt[];
extern Class_Descriptor cd_S20731C14_nt;
extern VTBL_ENTRY _ZTI12S20731C14_nt[];
extern  VTBL_ENTRY _ZTV12S20731C14_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C14_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C16_nt;
extern VTBL_ENTRY _ZTI12S20731C16_nt[];
extern  VTBL_ENTRY _ZTV12S20731C16_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C16_nt[];
extern Class_Descriptor cd_S20731C17_nt;
extern VTBL_ENTRY _ZTI12S20731C17_nt[];
extern  VTBL_ENTRY _ZTV12S20731C17_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C17_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C19_nt;
extern VTBL_ENTRY _ZTI12S20731C19_nt[];
extern  VTBL_ENTRY _ZTV12S20731C19_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C19_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C18_nt;
extern VTBL_ENTRY _ZTI12S20731C18_nt[];
extern  VTBL_ENTRY _ZTV12S20731C18_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C18_nt[];
extern Class_Descriptor cd_S20731C15_nt;
extern VTBL_ENTRY _ZTI12S20731C15_nt[];
extern  VTBL_ENTRY _ZTV12S20731C15_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C15_nt[];
extern Class_Descriptor cd_S20731C7_nt;
extern VTBL_ENTRY _ZTI11S20731C7_nt[];
extern  VTBL_ENTRY _ZTV11S20731C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C7_nt[];
static Base_Class bases_S20731C6_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    ABISELECT(312,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
    1, //immediately_derived
  0, 0},
  {&cd_S20731C4_nt,    ABISELECT(312,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    67, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20731C10_nt,    ABISELECT(240,128), //bcp->offset
    54, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    68, //bcp->index_in_construction_vtbl_array
    86, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S20731C11_nt,    0, //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
    23, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    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
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(8,4), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    69, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20731C8_nt,    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
    27, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    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
    88, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20731C11_nt,    ABISELECT(272,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    94, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(280,148), //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
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(280,148), //bcp->offset
    74, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    72, //bcp->index_in_construction_vtbl_array
    95, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(272,144), //bcp->offset
    66, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    71, //bcp->index_in_construction_vtbl_array
    93, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(256,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
    15, //immediately_derived
  0, 0},
  {&cd_S20731C13_nt,    ABISELECT(256,136), //bcp->offset
    57, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    70, //bcp->index_in_construction_vtbl_array
    87, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(32,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
    17, //immediately_derived
  0, 0},
  {&cd_S20731C4_nt,    ABISELECT(32,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
    28, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20731C11_nt,    ABISELECT(40,24), //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
    29, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    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
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(48,28), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    75, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20731C8_nt,    ABISELECT(40,24), //bcp->offset
    27, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    74, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20731C14_nt,    ABISELECT(32,20), //bcp->offset
    18, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    73, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(72,44), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    76, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(88,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
    37, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(88,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
    38, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(296,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
    30, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(296,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    101, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20731C16_nt,    ABISELECT(296,156), //bcp->offset
    77, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    78, //bcp->index_in_construction_vtbl_array
    100, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S20731C17_nt,    ABISELECT(312,164), //bcp->offset
    86, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    79, //bcp->index_in_construction_vtbl_array
    103, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    44, //immediately_derived
  0, 1},
  {&cd_S20731C11_nt,    ABISELECT(328,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    108, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(336,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    110, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(336,176), //bcp->offset
    106, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    81, //bcp->index_in_construction_vtbl_array
    109, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(328,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    107, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(368,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S20731C11_nt,    ABISELECT(368,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    83, //bcp->index_in_construction_vtbl_array
    129, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S20731C10_nt,    ABISELECT(376,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    131, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(376,196), //bcp->offset
    122, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    84, //bcp->index_in_construction_vtbl_array
    130, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S20731C19_nt,    ABISELECT(368,192), //bcp->offset
    112, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    82, //bcp->index_in_construction_vtbl_array
    124, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    43, //immediately_derived
  0, 1},
  {&cd_S20731C10_nt,    ABISELECT(352,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    115, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(352,184), //bcp->offset
    109, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    85, //bcp->index_in_construction_vtbl_array
    114, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S20731C18_nt,    ABISELECT(328,172), //bcp->offset
    94, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    80, //bcp->index_in_construction_vtbl_array
    106, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    44, //immediately_derived
  0, 1},
  {&cd_S20731C15_nt,    ABISELECT(88,52), //bcp->offset
    40, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    77, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S20731C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S20731C6_nt[];
extern void _ZN11S20731C6_ntD1Ev();
extern void _ZN11S20731C6_ntD0Ev();
extern void ABISELECT(_ZThn32_N11S20731C6_ntD1Ev,_ZThn20_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZThn32_N11S20731C6_ntD0Ev,_ZThn20_N11S20731C6_ntD0Ev)();
extern void ABISELECT(_ZThn40_N11S20731C6_ntD1Ev,_ZThn24_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZThn40_N11S20731C6_ntD0Ev,_ZThn24_N11S20731C6_ntD0Ev)();
extern void ABISELECT(_ZThn88_N11S20731C6_ntD1Ev,_ZThn52_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZThn88_N11S20731C6_ntD0Ev,_ZThn52_N11S20731C6_ntD0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
extern void ABISELECT(_ZTv0_n56_N11S20731C6_ntD1Ev,_ZTv0_n28_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZThn256_N11S20731C6_ntD1Ev,_ZThn136_N11S20731C6_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N11S20731C6_ntD0Ev,_ZTv0_n28_N11S20731C6_ntD0Ev)();
extern void ABISELECT(_ZThn256_N11S20731C6_ntD0Ev,_ZThn136_N11S20731C6_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N11S20731C6_ntD1Ev,_ZTv0_n24_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZThn272_N11S20731C6_ntD1Ev,_ZThn144_N11S20731C6_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N11S20731C6_ntD0Ev,_ZTv0_n24_N11S20731C6_ntD0Ev)();
extern void ABISELECT(_ZThn272_N11S20731C6_ntD0Ev,_ZThn144_N11S20731C6_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N11S20731C6_ntD1Ev,_ZTv0_n20_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZThn296_N11S20731C6_ntD1Ev,_ZThn156_N11S20731C6_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N11S20731C6_ntD0Ev,_ZTv0_n20_N11S20731C6_ntD0Ev)();
extern void ABISELECT(_ZThn296_N11S20731C6_ntD0Ev,_ZThn156_N11S20731C6_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
extern void ABISELECT(_ZTv0_n24_N11S20731C6_ntD1Ev,_ZTv0_n12_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZThn312_N11S20731C6_ntD1Ev,_ZThn164_N11S20731C6_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C6_ntD0Ev,_ZTv0_n12_N11S20731C6_ntD0Ev)();
extern void ABISELECT(_ZThn312_N11S20731C6_ntD0Ev,_ZThn164_N11S20731C6_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N11S20731C6_ntD1Ev,_ZTv0_n40_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZThn328_N11S20731C6_ntD1Ev,_ZThn172_N11S20731C6_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N11S20731C6_ntD0Ev,_ZTv0_n40_N11S20731C6_ntD0Ev)();
extern void ABISELECT(_ZThn328_N11S20731C6_ntD0Ev,_ZThn172_N11S20731C6_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N11S20731C6_ntD1Ev,_ZTv0_n16_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZThn368_N11S20731C6_ntD1Ev,_ZThn192_N11S20731C6_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N11S20731C6_ntD0Ev,_ZTv0_n16_N11S20731C6_ntD0Ev)();
extern void ABISELECT(_ZThn368_N11S20731C6_ntD0Ev,_ZThn192_N11S20731C6_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20731C6_nt[] = {
  ABISELECT(376,196),
  ABISELECT(368,192),
  ABISELECT(368,192),
  ABISELECT(328,172),
  ABISELECT(312,164),
  ABISELECT(296,156),
  ABISELECT(272,144),
  ABISELECT(256,136),
  ABISELECT(240,128),
  ABISELECT(312,164),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C6_ntD0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  ABISELECT(240,124),
  ABISELECT(224,116),
  ABISELECT(280,144),
  ABISELECT(-32,-20),
  ABISELECT(208,108),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N11S20731C6_ntD1Ev,_ZThn20_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N11S20731C6_ntD0Ev,_ZThn20_N11S20731C6_ntD0Ev),
  ABISELECT(200,104),
  ABISELECT(272,140),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N11S20731C6_ntD1Ev,_ZThn24_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N11S20731C6_ntD0Ev,_ZThn24_N11S20731C6_ntD0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  ABISELECT(-72,-44),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  ABISELECT(288,144),
  ABISELECT(280,140),
  ABISELECT(280,140),
  ABISELECT(152,76),
  ABISELECT(240,120),
  ABISELECT(224,112),
  ABISELECT(224,112),
  ABISELECT(208,104),
  ABISELECT(-88,-52),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N11S20731C6_ntD1Ev,_ZThn52_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N11S20731C6_ntD0Ev,_ZThn52_N11S20731C6_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
  ABISELECT(-240,-128),
  ABISELECT(-240,-128),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  ABISELECT(-256,-136),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-256,-136),
  ABISELECT(-256,-136),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S20731C6_ntD1Ev,_ZTv0_n28_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S20731C6_ntD0Ev,_ZTv0_n28_N11S20731C6_ntD0Ev),
  ABISELECT(-272,-144),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-272,-144),
  ABISELECT(-272,-144),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N11S20731C6_ntD1Ev,_ZTv0_n24_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N11S20731C6_ntD0Ev,_ZTv0_n24_N11S20731C6_ntD0Ev),
  ABISELECT(-280,-148),
  ABISELECT(-280,-148),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  0,
  ABISELECT(-296,-156),
  ABISELECT(16,8),
  ABISELECT(-296,-156),
  ABISELECT(-296,-156),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S20731C6_ntD1Ev,_ZTv0_n20_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S20731C6_ntD0Ev,_ZTv0_n20_N11S20731C6_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-312,-164),
  ABISELECT(-312,-164),
  ABISELECT(-312,-164),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C6_ntD1Ev,_ZTv0_n12_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C6_ntD0Ev,_ZTv0_n12_N11S20731C6_ntD0Ev),
  ABISELECT(-328,-172),
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-328,-172),
  ABISELECT(-328,-172),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N11S20731C6_ntD1Ev,_ZTv0_n40_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N11S20731C6_ntD0Ev,_ZTv0_n40_N11S20731C6_ntD0Ev),
  ABISELECT(-336,-176),
  ABISELECT(-336,-176),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  ABISELECT(-56,-28),
  ABISELECT(8,4),
  0,
  ABISELECT(-128,-64),
  ABISELECT(-368,-192),
  ABISELECT(-368,-192),
  ABISELECT(-368,-192),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20731C6_ntD1Ev,_ZTv0_n16_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20731C6_ntD0Ev,_ZTv0_n16_N11S20731C6_ntD0Ev),
  ABISELECT(-376,-196),
  ABISELECT(-376,-196),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
};
extern VTBL_ENTRY _ZTV11S20731C6_nt[];
extern void _ZN11S20731C7_ntD1Ev();
extern void _ZN11S20731C7_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(376,196),
  ABISELECT(368,192),
  ABISELECT(368,192),
  ABISELECT(328,172),
  ABISELECT(312,164),
  ABISELECT(296,156),
  ABISELECT(272,144),
  ABISELECT(256,136),
  ABISELECT(240,128),
  ABISELECT(312,164),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C7_ntD0Ev,
};
extern void _ZN11S20731C8_ntD1Ev();
extern void _ZN11S20731C8_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(240,128),
  ABISELECT(312,164),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C8_ntD0Ev,
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt11S20731C8_nt11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(240,128),
  ABISELECT(312,164),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt__11S20731C6_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt__A1__11S20731C6_nt[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZThn312_N11S20731C9_ntD1Ev,_ZThn164_N11S20731C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
extern void ABISELECT(_ZThn312_N11S20731C9_ntD0Ev,_ZThn164_N11S20731C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-312,-164),
  ABISELECT(-312,-164),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-240,-128),
  ABISELECT(-240,-128),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev)();
extern void ABISELECT(_ZThn312_N11S20731C8_ntD1Ev,_ZThn164_N11S20731C8_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev)();
extern void ABISELECT(_ZThn312_N11S20731C8_ntD0Ev,_ZThn164_N11S20731C8_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C8_nt11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-312,-164),
  ABISELECT(-312,-164),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C8_nt11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-240,-128),
  ABISELECT(-240,-128),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
extern void _ZN12S20731C14_ntD1Ev();
extern void _ZN12S20731C14_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C14_nt11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(240,124),
  ABISELECT(224,116),
  ABISELECT(280,144),
  ABISELECT(-32,-20),
  ABISELECT(208,108),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C14_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C14_ntD0Ev,
};
extern void _ZN11S20731C8_ntD1Ev();
extern void _ZN11S20731C8_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__11S20731C6_nt[] = {
  ABISELECT(200,104),
  ABISELECT(272,140),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C8_ntD0Ev,
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__11S20731C6_nt[] = {
  ABISELECT(200,104),
  ABISELECT(272,140),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__11S20731C6_nt[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__11S20731C6_nt[] = {
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A4__11S20731C6_nt[] = {
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZThn272_N11S20731C9_ntD1Ev,_ZThn140_N11S20731C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
extern void ABISELECT(_ZThn272_N11S20731C9_ntD0Ev,_ZThn140_N11S20731C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__11S20731C6_nt[] = {
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__11S20731C6_nt[] = {
  ABISELECT(-240,-128),
  ABISELECT(-200,-104),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__11S20731C6_nt[] = {
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev)();
extern void ABISELECT(_ZThn272_N11S20731C8_ntD1Ev,_ZThn140_N11S20731C8_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev)();
extern void ABISELECT(_ZThn272_N11S20731C8_ntD0Ev,_ZThn140_N11S20731C8_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__11S20731C6_nt[] = {
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__11S20731C6_nt[] = {
  ABISELECT(-240,-128),
  ABISELECT(-200,-104),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__11S20731C6_nt[] = {
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__12S20731C14_nt11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-240,-128),
  ABISELECT(-208,-108),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
extern void ABISELECT(_ZThn8_N12S20731C14_ntD1Ev,_ZThn4_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn8_N12S20731C14_ntD0Ev,_ZThn4_N12S20731C14_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt__12S20731C14_nt11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(200,104),
  ABISELECT(272,140),
  ABISELECT(-40,-24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N12S20731C14_ntD1Ev,_ZThn4_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N12S20731C14_ntD0Ev,_ZThn4_N12S20731C14_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn280_N12S20731C14_ntD1Ev,_ZThn144_N12S20731C14_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev)();
extern void ABISELECT(_ZThn280_N12S20731C14_ntD0Ev,_ZThn144_N12S20731C14_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__A1__12S20731C14_nt11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-280,-144),
  ABISELECT(-280,-144),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__12S20731C14_nt11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-48,-28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
extern void ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn224_N12S20731C14_ntD1Ev,_ZThn116_N12S20731C14_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev)();
extern void ABISELECT(_ZThn224_N12S20731C14_ntD0Ev,_ZThn116_N12S20731C14_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__12S20731C14_nt11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-224,-116),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-256,-136),
  ABISELECT(-224,-116),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn240_N12S20731C14_ntD1Ev,_ZThn124_N12S20731C14_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev)();
extern void ABISELECT(_ZThn240_N12S20731C14_ntD0Ev,_ZThn124_N12S20731C14_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-240,-124),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-272,-144),
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-280,-148),
  ABISELECT(-248,-128),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C7_nt__A3__11S20731C6_nt[] = {
  ABISELECT(-72,-44),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C7_nt__A5__11S20731C6_nt[] = {
  ABISELECT(-72,-44),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void _ZN12S20731C15_ntD1Ev();
extern void _ZN12S20731C15_ntD0Ev();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(288,144),
  ABISELECT(280,140),
  ABISELECT(280,140),
  ABISELECT(152,76),
  ABISELECT(240,120),
  ABISELECT(224,112),
  ABISELECT(224,112),
  ABISELECT(208,104),
  ABISELECT(-88,-52),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C15_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C15_nt11S20731C7_nt__A4__11S20731C6_nt[] = {
  ABISELECT(-88,-52),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt11S20731C7_nt__A6__11S20731C6_nt[] = {
  ABISELECT(-88,-52),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn208_N12S20731C15_ntD1Ev,_ZThn104_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn208_N12S20731C15_ntD0Ev,_ZThn104_N12S20731C15_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C15_nt11S20731C7_nt__11S20731C6_nt[] = {
  0,
  ABISELECT(-208,-104),
  ABISELECT(16,8),
  ABISELECT(-296,-156),
  ABISELECT(-208,-104),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn224_N12S20731C15_ntD1Ev,_ZThn112_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn224_N12S20731C15_ntD0Ev,_ZThn112_N12S20731C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__12S20731C15_nt11S20731C7_nt__11S20731C6_nt[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-312,-164),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn240_N12S20731C15_ntD1Ev,_ZThn120_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn240_N12S20731C15_ntD0Ev,_ZThn120_N12S20731C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__12S20731C15_nt11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-240,-120),
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-328,-172),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A2__12S20731C15_nt11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-240,-128),
  ABISELECT(-152,-76),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-336,-176),
  ABISELECT(-248,-124),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn280_N12S20731C15_ntD1Ev,_ZThn140_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn280_N12S20731C15_ntD0Ev,_ZThn140_N12S20731C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C15_nt11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-56,-28),
  ABISELECT(8,4),
  0,
  ABISELECT(-128,-64),
  ABISELECT(-280,-140),
  ABISELECT(-368,-192),
  ABISELECT(-280,-140),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A2__12S20731C15_nt11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-376,-196),
  ABISELECT(-288,-144),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-352,-184),
  ABISELECT(-264,-132),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C7_ntD1Ev,_ZTv0_n12_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn312_N11S20731C7_ntD1Ev,_ZThn164_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C7_ntD0Ev,_ZTv0_n12_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn312_N11S20731C7_ntD0Ev,_ZThn164_N11S20731C7_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__11S20731C7_nt__11S20731C6_nt[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-312,-164),
  ABISELECT(-312,-164),
  ABISELECT(-312,-164),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C7_ntD1Ev,_ZTv0_n12_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C7_ntD0Ev,_ZTv0_n12_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-240,-128),
  ABISELECT(-240,-128),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZTv0_n56_N11S20731C7_ntD1Ev,_ZTv0_n28_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn256_N11S20731C7_ntD1Ev,_ZThn136_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N11S20731C7_ntD0Ev,_ZTv0_n28_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn256_N11S20731C7_ntD0Ev,_ZThn136_N11S20731C7_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-256,-136),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-256,-136),
  ABISELECT(-256,-136),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S20731C7_ntD1Ev,_ZTv0_n28_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S20731C7_ntD0Ev,_ZTv0_n28_N11S20731C7_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n48_N11S20731C7_ntD1Ev,_ZTv0_n24_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn272_N11S20731C7_ntD1Ev,_ZThn144_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N11S20731C7_ntD0Ev,_ZTv0_n24_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn272_N11S20731C7_ntD0Ev,_ZThn144_N11S20731C7_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__A1__11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-272,-144),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-272,-144),
  ABISELECT(-272,-144),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N11S20731C7_ntD1Ev,_ZTv0_n24_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N11S20731C7_ntD0Ev,_ZTv0_n24_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__A1__11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-280,-148),
  ABISELECT(-280,-148),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZThn32_N11S20731C7_ntD1Ev,_ZThn20_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn32_N11S20731C7_ntD0Ev,_ZThn20_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C14_nt__11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(240,124),
  ABISELECT(224,116),
  ABISELECT(280,144),
  ABISELECT(-32,-20),
  ABISELECT(208,108),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N11S20731C7_ntD1Ev,_ZThn20_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N11S20731C7_ntD0Ev,_ZThn20_N11S20731C7_ntD0Ev),
};
extern void ABISELECT(_ZThn40_N11S20731C7_ntD1Ev,_ZThn24_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn40_N11S20731C7_ntD0Ev,_ZThn24_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt12S20731C14_nt__A1__11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(200,104),
  ABISELECT(272,140),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N11S20731C7_ntD1Ev,_ZThn24_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N11S20731C7_ntD0Ev,_ZThn24_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A__11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-72,-44),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZThn88_N11S20731C7_ntD1Ev,_ZThn52_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn88_N11S20731C7_ntD0Ev,_ZThn52_N11S20731C7_ntD0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt__11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(288,144),
  ABISELECT(280,140),
  ABISELECT(280,140),
  ABISELECT(152,76),
  ABISELECT(240,120),
  ABISELECT(224,112),
  ABISELECT(224,112),
  ABISELECT(208,104),
  ABISELECT(-88,-52),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N11S20731C7_ntD1Ev,_ZThn52_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N11S20731C7_ntD0Ev,_ZThn52_N11S20731C7_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N11S20731C7_ntD1Ev,_ZTv0_n20_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn296_N11S20731C7_ntD1Ev,_ZThn156_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N11S20731C7_ntD0Ev,_ZTv0_n20_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn296_N11S20731C7_ntD0Ev,_ZThn156_N11S20731C7_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__11S20731C7_nt__11S20731C6_nt[] = {
  0,
  ABISELECT(-296,-156),
  ABISELECT(16,8),
  ABISELECT(-296,-156),
  ABISELECT(-296,-156),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S20731C7_ntD1Ev,_ZTv0_n20_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S20731C7_ntD0Ev,_ZTv0_n20_N11S20731C7_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n80_N11S20731C7_ntD1Ev,_ZTv0_n40_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn328_N11S20731C7_ntD1Ev,_ZThn172_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N11S20731C7_ntD0Ev,_ZTv0_n40_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn328_N11S20731C7_ntD0Ev,_ZThn172_N11S20731C7_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-328,-172),
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-328,-172),
  ABISELECT(-328,-172),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N11S20731C7_ntD1Ev,_ZTv0_n40_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N11S20731C7_ntD0Ev,_ZTv0_n40_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-336,-176),
  ABISELECT(-336,-176),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N11S20731C7_ntD1Ev,_ZTv0_n16_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn368_N11S20731C7_ntD1Ev,_ZThn192_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N11S20731C7_ntD0Ev,_ZTv0_n16_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn368_N11S20731C7_ntD0Ev,_ZThn192_N11S20731C7_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-56,-28),
  ABISELECT(8,4),
  0,
  ABISELECT(-128,-64),
  ABISELECT(-368,-192),
  ABISELECT(-368,-192),
  ABISELECT(-368,-192),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20731C7_ntD1Ev,_ZTv0_n16_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20731C7_ntD0Ev,_ZTv0_n16_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A6__11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-376,-196),
  ABISELECT(-376,-196),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A7__11S20731C7_nt__11S20731C6_nt[] = {
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C6_nt[] = {
  ABISELECT(-240,-128),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void _ZN12S20731C13_ntD1Ev();
extern void _ZN12S20731C13_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__11S20731C6_nt[] = {
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-256,-136),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C13_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C13_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C13_nt__A2__11S20731C6_nt[] = {
  ABISELECT(-256,-136),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n48_N12S20731C13_ntD1Ev,_ZTv0_n24_N12S20731C13_ntD1Ev)();
extern void ABISELECT(_ZThn16_N12S20731C13_ntD1Ev,_ZThn8_N12S20731C13_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N12S20731C13_ntD0Ev,_ZTv0_n24_N12S20731C13_ntD0Ev)();
extern void ABISELECT(_ZThn16_N12S20731C13_ntD0Ev,_ZThn8_N12S20731C13_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__12S20731C13_nt__11S20731C6_nt[] = {
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-272,-144),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C13_ntD1Ev,_ZTv0_n24_N12S20731C13_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C13_ntD0Ev,_ZTv0_n24_N12S20731C13_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C13_ntD1Ev,_ZTv0_n12_N12S20731C13_ntD1Ev)();
extern void ABISELECT(_ZThn56_N12S20731C13_ntD1Ev,_ZThn28_N12S20731C13_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C13_ntD0Ev,_ZTv0_n12_N12S20731C13_ntD0Ev)();
extern void ABISELECT(_ZThn56_N12S20731C13_ntD0Ev,_ZThn28_N12S20731C13_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C13_nt__11S20731C6_nt[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C13_ntD1Ev,_ZTv0_n12_N12S20731C13_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C13_ntD0Ev,_ZTv0_n12_N12S20731C13_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A1__12S20731C13_nt__11S20731C6_nt[] = {
  ABISELECT(-240,-128),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C13_nt__11S20731C6_nt[] = {
  ABISELECT(-280,-148),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__A1__11S20731C6_nt[] = {
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-272,-144),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt__A1__11S20731C6_nt[] = {
  ABISELECT(-272,-144),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__A1__11S20731C6_nt[] = {
  ABISELECT(-280,-148),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt__A3__11S20731C6_nt[] = {
  ABISELECT(-280,-148),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZThn40_N11S20731C9_ntD1Ev,_ZThn20_N11S20731C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
extern void ABISELECT(_ZThn40_N11S20731C9_ntD0Ev,_ZThn20_N11S20731C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt__A1__11S20731C6_nt[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt__A1__11S20731C6_nt[] = {
  ABISELECT(-240,-128),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt__A1__11S20731C6_nt[] = {
  ABISELECT(-280,-148),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
extern void _ZN12S20731C16_ntD1Ev();
extern void _ZN12S20731C16_ntD0Ev();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__11S20731C6_nt[] = {
  ABISELECT(16,8),
  ABISELECT(-296,-156),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C16_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C16_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C16_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C16_nt__A7__11S20731C6_nt[] = {
  ABISELECT(-296,-156),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev)();
extern void ABISELECT(_ZThn16_N12S20731C16_ntD1Ev,_ZThn8_N12S20731C16_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev)();
extern void ABISELECT(_ZThn16_N12S20731C16_ntD0Ev,_ZThn8_N12S20731C16_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C16_nt__11S20731C6_nt[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C16_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev)();
extern void _ZN12S20731C17_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev)();
extern void _ZN12S20731C17_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__11S20731C6_nt[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-312,-164),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C17_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C17_ntD1Ev,_ZTv0_n20_N12S20731C17_ntD1Ev)();
extern void ABISELECT(_ZTv0_n40_N12S20731C17_ntD0Ev,_ZTv0_n20_N12S20731C17_ntD0Ev)();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C17_nt__11S20731C6_nt[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-296,-156),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI12S20731C17_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C17_ntD1Ev,_ZTv0_n20_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C17_ntD0Ev,_ZTv0_n20_N12S20731C17_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void _ZN12S20731C18_ntD1Ev();
extern void _ZN12S20731C18_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__11S20731C6_nt[] = {
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-328,-172),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C18_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C18_ntD0Ev,
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt12S20731C18_nt__A3__11S20731C6_nt[] = {
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-328,-172),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt12S20731C18_nt__A3__11S20731C6_nt[] = {
  ABISELECT(-328,-172),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__11S20731C6_nt[] = {
  ABISELECT(-336,-176),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt12S20731C18_nt__A8__11S20731C6_nt[] = {
  ABISELECT(-336,-176),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt12S20731C18_nt__A3__11S20731C6_nt[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt12S20731C18_nt__A3__11S20731C6_nt[] = {
  ABISELECT(-240,-128),
  ABISELECT(88,44),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt12S20731C18_nt__A3__11S20731C6_nt[] = {
  ABISELECT(-336,-176),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A7__11S20731C6_nt[] = {
  ABISELECT(-352,-184),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C18_nt__A10__11S20731C6_nt[] = {
  ABISELECT(-352,-184),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C18_ntD1Ev,_ZTv0_n20_N12S20731C18_ntD1Ev)();
extern void ABISELECT(_ZTv0_n40_N12S20731C18_ntD0Ev,_ZTv0_n20_N12S20731C18_ntD0Ev)();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C18_nt__11S20731C6_nt[] = {
  0,
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-296,-156),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C18_ntD1Ev,_ZTv0_n20_N12S20731C18_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C18_ntD0Ev,_ZTv0_n20_N12S20731C18_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N12S20731C18_ntD1Ev,_ZTv0_n12_N12S20731C18_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N12S20731C18_ntD0Ev,_ZTv0_n12_N12S20731C18_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C18_nt__11S20731C6_nt[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C18_ntD1Ev,_ZTv0_n12_N12S20731C18_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C18_ntD0Ev,_ZTv0_n12_N12S20731C18_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A1__12S20731C18_nt__11S20731C6_nt[] = {
  ABISELECT(-240,-128),
  ABISELECT(88,44),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C18_nt__11S20731C6_nt[] = {
  ABISELECT(-336,-176),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C18_ntD1Ev,_ZTv0_n16_N12S20731C18_ntD1Ev)();
extern void ABISELECT(_ZThn40_N12S20731C18_ntD1Ev,_ZThn20_N12S20731C18_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C18_ntD0Ev,_ZTv0_n16_N12S20731C18_ntD0Ev)();
extern void ABISELECT(_ZThn40_N12S20731C18_ntD0Ev,_ZThn20_N12S20731C18_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C18_nt__11S20731C6_nt[] = {
  ABISELECT(-56,-28),
  ABISELECT(8,4),
  0,
  ABISELECT(-128,-64),
  ABISELECT(-40,-20),
  ABISELECT(-368,-192),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C18_ntD1Ev,_ZTv0_n16_N12S20731C18_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C18_ntD0Ev,_ZTv0_n16_N12S20731C18_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A1__12S20731C18_nt__11S20731C6_nt[] = {
  ABISELECT(-376,-196),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A__12S20731C18_nt__11S20731C6_nt[] = {
  ABISELECT(-352,-184),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C19_ntD1Ev,_ZTv0_n16_N12S20731C19_ntD1Ev)();
extern void _ZN12S20731C19_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C19_ntD0Ev,_ZTv0_n16_N12S20731C19_ntD0Ev)();
extern void _ZN12S20731C19_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__11S20731C6_nt[] = {
  ABISELECT(-56,-28),
  ABISELECT(8,4),
  0,
  ABISELECT(-128,-64),
  0,
  ABISELECT(-368,-192),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C19_ntD1Ev,_ZTv0_n16_N12S20731C19_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C19_ntD0Ev,_ZTv0_n16_N12S20731C19_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__12S20731C19_nt__11S20731C6_nt[] = {
  ABISELECT(-240,-128),
  ABISELECT(128,64),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__12S20731C19_nt__11S20731C6_nt[] = {
  ABISELECT(-376,-196),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C19_ntD1Ev,_ZTv0_n12_N12S20731C19_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N12S20731C19_ntD0Ev,_ZTv0_n12_N12S20731C19_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C19_nt__11S20731C6_nt[] = {
  ABISELECT(56,28),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C19_ntD1Ev,_ZTv0_n12_N12S20731C19_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C19_ntD0Ev,_ZTv0_n12_N12S20731C19_ntD0Ev),
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt__A4__11S20731C6_nt[] = {
  ABISELECT(-368,-192),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A6__11S20731C6_nt[] = {
  ABISELECT(-376,-196),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt__A9__11S20731C6_nt[] = {
  ABISELECT(-376,-196),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
static  VTT_ENTRY vtt_S20731C6_nt[] = {
  {&(_ZTV11S20731C6_nt[13]),  13,125},
  {&(_tg__ZTV11S20731C7_nt__11S20731C6_nt[13]),  13,15},
  {&(_tg__ZTV11S20731C8_nt11S20731C7_nt__11S20731C6_nt[5]),  5,7},
  {&(_tg__ZTV11S20731C9_nt11S20731C8_nt11S20731C7_nt__11S20731C6_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt__11S20731C6_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt__A1__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt__11S20731C6_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C8_nt11S20731C7_nt__11S20731C6_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C8_nt11S20731C7_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt11S20731C7_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C14_nt11S20731C7_nt__11S20731C6_nt[7]),  7,9},
  {&(_tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__11S20731C6_nt[5]),  5,7},
  {&(_tg__ZTV11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__11S20731C6_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__11S20731C6_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A4__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__11S20731C6_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__11S20731C6_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt__12S20731C14_nt11S20731C7_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C8_nt__12S20731C14_nt11S20731C7_nt__11S20731C6_nt[5]),  5,7},
  {&(_tg__ZTV11S20731C4_nt__A1__12S20731C14_nt11S20731C7_nt__11S20731C6_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__12S20731C14_nt11S20731C7_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__12S20731C14_nt11S20731C7_nt__11S20731C6_nt[7]),  7,9},
  {&(_tg__ZTV11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt__11S20731C6_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C7_nt__A3__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C7_nt__A5__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt11S20731C7_nt__11S20731C6_nt[11]),  11,14},
  {&(_tg__ZTV12S20731C12_nt12S20731C15_nt11S20731C7_nt__A4__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt11S20731C7_nt__A6__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__12S20731C15_nt11S20731C7_nt__11S20731C6_nt[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt11S20731C7_nt__11S20731C6_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt11S20731C7_nt__11S20731C6_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__12S20731C15_nt11S20731C7_nt__11S20731C6_nt[10]),  10,12},
  {&(_tg__ZTV12S20731C10_nt__A2__12S20731C15_nt11S20731C7_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt11S20731C7_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt11S20731C7_nt__11S20731C6_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt11S20731C7_nt__11S20731C6_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A2__12S20731C15_nt11S20731C7_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt11S20731C7_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C17_nt__11S20731C7_nt__11S20731C6_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C10_nt__11S20731C7_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__11S20731C7_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__11S20731C7_nt__11S20731C6_nt[7]),  7,9},
  {&(_tg__ZTV11S20731C9_nt__A1__11S20731C7_nt__11S20731C6_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__A1__11S20731C7_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C14_nt__11S20731C7_nt__11S20731C6_nt[7]),  7,9},
  {&(_tg__ZTV11S20731C8_nt12S20731C14_nt__A1__11S20731C7_nt__11S20731C6_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__A__11S20731C7_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt__11S20731C7_nt__11S20731C6_nt[11]),  11,14},
  {&(_tg__ZTV12S20731C16_nt__11S20731C7_nt__11S20731C6_nt[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__11S20731C7_nt__11S20731C6_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__11S20731C7_nt__11S20731C6_nt[10]),  10,12},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__11S20731C7_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__11S20731C7_nt__11S20731C6_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__11S20731C7_nt__11S20731C6_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A6__11S20731C7_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A7__11S20731C7_nt__11S20731C6_nt[3]),  3,3},
  {&(_ZTV11S20731C6_nt[92]),  92,125},
  {&(_ZTV11S20731C6_nt[57]),  57,125},
  {&(_ZTV11S20731C6_nt[18]),  18,125},
  {&(_ZTV11S20731C6_nt[64]),  64,125},
  {&(_ZTV11S20731C6_nt[72]),  72,125},
  {&(_ZTV11S20731C6_nt[77]),  77,125},
  {&(_ZTV11S20731C6_nt[25]),  25,125},
  {&(_ZTV11S20731C6_nt[32]),  32,125},
  {&(_ZTV11S20731C6_nt[37]),  37,125},
  {&(_ZTV11S20731C6_nt[40]),  40,125},
  {&(_ZTV11S20731C6_nt[51]),  51,125},
  {&(_ZTV11S20731C6_nt[83]),  83,125},
  {&(_ZTV11S20731C6_nt[92]),  92,125},
  {&(_ZTV11S20731C6_nt[104]),  104,125},
  {&(_ZTV11S20731C6_nt[109]),  109,125},
  {&(_ZTV11S20731C6_nt[120]),  120,125},
  {&(_ZTV11S20731C6_nt[120]),  120,125},
  {&(_ZTV11S20731C6_nt[125]),  125,125},
  {&(_ZTV11S20731C6_nt[112]),  112,125},
  {&(_tg__ZTV12S20731C10_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__11S20731C6_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C10_nt12S20731C13_nt__A2__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C9_nt__12S20731C13_nt__11S20731C6_nt[6]),  6,8},
  {&(_tg__ZTV11S20731C4_nt__12S20731C13_nt__11S20731C6_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__A1__12S20731C13_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C13_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C9_nt__A1__11S20731C6_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt__A1__11S20731C6_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__A1__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt__A3__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt__A1__11S20731C6_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt__A1__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt__A1__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__11S20731C6_nt[4]),  4,7},
  {&(_tg__ZTV12S20731C10_nt12S20731C16_nt__A7__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__12S20731C16_nt__11S20731C6_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C17_nt__11S20731C6_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C16_nt__12S20731C17_nt__11S20731C6_nt[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__11S20731C6_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__11S20731C6_nt[9]),  9,11},
  {&(_tg__ZTV11S20731C9_nt12S20731C18_nt__A3__11S20731C6_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt12S20731C18_nt__A3__11S20731C6_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt12S20731C18_nt__A8__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt12S20731C18_nt__A3__11S20731C6_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt12S20731C18_nt__A3__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt12S20731C18_nt__A3__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A7__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C18_nt__A10__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__12S20731C18_nt__11S20731C6_nt[6]),  6,9},
  {&(_tg__ZTV11S20731C4_nt__12S20731C18_nt__11S20731C6_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__A1__12S20731C18_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C18_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C18_nt__11S20731C6_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__12S20731C18_nt__11S20731C6_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A1__12S20731C18_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__A__12S20731C18_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__11S20731C6_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C10_nt__12S20731C19_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__11S20731C6_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__12S20731C19_nt__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__12S20731C19_nt__11S20731C6_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C11_nt__A4__11S20731C6_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt__A6__11S20731C6_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt__A9__11S20731C6_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI11S20731C6_nt[];
VTBL_ENTRY *P__ZTI11S20731C6_nt = _ZTI11S20731C6_nt; 
extern  VTBL_ENTRY _ZTV11S20731C6_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C6_nt[];
static VTBL_ENTRY alt_thunk_names95[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C19_ntD0Ev,_ZTv0_n16_N12S20731C19_ntD0Ev), // 
  (VTBL_ENTRY)_ZN12S20731C19_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C19_ntD1Ev,_ZTv0_n16_N12S20731C19_ntD1Ev), // 
  (VTBL_ENTRY)_ZN12S20731C19_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C18_ntD0Ev,_ZTv0_n16_N12S20731C18_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N12S20731C18_ntD0Ev,_ZThn20_N12S20731C18_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C18_ntD1Ev,_ZTv0_n16_N12S20731C18_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N12S20731C18_ntD1Ev,_ZThn20_N12S20731C18_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev), // 
  (VTBL_ENTRY)_ZN12S20731C17_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev), // 
  (VTBL_ENTRY)_ZN12S20731C17_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C16_ntD0Ev,_ZThn8_N12S20731C16_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C16_ntD1Ev,_ZThn8_N12S20731C16_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C13_ntD0Ev,_ZTv0_n12_N12S20731C13_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N12S20731C13_ntD0Ev,_ZThn28_N12S20731C13_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C13_ntD1Ev,_ZTv0_n12_N12S20731C13_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N12S20731C13_ntD1Ev,_ZThn28_N12S20731C13_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C13_ntD0Ev,_ZTv0_n24_N12S20731C13_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C13_ntD0Ev,_ZThn8_N12S20731C13_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C13_ntD1Ev,_ZTv0_n24_N12S20731C13_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C13_ntD1Ev,_ZThn8_N12S20731C13_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N11S20731C7_ntD0Ev,_ZTv0_n16_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N11S20731C7_ntD0Ev,_ZThn192_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N11S20731C7_ntD1Ev,_ZTv0_n16_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N11S20731C7_ntD1Ev,_ZThn192_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N11S20731C7_ntD0Ev,_ZTv0_n40_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N11S20731C7_ntD0Ev,_ZThn172_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N11S20731C7_ntD1Ev,_ZTv0_n40_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N11S20731C7_ntD1Ev,_ZThn172_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S20731C7_ntD0Ev,_ZTv0_n20_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N11S20731C7_ntD0Ev,_ZThn156_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S20731C7_ntD1Ev,_ZTv0_n20_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N11S20731C7_ntD1Ev,_ZThn156_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N11S20731C7_ntD0Ev,_ZTv0_n24_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N11S20731C7_ntD0Ev,_ZThn144_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N11S20731C7_ntD1Ev,_ZTv0_n24_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N11S20731C7_ntD1Ev,_ZThn144_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N11S20731C7_ntD0Ev,_ZTv0_n28_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N11S20731C7_ntD0Ev,_ZThn136_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N11S20731C7_ntD1Ev,_ZTv0_n28_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N11S20731C7_ntD1Ev,_ZThn136_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C7_ntD0Ev,_ZTv0_n12_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N11S20731C7_ntD0Ev,_ZThn164_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C7_ntD1Ev,_ZTv0_n12_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N11S20731C7_ntD1Ev,_ZThn164_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N12S20731C15_ntD0Ev,_ZThn140_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N12S20731C15_ntD1Ev,_ZThn140_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N12S20731C15_ntD0Ev,_ZThn120_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N12S20731C15_ntD1Ev,_ZThn120_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N12S20731C15_ntD0Ev,_ZThn112_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N12S20731C15_ntD1Ev,_ZThn112_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N12S20731C15_ntD0Ev,_ZThn104_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N12S20731C15_ntD1Ev,_ZThn104_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N12S20731C14_ntD0Ev,_ZThn124_N12S20731C14_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N12S20731C14_ntD1Ev,_ZThn124_N12S20731C14_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N12S20731C14_ntD0Ev,_ZThn116_N12S20731C14_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N12S20731C14_ntD1Ev,_ZThn116_N12S20731C14_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N12S20731C14_ntD0Ev,_ZThn144_N12S20731C14_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N12S20731C14_ntD1Ev,_ZThn144_N12S20731C14_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N11S20731C8_ntD0Ev,_ZThn140_N11S20731C8_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N11S20731C8_ntD0Ev,_ZThn164_N11S20731C8_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N11S20731C8_ntD1Ev,_ZThn140_N11S20731C8_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N11S20731C8_ntD1Ev,_ZThn164_N11S20731C8_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N11S20731C9_ntD0Ev,_ZThn20_N11S20731C9_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N11S20731C9_ntD0Ev,_ZThn140_N11S20731C9_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N11S20731C9_ntD0Ev,_ZThn164_N11S20731C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N11S20731C9_ntD1Ev,_ZThn20_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N11S20731C9_ntD1Ev,_ZThn140_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N11S20731C9_ntD1Ev,_ZThn164_N11S20731C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N11S20731C6_ntD0Ev,_ZTv0_n16_N11S20731C6_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N11S20731C6_ntD0Ev,_ZThn192_N11S20731C6_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N11S20731C6_ntD1Ev,_ZTv0_n16_N11S20731C6_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N11S20731C6_ntD1Ev,_ZThn192_N11S20731C6_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N11S20731C6_ntD0Ev,_ZTv0_n40_N11S20731C6_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N11S20731C6_ntD0Ev,_ZThn172_N11S20731C6_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N11S20731C6_ntD1Ev,_ZTv0_n40_N11S20731C6_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N11S20731C6_ntD1Ev,_ZThn172_N11S20731C6_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C6_ntD0Ev,_ZTv0_n12_N11S20731C6_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N11S20731C6_ntD0Ev,_ZThn164_N11S20731C6_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C6_ntD1Ev,_ZTv0_n12_N11S20731C6_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N11S20731C6_ntD1Ev,_ZThn164_N11S20731C6_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S20731C6_ntD0Ev,_ZTv0_n20_N11S20731C6_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N11S20731C6_ntD0Ev,_ZThn156_N11S20731C6_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S20731C6_ntD1Ev,_ZTv0_n20_N11S20731C6_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N11S20731C6_ntD1Ev,_ZThn156_N11S20731C6_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N11S20731C6_ntD0Ev,_ZTv0_n24_N11S20731C6_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N11S20731C6_ntD0Ev,_ZThn144_N11S20731C6_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N11S20731C6_ntD1Ev,_ZTv0_n24_N11S20731C6_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N11S20731C6_ntD1Ev,_ZThn144_N11S20731C6_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N11S20731C6_ntD0Ev,_ZTv0_n28_N11S20731C6_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N11S20731C6_ntD0Ev,_ZThn136_N11S20731C6_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N11S20731C6_ntD1Ev,_ZTv0_n28_N11S20731C6_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N11S20731C6_ntD1Ev,_ZThn136_N11S20731C6_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20731C6_nt = {  "S20731C6_nt", // class name
  bases_S20731C6_nt, 46,
  &(vtc_S20731C6_nt[0]), // expected_vtbl_contents
  &(vtt_S20731C6_nt[0]), // expected_vtt_contents
  ABISELECT(392,204), // object size
  NSPAIRA(_ZTI11S20731C6_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV11S20731C6_nt),125, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S20731C6_nt),131, //virtual table table var
  40, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names95,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20731C21_nt  : virtual S20731C13_nt , S20731C7_nt , S20731C15_nt , S20731C10_nt {
  __tsi64 s20731c21f0;
  virtual  ~S20731C21_nt(); // _ZN12S20731C21_ntD2Ev
  S20731C21_nt(); // tgen
};
//SIG(-1 S20731C21_nt) C1{ VBC2{ BC3{ VBC4{ m} FC4} VBC5{ VBC6{ BC4 vd} VBC3 BC7{ VBC4 vd} BC8{ VBC4 BC3 Fc:3}} BC4} BC9{ BC10{ VBC6 BC5 vd FL} VBC2 BC11{ BC6 VBC3 BC10 VBC2 vd} BC8 BC12{ BC8 VBC13{ VBC6 BC4 BC3 vd v1} VBC14{ VBC4 VBC13 Fc} VBC15{ VBC13 BC5 VBC16{ VBC3 BC4 VBC7 VBC8 VBC6 vd} BC8 FC4} vd v2} vd FC15} BC12 BC3 vd FL}


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

//skip512 S20731C21_nt

#else // __cplusplus

extern void _ZN12S20731C21_ntC1Ev();
extern void _ZN12S20731C21_ntD2Ev();
Name_Map name_map_S20731C21_nt[] = {
  NSPAIR(_ZN12S20731C21_ntC1Ev),
  NSPAIR(_ZN12S20731C21_ntD2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C4_nt;
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C13_nt;
extern VTBL_ENTRY _ZTI12S20731C13_nt[];
extern  VTBL_ENTRY _ZTV12S20731C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C13_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S20731C8_nt;
extern VTBL_ENTRY _ZTI11S20731C8_nt[];
extern  VTBL_ENTRY _ZTV11S20731C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C8_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C4_nt;
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S20731C8_nt;
extern VTBL_ENTRY _ZTI11S20731C8_nt[];
extern  VTBL_ENTRY _ZTV11S20731C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C8_nt[];
extern Class_Descriptor cd_S20731C14_nt;
extern VTBL_ENTRY _ZTI12S20731C14_nt[];
extern  VTBL_ENTRY _ZTV12S20731C14_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C14_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C16_nt;
extern VTBL_ENTRY _ZTI12S20731C16_nt[];
extern  VTBL_ENTRY _ZTV12S20731C16_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C16_nt[];
extern Class_Descriptor cd_S20731C17_nt;
extern VTBL_ENTRY _ZTI12S20731C17_nt[];
extern  VTBL_ENTRY _ZTV12S20731C17_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C17_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C19_nt;
extern VTBL_ENTRY _ZTI12S20731C19_nt[];
extern  VTBL_ENTRY _ZTV12S20731C19_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C19_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C18_nt;
extern VTBL_ENTRY _ZTI12S20731C18_nt[];
extern  VTBL_ENTRY _ZTV12S20731C18_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C18_nt[];
extern Class_Descriptor cd_S20731C15_nt;
extern VTBL_ENTRY _ZTI12S20731C15_nt[];
extern  VTBL_ENTRY _ZTV12S20731C15_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C15_nt[];
extern Class_Descriptor cd_S20731C7_nt;
extern VTBL_ENTRY _ZTI11S20731C7_nt[];
extern  VTBL_ENTRY _ZTV11S20731C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C7_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C15_nt;
extern VTBL_ENTRY _ZTI12S20731C15_nt[];
extern  VTBL_ENTRY _ZTV12S20731C15_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C15_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
static Base_Class bases_S20731C21_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20731C10_nt,    ABISELECT(248,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    103, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(320,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
    3, //immediately_derived
  0, 0},
  {&cd_S20731C4_nt,    ABISELECT(320,172), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    83, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20731C10_nt,    ABISELECT(288,156), //bcp->offset
    91, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    84, //bcp->index_in_construction_vtbl_array
    115, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20731C11_nt,    ABISELECT(264,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    109, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(272,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    111, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(272,148), //bcp->offset
    88, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    85, //bcp->index_in_construction_vtbl_array
    110, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(264,144), //bcp->offset
    80, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    82, //bcp->index_in_construction_vtbl_array
    108, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(248,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_S20731C13_nt,    ABISELECT(248,136), //bcp->offset
    71, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    81, //bcp->index_in_construction_vtbl_array
    102, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20731C11_nt,    0, //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
    23, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    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
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(8,4), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    86, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20731C8_nt,    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
    27, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(32,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
    17, //immediately_derived
  0, 0},
  {&cd_S20731C4_nt,    ABISELECT(32,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
    28, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20731C11_nt,    ABISELECT(40,24), //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
    29, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    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
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(48,28), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    89, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(40,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20731C8_nt,    ABISELECT(40,24), //bcp->offset
    27, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    88, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20731C14_nt,    ABISELECT(32,20), //bcp->offset
    18, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    87, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(72,44), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(72,44), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    90, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(88,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
    37, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(88,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
    38, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(304,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
    30, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(304,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    117, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20731C16_nt,    ABISELECT(304,164), //bcp->offset
    94, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    92, //bcp->index_in_construction_vtbl_array
    116, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S20731C17_nt,    ABISELECT(320,172), //bcp->offset
    103, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    93, //bcp->index_in_construction_vtbl_array
    119, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    44, //immediately_derived
  0, 1},
  {&cd_S20731C11_nt,    ABISELECT(336,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    124, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(344,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    126, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(344,184), //bcp->offset
    123, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    95, //bcp->index_in_construction_vtbl_array
    125, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(336,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    123, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(376,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S20731C11_nt,    ABISELECT(376,200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    97, //bcp->index_in_construction_vtbl_array
    145, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S20731C10_nt,    ABISELECT(384,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    147, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(384,204), //bcp->offset
    139, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    98, //bcp->index_in_construction_vtbl_array
    146, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    40, //immediately_derived
  0, 1},
  {&cd_S20731C19_nt,    ABISELECT(376,200), //bcp->offset
    129, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    96, //bcp->index_in_construction_vtbl_array
    140, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    43, //immediately_derived
  0, 1},
  {&cd_S20731C10_nt,    ABISELECT(360,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    131, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(360,192), //bcp->offset
    126, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    99, //bcp->index_in_construction_vtbl_array
    130, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S20731C18_nt,    ABISELECT(336,180), //bcp->offset
    111, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    94, //bcp->index_in_construction_vtbl_array
    122, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    44, //immediately_derived
  0, 1},
  {&cd_S20731C15_nt,    ABISELECT(88,52), //bcp->offset
    40, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    91, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S20731C7_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20731C10_nt,    ABISELECT(208,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    69, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(208,112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S20731C15_nt,    ABISELECT(208,112), //bcp->offset
    54, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    100, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20731C10_nt,    ABISELECT(224,120), //bcp->offset
    68, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    101, //bcp->index_in_construction_vtbl_array
    80, //bcp->base_subarray_index_in_construction_vtbl_array
    44, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI12S20731C21_nt[];
extern void _ZN12S20731C21_ntD1Ev();
extern void _ZN12S20731C21_ntD0Ev();
extern void ABISELECT(_ZThn32_N12S20731C21_ntD1Ev,_ZThn20_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn32_N12S20731C21_ntD0Ev,_ZThn20_N12S20731C21_ntD0Ev)();
extern void ABISELECT(_ZThn40_N12S20731C21_ntD1Ev,_ZThn24_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn40_N12S20731C21_ntD0Ev,_ZThn24_N12S20731C21_ntD0Ev)();
extern void ABISELECT(_ZThn88_N12S20731C21_ntD1Ev,_ZThn52_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn88_N12S20731C21_ntD0Ev,_ZThn52_N12S20731C21_ntD0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
extern void ABISELECT(_ZThn208_N12S20731C21_ntD1Ev,_ZThn112_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn208_N12S20731C21_ntD0Ev,_ZThn112_N12S20731C21_ntD0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
extern void ABISELECT(_ZTv0_n56_N12S20731C21_ntD1Ev,_ZTv0_n28_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn248_N12S20731C21_ntD1Ev,_ZThn136_N12S20731C21_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N12S20731C21_ntD0Ev,_ZTv0_n28_N12S20731C21_ntD0Ev)();
extern void ABISELECT(_ZThn248_N12S20731C21_ntD0Ev,_ZThn136_N12S20731C21_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N12S20731C21_ntD1Ev,_ZTv0_n24_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn264_N12S20731C21_ntD1Ev,_ZThn144_N12S20731C21_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N12S20731C21_ntD0Ev,_ZTv0_n24_N12S20731C21_ntD0Ev)();
extern void ABISELECT(_ZThn264_N12S20731C21_ntD0Ev,_ZThn144_N12S20731C21_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S20731C21_ntD1Ev,_ZTv0_n20_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn304_N12S20731C21_ntD1Ev,_ZThn164_N12S20731C21_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S20731C21_ntD0Ev,_ZTv0_n20_N12S20731C21_ntD0Ev)();
extern void ABISELECT(_ZThn304_N12S20731C21_ntD0Ev,_ZThn164_N12S20731C21_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
extern void ABISELECT(_ZTv0_n24_N12S20731C21_ntD1Ev,_ZTv0_n12_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn320_N12S20731C21_ntD1Ev,_ZThn172_N12S20731C21_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C21_ntD0Ev,_ZTv0_n12_N12S20731C21_ntD0Ev)();
extern void ABISELECT(_ZThn320_N12S20731C21_ntD0Ev,_ZThn172_N12S20731C21_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N12S20731C21_ntD1Ev,_ZTv0_n40_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn336_N12S20731C21_ntD1Ev,_ZThn180_N12S20731C21_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N12S20731C21_ntD0Ev,_ZTv0_n40_N12S20731C21_ntD0Ev)();
extern void ABISELECT(_ZThn336_N12S20731C21_ntD0Ev,_ZThn180_N12S20731C21_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C21_ntD1Ev,_ZTv0_n16_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn376_N12S20731C21_ntD1Ev,_ZThn200_N12S20731C21_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C21_ntD0Ev,_ZTv0_n16_N12S20731C21_ntD0Ev)();
extern void ABISELECT(_ZThn376_N12S20731C21_ntD0Ev,_ZThn200_N12S20731C21_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20731C21_nt[] = {
  ABISELECT(384,204),
  ABISELECT(376,200),
  ABISELECT(376,200),
  ABISELECT(336,180),
  ABISELECT(320,172),
  ABISELECT(304,164),
  ABISELECT(264,144),
  ABISELECT(248,136),
  ABISELECT(288,156),
  ABISELECT(320,172),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C21_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C21_ntD0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  ABISELECT(232,124),
  ABISELECT(216,116),
  ABISELECT(288,152),
  ABISELECT(-32,-20),
  ABISELECT(256,136),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N12S20731C21_ntD1Ev,_ZThn20_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N12S20731C21_ntD0Ev,_ZThn20_N12S20731C21_ntD0Ev),
  ABISELECT(248,132),
  ABISELECT(280,148),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N12S20731C21_ntD1Ev,_ZThn24_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N12S20731C21_ntD0Ev,_ZThn24_N12S20731C21_ntD0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  ABISELECT(-72,-44),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  ABISELECT(296,152),
  ABISELECT(288,148),
  ABISELECT(288,148),
  ABISELECT(200,104),
  ABISELECT(248,128),
  ABISELECT(232,120),
  ABISELECT(232,120),
  ABISELECT(216,112),
  ABISELECT(-88,-52),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N12S20731C21_ntD1Ev,_ZThn52_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N12S20731C21_ntD0Ev,_ZThn52_N12S20731C21_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
  ABISELECT(176,92),
  ABISELECT(168,88),
  ABISELECT(168,88),
  ABISELECT(80,44),
  ABISELECT(128,68),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(96,52),
  ABISELECT(-208,-112),
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N12S20731C21_ntD1Ev,_ZThn112_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N12S20731C21_ntD0Ev,_ZThn112_N12S20731C21_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
  ABISELECT(-224,-120),
  ABISELECT(-224,-120),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  ABISELECT(-248,-136),
  ABISELECT(40,20),
  ABISELECT(72,36),
  ABISELECT(16,8),
  ABISELECT(-248,-136),
  ABISELECT(-248,-136),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C21_ntD1Ev,_ZTv0_n28_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C21_ntD0Ev,_ZTv0_n28_N12S20731C21_ntD0Ev),
  ABISELECT(-264,-144),
  ABISELECT(24,12),
  ABISELECT(56,28),
  ABISELECT(-264,-144),
  ABISELECT(-264,-144),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C21_ntD1Ev,_ZTv0_n24_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C21_ntD0Ev,_ZTv0_n24_N12S20731C21_ntD0Ev),
  ABISELECT(-272,-148),
  ABISELECT(-272,-148),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  ABISELECT(-288,-156),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  0,
  ABISELECT(-304,-164),
  ABISELECT(16,8),
  ABISELECT(-304,-164),
  ABISELECT(-304,-164),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C21_ntD1Ev,_ZTv0_n20_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C21_ntD0Ev,_ZTv0_n20_N12S20731C21_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-320,-172),
  ABISELECT(-320,-172),
  ABISELECT(-320,-172),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C21_ntD1Ev,_ZTv0_n12_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C21_ntD0Ev,_ZTv0_n12_N12S20731C21_ntD0Ev),
  ABISELECT(-336,-180),
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-336,-180),
  ABISELECT(-336,-180),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C21_ntD1Ev,_ZTv0_n40_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C21_ntD0Ev,_ZTv0_n40_N12S20731C21_ntD0Ev),
  ABISELECT(-344,-184),
  ABISELECT(-344,-184),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  ABISELECT(-360,-192),
  ABISELECT(-360,-192),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  ABISELECT(-56,-28),
  ABISELECT(8,4),
  0,
  ABISELECT(-88,-44),
  ABISELECT(-376,-200),
  ABISELECT(-376,-200),
  ABISELECT(-376,-200),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C21_ntD1Ev,_ZTv0_n16_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C21_ntD0Ev,_ZTv0_n16_N12S20731C21_ntD0Ev),
  ABISELECT(-384,-204),
  ABISELECT(-384,-204),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
extern VTBL_ENTRY _ZTV12S20731C21_nt[];
extern void _ZN11S20731C7_ntD1Ev();
extern void _ZN11S20731C7_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(384,204),
  ABISELECT(376,200),
  ABISELECT(376,200),
  ABISELECT(336,180),
  ABISELECT(320,172),
  ABISELECT(304,164),
  ABISELECT(264,144),
  ABISELECT(248,136),
  ABISELECT(288,156),
  ABISELECT(320,172),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C7_ntD0Ev,
};
extern void _ZN11S20731C8_ntD1Ev();
extern void _ZN11S20731C8_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(288,156),
  ABISELECT(320,172),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C8_ntD0Ev,
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt11S20731C8_nt11S20731C7_nt__A1__12S20731C21_nt[] = {
  ABISELECT(288,156),
  ABISELECT(320,172),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt__A1__12S20731C21_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt__A1__12S20731C21_nt[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt__A3__12S20731C21_nt[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZThn320_N11S20731C9_ntD1Ev,_ZThn172_N11S20731C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
extern void ABISELECT(_ZThn320_N11S20731C9_ntD0Ev,_ZThn172_N11S20731C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt__A1__12S20731C21_nt[] = {
  ABISELECT(-320,-172),
  ABISELECT(-320,-172),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt__A1__12S20731C21_nt[] = {
  ABISELECT(-288,-156),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt__A1__12S20731C21_nt[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev)();
extern void ABISELECT(_ZThn320_N11S20731C8_ntD1Ev,_ZThn172_N11S20731C8_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev)();
extern void ABISELECT(_ZThn320_N11S20731C8_ntD0Ev,_ZThn172_N11S20731C8_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C8_nt11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-320,-172),
  ABISELECT(-320,-172),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C8_nt11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-288,-156),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
extern void _ZN12S20731C14_ntD1Ev();
extern void _ZN12S20731C14_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C14_nt11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(232,124),
  ABISELECT(216,116),
  ABISELECT(288,152),
  ABISELECT(-32,-20),
  ABISELECT(256,136),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C14_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C14_ntD0Ev,
};
extern void _ZN11S20731C8_ntD1Ev();
extern void _ZN11S20731C8_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__12S20731C21_nt[] = {
  ABISELECT(248,132),
  ABISELECT(280,148),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C8_ntD0Ev,
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__12S20731C21_nt[] = {
  ABISELECT(248,132),
  ABISELECT(280,148),
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__12S20731C21_nt[] = {
  ABISELECT(-40,-24),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__12S20731C21_nt[] = {
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A4__12S20731C21_nt[] = {
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZThn280_N11S20731C9_ntD1Ev,_ZThn148_N11S20731C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
extern void ABISELECT(_ZThn280_N11S20731C9_ntD0Ev,_ZThn148_N11S20731C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__12S20731C21_nt[] = {
  ABISELECT(-280,-148),
  ABISELECT(-280,-148),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__12S20731C21_nt[] = {
  ABISELECT(-288,-156),
  ABISELECT(-248,-132),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__12S20731C21_nt[] = {
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev)();
extern void ABISELECT(_ZThn280_N11S20731C8_ntD1Ev,_ZThn148_N11S20731C8_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev)();
extern void ABISELECT(_ZThn280_N11S20731C8_ntD0Ev,_ZThn148_N11S20731C8_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__12S20731C21_nt[] = {
  ABISELECT(-280,-148),
  ABISELECT(-280,-148),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__12S20731C21_nt[] = {
  ABISELECT(-288,-156),
  ABISELECT(-248,-132),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__12S20731C21_nt[] = {
  ABISELECT(-48,-28),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__12S20731C14_nt11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-288,-156),
  ABISELECT(-256,-136),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
extern void ABISELECT(_ZThn8_N12S20731C14_ntD1Ev,_ZThn4_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn8_N12S20731C14_ntD0Ev,_ZThn4_N12S20731C14_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt__12S20731C14_nt11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(248,132),
  ABISELECT(280,148),
  ABISELECT(-40,-24),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N12S20731C14_ntD1Ev,_ZThn4_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N12S20731C14_ntD0Ev,_ZThn4_N12S20731C14_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn288_N12S20731C14_ntD1Ev,_ZThn152_N12S20731C14_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev)();
extern void ABISELECT(_ZThn288_N12S20731C14_ntD0Ev,_ZThn152_N12S20731C14_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__A1__12S20731C14_nt11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-288,-152),
  ABISELECT(-288,-152),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__12S20731C14_nt11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-48,-28),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
extern void ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn216_N12S20731C14_ntD1Ev,_ZThn116_N12S20731C14_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev)();
extern void ABISELECT(_ZThn216_N12S20731C14_ntD0Ev,_ZThn116_N12S20731C14_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__12S20731C14_nt11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-216,-116),
  ABISELECT(40,20),
  ABISELECT(72,36),
  ABISELECT(16,8),
  ABISELECT(-248,-136),
  ABISELECT(-216,-116),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn232_N12S20731C14_ntD1Ev,_ZThn124_N12S20731C14_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev)();
extern void ABISELECT(_ZThn232_N12S20731C14_ntD0Ev,_ZThn124_N12S20731C14_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-232,-124),
  ABISELECT(24,12),
  ABISELECT(56,28),
  ABISELECT(-264,-144),
  ABISELECT(-232,-124),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-272,-148),
  ABISELECT(-240,-128),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C7_nt__A3__12S20731C21_nt[] = {
  ABISELECT(-72,-44),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C7_nt__A5__12S20731C21_nt[] = {
  ABISELECT(-72,-44),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void _ZN12S20731C15_ntD1Ev();
extern void _ZN12S20731C15_ntD0Ev();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(296,152),
  ABISELECT(288,148),
  ABISELECT(288,148),
  ABISELECT(200,104),
  ABISELECT(248,128),
  ABISELECT(232,120),
  ABISELECT(232,120),
  ABISELECT(216,112),
  ABISELECT(-88,-52),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C15_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C15_nt11S20731C7_nt__A4__12S20731C21_nt[] = {
  ABISELECT(-88,-52),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt11S20731C7_nt__A6__12S20731C21_nt[] = {
  ABISELECT(-88,-52),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn216_N12S20731C15_ntD1Ev,_ZThn112_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn216_N12S20731C15_ntD0Ev,_ZThn112_N12S20731C15_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C15_nt11S20731C7_nt__12S20731C21_nt[] = {
  0,
  ABISELECT(-216,-112),
  ABISELECT(16,8),
  ABISELECT(-304,-164),
  ABISELECT(-216,-112),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn232_N12S20731C15_ntD1Ev,_ZThn120_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn232_N12S20731C15_ntD0Ev,_ZThn120_N12S20731C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__12S20731C15_nt11S20731C7_nt__12S20731C21_nt[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-320,-172),
  ABISELECT(-232,-120),
  ABISELECT(-232,-120),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn248_N12S20731C15_ntD1Ev,_ZThn128_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn248_N12S20731C15_ntD0Ev,_ZThn128_N12S20731C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__12S20731C15_nt11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-248,-128),
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-336,-180),
  ABISELECT(-248,-128),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A2__12S20731C15_nt11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-288,-156),
  ABISELECT(-200,-104),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-344,-184),
  ABISELECT(-256,-132),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn288_N12S20731C15_ntD1Ev,_ZThn148_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn288_N12S20731C15_ntD0Ev,_ZThn148_N12S20731C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C15_nt11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-56,-28),
  ABISELECT(8,4),
  0,
  ABISELECT(-88,-44),
  ABISELECT(-288,-148),
  ABISELECT(-376,-200),
  ABISELECT(-288,-148),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A2__12S20731C15_nt11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-384,-204),
  ABISELECT(-296,-152),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-360,-192),
  ABISELECT(-272,-140),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C7_ntD1Ev,_ZTv0_n12_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn320_N11S20731C7_ntD1Ev,_ZThn172_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C7_ntD0Ev,_ZTv0_n12_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn320_N11S20731C7_ntD0Ev,_ZThn172_N11S20731C7_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__11S20731C7_nt__12S20731C21_nt[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-320,-172),
  ABISELECT(-320,-172),
  ABISELECT(-320,-172),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C7_ntD1Ev,_ZTv0_n12_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C7_ntD0Ev,_ZTv0_n12_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-288,-156),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZTv0_n56_N11S20731C7_ntD1Ev,_ZTv0_n28_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn248_N11S20731C7_ntD1Ev,_ZThn136_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N11S20731C7_ntD0Ev,_ZTv0_n28_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn248_N11S20731C7_ntD0Ev,_ZThn136_N11S20731C7_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-248,-136),
  ABISELECT(40,20),
  ABISELECT(72,36),
  ABISELECT(16,8),
  ABISELECT(-248,-136),
  ABISELECT(-248,-136),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S20731C7_ntD1Ev,_ZTv0_n28_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S20731C7_ntD0Ev,_ZTv0_n28_N11S20731C7_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n48_N11S20731C7_ntD1Ev,_ZTv0_n24_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn264_N11S20731C7_ntD1Ev,_ZThn144_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N11S20731C7_ntD0Ev,_ZTv0_n24_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn264_N11S20731C7_ntD0Ev,_ZThn144_N11S20731C7_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__A1__11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-264,-144),
  ABISELECT(24,12),
  ABISELECT(56,28),
  ABISELECT(-264,-144),
  ABISELECT(-264,-144),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N11S20731C7_ntD1Ev,_ZTv0_n24_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N11S20731C7_ntD0Ev,_ZTv0_n24_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__A1__11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-272,-148),
  ABISELECT(-272,-148),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZThn32_N11S20731C7_ntD1Ev,_ZThn20_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn32_N11S20731C7_ntD0Ev,_ZThn20_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C14_nt__11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(232,124),
  ABISELECT(216,116),
  ABISELECT(288,152),
  ABISELECT(-32,-20),
  ABISELECT(256,136),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N11S20731C7_ntD1Ev,_ZThn20_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N11S20731C7_ntD0Ev,_ZThn20_N11S20731C7_ntD0Ev),
};
extern void ABISELECT(_ZThn40_N11S20731C7_ntD1Ev,_ZThn24_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn40_N11S20731C7_ntD0Ev,_ZThn24_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt12S20731C14_nt__A1__11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(248,132),
  ABISELECT(280,148),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N11S20731C7_ntD1Ev,_ZThn24_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N11S20731C7_ntD0Ev,_ZThn24_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A__11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-72,-44),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZThn88_N11S20731C7_ntD1Ev,_ZThn52_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn88_N11S20731C7_ntD0Ev,_ZThn52_N11S20731C7_ntD0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt__11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(296,152),
  ABISELECT(288,148),
  ABISELECT(288,148),
  ABISELECT(200,104),
  ABISELECT(248,128),
  ABISELECT(232,120),
  ABISELECT(232,120),
  ABISELECT(216,112),
  ABISELECT(-88,-52),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N11S20731C7_ntD1Ev,_ZThn52_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N11S20731C7_ntD0Ev,_ZThn52_N11S20731C7_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N11S20731C7_ntD1Ev,_ZTv0_n20_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn304_N11S20731C7_ntD1Ev,_ZThn164_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N11S20731C7_ntD0Ev,_ZTv0_n20_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn304_N11S20731C7_ntD0Ev,_ZThn164_N11S20731C7_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__11S20731C7_nt__12S20731C21_nt[] = {
  0,
  ABISELECT(-304,-164),
  ABISELECT(16,8),
  ABISELECT(-304,-164),
  ABISELECT(-304,-164),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S20731C7_ntD1Ev,_ZTv0_n20_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S20731C7_ntD0Ev,_ZTv0_n20_N11S20731C7_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n80_N11S20731C7_ntD1Ev,_ZTv0_n40_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn336_N11S20731C7_ntD1Ev,_ZThn180_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N11S20731C7_ntD0Ev,_ZTv0_n40_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn336_N11S20731C7_ntD0Ev,_ZThn180_N11S20731C7_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-336,-180),
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-336,-180),
  ABISELECT(-336,-180),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N11S20731C7_ntD1Ev,_ZTv0_n40_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N11S20731C7_ntD0Ev,_ZTv0_n40_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-344,-184),
  ABISELECT(-344,-184),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N11S20731C7_ntD1Ev,_ZTv0_n16_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn376_N11S20731C7_ntD1Ev,_ZThn200_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N11S20731C7_ntD0Ev,_ZTv0_n16_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn376_N11S20731C7_ntD0Ev,_ZThn200_N11S20731C7_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-56,-28),
  ABISELECT(8,4),
  0,
  ABISELECT(-88,-44),
  ABISELECT(-376,-200),
  ABISELECT(-376,-200),
  ABISELECT(-376,-200),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20731C7_ntD1Ev,_ZTv0_n16_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20731C7_ntD0Ev,_ZTv0_n16_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A6__11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-384,-204),
  ABISELECT(-384,-204),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A7__11S20731C7_nt__12S20731C21_nt[] = {
  ABISELECT(-360,-192),
  ABISELECT(-360,-192),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void _ZN12S20731C15_ntD1Ev();
extern void _ZN12S20731C15_ntD0Ev();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt__A1__12S20731C21_nt[] = {
  ABISELECT(176,92),
  ABISELECT(168,88),
  ABISELECT(168,88),
  ABISELECT(80,44),
  ABISELECT(128,68),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(96,52),
  ABISELECT(-208,-112),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C15_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C15_nt__A8__12S20731C21_nt[] = {
  ABISELECT(-208,-112),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt__A11__12S20731C21_nt[] = {
  ABISELECT(-208,-112),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn96_N12S20731C15_ntD1Ev,_ZThn52_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn96_N12S20731C15_ntD0Ev,_ZThn52_N12S20731C15_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C15_nt__A1__12S20731C21_nt[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(16,8),
  ABISELECT(-304,-164),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn112_N12S20731C15_ntD1Ev,_ZThn60_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn112_N12S20731C15_ntD0Ev,_ZThn60_N12S20731C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__12S20731C15_nt__A1__12S20731C21_nt[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-320,-172),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn128_N12S20731C15_ntD1Ev,_ZThn68_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn128_N12S20731C15_ntD0Ev,_ZThn68_N12S20731C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__12S20731C15_nt__A1__12S20731C21_nt[] = {
  ABISELECT(-128,-68),
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-336,-180),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A2__12S20731C15_nt__A1__12S20731C21_nt[] = {
  ABISELECT(-288,-156),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt__A1__12S20731C21_nt[] = {
  ABISELECT(-344,-184),
  ABISELECT(-136,-72),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn168_N12S20731C15_ntD1Ev,_ZThn88_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn168_N12S20731C15_ntD0Ev,_ZThn88_N12S20731C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C15_nt__A1__12S20731C21_nt[] = {
  ABISELECT(-56,-28),
  ABISELECT(8,4),
  0,
  ABISELECT(-88,-44),
  ABISELECT(-168,-88),
  ABISELECT(-376,-200),
  ABISELECT(-168,-88),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A2__12S20731C15_nt__A1__12S20731C21_nt[] = {
  ABISELECT(-384,-204),
  ABISELECT(-176,-92),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt__A1__12S20731C21_nt[] = {
  ABISELECT(-360,-192),
  ABISELECT(-152,-80),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A__12S20731C21_nt[] = {
  ABISELECT(-224,-120),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void _ZN12S20731C13_ntD1Ev();
extern void _ZN12S20731C13_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__12S20731C21_nt[] = {
  ABISELECT(40,20),
  ABISELECT(72,36),
  ABISELECT(16,8),
  ABISELECT(-248,-136),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C13_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C13_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C13_nt__12S20731C21_nt[] = {
  ABISELECT(-248,-136),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n48_N12S20731C13_ntD1Ev,_ZTv0_n24_N12S20731C13_ntD1Ev)();
extern void ABISELECT(_ZThn16_N12S20731C13_ntD1Ev,_ZThn8_N12S20731C13_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N12S20731C13_ntD0Ev,_ZTv0_n24_N12S20731C13_ntD0Ev)();
extern void ABISELECT(_ZThn16_N12S20731C13_ntD0Ev,_ZThn8_N12S20731C13_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__12S20731C13_nt__12S20731C21_nt[] = {
  ABISELECT(-16,-8),
  ABISELECT(24,12),
  ABISELECT(56,28),
  ABISELECT(-264,-144),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C13_ntD1Ev,_ZTv0_n24_N12S20731C13_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C13_ntD0Ev,_ZTv0_n24_N12S20731C13_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C13_ntD1Ev,_ZTv0_n12_N12S20731C13_ntD1Ev)();
extern void ABISELECT(_ZThn72_N12S20731C13_ntD1Ev,_ZThn36_N12S20731C13_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C13_ntD0Ev,_ZTv0_n12_N12S20731C13_ntD0Ev)();
extern void ABISELECT(_ZThn72_N12S20731C13_ntD0Ev,_ZThn36_N12S20731C13_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C13_nt__12S20731C21_nt[] = {
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C13_ntD1Ev,_ZTv0_n12_N12S20731C13_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C13_ntD0Ev,_ZTv0_n12_N12S20731C13_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A1__12S20731C13_nt__12S20731C21_nt[] = {
  ABISELECT(-288,-156),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C13_nt__12S20731C21_nt[] = {
  ABISELECT(-272,-148),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__12S20731C21_nt[] = {
  ABISELECT(24,12),
  ABISELECT(56,28),
  ABISELECT(-264,-144),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt__12S20731C21_nt[] = {
  ABISELECT(-264,-144),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C21_nt[] = {
  ABISELECT(-272,-148),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt__A2__12S20731C21_nt[] = {
  ABISELECT(-272,-148),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZThn56_N11S20731C9_ntD1Ev,_ZThn28_N11S20731C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
extern void ABISELECT(_ZThn56_N11S20731C9_ntD0Ev,_ZThn28_N11S20731C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt__12S20731C21_nt[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt__12S20731C21_nt[] = {
  ABISELECT(-288,-156),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt__12S20731C21_nt[] = {
  ABISELECT(-272,-148),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A1__12S20731C21_nt[] = {
  ABISELECT(-288,-156),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void _ZN12S20731C16_ntD1Ev();
extern void _ZN12S20731C16_ntD0Ev();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C21_nt[] = {
  ABISELECT(16,8),
  ABISELECT(-304,-164),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C16_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C16_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C16_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C16_nt__A7__12S20731C21_nt[] = {
  ABISELECT(-304,-164),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev)();
extern void ABISELECT(_ZThn16_N12S20731C16_ntD1Ev,_ZThn8_N12S20731C16_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev)();
extern void ABISELECT(_ZThn16_N12S20731C16_ntD0Ev,_ZThn8_N12S20731C16_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C16_nt__12S20731C21_nt[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C16_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev)();
extern void _ZN12S20731C17_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev)();
extern void _ZN12S20731C17_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__12S20731C21_nt[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-320,-172),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C17_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C17_ntD1Ev,_ZTv0_n20_N12S20731C17_ntD1Ev)();
extern void ABISELECT(_ZTv0_n40_N12S20731C17_ntD0Ev,_ZTv0_n20_N12S20731C17_ntD0Ev)();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C17_nt__12S20731C21_nt[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-304,-164),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI12S20731C17_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C17_ntD1Ev,_ZTv0_n20_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C17_ntD0Ev,_ZTv0_n20_N12S20731C17_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void _ZN12S20731C18_ntD1Ev();
extern void _ZN12S20731C18_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__12S20731C21_nt[] = {
  ABISELECT(48,24),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-336,-180),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C18_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C18_ntD0Ev,
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt12S20731C18_nt__A3__12S20731C21_nt[] = {
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-336,-180),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt12S20731C18_nt__A3__12S20731C21_nt[] = {
  ABISELECT(-336,-180),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__12S20731C21_nt[] = {
  ABISELECT(-344,-184),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt12S20731C18_nt__A8__12S20731C21_nt[] = {
  ABISELECT(-344,-184),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt12S20731C18_nt__A3__12S20731C21_nt[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt12S20731C18_nt__A3__12S20731C21_nt[] = {
  ABISELECT(-288,-156),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt12S20731C18_nt__A3__12S20731C21_nt[] = {
  ABISELECT(-344,-184),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A7__12S20731C21_nt[] = {
  ABISELECT(-360,-192),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C18_nt__A10__12S20731C21_nt[] = {
  ABISELECT(-360,-192),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C18_ntD1Ev,_ZTv0_n20_N12S20731C18_ntD1Ev)();
extern void ABISELECT(_ZTv0_n40_N12S20731C18_ntD0Ev,_ZTv0_n20_N12S20731C18_ntD0Ev)();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C18_nt__12S20731C21_nt[] = {
  0,
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-304,-164),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C18_ntD1Ev,_ZTv0_n20_N12S20731C18_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C18_ntD0Ev,_ZTv0_n20_N12S20731C18_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N12S20731C18_ntD1Ev,_ZTv0_n12_N12S20731C18_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N12S20731C18_ntD0Ev,_ZTv0_n12_N12S20731C18_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C18_nt__12S20731C21_nt[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C18_ntD1Ev,_ZTv0_n12_N12S20731C18_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C18_ntD0Ev,_ZTv0_n12_N12S20731C18_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A1__12S20731C18_nt__12S20731C21_nt[] = {
  ABISELECT(-288,-156),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C18_nt__12S20731C21_nt[] = {
  ABISELECT(-344,-184),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C18_ntD1Ev,_ZTv0_n16_N12S20731C18_ntD1Ev)();
extern void ABISELECT(_ZThn40_N12S20731C18_ntD1Ev,_ZThn20_N12S20731C18_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C18_ntD0Ev,_ZTv0_n16_N12S20731C18_ntD0Ev)();
extern void ABISELECT(_ZThn40_N12S20731C18_ntD0Ev,_ZThn20_N12S20731C18_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C18_nt__12S20731C21_nt[] = {
  ABISELECT(-56,-28),
  ABISELECT(8,4),
  0,
  ABISELECT(-88,-44),
  ABISELECT(-40,-20),
  ABISELECT(-376,-200),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C18_ntD1Ev,_ZTv0_n16_N12S20731C18_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C18_ntD0Ev,_ZTv0_n16_N12S20731C18_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A1__12S20731C18_nt__12S20731C21_nt[] = {
  ABISELECT(-384,-204),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A__12S20731C18_nt__12S20731C21_nt[] = {
  ABISELECT(-360,-192),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C19_ntD1Ev,_ZTv0_n16_N12S20731C19_ntD1Ev)();
extern void _ZN12S20731C19_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C19_ntD0Ev,_ZTv0_n16_N12S20731C19_ntD0Ev)();
extern void _ZN12S20731C19_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C21_nt[] = {
  ABISELECT(-56,-28),
  ABISELECT(8,4),
  0,
  ABISELECT(-88,-44),
  0,
  ABISELECT(-376,-200),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C19_ntD1Ev,_ZTv0_n16_N12S20731C19_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C19_ntD0Ev,_ZTv0_n16_N12S20731C19_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__12S20731C19_nt__12S20731C21_nt[] = {
  ABISELECT(-288,-156),
  ABISELECT(88,44),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__12S20731C19_nt__12S20731C21_nt[] = {
  ABISELECT(-384,-204),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C19_ntD1Ev,_ZTv0_n12_N12S20731C19_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N12S20731C19_ntD0Ev,_ZTv0_n12_N12S20731C19_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C19_nt__12S20731C21_nt[] = {
  ABISELECT(56,28),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C19_ntD1Ev,_ZTv0_n12_N12S20731C19_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C19_ntD0Ev,_ZTv0_n12_N12S20731C19_ntD0Ev),
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt__A4__12S20731C21_nt[] = {
  ABISELECT(-376,-200),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A6__12S20731C21_nt[] = {
  ABISELECT(-384,-204),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt__A9__12S20731C21_nt[] = {
  ABISELECT(-384,-204),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
static  VTT_ENTRY vtt_S20731C21_nt[] = {
  {&(_ZTV12S20731C21_nt[13]),  13,142},
  {&(_tg__ZTV11S20731C7_nt__12S20731C21_nt[13]),  13,15},
  {&(_tg__ZTV11S20731C8_nt11S20731C7_nt__12S20731C21_nt[5]),  5,7},
  {&(_tg__ZTV11S20731C9_nt11S20731C8_nt11S20731C7_nt__A1__12S20731C21_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt__A1__12S20731C21_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt__A1__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt__A3__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt__A1__12S20731C21_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt__A1__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt__A1__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C8_nt11S20731C7_nt__12S20731C21_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C8_nt11S20731C7_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt11S20731C7_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C14_nt11S20731C7_nt__12S20731C21_nt[7]),  7,9},
  {&(_tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__12S20731C21_nt[5]),  5,7},
  {&(_tg__ZTV11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__12S20731C21_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__12S20731C21_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A4__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__12S20731C21_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__12S20731C21_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt__12S20731C14_nt11S20731C7_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C8_nt__12S20731C14_nt11S20731C7_nt__12S20731C21_nt[5]),  5,7},
  {&(_tg__ZTV11S20731C4_nt__A1__12S20731C14_nt11S20731C7_nt__12S20731C21_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__12S20731C14_nt11S20731C7_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__12S20731C14_nt11S20731C7_nt__12S20731C21_nt[7]),  7,9},
  {&(_tg__ZTV11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt__12S20731C21_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C7_nt__A3__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C7_nt__A5__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt11S20731C7_nt__12S20731C21_nt[11]),  11,14},
  {&(_tg__ZTV12S20731C12_nt12S20731C15_nt11S20731C7_nt__A4__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt11S20731C7_nt__A6__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__12S20731C15_nt11S20731C7_nt__12S20731C21_nt[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt11S20731C7_nt__12S20731C21_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt11S20731C7_nt__12S20731C21_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__12S20731C15_nt11S20731C7_nt__12S20731C21_nt[10]),  10,12},
  {&(_tg__ZTV12S20731C10_nt__A2__12S20731C15_nt11S20731C7_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt11S20731C7_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt11S20731C7_nt__12S20731C21_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt11S20731C7_nt__12S20731C21_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A2__12S20731C15_nt11S20731C7_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt11S20731C7_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C17_nt__11S20731C7_nt__12S20731C21_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C10_nt__11S20731C7_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__11S20731C7_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__11S20731C7_nt__12S20731C21_nt[7]),  7,9},
  {&(_tg__ZTV11S20731C9_nt__A1__11S20731C7_nt__12S20731C21_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__A1__11S20731C7_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C14_nt__11S20731C7_nt__12S20731C21_nt[7]),  7,9},
  {&(_tg__ZTV11S20731C8_nt12S20731C14_nt__A1__11S20731C7_nt__12S20731C21_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__A__11S20731C7_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt__11S20731C7_nt__12S20731C21_nt[11]),  11,14},
  {&(_tg__ZTV12S20731C16_nt__11S20731C7_nt__12S20731C21_nt[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__11S20731C7_nt__12S20731C21_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__11S20731C7_nt__12S20731C21_nt[10]),  10,12},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__11S20731C7_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__11S20731C7_nt__12S20731C21_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__11S20731C7_nt__12S20731C21_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A6__11S20731C7_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A7__11S20731C7_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt__A1__12S20731C21_nt[11]),  11,14},
  {&(_tg__ZTV12S20731C12_nt12S20731C15_nt__A8__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt__A11__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__12S20731C15_nt__A1__12S20731C21_nt[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt__A1__12S20731C21_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt__A1__12S20731C21_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__12S20731C15_nt__A1__12S20731C21_nt[10]),  10,12},
  {&(_tg__ZTV12S20731C10_nt__A2__12S20731C15_nt__A1__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt__A1__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt__A1__12S20731C21_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt__A1__12S20731C21_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A2__12S20731C15_nt__A1__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt__A1__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt__A__12S20731C21_nt[3]),  3,3},
  {&(_ZTV12S20731C21_nt[78]),  78,142},
  {&(_ZTV12S20731C21_nt[86]),  86,142},
  {&(_ZTV12S20731C21_nt[109]),  109,142},
  {&(_ZTV12S20731C21_nt[94]),  94,142},
  {&(_ZTV12S20731C21_nt[91]),  91,142},
  {&(_ZTV12S20731C21_nt[18]),  18,142},
  {&(_ZTV12S20731C21_nt[25]),  25,142},
  {&(_ZTV12S20731C21_nt[32]),  32,142},
  {&(_ZTV12S20731C21_nt[37]),  37,142},
  {&(_ZTV12S20731C21_nt[40]),  40,142},
  {&(_ZTV12S20731C21_nt[51]),  51,142},
  {&(_ZTV12S20731C21_nt[100]),  100,142},
  {&(_ZTV12S20731C21_nt[109]),  109,142},
  {&(_ZTV12S20731C21_nt[121]),  121,142},
  {&(_ZTV12S20731C21_nt[126]),  126,142},
  {&(_ZTV12S20731C21_nt[137]),  137,142},
  {&(_ZTV12S20731C21_nt[137]),  137,142},
  {&(_ZTV12S20731C21_nt[142]),  142,142},
  {&(_ZTV12S20731C21_nt[129]),  129,142},
  {&(_ZTV12S20731C21_nt[65]),  65,142},
  {&(_ZTV12S20731C21_nt[71]),  71,142},
  {&(_tg__ZTV12S20731C13_nt__12S20731C21_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C10_nt12S20731C13_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C9_nt__12S20731C13_nt__12S20731C21_nt[6]),  6,8},
  {&(_tg__ZTV11S20731C4_nt__12S20731C13_nt__12S20731C21_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__A1__12S20731C13_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C13_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C9_nt__12S20731C21_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt__12S20731C21_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt__A2__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt__12S20731C21_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt__A1__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__12S20731C21_nt[4]),  4,7},
  {&(_tg__ZTV12S20731C10_nt12S20731C16_nt__A7__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__12S20731C16_nt__12S20731C21_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C17_nt__12S20731C21_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C16_nt__12S20731C17_nt__12S20731C21_nt[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__12S20731C21_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__12S20731C21_nt[9]),  9,11},
  {&(_tg__ZTV11S20731C9_nt12S20731C18_nt__A3__12S20731C21_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt12S20731C18_nt__A3__12S20731C21_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt12S20731C18_nt__A8__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt12S20731C18_nt__A3__12S20731C21_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt12S20731C18_nt__A3__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt12S20731C18_nt__A3__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A7__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C18_nt__A10__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__12S20731C18_nt__12S20731C21_nt[6]),  6,9},
  {&(_tg__ZTV11S20731C4_nt__12S20731C18_nt__12S20731C21_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__A1__12S20731C18_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C18_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C18_nt__12S20731C21_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__12S20731C18_nt__12S20731C21_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A1__12S20731C18_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__A__12S20731C18_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C21_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C10_nt__12S20731C19_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C21_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__12S20731C19_nt__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__12S20731C19_nt__12S20731C21_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C11_nt__A4__12S20731C21_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt__A6__12S20731C21_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt__A9__12S20731C21_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI12S20731C21_nt[];
VTBL_ENTRY *P__ZTI12S20731C21_nt = _ZTI12S20731C21_nt; 
extern  VTBL_ENTRY _ZTV12S20731C21_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C21_nt[];
static VTBL_ENTRY alt_thunk_names96[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C19_ntD0Ev,_ZTv0_n16_N12S20731C19_ntD0Ev), // 
  (VTBL_ENTRY)_ZN12S20731C19_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C19_ntD1Ev,_ZTv0_n16_N12S20731C19_ntD1Ev), // 
  (VTBL_ENTRY)_ZN12S20731C19_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C18_ntD0Ev,_ZTv0_n16_N12S20731C18_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N12S20731C18_ntD0Ev,_ZThn20_N12S20731C18_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C18_ntD1Ev,_ZTv0_n16_N12S20731C18_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N12S20731C18_ntD1Ev,_ZThn20_N12S20731C18_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev), // 
  (VTBL_ENTRY)_ZN12S20731C17_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev), // 
  (VTBL_ENTRY)_ZN12S20731C17_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C16_ntD0Ev,_ZThn8_N12S20731C16_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C16_ntD1Ev,_ZThn8_N12S20731C16_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C13_ntD0Ev,_ZTv0_n12_N12S20731C13_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N12S20731C13_ntD0Ev,_ZThn36_N12S20731C13_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C13_ntD1Ev,_ZTv0_n12_N12S20731C13_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N12S20731C13_ntD1Ev,_ZThn36_N12S20731C13_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C13_ntD0Ev,_ZTv0_n24_N12S20731C13_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C13_ntD0Ev,_ZThn8_N12S20731C13_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C13_ntD1Ev,_ZTv0_n24_N12S20731C13_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C13_ntD1Ev,_ZThn8_N12S20731C13_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N11S20731C7_ntD0Ev,_ZTv0_n16_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N11S20731C7_ntD0Ev,_ZThn200_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N11S20731C7_ntD1Ev,_ZTv0_n16_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N11S20731C7_ntD1Ev,_ZThn200_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N11S20731C7_ntD0Ev,_ZTv0_n40_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N11S20731C7_ntD0Ev,_ZThn180_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N11S20731C7_ntD1Ev,_ZTv0_n40_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N11S20731C7_ntD1Ev,_ZThn180_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S20731C7_ntD0Ev,_ZTv0_n20_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N11S20731C7_ntD0Ev,_ZThn164_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S20731C7_ntD1Ev,_ZTv0_n20_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N11S20731C7_ntD1Ev,_ZThn164_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N11S20731C7_ntD0Ev,_ZTv0_n24_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N11S20731C7_ntD0Ev,_ZThn144_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N11S20731C7_ntD1Ev,_ZTv0_n24_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N11S20731C7_ntD1Ev,_ZThn144_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N11S20731C7_ntD0Ev,_ZTv0_n28_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N11S20731C7_ntD0Ev,_ZThn136_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N11S20731C7_ntD1Ev,_ZTv0_n28_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N11S20731C7_ntD1Ev,_ZThn136_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C7_ntD0Ev,_ZTv0_n12_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N11S20731C7_ntD0Ev,_ZThn172_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C7_ntD1Ev,_ZTv0_n12_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N11S20731C7_ntD1Ev,_ZThn172_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N12S20731C15_ntD0Ev,_ZThn88_N12S20731C15_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N12S20731C15_ntD0Ev,_ZThn148_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N12S20731C15_ntD1Ev,_ZThn88_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn288_N12S20731C15_ntD1Ev,_ZThn148_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N12S20731C15_ntD0Ev,_ZThn68_N12S20731C15_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N12S20731C15_ntD0Ev,_ZThn128_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N12S20731C15_ntD1Ev,_ZThn68_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N12S20731C15_ntD1Ev,_ZThn128_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N12S20731C15_ntD0Ev,_ZThn60_N12S20731C15_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N12S20731C15_ntD0Ev,_ZThn120_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N12S20731C15_ntD1Ev,_ZThn60_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N12S20731C15_ntD1Ev,_ZThn120_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N12S20731C15_ntD0Ev,_ZThn52_N12S20731C15_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn216_N12S20731C15_ntD0Ev,_ZThn112_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N12S20731C15_ntD1Ev,_ZThn52_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn216_N12S20731C15_ntD1Ev,_ZThn112_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N12S20731C14_ntD0Ev,_ZThn124_N12S20731C14_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N12S20731C14_ntD1Ev,_ZThn124_N12S20731C14_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N12S20731C14_ntD0Ev,_ZThn116_N12S20731C14_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N12S20731C14_ntD1Ev,_ZThn116_N12S20731C14_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N12S20731C14_ntD0Ev,_ZThn152_N12S20731C14_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N12S20731C14_ntD1Ev,_ZThn152_N12S20731C14_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N11S20731C8_ntD0Ev,_ZThn148_N11S20731C8_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N11S20731C8_ntD0Ev,_ZThn172_N11S20731C8_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N11S20731C8_ntD1Ev,_ZThn148_N11S20731C8_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N11S20731C8_ntD1Ev,_ZThn172_N11S20731C8_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N11S20731C9_ntD0Ev,_ZThn28_N11S20731C9_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N11S20731C9_ntD0Ev,_ZThn148_N11S20731C9_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N11S20731C9_ntD0Ev,_ZThn172_N11S20731C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N11S20731C9_ntD1Ev,_ZThn28_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N11S20731C9_ntD1Ev,_ZThn148_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N11S20731C9_ntD1Ev,_ZThn172_N11S20731C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C21_ntD0Ev,_ZTv0_n16_N12S20731C21_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N12S20731C21_ntD0Ev,_ZThn200_N12S20731C21_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C21_ntD1Ev,_ZTv0_n16_N12S20731C21_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N12S20731C21_ntD1Ev,_ZThn200_N12S20731C21_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S20731C21_ntD0Ev,_ZTv0_n40_N12S20731C21_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N12S20731C21_ntD0Ev,_ZThn180_N12S20731C21_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S20731C21_ntD1Ev,_ZTv0_n40_N12S20731C21_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N12S20731C21_ntD1Ev,_ZThn180_N12S20731C21_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C21_ntD0Ev,_ZTv0_n12_N12S20731C21_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N12S20731C21_ntD0Ev,_ZThn172_N12S20731C21_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C21_ntD1Ev,_ZTv0_n12_N12S20731C21_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N12S20731C21_ntD1Ev,_ZThn172_N12S20731C21_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C21_ntD0Ev,_ZTv0_n20_N12S20731C21_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N12S20731C21_ntD0Ev,_ZThn164_N12S20731C21_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C21_ntD1Ev,_ZTv0_n20_N12S20731C21_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N12S20731C21_ntD1Ev,_ZThn164_N12S20731C21_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C21_ntD0Ev,_ZTv0_n24_N12S20731C21_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N12S20731C21_ntD0Ev,_ZThn144_N12S20731C21_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C21_ntD1Ev,_ZTv0_n24_N12S20731C21_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N12S20731C21_ntD1Ev,_ZThn144_N12S20731C21_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N12S20731C21_ntD0Ev,_ZTv0_n28_N12S20731C21_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N12S20731C21_ntD0Ev,_ZThn136_N12S20731C21_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N12S20731C21_ntD1Ev,_ZTv0_n28_N12S20731C21_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N12S20731C21_ntD1Ev,_ZThn136_N12S20731C21_ntD1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20731C21_nt = {  "S20731C21_nt", // class name
  bases_S20731C21_nt, 50,
  &(vtc_S20731C21_nt[0]), // expected_vtbl_contents
  &(vtt_S20731C21_nt[0]), // expected_vtt_contents
  ABISELECT(400,212), // object size
  NSPAIRA(_ZTI12S20731C21_nt),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV12S20731C21_nt),142, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT12S20731C21_nt),147, //virtual table table var
  44, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names96,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20731C20_nt  : S2264C38 , virtual S20731C21_nt {
  ~S20731C20_nt(); // tgen
  S20731C20_nt(); // tgen
};
//SIG(-1 S20731C20_nt) C1{ BC2{ m} VBC3{ VBC4{ BC5{ VBC6{ m} FC6} VBC7{ VBC8{ BC6 vd} VBC5 BC9{ VBC6 vd} BC10{ VBC6 BC5 Fc:3}} BC6} BC11{ BC12{ VBC8 BC7 vd FL} VBC4 BC13{ BC8 VBC5 BC12 VBC4 vd} BC10 BC14{ BC10 VBC15{ VBC8 BC6 BC5 vd v1} VBC16{ VBC6 VBC15 Fc} VBC17{ VBC15 BC7 VBC18{ VBC5 BC6 VBC9 VBC10 VBC8 vd} BC10 FC6} vd v2} vd FC17} BC14 BC5 vd FL}}


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

//skip512 S20731C20_nt

#else // __cplusplus

extern void _ZN12S20731C20_ntC1Ev();
extern void _ZN12S20731C20_ntD1Ev();
Name_Map name_map_S20731C20_nt[] = {
  NSPAIR(_ZN12S20731C20_ntC1Ev),
  NSPAIR(_ZN12S20731C20_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C4_nt;
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C13_nt;
extern VTBL_ENTRY _ZTI12S20731C13_nt[];
extern  VTBL_ENTRY _ZTV12S20731C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C13_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S20731C8_nt;
extern VTBL_ENTRY _ZTI11S20731C8_nt[];
extern  VTBL_ENTRY _ZTV11S20731C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C8_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C4_nt;
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S20731C8_nt;
extern VTBL_ENTRY _ZTI11S20731C8_nt[];
extern  VTBL_ENTRY _ZTV11S20731C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C8_nt[];
extern Class_Descriptor cd_S20731C14_nt;
extern VTBL_ENTRY _ZTI12S20731C14_nt[];
extern  VTBL_ENTRY _ZTV12S20731C14_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C14_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C16_nt;
extern VTBL_ENTRY _ZTI12S20731C16_nt[];
extern  VTBL_ENTRY _ZTV12S20731C16_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C16_nt[];
extern Class_Descriptor cd_S20731C17_nt;
extern VTBL_ENTRY _ZTI12S20731C17_nt[];
extern  VTBL_ENTRY _ZTV12S20731C17_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C17_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C19_nt;
extern VTBL_ENTRY _ZTI12S20731C19_nt[];
extern  VTBL_ENTRY _ZTV12S20731C19_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C19_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C18_nt;
extern VTBL_ENTRY _ZTI12S20731C18_nt[];
extern  VTBL_ENTRY _ZTV12S20731C18_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C18_nt[];
extern Class_Descriptor cd_S20731C15_nt;
extern VTBL_ENTRY _ZTI12S20731C15_nt[];
extern  VTBL_ENTRY _ZTV12S20731C15_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C15_nt[];
extern Class_Descriptor cd_S20731C7_nt;
extern VTBL_ENTRY _ZTI11S20731C7_nt[];
extern  VTBL_ENTRY _ZTV11S20731C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C7_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C15_nt;
extern VTBL_ENTRY _ZTI12S20731C15_nt[];
extern  VTBL_ENTRY _ZTV12S20731C15_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C15_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C21_nt;
extern VTBL_ENTRY _ZTI12S20731C21_nt[];
extern  VTBL_ENTRY _ZTV12S20731C21_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C21_nt[];
static Base_Class bases_S20731C20_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C28,    ABISELECT(265,145), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20731C10_nt,    ABISELECT(256,140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    126, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(328,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
    4, //immediately_derived
  0, 0},
  {&cd_S20731C4_nt,    ABISELECT(328,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20731C10_nt,    ABISELECT(296,160), //bcp->offset
    110, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    138, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20731C11_nt,    ABISELECT(272,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    132, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(280,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    134, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(280,152), //bcp->offset
    107, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    133, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(272,148), //bcp->offset
    99, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    131, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(256,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
    11, //immediately_derived
  0, 0},
  {&cd_S20731C13_nt,    ABISELECT(256,140), //bcp->offset
    90, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    125, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S20731C11_nt,    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
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    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
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(16,8), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    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
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20731C8_nt,    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
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S2264C28,    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
    18, //immediately_derived
  0, 0},
  {&cd_S20731C4_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
    28, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20731C11_nt,    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
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(56,32), //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
    30, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(56,32), //bcp->offset
    53, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(48,28), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20731C8_nt,    ABISELECT(48,28), //bcp->offset
    46, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20731C14_nt,    ABISELECT(40,24), //bcp->offset
    37, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(80,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(80,48), //bcp->offset
    56, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    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
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    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
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(312,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
    31, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(312,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    140, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20731C16_nt,    ABISELECT(312,168), //bcp->offset
    113, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    139, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    32, //immediately_derived
  0, 1},
  {&cd_S20731C17_nt,    ABISELECT(328,176), //bcp->offset
    122, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    142, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    45, //immediately_derived
  0, 1},
  {&cd_S20731C11_nt,    ABISELECT(344,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    147, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(352,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    149, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(352,188), //bcp->offset
    142, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    148, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(344,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    146, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S20731C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    168, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    41, //immediately_derived
  0, 1},
  {&cd_S20731C10_nt,    ABISELECT(384,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    170, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(384,204), //bcp->offset
    148, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    169, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    41, //immediately_derived
  0, 1},
  {&cd_S20731C19_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    163, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    44, //immediately_derived
  0, 1},
  {&cd_S20731C10_nt,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    154, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(368,196), //bcp->offset
    145, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    153, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S20731C18_nt,    ABISELECT(344,184), //bcp->offset
    130, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    145, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    45, //immediately_derived
  0, 1},
  {&cd_S20731C15_nt,    ABISELECT(96,56), //bcp->offset
    59, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S20731C7_nt,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(216,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(216,116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    91, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S20731C15_nt,    ABISELECT(216,116), //bcp->offset
    73, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(232,124), //bcp->offset
    87, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    103, //bcp->base_subarray_index_in_construction_vtbl_array
    44, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S20731C21_nt,    ABISELECT(8,4), //bcp->offset
    17, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    45, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI12S20731C20_nt[];
extern void ABISELECT(_ZTv0_n32_N12S20731C20_ntD1Ev,_ZTv0_n16_N12S20731C20_ntD1Ev)();
extern void _ZN12S20731C20_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C20_ntD0Ev,_ZTv0_n16_N12S20731C20_ntD0Ev)();
extern void _ZN12S20731C20_ntD0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N12S20731C20_ntD1Ev,_ZTv0_n56_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZThn8_N12S20731C20_ntD1Ev,_ZThn4_N12S20731C20_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N12S20731C20_ntD0Ev,_ZTv0_n56_N12S20731C20_ntD0Ev)();
extern void ABISELECT(_ZThn8_N12S20731C20_ntD0Ev,_ZThn4_N12S20731C20_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n112_N12S20731C20_ntD1Ev,_ZTvn20_n56_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZTvn32_n112_N12S20731C20_ntD0Ev,_ZTvn20_n56_N12S20731C20_ntD0Ev)();
extern void ABISELECT(_ZTvn40_n112_N12S20731C20_ntD1Ev,_ZTvn24_n56_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZTvn40_n112_N12S20731C20_ntD0Ev,_ZTvn24_n56_N12S20731C20_ntD0Ev)();
extern void ABISELECT(_ZTvn88_n112_N12S20731C20_ntD1Ev,_ZTvn52_n56_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZTvn88_n112_N12S20731C20_ntD0Ev,_ZTvn52_n56_N12S20731C20_ntD0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
extern void ABISELECT(_ZTvn208_n112_N12S20731C20_ntD1Ev,_ZTvn112_n56_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZTvn208_n112_N12S20731C20_ntD0Ev,_ZTvn112_n56_N12S20731C20_ntD0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
extern void ABISELECT(_ZTv0_n56_N12S20731C20_ntD1Ev,_ZTv0_n28_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZThn256_N12S20731C20_ntD1Ev,_ZThn140_N12S20731C20_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N12S20731C20_ntD0Ev,_ZTv0_n28_N12S20731C20_ntD0Ev)();
extern void ABISELECT(_ZThn256_N12S20731C20_ntD0Ev,_ZThn140_N12S20731C20_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N12S20731C20_ntD1Ev,_ZTv0_n24_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZThn272_N12S20731C20_ntD1Ev,_ZThn148_N12S20731C20_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N12S20731C20_ntD0Ev,_ZTv0_n24_N12S20731C20_ntD0Ev)();
extern void ABISELECT(_ZThn272_N12S20731C20_ntD0Ev,_ZThn148_N12S20731C20_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S20731C20_ntD1Ev,_ZTv0_n20_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZThn312_N12S20731C20_ntD1Ev,_ZThn168_N12S20731C20_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S20731C20_ntD0Ev,_ZTv0_n20_N12S20731C20_ntD0Ev)();
extern void ABISELECT(_ZThn312_N12S20731C20_ntD0Ev,_ZThn168_N12S20731C20_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
extern void ABISELECT(_ZTv0_n24_N12S20731C20_ntD1Ev,_ZTv0_n12_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZThn328_N12S20731C20_ntD1Ev,_ZThn176_N12S20731C20_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C20_ntD0Ev,_ZTv0_n12_N12S20731C20_ntD0Ev)();
extern void ABISELECT(_ZThn328_N12S20731C20_ntD0Ev,_ZThn176_N12S20731C20_ntD0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N12S20731C20_ntD1Ev,_ZTv0_n40_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZThn344_N12S20731C20_ntD1Ev,_ZThn184_N12S20731C20_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N12S20731C20_ntD0Ev,_ZTv0_n40_N12S20731C20_ntD0Ev)();
extern void ABISELECT(_ZThn344_N12S20731C20_ntD0Ev,_ZThn184_N12S20731C20_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20731C20_nt[] = {
  0,
  ABISELECT(344,184),
  ABISELECT(328,176),
  ABISELECT(312,168),
  ABISELECT(272,148),
  ABISELECT(256,140),
  ABISELECT(8,4),
  ABISELECT(328,176),
  ABISELECT(384,204),
  0,
  ABISELECT(296,160),
  0,
  ABISELECT(265,145),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C20_ntD1Ev,_ZTv0_n16_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C20_ntD0Ev,_ZTv0_n16_N12S20731C20_ntD0Ev),
  ABISELECT(88,52),
  ABISELECT(-8,-4),
  ABISELECT(376,200),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(336,180),
  ABISELECT(320,172),
  ABISELECT(304,164),
  ABISELECT(264,144),
  ABISELECT(248,136),
  ABISELECT(288,156),
  ABISELECT(320,172),
  ABISELECT(257,141),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N12S20731C20_ntD1Ev,_ZTv0_n56_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N12S20731C20_ntD0Ev,_ZTv0_n56_N12S20731C20_ntD0Ev),
  ABISELECT(249,137),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  ABISELECT(232,124),
  ABISELECT(216,116),
  ABISELECT(288,152),
  ABISELECT(225,121),
  ABISELECT(256,136),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n112_N12S20731C20_ntD1Ev,_ZTvn20_n56_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n112_N12S20731C20_ntD0Ev,_ZTvn20_n56_N12S20731C20_ntD0Ev),
  ABISELECT(248,132),
  ABISELECT(280,148),
  ABISELECT(217,117),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n112_N12S20731C20_ntD1Ev,_ZTvn24_n56_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n112_N12S20731C20_ntD0Ev,_ZTvn24_n56_N12S20731C20_ntD0Ev),
  ABISELECT(209,113),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  ABISELECT(185,97),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  ABISELECT(288,148),
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  ABISELECT(200,104),
  ABISELECT(248,128),
  ABISELECT(232,120),
  ABISELECT(232,120),
  ABISELECT(216,112),
  ABISELECT(169,89),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n112_N12S20731C20_ntD1Ev,_ZTvn52_n56_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n112_N12S20731C20_ntD0Ev,_ZTvn52_n56_N12S20731C20_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
  ABISELECT(168,88),
  ABISELECT(-216,-116),
  ABISELECT(-216,-116),
  ABISELECT(80,44),
  ABISELECT(128,68),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(96,52),
  ABISELECT(49,29),
  ABISELECT(-216,-116),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn208_n112_N12S20731C20_ntD1Ev,_ZTvn112_n56_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn208_n112_N12S20731C20_ntD0Ev,_ZTvn112_n56_N12S20731C20_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
  ABISELECT(33,21),
  ABISELECT(-232,-124),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  ABISELECT(-256,-140),
  ABISELECT(40,20),
  ABISELECT(72,36),
  ABISELECT(16,8),
  ABISELECT(9,5),
  ABISELECT(-256,-140),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C20_ntD1Ev,_ZTv0_n28_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C20_ntD0Ev,_ZTv0_n28_N12S20731C20_ntD0Ev),
  ABISELECT(-272,-148),
  ABISELECT(24,12),
  ABISELECT(56,28),
  ABISELECT(-7,-3),
  ABISELECT(-272,-148),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C20_ntD1Ev,_ZTv0_n24_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C20_ntD0Ev,_ZTv0_n24_N12S20731C20_ntD0Ev),
  ABISELECT(-15,-7),
  ABISELECT(-280,-152),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  ABISELECT(-31,-15),
  ABISELECT(-296,-160),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  0,
  ABISELECT(-312,-168),
  ABISELECT(16,8),
  ABISELECT(-47,-23),
  ABISELECT(-312,-168),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C20_ntD1Ev,_ZTv0_n20_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C20_ntD0Ev,_ZTv0_n20_N12S20731C20_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-63,-31),
  ABISELECT(-328,-176),
  ABISELECT(-328,-176),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C20_ntD1Ev,_ZTv0_n12_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C20_ntD0Ev,_ZTv0_n12_N12S20731C20_ntD0Ev),
  ABISELECT(-344,-184),
  ABISELECT(40,20),
  ABISELECT(-344,-184),
  ABISELECT(-344,-184),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-79,-39),
  ABISELECT(-344,-184),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C20_ntD1Ev,_ZTv0_n40_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C20_ntD0Ev,_ZTv0_n40_N12S20731C20_ntD0Ev),
  ABISELECT(-87,-43),
  ABISELECT(-352,-188),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  ABISELECT(-103,-51),
  ABISELECT(-368,-196),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  ABISELECT(-119,-59),
  ABISELECT(-384,-204),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
};
extern VTBL_ENTRY _ZTV12S20731C20_nt[];
extern void _ZN12S20731C21_ntD1Ev();
extern void _ZN12S20731C21_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(376,200),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(336,180),
  ABISELECT(320,172),
  ABISELECT(304,164),
  ABISELECT(264,144),
  ABISELECT(248,136),
  ABISELECT(288,156),
  ABISELECT(320,172),
  ABISELECT(257,141),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C21_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C21_ntD0Ev,
};
extern void _ZN11S20731C7_ntD1Ev();
extern void _ZN11S20731C7_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(376,200),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(336,180),
  ABISELECT(320,172),
  ABISELECT(304,164),
  ABISELECT(264,144),
  ABISELECT(248,136),
  ABISELECT(288,156),
  ABISELECT(320,172),
  ABISELECT(257,141),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C7_ntD0Ev,
};
extern void _ZN11S20731C8_ntD1Ev();
extern void _ZN11S20731C8_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(288,156),
  ABISELECT(320,172),
  ABISELECT(257,141),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C8_ntD0Ev,
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt[] = {
  ABISELECT(288,156),
  ABISELECT(320,172),
  ABISELECT(257,141),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt[] = {
  ABISELECT(257,141),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt[] = {
  ABISELECT(249,137),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A3__12S20731C20_nt[] = {
  ABISELECT(249,137),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZThn320_N11S20731C9_ntD1Ev,_ZThn172_N11S20731C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
extern void ABISELECT(_ZThn320_N11S20731C9_ntD0Ev,_ZThn172_N11S20731C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt[] = {
  ABISELECT(-320,-172),
  ABISELECT(-320,-172),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt[] = {
  ABISELECT(-31,-15),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt[] = {
  ABISELECT(249,137),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev)();
extern void ABISELECT(_ZThn320_N11S20731C8_ntD1Ev,_ZThn172_N11S20731C8_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev)();
extern void ABISELECT(_ZThn320_N11S20731C8_ntD0Ev,_ZThn172_N11S20731C8_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C8_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-320,-172),
  ABISELECT(-320,-172),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C8_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-31,-15),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(249,137),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
extern void _ZN12S20731C14_ntD1Ev();
extern void _ZN12S20731C14_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C14_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(232,124),
  ABISELECT(216,116),
  ABISELECT(288,152),
  ABISELECT(225,121),
  ABISELECT(256,136),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C14_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C14_ntD0Ev,
};
extern void _ZN11S20731C8_ntD1Ev();
extern void _ZN11S20731C8_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt[] = {
  ABISELECT(248,132),
  ABISELECT(280,148),
  ABISELECT(217,117),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C8_ntD0Ev,
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A2__12S20731C20_nt[] = {
  ABISELECT(248,132),
  ABISELECT(280,148),
  ABISELECT(217,117),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A2__12S20731C20_nt[] = {
  ABISELECT(217,117),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A2__12S20731C20_nt[] = {
  ABISELECT(209,113),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A4__12S20731C20_nt[] = {
  ABISELECT(209,113),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZThn280_N11S20731C9_ntD1Ev,_ZThn148_N11S20731C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
extern void ABISELECT(_ZThn280_N11S20731C9_ntD0Ev,_ZThn148_N11S20731C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A2__12S20731C20_nt[] = {
  ABISELECT(-280,-148),
  ABISELECT(-280,-148),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A2__12S20731C20_nt[] = {
  ABISELECT(-31,-15),
  ABISELECT(-248,-132),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A2__12S20731C20_nt[] = {
  ABISELECT(209,113),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev)();
extern void ABISELECT(_ZThn280_N11S20731C8_ntD1Ev,_ZThn148_N11S20731C8_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev)();
extern void ABISELECT(_ZThn280_N11S20731C8_ntD0Ev,_ZThn148_N11S20731C8_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt[] = {
  ABISELECT(-280,-148),
  ABISELECT(-280,-148),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt[] = {
  ABISELECT(-31,-15),
  ABISELECT(-248,-132),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt[] = {
  ABISELECT(209,113),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__12S20731C14_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-31,-15),
  ABISELECT(-256,-136),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
extern void ABISELECT(_ZThn8_N12S20731C14_ntD1Ev,_ZThn4_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn8_N12S20731C14_ntD0Ev,_ZThn4_N12S20731C14_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt__12S20731C14_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(248,132),
  ABISELECT(280,148),
  ABISELECT(217,117),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N12S20731C14_ntD1Ev,_ZThn4_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N12S20731C14_ntD0Ev,_ZThn4_N12S20731C14_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn288_N12S20731C14_ntD1Ev,_ZThn152_N12S20731C14_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev)();
extern void ABISELECT(_ZThn288_N12S20731C14_ntD0Ev,_ZThn152_N12S20731C14_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__A1__12S20731C14_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-288,-152),
  ABISELECT(-288,-152),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__12S20731C14_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(209,113),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
extern void ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn216_N12S20731C14_ntD1Ev,_ZThn116_N12S20731C14_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev)();
extern void ABISELECT(_ZThn216_N12S20731C14_ntD0Ev,_ZThn116_N12S20731C14_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__12S20731C14_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-216,-116),
  ABISELECT(40,20),
  ABISELECT(72,36),
  ABISELECT(16,8),
  ABISELECT(9,5),
  ABISELECT(-216,-116),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn232_N12S20731C14_ntD1Ev,_ZThn124_N12S20731C14_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev)();
extern void ABISELECT(_ZThn232_N12S20731C14_ntD0Ev,_ZThn124_N12S20731C14_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-232,-124),
  ABISELECT(24,12),
  ABISELECT(56,28),
  ABISELECT(-7,-3),
  ABISELECT(-232,-124),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-15,-7),
  ABISELECT(-240,-128),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C7_nt12S20731C21_nt__A3__12S20731C20_nt[] = {
  ABISELECT(185,97),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C7_nt12S20731C21_nt__A5__12S20731C20_nt[] = {
  ABISELECT(185,97),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void _ZN12S20731C15_ntD1Ev();
extern void _ZN12S20731C15_ntD0Ev();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(288,148),
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  ABISELECT(200,104),
  ABISELECT(248,128),
  ABISELECT(232,120),
  ABISELECT(232,120),
  ABISELECT(216,112),
  ABISELECT(169,89),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C15_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C15_nt11S20731C7_nt12S20731C21_nt__A4__12S20731C20_nt[] = {
  ABISELECT(169,89),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt11S20731C7_nt12S20731C21_nt__A6__12S20731C20_nt[] = {
  ABISELECT(169,89),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn216_N12S20731C15_ntD1Ev,_ZThn112_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn216_N12S20731C15_ntD0Ev,_ZThn112_N12S20731C15_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  0,
  ABISELECT(-216,-112),
  ABISELECT(16,8),
  ABISELECT(-47,-23),
  ABISELECT(-216,-112),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn232_N12S20731C15_ntD1Ev,_ZThn120_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn232_N12S20731C15_ntD0Ev,_ZThn120_N12S20731C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-63,-31),
  ABISELECT(-232,-120),
  ABISELECT(-232,-120),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn248_N12S20731C15_ntD1Ev,_ZThn128_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn248_N12S20731C15_ntD0Ev,_ZThn128_N12S20731C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-248,-128),
  ABISELECT(40,20),
  ABISELECT(-344,-184),
  ABISELECT(-344,-184),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-79,-39),
  ABISELECT(-248,-128),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A2__12S20731C15_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-31,-15),
  ABISELECT(-200,-104),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-87,-43),
  ABISELECT(-256,-132),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(328,176),
  ABISELECT(384,204),
  0,
  ABISELECT(296,160),
  ABISELECT(96,56),
  ABISELECT(265,145),
  ABISELECT(96,56),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A2__12S20731C15_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-119,-59),
  ABISELECT(-288,-148),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-103,-51),
  ABISELECT(-272,-140),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C7_ntD1Ev,_ZTv0_n12_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn320_N11S20731C7_ntD1Ev,_ZThn172_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C7_ntD0Ev,_ZTv0_n12_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn320_N11S20731C7_ntD0Ev,_ZThn172_N11S20731C7_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-63,-31),
  ABISELECT(-320,-172),
  ABISELECT(-320,-172),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C7_ntD1Ev,_ZTv0_n12_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C7_ntD0Ev,_ZTv0_n12_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-31,-15),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(249,137),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZTv0_n56_N11S20731C7_ntD1Ev,_ZTv0_n28_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn248_N11S20731C7_ntD1Ev,_ZThn136_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N11S20731C7_ntD0Ev,_ZTv0_n28_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn248_N11S20731C7_ntD0Ev,_ZThn136_N11S20731C7_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-248,-136),
  ABISELECT(40,20),
  ABISELECT(72,36),
  ABISELECT(16,8),
  ABISELECT(9,5),
  ABISELECT(-248,-136),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S20731C7_ntD1Ev,_ZTv0_n28_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S20731C7_ntD0Ev,_ZTv0_n28_N11S20731C7_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n48_N11S20731C7_ntD1Ev,_ZTv0_n24_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn264_N11S20731C7_ntD1Ev,_ZThn144_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N11S20731C7_ntD0Ev,_ZTv0_n24_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn264_N11S20731C7_ntD0Ev,_ZThn144_N11S20731C7_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__A1__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-264,-144),
  ABISELECT(24,12),
  ABISELECT(56,28),
  ABISELECT(-7,-3),
  ABISELECT(-264,-144),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N11S20731C7_ntD1Ev,_ZTv0_n24_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N11S20731C7_ntD0Ev,_ZTv0_n24_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__A1__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-15,-7),
  ABISELECT(-272,-148),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZThn32_N11S20731C7_ntD1Ev,_ZThn20_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn32_N11S20731C7_ntD0Ev,_ZThn20_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C14_nt__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(232,124),
  ABISELECT(216,116),
  ABISELECT(288,152),
  ABISELECT(225,121),
  ABISELECT(256,136),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N11S20731C7_ntD1Ev,_ZThn20_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N11S20731C7_ntD0Ev,_ZThn20_N11S20731C7_ntD0Ev),
};
extern void ABISELECT(_ZThn40_N11S20731C7_ntD1Ev,_ZThn24_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn40_N11S20731C7_ntD0Ev,_ZThn24_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt12S20731C14_nt__A1__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(248,132),
  ABISELECT(280,148),
  ABISELECT(217,117),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N11S20731C7_ntD1Ev,_ZThn24_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N11S20731C7_ntD0Ev,_ZThn24_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(209,113),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(185,97),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZThn88_N11S20731C7_ntD1Ev,_ZThn52_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn88_N11S20731C7_ntD0Ev,_ZThn52_N11S20731C7_ntD0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(288,148),
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  ABISELECT(200,104),
  ABISELECT(248,128),
  ABISELECT(232,120),
  ABISELECT(232,120),
  ABISELECT(216,112),
  ABISELECT(169,89),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N11S20731C7_ntD1Ev,_ZThn52_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N11S20731C7_ntD0Ev,_ZThn52_N11S20731C7_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N11S20731C7_ntD1Ev,_ZTv0_n20_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn304_N11S20731C7_ntD1Ev,_ZThn164_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N11S20731C7_ntD0Ev,_ZTv0_n20_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn304_N11S20731C7_ntD0Ev,_ZThn164_N11S20731C7_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  0,
  ABISELECT(-304,-164),
  ABISELECT(16,8),
  ABISELECT(-47,-23),
  ABISELECT(-304,-164),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S20731C7_ntD1Ev,_ZTv0_n20_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S20731C7_ntD0Ev,_ZTv0_n20_N11S20731C7_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n80_N11S20731C7_ntD1Ev,_ZTv0_n40_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn336_N11S20731C7_ntD1Ev,_ZThn180_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N11S20731C7_ntD0Ev,_ZTv0_n40_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn336_N11S20731C7_ntD0Ev,_ZThn180_N11S20731C7_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-336,-180),
  ABISELECT(40,20),
  ABISELECT(-344,-184),
  ABISELECT(-344,-184),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-79,-39),
  ABISELECT(-336,-180),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N11S20731C7_ntD1Ev,_ZTv0_n40_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N11S20731C7_ntD0Ev,_ZTv0_n40_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-87,-43),
  ABISELECT(-344,-184),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N11S20731C7_ntD1Ev,_ZTv0_n16_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZTv0_n32_N11S20731C7_ntD0Ev,_ZTv0_n16_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(328,176),
  ABISELECT(384,204),
  0,
  ABISELECT(296,160),
  ABISELECT(8,4),
  ABISELECT(265,145),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20731C7_ntD1Ev,_ZTv0_n16_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20731C7_ntD0Ev,_ZTv0_n16_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A6__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-119,-59),
  ABISELECT(-376,-200),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A7__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-103,-51),
  ABISELECT(-360,-192),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void _ZN12S20731C15_ntD1Ev();
extern void _ZN12S20731C15_ntD0Ev();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt12S20731C21_nt__A1__12S20731C20_nt[] = {
  ABISELECT(168,88),
  ABISELECT(-216,-116),
  ABISELECT(-216,-116),
  ABISELECT(80,44),
  ABISELECT(128,68),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(96,52),
  ABISELECT(49,29),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C15_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C15_nt12S20731C21_nt__A8__12S20731C20_nt[] = {
  ABISELECT(49,29),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt12S20731C21_nt__A11__12S20731C20_nt[] = {
  ABISELECT(49,29),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn96_N12S20731C15_ntD1Ev,_ZThn52_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn96_N12S20731C15_ntD0Ev,_ZThn52_N12S20731C15_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C15_nt12S20731C21_nt__A1__12S20731C20_nt[] = {
  0,
  ABISELECT(-96,-52),
  ABISELECT(16,8),
  ABISELECT(-47,-23),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn112_N12S20731C15_ntD1Ev,_ZThn60_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn112_N12S20731C15_ntD0Ev,_ZThn60_N12S20731C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__12S20731C15_nt12S20731C21_nt__A1__12S20731C20_nt[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-63,-31),
  ABISELECT(-112,-60),
  ABISELECT(-112,-60),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn128_N12S20731C15_ntD1Ev,_ZThn68_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn128_N12S20731C15_ntD0Ev,_ZThn68_N12S20731C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__12S20731C15_nt12S20731C21_nt__A1__12S20731C20_nt[] = {
  ABISELECT(-128,-68),
  ABISELECT(40,20),
  ABISELECT(-344,-184),
  ABISELECT(-344,-184),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-79,-39),
  ABISELECT(-128,-68),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A2__12S20731C15_nt12S20731C21_nt__A1__12S20731C20_nt[] = {
  ABISELECT(-31,-15),
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt12S20731C21_nt__A1__12S20731C20_nt[] = {
  ABISELECT(-87,-43),
  ABISELECT(-136,-72),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C15_nt12S20731C21_nt__A1__12S20731C20_nt[] = {
  ABISELECT(328,176),
  ABISELECT(384,204),
  0,
  ABISELECT(296,160),
  ABISELECT(216,116),
  ABISELECT(265,145),
  ABISELECT(216,116),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A2__12S20731C15_nt12S20731C21_nt__A1__12S20731C20_nt[] = {
  ABISELECT(-119,-59),
  ABISELECT(-168,-88),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt12S20731C21_nt__A1__12S20731C20_nt[] = {
  ABISELECT(-103,-51),
  ABISELECT(-152,-80),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C21_nt__A12__12S20731C20_nt[] = {
  ABISELECT(33,21),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n56_N12S20731C21_ntD1Ev,_ZTv0_n28_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn248_N12S20731C21_ntD1Ev,_ZThn136_N12S20731C21_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N12S20731C21_ntD0Ev,_ZTv0_n28_N12S20731C21_ntD0Ev)();
extern void ABISELECT(_ZThn248_N12S20731C21_ntD0Ev,_ZThn136_N12S20731C21_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-248,-136),
  ABISELECT(40,20),
  ABISELECT(72,36),
  ABISELECT(16,8),
  ABISELECT(9,5),
  ABISELECT(-248,-136),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C21_ntD1Ev,_ZTv0_n28_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C21_ntD0Ev,_ZTv0_n28_N12S20731C21_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n48_N12S20731C21_ntD1Ev,_ZTv0_n24_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn264_N12S20731C21_ntD1Ev,_ZThn144_N12S20731C21_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N12S20731C21_ntD0Ev,_ZTv0_n24_N12S20731C21_ntD0Ev)();
extern void ABISELECT(_ZThn264_N12S20731C21_ntD0Ev,_ZThn144_N12S20731C21_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-264,-144),
  ABISELECT(24,12),
  ABISELECT(56,28),
  ABISELECT(-7,-3),
  ABISELECT(-264,-144),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C21_ntD1Ev,_ZTv0_n24_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C21_ntD0Ev,_ZTv0_n24_N12S20731C21_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C21_ntD1Ev,_ZTv0_n12_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn320_N12S20731C21_ntD1Ev,_ZThn172_N12S20731C21_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C21_ntD0Ev,_ZTv0_n12_N12S20731C21_ntD0Ev)();
extern void ABISELECT(_ZThn320_N12S20731C21_ntD0Ev,_ZThn172_N12S20731C21_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__12S20731C21_nt__12S20731C20_nt[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-63,-31),
  ABISELECT(-320,-172),
  ABISELECT(-320,-172),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C21_ntD1Ev,_ZTv0_n12_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C21_ntD0Ev,_ZTv0_n12_N12S20731C21_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A1__12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-31,-15),
  ABISELECT(-288,-156),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-15,-7),
  ABISELECT(-272,-148),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt__A1__12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(249,137),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
extern void ABISELECT(_ZThn32_N12S20731C21_ntD1Ev,_ZThn20_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn32_N12S20731C21_ntD0Ev,_ZThn20_N12S20731C21_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C14_nt11S20731C7_nt__12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(232,124),
  ABISELECT(216,116),
  ABISELECT(288,152),
  ABISELECT(225,121),
  ABISELECT(256,136),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N12S20731C21_ntD1Ev,_ZThn20_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N12S20731C21_ntD0Ev,_ZThn20_N12S20731C21_ntD0Ev),
};
extern void ABISELECT(_ZThn40_N12S20731C21_ntD1Ev,_ZThn24_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn40_N12S20731C21_ntD0Ev,_ZThn24_N12S20731C21_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(248,132),
  ABISELECT(280,148),
  ABISELECT(217,117),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N12S20731C21_ntD1Ev,_ZThn24_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N12S20731C21_ntD0Ev,_ZThn24_N12S20731C21_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(209,113),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C7_nt__A3__12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(185,97),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
extern void ABISELECT(_ZThn88_N12S20731C21_ntD1Ev,_ZThn52_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn88_N12S20731C21_ntD0Ev,_ZThn52_N12S20731C21_ntD0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt11S20731C7_nt__12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(288,148),
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  ABISELECT(200,104),
  ABISELECT(248,128),
  ABISELECT(232,120),
  ABISELECT(232,120),
  ABISELECT(216,112),
  ABISELECT(169,89),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N12S20731C21_ntD1Ev,_ZThn52_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N12S20731C21_ntD0Ev,_ZThn52_N12S20731C21_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N12S20731C21_ntD1Ev,_ZTv0_n20_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn304_N12S20731C21_ntD1Ev,_ZThn164_N12S20731C21_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S20731C21_ntD0Ev,_ZTv0_n20_N12S20731C21_ntD0Ev)();
extern void ABISELECT(_ZThn304_N12S20731C21_ntD0Ev,_ZThn164_N12S20731C21_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C21_nt__12S20731C20_nt[] = {
  0,
  ABISELECT(-304,-164),
  ABISELECT(16,8),
  ABISELECT(-47,-23),
  ABISELECT(-304,-164),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C21_ntD1Ev,_ZTv0_n20_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C21_ntD0Ev,_ZTv0_n20_N12S20731C21_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n80_N12S20731C21_ntD1Ev,_ZTv0_n40_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn336_N12S20731C21_ntD1Ev,_ZThn180_N12S20731C21_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N12S20731C21_ntD0Ev,_ZTv0_n40_N12S20731C21_ntD0Ev)();
extern void ABISELECT(_ZThn336_N12S20731C21_ntD0Ev,_ZThn180_N12S20731C21_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-336,-180),
  ABISELECT(40,20),
  ABISELECT(-344,-184),
  ABISELECT(-344,-184),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-79,-39),
  ABISELECT(-336,-180),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C21_ntD1Ev,_ZTv0_n40_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C21_ntD0Ev,_ZTv0_n40_N12S20731C21_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-87,-43),
  ABISELECT(-344,-184),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C21_ntD1Ev,_ZTv0_n16_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZTv0_n32_N12S20731C21_ntD0Ev,_ZTv0_n16_N12S20731C21_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(328,176),
  ABISELECT(384,204),
  0,
  ABISELECT(296,160),
  ABISELECT(8,4),
  ABISELECT(265,145),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C21_ntD1Ev,_ZTv0_n16_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C21_ntD0Ev,_ZTv0_n16_N12S20731C21_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A6__12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-119,-59),
  ABISELECT(-376,-200),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A7__12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(-103,-51),
  ABISELECT(-360,-192),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
extern void ABISELECT(_ZThn208_N12S20731C21_ntD1Ev,_ZThn112_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn208_N12S20731C21_ntD0Ev,_ZThn112_N12S20731C21_ntD0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt__A1__12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(168,88),
  ABISELECT(-216,-116),
  ABISELECT(-216,-116),
  ABISELECT(80,44),
  ABISELECT(128,68),
  ABISELECT(112,60),
  ABISELECT(112,60),
  ABISELECT(96,52),
  ABISELECT(49,29),
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N12S20731C21_ntD1Ev,_ZThn112_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N12S20731C21_ntD0Ev,_ZThn112_N12S20731C21_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A__12S20731C21_nt__12S20731C20_nt[] = {
  ABISELECT(33,21),
  ABISELECT(-224,-120),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
extern void _ZN12S20731C13_ntD1Ev();
extern void _ZN12S20731C13_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__12S20731C20_nt[] = {
  ABISELECT(40,20),
  ABISELECT(72,36),
  ABISELECT(16,8),
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C13_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C13_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C13_nt__12S20731C20_nt[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n48_N12S20731C13_ntD1Ev,_ZTv0_n24_N12S20731C13_ntD1Ev)();
extern void ABISELECT(_ZThn16_N12S20731C13_ntD1Ev,_ZThn8_N12S20731C13_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N12S20731C13_ntD0Ev,_ZTv0_n24_N12S20731C13_ntD0Ev)();
extern void ABISELECT(_ZThn16_N12S20731C13_ntD0Ev,_ZThn8_N12S20731C13_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__12S20731C13_nt__12S20731C20_nt[] = {
  ABISELECT(-16,-8),
  ABISELECT(24,12),
  ABISELECT(56,28),
  ABISELECT(-7,-3),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C13_ntD1Ev,_ZTv0_n24_N12S20731C13_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C13_ntD0Ev,_ZTv0_n24_N12S20731C13_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C13_ntD1Ev,_ZTv0_n12_N12S20731C13_ntD1Ev)();
extern void ABISELECT(_ZThn72_N12S20731C13_ntD1Ev,_ZThn36_N12S20731C13_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C13_ntD0Ev,_ZTv0_n12_N12S20731C13_ntD0Ev)();
extern void ABISELECT(_ZThn72_N12S20731C13_ntD0Ev,_ZThn36_N12S20731C13_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C13_nt__12S20731C20_nt[] = {
  ABISELECT(-72,-36),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C13_ntD1Ev,_ZTv0_n12_N12S20731C13_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C13_ntD0Ev,_ZTv0_n12_N12S20731C13_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A1__12S20731C13_nt__12S20731C20_nt[] = {
  ABISELECT(-31,-15),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C13_nt__12S20731C20_nt[] = {
  ABISELECT(-15,-7),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__12S20731C20_nt[] = {
  ABISELECT(24,12),
  ABISELECT(56,28),
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt__12S20731C20_nt[] = {
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C20_nt[] = {
  ABISELECT(-15,-7),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt__A2__12S20731C20_nt[] = {
  ABISELECT(-15,-7),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZThn56_N11S20731C9_ntD1Ev,_ZThn28_N11S20731C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
extern void ABISELECT(_ZThn56_N11S20731C9_ntD0Ev,_ZThn28_N11S20731C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt__12S20731C20_nt[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt__12S20731C20_nt[] = {
  ABISELECT(-31,-15),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt__12S20731C20_nt[] = {
  ABISELECT(-15,-7),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A1__12S20731C20_nt[] = {
  ABISELECT(-31,-15),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void _ZN12S20731C16_ntD1Ev();
extern void _ZN12S20731C16_ntD0Ev();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C20_nt[] = {
  ABISELECT(16,8),
  ABISELECT(-47,-23),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C16_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C16_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C16_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C16_nt__A7__12S20731C20_nt[] = {
  ABISELECT(-47,-23),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev)();
extern void ABISELECT(_ZThn16_N12S20731C16_ntD1Ev,_ZThn8_N12S20731C16_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev)();
extern void ABISELECT(_ZThn16_N12S20731C16_ntD0Ev,_ZThn8_N12S20731C16_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C16_nt__12S20731C20_nt[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C16_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev)();
extern void _ZN12S20731C17_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev)();
extern void _ZN12S20731C17_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__12S20731C20_nt[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-63,-31),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C17_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C17_ntD1Ev,_ZTv0_n20_N12S20731C17_ntD1Ev)();
extern void ABISELECT(_ZTv0_n40_N12S20731C17_ntD0Ev,_ZTv0_n20_N12S20731C17_ntD0Ev)();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C17_nt__12S20731C20_nt[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-47,-23),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI12S20731C17_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C17_ntD1Ev,_ZTv0_n20_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C17_ntD0Ev,_ZTv0_n20_N12S20731C17_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void _ZN12S20731C18_ntD1Ev();
extern void _ZN12S20731C18_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__12S20731C20_nt[] = {
  ABISELECT(40,20),
  ABISELECT(-344,-184),
  ABISELECT(-344,-184),
  ABISELECT(-32,-16),
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-79,-39),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C18_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C18_ntD0Ev,
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt12S20731C18_nt__A3__12S20731C20_nt[] = {
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-79,-39),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt12S20731C18_nt__A3__12S20731C20_nt[] = {
  ABISELECT(-79,-39),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__12S20731C20_nt[] = {
  ABISELECT(-87,-43),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt12S20731C18_nt__A8__12S20731C20_nt[] = {
  ABISELECT(-87,-43),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt12S20731C18_nt__A3__12S20731C20_nt[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt12S20731C18_nt__A3__12S20731C20_nt[] = {
  ABISELECT(-31,-15),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt12S20731C18_nt__A3__12S20731C20_nt[] = {
  ABISELECT(-87,-43),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A7__12S20731C20_nt[] = {
  ABISELECT(-103,-51),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C18_nt__A10__12S20731C20_nt[] = {
  ABISELECT(-103,-51),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C18_ntD1Ev,_ZTv0_n20_N12S20731C18_ntD1Ev)();
extern void ABISELECT(_ZTv0_n40_N12S20731C18_ntD0Ev,_ZTv0_n20_N12S20731C18_ntD0Ev)();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C18_nt__12S20731C20_nt[] = {
  0,
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-47,-23),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C18_ntD1Ev,_ZTv0_n20_N12S20731C18_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C18_ntD0Ev,_ZTv0_n20_N12S20731C18_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N12S20731C18_ntD1Ev,_ZTv0_n12_N12S20731C18_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N12S20731C18_ntD0Ev,_ZTv0_n12_N12S20731C18_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C18_nt__12S20731C20_nt[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C18_ntD1Ev,_ZTv0_n12_N12S20731C18_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C18_ntD0Ev,_ZTv0_n12_N12S20731C18_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A1__12S20731C18_nt__12S20731C20_nt[] = {
  ABISELECT(-31,-15),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C18_nt__12S20731C20_nt[] = {
  ABISELECT(-87,-43),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C18_ntD1Ev,_ZTv0_n16_N12S20731C18_ntD1Ev)();
extern void ABISELECT(_ZTv0_n32_N12S20731C18_ntD0Ev,_ZTv0_n16_N12S20731C18_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C18_nt__12S20731C20_nt[] = {
  ABISELECT(328,176),
  ABISELECT(384,204),
  0,
  ABISELECT(296,160),
  ABISELECT(344,184),
  ABISELECT(265,145),
  ABISELECT(344,184),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C18_ntD1Ev,_ZTv0_n16_N12S20731C18_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C18_ntD0Ev,_ZTv0_n16_N12S20731C18_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A1__12S20731C18_nt__12S20731C20_nt[] = {
  ABISELECT(-119,-59),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A__12S20731C18_nt__12S20731C20_nt[] = {
  ABISELECT(-103,-51),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C19_ntD1Ev,_ZTv0_n16_N12S20731C19_ntD1Ev)();
extern void _ZN12S20731C19_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C19_ntD0Ev,_ZTv0_n16_N12S20731C19_ntD0Ev)();
extern void _ZN12S20731C19_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C20_nt[] = {
  ABISELECT(328,176),
  ABISELECT(384,204),
  0,
  ABISELECT(296,160),
  0,
  ABISELECT(265,145),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C19_ntD1Ev,_ZTv0_n16_N12S20731C19_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C19_ntD0Ev,_ZTv0_n16_N12S20731C19_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__12S20731C19_nt__12S20731C20_nt[] = {
  ABISELECT(-31,-15),
  ABISELECT(-296,-160),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__12S20731C19_nt__12S20731C20_nt[] = {
  ABISELECT(-119,-59),
  ABISELECT(-384,-204),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C19_ntD1Ev,_ZTv0_n12_N12S20731C19_ntD1Ev)();
extern void ABISELECT(_ZThn328_N12S20731C19_ntD1Ev,_ZThn176_N12S20731C19_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C19_ntD0Ev,_ZTv0_n12_N12S20731C19_ntD0Ev)();
extern void ABISELECT(_ZThn328_N12S20731C19_ntD0Ev,_ZThn176_N12S20731C19_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C19_nt__12S20731C20_nt[] = {
  ABISELECT(-328,-176),
  ABISELECT(-328,-176),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C19_ntD1Ev,_ZTv0_n12_N12S20731C19_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C19_ntD0Ev,_ZTv0_n12_N12S20731C19_ntD0Ev),
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt__A4__12S20731C20_nt[] = {
  ABISELECT(265,145),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A6__12S20731C20_nt[] = {
  ABISELECT(-119,-59),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt__A9__12S20731C20_nt[] = {
  ABISELECT(-119,-59),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
static  VTT_ENTRY vtt_S20731C20_nt[] = {
  {&(_ZTV12S20731C20_nt[15]),  15,151},
  {&(_ZTV12S20731C20_nt[32]),  32,151},
  {&(_ZTV12S20731C20_nt[97]),  97,151},
  {&(_ZTV12S20731C20_nt[105]),  105,151},
  {&(_ZTV12S20731C20_nt[128]),  128,151},
  {&(_ZTV12S20731C20_nt[113]),  113,151},
  {&(_ZTV12S20731C20_nt[110]),  110,151},
  {&(_ZTV12S20731C20_nt[37]),  37,151},
  {&(_ZTV12S20731C20_nt[44]),  44,151},
  {&(_ZTV12S20731C20_nt[51]),  51,151},
  {&(_ZTV12S20731C20_nt[56]),  56,151},
  {&(_ZTV12S20731C20_nt[59]),  59,151},
  {&(_ZTV12S20731C20_nt[70]),  70,151},
  {&(_ZTV12S20731C20_nt[119]),  119,151},
  {&(_ZTV12S20731C20_nt[128]),  128,151},
  {&(_ZTV12S20731C20_nt[140]),  140,151},
  {&(_ZTV12S20731C20_nt[145]),  145,151},
  {&(_ZTV12S20731C20_nt[15]),  15,151},
  {&(_ZTV12S20731C20_nt[15]),  15,151},
  {&(_ZTV12S20731C20_nt[151]),  151,151},
  {&(_ZTV12S20731C20_nt[148]),  148,151},
  {&(_ZTV12S20731C20_nt[84]),  84,151},
  {&(_ZTV12S20731C20_nt[90]),  90,151},
  {&(_tg__ZTV12S20731C21_nt__12S20731C20_nt[13]),  13,15},
  {&(_tg__ZTV11S20731C7_nt12S20731C21_nt__12S20731C20_nt[13]),  13,15},
  {&(_tg__ZTV11S20731C8_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[5]),  5,7},
  {&(_tg__ZTV11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A3__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C8_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C8_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C14_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[7]),  7,9},
  {&(_tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt[5]),  5,7},
  {&(_tg__ZTV11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A2__12S20731C20_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A2__12S20731C20_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A2__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A4__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A2__12S20731C20_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A2__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A2__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt__12S20731C14_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C8_nt__12S20731C14_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[5]),  5,7},
  {&(_tg__ZTV11S20731C4_nt__A1__12S20731C14_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__12S20731C14_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__12S20731C14_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[7]),  7,9},
  {&(_tg__ZTV11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C7_nt12S20731C21_nt__A3__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C7_nt12S20731C21_nt__A5__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[11]),  11,14},
  {&(_tg__ZTV12S20731C12_nt12S20731C15_nt11S20731C7_nt12S20731C21_nt__A4__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt11S20731C7_nt12S20731C21_nt__A6__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[10]),  10,12},
  {&(_tg__ZTV12S20731C10_nt__A2__12S20731C15_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A2__12S20731C15_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C17_nt__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C10_nt__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[7]),  7,9},
  {&(_tg__ZTV11S20731C9_nt__A1__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__A1__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C14_nt__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[7]),  7,9},
  {&(_tg__ZTV11S20731C8_nt12S20731C14_nt__A1__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__A__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[11]),  11,14},
  {&(_tg__ZTV12S20731C16_nt__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[10]),  10,12},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A6__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A7__11S20731C7_nt12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt12S20731C21_nt__A1__12S20731C20_nt[11]),  11,14},
  {&(_tg__ZTV12S20731C12_nt12S20731C15_nt12S20731C21_nt__A8__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt12S20731C21_nt__A11__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__12S20731C15_nt12S20731C21_nt__A1__12S20731C20_nt[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt12S20731C21_nt__A1__12S20731C20_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt12S20731C21_nt__A1__12S20731C20_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__12S20731C15_nt12S20731C21_nt__A1__12S20731C20_nt[10]),  10,12},
  {&(_tg__ZTV12S20731C10_nt__A2__12S20731C15_nt12S20731C21_nt__A1__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt12S20731C21_nt__A1__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt12S20731C21_nt__A1__12S20731C20_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt12S20731C21_nt__A1__12S20731C20_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A2__12S20731C15_nt12S20731C21_nt__A1__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt12S20731C21_nt__A1__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C21_nt__A12__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__12S20731C21_nt__12S20731C20_nt[7]),  7,9},
  {&(_tg__ZTV11S20731C9_nt__12S20731C21_nt__12S20731C20_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C17_nt__12S20731C21_nt__12S20731C20_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C10_nt__A1__12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt__A1__12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C14_nt11S20731C7_nt__12S20731C21_nt__12S20731C20_nt[7]),  7,9},
  {&(_tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__12S20731C21_nt__12S20731C20_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C7_nt__A3__12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt11S20731C7_nt__12S20731C21_nt__12S20731C20_nt[11]),  11,14},
  {&(_tg__ZTV12S20731C16_nt__12S20731C21_nt__12S20731C20_nt[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__12S20731C21_nt__12S20731C20_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__12S20731C21_nt__12S20731C20_nt[10]),  10,12},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C21_nt__12S20731C20_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__12S20731C21_nt__12S20731C20_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A6__12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A7__12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt__A1__12S20731C21_nt__12S20731C20_nt[11]),  11,14},
  {&(_tg__ZTV12S20731C10_nt__A__12S20731C21_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__12S20731C20_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C10_nt12S20731C13_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C9_nt__12S20731C13_nt__12S20731C20_nt[6]),  6,8},
  {&(_tg__ZTV11S20731C4_nt__12S20731C13_nt__12S20731C20_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__A1__12S20731C13_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C13_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C9_nt__12S20731C20_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt__12S20731C20_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt__A2__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt__12S20731C20_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt__A1__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__12S20731C20_nt[4]),  4,7},
  {&(_tg__ZTV12S20731C10_nt12S20731C16_nt__A7__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__12S20731C16_nt__12S20731C20_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C17_nt__12S20731C20_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C16_nt__12S20731C17_nt__12S20731C20_nt[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__12S20731C20_nt[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__12S20731C20_nt[9]),  9,11},
  {&(_tg__ZTV11S20731C9_nt12S20731C18_nt__A3__12S20731C20_nt[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt12S20731C18_nt__A3__12S20731C20_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt12S20731C18_nt__A8__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt12S20731C18_nt__A3__12S20731C20_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt12S20731C18_nt__A3__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt12S20731C18_nt__A3__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A7__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C18_nt__A10__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__12S20731C18_nt__12S20731C20_nt[6]),  6,9},
  {&(_tg__ZTV11S20731C4_nt__12S20731C18_nt__12S20731C20_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__A1__12S20731C18_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C18_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C18_nt__12S20731C20_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__12S20731C18_nt__12S20731C20_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A1__12S20731C18_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__A__12S20731C18_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C20_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C10_nt__12S20731C19_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C20_nt[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__12S20731C19_nt__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__12S20731C19_nt__12S20731C20_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C11_nt__A4__12S20731C20_nt[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt__A6__12S20731C20_nt[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt__A9__12S20731C20_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI12S20731C20_nt[];
VTBL_ENTRY *P__ZTI12S20731C20_nt = _ZTI12S20731C20_nt; 
extern  VTBL_ENTRY _ZTV12S20731C20_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C20_nt[];
static VTBL_ENTRY alt_thunk_names97[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C19_ntD0Ev,_ZTv0_n12_N12S20731C19_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N12S20731C19_ntD0Ev,_ZThn176_N12S20731C19_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C19_ntD1Ev,_ZTv0_n12_N12S20731C19_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N12S20731C19_ntD1Ev,_ZThn176_N12S20731C19_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C19_ntD0Ev,_ZTv0_n16_N12S20731C19_ntD0Ev), // 
  (VTBL_ENTRY)_ZN12S20731C19_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C19_ntD1Ev,_ZTv0_n16_N12S20731C19_ntD1Ev), // 
  (VTBL_ENTRY)_ZN12S20731C19_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev), // 
  (VTBL_ENTRY)_ZN12S20731C17_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev), // 
  (VTBL_ENTRY)_ZN12S20731C17_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C16_ntD0Ev,_ZThn8_N12S20731C16_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C16_ntD1Ev,_ZThn8_N12S20731C16_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C13_ntD0Ev,_ZTv0_n12_N12S20731C13_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N12S20731C13_ntD0Ev,_ZThn36_N12S20731C13_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C13_ntD1Ev,_ZTv0_n12_N12S20731C13_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N12S20731C13_ntD1Ev,_ZThn36_N12S20731C13_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C13_ntD0Ev,_ZTv0_n24_N12S20731C13_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C13_ntD0Ev,_ZThn8_N12S20731C13_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C13_ntD1Ev,_ZTv0_n24_N12S20731C13_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C13_ntD1Ev,_ZThn8_N12S20731C13_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S20731C21_ntD0Ev,_ZTv0_n40_N12S20731C21_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N12S20731C21_ntD0Ev,_ZThn180_N12S20731C21_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S20731C21_ntD1Ev,_ZTv0_n40_N12S20731C21_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N12S20731C21_ntD1Ev,_ZThn180_N12S20731C21_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C21_ntD0Ev,_ZTv0_n20_N12S20731C21_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N12S20731C21_ntD0Ev,_ZThn164_N12S20731C21_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C21_ntD1Ev,_ZTv0_n20_N12S20731C21_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N12S20731C21_ntD1Ev,_ZThn164_N12S20731C21_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C21_ntD0Ev,_ZTv0_n12_N12S20731C21_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N12S20731C21_ntD0Ev,_ZThn172_N12S20731C21_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C21_ntD1Ev,_ZTv0_n12_N12S20731C21_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N12S20731C21_ntD1Ev,_ZThn172_N12S20731C21_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C21_ntD0Ev,_ZTv0_n24_N12S20731C21_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N12S20731C21_ntD0Ev,_ZThn144_N12S20731C21_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C21_ntD1Ev,_ZTv0_n24_N12S20731C21_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N12S20731C21_ntD1Ev,_ZThn144_N12S20731C21_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N12S20731C21_ntD0Ev,_ZTv0_n28_N12S20731C21_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N12S20731C21_ntD0Ev,_ZThn136_N12S20731C21_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N12S20731C21_ntD1Ev,_ZTv0_n28_N12S20731C21_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N12S20731C21_ntD1Ev,_ZThn136_N12S20731C21_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N11S20731C7_ntD0Ev,_ZTv0_n40_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N11S20731C7_ntD0Ev,_ZThn180_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N11S20731C7_ntD1Ev,_ZTv0_n40_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N11S20731C7_ntD1Ev,_ZThn180_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S20731C7_ntD0Ev,_ZTv0_n20_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N11S20731C7_ntD0Ev,_ZThn164_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S20731C7_ntD1Ev,_ZTv0_n20_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn304_N11S20731C7_ntD1Ev,_ZThn164_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N11S20731C7_ntD0Ev,_ZTv0_n24_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N11S20731C7_ntD0Ev,_ZThn144_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N11S20731C7_ntD1Ev,_ZTv0_n24_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N11S20731C7_ntD1Ev,_ZThn144_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N11S20731C7_ntD0Ev,_ZTv0_n28_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N11S20731C7_ntD0Ev,_ZThn136_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N11S20731C7_ntD1Ev,_ZTv0_n28_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N11S20731C7_ntD1Ev,_ZThn136_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C7_ntD0Ev,_ZTv0_n12_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N11S20731C7_ntD0Ev,_ZThn172_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C7_ntD1Ev,_ZTv0_n12_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N11S20731C7_ntD1Ev,_ZThn172_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N12S20731C15_ntD0Ev,_ZThn68_N12S20731C15_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N12S20731C15_ntD0Ev,_ZThn128_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N12S20731C15_ntD1Ev,_ZThn68_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N12S20731C15_ntD1Ev,_ZThn128_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N12S20731C15_ntD0Ev,_ZThn60_N12S20731C15_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N12S20731C15_ntD0Ev,_ZThn120_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N12S20731C15_ntD1Ev,_ZThn60_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn232_N12S20731C15_ntD1Ev,_ZThn120_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N12S20731C15_ntD0Ev,_ZThn52_N12S20731C15_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn216_N12S20731C15_ntD0Ev,_ZThn112_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N12S20731C15_ntD1Ev,_ZThn52_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn216_N12S20731C15_ntD1Ev,_ZThn112_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N12S20731C14_ntD0Ev,_ZThn124_N12S20731C14_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N12S20731C14_ntD1Ev,_ZThn124_N12S20731C14_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N12S20731C14_ntD0Ev,_ZThn116_N12S20731C14_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N12S20731C14_ntD1Ev,_ZThn116_N12S20731C14_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N12S20731C14_ntD0Ev,_ZThn152_N12S20731C14_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N12S20731C14_ntD1Ev,_ZThn152_N12S20731C14_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N11S20731C8_ntD0Ev,_ZThn148_N11S20731C8_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N11S20731C8_ntD0Ev,_ZThn172_N11S20731C8_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N11S20731C8_ntD1Ev,_ZThn148_N11S20731C8_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N11S20731C8_ntD1Ev,_ZThn172_N11S20731C8_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N11S20731C9_ntD0Ev,_ZThn28_N11S20731C9_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N11S20731C9_ntD0Ev,_ZThn148_N11S20731C9_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N11S20731C9_ntD0Ev,_ZThn172_N11S20731C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N11S20731C9_ntD1Ev,_ZThn28_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N11S20731C9_ntD1Ev,_ZThn148_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn320_N11S20731C9_ntD1Ev,_ZThn172_N11S20731C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S20731C20_ntD0Ev,_ZTv0_n40_N12S20731C20_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N12S20731C20_ntD0Ev,_ZThn184_N12S20731C20_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S20731C20_ntD1Ev,_ZTv0_n40_N12S20731C20_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N12S20731C20_ntD1Ev,_ZThn184_N12S20731C20_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C20_ntD0Ev,_ZTv0_n12_N12S20731C20_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N12S20731C20_ntD0Ev,_ZThn176_N12S20731C20_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C20_ntD1Ev,_ZTv0_n12_N12S20731C20_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N12S20731C20_ntD1Ev,_ZThn176_N12S20731C20_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C20_ntD0Ev,_ZTv0_n20_N12S20731C20_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N12S20731C20_ntD0Ev,_ZThn168_N12S20731C20_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C20_ntD1Ev,_ZTv0_n20_N12S20731C20_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N12S20731C20_ntD1Ev,_ZThn168_N12S20731C20_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C20_ntD0Ev,_ZTv0_n24_N12S20731C20_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N12S20731C20_ntD0Ev,_ZThn148_N12S20731C20_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C20_ntD1Ev,_ZTv0_n24_N12S20731C20_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N12S20731C20_ntD1Ev,_ZThn148_N12S20731C20_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N12S20731C20_ntD0Ev,_ZTv0_n28_N12S20731C20_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N12S20731C20_ntD0Ev,_ZThn140_N12S20731C20_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N12S20731C20_ntD1Ev,_ZTv0_n28_N12S20731C20_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N12S20731C20_ntD1Ev,_ZThn140_N12S20731C20_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N12S20731C20_ntD0Ev,_ZTv0_n56_N12S20731C20_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N12S20731C20_ntD0Ev,_ZThn4_N12S20731C20_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N12S20731C20_ntD1Ev,_ZTv0_n56_N12S20731C20_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N12S20731C20_ntD1Ev,_ZThn4_N12S20731C20_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C20_ntD0Ev,_ZTv0_n16_N12S20731C20_ntD0Ev), // 
  (VTBL_ENTRY)_ZN12S20731C20_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C20_ntD1Ev,_ZTv0_n16_N12S20731C20_ntD1Ev), // 
  (VTBL_ENTRY)_ZN12S20731C20_ntD1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20731C20_nt = {  "S20731C20_nt", // class name
  bases_S20731C20_nt, 52,
  &(vtc_S20731C20_nt[0]), // expected_vtbl_contents
  &(vtt_S20731C20_nt[0]), // expected_vtt_contents
  ABISELECT(400,212), // object size
  NSPAIRA(_ZTI12S20731C20_nt),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV12S20731C20_nt),151, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT12S20731C20_nt),170, //virtual table table var
  45, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names97,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20731C2  : virtual S2264C38 , virtual S20731C4_nt , virtual S20731C6_nt , S20731C20_nt , S20731C17_nt {
  ~S20731C2(); // tgen
  S20731C2(); // tgen
};
//SIG(-1 S20731C2) C1{ VBC2{ m} VBC3{ BC4{ m} vd} VBC5{ BC6{ BC7{ VBC3 BC8{ VBC3 VBC9{ VBC4 FC4} BC10{ VBC4 vd} BC11{ VBC4 BC9 Fc:3}} vd FL} VBC12{ BC9 VBC8 BC4} BC13{ BC3 VBC9 BC7 VBC12 vd} BC11 BC14{ BC11 VBC15{ VBC3 BC4 BC9 vd v1} VBC16{ VBC4 VBC15 Fc} VBC17{ VBC15 BC8 VBC18{ VBC9 BC4 VBC10 VBC11 VBC3 vd} BC11 FC4} vd v2} vd FC17} vd FC16} BC19{ BC2 VBC20{ VBC12 BC6 BC14 BC9 vd FL}} BC16}


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

static void Test_S20731C2()
{
  extern Class_Descriptor cd_S20731C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(83,88)];
    init_test(&cd_S20731C2, buf);
    S20731C2 *dp, &lv = *(dp=new (buf) S20731C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(656,348), "sizeof(S20731C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20731C2)");
    /*is_ambiguous_... S20731C2::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), ABISELECT(17,9), "S20731C2");
    /*is_ambiguous_... S20731C2::S20731C4_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C4_nt*), ABISELECT(336,176), "S20731C2");
    /*is_ambiguous_... S20731C2::S20731C4_nt */ AMB_check_base_class_offset(lv, (S20731C4_nt*), ABISELECT(336,176), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C4_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(336,176), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C4_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(336,176), "S20731C2");
    /*is_ambiguous_... S20731C2::S20731C9_nt */ AMB_check_base_class_offset(lv, (S20731C4_nt*)(S20731C9_nt*), ABISELECT(336,176), "S20731C2");
    check_base_class_offset(lv, (S20731C4_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(336,176), "S20731C2");
    check_base_class_offset(lv, (S20731C4_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(336,176), "S20731C2");
    check_base_class_offset(lv, (S20731C4_nt*)(S20731C16_nt*), ABISELECT(336,176), "S20731C2");
    check_base_class_offset(lv, (S20731C4_nt*)(S20731C9_nt*)(S20731C18_nt*), ABISELECT(336,176), "S20731C2");
    check_base_class_offset(lv, (S20731C4_nt*)(S20731C19_nt*), ABISELECT(336,176), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C4_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(336,176), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C4_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(336,176), "S20731C2");
    check_base_class_offset(lv, (S20731C4_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(336,176), "S20731C2");
    check_base_class_offset(lv, (S20731C4_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(336,176), "S20731C2");
    /*is_ambiguous_... S20731C2::S20731C10_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C11_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C13_nt::S20731C10_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C13_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C2::S20731C9_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C11_nt*)(S20731C9_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C2::S20731C9_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C9_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C2::S20731C9_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*), ABISELECT(273,145), "S20731C2");
    check_base_class_offset(lv, (S2264C28*)(S20731C11_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(273,145), "S20731C2");
    check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(273,145), "S20731C2");
    check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C15_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C15_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(273,145), "S20731C2");
    check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C16_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C2::S20731C17_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C17_nt*), ABISELECT(273,145), "S20731C2");
    check_base_class_offset(lv, (S2264C28*)(S20731C11_nt*)(S20731C9_nt*)(S20731C18_nt*), ABISELECT(273,145), "S20731C2");
    check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C9_nt*)(S20731C18_nt*), ABISELECT(273,145), "S20731C2");
    check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*)(S20731C18_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C2::S20731C11_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C11_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C2::S20731C12_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C2::S20731C12_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C18_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C18_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C18_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C18_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C11_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(273,145), "S20731C2");
    check_base_class_offset(lv, (S2264C28*)(S20731C11_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(273,145), "S20731C2");
    check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(273,145), "S20731C2");
    check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C15_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C15_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C21_nt::S20731C15_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C15_nt*)(S20731C21_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C21_nt::S20731C15_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C15_nt*)(S20731C21_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C21_nt::S20731C10_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C21_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C2::S20731C17_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C17_nt*), ABISELECT(273,145), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(264,140), "S20731C2");
    /*is_ambiguous_... S20731C2::S20731C9_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C9_nt*), ABISELECT(264,140), "S20731C2");
    /*is_ambiguous_... S20731C14_nt::S20731C10_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(264,140), "S20731C2");
    /*is_ambiguous_... S20731C9_nt::S20731C10_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(264,140), "S20731C2");
    /*is_ambiguous_... S20731C9_nt::S20731C10_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C9_nt*)(S20731C18_nt*), ABISELECT(264,140), "S20731C2");
    /*is_ambiguous_... S20731C19_nt::S20731C10_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C19_nt*), ABISELECT(264,140), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(264,140), "S20731C2");
    /*is_ambiguous_... S20731C14_nt::S20731C10_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(264,140), "S20731C2");
    /*is_ambiguous_... S20731C9_nt::S20731C10_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(264,140), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C11_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(24,12), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(32,16), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(32,16), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(24,12), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C8_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(24,12), "S20731C2");
    /*is_ambiguous_... S20731C13_nt::S20731C10_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C13_nt*), ABISELECT(280,148), "S20731C2");
    /*is_ambiguous_... S20731C2::S20731C9_nt */ AMB_check_base_class_offset(lv, (S20731C11_nt*)(S20731C9_nt*), ABISELECT(296,156), "S20731C2");
    /*is_ambiguous_... S20731C2::S20731C9_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*), ABISELECT(304,160), "S20731C2");
    /*is_ambiguous_... S20731C2::S20731C9_nt */ AMB_check_base_class_offset(lv, (S20731C12_nt*)(S20731C9_nt*), ABISELECT(304,160), "S20731C2");
    check_base_class_offset(lv, (S20731C9_nt*)(S20731C13_nt*), ABISELECT(296,156), "S20731C2");
    /*is_ambiguous_... S20731C13_nt::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C13_nt*), ABISELECT(280,148), "S20731C2");
    check_base_class_offset(lv, (S20731C13_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(280,148), "S20731C2");
    check_base_class_offset(lv, (S20731C13_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(280,148), "S20731C2");
    check_base_class_offset(lv, (S20731C13_nt*)(S20731C21_nt*), ABISELECT(280,148), "S20731C2");
    check_base_class_offset(lv, (S20731C13_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(280,148), "S20731C2");
    check_base_class_offset(lv, (S20731C13_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(280,148), "S20731C2");
    /*is_ambiguous_... S20731C14_nt::S20731C4_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C4_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(56,32), "S20731C2");
    /*is_ambiguous_... S20731C14_nt::S20731C4_nt */ AMB_check_base_class_offset(lv, (S20731C4_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(56,32), "S20731C2");
    check_base_class_offset(lv, (S20731C11_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(64,36), "S20731C2");
    check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(72,40), "S20731C2");
    check_base_class_offset(lv, (S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(72,40), "S20731C2");
    check_base_class_offset(lv, (S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(64,36), "S20731C2");
    check_base_class_offset(lv, (S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(64,36), "S20731C2");
    check_base_class_offset(lv, (S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(56,32), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(96,56), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S20731C12_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(96,56), "S20731C2");
    /*is_ambiguous_... S20731C15_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(112,64), "S20731C2");
    /*is_ambiguous_... S20731C15_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S20731C12_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(112,64), "S20731C2");
    /*is_ambiguous_... S20731C16_nt::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C16_nt*), ABISELECT(320,168), "S20731C2");
    check_base_class_offset(lv, (S20731C10_nt*)(S20731C16_nt*), ABISELECT(320,168), "S20731C2");
    check_base_class_offset(lv, (S20731C16_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(320,168), "S20731C2");
    /*is_ambiguous_... S20731C2::S20731C17_nt */ AMB_check_base_class_offset(lv, (S20731C16_nt*)(S20731C17_nt*), ABISELECT(320,168), "S20731C2");
    check_base_class_offset(lv, (S20731C16_nt*)(S20731C18_nt*), ABISELECT(320,168), "S20731C2");
    check_base_class_offset(lv, (S20731C16_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(320,168), "S20731C2");
    /*is_ambiguous_... S20731C21_nt::S20731C15_nt */ AMB_check_base_class_offset(lv, (S20731C16_nt*)(S20731C15_nt*)(S20731C21_nt*), ABISELECT(320,168), "S20731C2");
    /*is_ambiguous_... S20731C2::S20731C17_nt */ AMB_check_base_class_offset(lv, (S20731C16_nt*)(S20731C17_nt*), ABISELECT(320,168), "S20731C2");
    check_base_class_offset(lv, (S20731C17_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(336,176), "S20731C2");
    check_base_class_offset(lv, (S20731C17_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(336,176), "S20731C2");
    /*is_ambiguous_... S20731C21_nt::S20731C15_nt */ AMB_check_base_class_offset(lv, (S20731C17_nt*)(S20731C15_nt*)(S20731C21_nt*), ABISELECT(336,176), "S20731C2");
    check_base_class_offset(lv, (S20731C11_nt*)(S20731C9_nt*)(S20731C18_nt*), ABISELECT(352,184), "S20731C2");
    check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*)(S20731C18_nt*), ABISELECT(360,188), "S20731C2");
    check_base_class_offset(lv, (S20731C12_nt*)(S20731C9_nt*)(S20731C18_nt*), ABISELECT(360,188), "S20731C2");
    check_base_class_offset(lv, (S20731C9_nt*)(S20731C18_nt*), ABISELECT(352,184), "S20731C2");
    /*is_ambiguous_... S20731C19_nt::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C19_nt*), 0, "S20731C2");
    check_base_class_offset(lv, (S20731C11_nt*)(S20731C19_nt*), 0, "S20731C2");
    /*is_ambiguous_... S20731C2::S20731C12_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*), ABISELECT(392,204), "S20731C2");
    check_base_class_offset(lv, (S20731C12_nt*)(S20731C19_nt*), ABISELECT(392,204), "S20731C2");
    check_base_class_offset(lv, (S20731C19_nt*)(S20731C18_nt*), 0, "S20731C2");
    /*is_ambiguous_... S20731C18_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C18_nt*), ABISELECT(376,196), "S20731C2");
    /*is_ambiguous_... S20731C18_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S20731C12_nt*)(S20731C18_nt*), ABISELECT(376,196), "S20731C2");
    check_base_class_offset(lv, (S20731C18_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(352,184), "S20731C2");
    check_base_class_offset(lv, (S20731C18_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(352,184), "S20731C2");
    /*is_ambiguous_... S20731C21_nt::S20731C15_nt */ AMB_check_base_class_offset(lv, (S20731C18_nt*)(S20731C15_nt*)(S20731C21_nt*), ABISELECT(352,184), "S20731C2");
    check_base_class_offset(lv, (S20731C15_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(112,64), "S20731C2");
    check_base_class_offset(lv, (S20731C7_nt*)(S20731C6_nt*), ABISELECT(24,12), "S20731C2");
    check_base_class_offset(lv, (S20731C6_nt*), ABISELECT(24,12), "S20731C2");
    check_base_class_offset(lv, (S2264C38*)(S20731C20_nt*), 0, "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C11_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(408,212), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(416,216), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(416,216), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(408,212), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C8_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(408,212), "S20731C2");
    /*is_ambiguous_... S20731C14_nt::S20731C4_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C4_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(440,232), "S20731C2");
    /*is_ambiguous_... S20731C14_nt::S20731C4_nt */ AMB_check_base_class_offset(lv, (S20731C4_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(440,232), "S20731C2");
    check_base_class_offset(lv, (S20731C11_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(448,236), "S20731C2");
    check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(456,240), "S20731C2");
    check_base_class_offset(lv, (S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(456,240), "S20731C2");
    check_base_class_offset(lv, (S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(448,236), "S20731C2");
    check_base_class_offset(lv, (S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(448,236), "S20731C2");
    check_base_class_offset(lv, (S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(440,232), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(480,256), "S20731C2");
    /*is_ambiguous_... S20731C7_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S20731C12_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(480,256), "S20731C2");
    /*is_ambiguous_... S20731C15_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(496,264), "S20731C2");
    /*is_ambiguous_... S20731C15_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S20731C12_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(496,264), "S20731C2");
    check_base_class_offset(lv, (S20731C15_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(496,264), "S20731C2");
    check_base_class_offset(lv, (S20731C7_nt*)(S20731C21_nt*), ABISELECT(408,212), "S20731C2");
    /*is_ambiguous_... S20731C21_nt::S20731C15_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C15_nt*)(S20731C21_nt*), ABISELECT(616,324), "S20731C2");
    /*is_ambiguous_... S20731C21_nt::S20731C15_nt */ AMB_check_base_class_offset(lv, (S20731C12_nt*)(S20731C15_nt*)(S20731C21_nt*), ABISELECT(616,324), "S20731C2");
    /*is_ambiguous_... S20731C21_nt::S20731C15_nt */ AMB_check_base_class_offset(lv, (S20731C15_nt*)(S20731C21_nt*), ABISELECT(616,324), "S20731C2");
    /*is_ambiguous_... S20731C21_nt::S20731C10_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C21_nt*), ABISELECT(632,332), "S20731C2");
    check_base_class_offset(lv, (S20731C21_nt*)(S20731C20_nt*), ABISELECT(408,212), "S20731C2");
    check_base_class_offset(lv, (S20731C20_nt*), 0, "S20731C2");
    /*is_ambiguous_... S20731C2::S20731C17_nt */ AMB_check_base_class_offset(lv, (S20731C17_nt*), ABISELECT(8,4), "S20731C2");
    test_class_info(&lv, &cd_S20731C2);
    dp->~S20731C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20731C2(Test_S20731C2, "S20731C2", ABISELECT(656,348));

#else // __cplusplus

extern void _ZN8S20731C2C1Ev();
extern void _ZN8S20731C2D1Ev();
Name_Map name_map_S20731C2[] = {
  NSPAIR(_ZN8S20731C2C1Ev),
  NSPAIR(_ZN8S20731C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C4_nt;
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S20731C8_nt;
extern VTBL_ENTRY _ZTI11S20731C8_nt[];
extern  VTBL_ENTRY _ZTV11S20731C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C8_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C13_nt;
extern VTBL_ENTRY _ZTI12S20731C13_nt[];
extern  VTBL_ENTRY _ZTV12S20731C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C13_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C4_nt;
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S20731C8_nt;
extern VTBL_ENTRY _ZTI11S20731C8_nt[];
extern  VTBL_ENTRY _ZTV11S20731C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C8_nt[];
extern Class_Descriptor cd_S20731C14_nt;
extern VTBL_ENTRY _ZTI12S20731C14_nt[];
extern  VTBL_ENTRY _ZTV12S20731C14_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C14_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C16_nt;
extern VTBL_ENTRY _ZTI12S20731C16_nt[];
extern  VTBL_ENTRY _ZTV12S20731C16_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C16_nt[];
extern Class_Descriptor cd_S20731C17_nt;
extern VTBL_ENTRY _ZTI12S20731C17_nt[];
extern  VTBL_ENTRY _ZTV12S20731C17_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C17_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C19_nt;
extern VTBL_ENTRY _ZTI12S20731C19_nt[];
extern  VTBL_ENTRY _ZTV12S20731C19_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C19_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C18_nt;
extern VTBL_ENTRY _ZTI12S20731C18_nt[];
extern  VTBL_ENTRY _ZTV12S20731C18_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C18_nt[];
extern Class_Descriptor cd_S20731C15_nt;
extern VTBL_ENTRY _ZTI12S20731C15_nt[];
extern  VTBL_ENTRY _ZTV12S20731C15_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C15_nt[];
extern Class_Descriptor cd_S20731C7_nt;
extern VTBL_ENTRY _ZTI11S20731C7_nt[];
extern  VTBL_ENTRY _ZTV11S20731C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C7_nt[];
extern Class_Descriptor cd_S20731C6_nt;
extern VTBL_ENTRY _ZTI11S20731C6_nt[];
extern  VTBL_ENTRY _ZTV11S20731C6_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C6_nt[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S20731C8_nt;
extern VTBL_ENTRY _ZTI11S20731C8_nt[];
extern  VTBL_ENTRY _ZTV11S20731C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C8_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C4_nt;
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S20731C8_nt;
extern VTBL_ENTRY _ZTI11S20731C8_nt[];
extern  VTBL_ENTRY _ZTV11S20731C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C8_nt[];
extern Class_Descriptor cd_S20731C14_nt;
extern VTBL_ENTRY _ZTI12S20731C14_nt[];
extern  VTBL_ENTRY _ZTV12S20731C14_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C14_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C15_nt;
extern VTBL_ENTRY _ZTI12S20731C15_nt[];
extern  VTBL_ENTRY _ZTV12S20731C15_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C15_nt[];
extern Class_Descriptor cd_S20731C7_nt;
extern VTBL_ENTRY _ZTI11S20731C7_nt[];
extern  VTBL_ENTRY _ZTV11S20731C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C7_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C15_nt;
extern VTBL_ENTRY _ZTI12S20731C15_nt[];
extern  VTBL_ENTRY _ZTV12S20731C15_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C15_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C21_nt;
extern VTBL_ENTRY _ZTI12S20731C21_nt[];
extern  VTBL_ENTRY _ZTV12S20731C21_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C21_nt[];
extern Class_Descriptor cd_S20731C20_nt;
extern VTBL_ENTRY _ZTI12S20731C20_nt[];
extern  VTBL_ENTRY _ZTV12S20731C20_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C20_nt[];
extern Class_Descriptor cd_S20731C17_nt;
extern VTBL_ENTRY _ZTI12S20731C17_nt[];
extern  VTBL_ENTRY _ZTV12S20731C17_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C17_nt[];
static Base_Class bases_S20731C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    ABISELECT(17,9), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C28,    ABISELECT(336,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
    2, //immediately_derived
  0, 0},
  {&cd_S20731C4_nt,    ABISELECT(336,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    ABISELECT(273,145), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20731C10_nt,    ABISELECT(264,140), //bcp->offset
    83, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    143, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20731C11_nt,    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
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    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
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(32,16), //bcp->offset
    44, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    63, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20731C8_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(280,148), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    145, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20731C11_nt,    ABISELECT(296,156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    151, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(304,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    153, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(304,160), //bcp->offset
    103, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    152, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(296,156), //bcp->offset
    95, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    150, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(280,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
    16, //immediately_derived
  0, 0},
  {&cd_S20731C13_nt,    ABISELECT(280,148), //bcp->offset
    86, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    144, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S2264C28,    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
    18, //immediately_derived
  0, 0},
  {&cd_S20731C4_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
    28, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20731C11_nt,    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
    74, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    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
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(72,40), //bcp->offset
    63, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    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
    73, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20731C8_nt,    ABISELECT(64,36), //bcp->offset
    56, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    72, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20731C14_nt,    ABISELECT(56,32), //bcp->offset
    47, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    71, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    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
    91, //bcp->base_subarray_index_in_construction_vtbl_array
    35, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(96,56), //bcp->offset
    66, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    90, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(112,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    94, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(112,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    93, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(320,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
    31, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(320,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    158, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20731C16_nt,    ABISELECT(320,168), //bcp->offset
    106, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    157, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    32, //immediately_derived
  0, 1},
  {&cd_S20731C17_nt,    ABISELECT(336,176), //bcp->offset
    115, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    160, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    45, //immediately_derived
  0, 1},
  {&cd_S20731C11_nt,    ABISELECT(352,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    165, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(360,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    167, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(360,188), //bcp->offset
    135, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    166, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(352,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    164, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S20731C11_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    186, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    41, //immediately_derived
  0, 1},
  {&cd_S20731C10_nt,    ABISELECT(392,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    188, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(392,204), //bcp->offset
    141, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    187, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    41, //immediately_derived
  0, 1},
  {&cd_S20731C19_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    181, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    44, //immediately_derived
  0, 1},
  {&cd_S20731C10_nt,    ABISELECT(376,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    172, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(376,196), //bcp->offset
    138, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    171, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S20731C18_nt,    ABISELECT(352,184), //bcp->offset
    123, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    163, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    45, //immediately_derived
  0, 1},
  {&cd_S20731C15_nt,    ABISELECT(112,64), //bcp->offset
    69, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    92, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S20731C7_nt,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S20731C6_nt,    ABISELECT(24,12), //bcp->offset
    27, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    73, //immediately_derived
  0, 0},
  {&cd_S20731C11_nt,    ABISELECT(408,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    193, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    52, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(416,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    195, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(416,216), //bcp->offset
    161, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    194, //bcp->base_subarray_index_in_construction_vtbl_array
    44, //init_seq
    52, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(408,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    192, //bcp->base_subarray_index_in_construction_vtbl_array
    45, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S20731C8_nt,    ABISELECT(408,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    191, //bcp->base_subarray_index_in_construction_vtbl_array
    46, //init_seq
    67, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(440,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
    55, //immediately_derived
  0, 0},
  {&cd_S20731C4_nt,    ABISELECT(440,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
    47, //init_seq
    61, //immediately_derived
  0, 0},
  {&cd_S20731C11_nt,    ABISELECT(448,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    205, //bcp->base_subarray_index_in_construction_vtbl_array
    48, //init_seq
    59, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(456,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    207, //bcp->base_subarray_index_in_construction_vtbl_array
    49, //init_seq
    58, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(456,240), //bcp->offset
    180, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    206, //bcp->base_subarray_index_in_construction_vtbl_array
    50, //init_seq
    59, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(448,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    204, //bcp->base_subarray_index_in_construction_vtbl_array
    51, //init_seq
    60, //immediately_derived
  0, 0},
  {&cd_S20731C8_nt,    ABISELECT(448,236), //bcp->offset
    173, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    203, //bcp->base_subarray_index_in_construction_vtbl_array
    52, //init_seq
    61, //immediately_derived
  0, 0},
  {&cd_S20731C14_nt,    ABISELECT(440,232), //bcp->offset
    164, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    202, //bcp->base_subarray_index_in_construction_vtbl_array
    53, //init_seq
    67, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(480,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    222, //bcp->base_subarray_index_in_construction_vtbl_array
    54, //init_seq
    63, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(480,256), //bcp->offset
    183, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    53, //bcp->index_in_construction_vtbl_array
    221, //bcp->base_subarray_index_in_construction_vtbl_array
    55, //init_seq
    67, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(496,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    225, //bcp->base_subarray_index_in_construction_vtbl_array
    56, //init_seq
    65, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(496,264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    224, //bcp->base_subarray_index_in_construction_vtbl_array
    57, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S20731C15_nt,    ABISELECT(496,264), //bcp->offset
    186, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    54, //bcp->index_in_construction_vtbl_array
    223, //bcp->base_subarray_index_in_construction_vtbl_array
    58, //init_seq
    67, //immediately_derived
  0, 0},
  {&cd_S20731C7_nt,    ABISELECT(408,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    190, //bcp->base_subarray_index_in_construction_vtbl_array
    59, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(616,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    257, //bcp->base_subarray_index_in_construction_vtbl_array
    60, //init_seq
    69, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(616,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    256, //bcp->base_subarray_index_in_construction_vtbl_array
    61, //init_seq
    70, //immediately_derived
  0, 0},
  {&cd_S20731C15_nt,    ABISELECT(616,324), //bcp->offset
    200, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    55, //bcp->index_in_construction_vtbl_array
    255, //bcp->base_subarray_index_in_construction_vtbl_array
    62, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(632,332), //bcp->offset
    214, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    56, //bcp->index_in_construction_vtbl_array
    268, //bcp->base_subarray_index_in_construction_vtbl_array
    63, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S20731C21_nt,    ABISELECT(408,212), //bcp->offset
    144, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    189, //bcp->base_subarray_index_in_construction_vtbl_array
    64, //init_seq
    73, //immediately_derived
  0, 1},
  {&cd_S20731C20_nt,    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
    65, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20731C17_nt,    ABISELECT(8,4), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    57, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    66, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20731C2[];
extern void ABISELECT(_ZTv0_n32_N8S20731C2D1Ev,_ZTv0_n16_N8S20731C2D1Ev)();
extern void _ZN8S20731C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20731C2D0Ev,_ZTv0_n16_N8S20731C2D0Ev)();
extern void _ZN8S20731C2D0Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20731C2D1Ev,_ZTv0_n12_N8S20731C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S20731C2D1Ev,_ZThn4_N8S20731C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20731C2D0Ev,_ZTv0_n12_N8S20731C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S20731C2D0Ev,_ZThn4_N8S20731C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S20731C2D1Ev,_ZTv0_n56_N8S20731C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S20731C2D1Ev,_ZThn12_N8S20731C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S20731C2D0Ev,_ZTv0_n56_N8S20731C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S20731C2D0Ev,_ZThn12_N8S20731C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n112_N8S20731C2D1Ev,_ZTvn20_n56_N8S20731C2D1Ev)();
extern void ABISELECT(_ZTvn32_n112_N8S20731C2D0Ev,_ZTvn20_n56_N8S20731C2D0Ev)();
extern void ABISELECT(_ZTvn40_n112_N8S20731C2D1Ev,_ZTvn24_n56_N8S20731C2D1Ev)();
extern void ABISELECT(_ZTvn40_n112_N8S20731C2D0Ev,_ZTvn24_n56_N8S20731C2D0Ev)();
extern void ABISELECT(_ZTvn88_n112_N8S20731C2D1Ev,_ZTvn52_n56_N8S20731C2D1Ev)();
extern void ABISELECT(_ZTvn88_n112_N8S20731C2D0Ev,_ZTvn52_n56_N8S20731C2D0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S20731C2D1Ev,_ZTv0_n28_N8S20731C2D1Ev)();
extern void ABISELECT(_ZThn280_N8S20731C2D1Ev,_ZThn148_N8S20731C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20731C2D0Ev,_ZTv0_n28_N8S20731C2D0Ev)();
extern void ABISELECT(_ZThn280_N8S20731C2D0Ev,_ZThn148_N8S20731C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20731C2D1Ev,_ZTv0_n24_N8S20731C2D1Ev)();
extern void ABISELECT(_ZThn296_N8S20731C2D1Ev,_ZThn156_N8S20731C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20731C2D0Ev,_ZTv0_n24_N8S20731C2D0Ev)();
extern void ABISELECT(_ZThn296_N8S20731C2D0Ev,_ZThn156_N8S20731C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20731C2D1Ev,_ZTv0_n20_N8S20731C2D1Ev)();
extern void ABISELECT(_ZThn320_N8S20731C2D1Ev,_ZThn168_N8S20731C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20731C2D0Ev,_ZTv0_n20_N8S20731C2D0Ev)();
extern void ABISELECT(_ZThn320_N8S20731C2D0Ev,_ZThn168_N8S20731C2D0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S20731C2D1Ev,_ZTv0_n12_N8S20731C2D1Ev)();
extern void ABISELECT(_ZThn336_N8S20731C2D1Ev,_ZThn176_N8S20731C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20731C2D0Ev,_ZTv0_n12_N8S20731C2D0Ev)();
extern void ABISELECT(_ZThn336_N8S20731C2D0Ev,_ZThn176_N8S20731C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20731C2D1Ev,_ZTv0_n40_N8S20731C2D1Ev)();
extern void ABISELECT(_ZThn352_N8S20731C2D1Ev,_ZThn184_N8S20731C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20731C2D0Ev,_ZTv0_n40_N8S20731C2D0Ev)();
extern void ABISELECT(_ZThn352_N8S20731C2D0Ev,_ZThn184_N8S20731C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S20731C2D1Ev,_ZTv0_n56_N8S20731C2D1Ev)();
extern void ABISELECT(_ZThn408_N8S20731C2D1Ev,_ZThn212_N8S20731C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S20731C2D0Ev,_ZTv0_n56_N8S20731C2D0Ev)();
extern void ABISELECT(_ZThn408_N8S20731C2D0Ev,_ZThn212_N8S20731C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n112_N8S20731C2D1Ev,_ZTvn20_n56_N8S20731C2D1Ev)();
extern void ABISELECT(_ZTvn32_n112_N8S20731C2D0Ev,_ZTvn20_n56_N8S20731C2D0Ev)();
extern void ABISELECT(_ZTvn40_n112_N8S20731C2D1Ev,_ZTvn24_n56_N8S20731C2D1Ev)();
extern void ABISELECT(_ZTvn40_n112_N8S20731C2D0Ev,_ZTvn24_n56_N8S20731C2D0Ev)();
extern void ABISELECT(_ZTvn88_n112_N8S20731C2D1Ev,_ZTvn52_n56_N8S20731C2D1Ev)();
extern void ABISELECT(_ZTvn88_n112_N8S20731C2D0Ev,_ZTvn52_n56_N8S20731C2D0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
extern void ABISELECT(_ZTvn208_n112_N8S20731C2D1Ev,_ZTvn112_n56_N8S20731C2D1Ev)();
extern void ABISELECT(_ZTvn208_n112_N8S20731C2D0Ev,_ZTvn112_n56_N8S20731C2D0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY vtc_S20731C2[] = {
  ABISELECT(24,12),
  ABISELECT(17,9),
  0,
  ABISELECT(352,184),
  ABISELECT(336,176),
  ABISELECT(320,168),
  ABISELECT(296,156),
  ABISELECT(280,148),
  ABISELECT(408,212),
  ABISELECT(336,176),
  ABISELECT(392,204),
  0,
  ABISELECT(264,140),
  0,
  ABISELECT(273,145),
  0,
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20731C2D1Ev,_ZTv0_n16_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20731C2D0Ev,_ZTv0_n16_N8S20731C2D0Ev),
  ABISELECT(328,172),
  ABISELECT(312,164),
  ABISELECT(265,141),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20731C2D1Ev,_ZTv0_n12_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20731C2D0Ev,_ZTv0_n12_N8S20731C2D0Ev),
  ABISELECT(88,52),
  ABISELECT(-24,-12),
  ABISELECT(368,192),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(328,172),
  ABISELECT(312,164),
  ABISELECT(296,156),
  ABISELECT(272,144),
  ABISELECT(256,136),
  ABISELECT(240,128),
  ABISELECT(312,164),
  ABISELECT(249,133),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S20731C2D1Ev,_ZTv0_n56_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S20731C2D0Ev,_ZTv0_n56_N8S20731C2D0Ev),
  ABISELECT(241,129),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  ABISELECT(240,124),
  ABISELECT(224,116),
  ABISELECT(280,144),
  ABISELECT(217,113),
  ABISELECT(208,108),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n112_N8S20731C2D1Ev,_ZTvn20_n56_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n112_N8S20731C2D0Ev,_ZTvn20_n56_N8S20731C2D0Ev),
  ABISELECT(200,104),
  ABISELECT(272,140),
  ABISELECT(209,109),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n112_N8S20731C2D1Ev,_ZTvn24_n56_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n112_N8S20731C2D0Ev,_ZTvn24_n56_N8S20731C2D0Ev),
  ABISELECT(201,105),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  ABISELECT(177,89),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  ABISELECT(280,140),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  ABISELECT(152,76),
  ABISELECT(240,120),
  ABISELECT(224,112),
  ABISELECT(224,112),
  ABISELECT(208,104),
  ABISELECT(161,81),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n112_N8S20731C2D1Ev,_ZTvn52_n56_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n112_N8S20731C2D0Ev,_ZTvn52_n56_N8S20731C2D0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
  ABISELECT(9,5),
  ABISELECT(-264,-140),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  ABISELECT(-280,-148),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-7,-3),
  ABISELECT(-280,-148),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20731C2D1Ev,_ZTv0_n28_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20731C2D0Ev,_ZTv0_n28_N8S20731C2D0Ev),
  ABISELECT(-296,-156),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-23,-11),
  ABISELECT(-296,-156),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20731C2D1Ev,_ZTv0_n24_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20731C2D0Ev,_ZTv0_n24_N8S20731C2D0Ev),
  ABISELECT(-31,-15),
  ABISELECT(-304,-160),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  0,
  ABISELECT(-320,-168),
  ABISELECT(16,8),
  ABISELECT(-47,-23),
  ABISELECT(-320,-168),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20731C2D1Ev,_ZTv0_n20_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20731C2D0Ev,_ZTv0_n20_N8S20731C2D0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-63,-31),
  ABISELECT(-336,-176),
  ABISELECT(-336,-176),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20731C2D1Ev,_ZTv0_n12_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20731C2D0Ev,_ZTv0_n12_N8S20731C2D0Ev),
  ABISELECT(-352,-184),
  ABISELECT(40,20),
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-79,-39),
  ABISELECT(-352,-184),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20731C2D1Ev,_ZTv0_n40_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20731C2D0Ev,_ZTv0_n40_N8S20731C2D0Ev),
  ABISELECT(-87,-43),
  ABISELECT(-360,-188),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  ABISELECT(-103,-51),
  ABISELECT(-376,-196),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  ABISELECT(-119,-59),
  ABISELECT(-392,-204),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  ABISELECT(88,52),
  ABISELECT(-408,-212),
  ABISELECT(-16,-8),
  ABISELECT(-408,-212),
  ABISELECT(-408,-212),
  ABISELECT(-56,-28),
  ABISELECT(-72,-36),
  ABISELECT(-88,-44),
  ABISELECT(-112,-56),
  ABISELECT(-128,-64),
  ABISELECT(-144,-72),
  ABISELECT(-72,-36),
  ABISELECT(-135,-67),
  ABISELECT(-408,-212),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S20731C2D1Ev,_ZTv0_n56_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S20731C2D0Ev,_ZTv0_n56_N8S20731C2D0Ev),
  ABISELECT(-143,-71),
  ABISELECT(-416,-216),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  ABISELECT(-144,-76),
  ABISELECT(-160,-84),
  ABISELECT(-104,-56),
  ABISELECT(-167,-87),
  ABISELECT(-176,-92),
  ABISELECT(-440,-232),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n112_N8S20731C2D1Ev,_ZTvn20_n56_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n112_N8S20731C2D0Ev,_ZTvn20_n56_N8S20731C2D0Ev),
  ABISELECT(-184,-96),
  ABISELECT(-112,-60),
  ABISELECT(-175,-91),
  ABISELECT(-448,-236),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n112_N8S20731C2D1Ev,_ZTvn24_n56_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n112_N8S20731C2D0Ev,_ZTvn24_n56_N8S20731C2D0Ev),
  ABISELECT(-183,-95),
  ABISELECT(-456,-240),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  ABISELECT(-207,-111),
  ABISELECT(-480,-256),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  ABISELECT(-104,-60),
  ABISELECT(-496,-264),
  ABISELECT(-496,-264),
  ABISELECT(-232,-124),
  ABISELECT(-144,-80),
  ABISELECT(-160,-88),
  ABISELECT(-160,-88),
  ABISELECT(-176,-96),
  ABISELECT(-223,-119),
  ABISELECT(-496,-264),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n112_N8S20731C2D1Ev,_ZTvn52_n56_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n112_N8S20731C2D0Ev,_ZTvn52_n56_N8S20731C2D0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
  ABISELECT(-224,-120),
  ABISELECT(-616,-324),
  ABISELECT(-616,-324),
  ABISELECT(-352,-184),
  ABISELECT(-264,-140),
  ABISELECT(-280,-148),
  ABISELECT(-280,-148),
  ABISELECT(-296,-156),
  ABISELECT(-343,-179),
  ABISELECT(-616,-324),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn208_n112_N8S20731C2D1Ev,_ZTvn112_n56_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn208_n112_N8S20731C2D0Ev,_ZTvn112_n56_N8S20731C2D0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
  ABISELECT(-359,-187),
  ABISELECT(-632,-332),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
};
extern VTBL_ENTRY _ZTV8S20731C2[];
extern void ABISELECT(_ZTv0_n32_N12S20731C20_ntD1Ev,_ZTv0_n16_N12S20731C20_ntD1Ev)();
extern void _ZN12S20731C20_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C20_ntD0Ev,_ZTv0_n16_N12S20731C20_ntD0Ev)();
extern void _ZN12S20731C20_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C20_nt__8S20731C2[] = {
  0,
  ABISELECT(352,184),
  ABISELECT(336,176),
  ABISELECT(320,168),
  ABISELECT(296,156),
  ABISELECT(280,148),
  ABISELECT(408,212),
  ABISELECT(336,176),
  ABISELECT(392,204),
  0,
  ABISELECT(264,140),
  0,
  ABISELECT(273,145),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C20_ntD1Ev,_ZTv0_n16_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C20_ntD0Ev,_ZTv0_n16_N12S20731C20_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n112_N12S20731C20_ntD1Ev,_ZTv0_n56_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZThn408_N12S20731C20_ntD1Ev,_ZThn212_N12S20731C20_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N12S20731C20_ntD0Ev,_ZTv0_n56_N12S20731C20_ntD0Ev)();
extern void ABISELECT(_ZThn408_N12S20731C20_ntD0Ev,_ZThn212_N12S20731C20_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C21_nt__12S20731C20_nt__8S20731C2[] = {
  ABISELECT(88,52),
  ABISELECT(-408,-212),
  ABISELECT(-16,-8),
  ABISELECT(-408,-212),
  ABISELECT(-408,-212),
  ABISELECT(-56,-28),
  ABISELECT(-72,-36),
  ABISELECT(-88,-44),
  ABISELECT(-112,-56),
  ABISELECT(-128,-64),
  ABISELECT(-144,-72),
  ABISELECT(-72,-36),
  ABISELECT(-135,-67),
  ABISELECT(-408,-212),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N12S20731C20_ntD1Ev,_ZTv0_n56_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N12S20731C20_ntD0Ev,_ZTv0_n56_N12S20731C20_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n56_N12S20731C20_ntD1Ev,_ZTv0_n28_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZThn280_N12S20731C20_ntD1Ev,_ZThn148_N12S20731C20_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N12S20731C20_ntD0Ev,_ZTv0_n28_N12S20731C20_ntD0Ev)();
extern void ABISELECT(_ZThn280_N12S20731C20_ntD0Ev,_ZThn148_N12S20731C20_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__12S20731C20_nt__8S20731C2[] = {
  ABISELECT(-280,-148),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-7,-3),
  ABISELECT(-280,-148),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C20_ntD1Ev,_ZTv0_n28_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C20_ntD0Ev,_ZTv0_n28_N12S20731C20_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n48_N12S20731C20_ntD1Ev,_ZTv0_n24_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZThn296_N12S20731C20_ntD1Ev,_ZThn156_N12S20731C20_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N12S20731C20_ntD0Ev,_ZTv0_n24_N12S20731C20_ntD0Ev)();
extern void ABISELECT(_ZThn296_N12S20731C20_ntD0Ev,_ZThn156_N12S20731C20_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__12S20731C20_nt__8S20731C2[] = {
  ABISELECT(-296,-156),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-23,-11),
  ABISELECT(-296,-156),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C20_ntD1Ev,_ZTv0_n24_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C20_ntD0Ev,_ZTv0_n24_N12S20731C20_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C20_ntD1Ev,_ZTv0_n12_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZThn336_N12S20731C20_ntD1Ev,_ZThn176_N12S20731C20_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C20_ntD0Ev,_ZTv0_n12_N12S20731C20_ntD0Ev)();
extern void ABISELECT(_ZThn336_N12S20731C20_ntD0Ev,_ZThn176_N12S20731C20_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__12S20731C20_nt__8S20731C2[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-63,-31),
  ABISELECT(-336,-176),
  ABISELECT(-336,-176),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C20_ntD1Ev,_ZTv0_n12_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C20_ntD0Ev,_ZTv0_n12_N12S20731C20_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A1__12S20731C20_nt__8S20731C2[] = {
  ABISELECT(9,5),
  ABISELECT(-264,-140),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C20_nt__8S20731C2[] = {
  ABISELECT(-31,-15),
  ABISELECT(-304,-160),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt__8S20731C2[] = {
  ABISELECT(-143,-71),
  ABISELECT(-416,-216),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
};
extern void ABISELECT(_ZTvn32_n112_N12S20731C20_ntD1Ev,_ZTvn20_n56_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZTvn32_n112_N12S20731C20_ntD0Ev,_ZTvn20_n56_N12S20731C20_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C14_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt__8S20731C2[] = {
  ABISELECT(-144,-76),
  ABISELECT(-160,-84),
  ABISELECT(-104,-56),
  ABISELECT(-167,-87),
  ABISELECT(-176,-92),
  ABISELECT(-440,-232),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n112_N12S20731C20_ntD1Ev,_ZTvn20_n56_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n112_N12S20731C20_ntD0Ev,_ZTvn20_n56_N12S20731C20_ntD0Ev),
};
extern void ABISELECT(_ZTvn40_n112_N12S20731C20_ntD1Ev,_ZTvn24_n56_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZTvn40_n112_N12S20731C20_ntD0Ev,_ZTvn24_n56_N12S20731C20_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt__8S20731C2[] = {
  ABISELECT(-184,-96),
  ABISELECT(-112,-60),
  ABISELECT(-175,-91),
  ABISELECT(-448,-236),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n112_N12S20731C20_ntD1Ev,_ZTvn24_n56_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n112_N12S20731C20_ntD0Ev,_ZTvn24_n56_N12S20731C20_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A2__12S20731C20_nt__8S20731C2[] = {
  ABISELECT(-183,-95),
  ABISELECT(-456,-240),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C7_nt12S20731C21_nt__A3__12S20731C20_nt__8S20731C2[] = {
  ABISELECT(-207,-111),
  ABISELECT(-480,-256),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
};
extern void ABISELECT(_ZTvn88_n112_N12S20731C20_ntD1Ev,_ZTvn52_n56_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZTvn88_n112_N12S20731C20_ntD0Ev,_ZTvn52_n56_N12S20731C20_ntD0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt__8S20731C2[] = {
  ABISELECT(-104,-60),
  ABISELECT(-496,-264),
  ABISELECT(-496,-264),
  ABISELECT(-232,-124),
  ABISELECT(-144,-80),
  ABISELECT(-160,-88),
  ABISELECT(-160,-88),
  ABISELECT(-176,-96),
  ABISELECT(-223,-119),
  ABISELECT(-496,-264),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n112_N12S20731C20_ntD1Ev,_ZTvn52_n56_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n112_N12S20731C20_ntD0Ev,_ZTvn52_n56_N12S20731C20_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N12S20731C20_ntD1Ev,_ZTv0_n20_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZThn320_N12S20731C20_ntD1Ev,_ZThn168_N12S20731C20_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S20731C20_ntD0Ev,_ZTv0_n20_N12S20731C20_ntD0Ev)();
extern void ABISELECT(_ZThn320_N12S20731C20_ntD0Ev,_ZThn168_N12S20731C20_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C20_nt__8S20731C2[] = {
  0,
  ABISELECT(-320,-168),
  ABISELECT(16,8),
  ABISELECT(-47,-23),
  ABISELECT(-320,-168),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C20_ntD1Ev,_ZTv0_n20_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C20_ntD0Ev,_ZTv0_n20_N12S20731C20_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n80_N12S20731C20_ntD1Ev,_ZTv0_n40_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZThn352_N12S20731C20_ntD1Ev,_ZThn184_N12S20731C20_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N12S20731C20_ntD0Ev,_ZTv0_n40_N12S20731C20_ntD0Ev)();
extern void ABISELECT(_ZThn352_N12S20731C20_ntD0Ev,_ZThn184_N12S20731C20_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__12S20731C20_nt__8S20731C2[] = {
  ABISELECT(-352,-184),
  ABISELECT(40,20),
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-79,-39),
  ABISELECT(-352,-184),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C20_ntD1Ev,_ZTv0_n40_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C20_ntD0Ev,_ZTv0_n40_N12S20731C20_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__12S20731C20_nt__8S20731C2[] = {
  ABISELECT(-87,-43),
  ABISELECT(-360,-188),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A6__12S20731C20_nt__8S20731C2[] = {
  ABISELECT(-119,-59),
  ABISELECT(-392,-204),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A7__12S20731C20_nt__8S20731C2[] = {
  ABISELECT(-103,-51),
  ABISELECT(-376,-196),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
};
extern void ABISELECT(_ZTvn208_n112_N12S20731C20_ntD1Ev,_ZTvn112_n56_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZTvn208_n112_N12S20731C20_ntD0Ev,_ZTvn112_n56_N12S20731C20_ntD0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt12S20731C21_nt__A1__12S20731C20_nt__8S20731C2[] = {
  ABISELECT(-224,-120),
  ABISELECT(-616,-324),
  ABISELECT(-616,-324),
  ABISELECT(-352,-184),
  ABISELECT(-264,-140),
  ABISELECT(-280,-148),
  ABISELECT(-280,-148),
  ABISELECT(-296,-156),
  ABISELECT(-343,-179),
  ABISELECT(-616,-324),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn208_n112_N12S20731C20_ntD1Ev,_ZTvn112_n56_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn208_n112_N12S20731C20_ntD0Ev,_ZTvn112_n56_N12S20731C20_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C21_nt__A12__12S20731C20_nt__8S20731C2[] = {
  ABISELECT(-359,-187),
  ABISELECT(-632,-332),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev)();
extern void _ZN12S20731C17_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev)();
extern void _ZN12S20731C17_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__A__8S20731C2[] = {
  ABISELECT(328,172),
  ABISELECT(312,164),
  ABISELECT(265,141),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C17_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C17_ntD1Ev,_ZTv0_n20_N12S20731C17_ntD1Ev)();
extern void ABISELECT(_ZThn312_N12S20731C17_ntD1Ev,_ZThn164_N12S20731C17_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S20731C17_ntD0Ev,_ZTv0_n20_N12S20731C17_ntD0Ev)();
extern void ABISELECT(_ZThn312_N12S20731C17_ntD0Ev,_ZThn164_N12S20731C17_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C17_nt__A__8S20731C2[] = {
  0,
  ABISELECT(-312,-164),
  ABISELECT(16,8),
  ABISELECT(-47,-23),
  ABISELECT(-312,-164),
  (VTBL_ENTRY)&(_ZTI12S20731C17_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C17_ntD1Ev,_ZTv0_n20_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C17_ntD0Ev,_ZTv0_n20_N12S20731C17_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev)();
extern void ABISELECT(_ZThn328_N12S20731C17_ntD1Ev,_ZThn172_N12S20731C17_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev)();
extern void ABISELECT(_ZThn328_N12S20731C17_ntD0Ev,_ZThn172_N12S20731C17_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C17_nt__A__8S20731C2[] = {
  ABISELECT(-328,-172),
  ABISELECT(-328,-172),
  (VTBL_ENTRY)&(_ZTI12S20731C17_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev),
};
extern void _ZN11S20731C6_ntD1Ev();
extern void _ZN11S20731C6_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C6_nt__8S20731C2[] = {
  ABISELECT(368,192),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(328,172),
  ABISELECT(312,164),
  ABISELECT(296,156),
  ABISELECT(272,144),
  ABISELECT(256,136),
  ABISELECT(240,128),
  ABISELECT(312,164),
  ABISELECT(249,133),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C6_ntD0Ev,
};
extern void _ZN11S20731C7_ntD1Ev();
extern void _ZN11S20731C7_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(368,192),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(328,172),
  ABISELECT(312,164),
  ABISELECT(296,156),
  ABISELECT(272,144),
  ABISELECT(256,136),
  ABISELECT(240,128),
  ABISELECT(312,164),
  ABISELECT(249,133),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C7_ntD0Ev,
};
extern void _ZN11S20731C8_ntD1Ev();
extern void _ZN11S20731C8_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(240,128),
  ABISELECT(312,164),
  ABISELECT(249,133),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C8_ntD0Ev,
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(240,128),
  ABISELECT(312,164),
  ABISELECT(249,133),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(249,133),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(241,129),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__A1__8S20731C2[] = {
  ABISELECT(241,129),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZThn312_N11S20731C9_ntD1Ev,_ZThn164_N11S20731C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
extern void ABISELECT(_ZThn312_N11S20731C9_ntD0Ev,_ZThn164_N11S20731C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(-312,-164),
  ABISELECT(-312,-164),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(9,5),
  ABISELECT(-240,-128),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(241,129),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev)();
extern void ABISELECT(_ZThn312_N11S20731C8_ntD1Ev,_ZThn164_N11S20731C8_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev)();
extern void ABISELECT(_ZThn312_N11S20731C8_ntD0Ev,_ZThn164_N11S20731C8_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(-312,-164),
  ABISELECT(-312,-164),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(9,5),
  ABISELECT(-240,-128),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(241,129),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
extern void _ZN12S20731C14_ntD1Ev();
extern void _ZN12S20731C14_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(240,124),
  ABISELECT(224,116),
  ABISELECT(280,144),
  ABISELECT(217,113),
  ABISELECT(208,108),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C14_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C14_ntD0Ev,
};
extern void _ZN11S20731C8_ntD1Ev();
extern void _ZN11S20731C8_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A1__8S20731C2[] = {
  ABISELECT(200,104),
  ABISELECT(272,140),
  ABISELECT(209,109),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C8_ntD0Ev,
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C2[] = {
  ABISELECT(200,104),
  ABISELECT(272,140),
  ABISELECT(209,109),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C2[] = {
  ABISELECT(209,109),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C2[] = {
  ABISELECT(201,105),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A4__8S20731C2[] = {
  ABISELECT(201,105),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZThn272_N11S20731C9_ntD1Ev,_ZThn140_N11S20731C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
extern void ABISELECT(_ZThn272_N11S20731C9_ntD0Ev,_ZThn140_N11S20731C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C2[] = {
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C2[] = {
  ABISELECT(9,5),
  ABISELECT(-200,-104),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C2[] = {
  ABISELECT(201,105),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev)();
extern void ABISELECT(_ZThn272_N11S20731C8_ntD1Ev,_ZThn140_N11S20731C8_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev)();
extern void ABISELECT(_ZThn272_N11S20731C8_ntD0Ev,_ZThn140_N11S20731C8_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A1__8S20731C2[] = {
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A1__8S20731C2[] = {
  ABISELECT(9,5),
  ABISELECT(-200,-104),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A1__8S20731C2[] = {
  ABISELECT(201,105),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(9,5),
  ABISELECT(-208,-108),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
extern void ABISELECT(_ZThn8_N12S20731C14_ntD1Ev,_ZThn4_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn8_N12S20731C14_ntD0Ev,_ZThn4_N12S20731C14_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(200,104),
  ABISELECT(272,140),
  ABISELECT(209,109),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N12S20731C14_ntD1Ev,_ZThn4_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N12S20731C14_ntD0Ev,_ZThn4_N12S20731C14_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn280_N12S20731C14_ntD1Ev,_ZThn144_N12S20731C14_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev)();
extern void ABISELECT(_ZThn280_N12S20731C14_ntD0Ev,_ZThn144_N12S20731C14_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__A1__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(-280,-144),
  ABISELECT(-280,-144),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(201,105),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
extern void ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn224_N12S20731C14_ntD1Ev,_ZThn116_N12S20731C14_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev)();
extern void ABISELECT(_ZThn224_N12S20731C14_ntD0Ev,_ZThn116_N12S20731C14_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(-224,-116),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-7,-3),
  ABISELECT(-224,-116),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn240_N12S20731C14_ntD1Ev,_ZThn124_N12S20731C14_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev)();
extern void ABISELECT(_ZThn240_N12S20731C14_ntD0Ev,_ZThn124_N12S20731C14_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(-240,-124),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-23,-11),
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(-31,-15),
  ABISELECT(-248,-128),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C7_nt11S20731C6_nt__A3__8S20731C2[] = {
  ABISELECT(177,89),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C7_nt11S20731C6_nt__A5__8S20731C2[] = {
  ABISELECT(177,89),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void _ZN12S20731C15_ntD1Ev();
extern void _ZN12S20731C15_ntD0Ev();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(280,140),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  ABISELECT(152,76),
  ABISELECT(240,120),
  ABISELECT(224,112),
  ABISELECT(224,112),
  ABISELECT(208,104),
  ABISELECT(161,81),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C15_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C15_nt11S20731C7_nt11S20731C6_nt__A4__8S20731C2[] = {
  ABISELECT(161,81),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt11S20731C7_nt11S20731C6_nt__A6__8S20731C2[] = {
  ABISELECT(161,81),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn208_N12S20731C15_ntD1Ev,_ZThn104_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn208_N12S20731C15_ntD0Ev,_ZThn104_N12S20731C15_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  0,
  ABISELECT(-208,-104),
  ABISELECT(16,8),
  ABISELECT(-47,-23),
  ABISELECT(-208,-104),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn224_N12S20731C15_ntD1Ev,_ZThn112_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn224_N12S20731C15_ntD0Ev,_ZThn112_N12S20731C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-63,-31),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn240_N12S20731C15_ntD1Ev,_ZThn120_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn240_N12S20731C15_ntD0Ev,_ZThn120_N12S20731C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(-240,-120),
  ABISELECT(40,20),
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-79,-39),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A2__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(9,5),
  ABISELECT(-152,-76),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(-87,-43),
  ABISELECT(-248,-124),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(336,176),
  ABISELECT(392,204),
  0,
  ABISELECT(264,140),
  ABISELECT(112,64),
  ABISELECT(273,145),
  ABISELECT(112,64),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A2__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(-119,-59),
  ABISELECT(-280,-140),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(-103,-51),
  ABISELECT(-264,-132),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C7_ntD1Ev,_ZTv0_n12_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn312_N11S20731C7_ntD1Ev,_ZThn164_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C7_ntD0Ev,_ZTv0_n12_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn312_N11S20731C7_ntD0Ev,_ZThn164_N11S20731C7_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-63,-31),
  ABISELECT(-312,-164),
  ABISELECT(-312,-164),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C7_ntD1Ev,_ZTv0_n12_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C7_ntD0Ev,_ZTv0_n12_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(9,5),
  ABISELECT(-240,-128),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(241,129),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZTv0_n56_N11S20731C7_ntD1Ev,_ZTv0_n28_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn256_N11S20731C7_ntD1Ev,_ZThn136_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N11S20731C7_ntD0Ev,_ZTv0_n28_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn256_N11S20731C7_ntD0Ev,_ZThn136_N11S20731C7_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(-256,-136),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-7,-3),
  ABISELECT(-256,-136),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S20731C7_ntD1Ev,_ZTv0_n28_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S20731C7_ntD0Ev,_ZTv0_n28_N11S20731C7_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n48_N11S20731C7_ntD1Ev,_ZTv0_n24_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn272_N11S20731C7_ntD1Ev,_ZThn144_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N11S20731C7_ntD0Ev,_ZTv0_n24_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn272_N11S20731C7_ntD0Ev,_ZThn144_N11S20731C7_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__A1__11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(-272,-144),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-23,-11),
  ABISELECT(-272,-144),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N11S20731C7_ntD1Ev,_ZTv0_n24_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N11S20731C7_ntD0Ev,_ZTv0_n24_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__A1__11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(-31,-15),
  ABISELECT(-280,-148),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZThn32_N11S20731C7_ntD1Ev,_ZThn20_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn32_N11S20731C7_ntD0Ev,_ZThn20_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C14_nt__11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(240,124),
  ABISELECT(224,116),
  ABISELECT(280,144),
  ABISELECT(217,113),
  ABISELECT(208,108),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N11S20731C7_ntD1Ev,_ZThn20_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N11S20731C7_ntD0Ev,_ZThn20_N11S20731C7_ntD0Ev),
};
extern void ABISELECT(_ZThn40_N11S20731C7_ntD1Ev,_ZThn24_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn40_N11S20731C7_ntD0Ev,_ZThn24_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt12S20731C14_nt__A1__11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(200,104),
  ABISELECT(272,140),
  ABISELECT(209,109),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N11S20731C7_ntD1Ev,_ZThn24_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N11S20731C7_ntD0Ev,_ZThn24_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(201,105),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A__11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(177,89),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZThn88_N11S20731C7_ntD1Ev,_ZThn52_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn88_N11S20731C7_ntD0Ev,_ZThn52_N11S20731C7_ntD0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt__11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(280,140),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  ABISELECT(152,76),
  ABISELECT(240,120),
  ABISELECT(224,112),
  ABISELECT(224,112),
  ABISELECT(208,104),
  ABISELECT(161,81),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N11S20731C7_ntD1Ev,_ZThn52_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N11S20731C7_ntD0Ev,_ZThn52_N11S20731C7_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N11S20731C7_ntD1Ev,_ZTv0_n20_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn296_N11S20731C7_ntD1Ev,_ZThn156_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N11S20731C7_ntD0Ev,_ZTv0_n20_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn296_N11S20731C7_ntD0Ev,_ZThn156_N11S20731C7_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  0,
  ABISELECT(-296,-156),
  ABISELECT(16,8),
  ABISELECT(-47,-23),
  ABISELECT(-296,-156),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S20731C7_ntD1Ev,_ZTv0_n20_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S20731C7_ntD0Ev,_ZTv0_n20_N11S20731C7_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n80_N11S20731C7_ntD1Ev,_ZTv0_n40_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn328_N11S20731C7_ntD1Ev,_ZThn172_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N11S20731C7_ntD0Ev,_ZTv0_n40_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn328_N11S20731C7_ntD0Ev,_ZThn172_N11S20731C7_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(-328,-172),
  ABISELECT(40,20),
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-79,-39),
  ABISELECT(-328,-172),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N11S20731C7_ntD1Ev,_ZTv0_n40_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N11S20731C7_ntD0Ev,_ZTv0_n40_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(-87,-43),
  ABISELECT(-336,-176),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N11S20731C7_ntD1Ev,_ZTv0_n16_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZTv0_n32_N11S20731C7_ntD0Ev,_ZTv0_n16_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(336,176),
  ABISELECT(392,204),
  0,
  ABISELECT(264,140),
  ABISELECT(24,12),
  ABISELECT(273,145),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20731C7_ntD1Ev,_ZTv0_n16_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20731C7_ntD0Ev,_ZTv0_n16_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A6__11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(-119,-59),
  ABISELECT(-368,-192),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A7__11S20731C7_nt11S20731C6_nt__8S20731C2[] = {
  ABISELECT(-103,-51),
  ABISELECT(-352,-184),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C6_ntD1Ev,_ZTv0_n12_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZThn312_N11S20731C6_ntD1Ev,_ZThn164_N11S20731C6_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C6_ntD0Ev,_ZTv0_n12_N11S20731C6_ntD0Ev)();
extern void ABISELECT(_ZThn312_N11S20731C6_ntD0Ev,_ZThn164_N11S20731C6_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__11S20731C6_nt__8S20731C2[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-63,-31),
  ABISELECT(-312,-164),
  ABISELECT(-312,-164),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C6_ntD1Ev,_ZTv0_n12_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C6_ntD0Ev,_ZTv0_n12_N11S20731C6_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C6_nt__8S20731C2[] = {
  ABISELECT(9,5),
  ABISELECT(-240,-128),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt__11S20731C6_nt__8S20731C2[] = {
  ABISELECT(241,129),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
};
extern void ABISELECT(_ZTv0_n56_N11S20731C6_ntD1Ev,_ZTv0_n28_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZThn256_N11S20731C6_ntD1Ev,_ZThn136_N11S20731C6_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N11S20731C6_ntD0Ev,_ZTv0_n28_N11S20731C6_ntD0Ev)();
extern void ABISELECT(_ZThn256_N11S20731C6_ntD0Ev,_ZThn136_N11S20731C6_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__11S20731C6_nt__8S20731C2[] = {
  ABISELECT(-256,-136),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-7,-3),
  ABISELECT(-256,-136),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S20731C6_ntD1Ev,_ZTv0_n28_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S20731C6_ntD0Ev,_ZTv0_n28_N11S20731C6_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n48_N11S20731C6_ntD1Ev,_ZTv0_n24_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZThn272_N11S20731C6_ntD1Ev,_ZThn144_N11S20731C6_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N11S20731C6_ntD0Ev,_ZTv0_n24_N11S20731C6_ntD0Ev)();
extern void ABISELECT(_ZThn272_N11S20731C6_ntD0Ev,_ZThn144_N11S20731C6_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__A1__11S20731C6_nt__8S20731C2[] = {
  ABISELECT(-272,-144),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-23,-11),
  ABISELECT(-272,-144),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N11S20731C6_ntD1Ev,_ZTv0_n24_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N11S20731C6_ntD0Ev,_ZTv0_n24_N11S20731C6_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__A1__11S20731C6_nt__8S20731C2[] = {
  ABISELECT(-31,-15),
  ABISELECT(-280,-148),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
};
extern void ABISELECT(_ZThn32_N11S20731C6_ntD1Ev,_ZThn20_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZThn32_N11S20731C6_ntD0Ev,_ZThn20_N11S20731C6_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C14_nt11S20731C7_nt__11S20731C6_nt__8S20731C2[] = {
  ABISELECT(240,124),
  ABISELECT(224,116),
  ABISELECT(280,144),
  ABISELECT(217,113),
  ABISELECT(208,108),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N11S20731C6_ntD1Ev,_ZThn20_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N11S20731C6_ntD0Ev,_ZThn20_N11S20731C6_ntD0Ev),
};
extern void ABISELECT(_ZThn40_N11S20731C6_ntD1Ev,_ZThn24_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZThn40_N11S20731C6_ntD0Ev,_ZThn24_N11S20731C6_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__11S20731C6_nt__8S20731C2[] = {
  ABISELECT(200,104),
  ABISELECT(272,140),
  ABISELECT(209,109),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N11S20731C6_ntD1Ev,_ZThn24_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N11S20731C6_ntD0Ev,_ZThn24_N11S20731C6_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__11S20731C6_nt__8S20731C2[] = {
  ABISELECT(201,105),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C7_nt__A3__11S20731C6_nt__8S20731C2[] = {
  ABISELECT(177,89),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
};
extern void ABISELECT(_ZThn88_N11S20731C6_ntD1Ev,_ZThn52_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZThn88_N11S20731C6_ntD0Ev,_ZThn52_N11S20731C6_ntD0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt11S20731C7_nt__11S20731C6_nt__8S20731C2[] = {
  ABISELECT(280,140),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  ABISELECT(152,76),
  ABISELECT(240,120),
  ABISELECT(224,112),
  ABISELECT(224,112),
  ABISELECT(208,104),
  ABISELECT(161,81),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N11S20731C6_ntD1Ev,_ZThn52_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N11S20731C6_ntD0Ev,_ZThn52_N11S20731C6_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N11S20731C6_ntD1Ev,_ZTv0_n20_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZThn296_N11S20731C6_ntD1Ev,_ZThn156_N11S20731C6_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N11S20731C6_ntD0Ev,_ZTv0_n20_N11S20731C6_ntD0Ev)();
extern void ABISELECT(_ZThn296_N11S20731C6_ntD0Ev,_ZThn156_N11S20731C6_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__11S20731C6_nt__8S20731C2[] = {
  0,
  ABISELECT(-296,-156),
  ABISELECT(16,8),
  ABISELECT(-47,-23),
  ABISELECT(-296,-156),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S20731C6_ntD1Ev,_ZTv0_n20_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S20731C6_ntD0Ev,_ZTv0_n20_N11S20731C6_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n80_N11S20731C6_ntD1Ev,_ZTv0_n40_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZThn328_N11S20731C6_ntD1Ev,_ZThn172_N11S20731C6_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N11S20731C6_ntD0Ev,_ZTv0_n40_N11S20731C6_ntD0Ev)();
extern void ABISELECT(_ZThn328_N11S20731C6_ntD0Ev,_ZThn172_N11S20731C6_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__11S20731C6_nt__8S20731C2[] = {
  ABISELECT(-328,-172),
  ABISELECT(40,20),
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-79,-39),
  ABISELECT(-328,-172),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N11S20731C6_ntD1Ev,_ZTv0_n40_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N11S20731C6_ntD0Ev,_ZTv0_n40_N11S20731C6_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__11S20731C6_nt__8S20731C2[] = {
  ABISELECT(-87,-43),
  ABISELECT(-336,-176),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N11S20731C6_ntD1Ev,_ZTv0_n16_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZTv0_n32_N11S20731C6_ntD0Ev,_ZTv0_n16_N11S20731C6_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__11S20731C6_nt__8S20731C2[] = {
  ABISELECT(336,176),
  ABISELECT(392,204),
  0,
  ABISELECT(264,140),
  ABISELECT(24,12),
  ABISELECT(273,145),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20731C6_ntD1Ev,_ZTv0_n16_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20731C6_ntD0Ev,_ZTv0_n16_N11S20731C6_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A6__11S20731C6_nt__8S20731C2[] = {
  ABISELECT(-119,-59),
  ABISELECT(-368,-192),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A7__11S20731C6_nt__8S20731C2[] = {
  ABISELECT(-103,-51),
  ABISELECT(-352,-184),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__8S20731C2[] = {
  ABISELECT(9,5),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void _ZN12S20731C13_ntD1Ev();
extern void _ZN12S20731C13_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__8S20731C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C13_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C13_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C13_nt__A2__8S20731C2[] = {
  ABISELECT(-7,-3),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n48_N12S20731C13_ntD1Ev,_ZTv0_n24_N12S20731C13_ntD1Ev)();
extern void ABISELECT(_ZThn16_N12S20731C13_ntD1Ev,_ZThn8_N12S20731C13_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N12S20731C13_ntD0Ev,_ZTv0_n24_N12S20731C13_ntD0Ev)();
extern void ABISELECT(_ZThn16_N12S20731C13_ntD0Ev,_ZThn8_N12S20731C13_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__12S20731C13_nt__8S20731C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-23,-11),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C13_ntD1Ev,_ZTv0_n24_N12S20731C13_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C13_ntD0Ev,_ZTv0_n24_N12S20731C13_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C13_ntD1Ev,_ZTv0_n12_N12S20731C13_ntD1Ev)();
extern void ABISELECT(_ZThn56_N12S20731C13_ntD1Ev,_ZThn28_N12S20731C13_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C13_ntD0Ev,_ZTv0_n12_N12S20731C13_ntD0Ev)();
extern void ABISELECT(_ZThn56_N12S20731C13_ntD0Ev,_ZThn28_N12S20731C13_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C13_nt__8S20731C2[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C13_ntD1Ev,_ZTv0_n12_N12S20731C13_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C13_ntD0Ev,_ZTv0_n12_N12S20731C13_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A1__12S20731C13_nt__8S20731C2[] = {
  ABISELECT(9,5),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C13_nt__8S20731C2[] = {
  ABISELECT(-31,-15),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__A1__8S20731C2[] = {
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-23,-11),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt__A1__8S20731C2[] = {
  ABISELECT(-23,-11),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__A1__8S20731C2[] = {
  ABISELECT(-31,-15),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt__A3__8S20731C2[] = {
  ABISELECT(-31,-15),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZThn40_N11S20731C9_ntD1Ev,_ZThn20_N11S20731C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
extern void ABISELECT(_ZThn40_N11S20731C9_ntD0Ev,_ZThn20_N11S20731C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt__A1__8S20731C2[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt__A1__8S20731C2[] = {
  ABISELECT(9,5),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt__A1__8S20731C2[] = {
  ABISELECT(-31,-15),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
extern void _ZN12S20731C16_ntD1Ev();
extern void _ZN12S20731C16_ntD0Ev();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__8S20731C2[] = {
  ABISELECT(16,8),
  ABISELECT(-47,-23),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C16_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C16_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C16_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C16_nt__A7__8S20731C2[] = {
  ABISELECT(-47,-23),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev)();
extern void ABISELECT(_ZThn16_N12S20731C16_ntD1Ev,_ZThn8_N12S20731C16_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev)();
extern void ABISELECT(_ZThn16_N12S20731C16_ntD0Ev,_ZThn8_N12S20731C16_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C16_nt__8S20731C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C16_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev)();
extern void _ZN12S20731C17_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev)();
extern void _ZN12S20731C17_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__8S20731C2[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-63,-31),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C17_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C17_ntD1Ev,_ZTv0_n20_N12S20731C17_ntD1Ev)();
extern void ABISELECT(_ZTv0_n40_N12S20731C17_ntD0Ev,_ZTv0_n20_N12S20731C17_ntD0Ev)();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C17_nt__8S20731C2[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-47,-23),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI12S20731C17_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C17_ntD1Ev,_ZTv0_n20_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C17_ntD0Ev,_ZTv0_n20_N12S20731C17_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void _ZN12S20731C18_ntD1Ev();
extern void _ZN12S20731C18_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__8S20731C2[] = {
  ABISELECT(40,20),
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-79,-39),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C18_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C18_ntD0Ev,
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt12S20731C18_nt__A3__8S20731C2[] = {
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-79,-39),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt12S20731C18_nt__A3__8S20731C2[] = {
  ABISELECT(-79,-39),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__8S20731C2[] = {
  ABISELECT(-87,-43),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt12S20731C18_nt__A8__8S20731C2[] = {
  ABISELECT(-87,-43),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt12S20731C18_nt__A3__8S20731C2[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt12S20731C18_nt__A3__8S20731C2[] = {
  ABISELECT(9,5),
  ABISELECT(88,44),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt12S20731C18_nt__A3__8S20731C2[] = {
  ABISELECT(-87,-43),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A7__8S20731C2[] = {
  ABISELECT(-103,-51),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C18_nt__A10__8S20731C2[] = {
  ABISELECT(-103,-51),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C18_ntD1Ev,_ZTv0_n20_N12S20731C18_ntD1Ev)();
extern void ABISELECT(_ZTv0_n40_N12S20731C18_ntD0Ev,_ZTv0_n20_N12S20731C18_ntD0Ev)();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C18_nt__8S20731C2[] = {
  0,
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-47,-23),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C18_ntD1Ev,_ZTv0_n20_N12S20731C18_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C18_ntD0Ev,_ZTv0_n20_N12S20731C18_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N12S20731C18_ntD1Ev,_ZTv0_n12_N12S20731C18_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N12S20731C18_ntD0Ev,_ZTv0_n12_N12S20731C18_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C18_nt__8S20731C2[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C18_ntD1Ev,_ZTv0_n12_N12S20731C18_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C18_ntD0Ev,_ZTv0_n12_N12S20731C18_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A1__12S20731C18_nt__8S20731C2[] = {
  ABISELECT(9,5),
  ABISELECT(88,44),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C18_nt__8S20731C2[] = {
  ABISELECT(-87,-43),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C18_ntD1Ev,_ZTv0_n16_N12S20731C18_ntD1Ev)();
extern void ABISELECT(_ZTv0_n32_N12S20731C18_ntD0Ev,_ZTv0_n16_N12S20731C18_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C18_nt__8S20731C2[] = {
  ABISELECT(336,176),
  ABISELECT(392,204),
  0,
  ABISELECT(264,140),
  ABISELECT(352,184),
  ABISELECT(273,145),
  ABISELECT(352,184),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C18_ntD1Ev,_ZTv0_n16_N12S20731C18_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C18_ntD0Ev,_ZTv0_n16_N12S20731C18_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A1__12S20731C18_nt__8S20731C2[] = {
  ABISELECT(-119,-59),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A__12S20731C18_nt__8S20731C2[] = {
  ABISELECT(-103,-51),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C19_ntD1Ev,_ZTv0_n16_N12S20731C19_ntD1Ev)();
extern void _ZN12S20731C19_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C19_ntD0Ev,_ZTv0_n16_N12S20731C19_ntD0Ev)();
extern void _ZN12S20731C19_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__8S20731C2[] = {
  ABISELECT(336,176),
  ABISELECT(392,204),
  0,
  ABISELECT(264,140),
  0,
  ABISELECT(273,145),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C19_ntD1Ev,_ZTv0_n16_N12S20731C19_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C19_ntD0Ev,_ZTv0_n16_N12S20731C19_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__12S20731C19_nt__8S20731C2[] = {
  ABISELECT(9,5),
  ABISELECT(-264,-140),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__12S20731C19_nt__8S20731C2[] = {
  ABISELECT(-119,-59),
  ABISELECT(-392,-204),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C19_ntD1Ev,_ZTv0_n12_N12S20731C19_ntD1Ev)();
extern void ABISELECT(_ZThn336_N12S20731C19_ntD1Ev,_ZThn176_N12S20731C19_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C19_ntD0Ev,_ZTv0_n12_N12S20731C19_ntD0Ev)();
extern void ABISELECT(_ZThn336_N12S20731C19_ntD0Ev,_ZThn176_N12S20731C19_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C19_nt__8S20731C2[] = {
  ABISELECT(-336,-176),
  ABISELECT(-336,-176),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C19_ntD1Ev,_ZTv0_n12_N12S20731C19_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C19_ntD0Ev,_ZTv0_n12_N12S20731C19_ntD0Ev),
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt__A4__8S20731C2[] = {
  ABISELECT(273,145),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A6__8S20731C2[] = {
  ABISELECT(-119,-59),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt__A9__8S20731C2[] = {
  ABISELECT(-119,-59),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void _ZN12S20731C21_ntD1Ev();
extern void _ZN12S20731C21_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C21_nt__8S20731C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-408,-212),
  ABISELECT(-408,-212),
  ABISELECT(-56,-28),
  ABISELECT(-72,-36),
  ABISELECT(-88,-44),
  ABISELECT(-112,-56),
  ABISELECT(-128,-64),
  ABISELECT(-144,-72),
  ABISELECT(-72,-36),
  ABISELECT(-135,-67),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C21_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C21_ntD0Ev,
};
extern void _ZN11S20731C7_ntD1Ev();
extern void _ZN11S20731C7_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-408,-212),
  ABISELECT(-408,-212),
  ABISELECT(-56,-28),
  ABISELECT(-72,-36),
  ABISELECT(-88,-44),
  ABISELECT(-112,-56),
  ABISELECT(-128,-64),
  ABISELECT(-144,-72),
  ABISELECT(-72,-36),
  ABISELECT(-135,-67),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C7_ntD0Ev,
};
extern void _ZN11S20731C8_ntD1Ev();
extern void _ZN11S20731C8_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt11S20731C7_nt12S20731C21_nt__A2__8S20731C2[] = {
  ABISELECT(-144,-72),
  ABISELECT(-72,-36),
  ABISELECT(-135,-67),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C8_ntD0Ev,
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A4__8S20731C2[] = {
  ABISELECT(-144,-72),
  ABISELECT(-72,-36),
  ABISELECT(-135,-67),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A5__8S20731C2[] = {
  ABISELECT(-135,-67),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A8__8S20731C2[] = {
  ABISELECT(-143,-71),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A11__8S20731C2[] = {
  ABISELECT(-143,-71),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A4__8S20731C2[] = {
  ABISELECT(72,36),
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A4__8S20731C2[] = {
  ABISELECT(9,5),
  ABISELECT(144,72),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A4__8S20731C2[] = {
  ABISELECT(-143,-71),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C8_nt11S20731C7_nt12S20731C21_nt__A2__8S20731C2[] = {
  ABISELECT(72,36),
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C8_nt11S20731C7_nt12S20731C21_nt__A2__8S20731C2[] = {
  ABISELECT(9,5),
  ABISELECT(144,72),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt11S20731C7_nt12S20731C21_nt__A2__8S20731C2[] = {
  ABISELECT(-143,-71),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
extern void _ZN12S20731C14_ntD1Ev();
extern void _ZN12S20731C14_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(-144,-76),
  ABISELECT(-160,-84),
  ABISELECT(-104,-56),
  ABISELECT(-167,-87),
  ABISELECT(-176,-92),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C14_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C14_ntD0Ev,
};
extern void _ZN11S20731C8_ntD1Ev();
extern void _ZN11S20731C8_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A3__8S20731C2[] = {
  ABISELECT(-184,-96),
  ABISELECT(-112,-60),
  ABISELECT(-175,-91),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C8_ntD0Ev,
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A5__8S20731C2[] = {
  ABISELECT(-184,-96),
  ABISELECT(-112,-60),
  ABISELECT(-175,-91),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A6__8S20731C2[] = {
  ABISELECT(-175,-91),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A9__8S20731C2[] = {
  ABISELECT(-183,-95),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A12__8S20731C2[] = {
  ABISELECT(-183,-95),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A5__8S20731C2[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A5__8S20731C2[] = {
  ABISELECT(9,5),
  ABISELECT(184,96),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A5__8S20731C2[] = {
  ABISELECT(-183,-95),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A3__8S20731C2[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A3__8S20731C2[] = {
  ABISELECT(9,5),
  ABISELECT(184,96),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A3__8S20731C2[] = {
  ABISELECT(-183,-95),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(9,5),
  ABISELECT(176,92),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
extern void ABISELECT(_ZThn8_N12S20731C14_ntD1Ev,_ZThn4_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn8_N12S20731C14_ntD0Ev,_ZThn4_N12S20731C14_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(-184,-96),
  ABISELECT(-112,-60),
  ABISELECT(-175,-91),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N12S20731C14_ntD1Ev,_ZThn4_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N12S20731C14_ntD0Ev,_ZThn4_N12S20731C14_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__A1__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(104,56),
  ABISELECT(104,56),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(-183,-95),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
extern void ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(160,84),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-7,-3),
  ABISELECT(160,84),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(144,76),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-23,-11),
  ABISELECT(144,76),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(-31,-15),
  ABISELECT(136,72),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C7_nt12S20731C21_nt__A10__8S20731C2[] = {
  ABISELECT(-207,-111),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C7_nt12S20731C21_nt__A13__8S20731C2[] = {
  ABISELECT(-207,-111),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void _ZN12S20731C15_ntD1Ev();
extern void _ZN12S20731C15_ntD0Ev();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(-104,-60),
  ABISELECT(-496,-264),
  ABISELECT(-496,-264),
  ABISELECT(-232,-124),
  ABISELECT(-144,-80),
  ABISELECT(-160,-88),
  ABISELECT(-160,-88),
  ABISELECT(-176,-96),
  ABISELECT(-223,-119),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C15_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C15_nt11S20731C7_nt12S20731C21_nt__A11__8S20731C2[] = {
  ABISELECT(-223,-119),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt11S20731C7_nt12S20731C21_nt__A14__8S20731C2[] = {
  ABISELECT(-223,-119),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev)();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  0,
  ABISELECT(176,96),
  ABISELECT(16,8),
  ABISELECT(-47,-23),
  ABISELECT(176,96),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-63,-31),
  ABISELECT(160,88),
  ABISELECT(160,88),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(144,80),
  ABISELECT(40,20),
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-79,-39),
  ABISELECT(144,80),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A2__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(9,5),
  ABISELECT(232,124),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(-87,-43),
  ABISELECT(136,76),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(336,176),
  ABISELECT(392,204),
  0,
  ABISELECT(264,140),
  ABISELECT(496,264),
  ABISELECT(273,145),
  ABISELECT(496,264),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A2__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(-119,-59),
  ABISELECT(104,60),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(-103,-51),
  ABISELECT(120,68),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C7_ntD1Ev,_ZTv0_n12_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S20731C7_ntD0Ev,_ZTv0_n12_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-63,-31),
  ABISELECT(72,36),
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C7_ntD1Ev,_ZTv0_n12_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C7_ntD0Ev,_ZTv0_n12_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(9,5),
  ABISELECT(144,72),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(-143,-71),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZTv0_n56_N11S20731C7_ntD1Ev,_ZTv0_n28_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZTv0_n56_N11S20731C7_ntD0Ev,_ZTv0_n28_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(128,64),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-7,-3),
  ABISELECT(128,64),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S20731C7_ntD1Ev,_ZTv0_n28_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S20731C7_ntD0Ev,_ZTv0_n28_N11S20731C7_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n48_N11S20731C7_ntD1Ev,_ZTv0_n24_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZTv0_n48_N11S20731C7_ntD0Ev,_ZTv0_n24_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__A1__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(112,56),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-23,-11),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N11S20731C7_ntD1Ev,_ZTv0_n24_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N11S20731C7_ntD0Ev,_ZTv0_n24_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__A1__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(-31,-15),
  ABISELECT(104,52),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZThn32_N11S20731C7_ntD1Ev,_ZThn20_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn32_N11S20731C7_ntD0Ev,_ZThn20_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C14_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(-144,-76),
  ABISELECT(-160,-84),
  ABISELECT(-104,-56),
  ABISELECT(-167,-87),
  ABISELECT(-176,-92),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N11S20731C7_ntD1Ev,_ZThn20_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N11S20731C7_ntD0Ev,_ZThn20_N11S20731C7_ntD0Ev),
};
extern void ABISELECT(_ZThn40_N11S20731C7_ntD1Ev,_ZThn24_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn40_N11S20731C7_ntD0Ev,_ZThn24_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt12S20731C14_nt__A1__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(-184,-96),
  ABISELECT(-112,-60),
  ABISELECT(-175,-91),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N11S20731C7_ntD1Ev,_ZThn24_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N11S20731C7_ntD0Ev,_ZThn24_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(-183,-95),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(-207,-111),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZThn88_N11S20731C7_ntD1Ev,_ZThn52_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn88_N11S20731C7_ntD0Ev,_ZThn52_N11S20731C7_ntD0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(-104,-60),
  ABISELECT(-496,-264),
  ABISELECT(-496,-264),
  ABISELECT(-232,-124),
  ABISELECT(-144,-80),
  ABISELECT(-160,-88),
  ABISELECT(-160,-88),
  ABISELECT(-176,-96),
  ABISELECT(-223,-119),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N11S20731C7_ntD1Ev,_ZThn52_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N11S20731C7_ntD0Ev,_ZThn52_N11S20731C7_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N11S20731C7_ntD1Ev,_ZTv0_n20_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZTv0_n40_N11S20731C7_ntD0Ev,_ZTv0_n20_N11S20731C7_ntD0Ev)();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  0,
  ABISELECT(88,44),
  ABISELECT(16,8),
  ABISELECT(-47,-23),
  ABISELECT(88,44),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S20731C7_ntD1Ev,_ZTv0_n20_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S20731C7_ntD0Ev,_ZTv0_n20_N11S20731C7_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n80_N11S20731C7_ntD1Ev,_ZTv0_n40_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZTv0_n80_N11S20731C7_ntD0Ev,_ZTv0_n40_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(56,28),
  ABISELECT(40,20),
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-79,-39),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N11S20731C7_ntD1Ev,_ZTv0_n40_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N11S20731C7_ntD0Ev,_ZTv0_n40_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(-87,-43),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N11S20731C7_ntD1Ev,_ZTv0_n16_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZTv0_n32_N11S20731C7_ntD0Ev,_ZTv0_n16_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(336,176),
  ABISELECT(392,204),
  0,
  ABISELECT(264,140),
  ABISELECT(408,212),
  ABISELECT(273,145),
  ABISELECT(408,212),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20731C7_ntD1Ev,_ZTv0_n16_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20731C7_ntD0Ev,_ZTv0_n16_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A6__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(-119,-59),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A7__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[] = {
  ABISELECT(-103,-51),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void _ZN12S20731C15_ntD1Ev();
extern void _ZN12S20731C15_ntD0Ev();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt12S20731C21_nt__A2__8S20731C2[] = {
  ABISELECT(-224,-120),
  ABISELECT(-616,-324),
  ABISELECT(-616,-324),
  ABISELECT(-352,-184),
  ABISELECT(-264,-140),
  ABISELECT(-280,-148),
  ABISELECT(-280,-148),
  ABISELECT(-296,-156),
  ABISELECT(-343,-179),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C15_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C15_nt12S20731C21_nt__A12__8S20731C2[] = {
  ABISELECT(-343,-179),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt12S20731C21_nt__A15__8S20731C2[] = {
  ABISELECT(-343,-179),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev)();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C15_nt12S20731C21_nt__A2__8S20731C2[] = {
  0,
  ABISELECT(296,156),
  ABISELECT(16,8),
  ABISELECT(-47,-23),
  ABISELECT(296,156),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__12S20731C15_nt12S20731C21_nt__A2__8S20731C2[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-63,-31),
  ABISELECT(280,148),
  ABISELECT(280,148),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__12S20731C15_nt12S20731C21_nt__A2__8S20731C2[] = {
  ABISELECT(264,140),
  ABISELECT(40,20),
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-79,-39),
  ABISELECT(264,140),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A2__12S20731C15_nt12S20731C21_nt__A2__8S20731C2[] = {
  ABISELECT(9,5),
  ABISELECT(352,184),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt12S20731C21_nt__A2__8S20731C2[] = {
  ABISELECT(-87,-43),
  ABISELECT(256,136),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C15_nt12S20731C21_nt__A2__8S20731C2[] = {
  ABISELECT(336,176),
  ABISELECT(392,204),
  0,
  ABISELECT(264,140),
  ABISELECT(616,324),
  ABISELECT(273,145),
  ABISELECT(616,324),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A2__12S20731C15_nt12S20731C21_nt__A2__8S20731C2[] = {
  ABISELECT(-119,-59),
  ABISELECT(224,120),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt12S20731C21_nt__A2__8S20731C2[] = {
  ABISELECT(-103,-51),
  ABISELECT(240,128),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C21_nt__A16__8S20731C2[] = {
  ABISELECT(-359,-187),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n56_N12S20731C21_ntD1Ev,_ZTv0_n28_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZTv0_n56_N12S20731C21_ntD0Ev,_ZTv0_n28_N12S20731C21_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__12S20731C21_nt__8S20731C2[] = {
  ABISELECT(128,64),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-7,-3),
  ABISELECT(128,64),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C21_ntD1Ev,_ZTv0_n28_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C21_ntD0Ev,_ZTv0_n28_N12S20731C21_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n48_N12S20731C21_ntD1Ev,_ZTv0_n24_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZTv0_n48_N12S20731C21_ntD0Ev,_ZTv0_n24_N12S20731C21_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__12S20731C21_nt__8S20731C2[] = {
  ABISELECT(112,56),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-23,-11),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C21_ntD1Ev,_ZTv0_n24_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C21_ntD0Ev,_ZTv0_n24_N12S20731C21_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C21_ntD1Ev,_ZTv0_n12_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N12S20731C21_ntD0Ev,_ZTv0_n12_N12S20731C21_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__12S20731C21_nt__8S20731C2[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-63,-31),
  ABISELECT(72,36),
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C21_ntD1Ev,_ZTv0_n12_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C21_ntD0Ev,_ZTv0_n12_N12S20731C21_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A1__12S20731C21_nt__8S20731C2[] = {
  ABISELECT(9,5),
  ABISELECT(144,72),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C21_nt__8S20731C2[] = {
  ABISELECT(-31,-15),
  ABISELECT(104,52),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt__A1__12S20731C21_nt__8S20731C2[] = {
  ABISELECT(-143,-71),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
extern void ABISELECT(_ZThn32_N12S20731C21_ntD1Ev,_ZThn20_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn32_N12S20731C21_ntD0Ev,_ZThn20_N12S20731C21_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C14_nt11S20731C7_nt__12S20731C21_nt__8S20731C2[] = {
  ABISELECT(-144,-76),
  ABISELECT(-160,-84),
  ABISELECT(-104,-56),
  ABISELECT(-167,-87),
  ABISELECT(-176,-92),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N12S20731C21_ntD1Ev,_ZThn20_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N12S20731C21_ntD0Ev,_ZThn20_N12S20731C21_ntD0Ev),
};
extern void ABISELECT(_ZThn40_N12S20731C21_ntD1Ev,_ZThn24_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn40_N12S20731C21_ntD0Ev,_ZThn24_N12S20731C21_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__12S20731C21_nt__8S20731C2[] = {
  ABISELECT(-184,-96),
  ABISELECT(-112,-60),
  ABISELECT(-175,-91),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N12S20731C21_ntD1Ev,_ZThn24_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N12S20731C21_ntD0Ev,_ZThn24_N12S20731C21_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__12S20731C21_nt__8S20731C2[] = {
  ABISELECT(-183,-95),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C7_nt__A3__12S20731C21_nt__8S20731C2[] = {
  ABISELECT(-207,-111),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
extern void ABISELECT(_ZThn88_N12S20731C21_ntD1Ev,_ZThn52_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn88_N12S20731C21_ntD0Ev,_ZThn52_N12S20731C21_ntD0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt11S20731C7_nt__12S20731C21_nt__8S20731C2[] = {
  ABISELECT(-104,-60),
  ABISELECT(-496,-264),
  ABISELECT(-496,-264),
  ABISELECT(-232,-124),
  ABISELECT(-144,-80),
  ABISELECT(-160,-88),
  ABISELECT(-160,-88),
  ABISELECT(-176,-96),
  ABISELECT(-223,-119),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N12S20731C21_ntD1Ev,_ZThn52_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N12S20731C21_ntD0Ev,_ZThn52_N12S20731C21_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N12S20731C21_ntD1Ev,_ZTv0_n20_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZTv0_n40_N12S20731C21_ntD0Ev,_ZTv0_n20_N12S20731C21_ntD0Ev)();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C21_nt__8S20731C2[] = {
  0,
  ABISELECT(88,44),
  ABISELECT(16,8),
  ABISELECT(-47,-23),
  ABISELECT(88,44),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C21_ntD1Ev,_ZTv0_n20_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C21_ntD0Ev,_ZTv0_n20_N12S20731C21_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n80_N12S20731C21_ntD1Ev,_ZTv0_n40_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZTv0_n80_N12S20731C21_ntD0Ev,_ZTv0_n40_N12S20731C21_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__12S20731C21_nt__8S20731C2[] = {
  ABISELECT(56,28),
  ABISELECT(40,20),
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-79,-39),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C21_ntD1Ev,_ZTv0_n40_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C21_ntD0Ev,_ZTv0_n40_N12S20731C21_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__12S20731C21_nt__8S20731C2[] = {
  ABISELECT(-87,-43),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C21_ntD1Ev,_ZTv0_n16_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZTv0_n32_N12S20731C21_ntD0Ev,_ZTv0_n16_N12S20731C21_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C21_nt__8S20731C2[] = {
  ABISELECT(336,176),
  ABISELECT(392,204),
  0,
  ABISELECT(264,140),
  ABISELECT(408,212),
  ABISELECT(273,145),
  ABISELECT(408,212),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C21_ntD1Ev,_ZTv0_n16_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C21_ntD0Ev,_ZTv0_n16_N12S20731C21_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A6__12S20731C21_nt__8S20731C2[] = {
  ABISELECT(-119,-59),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A7__12S20731C21_nt__8S20731C2[] = {
  ABISELECT(-103,-51),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
extern void ABISELECT(_ZThn208_N12S20731C21_ntD1Ev,_ZThn112_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn208_N12S20731C21_ntD0Ev,_ZThn112_N12S20731C21_ntD0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt__A1__12S20731C21_nt__8S20731C2[] = {
  ABISELECT(-224,-120),
  ABISELECT(-616,-324),
  ABISELECT(-616,-324),
  ABISELECT(-352,-184),
  ABISELECT(-264,-140),
  ABISELECT(-280,-148),
  ABISELECT(-280,-148),
  ABISELECT(-296,-156),
  ABISELECT(-343,-179),
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N12S20731C21_ntD1Ev,_ZThn112_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N12S20731C21_ntD0Ev,_ZThn112_N12S20731C21_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A__12S20731C21_nt__8S20731C2[] = {
  ABISELECT(-359,-187),
  ABISELECT(-224,-120),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
static  VTT_ENTRY vtt_S20731C2[] = {
  {&(_ZTV8S20731C2[17]),  17,217},
  {&(_tg__ZTV12S20731C20_nt__8S20731C2[15]),  15,17},
  {&(_tg__ZTV12S20731C21_nt__12S20731C20_nt__8S20731C2[15]),  15,17},
  {&(_tg__ZTV12S20731C13_nt__12S20731C20_nt__8S20731C2[7]),  7,9},
  {&(_tg__ZTV11S20731C9_nt__12S20731C20_nt__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C17_nt__12S20731C20_nt__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C10_nt__A1__12S20731C20_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C20_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C14_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt__8S20731C2[7]),  7,9},
  {&(_tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt__8S20731C2[5]),  5,7},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A2__12S20731C20_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C7_nt12S20731C21_nt__A3__12S20731C20_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt__8S20731C2[11]),  11,14},
  {&(_tg__ZTV12S20731C16_nt__12S20731C20_nt__8S20731C2[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__12S20731C20_nt__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__12S20731C20_nt__8S20731C2[10]),  10,12},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__12S20731C20_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C20_nt__8S20731C2[15]),  15,17},
  {&(_tg__ZTV12S20731C20_nt__8S20731C2[15]),  15,17},
  {&(_tg__ZTV12S20731C12_nt__A6__12S20731C20_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A7__12S20731C20_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt12S20731C21_nt__A1__12S20731C20_nt__8S20731C2[11]),  11,14},
  {&(_tg__ZTV12S20731C10_nt12S20731C21_nt__A12__12S20731C20_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C17_nt__A__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C16_nt__12S20731C17_nt__A__8S20731C2[6]),  6,9},
  {&(_tg__ZTV11S20731C4_nt__12S20731C17_nt__A__8S20731C2[3]),  3,5},
  {&(_ZTV8S20731C2[121]),  121,217},
  {&(_ZTV8S20731C2[42]),  42,217},
  {&(_ZTV8S20731C2[86]),  86,217},
  {&(_ZTV8S20731C2[47]),  47,217},
  {&(_ZTV8S20731C2[93]),  93,217},
  {&(_ZTV8S20731C2[101]),  101,217},
  {&(_ZTV8S20731C2[106]),  106,217},
  {&(_ZTV8S20731C2[54]),  54,217},
  {&(_ZTV8S20731C2[61]),  61,217},
  {&(_ZTV8S20731C2[66]),  66,217},
  {&(_ZTV8S20731C2[69]),  69,217},
  {&(_ZTV8S20731C2[80]),  80,217},
  {&(_ZTV8S20731C2[112]),  112,217},
  {&(_ZTV8S20731C2[121]),  121,217},
  {&(_ZTV8S20731C2[133]),  133,217},
  {&(_ZTV8S20731C2[138]),  138,217},
  {&(_ZTV8S20731C2[17]),  17,217},
  {&(_ZTV8S20731C2[17]),  17,217},
  {&(_ZTV8S20731C2[144]),  144,217},
  {&(_ZTV8S20731C2[141]),  141,217},
  {&(_ZTV8S20731C2[159]),  159,217},
  {&(_ZTV8S20731C2[164]),  164,217},
  {&(_ZTV8S20731C2[171]),  171,217},
  {&(_ZTV8S20731C2[178]),  178,217},
  {&(_ZTV8S20731C2[183]),  183,217},
  {&(_ZTV8S20731C2[186]),  186,217},
  {&(_ZTV8S20731C2[197]),  197,217},
  {&(_ZTV8S20731C2[211]),  211,217},
  {&(_ZTV8S20731C2[217]),  217,217},
  {&(_ZTV8S20731C2[25]),  25,217},
  {&(_tg__ZTV11S20731C6_nt__8S20731C2[13]),  13,15},
  {&(_tg__ZTV11S20731C7_nt11S20731C6_nt__8S20731C2[13]),  13,15},
  {&(_tg__ZTV11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C2[5]),  5,7},
  {&(_tg__ZTV11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C2[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C2[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__A1__8S20731C2[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C2[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C2[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C2[7]),  7,9},
  {&(_tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A1__8S20731C2[5]),  5,7},
  {&(_tg__ZTV11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C2[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C2[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A4__8S20731C2[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C2[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C2[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A1__8S20731C2[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A1__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A1__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV11S20731C8_nt__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C2[5]),  5,7},
  {&(_tg__ZTV11S20731C4_nt__A1__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C2[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C2[7]),  7,9},
  {&(_tg__ZTV11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C7_nt11S20731C6_nt__A3__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C7_nt11S20731C6_nt__A5__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C2[11]),  11,14},
  {&(_tg__ZTV12S20731C12_nt12S20731C15_nt11S20731C7_nt11S20731C6_nt__A4__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt11S20731C7_nt11S20731C6_nt__A6__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C2[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C2[10]),  10,12},
  {&(_tg__ZTV12S20731C10_nt__A2__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C2[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C2[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A2__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C17_nt__11S20731C7_nt11S20731C6_nt__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C10_nt__11S20731C7_nt11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__11S20731C7_nt11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__11S20731C7_nt11S20731C6_nt__8S20731C2[7]),  7,9},
  {&(_tg__ZTV11S20731C9_nt__A1__11S20731C7_nt11S20731C6_nt__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__A1__11S20731C7_nt11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C14_nt__11S20731C7_nt11S20731C6_nt__8S20731C2[7]),  7,9},
  {&(_tg__ZTV11S20731C8_nt12S20731C14_nt__A1__11S20731C7_nt11S20731C6_nt__8S20731C2[5]),  5,7},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__A__11S20731C7_nt11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt__11S20731C7_nt11S20731C6_nt__8S20731C2[11]),  11,14},
  {&(_tg__ZTV12S20731C16_nt__11S20731C7_nt11S20731C6_nt__8S20731C2[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__11S20731C7_nt11S20731C6_nt__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__11S20731C7_nt11S20731C6_nt__8S20731C2[10]),  10,12},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__11S20731C7_nt11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__11S20731C7_nt11S20731C6_nt__8S20731C2[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__11S20731C7_nt11S20731C6_nt__8S20731C2[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A6__11S20731C7_nt11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A7__11S20731C7_nt11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C17_nt__11S20731C6_nt__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C10_nt__11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt__11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__11S20731C6_nt__8S20731C2[7]),  7,9},
  {&(_tg__ZTV11S20731C9_nt__A1__11S20731C6_nt__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__A1__11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C14_nt11S20731C7_nt__11S20731C6_nt__8S20731C2[7]),  7,9},
  {&(_tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__11S20731C6_nt__8S20731C2[5]),  5,7},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C7_nt__A3__11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt11S20731C7_nt__11S20731C6_nt__8S20731C2[11]),  11,14},
  {&(_tg__ZTV12S20731C16_nt__11S20731C6_nt__8S20731C2[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__11S20731C6_nt__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__11S20731C6_nt__8S20731C2[10]),  10,12},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__11S20731C6_nt__8S20731C2[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__11S20731C6_nt__8S20731C2[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A6__11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A7__11S20731C6_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C10_nt12S20731C13_nt__A2__8S20731C2[3]),  3,3},
  {&(_tg__ZTV11S20731C9_nt__12S20731C13_nt__8S20731C2[6]),  6,8},
  {&(_tg__ZTV11S20731C4_nt__12S20731C13_nt__8S20731C2[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__A1__12S20731C13_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C13_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV11S20731C9_nt__A1__8S20731C2[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt__A1__8S20731C2[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__A1__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt__A3__8S20731C2[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt__A1__8S20731C2[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt__A1__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt__A1__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__8S20731C2[4]),  4,7},
  {&(_tg__ZTV12S20731C10_nt12S20731C16_nt__A7__8S20731C2[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__12S20731C16_nt__8S20731C2[3]),  3,5},
  {&(_tg__ZTV12S20731C17_nt__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C16_nt__12S20731C17_nt__8S20731C2[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__8S20731C2[9]),  9,11},
  {&(_tg__ZTV11S20731C9_nt12S20731C18_nt__A3__8S20731C2[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt12S20731C18_nt__A3__8S20731C2[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt12S20731C18_nt__A8__8S20731C2[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt12S20731C18_nt__A3__8S20731C2[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt12S20731C18_nt__A3__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt12S20731C18_nt__A3__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A7__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C18_nt__A10__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__12S20731C18_nt__8S20731C2[6]),  6,9},
  {&(_tg__ZTV11S20731C4_nt__12S20731C18_nt__8S20731C2[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__A1__12S20731C18_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C18_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C18_nt__8S20731C2[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__12S20731C18_nt__8S20731C2[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A1__12S20731C18_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__A__12S20731C18_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__8S20731C2[8]),  8,10},
  {&(_tg__ZTV12S20731C10_nt__12S20731C19_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__8S20731C2[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__12S20731C19_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__12S20731C19_nt__8S20731C2[3]),  3,5},
  {&(_tg__ZTV12S20731C11_nt__A4__8S20731C2[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt__A6__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt__A9__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C21_nt__8S20731C2[13]),  13,15},
  {&(_tg__ZTV11S20731C7_nt12S20731C21_nt__A1__8S20731C2[13]),  13,15},
  {&(_tg__ZTV11S20731C8_nt11S20731C7_nt12S20731C21_nt__A2__8S20731C2[5]),  5,7},
  {&(_tg__ZTV11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A4__8S20731C2[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A5__8S20731C2[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A8__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A11__8S20731C2[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A4__8S20731C2[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A4__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A4__8S20731C2[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C8_nt11S20731C7_nt12S20731C21_nt__A2__8S20731C2[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C8_nt11S20731C7_nt12S20731C21_nt__A2__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt11S20731C7_nt12S20731C21_nt__A2__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[7]),  7,9},
  {&(_tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A3__8S20731C2[5]),  5,7},
  {&(_tg__ZTV11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A5__8S20731C2[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A6__8S20731C2[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A9__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A12__8S20731C2[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A5__8S20731C2[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A5__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A5__8S20731C2[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A3__8S20731C2[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A3__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A3__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[3]),  3,3},
  {&(_tg__ZTV11S20731C8_nt__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[5]),  5,7},
  {&(_tg__ZTV11S20731C4_nt__A1__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[7]),  7,9},
  {&(_tg__ZTV11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C7_nt12S20731C21_nt__A10__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C7_nt12S20731C21_nt__A13__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[11]),  11,14},
  {&(_tg__ZTV12S20731C12_nt12S20731C15_nt11S20731C7_nt12S20731C21_nt__A11__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt11S20731C7_nt12S20731C21_nt__A14__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[10]),  10,12},
  {&(_tg__ZTV12S20731C10_nt__A2__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A2__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C17_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C10_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[7]),  7,9},
  {&(_tg__ZTV11S20731C9_nt__A1__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__A1__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C14_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[7]),  7,9},
  {&(_tg__ZTV11S20731C8_nt12S20731C14_nt__A1__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[5]),  5,7},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__A__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[11]),  11,14},
  {&(_tg__ZTV12S20731C16_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[10]),  10,12},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A6__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A7__11S20731C7_nt12S20731C21_nt__A1__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt12S20731C21_nt__A2__8S20731C2[11]),  11,14},
  {&(_tg__ZTV12S20731C12_nt12S20731C15_nt12S20731C21_nt__A12__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt12S20731C21_nt__A15__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__12S20731C15_nt12S20731C21_nt__A2__8S20731C2[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt12S20731C21_nt__A2__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt12S20731C21_nt__A2__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__12S20731C15_nt12S20731C21_nt__A2__8S20731C2[10]),  10,12},
  {&(_tg__ZTV12S20731C10_nt__A2__12S20731C15_nt12S20731C21_nt__A2__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt12S20731C21_nt__A2__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt12S20731C21_nt__A2__8S20731C2[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt12S20731C21_nt__A2__8S20731C2[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A2__12S20731C15_nt12S20731C21_nt__A2__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt12S20731C21_nt__A2__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C21_nt__A16__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__12S20731C21_nt__8S20731C2[7]),  7,9},
  {&(_tg__ZTV11S20731C9_nt__12S20731C21_nt__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C17_nt__12S20731C21_nt__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C10_nt__A1__12S20731C21_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C21_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt__A1__12S20731C21_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C14_nt11S20731C7_nt__12S20731C21_nt__8S20731C2[7]),  7,9},
  {&(_tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__12S20731C21_nt__8S20731C2[5]),  5,7},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__12S20731C21_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C7_nt__A3__12S20731C21_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt11S20731C7_nt__12S20731C21_nt__8S20731C2[11]),  11,14},
  {&(_tg__ZTV12S20731C16_nt__12S20731C21_nt__8S20731C2[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__12S20731C21_nt__8S20731C2[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__12S20731C21_nt__8S20731C2[10]),  10,12},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__12S20731C21_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C21_nt__8S20731C2[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__12S20731C21_nt__8S20731C2[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A6__12S20731C21_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A7__12S20731C21_nt__8S20731C2[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt__A1__12S20731C21_nt__8S20731C2[11]),  11,14},
  {&(_tg__ZTV12S20731C10_nt__A__12S20731C21_nt__8S20731C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20731C2[];
extern  VTBL_ENTRY _ZTV8S20731C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20731C2[];
static VTBL_ENTRY alt_thunk_names98[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C19_ntD0Ev,_ZTv0_n12_N12S20731C19_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N12S20731C19_ntD0Ev,_ZThn176_N12S20731C19_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C19_ntD1Ev,_ZTv0_n12_N12S20731C19_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N12S20731C19_ntD1Ev,_ZThn176_N12S20731C19_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C19_ntD0Ev,_ZTv0_n16_N12S20731C19_ntD0Ev), // 
  (VTBL_ENTRY)_ZN12S20731C19_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C19_ntD1Ev,_ZTv0_n16_N12S20731C19_ntD1Ev), // 
  (VTBL_ENTRY)_ZN12S20731C19_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C16_ntD0Ev,_ZThn8_N12S20731C16_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C16_ntD1Ev,_ZThn8_N12S20731C16_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C13_ntD0Ev,_ZTv0_n12_N12S20731C13_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N12S20731C13_ntD0Ev,_ZThn28_N12S20731C13_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C13_ntD1Ev,_ZTv0_n12_N12S20731C13_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N12S20731C13_ntD1Ev,_ZThn28_N12S20731C13_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C13_ntD0Ev,_ZTv0_n24_N12S20731C13_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C13_ntD0Ev,_ZThn8_N12S20731C13_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C13_ntD1Ev,_ZTv0_n24_N12S20731C13_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C13_ntD1Ev,_ZThn8_N12S20731C13_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N11S20731C6_ntD0Ev,_ZTv0_n40_N11S20731C6_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N11S20731C6_ntD0Ev,_ZThn172_N11S20731C6_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N11S20731C6_ntD1Ev,_ZTv0_n40_N11S20731C6_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N11S20731C6_ntD1Ev,_ZThn172_N11S20731C6_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S20731C6_ntD0Ev,_ZTv0_n20_N11S20731C6_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N11S20731C6_ntD0Ev,_ZThn156_N11S20731C6_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S20731C6_ntD1Ev,_ZTv0_n20_N11S20731C6_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N11S20731C6_ntD1Ev,_ZThn156_N11S20731C6_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N11S20731C6_ntD0Ev,_ZTv0_n24_N11S20731C6_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N11S20731C6_ntD0Ev,_ZThn144_N11S20731C6_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N11S20731C6_ntD1Ev,_ZTv0_n24_N11S20731C6_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N11S20731C6_ntD1Ev,_ZThn144_N11S20731C6_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N11S20731C6_ntD0Ev,_ZTv0_n28_N11S20731C6_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N11S20731C6_ntD0Ev,_ZThn136_N11S20731C6_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N11S20731C6_ntD1Ev,_ZTv0_n28_N11S20731C6_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N11S20731C6_ntD1Ev,_ZThn136_N11S20731C6_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C6_ntD0Ev,_ZTv0_n12_N11S20731C6_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N11S20731C6_ntD0Ev,_ZThn164_N11S20731C6_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C6_ntD1Ev,_ZTv0_n12_N11S20731C6_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N11S20731C6_ntD1Ev,_ZThn164_N11S20731C6_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N11S20731C7_ntD0Ev,_ZTv0_n40_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N11S20731C7_ntD0Ev,_ZThn172_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N11S20731C7_ntD1Ev,_ZTv0_n40_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N11S20731C7_ntD1Ev,_ZThn172_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S20731C7_ntD0Ev,_ZTv0_n20_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N11S20731C7_ntD0Ev,_ZThn156_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S20731C7_ntD1Ev,_ZTv0_n20_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N11S20731C7_ntD1Ev,_ZThn156_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N11S20731C7_ntD0Ev,_ZTv0_n24_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N11S20731C7_ntD0Ev,_ZThn144_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N11S20731C7_ntD1Ev,_ZTv0_n24_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N11S20731C7_ntD1Ev,_ZThn144_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N11S20731C7_ntD0Ev,_ZTv0_n28_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N11S20731C7_ntD0Ev,_ZThn136_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N11S20731C7_ntD1Ev,_ZTv0_n28_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N11S20731C7_ntD1Ev,_ZThn136_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C7_ntD0Ev,_ZTv0_n12_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N11S20731C7_ntD0Ev,_ZThn164_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C7_ntD1Ev,_ZTv0_n12_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N11S20731C7_ntD1Ev,_ZThn164_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N12S20731C15_ntD0Ev,_ZThn120_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N12S20731C15_ntD1Ev,_ZThn120_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N12S20731C15_ntD0Ev,_ZThn112_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N12S20731C15_ntD1Ev,_ZThn112_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N12S20731C15_ntD0Ev,_ZThn104_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N12S20731C15_ntD1Ev,_ZThn104_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N12S20731C14_ntD0Ev,_ZThn124_N12S20731C14_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N12S20731C14_ntD1Ev,_ZThn124_N12S20731C14_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N12S20731C14_ntD0Ev,_ZThn116_N12S20731C14_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N12S20731C14_ntD1Ev,_ZThn116_N12S20731C14_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N12S20731C14_ntD0Ev,_ZThn144_N12S20731C14_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N12S20731C14_ntD1Ev,_ZThn144_N12S20731C14_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N11S20731C8_ntD0Ev,_ZThn140_N11S20731C8_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N11S20731C8_ntD0Ev,_ZThn164_N11S20731C8_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N11S20731C8_ntD1Ev,_ZThn140_N11S20731C8_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N11S20731C8_ntD1Ev,_ZThn164_N11S20731C8_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N11S20731C9_ntD0Ev,_ZThn20_N11S20731C9_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N11S20731C9_ntD0Ev,_ZThn140_N11S20731C9_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N11S20731C9_ntD0Ev,_ZThn164_N11S20731C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N11S20731C9_ntD1Ev,_ZThn20_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N11S20731C9_ntD1Ev,_ZThn140_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N11S20731C9_ntD1Ev,_ZThn164_N11S20731C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C17_ntD0Ev,_ZTv0_n20_N12S20731C17_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N12S20731C17_ntD0Ev,_ZThn164_N12S20731C17_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C17_ntD1Ev,_ZTv0_n20_N12S20731C17_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N12S20731C17_ntD1Ev,_ZThn164_N12S20731C17_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev), // 
  (VTBL_ENTRY)_ZN12S20731C17_ntD0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn328_N12S20731C17_ntD0Ev,_ZThn172_N12S20731C17_ntD0Ev),
  (VTBL_ENTRY)_ZN12S20731C17_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev), // 
  (VTBL_ENTRY)_ZN12S20731C17_ntD1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn328_N12S20731C17_ntD1Ev,_ZThn172_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)_ZN12S20731C17_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S20731C20_ntD0Ev,_ZTv0_n40_N12S20731C20_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N12S20731C20_ntD0Ev,_ZThn184_N12S20731C20_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S20731C20_ntD1Ev,_ZTv0_n40_N12S20731C20_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N12S20731C20_ntD1Ev,_ZThn184_N12S20731C20_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C20_ntD0Ev,_ZTv0_n20_N12S20731C20_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N12S20731C20_ntD0Ev,_ZThn168_N12S20731C20_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C20_ntD1Ev,_ZTv0_n20_N12S20731C20_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N12S20731C20_ntD1Ev,_ZThn168_N12S20731C20_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C20_ntD0Ev,_ZTv0_n12_N12S20731C20_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N12S20731C20_ntD0Ev,_ZThn176_N12S20731C20_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C20_ntD1Ev,_ZTv0_n12_N12S20731C20_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N12S20731C20_ntD1Ev,_ZThn176_N12S20731C20_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C20_ntD0Ev,_ZTv0_n24_N12S20731C20_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N12S20731C20_ntD0Ev,_ZThn156_N12S20731C20_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C20_ntD1Ev,_ZTv0_n24_N12S20731C20_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N12S20731C20_ntD1Ev,_ZThn156_N12S20731C20_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N12S20731C20_ntD0Ev,_ZTv0_n28_N12S20731C20_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N12S20731C20_ntD0Ev,_ZThn148_N12S20731C20_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N12S20731C20_ntD1Ev,_ZTv0_n28_N12S20731C20_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N12S20731C20_ntD1Ev,_ZThn148_N12S20731C20_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N12S20731C20_ntD0Ev,_ZTv0_n56_N12S20731C20_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N12S20731C20_ntD0Ev,_ZThn212_N12S20731C20_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N12S20731C20_ntD1Ev,_ZTv0_n56_N12S20731C20_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N12S20731C20_ntD1Ev,_ZThn212_N12S20731C20_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C20_ntD0Ev,_ZTv0_n16_N12S20731C20_ntD0Ev), // 
  (VTBL_ENTRY)_ZN12S20731C20_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C20_ntD1Ev,_ZTv0_n16_N12S20731C20_ntD1Ev), // 
  (VTBL_ENTRY)_ZN12S20731C20_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20731C2D0Ev,_ZTv0_n40_N8S20731C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S20731C2D0Ev,_ZThn184_N8S20731C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20731C2D1Ev,_ZTv0_n40_N8S20731C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S20731C2D1Ev,_ZThn184_N8S20731C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20731C2D0Ev,_ZTv0_n20_N8S20731C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S20731C2D0Ev,_ZThn168_N8S20731C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20731C2D1Ev,_ZTv0_n20_N8S20731C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S20731C2D1Ev,_ZThn168_N8S20731C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20731C2D0Ev,_ZTv0_n24_N8S20731C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N8S20731C2D0Ev,_ZThn156_N8S20731C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20731C2D1Ev,_ZTv0_n24_N8S20731C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N8S20731C2D1Ev,_ZThn156_N8S20731C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20731C2D0Ev,_ZTv0_n28_N8S20731C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S20731C2D0Ev,_ZThn148_N8S20731C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20731C2D1Ev,_ZTv0_n28_N8S20731C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S20731C2D1Ev,_ZThn148_N8S20731C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S20731C2D0Ev,_ZTv0_n56_N8S20731C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N8S20731C2D0Ev,_ZThn212_N8S20731C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20731C2D0Ev,_ZThn12_N8S20731C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S20731C2D1Ev,_ZTv0_n56_N8S20731C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N8S20731C2D1Ev,_ZThn212_N8S20731C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20731C2D1Ev,_ZThn12_N8S20731C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20731C2D0Ev,_ZTv0_n12_N8S20731C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S20731C2D0Ev,_ZThn176_N8S20731C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20731C2D0Ev,_ZThn4_N8S20731C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20731C2D1Ev,_ZTv0_n12_N8S20731C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S20731C2D1Ev,_ZThn176_N8S20731C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20731C2D1Ev,_ZThn4_N8S20731C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20731C2D0Ev,_ZTv0_n16_N8S20731C2D0Ev), // 
  (VTBL_ENTRY)_ZN8S20731C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20731C2D1Ev,_ZTv0_n16_N8S20731C2D1Ev), // 
  (VTBL_ENTRY)_ZN8S20731C2D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20731C2 = {  "S20731C2", // class name
  bases_S20731C2, 75,
  &(vtc_S20731C2[0]), // expected_vtbl_contents
  &(vtt_S20731C2[0]), // expected_vtt_contents
  ABISELECT(656,348), // object size
  NSPAIRA(_ZTI8S20731C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20731C2),217, //virtual function table var
  17, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20731C2),289, //virtual table table var
  66, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names98,
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S20731C22_nt  {
  int s20731c22f0;
  void  mf20731c22(); // _ZN12S20731C22_nt10mf20731c22Ev
};
//SIG(1 S20731C22_nt) U1{ m Fi}

#endif // __cplusplus
#ifdef __cplusplus

struct  S20731C1  : virtual S20731C2 , S20731C15_nt , S20731C17_nt , virtual S20731C14_nt {
  ::S20731C22_nt s20731c1f0;
  ~S20731C1(); // tgen
  S20731C1(); // tgen
};
//SIG(1 S20731C1) C1{ VBC2{ VBC3{ m} VBC4{ BC5{ m} vd} VBC6{ BC7{ BC8{ VBC4 BC9{ VBC4 VBC10{ VBC5 FC5} BC11{ VBC5 vd} BC12{ VBC5 BC10 Fc:3}} vd FL} VBC13{ BC10 VBC9 BC5} BC14{ BC4 VBC10 BC8 VBC13 vd} BC12 BC15{ BC12 VBC16{ VBC4 BC5 BC10 vd v1} VBC17{ VBC5 VBC16 Fc} VBC18{ VBC16 BC9 VBC19{ VBC10 BC5 VBC11 VBC12 VBC4 vd} BC12 FC5} vd v2} vd FC18} vd FC17} BC20{ BC3 VBC21{ VBC13 BC7 BC15 BC10 vd FL}} BC17} BC15 BC17 VBC14 FU22{ m Fi}}


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

static void Test_S20731C1()
{
  extern Class_Descriptor cd_S20731C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(92,99)];
    init_test(&cd_S20731C1, buf);
    S20731C1 *dp, &lv = *(dp=new (buf) S20731C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(728,392), "sizeof(S20731C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20731C1)");
    /*is_ambiguous_... S20731C2::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20731C2*), 0, "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C4_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C4_nt*), ABISELECT(368,196), "S20731C1");
    /*is_ambiguous_... S20731C2::S20731C4_nt */ AMB_check_base_class_offset(lv, (S20731C4_nt*)(S20731C2*), ABISELECT(368,196), "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C4_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(368,196), "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C4_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(368,196), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C9_nt */ AMB_check_base_class_offset(lv, (S20731C4_nt*)(S20731C9_nt*), ABISELECT(368,196), "S20731C1");
    check_base_class_offset(lv, (S20731C4_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(368,196), "S20731C1");
    check_base_class_offset(lv, (S20731C4_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(368,196), "S20731C1");
    check_base_class_offset(lv, (S20731C4_nt*)(S20731C16_nt*), ABISELECT(368,196), "S20731C1");
    check_base_class_offset(lv, (S20731C4_nt*)(S20731C9_nt*)(S20731C18_nt*), ABISELECT(368,196), "S20731C1");
    check_base_class_offset(lv, (S20731C4_nt*)(S20731C19_nt*), ABISELECT(368,196), "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C4_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(368,196), "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C4_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(368,196), "S20731C1");
    check_base_class_offset(lv, (S20731C4_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(368,196), "S20731C1");
    check_base_class_offset(lv, (S20731C4_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(368,196), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C14_nt */ AMB_check_base_class_offset(lv, (S20731C4_nt*)(S20731C8_nt*)(S20731C14_nt*), ABISELECT(368,196), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C14_nt */ AMB_check_base_class_offset(lv, (S20731C4_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*), ABISELECT(368,196), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C10_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C11_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C6_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C6_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C6_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C13_nt::S20731C10_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C13_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C9_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C11_nt*)(S20731C9_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C9_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C9_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C9_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*), 0, "S20731C1");
    check_base_class_offset(lv, (S2264C28*)(S20731C11_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), 0, "S20731C1");
    check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), 0, "S20731C1");
    check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C7_nt*)(S20731C6_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C7_nt*)(S20731C6_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C15_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C6_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C15_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C6_nt*), 0, "S20731C1");
    check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C16_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C17_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C17_nt*), 0, "S20731C1");
    check_base_class_offset(lv, (S2264C28*)(S20731C11_nt*)(S20731C9_nt*)(S20731C18_nt*), 0, "S20731C1");
    check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C9_nt*)(S20731C18_nt*), 0, "S20731C1");
    check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*)(S20731C18_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C11_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C11_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C12_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C12_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C18_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C18_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C18_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C18_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C11_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C21_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C21_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C21_nt*), 0, "S20731C1");
    check_base_class_offset(lv, (S2264C28*)(S20731C11_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), 0, "S20731C1");
    check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), 0, "S20731C1");
    check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C7_nt*)(S20731C21_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C7_nt*)(S20731C21_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C15_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C21_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C15_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C21_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C21_nt::S20731C15_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C15_nt*)(S20731C21_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C21_nt::S20731C15_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C15_nt*)(S20731C21_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C21_nt::S20731C10_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C21_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C2::S20731C17_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C17_nt*)(S20731C2*), 0, "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C15_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C15_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C15_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C15_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C17_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C17_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C14_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C11_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C14_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C14_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(296,160), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C9_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C9_nt*), ABISELECT(296,160), "S20731C1");
    /*is_ambiguous_... S20731C14_nt::S20731C10_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(296,160), "S20731C1");
    /*is_ambiguous_... S20731C9_nt::S20731C10_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(296,160), "S20731C1");
    /*is_ambiguous_... S20731C9_nt::S20731C10_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C9_nt*)(S20731C18_nt*), ABISELECT(296,160), "S20731C1");
    /*is_ambiguous_... S20731C19_nt::S20731C10_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C19_nt*), ABISELECT(296,160), "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(296,160), "S20731C1");
    /*is_ambiguous_... S20731C14_nt::S20731C10_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(296,160), "S20731C1");
    /*is_ambiguous_... S20731C9_nt::S20731C10_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(296,160), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C14_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C14_nt*), ABISELECT(296,160), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C14_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*), ABISELECT(296,160), "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C11_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(56,32), "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(64,36), "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(64,36), "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(56,32), "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C8_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(56,32), "S20731C1");
    /*is_ambiguous_... S20731C13_nt::S20731C10_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C13_nt*), ABISELECT(312,168), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C9_nt */ AMB_check_base_class_offset(lv, (S20731C11_nt*)(S20731C9_nt*), ABISELECT(328,176), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C9_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*), ABISELECT(336,180), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C9_nt */ AMB_check_base_class_offset(lv, (S20731C12_nt*)(S20731C9_nt*), ABISELECT(336,180), "S20731C1");
    check_base_class_offset(lv, (S20731C9_nt*)(S20731C13_nt*), ABISELECT(328,176), "S20731C1");
    /*is_ambiguous_... S20731C13_nt::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C13_nt*), ABISELECT(312,168), "S20731C1");
    check_base_class_offset(lv, (S20731C13_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(312,168), "S20731C1");
    check_base_class_offset(lv, (S20731C13_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(312,168), "S20731C1");
    check_base_class_offset(lv, (S20731C13_nt*)(S20731C21_nt*), ABISELECT(312,168), "S20731C1");
    check_base_class_offset(lv, (S20731C13_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(312,168), "S20731C1");
    check_base_class_offset(lv, (S20731C13_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(312,168), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C14_nt */ AMB_check_base_class_offset(lv, (S20731C13_nt*)(S20731C14_nt*), ABISELECT(312,168), "S20731C1");
    /*is_ambiguous_... S20731C14_nt::S20731C4_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C4_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(88,52), "S20731C1");
    /*is_ambiguous_... S20731C14_nt::S20731C4_nt */ AMB_check_base_class_offset(lv, (S20731C4_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(88,52), "S20731C1");
    check_base_class_offset(lv, (S20731C11_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(96,56), "S20731C1");
    check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(104,60), "S20731C1");
    check_base_class_offset(lv, (S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(104,60), "S20731C1");
    check_base_class_offset(lv, (S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(96,56), "S20731C1");
    check_base_class_offset(lv, (S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(96,56), "S20731C1");
    check_base_class_offset(lv, (S20731C14_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(88,52), "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(128,76), "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S20731C12_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(128,76), "S20731C1");
    /*is_ambiguous_... S20731C15_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(144,84), "S20731C1");
    /*is_ambiguous_... S20731C15_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S20731C12_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(144,84), "S20731C1");
    /*is_ambiguous_... S20731C16_nt::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C16_nt*), ABISELECT(352,188), "S20731C1");
    check_base_class_offset(lv, (S20731C10_nt*)(S20731C16_nt*), ABISELECT(352,188), "S20731C1");
    check_base_class_offset(lv, (S20731C16_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(352,188), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C17_nt */ AMB_check_base_class_offset(lv, (S20731C16_nt*)(S20731C17_nt*), ABISELECT(352,188), "S20731C1");
    check_base_class_offset(lv, (S20731C16_nt*)(S20731C18_nt*), ABISELECT(352,188), "S20731C1");
    check_base_class_offset(lv, (S20731C16_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(352,188), "S20731C1");
    /*is_ambiguous_... S20731C21_nt::S20731C15_nt */ AMB_check_base_class_offset(lv, (S20731C16_nt*)(S20731C15_nt*)(S20731C21_nt*), ABISELECT(352,188), "S20731C1");
    /*is_ambiguous_... S20731C2::S20731C17_nt */ AMB_check_base_class_offset(lv, (S20731C16_nt*)(S20731C17_nt*)(S20731C2*), ABISELECT(352,188), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C15_nt */ AMB_check_base_class_offset(lv, (S20731C16_nt*)(S20731C15_nt*), ABISELECT(352,188), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C17_nt */ AMB_check_base_class_offset(lv, (S20731C16_nt*)(S20731C17_nt*), ABISELECT(352,188), "S20731C1");
    check_base_class_offset(lv, (S20731C17_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(368,196), "S20731C1");
    check_base_class_offset(lv, (S20731C17_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(368,196), "S20731C1");
    /*is_ambiguous_... S20731C21_nt::S20731C15_nt */ AMB_check_base_class_offset(lv, (S20731C17_nt*)(S20731C15_nt*)(S20731C21_nt*), ABISELECT(368,196), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C15_nt */ AMB_check_base_class_offset(lv, (S20731C17_nt*)(S20731C15_nt*), ABISELECT(368,196), "S20731C1");
    check_base_class_offset(lv, (S20731C11_nt*)(S20731C9_nt*)(S20731C18_nt*), ABISELECT(384,204), "S20731C1");
    check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*)(S20731C18_nt*), ABISELECT(392,208), "S20731C1");
    check_base_class_offset(lv, (S20731C12_nt*)(S20731C9_nt*)(S20731C18_nt*), ABISELECT(392,208), "S20731C1");
    check_base_class_offset(lv, (S20731C9_nt*)(S20731C18_nt*), ABISELECT(384,204), "S20731C1");
    /*is_ambiguous_... S20731C19_nt::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C19_nt*), ABISELECT(32,20), "S20731C1");
    check_base_class_offset(lv, (S20731C11_nt*)(S20731C19_nt*), ABISELECT(32,20), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C12_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*), ABISELECT(424,224), "S20731C1");
    check_base_class_offset(lv, (S20731C12_nt*)(S20731C19_nt*), ABISELECT(424,224), "S20731C1");
    check_base_class_offset(lv, (S20731C19_nt*)(S20731C18_nt*), ABISELECT(32,20), "S20731C1");
    /*is_ambiguous_... S20731C18_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C18_nt*), ABISELECT(408,216), "S20731C1");
    /*is_ambiguous_... S20731C18_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S20731C12_nt*)(S20731C18_nt*), ABISELECT(408,216), "S20731C1");
    check_base_class_offset(lv, (S20731C18_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(384,204), "S20731C1");
    check_base_class_offset(lv, (S20731C18_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(384,204), "S20731C1");
    /*is_ambiguous_... S20731C21_nt::S20731C15_nt */ AMB_check_base_class_offset(lv, (S20731C18_nt*)(S20731C15_nt*)(S20731C21_nt*), ABISELECT(384,204), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C15_nt */ AMB_check_base_class_offset(lv, (S20731C18_nt*)(S20731C15_nt*), ABISELECT(384,204), "S20731C1");
    check_base_class_offset(lv, (S20731C15_nt*)(S20731C7_nt*)(S20731C6_nt*), ABISELECT(144,84), "S20731C1");
    check_base_class_offset(lv, (S20731C7_nt*)(S20731C6_nt*), ABISELECT(56,32), "S20731C1");
    check_base_class_offset(lv, (S20731C6_nt*)(S20731C2*), ABISELECT(56,32), "S20731C1");
    check_base_class_offset(lv, (S2264C38*)(S20731C20_nt*)(S20731C2*), ABISELECT(32,20), "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C11_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(440,232), "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(448,236), "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(448,236), "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C9_nt*)(S20731C8_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(440,232), "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C8_nt */ AMB_check_base_class_offset(lv, (S20731C8_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(440,232), "S20731C1");
    /*is_ambiguous_... S20731C14_nt::S20731C4_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C4_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(472,252), "S20731C1");
    /*is_ambiguous_... S20731C14_nt::S20731C4_nt */ AMB_check_base_class_offset(lv, (S20731C4_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(472,252), "S20731C1");
    check_base_class_offset(lv, (S20731C11_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(480,256), "S20731C1");
    check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(488,260), "S20731C1");
    check_base_class_offset(lv, (S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(488,260), "S20731C1");
    check_base_class_offset(lv, (S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(480,256), "S20731C1");
    check_base_class_offset(lv, (S20731C8_nt*)(S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(480,256), "S20731C1");
    check_base_class_offset(lv, (S20731C14_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(472,252), "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(512,276), "S20731C1");
    /*is_ambiguous_... S20731C7_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S20731C12_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(512,276), "S20731C1");
    /*is_ambiguous_... S20731C15_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(528,284), "S20731C1");
    /*is_ambiguous_... S20731C15_nt::S20731C12_nt */ AMB_check_base_class_offset(lv, (S20731C12_nt*)(S20731C15_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(528,284), "S20731C1");
    check_base_class_offset(lv, (S20731C15_nt*)(S20731C7_nt*)(S20731C21_nt*), ABISELECT(528,284), "S20731C1");
    check_base_class_offset(lv, (S20731C7_nt*)(S20731C21_nt*), ABISELECT(440,232), "S20731C1");
    /*is_ambiguous_... S20731C21_nt::S20731C15_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C15_nt*)(S20731C21_nt*), ABISELECT(648,344), "S20731C1");
    /*is_ambiguous_... S20731C21_nt::S20731C15_nt */ AMB_check_base_class_offset(lv, (S20731C12_nt*)(S20731C15_nt*)(S20731C21_nt*), ABISELECT(648,344), "S20731C1");
    /*is_ambiguous_... S20731C21_nt::S20731C15_nt */ AMB_check_base_class_offset(lv, (S20731C15_nt*)(S20731C21_nt*), ABISELECT(648,344), "S20731C1");
    /*is_ambiguous_... S20731C21_nt::S20731C10_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C21_nt*), ABISELECT(664,352), "S20731C1");
    check_base_class_offset(lv, (S20731C21_nt*)(S20731C20_nt*)(S20731C2*), ABISELECT(440,232), "S20731C1");
    check_base_class_offset(lv, (S20731C20_nt*)(S20731C2*), ABISELECT(32,20), "S20731C1");
    /*is_ambiguous_... S20731C2::S20731C17_nt */ AMB_check_base_class_offset(lv, (S20731C17_nt*)(S20731C2*), ABISELECT(40,24), "S20731C1");
    check_base_class_offset(lv, (S20731C2*), ABISELECT(32,20), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C15_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C15_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C15_nt */ AMB_check_base_class_offset(lv, (S20731C12_nt*)(S20731C15_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C15_nt */ AMB_check_base_class_offset(lv, (S20731C15_nt*), 0, "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C17_nt */ AMB_check_base_class_offset(lv, (S20731C17_nt*), ABISELECT(16,8), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C14_nt */ AMB_check_base_class_offset(lv, (S2264C28*)(S20731C4_nt*)(S20731C14_nt*), ABISELECT(688,368), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C14_nt */ AMB_check_base_class_offset(lv, (S20731C4_nt*)(S20731C14_nt*), ABISELECT(688,368), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C14_nt */ AMB_check_base_class_offset(lv, (S20731C11_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*), ABISELECT(696,372), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C14_nt */ AMB_check_base_class_offset(lv, (S20731C10_nt*)(S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*), ABISELECT(704,376), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C14_nt */ AMB_check_base_class_offset(lv, (S20731C12_nt*)(S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*), ABISELECT(704,376), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C14_nt */ AMB_check_base_class_offset(lv, (S20731C9_nt*)(S20731C8_nt*)(S20731C14_nt*), ABISELECT(696,372), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C14_nt */ AMB_check_base_class_offset(lv, (S20731C8_nt*)(S20731C14_nt*), ABISELECT(696,372), "S20731C1");
    /*is_ambiguous_... S20731C1::S20731C14_nt */ AMB_check_base_class_offset(lv, (S20731C14_nt*), ABISELECT(688,368), "S20731C1");
    check_field_offset(lv, s20731c1f0, ABISELECT(28,16), "S20731C1.s20731c1f0");
    test_class_info(&lv, &cd_S20731C1);
    dp->~S20731C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20731C1(Test_S20731C1, "S20731C1", ABISELECT(728,392));

#else // __cplusplus

extern void _ZN8S20731C1C1Ev();
extern void _ZN8S20731C1D1Ev();
Name_Map name_map_S20731C1[] = {
  NSPAIR(_ZN8S20731C1C1Ev),
  NSPAIR(_ZN8S20731C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C4_nt;
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S20731C8_nt;
extern VTBL_ENTRY _ZTI11S20731C8_nt[];
extern  VTBL_ENTRY _ZTV11S20731C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C8_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C13_nt;
extern VTBL_ENTRY _ZTI12S20731C13_nt[];
extern  VTBL_ENTRY _ZTV12S20731C13_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C13_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C4_nt;
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S20731C8_nt;
extern VTBL_ENTRY _ZTI11S20731C8_nt[];
extern  VTBL_ENTRY _ZTV11S20731C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C8_nt[];
extern Class_Descriptor cd_S20731C14_nt;
extern VTBL_ENTRY _ZTI12S20731C14_nt[];
extern  VTBL_ENTRY _ZTV12S20731C14_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C14_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C16_nt;
extern VTBL_ENTRY _ZTI12S20731C16_nt[];
extern  VTBL_ENTRY _ZTV12S20731C16_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C16_nt[];
extern Class_Descriptor cd_S20731C17_nt;
extern VTBL_ENTRY _ZTI12S20731C17_nt[];
extern  VTBL_ENTRY _ZTV12S20731C17_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C17_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C19_nt;
extern VTBL_ENTRY _ZTI12S20731C19_nt[];
extern  VTBL_ENTRY _ZTV12S20731C19_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C19_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C18_nt;
extern VTBL_ENTRY _ZTI12S20731C18_nt[];
extern  VTBL_ENTRY _ZTV12S20731C18_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C18_nt[];
extern Class_Descriptor cd_S20731C15_nt;
extern VTBL_ENTRY _ZTI12S20731C15_nt[];
extern  VTBL_ENTRY _ZTV12S20731C15_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C15_nt[];
extern Class_Descriptor cd_S20731C7_nt;
extern VTBL_ENTRY _ZTI11S20731C7_nt[];
extern  VTBL_ENTRY _ZTV11S20731C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C7_nt[];
extern Class_Descriptor cd_S20731C6_nt;
extern VTBL_ENTRY _ZTI11S20731C6_nt[];
extern  VTBL_ENTRY _ZTV11S20731C6_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C6_nt[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S20731C8_nt;
extern VTBL_ENTRY _ZTI11S20731C8_nt[];
extern  VTBL_ENTRY _ZTV11S20731C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C8_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C4_nt;
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S20731C8_nt;
extern VTBL_ENTRY _ZTI11S20731C8_nt[];
extern  VTBL_ENTRY _ZTV11S20731C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C8_nt[];
extern Class_Descriptor cd_S20731C14_nt;
extern VTBL_ENTRY _ZTI12S20731C14_nt[];
extern  VTBL_ENTRY _ZTV12S20731C14_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C14_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C15_nt;
extern VTBL_ENTRY _ZTI12S20731C15_nt[];
extern  VTBL_ENTRY _ZTV12S20731C15_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C15_nt[];
extern Class_Descriptor cd_S20731C7_nt;
extern VTBL_ENTRY _ZTI11S20731C7_nt[];
extern  VTBL_ENTRY _ZTV11S20731C7_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C7_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C15_nt;
extern VTBL_ENTRY _ZTI12S20731C15_nt[];
extern  VTBL_ENTRY _ZTV12S20731C15_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C15_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C21_nt;
extern VTBL_ENTRY _ZTI12S20731C21_nt[];
extern  VTBL_ENTRY _ZTV12S20731C21_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C21_nt[];
extern Class_Descriptor cd_S20731C20_nt;
extern VTBL_ENTRY _ZTI12S20731C20_nt[];
extern  VTBL_ENTRY _ZTV12S20731C20_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C20_nt[];
extern Class_Descriptor cd_S20731C17_nt;
extern VTBL_ENTRY _ZTI12S20731C17_nt[];
extern  VTBL_ENTRY _ZTV12S20731C17_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C17_nt[];
extern Class_Descriptor cd_S20731C2;
extern VTBL_ENTRY _ZTI8S20731C2[];
extern  VTBL_ENTRY _ZTV8S20731C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20731C2[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C15_nt;
extern VTBL_ENTRY _ZTI12S20731C15_nt[];
extern  VTBL_ENTRY _ZTV12S20731C15_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C15_nt[];
extern Class_Descriptor cd_S20731C17_nt;
extern VTBL_ENTRY _ZTI12S20731C17_nt[];
extern  VTBL_ENTRY _ZTV12S20731C17_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C17_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20731C4_nt;
extern VTBL_ENTRY _ZTI11S20731C4_nt[];
extern  VTBL_ENTRY _ZTV11S20731C4_nt[];
extern Class_Descriptor cd_S20731C11_nt;
extern VTBL_ENTRY _ZTI12S20731C11_nt[];
extern  VTBL_ENTRY _ZTV12S20731C11_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C11_nt[];
extern Class_Descriptor cd_S20731C10_nt;
extern VTBL_ENTRY _ZTI12S20731C10_nt[];
extern  VTBL_ENTRY _ZTV12S20731C10_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C10_nt[];
extern Class_Descriptor cd_S20731C12_nt;
extern VTBL_ENTRY _ZTI12S20731C12_nt[];
extern  VTBL_ENTRY _ZTV12S20731C12_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C12_nt[];
extern Class_Descriptor cd_S20731C9_nt;
extern VTBL_ENTRY _ZTI11S20731C9_nt[];
extern  VTBL_ENTRY _ZTV11S20731C9_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C9_nt[];
extern Class_Descriptor cd_S20731C8_nt;
extern VTBL_ENTRY _ZTI11S20731C8_nt[];
extern  VTBL_ENTRY _ZTV11S20731C8_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20731C8_nt[];
extern Class_Descriptor cd_S20731C14_nt;
extern VTBL_ENTRY _ZTI12S20731C14_nt[];
extern  VTBL_ENTRY _ZTV12S20731C14_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT12S20731C14_nt[];
static Base_Class bases_S20731C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    75, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(368,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20731C4_nt,    ABISELECT(368,196), //bcp->offset
    -1, //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
    8, //immediately_derived
  0, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20731C10_nt,    ABISELECT(296,160), //bcp->offset
    112, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    195, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20731C11_nt,    ABISELECT(56,32), //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
    23, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    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
    116, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(64,36), //bcp->offset
    73, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    115, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    113, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20731C8_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    112, //bcp->base_subarray_index_in_construction_vtbl_array
    27, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(312,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    197, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20731C11_nt,    ABISELECT(328,176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    203, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(336,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    205, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(336,180), //bcp->offset
    132, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    204, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(328,176), //bcp->offset
    124, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    202, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(312,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
    16, //immediately_derived
  0, 0},
  {&cd_S20731C13_nt,    ABISELECT(312,168), //bcp->offset
    115, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    196, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(88,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
    18, //immediately_derived
  0, 0},
  {&cd_S20731C4_nt,    ABISELECT(88,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
    28, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20731C11_nt,    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
    126, //bcp->base_subarray_index_in_construction_vtbl_array
    29, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(104,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    128, //bcp->base_subarray_index_in_construction_vtbl_array
    30, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(104,60), //bcp->offset
    92, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    127, //bcp->base_subarray_index_in_construction_vtbl_array
    31, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(96,56), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    125, //bcp->base_subarray_index_in_construction_vtbl_array
    32, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20731C8_nt,    ABISELECT(96,56), //bcp->offset
    85, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    124, //bcp->base_subarray_index_in_construction_vtbl_array
    33, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20731C14_nt,    ABISELECT(88,52), //bcp->offset
    76, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    123, //bcp->base_subarray_index_in_construction_vtbl_array
    34, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(128,76), //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
    35, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(128,76), //bcp->offset
    95, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    142, //bcp->base_subarray_index_in_construction_vtbl_array
    36, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    146, //bcp->base_subarray_index_in_construction_vtbl_array
    37, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(144,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    145, //bcp->base_subarray_index_in_construction_vtbl_array
    38, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(352,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
    31, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(352,188), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    210, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20731C16_nt,    ABISELECT(352,188), //bcp->offset
    135, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    209, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    32, //immediately_derived
  0, 1},
  {&cd_S20731C17_nt,    ABISELECT(368,196), //bcp->offset
    144, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    212, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    45, //immediately_derived
  0, 1},
  {&cd_S20731C11_nt,    ABISELECT(384,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    217, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(392,208), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    219, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(392,208), //bcp->offset
    164, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    218, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(384,204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    216, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(32,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
    41, //immediately_derived
  0, 0},
  {&cd_S20731C11_nt,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    238, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    41, //immediately_derived
  0, 1},
  {&cd_S20731C10_nt,    ABISELECT(424,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    240, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(424,224), //bcp->offset
    170, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    37, //bcp->index_in_construction_vtbl_array
    239, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    41, //immediately_derived
  0, 1},
  {&cd_S20731C19_nt,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    233, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    44, //immediately_derived
  0, 1},
  {&cd_S20731C10_nt,    ABISELECT(408,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    224, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(408,216), //bcp->offset
    167, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    38, //bcp->index_in_construction_vtbl_array
    223, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S20731C18_nt,    ABISELECT(384,204), //bcp->offset
    152, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    215, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    45, //immediately_derived
  0, 1},
  {&cd_S20731C15_nt,    ABISELECT(144,84), //bcp->offset
    98, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    144, //bcp->base_subarray_index_in_construction_vtbl_array
    39, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S20731C7_nt,    ABISELECT(56,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    111, //bcp->base_subarray_index_in_construction_vtbl_array
    40, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S20731C6_nt,    ABISELECT(56,32), //bcp->offset
    56, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    110, //bcp->base_subarray_index_in_construction_vtbl_array
    41, //init_seq
    75, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(32,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
    73, //immediately_derived
  0, 0},
  {&cd_S20731C11_nt,    ABISELECT(440,232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    245, //bcp->base_subarray_index_in_construction_vtbl_array
    42, //init_seq
    52, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(448,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    247, //bcp->base_subarray_index_in_construction_vtbl_array
    43, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(448,236), //bcp->offset
    190, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    246, //bcp->base_subarray_index_in_construction_vtbl_array
    44, //init_seq
    52, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(440,232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    244, //bcp->base_subarray_index_in_construction_vtbl_array
    45, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S20731C8_nt,    ABISELECT(440,232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    243, //bcp->base_subarray_index_in_construction_vtbl_array
    46, //init_seq
    67, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(472,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    55, //immediately_derived
  0, 0},
  {&cd_S20731C4_nt,    ABISELECT(472,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    47, //init_seq
    61, //immediately_derived
  0, 0},
  {&cd_S20731C11_nt,    ABISELECT(480,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    257, //bcp->base_subarray_index_in_construction_vtbl_array
    48, //init_seq
    59, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(488,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    259, //bcp->base_subarray_index_in_construction_vtbl_array
    49, //init_seq
    58, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(488,260), //bcp->offset
    209, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    258, //bcp->base_subarray_index_in_construction_vtbl_array
    50, //init_seq
    59, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(480,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    256, //bcp->base_subarray_index_in_construction_vtbl_array
    51, //init_seq
    60, //immediately_derived
  0, 0},
  {&cd_S20731C8_nt,    ABISELECT(480,256), //bcp->offset
    202, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    255, //bcp->base_subarray_index_in_construction_vtbl_array
    52, //init_seq
    61, //immediately_derived
  0, 0},
  {&cd_S20731C14_nt,    ABISELECT(472,252), //bcp->offset
    193, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    254, //bcp->base_subarray_index_in_construction_vtbl_array
    53, //init_seq
    67, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(512,276), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    274, //bcp->base_subarray_index_in_construction_vtbl_array
    54, //init_seq
    63, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(512,276), //bcp->offset
    212, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    273, //bcp->base_subarray_index_in_construction_vtbl_array
    55, //init_seq
    67, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(528,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    277, //bcp->base_subarray_index_in_construction_vtbl_array
    56, //init_seq
    65, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(528,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    276, //bcp->base_subarray_index_in_construction_vtbl_array
    57, //init_seq
    66, //immediately_derived
  0, 0},
  {&cd_S20731C15_nt,    ABISELECT(528,284), //bcp->offset
    215, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    275, //bcp->base_subarray_index_in_construction_vtbl_array
    58, //init_seq
    67, //immediately_derived
  0, 0},
  {&cd_S20731C7_nt,    ABISELECT(440,232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    242, //bcp->base_subarray_index_in_construction_vtbl_array
    59, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(648,344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    309, //bcp->base_subarray_index_in_construction_vtbl_array
    60, //init_seq
    69, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(648,344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    308, //bcp->base_subarray_index_in_construction_vtbl_array
    61, //init_seq
    70, //immediately_derived
  0, 0},
  {&cd_S20731C15_nt,    ABISELECT(648,344), //bcp->offset
    229, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    307, //bcp->base_subarray_index_in_construction_vtbl_array
    62, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(664,352), //bcp->offset
    243, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    320, //bcp->base_subarray_index_in_construction_vtbl_array
    63, //init_seq
    72, //immediately_derived
  0, 0},
  {&cd_S20731C21_nt,    ABISELECT(440,232), //bcp->offset
    173, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    39, //bcp->index_in_construction_vtbl_array
    241, //bcp->base_subarray_index_in_construction_vtbl_array
    64, //init_seq
    73, //immediately_derived
  0, 1},
  {&cd_S20731C20_nt,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    65, //init_seq
    75, //immediately_derived
  0, 0},
  {&cd_S20731C17_nt,    ABISELECT(40,24), //bcp->offset
    48, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    48, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    66, //init_seq
    75, //immediately_derived
  0, 0},
  {&cd_S20731C2,    ABISELECT(32,20), //bcp->offset
    29, //bcp->virtual_function_table_offset
    17, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    67, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20731C10_nt,    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
    75, //init_seq
    77, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    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
    76, //init_seq
    78, //immediately_derived
  0, 0},
  {&cd_S20731C15_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    77, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20731C17_nt,    ABISELECT(16,8), //bcp->offset
    21, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    49, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    78, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C28,    ABISELECT(688,368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    81, //immediately_derived
  0, 0},
  {&cd_S20731C4_nt,    ABISELECT(688,368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    68, //init_seq
    87, //immediately_derived
  0, 0},
  {&cd_S20731C11_nt,    ABISELECT(696,372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    345, //bcp->base_subarray_index_in_construction_vtbl_array
    69, //init_seq
    85, //immediately_derived
  0, 0},
  {&cd_S20731C10_nt,    ABISELECT(704,376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    347, //bcp->base_subarray_index_in_construction_vtbl_array
    70, //init_seq
    84, //immediately_derived
  0, 0},
  {&cd_S20731C12_nt,    ABISELECT(704,376), //bcp->offset
    263, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    52, //bcp->index_in_construction_vtbl_array
    346, //bcp->base_subarray_index_in_construction_vtbl_array
    71, //init_seq
    85, //immediately_derived
  0, 0},
  {&cd_S20731C9_nt,    ABISELECT(696,372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    344, //bcp->base_subarray_index_in_construction_vtbl_array
    72, //init_seq
    86, //immediately_derived
  0, 0},
  {&cd_S20731C8_nt,    ABISELECT(696,372), //bcp->offset
    256, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    51, //bcp->index_in_construction_vtbl_array
    343, //bcp->base_subarray_index_in_construction_vtbl_array
    73, //init_seq
    87, //immediately_derived
  0, 0},
  {&cd_S20731C14_nt,    ABISELECT(688,368), //bcp->offset
    246, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    50, //bcp->index_in_construction_vtbl_array
    342, //bcp->base_subarray_index_in_construction_vtbl_array
    74, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20731C1[];
extern void _ZN8S20731C1D1Ev();
extern void _ZN8S20731C1D0Ev();
extern void _ZN12S20731C15_nt2v2Ev();
extern void ABISELECT(_ZTv0_n24_N8S20731C1D1Ev,_ZTv0_n12_N8S20731C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S20731C1D1Ev,_ZThn8_N8S20731C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20731C1D0Ev,_ZTv0_n12_N8S20731C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S20731C1D0Ev,_ZThn8_N8S20731C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20731C1D1Ev,_ZTv0_n16_N8S20731C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S20731C1D1Ev,_ZThn20_N8S20731C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20731C1D0Ev,_ZTv0_n16_N8S20731C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S20731C1D0Ev,_ZThn20_N8S20731C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20731C1D1Ev,_ZTv0_n12_N8S20731C1D1Ev)();
extern void ABISELECT(_ZThn40_N8S20731C1D1Ev,_ZThn24_N8S20731C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20731C1D0Ev,_ZTv0_n12_N8S20731C1D0Ev)();
extern void ABISELECT(_ZThn40_N8S20731C1D0Ev,_ZThn24_N8S20731C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S20731C1D1Ev,_ZTv0_n56_N8S20731C1D1Ev)();
extern void ABISELECT(_ZThn56_N8S20731C1D1Ev,_ZThn32_N8S20731C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S20731C1D0Ev,_ZTv0_n56_N8S20731C1D0Ev)();
extern void ABISELECT(_ZThn56_N8S20731C1D0Ev,_ZThn32_N8S20731C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n112_N8S20731C1D1Ev,_ZTvn20_n56_N8S20731C1D1Ev)();
extern void ABISELECT(_ZTvn32_n112_N8S20731C1D0Ev,_ZTvn20_n56_N8S20731C1D0Ev)();
extern void ABISELECT(_ZTvn40_n112_N8S20731C1D1Ev,_ZTvn24_n56_N8S20731C1D1Ev)();
extern void ABISELECT(_ZTvn40_n112_N8S20731C1D0Ev,_ZTvn24_n56_N8S20731C1D0Ev)();
extern void ABISELECT(_ZTvn88_n112_N8S20731C1D1Ev,_ZTvn52_n56_N8S20731C1D1Ev)();
extern void ABISELECT(_ZTvn88_n112_N8S20731C1D0Ev,_ZTvn52_n56_N8S20731C1D0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
extern void ABISELECT(_ZTv0_n56_N8S20731C1D1Ev,_ZTv0_n28_N8S20731C1D1Ev)();
extern void ABISELECT(_ZThn312_N8S20731C1D1Ev,_ZThn168_N8S20731C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20731C1D0Ev,_ZTv0_n28_N8S20731C1D0Ev)();
extern void ABISELECT(_ZThn312_N8S20731C1D0Ev,_ZThn168_N8S20731C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20731C1D1Ev,_ZTv0_n24_N8S20731C1D1Ev)();
extern void ABISELECT(_ZThn328_N8S20731C1D1Ev,_ZThn176_N8S20731C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20731C1D0Ev,_ZTv0_n24_N8S20731C1D0Ev)();
extern void ABISELECT(_ZThn328_N8S20731C1D0Ev,_ZThn176_N8S20731C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20731C1D1Ev,_ZTv0_n20_N8S20731C1D1Ev)();
extern void ABISELECT(_ZThn352_N8S20731C1D1Ev,_ZThn188_N8S20731C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20731C1D0Ev,_ZTv0_n20_N8S20731C1D0Ev)();
extern void ABISELECT(_ZThn352_N8S20731C1D0Ev,_ZThn188_N8S20731C1D0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
extern void ABISELECT(_ZTv0_n24_N8S20731C1D1Ev,_ZTv0_n12_N8S20731C1D1Ev)();
extern void ABISELECT(_ZThn368_N8S20731C1D1Ev,_ZThn196_N8S20731C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20731C1D0Ev,_ZTv0_n12_N8S20731C1D0Ev)();
extern void ABISELECT(_ZThn368_N8S20731C1D0Ev,_ZThn196_N8S20731C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20731C1D1Ev,_ZTv0_n40_N8S20731C1D1Ev)();
extern void ABISELECT(_ZThn384_N8S20731C1D1Ev,_ZThn204_N8S20731C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20731C1D0Ev,_ZTv0_n40_N8S20731C1D0Ev)();
extern void ABISELECT(_ZThn384_N8S20731C1D0Ev,_ZThn204_N8S20731C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S20731C1D1Ev,_ZTv0_n56_N8S20731C1D1Ev)();
extern void ABISELECT(_ZThn440_N8S20731C1D1Ev,_ZThn232_N8S20731C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S20731C1D0Ev,_ZTv0_n56_N8S20731C1D0Ev)();
extern void ABISELECT(_ZThn440_N8S20731C1D0Ev,_ZThn232_N8S20731C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn32_n112_N8S20731C1D1Ev,_ZTvn20_n56_N8S20731C1D1Ev)();
extern void ABISELECT(_ZTvn32_n112_N8S20731C1D0Ev,_ZTvn20_n56_N8S20731C1D0Ev)();
extern void ABISELECT(_ZTvn40_n112_N8S20731C1D1Ev,_ZTvn24_n56_N8S20731C1D1Ev)();
extern void ABISELECT(_ZTvn40_n112_N8S20731C1D0Ev,_ZTvn24_n56_N8S20731C1D0Ev)();
extern void ABISELECT(_ZTvn88_n112_N8S20731C1D1Ev,_ZTvn52_n56_N8S20731C1D1Ev)();
extern void ABISELECT(_ZTvn88_n112_N8S20731C1D0Ev,_ZTvn52_n56_N8S20731C1D0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
extern void ABISELECT(_ZTvn208_n112_N8S20731C1D1Ev,_ZTvn112_n56_N8S20731C1D1Ev)();
extern void ABISELECT(_ZTvn208_n112_N8S20731C1D0Ev,_ZTvn112_n56_N8S20731C1D0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
extern void ABISELECT(_ZTv0_n64_N8S20731C1D1Ev,_ZTv0_n32_N8S20731C1D1Ev)();
extern void ABISELECT(_ZThn688_N8S20731C1D1Ev,_ZThn368_N8S20731C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20731C1D0Ev,_ZTv0_n32_N8S20731C1D0Ev)();
extern void ABISELECT(_ZThn688_N8S20731C1D0Ev,_ZThn368_N8S20731C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn8_n64_N8S20731C1D1Ev,_ZTvn4_n32_N8S20731C1D1Ev)();
extern void ABISELECT(_ZTvn8_n64_N8S20731C1D0Ev,_ZTvn4_n32_N8S20731C1D0Ev)();
static  VTBL_ENTRY vtc_S20731C1[] = {
  ABISELECT(688,368),
  ABISELECT(440,232),
  ABISELECT(328,176),
  ABISELECT(312,168),
  ABISELECT(56,32),
  0,
  ABISELECT(32,20),
  ABISELECT(424,224),
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(296,160),
  ABISELECT(384,204),
  ABISELECT(368,196),
  ABISELECT(368,196),
  ABISELECT(352,188),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  (VTBL_ENTRY)&_ZN8S20731C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20731C1D0Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
  ABISELECT(352,188),
  ABISELECT(336,180),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20731C1D1Ev,_ZTv0_n12_N8S20731C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20731C1D0Ev,_ZTv0_n12_N8S20731C1D0Ev),
  ABISELECT(24,12),
  ABISELECT(-32,-20),
  0,
  ABISELECT(352,184),
  ABISELECT(336,176),
  ABISELECT(320,168),
  ABISELECT(296,156),
  ABISELECT(280,148),
  ABISELECT(408,212),
  ABISELECT(336,176),
  ABISELECT(392,204),
  0,
  ABISELECT(264,140),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20731C1D1Ev,_ZTv0_n16_N8S20731C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20731C1D0Ev,_ZTv0_n16_N8S20731C1D0Ev),
  ABISELECT(328,172),
  ABISELECT(312,164),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20731C1D1Ev,_ZTv0_n12_N8S20731C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20731C1D0Ev,_ZTv0_n12_N8S20731C1D0Ev),
  ABISELECT(88,52),
  ABISELECT(-56,-32),
  ABISELECT(368,192),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(328,172),
  ABISELECT(312,164),
  ABISELECT(296,156),
  ABISELECT(272,144),
  ABISELECT(256,136),
  ABISELECT(240,128),
  ABISELECT(312,164),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S20731C1D1Ev,_ZTv0_n56_N8S20731C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S20731C1D0Ev,_ZTv0_n56_N8S20731C1D0Ev),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  ABISELECT(240,124),
  ABISELECT(224,116),
  ABISELECT(280,144),
  ABISELECT(-88,-52),
  ABISELECT(208,108),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n112_N8S20731C1D1Ev,_ZTvn20_n56_N8S20731C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n112_N8S20731C1D0Ev,_ZTvn20_n56_N8S20731C1D0Ev),
  ABISELECT(200,104),
  ABISELECT(272,140),
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n112_N8S20731C1D1Ev,_ZTvn24_n56_N8S20731C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n112_N8S20731C1D0Ev,_ZTvn24_n56_N8S20731C1D0Ev),
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  ABISELECT(-128,-76),
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  ABISELECT(280,140),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  ABISELECT(152,76),
  ABISELECT(240,120),
  ABISELECT(224,112),
  ABISELECT(224,112),
  ABISELECT(208,104),
  ABISELECT(-144,-84),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n112_N8S20731C1D1Ev,_ZTvn52_n56_N8S20731C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n112_N8S20731C1D0Ev,_ZTvn52_n56_N8S20731C1D0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
  ABISELECT(-296,-160),
  ABISELECT(-296,-160),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  ABISELECT(-312,-168),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-312,-168),
  ABISELECT(-312,-168),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20731C1D1Ev,_ZTv0_n28_N8S20731C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20731C1D0Ev,_ZTv0_n28_N8S20731C1D0Ev),
  ABISELECT(-328,-176),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-328,-176),
  ABISELECT(-328,-176),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20731C1D1Ev,_ZTv0_n24_N8S20731C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20731C1D0Ev,_ZTv0_n24_N8S20731C1D0Ev),
  ABISELECT(-336,-180),
  ABISELECT(-336,-180),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  0,
  ABISELECT(-352,-188),
  ABISELECT(16,8),
  ABISELECT(-352,-188),
  ABISELECT(-352,-188),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20731C1D1Ev,_ZTv0_n20_N8S20731C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20731C1D0Ev,_ZTv0_n20_N8S20731C1D0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-368,-196),
  ABISELECT(-368,-196),
  ABISELECT(-368,-196),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20731C1D1Ev,_ZTv0_n12_N8S20731C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20731C1D0Ev,_ZTv0_n12_N8S20731C1D0Ev),
  ABISELECT(-384,-204),
  ABISELECT(40,20),
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-384,-204),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20731C1D1Ev,_ZTv0_n40_N8S20731C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20731C1D0Ev,_ZTv0_n40_N8S20731C1D0Ev),
  ABISELECT(-392,-208),
  ABISELECT(-392,-208),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  ABISELECT(-408,-216),
  ABISELECT(-408,-216),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  ABISELECT(-424,-224),
  ABISELECT(-424,-224),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  ABISELECT(88,52),
  ABISELECT(-440,-232),
  ABISELECT(-16,-8),
  ABISELECT(-408,-212),
  ABISELECT(-408,-212),
  ABISELECT(-56,-28),
  ABISELECT(-72,-36),
  ABISELECT(-88,-44),
  ABISELECT(-112,-56),
  ABISELECT(-128,-64),
  ABISELECT(-144,-72),
  ABISELECT(-72,-36),
  ABISELECT(-440,-232),
  ABISELECT(-440,-232),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S20731C1D1Ev,_ZTv0_n56_N8S20731C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S20731C1D0Ev,_ZTv0_n56_N8S20731C1D0Ev),
  ABISELECT(-448,-236),
  ABISELECT(-448,-236),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  ABISELECT(-144,-76),
  ABISELECT(-160,-84),
  ABISELECT(-104,-56),
  ABISELECT(-472,-252),
  ABISELECT(-176,-92),
  ABISELECT(-472,-252),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n112_N8S20731C1D1Ev,_ZTvn20_n56_N8S20731C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n112_N8S20731C1D0Ev,_ZTvn20_n56_N8S20731C1D0Ev),
  ABISELECT(-184,-96),
  ABISELECT(-112,-60),
  ABISELECT(-480,-256),
  ABISELECT(-480,-256),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n112_N8S20731C1D1Ev,_ZTvn24_n56_N8S20731C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n112_N8S20731C1D0Ev,_ZTvn24_n56_N8S20731C1D0Ev),
  ABISELECT(-488,-260),
  ABISELECT(-488,-260),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  ABISELECT(-512,-276),
  ABISELECT(-512,-276),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  ABISELECT(-104,-60),
  ABISELECT(-496,-264),
  ABISELECT(-496,-264),
  ABISELECT(-232,-124),
  ABISELECT(-144,-80),
  ABISELECT(-160,-88),
  ABISELECT(-160,-88),
  ABISELECT(-176,-96),
  ABISELECT(-528,-284),
  ABISELECT(-528,-284),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n112_N8S20731C1D1Ev,_ZTvn52_n56_N8S20731C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n112_N8S20731C1D0Ev,_ZTvn52_n56_N8S20731C1D0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
  ABISELECT(-224,-120),
  ABISELECT(-616,-324),
  ABISELECT(-616,-324),
  ABISELECT(-352,-184),
  ABISELECT(-264,-140),
  ABISELECT(-280,-148),
  ABISELECT(-280,-148),
  ABISELECT(-296,-156),
  ABISELECT(-648,-344),
  ABISELECT(-648,-344),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn208_n112_N8S20731C1D1Ev,_ZTvn112_n56_N8S20731C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn208_n112_N8S20731C1D0Ev,_ZTvn112_n56_N8S20731C1D0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
  ABISELECT(-664,-352),
  ABISELECT(-664,-352),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  ABISELECT(-688,-368),
  ABISELECT(-360,-192),
  ABISELECT(-376,-200),
  ABISELECT(-320,-172),
  ABISELECT(-688,-368),
  ABISELECT(-392,-208),
  ABISELECT(-688,-368),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20731C1D1Ev,_ZTv0_n32_N8S20731C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20731C1D0Ev,_ZTv0_n32_N8S20731C1D0Ev),
  ABISELECT(-400,-212),
  ABISELECT(-328,-176),
  ABISELECT(-696,-372),
  ABISELECT(-696,-372),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n64_N8S20731C1D1Ev,_ZTvn4_n32_N8S20731C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8_n64_N8S20731C1D0Ev,_ZTvn4_n32_N8S20731C1D0Ev),
  ABISELECT(-704,-376),
  ABISELECT(-704,-376),
  (VTBL_ENTRY)&(_ZTI8S20731C1[0]),
};
extern VTBL_ENTRY _ZTV8S20731C1[];
extern void _ZN12S20731C15_ntD1Ev();
extern void _ZN12S20731C15_ntD0Ev();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt__A3__8S20731C1[] = {
  ABISELECT(424,224),
  ABISELECT(32,20),
  ABISELECT(32,20),
  ABISELECT(296,160),
  ABISELECT(384,204),
  ABISELECT(368,196),
  ABISELECT(368,196),
  ABISELECT(352,188),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C15_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C15_nt__A13__8S20731C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt__A17__8S20731C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn352_N12S20731C15_ntD1Ev,_ZThn188_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn352_N12S20731C15_ntD0Ev,_ZThn188_N12S20731C15_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C15_nt__A3__8S20731C1[] = {
  0,
  ABISELECT(-352,-188),
  ABISELECT(16,8),
  ABISELECT(-352,-188),
  ABISELECT(-352,-188),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn368_N12S20731C15_ntD1Ev,_ZThn196_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn368_N12S20731C15_ntD0Ev,_ZThn196_N12S20731C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__12S20731C15_nt__A3__8S20731C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-368,-196),
  ABISELECT(-368,-196),
  ABISELECT(-368,-196),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn384_N12S20731C15_ntD1Ev,_ZThn204_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn384_N12S20731C15_ntD0Ev,_ZThn204_N12S20731C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__12S20731C15_nt__A3__8S20731C1[] = {
  ABISELECT(-384,-204),
  ABISELECT(40,20),
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-384,-204),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A2__12S20731C15_nt__A3__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(-296,-160),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt__A3__8S20731C1[] = {
  ABISELECT(-392,-208),
  ABISELECT(-392,-208),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn32_N12S20731C15_ntD1Ev,_ZThn20_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn32_N12S20731C15_ntD0Ev,_ZThn20_N12S20731C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C15_nt__A3__8S20731C1[] = {
  ABISELECT(336,176),
  ABISELECT(392,204),
  0,
  ABISELECT(264,140),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A2__12S20731C15_nt__A3__8S20731C1[] = {
  ABISELECT(-424,-224),
  ABISELECT(-424,-224),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt__A3__8S20731C1[] = {
  ABISELECT(-408,-216),
  ABISELECT(-408,-216),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev)();
extern void _ZN12S20731C17_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev)();
extern void _ZN12S20731C17_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__A__8S20731C1[] = {
  ABISELECT(352,188),
  ABISELECT(336,180),
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C17_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C17_ntD1Ev,_ZTv0_n20_N12S20731C17_ntD1Ev)();
extern void ABISELECT(_ZThn336_N12S20731C17_ntD1Ev,_ZThn180_N12S20731C17_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S20731C17_ntD0Ev,_ZTv0_n20_N12S20731C17_ntD0Ev)();
extern void ABISELECT(_ZThn336_N12S20731C17_ntD0Ev,_ZThn180_N12S20731C17_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C17_nt__A__8S20731C1[] = {
  0,
  ABISELECT(-336,-180),
  ABISELECT(16,8),
  ABISELECT(-352,-188),
  ABISELECT(-336,-180),
  (VTBL_ENTRY)&(_ZTI12S20731C17_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C17_ntD1Ev,_ZTv0_n20_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C17_ntD0Ev,_ZTv0_n20_N12S20731C17_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev)();
extern void ABISELECT(_ZThn352_N12S20731C17_ntD1Ev,_ZThn188_N12S20731C17_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev)();
extern void ABISELECT(_ZThn352_N12S20731C17_ntD0Ev,_ZThn188_N12S20731C17_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C17_nt__A__8S20731C1[] = {
  ABISELECT(-352,-188),
  ABISELECT(-352,-188),
  (VTBL_ENTRY)&(_ZTI12S20731C17_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S20731C2D1Ev,_ZTv0_n16_N8S20731C2D1Ev)();
extern void _ZN8S20731C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20731C2D0Ev,_ZTv0_n16_N8S20731C2D0Ev)();
extern void _ZN8S20731C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20731C2__8S20731C1[] = {
  ABISELECT(24,12),
  ABISELECT(-32,-20),
  0,
  ABISELECT(352,184),
  ABISELECT(336,176),
  ABISELECT(320,168),
  ABISELECT(296,156),
  ABISELECT(280,148),
  ABISELECT(408,212),
  ABISELECT(336,176),
  ABISELECT(392,204),
  0,
  ABISELECT(264,140),
  0,
  ABISELECT(-32,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20731C2D1Ev,_ZTv0_n16_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20731C2D0Ev,_ZTv0_n16_N8S20731C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C20_ntD1Ev,_ZTv0_n16_N12S20731C20_ntD1Ev)();
extern void _ZN12S20731C20_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C20_ntD0Ev,_ZTv0_n16_N12S20731C20_ntD0Ev)();
extern void _ZN12S20731C20_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C20_nt8S20731C2__8S20731C1[] = {
  0,
  ABISELECT(352,184),
  ABISELECT(336,176),
  ABISELECT(320,168),
  ABISELECT(296,156),
  ABISELECT(280,148),
  ABISELECT(408,212),
  ABISELECT(336,176),
  ABISELECT(392,204),
  0,
  ABISELECT(264,140),
  0,
  ABISELECT(-32,-20),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C20_ntD1Ev,_ZTv0_n16_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C20_ntD0Ev,_ZTv0_n16_N12S20731C20_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n112_N12S20731C20_ntD1Ev,_ZTv0_n56_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZThn408_N12S20731C20_ntD1Ev,_ZThn212_N12S20731C20_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N12S20731C20_ntD0Ev,_ZTv0_n56_N12S20731C20_ntD0Ev)();
extern void ABISELECT(_ZThn408_N12S20731C20_ntD0Ev,_ZThn212_N12S20731C20_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C21_nt__12S20731C20_nt8S20731C2__8S20731C1[] = {
  ABISELECT(88,52),
  ABISELECT(-408,-212),
  ABISELECT(-16,-8),
  ABISELECT(-408,-212),
  ABISELECT(-408,-212),
  ABISELECT(-56,-28),
  ABISELECT(-72,-36),
  ABISELECT(-88,-44),
  ABISELECT(-112,-56),
  ABISELECT(-128,-64),
  ABISELECT(-144,-72),
  ABISELECT(-72,-36),
  ABISELECT(-440,-232),
  ABISELECT(-408,-212),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N12S20731C20_ntD1Ev,_ZTv0_n56_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N12S20731C20_ntD0Ev,_ZTv0_n56_N12S20731C20_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n56_N12S20731C20_ntD1Ev,_ZTv0_n28_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZThn280_N12S20731C20_ntD1Ev,_ZThn148_N12S20731C20_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N12S20731C20_ntD0Ev,_ZTv0_n28_N12S20731C20_ntD0Ev)();
extern void ABISELECT(_ZThn280_N12S20731C20_ntD0Ev,_ZThn148_N12S20731C20_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__12S20731C20_nt8S20731C2__8S20731C1[] = {
  ABISELECT(-280,-148),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-312,-168),
  ABISELECT(-280,-148),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C20_ntD1Ev,_ZTv0_n28_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C20_ntD0Ev,_ZTv0_n28_N12S20731C20_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n48_N12S20731C20_ntD1Ev,_ZTv0_n24_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZThn296_N12S20731C20_ntD1Ev,_ZThn156_N12S20731C20_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N12S20731C20_ntD0Ev,_ZTv0_n24_N12S20731C20_ntD0Ev)();
extern void ABISELECT(_ZThn296_N12S20731C20_ntD0Ev,_ZThn156_N12S20731C20_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__12S20731C20_nt8S20731C2__8S20731C1[] = {
  ABISELECT(-296,-156),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-328,-176),
  ABISELECT(-296,-156),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C20_ntD1Ev,_ZTv0_n24_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C20_ntD0Ev,_ZTv0_n24_N12S20731C20_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C20_ntD1Ev,_ZTv0_n12_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZThn336_N12S20731C20_ntD1Ev,_ZThn176_N12S20731C20_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C20_ntD0Ev,_ZTv0_n12_N12S20731C20_ntD0Ev)();
extern void ABISELECT(_ZThn336_N12S20731C20_ntD0Ev,_ZThn176_N12S20731C20_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__12S20731C20_nt8S20731C2__8S20731C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-368,-196),
  ABISELECT(-336,-176),
  ABISELECT(-336,-176),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C20_ntD1Ev,_ZTv0_n12_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C20_ntD0Ev,_ZTv0_n12_N12S20731C20_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A1__12S20731C20_nt8S20731C2__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(-264,-140),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C20_nt8S20731C2__8S20731C1[] = {
  ABISELECT(-336,-180),
  ABISELECT(-304,-160),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt8S20731C2__8S20731C1[] = {
  ABISELECT(-448,-236),
  ABISELECT(-416,-216),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
};
extern void ABISELECT(_ZTvn32_n112_N12S20731C20_ntD1Ev,_ZTvn20_n56_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZTvn32_n112_N12S20731C20_ntD0Ev,_ZTvn20_n56_N12S20731C20_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C14_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt8S20731C2__8S20731C1[] = {
  ABISELECT(-144,-76),
  ABISELECT(-160,-84),
  ABISELECT(-104,-56),
  ABISELECT(-472,-252),
  ABISELECT(-176,-92),
  ABISELECT(-440,-232),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n112_N12S20731C20_ntD1Ev,_ZTvn20_n56_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n112_N12S20731C20_ntD0Ev,_ZTvn20_n56_N12S20731C20_ntD0Ev),
};
extern void ABISELECT(_ZTvn40_n112_N12S20731C20_ntD1Ev,_ZTvn24_n56_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZTvn40_n112_N12S20731C20_ntD0Ev,_ZTvn24_n56_N12S20731C20_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt8S20731C2__8S20731C1[] = {
  ABISELECT(-184,-96),
  ABISELECT(-112,-60),
  ABISELECT(-480,-256),
  ABISELECT(-448,-236),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n112_N12S20731C20_ntD1Ev,_ZTvn24_n56_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n112_N12S20731C20_ntD0Ev,_ZTvn24_n56_N12S20731C20_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A2__12S20731C20_nt8S20731C2__8S20731C1[] = {
  ABISELECT(-488,-260),
  ABISELECT(-456,-240),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C7_nt12S20731C21_nt__A3__12S20731C20_nt8S20731C2__8S20731C1[] = {
  ABISELECT(-512,-276),
  ABISELECT(-480,-256),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
};
extern void ABISELECT(_ZTvn88_n112_N12S20731C20_ntD1Ev,_ZTvn52_n56_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZTvn88_n112_N12S20731C20_ntD0Ev,_ZTvn52_n56_N12S20731C20_ntD0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt8S20731C2__8S20731C1[] = {
  ABISELECT(-104,-60),
  ABISELECT(-496,-264),
  ABISELECT(-496,-264),
  ABISELECT(-232,-124),
  ABISELECT(-144,-80),
  ABISELECT(-160,-88),
  ABISELECT(-160,-88),
  ABISELECT(-176,-96),
  ABISELECT(-528,-284),
  ABISELECT(-496,-264),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n112_N12S20731C20_ntD1Ev,_ZTvn52_n56_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n112_N12S20731C20_ntD0Ev,_ZTvn52_n56_N12S20731C20_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N12S20731C20_ntD1Ev,_ZTv0_n20_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZThn320_N12S20731C20_ntD1Ev,_ZThn168_N12S20731C20_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S20731C20_ntD0Ev,_ZTv0_n20_N12S20731C20_ntD0Ev)();
extern void ABISELECT(_ZThn320_N12S20731C20_ntD0Ev,_ZThn168_N12S20731C20_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C20_nt8S20731C2__8S20731C1[] = {
  0,
  ABISELECT(-320,-168),
  ABISELECT(16,8),
  ABISELECT(-352,-188),
  ABISELECT(-320,-168),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C20_ntD1Ev,_ZTv0_n20_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C20_ntD0Ev,_ZTv0_n20_N12S20731C20_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n80_N12S20731C20_ntD1Ev,_ZTv0_n40_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZThn352_N12S20731C20_ntD1Ev,_ZThn184_N12S20731C20_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N12S20731C20_ntD0Ev,_ZTv0_n40_N12S20731C20_ntD0Ev)();
extern void ABISELECT(_ZThn352_N12S20731C20_ntD0Ev,_ZThn184_N12S20731C20_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__12S20731C20_nt8S20731C2__8S20731C1[] = {
  ABISELECT(-352,-184),
  ABISELECT(40,20),
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-352,-184),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C20_ntD1Ev,_ZTv0_n40_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C20_ntD0Ev,_ZTv0_n40_N12S20731C20_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__12S20731C20_nt8S20731C2__8S20731C1[] = {
  ABISELECT(-392,-208),
  ABISELECT(-360,-188),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A6__12S20731C20_nt8S20731C2__8S20731C1[] = {
  ABISELECT(-424,-224),
  ABISELECT(-392,-204),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A7__12S20731C20_nt8S20731C2__8S20731C1[] = {
  ABISELECT(-408,-216),
  ABISELECT(-376,-196),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
};
extern void ABISELECT(_ZTvn208_n112_N12S20731C20_ntD1Ev,_ZTvn112_n56_N12S20731C20_ntD1Ev)();
extern void ABISELECT(_ZTvn208_n112_N12S20731C20_ntD0Ev,_ZTvn112_n56_N12S20731C20_ntD0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt12S20731C21_nt__A1__12S20731C20_nt8S20731C2__8S20731C1[] = {
  ABISELECT(-224,-120),
  ABISELECT(-616,-324),
  ABISELECT(-616,-324),
  ABISELECT(-352,-184),
  ABISELECT(-264,-140),
  ABISELECT(-280,-148),
  ABISELECT(-280,-148),
  ABISELECT(-296,-156),
  ABISELECT(-648,-344),
  ABISELECT(-616,-324),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn208_n112_N12S20731C20_ntD1Ev,_ZTvn112_n56_N12S20731C20_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn208_n112_N12S20731C20_ntD0Ev,_ZTvn112_n56_N12S20731C20_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C21_nt__A12__12S20731C20_nt8S20731C2__8S20731C1[] = {
  ABISELECT(-664,-352),
  ABISELECT(-632,-332),
  (VTBL_ENTRY)&(_ZTI12S20731C20_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev)();
extern void _ZN12S20731C17_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev)();
extern void _ZN12S20731C17_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt8S20731C2__A1__8S20731C1[] = {
  ABISELECT(328,172),
  ABISELECT(312,164),
  ABISELECT(-40,-24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C17_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C17_ntD1Ev,_ZTv0_n20_N12S20731C17_ntD1Ev)();
extern void ABISELECT(_ZThn312_N12S20731C17_ntD1Ev,_ZThn164_N12S20731C17_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S20731C17_ntD0Ev,_ZTv0_n20_N12S20731C17_ntD0Ev)();
extern void ABISELECT(_ZThn312_N12S20731C17_ntD0Ev,_ZThn164_N12S20731C17_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C17_nt8S20731C2__A1__8S20731C1[] = {
  0,
  ABISELECT(-312,-164),
  ABISELECT(16,8),
  ABISELECT(-352,-188),
  ABISELECT(-312,-164),
  (VTBL_ENTRY)&(_ZTI12S20731C17_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C17_ntD1Ev,_ZTv0_n20_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C17_ntD0Ev,_ZTv0_n20_N12S20731C17_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev)();
extern void ABISELECT(_ZThn328_N12S20731C17_ntD1Ev,_ZThn172_N12S20731C17_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev)();
extern void ABISELECT(_ZThn328_N12S20731C17_ntD0Ev,_ZThn172_N12S20731C17_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C17_nt8S20731C2__A1__8S20731C1[] = {
  ABISELECT(-328,-172),
  ABISELECT(-328,-172),
  (VTBL_ENTRY)&(_ZTI12S20731C17_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20731C2D1Ev,_ZTv0_n12_N8S20731C2D1Ev)();
extern void ABISELECT(_ZThn336_N8S20731C2D1Ev,_ZThn176_N8S20731C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20731C2D0Ev,_ZTv0_n12_N8S20731C2D0Ev)();
extern void ABISELECT(_ZThn336_N8S20731C2D0Ev,_ZThn176_N8S20731C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__8S20731C2__8S20731C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-368,-196),
  ABISELECT(-336,-176),
  ABISELECT(-336,-176),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20731C2D1Ev,_ZTv0_n12_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20731C2D0Ev,_ZTv0_n12_N8S20731C2D0Ev),
};
extern void ABISELECT(_ZTv0_n112_N8S20731C2D1Ev,_ZTv0_n56_N8S20731C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S20731C2D1Ev,_ZThn12_N8S20731C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S20731C2D0Ev,_ZTv0_n56_N8S20731C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S20731C2D0Ev,_ZThn12_N8S20731C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C6_nt__8S20731C2__8S20731C1[] = {
  ABISELECT(88,52),
  ABISELECT(-24,-12),
  ABISELECT(368,192),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(328,172),
  ABISELECT(312,164),
  ABISELECT(296,156),
  ABISELECT(272,144),
  ABISELECT(256,136),
  ABISELECT(240,128),
  ABISELECT(312,164),
  ABISELECT(-56,-32),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S20731C2D1Ev,_ZTv0_n56_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S20731C2D0Ev,_ZTv0_n56_N8S20731C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__8S20731C2__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(-264,-140),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C2__8S20731C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S20731C2D1Ev,_ZTv0_n28_N8S20731C2D1Ev)();
extern void ABISELECT(_ZThn280_N8S20731C2D1Ev,_ZThn148_N8S20731C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20731C2D0Ev,_ZTv0_n28_N8S20731C2D0Ev)();
extern void ABISELECT(_ZThn280_N8S20731C2D0Ev,_ZThn148_N8S20731C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__8S20731C2__8S20731C1[] = {
  ABISELECT(-280,-148),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-312,-168),
  ABISELECT(-280,-148),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20731C2D1Ev,_ZTv0_n28_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20731C2D0Ev,_ZTv0_n28_N8S20731C2D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20731C2D1Ev,_ZTv0_n24_N8S20731C2D1Ev)();
extern void ABISELECT(_ZThn296_N8S20731C2D1Ev,_ZThn156_N8S20731C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20731C2D0Ev,_ZTv0_n24_N8S20731C2D0Ev)();
extern void ABISELECT(_ZThn296_N8S20731C2D0Ev,_ZThn156_N8S20731C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__A1__8S20731C2__8S20731C1[] = {
  ABISELECT(-296,-156),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-328,-176),
  ABISELECT(-296,-156),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20731C2D1Ev,_ZTv0_n24_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20731C2D0Ev,_ZTv0_n24_N8S20731C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__A1__8S20731C2__8S20731C1[] = {
  ABISELECT(-336,-180),
  ABISELECT(-304,-160),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
};
extern void ABISELECT(_ZTvn32_n112_N8S20731C2D1Ev,_ZTvn20_n56_N8S20731C2D1Ev)();
extern void ABISELECT(_ZTvn32_n112_N8S20731C2D0Ev,_ZTvn20_n56_N8S20731C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C2__8S20731C1[] = {
  ABISELECT(240,124),
  ABISELECT(224,116),
  ABISELECT(280,144),
  ABISELECT(-88,-52),
  ABISELECT(208,108),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n112_N8S20731C2D1Ev,_ZTvn20_n56_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n112_N8S20731C2D0Ev,_ZTvn20_n56_N8S20731C2D0Ev),
};
extern void ABISELECT(_ZTvn40_n112_N8S20731C2D1Ev,_ZTvn24_n56_N8S20731C2D1Ev)();
extern void ABISELECT(_ZTvn40_n112_N8S20731C2D0Ev,_ZTvn24_n56_N8S20731C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A1__8S20731C2__8S20731C1[] = {
  ABISELECT(200,104),
  ABISELECT(272,140),
  ABISELECT(-96,-56),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n112_N8S20731C2D1Ev,_ZTvn24_n56_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n112_N8S20731C2D0Ev,_ZTvn24_n56_N8S20731C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C2__8S20731C1[] = {
  ABISELECT(-104,-60),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C7_nt11S20731C6_nt__A3__8S20731C2__8S20731C1[] = {
  ABISELECT(-128,-76),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
};
extern void ABISELECT(_ZTvn88_n112_N8S20731C2D1Ev,_ZTvn52_n56_N8S20731C2D1Ev)();
extern void ABISELECT(_ZTvn88_n112_N8S20731C2D0Ev,_ZTvn52_n56_N8S20731C2D0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C2__8S20731C1[] = {
  ABISELECT(280,140),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  ABISELECT(152,76),
  ABISELECT(240,120),
  ABISELECT(224,112),
  ABISELECT(224,112),
  ABISELECT(208,104),
  ABISELECT(-144,-84),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n112_N8S20731C2D1Ev,_ZTvn52_n56_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n112_N8S20731C2D0Ev,_ZTvn52_n56_N8S20731C2D0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S20731C2D1Ev,_ZTv0_n20_N8S20731C2D1Ev)();
extern void ABISELECT(_ZThn320_N8S20731C2D1Ev,_ZThn168_N8S20731C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20731C2D0Ev,_ZTv0_n20_N8S20731C2D0Ev)();
extern void ABISELECT(_ZThn320_N8S20731C2D0Ev,_ZThn168_N8S20731C2D0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__8S20731C2__8S20731C1[] = {
  0,
  ABISELECT(-320,-168),
  ABISELECT(16,8),
  ABISELECT(-352,-188),
  ABISELECT(-320,-168),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20731C2D1Ev,_ZTv0_n20_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20731C2D0Ev,_ZTv0_n20_N8S20731C2D0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n80_N8S20731C2D1Ev,_ZTv0_n40_N8S20731C2D1Ev)();
extern void ABISELECT(_ZThn352_N8S20731C2D1Ev,_ZThn184_N8S20731C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20731C2D0Ev,_ZTv0_n40_N8S20731C2D0Ev)();
extern void ABISELECT(_ZThn352_N8S20731C2D0Ev,_ZThn184_N8S20731C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__8S20731C2__8S20731C1[] = {
  ABISELECT(-352,-184),
  ABISELECT(40,20),
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-352,-184),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20731C2D1Ev,_ZTv0_n40_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20731C2D0Ev,_ZTv0_n40_N8S20731C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__8S20731C2__8S20731C1[] = {
  ABISELECT(-392,-208),
  ABISELECT(-360,-188),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A6__8S20731C2__8S20731C1[] = {
  ABISELECT(-424,-224),
  ABISELECT(-392,-204),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A7__8S20731C2__8S20731C1[] = {
  ABISELECT(-408,-216),
  ABISELECT(-376,-196),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
};
extern void ABISELECT(_ZTv0_n112_N8S20731C2D1Ev,_ZTv0_n56_N8S20731C2D1Ev)();
extern void ABISELECT(_ZThn408_N8S20731C2D1Ev,_ZThn212_N8S20731C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S20731C2D0Ev,_ZTv0_n56_N8S20731C2D0Ev)();
extern void ABISELECT(_ZThn408_N8S20731C2D0Ev,_ZThn212_N8S20731C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C21_nt__8S20731C2__8S20731C1[] = {
  ABISELECT(88,52),
  ABISELECT(-408,-212),
  ABISELECT(-16,-8),
  ABISELECT(-408,-212),
  ABISELECT(-408,-212),
  ABISELECT(-56,-28),
  ABISELECT(-72,-36),
  ABISELECT(-88,-44),
  ABISELECT(-112,-56),
  ABISELECT(-128,-64),
  ABISELECT(-144,-72),
  ABISELECT(-72,-36),
  ABISELECT(-440,-232),
  ABISELECT(-408,-212),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S20731C2D1Ev,_ZTv0_n56_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S20731C2D0Ev,_ZTv0_n56_N8S20731C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A8__8S20731C2__8S20731C1[] = {
  ABISELECT(-448,-236),
  ABISELECT(-416,-216),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
};
extern void ABISELECT(_ZTvn32_n112_N8S20731C2D1Ev,_ZTvn20_n56_N8S20731C2D1Ev)();
extern void ABISELECT(_ZTvn32_n112_N8S20731C2D0Ev,_ZTvn20_n56_N8S20731C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2__8S20731C1[] = {
  ABISELECT(-144,-76),
  ABISELECT(-160,-84),
  ABISELECT(-104,-56),
  ABISELECT(-472,-252),
  ABISELECT(-176,-92),
  ABISELECT(-440,-232),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n112_N8S20731C2D1Ev,_ZTvn20_n56_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn32_n112_N8S20731C2D0Ev,_ZTvn20_n56_N8S20731C2D0Ev),
};
extern void ABISELECT(_ZTvn40_n112_N8S20731C2D1Ev,_ZTvn24_n56_N8S20731C2D1Ev)();
extern void ABISELECT(_ZTvn40_n112_N8S20731C2D0Ev,_ZTvn24_n56_N8S20731C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A3__8S20731C2__8S20731C1[] = {
  ABISELECT(-184,-96),
  ABISELECT(-112,-60),
  ABISELECT(-480,-256),
  ABISELECT(-448,-236),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n112_N8S20731C2D1Ev,_ZTvn24_n56_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n112_N8S20731C2D0Ev,_ZTvn24_n56_N8S20731C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A9__8S20731C2__8S20731C1[] = {
  ABISELECT(-488,-260),
  ABISELECT(-456,-240),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C7_nt12S20731C21_nt__A10__8S20731C2__8S20731C1[] = {
  ABISELECT(-512,-276),
  ABISELECT(-480,-256),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
};
extern void ABISELECT(_ZTvn88_n112_N8S20731C2D1Ev,_ZTvn52_n56_N8S20731C2D1Ev)();
extern void ABISELECT(_ZTvn88_n112_N8S20731C2D0Ev,_ZTvn52_n56_N8S20731C2D0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2__8S20731C1[] = {
  ABISELECT(-104,-60),
  ABISELECT(-496,-264),
  ABISELECT(-496,-264),
  ABISELECT(-232,-124),
  ABISELECT(-144,-80),
  ABISELECT(-160,-88),
  ABISELECT(-160,-88),
  ABISELECT(-176,-96),
  ABISELECT(-528,-284),
  ABISELECT(-496,-264),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n112_N8S20731C2D1Ev,_ZTvn52_n56_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn88_n112_N8S20731C2D0Ev,_ZTvn52_n56_N8S20731C2D0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
extern void ABISELECT(_ZTvn208_n112_N8S20731C2D1Ev,_ZTvn112_n56_N8S20731C2D1Ev)();
extern void ABISELECT(_ZTvn208_n112_N8S20731C2D0Ev,_ZTvn112_n56_N8S20731C2D0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt12S20731C21_nt__A2__8S20731C2__8S20731C1[] = {
  ABISELECT(-224,-120),
  ABISELECT(-616,-324),
  ABISELECT(-616,-324),
  ABISELECT(-352,-184),
  ABISELECT(-264,-140),
  ABISELECT(-280,-148),
  ABISELECT(-280,-148),
  ABISELECT(-296,-156),
  ABISELECT(-648,-344),
  ABISELECT(-616,-324),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn208_n112_N8S20731C2D1Ev,_ZTvn112_n56_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn208_n112_N8S20731C2D0Ev,_ZTvn112_n56_N8S20731C2D0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C21_nt__A16__8S20731C2__8S20731C1[] = {
  ABISELECT(-664,-352),
  ABISELECT(-632,-332),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S20731C2D1Ev,_ZTv0_n12_N8S20731C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S20731C2D1Ev,_ZThn4_N8S20731C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20731C2D0Ev,_ZTv0_n12_N8S20731C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S20731C2D0Ev,_ZThn4_N8S20731C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__A__8S20731C2__8S20731C1[] = {
  ABISELECT(328,172),
  ABISELECT(312,164),
  ABISELECT(-40,-24),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20731C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20731C2D1Ev,_ZTv0_n12_N8S20731C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20731C2D0Ev,_ZTv0_n12_N8S20731C2D0Ev),
};
extern void _ZN11S20731C6_ntD1Ev();
extern void _ZN11S20731C6_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C6_nt__8S20731C1[] = {
  ABISELECT(368,192),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(328,172),
  ABISELECT(312,164),
  ABISELECT(296,156),
  ABISELECT(272,144),
  ABISELECT(256,136),
  ABISELECT(240,128),
  ABISELECT(312,164),
  ABISELECT(-56,-32),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C6_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C6_ntD0Ev,
};
extern void _ZN11S20731C7_ntD1Ev();
extern void _ZN11S20731C7_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(368,192),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(328,172),
  ABISELECT(312,164),
  ABISELECT(296,156),
  ABISELECT(272,144),
  ABISELECT(256,136),
  ABISELECT(240,128),
  ABISELECT(312,164),
  ABISELECT(-56,-32),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C7_ntD0Ev,
};
extern void _ZN11S20731C8_ntD1Ev();
extern void _ZN11S20731C8_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(240,128),
  ABISELECT(312,164),
  ABISELECT(-56,-32),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C8_ntD0Ev,
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(240,128),
  ABISELECT(312,164),
  ABISELECT(-56,-32),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-56,-32),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__A1__8S20731C1[] = {
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZThn312_N11S20731C9_ntD1Ev,_ZThn164_N11S20731C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
extern void ABISELECT(_ZThn312_N11S20731C9_ntD0Ev,_ZThn164_N11S20731C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-312,-164),
  ABISELECT(-312,-164),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(-240,-128),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev)();
extern void ABISELECT(_ZThn312_N11S20731C8_ntD1Ev,_ZThn164_N11S20731C8_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev)();
extern void ABISELECT(_ZThn312_N11S20731C8_ntD0Ev,_ZThn164_N11S20731C8_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-312,-164),
  ABISELECT(-312,-164),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(-240,-128),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
extern void _ZN12S20731C14_ntD1Ev();
extern void _ZN12S20731C14_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(240,124),
  ABISELECT(224,116),
  ABISELECT(280,144),
  ABISELECT(-88,-52),
  ABISELECT(208,108),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C14_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C14_ntD0Ev,
};
extern void _ZN11S20731C8_ntD1Ev();
extern void _ZN11S20731C8_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A1__8S20731C1[] = {
  ABISELECT(200,104),
  ABISELECT(272,140),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C8_ntD0Ev,
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C1[] = {
  ABISELECT(200,104),
  ABISELECT(272,140),
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C1[] = {
  ABISELECT(-96,-56),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C1[] = {
  ABISELECT(-104,-60),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A4__8S20731C1[] = {
  ABISELECT(-104,-60),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZThn272_N11S20731C9_ntD1Ev,_ZThn140_N11S20731C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
extern void ABISELECT(_ZThn272_N11S20731C9_ntD0Ev,_ZThn140_N11S20731C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C1[] = {
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(-200,-104),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C1[] = {
  ABISELECT(-104,-60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev)();
extern void ABISELECT(_ZThn272_N11S20731C8_ntD1Ev,_ZThn140_N11S20731C8_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev)();
extern void ABISELECT(_ZThn272_N11S20731C8_ntD0Ev,_ZThn140_N11S20731C8_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A1__8S20731C1[] = {
  ABISELECT(-272,-140),
  ABISELECT(-272,-140),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A1__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(-200,-104),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A1__8S20731C1[] = {
  ABISELECT(-104,-60),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(-208,-108),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
extern void ABISELECT(_ZThn8_N12S20731C14_ntD1Ev,_ZThn4_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn8_N12S20731C14_ntD0Ev,_ZThn4_N12S20731C14_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(200,104),
  ABISELECT(272,140),
  ABISELECT(-96,-56),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N12S20731C14_ntD1Ev,_ZThn4_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N12S20731C14_ntD0Ev,_ZThn4_N12S20731C14_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn280_N12S20731C14_ntD1Ev,_ZThn144_N12S20731C14_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev)();
extern void ABISELECT(_ZThn280_N12S20731C14_ntD0Ev,_ZThn144_N12S20731C14_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__A1__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-280,-144),
  ABISELECT(-280,-144),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-104,-60),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
extern void ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn224_N12S20731C14_ntD1Ev,_ZThn116_N12S20731C14_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev)();
extern void ABISELECT(_ZThn224_N12S20731C14_ntD0Ev,_ZThn116_N12S20731C14_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-224,-116),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-312,-168),
  ABISELECT(-224,-116),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn240_N12S20731C14_ntD1Ev,_ZThn124_N12S20731C14_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev)();
extern void ABISELECT(_ZThn240_N12S20731C14_ntD0Ev,_ZThn124_N12S20731C14_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-240,-124),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-328,-176),
  ABISELECT(-240,-124),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-336,-180),
  ABISELECT(-248,-128),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C7_nt11S20731C6_nt__A3__8S20731C1[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C7_nt11S20731C6_nt__A5__8S20731C1[] = {
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void _ZN12S20731C15_ntD1Ev();
extern void _ZN12S20731C15_ntD0Ev();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(280,140),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  ABISELECT(152,76),
  ABISELECT(240,120),
  ABISELECT(224,112),
  ABISELECT(224,112),
  ABISELECT(208,104),
  ABISELECT(-144,-84),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C15_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C15_nt11S20731C7_nt11S20731C6_nt__A4__8S20731C1[] = {
  ABISELECT(-144,-84),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt11S20731C7_nt11S20731C6_nt__A6__8S20731C1[] = {
  ABISELECT(-144,-84),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn208_N12S20731C15_ntD1Ev,_ZThn104_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn208_N12S20731C15_ntD0Ev,_ZThn104_N12S20731C15_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  0,
  ABISELECT(-208,-104),
  ABISELECT(16,8),
  ABISELECT(-352,-188),
  ABISELECT(-208,-104),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn224_N12S20731C15_ntD1Ev,_ZThn112_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn224_N12S20731C15_ntD0Ev,_ZThn112_N12S20731C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-368,-196),
  ABISELECT(-224,-112),
  ABISELECT(-224,-112),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZThn240_N12S20731C15_ntD1Ev,_ZThn120_N12S20731C15_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev)();
extern void ABISELECT(_ZThn240_N12S20731C15_ntD0Ev,_ZThn120_N12S20731C15_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-240,-120),
  ABISELECT(40,20),
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-240,-120),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A2__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(-152,-76),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-392,-208),
  ABISELECT(-248,-124),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(336,176),
  ABISELECT(392,204),
  0,
  ABISELECT(264,140),
  ABISELECT(112,64),
  ABISELECT(-32,-20),
  ABISELECT(112,64),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A2__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-424,-224),
  ABISELECT(-280,-140),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-408,-216),
  ABISELECT(-264,-132),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C7_ntD1Ev,_ZTv0_n12_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn312_N11S20731C7_ntD1Ev,_ZThn164_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C7_ntD0Ev,_ZTv0_n12_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn312_N11S20731C7_ntD0Ev,_ZThn164_N11S20731C7_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-368,-196),
  ABISELECT(-312,-164),
  ABISELECT(-312,-164),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C7_ntD1Ev,_ZTv0_n12_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C7_ntD0Ev,_ZTv0_n12_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(-240,-128),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZTv0_n56_N11S20731C7_ntD1Ev,_ZTv0_n28_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn256_N11S20731C7_ntD1Ev,_ZThn136_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N11S20731C7_ntD0Ev,_ZTv0_n28_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn256_N11S20731C7_ntD0Ev,_ZThn136_N11S20731C7_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-256,-136),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-312,-168),
  ABISELECT(-256,-136),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S20731C7_ntD1Ev,_ZTv0_n28_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S20731C7_ntD0Ev,_ZTv0_n28_N11S20731C7_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n48_N11S20731C7_ntD1Ev,_ZTv0_n24_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn272_N11S20731C7_ntD1Ev,_ZThn144_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N11S20731C7_ntD0Ev,_ZTv0_n24_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn272_N11S20731C7_ntD0Ev,_ZThn144_N11S20731C7_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__A1__11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-272,-144),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-328,-176),
  ABISELECT(-272,-144),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N11S20731C7_ntD1Ev,_ZTv0_n24_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N11S20731C7_ntD0Ev,_ZTv0_n24_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__A1__11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-336,-180),
  ABISELECT(-280,-148),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZThn32_N11S20731C7_ntD1Ev,_ZThn20_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn32_N11S20731C7_ntD0Ev,_ZThn20_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C14_nt__11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(240,124),
  ABISELECT(224,116),
  ABISELECT(280,144),
  ABISELECT(-88,-52),
  ABISELECT(208,108),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N11S20731C7_ntD1Ev,_ZThn20_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N11S20731C7_ntD0Ev,_ZThn20_N11S20731C7_ntD0Ev),
};
extern void ABISELECT(_ZThn40_N11S20731C7_ntD1Ev,_ZThn24_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn40_N11S20731C7_ntD0Ev,_ZThn24_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt12S20731C14_nt__A1__11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(200,104),
  ABISELECT(272,140),
  ABISELECT(-96,-56),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N11S20731C7_ntD1Ev,_ZThn24_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N11S20731C7_ntD0Ev,_ZThn24_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-104,-60),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A__11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-128,-76),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZThn88_N11S20731C7_ntD1Ev,_ZThn52_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn88_N11S20731C7_ntD0Ev,_ZThn52_N11S20731C7_ntD0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt__11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(280,140),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  ABISELECT(152,76),
  ABISELECT(240,120),
  ABISELECT(224,112),
  ABISELECT(224,112),
  ABISELECT(208,104),
  ABISELECT(-144,-84),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N11S20731C7_ntD1Ev,_ZThn52_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N11S20731C7_ntD0Ev,_ZThn52_N11S20731C7_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N11S20731C7_ntD1Ev,_ZTv0_n20_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn296_N11S20731C7_ntD1Ev,_ZThn156_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N11S20731C7_ntD0Ev,_ZTv0_n20_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn296_N11S20731C7_ntD0Ev,_ZThn156_N11S20731C7_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  0,
  ABISELECT(-296,-156),
  ABISELECT(16,8),
  ABISELECT(-352,-188),
  ABISELECT(-296,-156),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S20731C7_ntD1Ev,_ZTv0_n20_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S20731C7_ntD0Ev,_ZTv0_n20_N11S20731C7_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n80_N11S20731C7_ntD1Ev,_ZTv0_n40_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn328_N11S20731C7_ntD1Ev,_ZThn172_N11S20731C7_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N11S20731C7_ntD0Ev,_ZTv0_n40_N11S20731C7_ntD0Ev)();
extern void ABISELECT(_ZThn328_N11S20731C7_ntD0Ev,_ZThn172_N11S20731C7_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-328,-172),
  ABISELECT(40,20),
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-328,-172),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N11S20731C7_ntD1Ev,_ZTv0_n40_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N11S20731C7_ntD0Ev,_ZTv0_n40_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-392,-208),
  ABISELECT(-336,-176),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N11S20731C7_ntD1Ev,_ZTv0_n16_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZTv0_n32_N11S20731C7_ntD0Ev,_ZTv0_n16_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(336,176),
  ABISELECT(392,204),
  0,
  ABISELECT(264,140),
  ABISELECT(24,12),
  ABISELECT(-32,-20),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20731C7_ntD1Ev,_ZTv0_n16_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20731C7_ntD0Ev,_ZTv0_n16_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A6__11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-424,-224),
  ABISELECT(-368,-192),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A7__11S20731C7_nt11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-408,-216),
  ABISELECT(-352,-184),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C6_ntD1Ev,_ZTv0_n12_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZThn312_N11S20731C6_ntD1Ev,_ZThn164_N11S20731C6_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C6_ntD0Ev,_ZTv0_n12_N11S20731C6_ntD0Ev)();
extern void ABISELECT(_ZThn312_N11S20731C6_ntD0Ev,_ZThn164_N11S20731C6_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__11S20731C6_nt__8S20731C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-368,-196),
  ABISELECT(-312,-164),
  ABISELECT(-312,-164),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C6_ntD1Ev,_ZTv0_n12_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C6_ntD0Ev,_ZTv0_n12_N11S20731C6_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(-240,-128),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt__11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
};
extern void ABISELECT(_ZTv0_n56_N11S20731C6_ntD1Ev,_ZTv0_n28_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZThn256_N11S20731C6_ntD1Ev,_ZThn136_N11S20731C6_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N11S20731C6_ntD0Ev,_ZTv0_n28_N11S20731C6_ntD0Ev)();
extern void ABISELECT(_ZThn256_N11S20731C6_ntD0Ev,_ZThn136_N11S20731C6_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-256,-136),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-312,-168),
  ABISELECT(-256,-136),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S20731C6_ntD1Ev,_ZTv0_n28_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S20731C6_ntD0Ev,_ZTv0_n28_N11S20731C6_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n48_N11S20731C6_ntD1Ev,_ZTv0_n24_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZThn272_N11S20731C6_ntD1Ev,_ZThn144_N11S20731C6_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N11S20731C6_ntD0Ev,_ZTv0_n24_N11S20731C6_ntD0Ev)();
extern void ABISELECT(_ZThn272_N11S20731C6_ntD0Ev,_ZThn144_N11S20731C6_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__A1__11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-272,-144),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-328,-176),
  ABISELECT(-272,-144),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N11S20731C6_ntD1Ev,_ZTv0_n24_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N11S20731C6_ntD0Ev,_ZTv0_n24_N11S20731C6_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__A1__11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-336,-180),
  ABISELECT(-280,-148),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
};
extern void ABISELECT(_ZThn32_N11S20731C6_ntD1Ev,_ZThn20_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZThn32_N11S20731C6_ntD0Ev,_ZThn20_N11S20731C6_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C14_nt11S20731C7_nt__11S20731C6_nt__8S20731C1[] = {
  ABISELECT(240,124),
  ABISELECT(224,116),
  ABISELECT(280,144),
  ABISELECT(-88,-52),
  ABISELECT(208,108),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N11S20731C6_ntD1Ev,_ZThn20_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N11S20731C6_ntD0Ev,_ZThn20_N11S20731C6_ntD0Ev),
};
extern void ABISELECT(_ZThn40_N11S20731C6_ntD1Ev,_ZThn24_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZThn40_N11S20731C6_ntD0Ev,_ZThn24_N11S20731C6_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__11S20731C6_nt__8S20731C1[] = {
  ABISELECT(200,104),
  ABISELECT(272,140),
  ABISELECT(-96,-56),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N11S20731C6_ntD1Ev,_ZThn24_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N11S20731C6_ntD0Ev,_ZThn24_N11S20731C6_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-104,-60),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C7_nt__A3__11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-128,-76),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
};
extern void ABISELECT(_ZThn88_N11S20731C6_ntD1Ev,_ZThn52_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZThn88_N11S20731C6_ntD0Ev,_ZThn52_N11S20731C6_ntD0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt11S20731C7_nt__11S20731C6_nt__8S20731C1[] = {
  ABISELECT(280,140),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  ABISELECT(152,76),
  ABISELECT(240,120),
  ABISELECT(224,112),
  ABISELECT(224,112),
  ABISELECT(208,104),
  ABISELECT(-144,-84),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N11S20731C6_ntD1Ev,_ZThn52_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N11S20731C6_ntD0Ev,_ZThn52_N11S20731C6_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N11S20731C6_ntD1Ev,_ZTv0_n20_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZThn296_N11S20731C6_ntD1Ev,_ZThn156_N11S20731C6_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N11S20731C6_ntD0Ev,_ZTv0_n20_N11S20731C6_ntD0Ev)();
extern void ABISELECT(_ZThn296_N11S20731C6_ntD0Ev,_ZThn156_N11S20731C6_ntD0Ev)() __attribute__((weak));
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__11S20731C6_nt__8S20731C1[] = {
  0,
  ABISELECT(-296,-156),
  ABISELECT(16,8),
  ABISELECT(-352,-188),
  ABISELECT(-296,-156),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S20731C6_ntD1Ev,_ZTv0_n20_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S20731C6_ntD0Ev,_ZTv0_n20_N11S20731C6_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n80_N11S20731C6_ntD1Ev,_ZTv0_n40_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZThn328_N11S20731C6_ntD1Ev,_ZThn172_N11S20731C6_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N11S20731C6_ntD0Ev,_ZTv0_n40_N11S20731C6_ntD0Ev)();
extern void ABISELECT(_ZThn328_N11S20731C6_ntD0Ev,_ZThn172_N11S20731C6_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-328,-172),
  ABISELECT(40,20),
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(-328,-172),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N11S20731C6_ntD1Ev,_ZTv0_n40_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N11S20731C6_ntD0Ev,_ZTv0_n40_N11S20731C6_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-392,-208),
  ABISELECT(-336,-176),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N11S20731C6_ntD1Ev,_ZTv0_n16_N11S20731C6_ntD1Ev)();
extern void ABISELECT(_ZTv0_n32_N11S20731C6_ntD0Ev,_ZTv0_n16_N11S20731C6_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__11S20731C6_nt__8S20731C1[] = {
  ABISELECT(336,176),
  ABISELECT(392,204),
  0,
  ABISELECT(264,140),
  ABISELECT(24,12),
  ABISELECT(-32,-20),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20731C6_ntD1Ev,_ZTv0_n16_N11S20731C6_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20731C6_ntD0Ev,_ZTv0_n16_N11S20731C6_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A6__11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-424,-224),
  ABISELECT(-368,-192),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A7__11S20731C6_nt__8S20731C1[] = {
  ABISELECT(-408,-216),
  ABISELECT(-352,-184),
  (VTBL_ENTRY)&(_ZTI11S20731C6_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__8S20731C1[] = {
  ABISELECT(-296,-160),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void _ZN12S20731C13_ntD1Ev();
extern void _ZN12S20731C13_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__8S20731C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-312,-168),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C13_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C13_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C13_nt__A2__8S20731C1[] = {
  ABISELECT(-312,-168),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n48_N12S20731C13_ntD1Ev,_ZTv0_n24_N12S20731C13_ntD1Ev)();
extern void ABISELECT(_ZThn16_N12S20731C13_ntD1Ev,_ZThn8_N12S20731C13_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N12S20731C13_ntD0Ev,_ZTv0_n24_N12S20731C13_ntD0Ev)();
extern void ABISELECT(_ZThn16_N12S20731C13_ntD0Ev,_ZThn8_N12S20731C13_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__12S20731C13_nt__8S20731C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-328,-176),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C13_ntD1Ev,_ZTv0_n24_N12S20731C13_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C13_ntD0Ev,_ZTv0_n24_N12S20731C13_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C13_ntD1Ev,_ZTv0_n12_N12S20731C13_ntD1Ev)();
extern void ABISELECT(_ZThn56_N12S20731C13_ntD1Ev,_ZThn28_N12S20731C13_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C13_ntD0Ev,_ZTv0_n12_N12S20731C13_ntD0Ev)();
extern void ABISELECT(_ZThn56_N12S20731C13_ntD0Ev,_ZThn28_N12S20731C13_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C13_nt__8S20731C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C13_ntD1Ev,_ZTv0_n12_N12S20731C13_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C13_ntD0Ev,_ZTv0_n12_N12S20731C13_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A1__12S20731C13_nt__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C13_nt__8S20731C1[] = {
  ABISELECT(-336,-180),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI12S20731C13_nt[0]),
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__A1__8S20731C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-328,-176),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt__A1__8S20731C1[] = {
  ABISELECT(-328,-176),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__A1__8S20731C1[] = {
  ABISELECT(-336,-180),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt__A3__8S20731C1[] = {
  ABISELECT(-336,-180),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZThn40_N11S20731C9_ntD1Ev,_ZThn20_N11S20731C9_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
extern void ABISELECT(_ZThn40_N11S20731C9_ntD0Ev,_ZThn20_N11S20731C9_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt__A1__8S20731C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt__A1__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt__A1__8S20731C1[] = {
  ABISELECT(-336,-180),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
extern void _ZN12S20731C16_ntD1Ev();
extern void _ZN12S20731C16_ntD0Ev();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__8S20731C1[] = {
  ABISELECT(16,8),
  ABISELECT(-352,-188),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C16_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C16_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C16_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C16_nt__A7__8S20731C1[] = {
  ABISELECT(-352,-188),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev)();
extern void ABISELECT(_ZThn16_N12S20731C16_ntD1Ev,_ZThn8_N12S20731C16_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev)();
extern void ABISELECT(_ZThn16_N12S20731C16_ntD0Ev,_ZThn8_N12S20731C16_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C16_nt__8S20731C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C16_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev)();
extern void _ZN12S20731C17_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev)();
extern void _ZN12S20731C17_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__8S20731C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-368,-196),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C17_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C17_ntD1Ev,_ZTv0_n20_N12S20731C17_ntD1Ev)();
extern void ABISELECT(_ZTv0_n40_N12S20731C17_ntD0Ev,_ZTv0_n20_N12S20731C17_ntD0Ev)();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C17_nt__8S20731C1[] = {
  0,
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-352,-188),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI12S20731C17_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C17_ntD1Ev,_ZTv0_n20_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C17_ntD0Ev,_ZTv0_n20_N12S20731C17_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void _ZN12S20731C18_ntD1Ev();
extern void _ZN12S20731C18_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__8S20731C1[] = {
  ABISELECT(40,20),
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C18_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C18_ntD0Ev,
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt12S20731C18_nt__A3__8S20731C1[] = {
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt12S20731C18_nt__A3__8S20731C1[] = {
  ABISELECT(-384,-204),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__8S20731C1[] = {
  ABISELECT(-392,-208),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt12S20731C18_nt__A8__8S20731C1[] = {
  ABISELECT(-392,-208),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt12S20731C18_nt__A3__8S20731C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt12S20731C18_nt__A3__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(88,44),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt12S20731C18_nt__A3__8S20731C1[] = {
  ABISELECT(-392,-208),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A7__8S20731C1[] = {
  ABISELECT(-408,-216),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C18_nt__A10__8S20731C1[] = {
  ABISELECT(-408,-216),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C18_ntD1Ev,_ZTv0_n20_N12S20731C18_ntD1Ev)();
extern void ABISELECT(_ZTv0_n40_N12S20731C18_ntD0Ev,_ZTv0_n20_N12S20731C18_ntD0Ev)();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C18_nt__8S20731C1[] = {
  0,
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-352,-188),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C18_ntD1Ev,_ZTv0_n20_N12S20731C18_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C18_ntD0Ev,_ZTv0_n20_N12S20731C18_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N12S20731C18_ntD1Ev,_ZTv0_n12_N12S20731C18_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N12S20731C18_ntD0Ev,_ZTv0_n12_N12S20731C18_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C18_nt__8S20731C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C18_ntD1Ev,_ZTv0_n12_N12S20731C18_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C18_ntD0Ev,_ZTv0_n12_N12S20731C18_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A1__12S20731C18_nt__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(88,44),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C18_nt__8S20731C1[] = {
  ABISELECT(-392,-208),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C18_ntD1Ev,_ZTv0_n16_N12S20731C18_ntD1Ev)();
extern void ABISELECT(_ZTv0_n32_N12S20731C18_ntD0Ev,_ZTv0_n16_N12S20731C18_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C18_nt__8S20731C1[] = {
  ABISELECT(336,176),
  ABISELECT(392,204),
  0,
  ABISELECT(264,140),
  ABISELECT(352,184),
  ABISELECT(-32,-20),
  ABISELECT(352,184),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C18_ntD1Ev,_ZTv0_n16_N12S20731C18_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C18_ntD0Ev,_ZTv0_n16_N12S20731C18_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A1__12S20731C18_nt__8S20731C1[] = {
  ABISELECT(-424,-224),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A__12S20731C18_nt__8S20731C1[] = {
  ABISELECT(-408,-216),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI12S20731C18_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C19_ntD1Ev,_ZTv0_n16_N12S20731C19_ntD1Ev)();
extern void _ZN12S20731C19_ntD1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N12S20731C19_ntD0Ev,_ZTv0_n16_N12S20731C19_ntD0Ev)();
extern void _ZN12S20731C19_ntD0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__8S20731C1[] = {
  ABISELECT(336,176),
  ABISELECT(392,204),
  0,
  ABISELECT(264,140),
  0,
  ABISELECT(-32,-20),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C19_ntD1Ev,_ZTv0_n16_N12S20731C19_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C19_ntD0Ev,_ZTv0_n16_N12S20731C19_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__12S20731C19_nt__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(-264,-140),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__12S20731C19_nt__8S20731C1[] = {
  ABISELECT(-424,-224),
  ABISELECT(-392,-204),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C19_ntD1Ev,_ZTv0_n12_N12S20731C19_ntD1Ev)();
extern void ABISELECT(_ZThn336_N12S20731C19_ntD1Ev,_ZThn176_N12S20731C19_ntD1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N12S20731C19_ntD0Ev,_ZTv0_n12_N12S20731C19_ntD0Ev)();
extern void ABISELECT(_ZThn336_N12S20731C19_ntD0Ev,_ZThn176_N12S20731C19_ntD0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__12S20731C19_nt__8S20731C1[] = {
  ABISELECT(-336,-176),
  ABISELECT(-336,-176),
  (VTBL_ENTRY)&(_ZTI12S20731C19_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C19_ntD1Ev,_ZTv0_n12_N12S20731C19_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C19_ntD0Ev,_ZTv0_n12_N12S20731C19_ntD0Ev),
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt__A4__8S20731C1[] = {
  ABISELECT(-32,-20),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A6__8S20731C1[] = {
  ABISELECT(-424,-224),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt__A9__8S20731C1[] = {
  ABISELECT(-424,-224),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void _ZN12S20731C21_ntD1Ev();
extern void _ZN12S20731C21_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C21_nt__8S20731C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-408,-212),
  ABISELECT(-408,-212),
  ABISELECT(-56,-28),
  ABISELECT(-72,-36),
  ABISELECT(-88,-44),
  ABISELECT(-112,-56),
  ABISELECT(-128,-64),
  ABISELECT(-144,-72),
  ABISELECT(-72,-36),
  ABISELECT(-440,-232),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C21_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C21_ntD0Ev,
};
extern void _ZN11S20731C7_ntD1Ev();
extern void _ZN11S20731C7_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-408,-212),
  ABISELECT(-408,-212),
  ABISELECT(-56,-28),
  ABISELECT(-72,-36),
  ABISELECT(-88,-44),
  ABISELECT(-112,-56),
  ABISELECT(-128,-64),
  ABISELECT(-144,-72),
  ABISELECT(-72,-36),
  ABISELECT(-440,-232),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C7_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C7_ntD0Ev,
};
extern void _ZN11S20731C8_ntD1Ev();
extern void _ZN11S20731C8_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt11S20731C7_nt12S20731C21_nt__A2__8S20731C1[] = {
  ABISELECT(-144,-72),
  ABISELECT(-72,-36),
  ABISELECT(-440,-232),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C8_ntD0Ev,
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A4__8S20731C1[] = {
  ABISELECT(-144,-72),
  ABISELECT(-72,-36),
  ABISELECT(-440,-232),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A5__8S20731C1[] = {
  ABISELECT(-440,-232),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A8__8S20731C1[] = {
  ABISELECT(-448,-236),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A11__8S20731C1[] = {
  ABISELECT(-448,-236),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A4__8S20731C1[] = {
  ABISELECT(72,36),
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A4__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(144,72),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A4__8S20731C1[] = {
  ABISELECT(-448,-236),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C8_nt11S20731C7_nt12S20731C21_nt__A2__8S20731C1[] = {
  ABISELECT(72,36),
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C8_nt11S20731C7_nt12S20731C21_nt__A2__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(144,72),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt11S20731C7_nt12S20731C21_nt__A2__8S20731C1[] = {
  ABISELECT(-448,-236),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
extern void _ZN12S20731C14_ntD1Ev();
extern void _ZN12S20731C14_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(-144,-76),
  ABISELECT(-160,-84),
  ABISELECT(-104,-56),
  ABISELECT(-472,-252),
  ABISELECT(-176,-92),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C14_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C14_ntD0Ev,
};
extern void _ZN11S20731C8_ntD1Ev();
extern void _ZN11S20731C8_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A3__8S20731C1[] = {
  ABISELECT(-184,-96),
  ABISELECT(-112,-60),
  ABISELECT(-480,-256),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C8_ntD0Ev,
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A5__8S20731C1[] = {
  ABISELECT(-184,-96),
  ABISELECT(-112,-60),
  ABISELECT(-480,-256),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A6__8S20731C1[] = {
  ABISELECT(-480,-256),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A9__8S20731C1[] = {
  ABISELECT(-488,-260),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A12__8S20731C1[] = {
  ABISELECT(-488,-260),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A5__8S20731C1[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A5__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(184,96),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A5__8S20731C1[] = {
  ABISELECT(-488,-260),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A3__8S20731C1[] = {
  ABISELECT(112,60),
  ABISELECT(112,60),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A3__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(184,96),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A3__8S20731C1[] = {
  ABISELECT(-488,-260),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(176,92),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
extern void ABISELECT(_ZThn8_N12S20731C14_ntD1Ev,_ZThn4_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn8_N12S20731C14_ntD0Ev,_ZThn4_N12S20731C14_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(-184,-96),
  ABISELECT(-112,-60),
  ABISELECT(-480,-256),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N12S20731C14_ntD1Ev,_ZThn4_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N12S20731C14_ntD0Ev,_ZThn4_N12S20731C14_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__A1__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(104,56),
  ABISELECT(104,56),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(-488,-260),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
extern void ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(160,84),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-312,-168),
  ABISELECT(160,84),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(144,76),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-328,-176),
  ABISELECT(144,76),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(-336,-180),
  ABISELECT(136,72),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C7_nt12S20731C21_nt__A10__8S20731C1[] = {
  ABISELECT(-512,-276),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C7_nt12S20731C21_nt__A13__8S20731C1[] = {
  ABISELECT(-512,-276),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void _ZN12S20731C15_ntD1Ev();
extern void _ZN12S20731C15_ntD0Ev();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(-104,-60),
  ABISELECT(-496,-264),
  ABISELECT(-496,-264),
  ABISELECT(-232,-124),
  ABISELECT(-144,-80),
  ABISELECT(-160,-88),
  ABISELECT(-160,-88),
  ABISELECT(-176,-96),
  ABISELECT(-528,-284),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C15_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C15_nt11S20731C7_nt12S20731C21_nt__A11__8S20731C1[] = {
  ABISELECT(-528,-284),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt11S20731C7_nt12S20731C21_nt__A14__8S20731C1[] = {
  ABISELECT(-528,-284),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev)();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  0,
  ABISELECT(176,96),
  ABISELECT(16,8),
  ABISELECT(-352,-188),
  ABISELECT(176,96),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-368,-196),
  ABISELECT(160,88),
  ABISELECT(160,88),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(144,80),
  ABISELECT(40,20),
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(144,80),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A2__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(232,124),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(-392,-208),
  ABISELECT(136,76),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(336,176),
  ABISELECT(392,204),
  0,
  ABISELECT(264,140),
  ABISELECT(496,264),
  ABISELECT(-32,-20),
  ABISELECT(496,264),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A2__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(-424,-224),
  ABISELECT(104,60),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(-408,-216),
  ABISELECT(120,68),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C7_ntD1Ev,_ZTv0_n12_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S20731C7_ntD0Ev,_ZTv0_n12_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-368,-196),
  ABISELECT(72,36),
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C7_ntD1Ev,_ZTv0_n12_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C7_ntD0Ev,_ZTv0_n12_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(144,72),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(-448,-236),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZTv0_n56_N11S20731C7_ntD1Ev,_ZTv0_n28_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZTv0_n56_N11S20731C7_ntD0Ev,_ZTv0_n28_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(128,64),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-312,-168),
  ABISELECT(128,64),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S20731C7_ntD1Ev,_ZTv0_n28_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N11S20731C7_ntD0Ev,_ZTv0_n28_N11S20731C7_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n48_N11S20731C7_ntD1Ev,_ZTv0_n24_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZTv0_n48_N11S20731C7_ntD0Ev,_ZTv0_n24_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__A1__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(112,56),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-328,-176),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N11S20731C7_ntD1Ev,_ZTv0_n24_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N11S20731C7_ntD0Ev,_ZTv0_n24_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__A1__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(-336,-180),
  ABISELECT(104,52),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZThn32_N11S20731C7_ntD1Ev,_ZThn20_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn32_N11S20731C7_ntD0Ev,_ZThn20_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C14_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(-144,-76),
  ABISELECT(-160,-84),
  ABISELECT(-104,-56),
  ABISELECT(-472,-252),
  ABISELECT(-176,-92),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N11S20731C7_ntD1Ev,_ZThn20_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N11S20731C7_ntD0Ev,_ZThn20_N11S20731C7_ntD0Ev),
};
extern void ABISELECT(_ZThn40_N11S20731C7_ntD1Ev,_ZThn24_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn40_N11S20731C7_ntD0Ev,_ZThn24_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt12S20731C14_nt__A1__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(-184,-96),
  ABISELECT(-112,-60),
  ABISELECT(-480,-256),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N11S20731C7_ntD1Ev,_ZThn24_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N11S20731C7_ntD0Ev,_ZThn24_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(-488,-260),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(-512,-276),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZThn88_N11S20731C7_ntD1Ev,_ZThn52_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZThn88_N11S20731C7_ntD0Ev,_ZThn52_N11S20731C7_ntD0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(-104,-60),
  ABISELECT(-496,-264),
  ABISELECT(-496,-264),
  ABISELECT(-232,-124),
  ABISELECT(-144,-80),
  ABISELECT(-160,-88),
  ABISELECT(-160,-88),
  ABISELECT(-176,-96),
  ABISELECT(-528,-284),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N11S20731C7_ntD1Ev,_ZThn52_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N11S20731C7_ntD0Ev,_ZThn52_N11S20731C7_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N11S20731C7_ntD1Ev,_ZTv0_n20_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZTv0_n40_N11S20731C7_ntD0Ev,_ZTv0_n20_N11S20731C7_ntD0Ev)();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  0,
  ABISELECT(88,44),
  ABISELECT(16,8),
  ABISELECT(-352,-188),
  ABISELECT(88,44),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S20731C7_ntD1Ev,_ZTv0_n20_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N11S20731C7_ntD0Ev,_ZTv0_n20_N11S20731C7_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n80_N11S20731C7_ntD1Ev,_ZTv0_n40_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZTv0_n80_N11S20731C7_ntD0Ev,_ZTv0_n40_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(56,28),
  ABISELECT(40,20),
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N11S20731C7_ntD1Ev,_ZTv0_n40_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N11S20731C7_ntD0Ev,_ZTv0_n40_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(-392,-208),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N11S20731C7_ntD1Ev,_ZTv0_n16_N11S20731C7_ntD1Ev)();
extern void ABISELECT(_ZTv0_n32_N11S20731C7_ntD0Ev,_ZTv0_n16_N11S20731C7_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(336,176),
  ABISELECT(392,204),
  0,
  ABISELECT(264,140),
  ABISELECT(408,212),
  ABISELECT(-32,-20),
  ABISELECT(408,212),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20731C7_ntD1Ev,_ZTv0_n16_N11S20731C7_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N11S20731C7_ntD0Ev,_ZTv0_n16_N11S20731C7_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A6__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(-424,-224),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A7__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[] = {
  ABISELECT(-408,-216),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI11S20731C7_nt[0]),
};
extern void _ZN12S20731C15_ntD1Ev();
extern void _ZN12S20731C15_ntD0Ev();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt12S20731C21_nt__A2__8S20731C1[] = {
  ABISELECT(-224,-120),
  ABISELECT(-616,-324),
  ABISELECT(-616,-324),
  ABISELECT(-352,-184),
  ABISELECT(-264,-140),
  ABISELECT(-280,-148),
  ABISELECT(-280,-148),
  ABISELECT(-296,-156),
  ABISELECT(-648,-344),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C15_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_ntD0Ev,
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C15_nt12S20731C21_nt__A12__8S20731C1[] = {
  ABISELECT(-648,-344),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt12S20731C21_nt__A15__8S20731C1[] = {
  ABISELECT(-648,-344),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev)();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C15_nt12S20731C21_nt__A2__8S20731C1[] = {
  0,
  ABISELECT(296,156),
  ABISELECT(16,8),
  ABISELECT(-352,-188),
  ABISELECT(296,156),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__12S20731C15_nt12S20731C21_nt__A2__8S20731C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-368,-196),
  ABISELECT(280,148),
  ABISELECT(280,148),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__12S20731C15_nt12S20731C21_nt__A2__8S20731C1[] = {
  ABISELECT(264,140),
  ABISELECT(40,20),
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(264,140),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A2__12S20731C15_nt12S20731C21_nt__A2__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(352,184),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt12S20731C21_nt__A2__8S20731C1[] = {
  ABISELECT(-392,-208),
  ABISELECT(256,136),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev)();
extern void ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C15_nt12S20731C21_nt__A2__8S20731C1[] = {
  ABISELECT(336,176),
  ABISELECT(392,204),
  0,
  ABISELECT(264,140),
  ABISELECT(616,324),
  ABISELECT(-32,-20),
  ABISELECT(616,324),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A2__12S20731C15_nt12S20731C21_nt__A2__8S20731C1[] = {
  ABISELECT(-424,-224),
  ABISELECT(224,120),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt12S20731C21_nt__A2__8S20731C1[] = {
  ABISELECT(-408,-216),
  ABISELECT(240,128),
  (VTBL_ENTRY)&(_ZTI12S20731C15_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C21_nt__A16__8S20731C1[] = {
  ABISELECT(-664,-352),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n56_N12S20731C21_ntD1Ev,_ZTv0_n28_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZTv0_n56_N12S20731C21_ntD0Ev,_ZTv0_n28_N12S20731C21_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__12S20731C21_nt__8S20731C1[] = {
  ABISELECT(128,64),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-312,-168),
  ABISELECT(128,64),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C21_ntD1Ev,_ZTv0_n28_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C21_ntD0Ev,_ZTv0_n28_N12S20731C21_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n48_N12S20731C21_ntD1Ev,_ZTv0_n24_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZTv0_n48_N12S20731C21_ntD0Ev,_ZTv0_n24_N12S20731C21_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__12S20731C21_nt__8S20731C1[] = {
  ABISELECT(112,56),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-328,-176),
  ABISELECT(112,56),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C21_ntD1Ev,_ZTv0_n24_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C21_ntD0Ev,_ZTv0_n24_N12S20731C21_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C21_ntD1Ev,_ZTv0_n12_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N12S20731C21_ntD0Ev,_ZTv0_n12_N12S20731C21_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C17_nt__12S20731C21_nt__8S20731C1[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-368,-196),
  ABISELECT(72,36),
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C21_ntD1Ev,_ZTv0_n12_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C21_ntD0Ev,_ZTv0_n12_N12S20731C21_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A1__12S20731C21_nt__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(144,72),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C21_nt__8S20731C1[] = {
  ABISELECT(-336,-180),
  ABISELECT(104,52),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt__A1__12S20731C21_nt__8S20731C1[] = {
  ABISELECT(-448,-236),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
extern void ABISELECT(_ZThn32_N12S20731C21_ntD1Ev,_ZThn20_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn32_N12S20731C21_ntD0Ev,_ZThn20_N12S20731C21_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C14_nt11S20731C7_nt__12S20731C21_nt__8S20731C1[] = {
  ABISELECT(-144,-76),
  ABISELECT(-160,-84),
  ABISELECT(-104,-56),
  ABISELECT(-472,-252),
  ABISELECT(-176,-92),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N12S20731C21_ntD1Ev,_ZThn20_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn32_N12S20731C21_ntD0Ev,_ZThn20_N12S20731C21_ntD0Ev),
};
extern void ABISELECT(_ZThn40_N12S20731C21_ntD1Ev,_ZThn24_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn40_N12S20731C21_ntD0Ev,_ZThn24_N12S20731C21_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__12S20731C21_nt__8S20731C1[] = {
  ABISELECT(-184,-96),
  ABISELECT(-112,-60),
  ABISELECT(-480,-256),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N12S20731C21_ntD1Ev,_ZThn24_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N12S20731C21_ntD0Ev,_ZThn24_N12S20731C21_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__12S20731C21_nt__8S20731C1[] = {
  ABISELECT(-488,-260),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C7_nt__A3__12S20731C21_nt__8S20731C1[] = {
  ABISELECT(-512,-276),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
extern void ABISELECT(_ZThn88_N12S20731C21_ntD1Ev,_ZThn52_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn88_N12S20731C21_ntD0Ev,_ZThn52_N12S20731C21_ntD0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt11S20731C7_nt__12S20731C21_nt__8S20731C1[] = {
  ABISELECT(-104,-60),
  ABISELECT(-496,-264),
  ABISELECT(-496,-264),
  ABISELECT(-232,-124),
  ABISELECT(-144,-80),
  ABISELECT(-160,-88),
  ABISELECT(-160,-88),
  ABISELECT(-176,-96),
  ABISELECT(-528,-284),
  ABISELECT(-88,-52),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N12S20731C21_ntD1Ev,_ZThn52_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn88_N12S20731C21_ntD0Ev,_ZThn52_N12S20731C21_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N12S20731C21_ntD1Ev,_ZTv0_n20_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZTv0_n40_N12S20731C21_ntD0Ev,_ZTv0_n20_N12S20731C21_ntD0Ev)();
extern void _ZN12S20731C16_nt2v1Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C16_nt__12S20731C21_nt__8S20731C1[] = {
  0,
  ABISELECT(88,44),
  ABISELECT(16,8),
  ABISELECT(-352,-188),
  ABISELECT(88,44),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C21_ntD1Ev,_ZTv0_n20_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N12S20731C21_ntD0Ev,_ZTv0_n20_N12S20731C21_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C16_nt2v1Ev,
};
extern void ABISELECT(_ZTv0_n80_N12S20731C21_ntD1Ev,_ZTv0_n40_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZTv0_n80_N12S20731C21_ntD0Ev,_ZTv0_n40_N12S20731C21_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C18_nt__12S20731C21_nt__8S20731C1[] = {
  ABISELECT(56,28),
  ABISELECT(40,20),
  ABISELECT(-352,-184),
  ABISELECT(-352,-184),
  ABISELECT(-32,-16),
  ABISELECT(-88,-44),
  ABISELECT(-16,-8),
  ABISELECT(-384,-204),
  ABISELECT(56,28),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C21_ntD1Ev,_ZTv0_n40_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N12S20731C21_ntD0Ev,_ZTv0_n40_N12S20731C21_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__12S20731C21_nt__8S20731C1[] = {
  ABISELECT(-392,-208),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
extern void ABISELECT(_ZTv0_n32_N12S20731C21_ntD1Ev,_ZTv0_n16_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZTv0_n32_N12S20731C21_ntD0Ev,_ZTv0_n16_N12S20731C21_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C19_nt__12S20731C21_nt__8S20731C1[] = {
  ABISELECT(336,176),
  ABISELECT(392,204),
  0,
  ABISELECT(264,140),
  ABISELECT(408,212),
  ABISELECT(-32,-20),
  ABISELECT(408,212),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C21_ntD1Ev,_ZTv0_n16_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N12S20731C21_ntD0Ev,_ZTv0_n16_N12S20731C21_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__A6__12S20731C21_nt__8S20731C1[] = {
  ABISELECT(-424,-224),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt12S20731C18_nt__A7__12S20731C21_nt__8S20731C1[] = {
  ABISELECT(-408,-216),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
extern void ABISELECT(_ZThn208_N12S20731C21_ntD1Ev,_ZThn112_N12S20731C21_ntD1Ev)();
extern void ABISELECT(_ZThn208_N12S20731C21_ntD0Ev,_ZThn112_N12S20731C21_ntD0Ev)();
extern void _ZN12S20731C15_nt2v2Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C15_nt__A1__12S20731C21_nt__8S20731C1[] = {
  ABISELECT(-224,-120),
  ABISELECT(-616,-324),
  ABISELECT(-616,-324),
  ABISELECT(-352,-184),
  ABISELECT(-264,-140),
  ABISELECT(-280,-148),
  ABISELECT(-280,-148),
  ABISELECT(-296,-156),
  ABISELECT(-648,-344),
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N12S20731C21_ntD1Ev,_ZThn112_N12S20731C21_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn208_N12S20731C21_ntD0Ev,_ZThn112_N12S20731C21_ntD0Ev),
  (VTBL_ENTRY)&_ZN12S20731C15_nt2v2Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__A__12S20731C21_nt__8S20731C1[] = {
  ABISELECT(-664,-352),
  ABISELECT(-224,-120),
  (VTBL_ENTRY)&(_ZTI12S20731C21_nt[0]),
};
extern void _ZN12S20731C14_ntD1Ev();
extern void _ZN12S20731C14_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C14_nt__A2__8S20731C1[] = {
  ABISELECT(-360,-192),
  ABISELECT(-376,-200),
  ABISELECT(-320,-172),
  ABISELECT(-688,-368),
  ABISELECT(-392,-208),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C14_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C14_ntD0Ev,
};
extern void _ZN11S20731C8_ntD1Ev();
extern void _ZN11S20731C8_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt12S20731C14_nt__A4__8S20731C1[] = {
  ABISELECT(-400,-212),
  ABISELECT(-328,-176),
  ABISELECT(-696,-372),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C8_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C8_ntD0Ev,
};
extern void _ZN11S20731C9_ntD1Ev();
extern void _ZN11S20731C9_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt11S20731C8_nt12S20731C14_nt__A6__8S20731C1[] = {
  ABISELECT(-400,-212),
  ABISELECT(-328,-176),
  ABISELECT(-696,-372),
  0,
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&_ZN11S20731C9_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20731C9_ntD0Ev,
};
extern void _ZN12S20731C11_ntD1Ev();
extern void _ZN12S20731C11_ntD0Ev();
static  VTBL_ENTRY _tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A7__8S20731C1[] = {
  ABISELECT(-696,-372),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C11_nt[0]),
  (VTBL_ENTRY)&_ZN12S20731C11_ntD1Ev,
  (VTBL_ENTRY)&_ZN12S20731C11_ntD0Ev,
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A14__8S20731C1[] = {
  ABISELECT(-704,-376),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C12_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A18__8S20731C1[] = {
  ABISELECT(-704,-376),
  0,
  (VTBL_ENTRY)&(_ZTI12S20731C10_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt__A6__8S20731C1[] = {
  ABISELECT(328,176),
  ABISELECT(328,176),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt__A6__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(400,212),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt__A6__8S20731C1[] = {
  ABISELECT(-704,-376),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C9_nt[0]),
};
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__11S20731C8_nt12S20731C14_nt__A4__8S20731C1[] = {
  ABISELECT(328,176),
  ABISELECT(328,176),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__11S20731C8_nt12S20731C14_nt__A4__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(400,212),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt12S20731C14_nt__A4__8S20731C1[] = {
  ABISELECT(-704,-376),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI11S20731C8_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV12S20731C10_nt__12S20731C14_nt__A2__8S20731C1[] = {
  ABISELECT(-296,-160),
  ABISELECT(392,208),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
extern void ABISELECT(_ZThn8_N12S20731C14_ntD1Ev,_ZThn4_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZThn8_N12S20731C14_ntD0Ev,_ZThn4_N12S20731C14_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C8_nt__12S20731C14_nt__A2__8S20731C1[] = {
  ABISELECT(-400,-212),
  ABISELECT(-328,-176),
  ABISELECT(-696,-372),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N12S20731C14_ntD1Ev,_ZThn4_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N12S20731C14_ntD0Ev,_ZThn4_N12S20731C14_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C4_nt__A1__12S20731C14_nt__A2__8S20731C1[] = {
  ABISELECT(320,172),
  ABISELECT(320,172),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__12S20731C14_nt__A2__8S20731C1[] = {
  ABISELECT(-704,-376),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
extern void ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV12S20731C13_nt__12S20731C14_nt__A2__8S20731C1[] = {
  ABISELECT(376,200),
  ABISELECT(-16,-8),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-312,-168),
  ABISELECT(376,200),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev),
};
extern void ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev)();
extern void ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV11S20731C9_nt__A1__12S20731C14_nt__A2__8S20731C1[] = {
  ABISELECT(360,192),
  ABISELECT(-32,-16),
  ABISELECT(40,20),
  ABISELECT(-328,-176),
  ABISELECT(360,192),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV12S20731C12_nt11S20731C9_nt__A1__12S20731C14_nt__A2__8S20731C1[] = {
  ABISELECT(-336,-180),
  ABISELECT(352,188),
  (VTBL_ENTRY)&(_ZTI12S20731C14_nt[0]),
};
static  VTT_ENTRY vtt_S20731C1[] = {
  {&(_ZTV8S20731C1[18]),  18,266},
  {&(_tg__ZTV12S20731C15_nt__A3__8S20731C1[11]),  11,14},
  {&(_tg__ZTV12S20731C12_nt12S20731C15_nt__A13__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt__A17__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__12S20731C15_nt__A3__8S20731C1[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt__A3__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt__A3__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__12S20731C15_nt__A3__8S20731C1[10]),  10,12},
  {&(_tg__ZTV12S20731C10_nt__A2__12S20731C15_nt__A3__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt__A3__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt__A3__8S20731C1[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt__A3__8S20731C1[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A2__12S20731C15_nt__A3__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt__A3__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C17_nt__A__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C16_nt__12S20731C17_nt__A__8S20731C1[6]),  6,9},
  {&(_tg__ZTV11S20731C4_nt__12S20731C17_nt__A__8S20731C1[3]),  3,5},
  {&(_ZTV8S20731C1[46]),  46,266},
  {&(_ZTV8S20731C1[150]),  150,266},
  {&(_ZTV8S20731C1[71]),  71,266},
  {&(_ZTV8S20731C1[115]),  115,266},
  {&(_ZTV8S20731C1[76]),  76,266},
  {&(_ZTV8S20731C1[122]),  122,266},
  {&(_ZTV8S20731C1[130]),  130,266},
  {&(_ZTV8S20731C1[135]),  135,266},
  {&(_ZTV8S20731C1[83]),  83,266},
  {&(_ZTV8S20731C1[90]),  90,266},
  {&(_ZTV8S20731C1[95]),  95,266},
  {&(_ZTV8S20731C1[98]),  98,266},
  {&(_ZTV8S20731C1[109]),  109,266},
  {&(_ZTV8S20731C1[141]),  141,266},
  {&(_ZTV8S20731C1[150]),  150,266},
  {&(_ZTV8S20731C1[162]),  162,266},
  {&(_ZTV8S20731C1[167]),  167,266},
  {&(_ZTV8S20731C1[46]),  46,266},
  {&(_ZTV8S20731C1[46]),  46,266},
  {&(_ZTV8S20731C1[173]),  173,266},
  {&(_ZTV8S20731C1[170]),  170,266},
  {&(_ZTV8S20731C1[188]),  188,266},
  {&(_ZTV8S20731C1[193]),  193,266},
  {&(_ZTV8S20731C1[200]),  200,266},
  {&(_ZTV8S20731C1[207]),  207,266},
  {&(_ZTV8S20731C1[212]),  212,266},
  {&(_ZTV8S20731C1[215]),  215,266},
  {&(_ZTV8S20731C1[226]),  226,266},
  {&(_ZTV8S20731C1[240]),  240,266},
  {&(_ZTV8S20731C1[246]),  246,266},
  {&(_ZTV8S20731C1[54]),  54,266},
  {&(_ZTV8S20731C1[27]),  27,266},
  {&(_ZTV8S20731C1[254]),  254,266},
  {&(_ZTV8S20731C1[261]),  261,266},
  {&(_ZTV8S20731C1[266]),  266,266},
  {&(_tg__ZTV8S20731C2__8S20731C1[17]),  17,19},
  {&(_tg__ZTV12S20731C20_nt8S20731C2__8S20731C1[15]),  15,17},
  {&(_tg__ZTV12S20731C21_nt__12S20731C20_nt8S20731C2__8S20731C1[15]),  15,17},
  {&(_tg__ZTV12S20731C13_nt__12S20731C20_nt8S20731C2__8S20731C1[7]),  7,9},
  {&(_tg__ZTV11S20731C9_nt__12S20731C20_nt8S20731C2__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C17_nt__12S20731C20_nt8S20731C2__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C10_nt__A1__12S20731C20_nt8S20731C2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C20_nt8S20731C2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt8S20731C2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C14_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt8S20731C2__8S20731C1[7]),  7,9},
  {&(_tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__12S20731C20_nt8S20731C2__8S20731C1[5]),  5,7},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A2__12S20731C20_nt8S20731C2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C7_nt12S20731C21_nt__A3__12S20731C20_nt8S20731C2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt11S20731C7_nt12S20731C21_nt__12S20731C20_nt8S20731C2__8S20731C1[11]),  11,14},
  {&(_tg__ZTV12S20731C16_nt__12S20731C20_nt8S20731C2__8S20731C1[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__12S20731C20_nt8S20731C2__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__12S20731C20_nt8S20731C2__8S20731C1[10]),  10,12},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__12S20731C20_nt8S20731C2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C20_nt8S20731C2__8S20731C1[15]),  15,17},
  {&(_tg__ZTV12S20731C20_nt8S20731C2__8S20731C1[15]),  15,17},
  {&(_tg__ZTV12S20731C12_nt__A6__12S20731C20_nt8S20731C2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A7__12S20731C20_nt8S20731C2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt12S20731C21_nt__A1__12S20731C20_nt8S20731C2__8S20731C1[11]),  11,14},
  {&(_tg__ZTV12S20731C10_nt12S20731C21_nt__A12__12S20731C20_nt8S20731C2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C17_nt8S20731C2__A1__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C16_nt__12S20731C17_nt8S20731C2__A1__8S20731C1[6]),  6,9},
  {&(_tg__ZTV11S20731C4_nt__12S20731C17_nt8S20731C2__A1__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C17_nt__8S20731C2__8S20731C1[6]),  6,8},
  {&(_tg__ZTV11S20731C6_nt__8S20731C2__8S20731C1[15]),  15,17},
  {&(_tg__ZTV12S20731C10_nt__8S20731C2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__8S20731C2__8S20731C1[7]),  7,9},
  {&(_tg__ZTV11S20731C9_nt__A1__8S20731C2__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__A1__8S20731C2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C2__8S20731C1[7]),  7,9},
  {&(_tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A1__8S20731C2__8S20731C1[5]),  5,7},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C7_nt11S20731C6_nt__A3__8S20731C2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C2__8S20731C1[11]),  11,14},
  {&(_tg__ZTV12S20731C16_nt__8S20731C2__8S20731C1[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__8S20731C2__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__8S20731C2__8S20731C1[10]),  10,12},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__8S20731C2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV8S20731C2__8S20731C1[17]),  17,19},
  {&(_tg__ZTV8S20731C2__8S20731C1[17]),  17,19},
  {&(_tg__ZTV12S20731C12_nt__A6__8S20731C2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A7__8S20731C2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C21_nt__8S20731C2__8S20731C1[15]),  15,17},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A8__8S20731C2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2__8S20731C1[7]),  7,9},
  {&(_tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A3__8S20731C2__8S20731C1[5]),  5,7},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A9__8S20731C2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C7_nt12S20731C21_nt__A10__8S20731C2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C2__8S20731C1[11]),  11,14},
  {&(_tg__ZTV12S20731C15_nt12S20731C21_nt__A2__8S20731C2__8S20731C1[11]),  11,14},
  {&(_tg__ZTV12S20731C10_nt12S20731C21_nt__A16__8S20731C2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C17_nt__A__8S20731C2__8S20731C1[6]),  6,8},
  {&(_tg__ZTV11S20731C6_nt__8S20731C1[13]),  13,15},
  {&(_tg__ZTV11S20731C7_nt11S20731C6_nt__8S20731C1[13]),  13,15},
  {&(_tg__ZTV11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C1[5]),  5,7},
  {&(_tg__ZTV11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C1[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__A1__8S20731C1[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt11S20731C7_nt11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C1[7]),  7,9},
  {&(_tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A1__8S20731C1[5]),  5,7},
  {&(_tg__ZTV11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C1[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A4__8S20731C1[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A1__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A1__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt11S20731C6_nt__A1__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV11S20731C8_nt__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C1[5]),  5,7},
  {&(_tg__ZTV11S20731C4_nt__A1__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C1[7]),  7,9},
  {&(_tg__ZTV11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C7_nt11S20731C6_nt__A3__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C7_nt11S20731C6_nt__A5__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C1[11]),  11,14},
  {&(_tg__ZTV12S20731C12_nt12S20731C15_nt11S20731C7_nt11S20731C6_nt__A4__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt11S20731C7_nt11S20731C6_nt__A6__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C1[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C1[10]),  10,12},
  {&(_tg__ZTV12S20731C10_nt__A2__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C1[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C1[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A2__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt11S20731C7_nt11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C17_nt__11S20731C7_nt11S20731C6_nt__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C10_nt__11S20731C7_nt11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__11S20731C7_nt11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__11S20731C7_nt11S20731C6_nt__8S20731C1[7]),  7,9},
  {&(_tg__ZTV11S20731C9_nt__A1__11S20731C7_nt11S20731C6_nt__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__A1__11S20731C7_nt11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C14_nt__11S20731C7_nt11S20731C6_nt__8S20731C1[7]),  7,9},
  {&(_tg__ZTV11S20731C8_nt12S20731C14_nt__A1__11S20731C7_nt11S20731C6_nt__8S20731C1[5]),  5,7},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__A__11S20731C7_nt11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt__11S20731C7_nt11S20731C6_nt__8S20731C1[11]),  11,14},
  {&(_tg__ZTV12S20731C16_nt__11S20731C7_nt11S20731C6_nt__8S20731C1[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__11S20731C7_nt11S20731C6_nt__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__11S20731C7_nt11S20731C6_nt__8S20731C1[10]),  10,12},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__11S20731C7_nt11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__11S20731C7_nt11S20731C6_nt__8S20731C1[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__11S20731C7_nt11S20731C6_nt__8S20731C1[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A6__11S20731C7_nt11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A7__11S20731C7_nt11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C17_nt__11S20731C6_nt__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C10_nt__11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt__11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__11S20731C6_nt__8S20731C1[7]),  7,9},
  {&(_tg__ZTV11S20731C9_nt__A1__11S20731C6_nt__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__A1__11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C14_nt11S20731C7_nt__11S20731C6_nt__8S20731C1[7]),  7,9},
  {&(_tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__11S20731C6_nt__8S20731C1[5]),  5,7},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C7_nt__A3__11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt11S20731C7_nt__11S20731C6_nt__8S20731C1[11]),  11,14},
  {&(_tg__ZTV12S20731C16_nt__11S20731C6_nt__8S20731C1[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__11S20731C6_nt__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__11S20731C6_nt__8S20731C1[10]),  10,12},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__11S20731C6_nt__8S20731C1[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__11S20731C6_nt__8S20731C1[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A6__11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A7__11S20731C6_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C10_nt12S20731C13_nt__A2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV11S20731C9_nt__12S20731C13_nt__8S20731C1[6]),  6,8},
  {&(_tg__ZTV11S20731C4_nt__12S20731C13_nt__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__A1__12S20731C13_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C13_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV11S20731C9_nt__A1__8S20731C1[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt__A1__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__A1__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt__A3__8S20731C1[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt__A1__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt__A1__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt__A1__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__8S20731C1[4]),  4,7},
  {&(_tg__ZTV12S20731C10_nt12S20731C16_nt__A7__8S20731C1[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__12S20731C16_nt__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C17_nt__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C16_nt__12S20731C17_nt__8S20731C1[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__8S20731C1[9]),  9,11},
  {&(_tg__ZTV11S20731C9_nt12S20731C18_nt__A3__8S20731C1[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt12S20731C18_nt__A3__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt12S20731C18_nt__A8__8S20731C1[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt12S20731C18_nt__A3__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt12S20731C18_nt__A3__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt12S20731C18_nt__A3__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A7__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C18_nt__A10__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__12S20731C18_nt__8S20731C1[6]),  6,9},
  {&(_tg__ZTV11S20731C4_nt__12S20731C18_nt__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__A1__12S20731C18_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C18_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C18_nt__8S20731C1[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__12S20731C18_nt__8S20731C1[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A1__12S20731C18_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__A__12S20731C18_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__8S20731C1[8]),  8,10},
  {&(_tg__ZTV12S20731C10_nt__12S20731C19_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__8S20731C1[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__12S20731C19_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__12S20731C19_nt__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C11_nt__A4__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt__A6__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt__A9__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C21_nt__8S20731C1[13]),  13,15},
  {&(_tg__ZTV11S20731C7_nt12S20731C21_nt__A1__8S20731C1[13]),  13,15},
  {&(_tg__ZTV11S20731C8_nt11S20731C7_nt12S20731C21_nt__A2__8S20731C1[5]),  5,7},
  {&(_tg__ZTV11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A4__8S20731C1[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A5__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A8__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A11__8S20731C1[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A4__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A4__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt11S20731C7_nt12S20731C21_nt__A4__8S20731C1[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C8_nt11S20731C7_nt12S20731C21_nt__A2__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C8_nt11S20731C7_nt12S20731C21_nt__A2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt11S20731C7_nt12S20731C21_nt__A2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[7]),  7,9},
  {&(_tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A3__8S20731C1[5]),  5,7},
  {&(_tg__ZTV11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A5__8S20731C1[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A6__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A9__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A12__8S20731C1[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A5__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A5__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A5__8S20731C1[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A3__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A3__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt12S20731C14_nt11S20731C7_nt12S20731C21_nt__A3__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[3]),  3,3},
  {&(_tg__ZTV11S20731C8_nt__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[5]),  5,7},
  {&(_tg__ZTV11S20731C4_nt__A1__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[7]),  7,9},
  {&(_tg__ZTV11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__A1__12S20731C14_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C7_nt12S20731C21_nt__A10__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C7_nt12S20731C21_nt__A13__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[11]),  11,14},
  {&(_tg__ZTV12S20731C12_nt12S20731C15_nt11S20731C7_nt12S20731C21_nt__A11__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt11S20731C7_nt12S20731C21_nt__A14__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[10]),  10,12},
  {&(_tg__ZTV12S20731C10_nt__A2__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A2__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt11S20731C7_nt12S20731C21_nt__A1__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C17_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C10_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[7]),  7,9},
  {&(_tg__ZTV11S20731C9_nt__A1__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__A1__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C14_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[7]),  7,9},
  {&(_tg__ZTV11S20731C8_nt12S20731C14_nt__A1__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[5]),  5,7},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A2__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__A__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[11]),  11,14},
  {&(_tg__ZTV12S20731C16_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[10]),  10,12},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A6__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A7__11S20731C7_nt12S20731C21_nt__A1__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt12S20731C21_nt__A2__8S20731C1[11]),  11,14},
  {&(_tg__ZTV12S20731C12_nt12S20731C15_nt12S20731C21_nt__A12__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt12S20731C15_nt12S20731C21_nt__A15__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C16_nt__12S20731C15_nt12S20731C21_nt__A2__8S20731C1[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt12S20731C21_nt__A2__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C17_nt__12S20731C15_nt12S20731C21_nt__A2__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__12S20731C15_nt12S20731C21_nt__A2__8S20731C1[10]),  10,12},
  {&(_tg__ZTV12S20731C10_nt__A2__12S20731C15_nt12S20731C21_nt__A2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A1__12S20731C15_nt12S20731C21_nt__A2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt12S20731C21_nt__A2__8S20731C1[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__12S20731C15_nt12S20731C21_nt__A2__8S20731C1[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A2__12S20731C15_nt12S20731C21_nt__A2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A3__12S20731C15_nt12S20731C21_nt__A2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C21_nt__A16__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__12S20731C21_nt__8S20731C1[7]),  7,9},
  {&(_tg__ZTV11S20731C9_nt__12S20731C21_nt__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C17_nt__12S20731C21_nt__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C10_nt__A1__12S20731C21_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__12S20731C21_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt11S20731C7_nt__A1__12S20731C21_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C14_nt11S20731C7_nt__12S20731C21_nt__8S20731C1[7]),  7,9},
  {&(_tg__ZTV11S20731C8_nt12S20731C14_nt11S20731C7_nt__A1__12S20731C21_nt__8S20731C1[5]),  5,7},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt11S20731C7_nt__A2__12S20731C21_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C7_nt__A3__12S20731C21_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt11S20731C7_nt__12S20731C21_nt__8S20731C1[11]),  11,14},
  {&(_tg__ZTV12S20731C16_nt__12S20731C21_nt__8S20731C1[6]),  6,9},
  {&(_tg__ZTV12S20731C17_nt__12S20731C21_nt__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C18_nt__12S20731C21_nt__8S20731C1[10]),  10,12},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt12S20731C18_nt__A5__12S20731C21_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C19_nt__12S20731C21_nt__8S20731C1[8]),  8,10},
  {&(_tg__ZTV12S20731C19_nt__12S20731C21_nt__8S20731C1[8]),  8,10},
  {&(_tg__ZTV12S20731C12_nt__A6__12S20731C21_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt12S20731C18_nt__A7__12S20731C21_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C15_nt__A1__12S20731C21_nt__8S20731C1[11]),  11,14},
  {&(_tg__ZTV12S20731C10_nt__A__12S20731C21_nt__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C14_nt__A2__8S20731C1[7]),  7,9},
  {&(_tg__ZTV11S20731C8_nt12S20731C14_nt__A4__8S20731C1[5]),  5,7},
  {&(_tg__ZTV11S20731C9_nt11S20731C8_nt12S20731C14_nt__A6__8S20731C1[5]),  5,7},
  {&(_tg__ZTV12S20731C11_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A7__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A14__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt12S20731C12_nt11S20731C9_nt11S20731C8_nt12S20731C14_nt__A18__8S20731C1[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt__A6__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt__A6__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt__11S20731C9_nt11S20731C8_nt12S20731C14_nt__A6__8S20731C1[3]),  3,3},
  {&(_tg__ZTV11S20731C4_nt__11S20731C8_nt12S20731C14_nt__A4__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C10_nt__11S20731C8_nt12S20731C14_nt__A4__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__11S20731C8_nt12S20731C14_nt__A4__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C10_nt__12S20731C14_nt__A2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV11S20731C8_nt__12S20731C14_nt__A2__8S20731C1[5]),  5,7},
  {&(_tg__ZTV11S20731C4_nt__A1__12S20731C14_nt__A2__8S20731C1[3]),  3,5},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt11S20731C8_nt__12S20731C14_nt__A2__8S20731C1[3]),  3,3},
  {&(_tg__ZTV12S20731C13_nt__12S20731C14_nt__A2__8S20731C1[7]),  7,9},
  {&(_tg__ZTV11S20731C9_nt__A1__12S20731C14_nt__A2__8S20731C1[6]),  6,8},
  {&(_tg__ZTV12S20731C12_nt11S20731C9_nt__A1__12S20731C14_nt__A2__8S20731C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20731C1[];
extern  VTBL_ENTRY _ZTV8S20731C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20731C1[];
static VTBL_ENTRY alt_thunk_names99[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C19_ntD0Ev,_ZTv0_n12_N12S20731C19_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N12S20731C19_ntD0Ev,_ZThn176_N12S20731C19_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C19_ntD1Ev,_ZTv0_n12_N12S20731C19_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N12S20731C19_ntD1Ev,_ZThn176_N12S20731C19_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C19_ntD0Ev,_ZTv0_n16_N12S20731C19_ntD0Ev), // 
  (VTBL_ENTRY)_ZN12S20731C19_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C19_ntD1Ev,_ZTv0_n16_N12S20731C19_ntD1Ev), // 
  (VTBL_ENTRY)_ZN12S20731C19_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C16_ntD0Ev,_ZTv0_n12_N12S20731C16_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C16_ntD0Ev,_ZThn8_N12S20731C16_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C16_ntD1Ev,_ZTv0_n12_N12S20731C16_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C16_ntD1Ev,_ZThn8_N12S20731C16_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C13_ntD0Ev,_ZTv0_n12_N12S20731C13_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N12S20731C13_ntD0Ev,_ZThn28_N12S20731C13_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C13_ntD1Ev,_ZTv0_n12_N12S20731C13_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N12S20731C13_ntD1Ev,_ZThn28_N12S20731C13_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C13_ntD0Ev,_ZTv0_n24_N12S20731C13_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C13_ntD0Ev,_ZThn8_N12S20731C13_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C13_ntD1Ev,_ZTv0_n24_N12S20731C13_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N12S20731C13_ntD1Ev,_ZThn8_N12S20731C13_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N11S20731C6_ntD0Ev,_ZTv0_n40_N11S20731C6_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N11S20731C6_ntD0Ev,_ZThn172_N11S20731C6_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N11S20731C6_ntD1Ev,_ZTv0_n40_N11S20731C6_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N11S20731C6_ntD1Ev,_ZThn172_N11S20731C6_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S20731C6_ntD0Ev,_ZTv0_n20_N11S20731C6_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N11S20731C6_ntD0Ev,_ZThn156_N11S20731C6_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S20731C6_ntD1Ev,_ZTv0_n20_N11S20731C6_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N11S20731C6_ntD1Ev,_ZThn156_N11S20731C6_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N11S20731C6_ntD0Ev,_ZTv0_n24_N11S20731C6_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N11S20731C6_ntD0Ev,_ZThn144_N11S20731C6_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N11S20731C6_ntD1Ev,_ZTv0_n24_N11S20731C6_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N11S20731C6_ntD1Ev,_ZThn144_N11S20731C6_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N11S20731C6_ntD0Ev,_ZTv0_n28_N11S20731C6_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N11S20731C6_ntD0Ev,_ZThn136_N11S20731C6_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N11S20731C6_ntD1Ev,_ZTv0_n28_N11S20731C6_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N11S20731C6_ntD1Ev,_ZThn136_N11S20731C6_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C6_ntD0Ev,_ZTv0_n12_N11S20731C6_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N11S20731C6_ntD0Ev,_ZThn164_N11S20731C6_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C6_ntD1Ev,_ZTv0_n12_N11S20731C6_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N11S20731C6_ntD1Ev,_ZThn164_N11S20731C6_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N11S20731C7_ntD0Ev,_ZTv0_n40_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N11S20731C7_ntD0Ev,_ZThn172_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N11S20731C7_ntD1Ev,_ZTv0_n40_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N11S20731C7_ntD1Ev,_ZThn172_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S20731C7_ntD0Ev,_ZTv0_n20_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N11S20731C7_ntD0Ev,_ZThn156_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N11S20731C7_ntD1Ev,_ZTv0_n20_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N11S20731C7_ntD1Ev,_ZThn156_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N11S20731C7_ntD0Ev,_ZTv0_n24_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N11S20731C7_ntD0Ev,_ZThn144_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N11S20731C7_ntD1Ev,_ZTv0_n24_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N11S20731C7_ntD1Ev,_ZThn144_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N11S20731C7_ntD0Ev,_ZTv0_n28_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N11S20731C7_ntD0Ev,_ZThn136_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N11S20731C7_ntD1Ev,_ZTv0_n28_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N11S20731C7_ntD1Ev,_ZThn136_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C7_ntD0Ev,_ZTv0_n12_N11S20731C7_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N11S20731C7_ntD0Ev,_ZThn164_N11S20731C7_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C7_ntD1Ev,_ZTv0_n12_N11S20731C7_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N11S20731C7_ntD1Ev,_ZThn164_N11S20731C7_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C14_ntD0Ev,_ZTv0_n24_N12S20731C14_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N12S20731C14_ntD0Ev,_ZThn124_N12S20731C14_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C14_ntD1Ev,_ZTv0_n24_N12S20731C14_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N12S20731C14_ntD1Ev,_ZThn124_N12S20731C14_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N12S20731C14_ntD0Ev,_ZTv0_n28_N12S20731C14_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N12S20731C14_ntD0Ev,_ZThn116_N12S20731C14_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N12S20731C14_ntD1Ev,_ZTv0_n28_N12S20731C14_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N12S20731C14_ntD1Ev,_ZThn116_N12S20731C14_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C14_ntD0Ev,_ZTv0_n12_N12S20731C14_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N12S20731C14_ntD0Ev,_ZThn144_N12S20731C14_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C14_ntD1Ev,_ZTv0_n12_N12S20731C14_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N12S20731C14_ntD1Ev,_ZThn144_N12S20731C14_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C8_ntD0Ev,_ZTv0_n12_N11S20731C8_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N11S20731C8_ntD0Ev,_ZThn140_N11S20731C8_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N11S20731C8_ntD0Ev,_ZThn164_N11S20731C8_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C8_ntD1Ev,_ZTv0_n12_N11S20731C8_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N11S20731C8_ntD1Ev,_ZThn140_N11S20731C8_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N11S20731C8_ntD1Ev,_ZThn164_N11S20731C8_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C9_ntD0Ev,_ZTv0_n12_N11S20731C9_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N11S20731C9_ntD0Ev,_ZThn20_N11S20731C9_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N11S20731C9_ntD0Ev,_ZThn140_N11S20731C9_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N11S20731C9_ntD0Ev,_ZThn164_N11S20731C9_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N11S20731C9_ntD1Ev,_ZTv0_n12_N11S20731C9_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N11S20731C9_ntD1Ev,_ZThn20_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N11S20731C9_ntD1Ev,_ZThn140_N11S20731C9_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn312_N11S20731C9_ntD1Ev,_ZThn164_N11S20731C9_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20731C2D0Ev,_ZTv0_n40_N8S20731C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S20731C2D0Ev,_ZThn184_N8S20731C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20731C2D1Ev,_ZTv0_n40_N8S20731C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S20731C2D1Ev,_ZThn184_N8S20731C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20731C2D0Ev,_ZTv0_n20_N8S20731C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S20731C2D0Ev,_ZThn168_N8S20731C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20731C2D1Ev,_ZTv0_n20_N8S20731C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S20731C2D1Ev,_ZThn168_N8S20731C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20731C2D0Ev,_ZTv0_n24_N8S20731C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N8S20731C2D0Ev,_ZThn156_N8S20731C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20731C2D1Ev,_ZTv0_n24_N8S20731C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N8S20731C2D1Ev,_ZThn156_N8S20731C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20731C2D0Ev,_ZTv0_n28_N8S20731C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S20731C2D0Ev,_ZThn148_N8S20731C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20731C2D1Ev,_ZTv0_n28_N8S20731C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S20731C2D1Ev,_ZThn148_N8S20731C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S20731C2D0Ev,_ZTv0_n56_N8S20731C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N8S20731C2D0Ev,_ZThn212_N8S20731C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20731C2D0Ev,_ZThn12_N8S20731C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S20731C2D1Ev,_ZTv0_n56_N8S20731C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N8S20731C2D1Ev,_ZThn212_N8S20731C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20731C2D1Ev,_ZThn12_N8S20731C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20731C2D0Ev,_ZTv0_n12_N8S20731C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20731C2D0Ev,_ZThn4_N8S20731C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S20731C2D0Ev,_ZThn176_N8S20731C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20731C2D1Ev,_ZTv0_n12_N8S20731C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20731C2D1Ev,_ZThn4_N8S20731C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N8S20731C2D1Ev,_ZThn176_N8S20731C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S20731C20_ntD0Ev,_ZTv0_n40_N12S20731C20_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N12S20731C20_ntD0Ev,_ZThn184_N12S20731C20_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S20731C20_ntD1Ev,_ZTv0_n40_N12S20731C20_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N12S20731C20_ntD1Ev,_ZThn184_N12S20731C20_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C20_ntD0Ev,_ZTv0_n20_N12S20731C20_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N12S20731C20_ntD0Ev,_ZThn168_N12S20731C20_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C20_ntD1Ev,_ZTv0_n20_N12S20731C20_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N12S20731C20_ntD1Ev,_ZThn168_N12S20731C20_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C20_ntD0Ev,_ZTv0_n12_N12S20731C20_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N12S20731C20_ntD0Ev,_ZThn176_N12S20731C20_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C20_ntD1Ev,_ZTv0_n12_N12S20731C20_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn336_N12S20731C20_ntD1Ev,_ZThn176_N12S20731C20_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C20_ntD0Ev,_ZTv0_n24_N12S20731C20_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N12S20731C20_ntD0Ev,_ZThn156_N12S20731C20_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N12S20731C20_ntD1Ev,_ZTv0_n24_N12S20731C20_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn296_N12S20731C20_ntD1Ev,_ZThn156_N12S20731C20_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N12S20731C20_ntD0Ev,_ZTv0_n28_N12S20731C20_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N12S20731C20_ntD0Ev,_ZThn148_N12S20731C20_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N12S20731C20_ntD1Ev,_ZTv0_n28_N12S20731C20_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N12S20731C20_ntD1Ev,_ZThn148_N12S20731C20_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N12S20731C20_ntD0Ev,_ZTv0_n56_N12S20731C20_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N12S20731C20_ntD0Ev,_ZThn212_N12S20731C20_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N12S20731C20_ntD1Ev,_ZTv0_n56_N12S20731C20_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N12S20731C20_ntD1Ev,_ZThn212_N12S20731C20_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C20_ntD0Ev,_ZTv0_n16_N12S20731C20_ntD0Ev), // 
  (VTBL_ENTRY)_ZN12S20731C20_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C20_ntD1Ev,_ZTv0_n16_N12S20731C20_ntD1Ev), // 
  (VTBL_ENTRY)_ZN12S20731C20_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20731C2D0Ev,_ZTv0_n16_N8S20731C2D0Ev), // 
  (VTBL_ENTRY)_ZN8S20731C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20731C2D1Ev,_ZTv0_n16_N8S20731C2D1Ev), // 
  (VTBL_ENTRY)_ZN8S20731C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C17_ntD0Ev,_ZTv0_n20_N12S20731C17_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N12S20731C17_ntD0Ev,_ZThn164_N12S20731C17_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N12S20731C17_ntD0Ev,_ZThn180_N12S20731C17_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C17_ntD1Ev,_ZTv0_n20_N12S20731C17_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N12S20731C17_ntD1Ev,_ZThn164_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn336_N12S20731C17_ntD1Ev,_ZThn180_N12S20731C17_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C17_ntD0Ev,_ZTv0_n12_N12S20731C17_ntD0Ev), // 
  (VTBL_ENTRY)_ZN12S20731C17_ntD0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn328_N12S20731C17_ntD0Ev,_ZThn172_N12S20731C17_ntD0Ev),
  (VTBL_ENTRY)_ZN12S20731C17_ntD0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn352_N12S20731C17_ntD0Ev,_ZThn188_N12S20731C17_ntD0Ev),
  (VTBL_ENTRY)_ZN12S20731C17_ntD0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C17_ntD1Ev,_ZTv0_n12_N12S20731C17_ntD1Ev), // 
  (VTBL_ENTRY)_ZN12S20731C17_ntD1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn328_N12S20731C17_ntD1Ev,_ZThn172_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)_ZN12S20731C17_ntD1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn352_N12S20731C17_ntD1Ev,_ZThn188_N12S20731C17_ntD1Ev),
  (VTBL_ENTRY)_ZN12S20731C17_ntD1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C15_ntD0Ev,_ZTv0_n16_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N12S20731C15_ntD0Ev,_ZThn20_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N12S20731C15_ntD1Ev,_ZTv0_n16_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N12S20731C15_ntD1Ev,_ZThn20_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S20731C15_ntD0Ev,_ZTv0_n40_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N12S20731C15_ntD0Ev,_ZThn120_N12S20731C15_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn384_N12S20731C15_ntD0Ev,_ZThn204_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N12S20731C15_ntD1Ev,_ZTv0_n40_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn240_N12S20731C15_ntD1Ev,_ZThn120_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn384_N12S20731C15_ntD1Ev,_ZThn204_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C15_ntD0Ev,_ZTv0_n12_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N12S20731C15_ntD0Ev,_ZThn112_N12S20731C15_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn368_N12S20731C15_ntD0Ev,_ZThn196_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N12S20731C15_ntD1Ev,_ZTv0_n12_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N12S20731C15_ntD1Ev,_ZThn112_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn368_N12S20731C15_ntD1Ev,_ZThn196_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C15_ntD0Ev,_ZTv0_n20_N12S20731C15_ntD0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N12S20731C15_ntD0Ev,_ZThn104_N12S20731C15_ntD0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn352_N12S20731C15_ntD0Ev,_ZThn188_N12S20731C15_ntD0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N12S20731C15_ntD1Ev,_ZTv0_n20_N12S20731C15_ntD1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N12S20731C15_ntD1Ev,_ZThn104_N12S20731C15_ntD1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn352_N12S20731C15_ntD1Ev,_ZThn188_N12S20731C15_ntD1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20731C1D0Ev,_ZTv0_n32_N8S20731C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn688_N8S20731C1D0Ev,_ZThn368_N8S20731C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20731C1D1Ev,_ZTv0_n32_N8S20731C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn688_N8S20731C1D1Ev,_ZThn368_N8S20731C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20731C1D0Ev,_ZTv0_n40_N8S20731C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S20731C1D0Ev,_ZThn204_N8S20731C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20731C1D1Ev,_ZTv0_n40_N8S20731C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn384_N8S20731C1D1Ev,_ZThn204_N8S20731C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20731C1D0Ev,_ZTv0_n20_N8S20731C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S20731C1D0Ev,_ZThn188_N8S20731C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20731C1D1Ev,_ZTv0_n20_N8S20731C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S20731C1D1Ev,_ZThn188_N8S20731C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20731C1D0Ev,_ZTv0_n24_N8S20731C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S20731C1D0Ev,_ZThn176_N8S20731C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20731C1D1Ev,_ZTv0_n24_N8S20731C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N8S20731C1D1Ev,_ZThn176_N8S20731C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20731C1D0Ev,_ZTv0_n28_N8S20731C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20731C1D0Ev,_ZThn168_N8S20731C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20731C1D1Ev,_ZTv0_n28_N8S20731C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N8S20731C1D1Ev,_ZThn168_N8S20731C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S20731C1D0Ev,_ZTv0_n56_N8S20731C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N8S20731C1D0Ev,_ZThn232_N8S20731C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20731C1D0Ev,_ZThn32_N8S20731C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S20731C1D1Ev,_ZTv0_n56_N8S20731C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn440_N8S20731C1D1Ev,_ZThn232_N8S20731C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20731C1D1Ev,_ZThn32_N8S20731C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20731C1D0Ev,_ZTv0_n16_N8S20731C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20731C1D0Ev,_ZThn20_N8S20731C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20731C1D1Ev,_ZTv0_n16_N8S20731C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20731C1D1Ev,_ZThn20_N8S20731C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20731C1D0Ev,_ZTv0_n12_N8S20731C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S20731C1D0Ev,_ZThn196_N8S20731C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20731C1D0Ev,_ZThn24_N8S20731C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20731C1D0Ev,_ZThn8_N8S20731C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20731C1D1Ev,_ZTv0_n12_N8S20731C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn368_N8S20731C1D1Ev,_ZThn196_N8S20731C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20731C1D1Ev,_ZThn24_N8S20731C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S20731C1D1Ev,_ZThn8_N8S20731C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20731C1 = {  "S20731C1", // class name
  bases_S20731C1, 88,
  &(vtc_S20731C1[0]), // expected_vtbl_contents
  &(vtt_S20731C1[0]), // expected_vtt_contents
  ABISELECT(728,392), // object size
  NSPAIRA(_ZTI8S20731C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20731C1),266, //virtual function table var
  18, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20731C1),360, //virtual table table var
  78, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names99,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20505C3  : S2264C38 {
  virtual  ~S20505C3(); // _ZN8S20505C3D1Ev
  S20505C3(); // tgen
};
//SIG(-1 S20505C3) C1{ BC2{ m} vd}


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

static void Test_S20505C3()
{
  extern Class_Descriptor cd_S20505C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20505C3, buf);
    S20505C3 *dp, &lv = *(dp=new (buf) S20505C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20505C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20505C3)");
    check_base_class_offset(lv, (S2264C38*), 0, "S20505C3");
    test_class_info(&lv, &cd_S20505C3);
    dp->~S20505C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20505C3(Test_S20505C3, "S20505C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20505C3C1Ev();
extern void _ZN8S20505C3D1Ev();
Name_Map name_map_S20505C3[] = {
  NSPAIR(_ZN8S20505C3C1Ev),
  NSPAIR(_ZN8S20505C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
static Base_Class bases_S20505C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S20505C3[];
extern void _ZN8S20505C3D1Ev();
extern void _ZN8S20505C3D0Ev();
static  VTBL_ENTRY vtc_S20505C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C3[0]),
  (VTBL_ENTRY)&_ZN8S20505C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20505C3D0Ev,
};
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
Class_Descriptor cd_S20505C3 = {  "S20505C3", // class name
  bases_S20505C3, 1,
  &(vtc_S20505C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20505C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20505C3),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  S20505C5  : S2264C38 , virtual S2264C28 {
  ~S20505C5(); // tgen
  S20505C5(); // tgen
};
//SIG(-1 S20505C5) C1{ BC2{ m} VBC3{ m}}


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

static void Test_S20505C5()
{
  extern Class_Descriptor cd_S20505C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20505C5, buf);
    S20505C5 *dp, &lv = *(dp=new (buf) S20505C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20505C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20505C5)");
    check_base_class_offset(lv, (S2264C38*), 0, "S20505C5");
    check_base_class_offset(lv, (S2264C28*), 0, "S20505C5");
    test_class_info(&lv, &cd_S20505C5);
    dp->~S20505C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20505C5(Test_S20505C5, "S20505C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20505C5C1Ev();
extern void _ZN8S20505C5D1Ev();
Name_Map name_map_S20505C5[] = {
  NSPAIR(_ZN8S20505C5C1Ev),
  NSPAIR(_ZN8S20505C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S20505C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20505C5[];
static  VTBL_ENTRY vtc_S20505C5[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C5[0]),
};
extern VTBL_ENTRY _ZTV8S20505C5[];
static  VTT_ENTRY vtt_S20505C5[] = {
  {&(_ZTV8S20505C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20505C5[];
extern  VTBL_ENTRY _ZTV8S20505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20505C5[];
Class_Descriptor cd_S20505C5 = {  "S20505C5", // class name
  bases_S20505C5, 2,
  &(vtc_S20505C5[0]), // expected_vtbl_contents
  &(vtt_S20505C5[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20505C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20505C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20505C5),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  S20505C2  : virtual S20505C3 , virtual S20505C5 {
  void *s20505c2f0;
  ::S3052C22_nt s20505c2f1;
  virtual  ~S20505C2(); // _ZN8S20505C2D2Ev
  S20505C2(); // tgen
};
//SIG(-1 S20505C2) C1{ VBC2{ BC3{ m} vd} VBC4{ BC3 VBC5{ m}} vd Fp FC6{}}


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

static void Test_S20505C2()
{
  extern Class_Descriptor cd_S20505C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20505C2, buf);
    S20505C2 *dp, &lv = *(dp=new (buf) S20505C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20505C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20505C2)");
    check_base_class_offset(lv, (S2264C38*)(S20505C3*), 0, "S20505C2");
    check_base_class_offset(lv, (S20505C3*), 0, "S20505C2");
    check_base_class_offset(lv, (S2264C38*)(S20505C5*), ABISELECT(24,12), "S20505C2");
    check_base_class_offset(lv, (S2264C28*)(S20505C5*), 0, "S20505C2");
    check_base_class_offset(lv, (S20505C5*), ABISELECT(24,12), "S20505C2");
    check_field_offset(lv, s20505c2f0, ABISELECT(8,4), "S20505C2.s20505c2f0");
    check_field_offset(lv, s20505c2f1, ABISELECT(16,8), "S20505C2.s20505c2f1");
    test_class_info(&lv, &cd_S20505C2);
    dp->~S20505C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20505C2(Test_S20505C2, "S20505C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20505C2C1Ev();
extern void _ZN8S20505C2D2Ev();
Name_Map name_map_S20505C2[] = {
  NSPAIR(_ZN8S20505C2C1Ev),
  NSPAIR(_ZN8S20505C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20505C5;
extern VTBL_ENTRY _ZTI8S20505C5[];
extern  VTBL_ENTRY _ZTV8S20505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20505C5[];
static Base_Class bases_S20505C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20505C3,    0, //bcp->offset
    -1, //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_S2264C38,    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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20505C5,    ABISELECT(24,12), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //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 _ZTI8S20505C2[];
extern void _ZN8S20505C2D1Ev();
extern void _ZN8S20505C2D0Ev();
static  VTBL_ENTRY vtc_S20505C2[] = {
  0,
  ABISELECT(24,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C2[0]),
  (VTBL_ENTRY)&_ZN8S20505C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20505C2D0Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20505C2[0]),
};
extern VTBL_ENTRY _ZTV8S20505C2[];
static  VTBL_ENTRY _tg__ZTV8S20505C5__8S20505C2[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C5[0]),
};
static  VTT_ENTRY vtt_S20505C2[] = {
  {&(_ZTV8S20505C2[6]),  6,11},
  {&(_ZTV8S20505C2[6]),  6,11},
  {&(_ZTV8S20505C2[11]),  11,11},
  {&(_tg__ZTV8S20505C5__8S20505C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20505C2[];
extern  VTBL_ENTRY _ZTV8S20505C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20505C2[];
Class_Descriptor cd_S20505C2 = {  "S20505C2", // class name
  bases_S20505C2, 5,
  &(vtc_S20505C2[0]), // expected_vtbl_contents
  &(vtt_S20505C2[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20505C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20505C2),11, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20505C2),4, //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  S20505C11  : virtual S2264C38 , virtual S2264C28 , virtual S20505C5 , S20505C3 {
  virtual  ~S20505C11(); // _ZN9S20505C11D2Ev
  S20505C11(); // tgen
};
//SIG(-1 S20505C11) C1{ VBC2{ m} VBC3{ m} VBC4{ BC2 VBC3} BC5{ BC2 vd} vd}


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

static void Test_S20505C11()
{
  extern Class_Descriptor cd_S20505C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20505C11, buf);
    S20505C11 *dp, &lv = *(dp=new (buf) S20505C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20505C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20505C11)");
    /*is_ambiguous_... S20505C11::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), ABISELECT(8,4), "S20505C11");
    check_base_class_offset(lv, (S2264C28*), 0, "S20505C11");
    check_base_class_offset(lv, (S2264C28*)(S20505C5*), 0, "S20505C11");
    check_base_class_offset(lv, (S2264C38*)(S20505C5*), ABISELECT(16,8), "S20505C11");
    check_base_class_offset(lv, (S20505C5*), ABISELECT(16,8), "S20505C11");
    check_base_class_offset(lv, (S2264C38*)(S20505C3*), 0, "S20505C11");
    check_base_class_offset(lv, (S20505C3*), 0, "S20505C11");
    test_class_info(&lv, &cd_S20505C11);
    dp->~S20505C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20505C11(Test_S20505C11, "S20505C11", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S20505C11C1Ev();
extern void _ZN9S20505C11D2Ev();
Name_Map name_map_S20505C11[] = {
  NSPAIR(_ZN9S20505C11C1Ev),
  NSPAIR(_ZN9S20505C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C5;
extern VTBL_ENTRY _ZTI8S20505C5[];
extern  VTBL_ENTRY _ZTV8S20505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20505C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
static Base_Class bases_S20505C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C38,    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_S20505C5,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20505C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S20505C11[];
extern void _ZN9S20505C11D1Ev();
extern void _ZN9S20505C11D0Ev();
static  VTBL_ENTRY vtc_S20505C11[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C11[0]),
  (VTBL_ENTRY)&_ZN9S20505C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C11D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20505C11[0]),
};
extern VTBL_ENTRY _ZTV9S20505C11[];
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C11[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C5[0]),
};
static  VTT_ENTRY vtt_S20505C11[] = {
  {&(_ZTV9S20505C11[5]),  5,10},
  {&(_ZTV9S20505C11[10]),  10,10},
  {&(_tg__ZTV8S20505C5__9S20505C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20505C11[];
extern  VTBL_ENTRY _ZTV9S20505C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C11[];
Class_Descriptor cd_S20505C11 = {  "S20505C11", // class name
  bases_S20505C11, 6,
  &(vtc_S20505C11[0]), // expected_vtbl_contents
  &(vtt_S20505C11[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S20505C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20505C11),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20505C11),3, //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  S20505C10  : virtual S20505C11 , S20505C3 {
  void *s20505c10f0;
  ~S20505C10(); // tgen
  S20505C10(); // tgen
};
//SIG(-1 S20505C10) C1{ VBC2{ VBC3{ m} VBC4{ m} VBC5{ BC3 VBC4} BC6{ BC3 vd} vd} BC6 Fp}


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

static void Test_S20505C10()
{
  extern Class_Descriptor cd_S20505C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20505C10, buf);
    S20505C10 *dp, &lv = *(dp=new (buf) S20505C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20505C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20505C10)");
    /*is_ambiguous_... S20505C11::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C11*), ABISELECT(24,12), "S20505C10");
    check_base_class_offset(lv, (S2264C28*)(S20505C11*), 0, "S20505C10");
    check_base_class_offset(lv, (S2264C28*)(S20505C5*), 0, "S20505C10");
    check_base_class_offset(lv, (S2264C38*)(S20505C5*), ABISELECT(32,16), "S20505C10");
    check_base_class_offset(lv, (S20505C5*)(S20505C11*), ABISELECT(32,16), "S20505C10");
    check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C11*), ABISELECT(16,8), "S20505C10");
    check_base_class_offset(lv, (S20505C3*)(S20505C11*), ABISELECT(16,8), "S20505C10");
    check_base_class_offset(lv, (S20505C11*), ABISELECT(16,8), "S20505C10");
    /*is_ambiguous_... S20505C10::S20505C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*), 0, "S20505C10");
    /*is_ambiguous_... S20505C10::S20505C3 */ AMB_check_base_class_offset(lv, (S20505C3*), 0, "S20505C10");
    check_field_offset(lv, s20505c10f0, ABISELECT(8,4), "S20505C10.s20505c10f0");
    test_class_info(&lv, &cd_S20505C10);
    dp->~S20505C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20505C10(Test_S20505C10, "S20505C10", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN9S20505C10C1Ev();
extern void _ZN9S20505C10D1Ev();
Name_Map name_map_S20505C10[] = {
  NSPAIR(_ZN9S20505C10C1Ev),
  NSPAIR(_ZN9S20505C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C5;
extern VTBL_ENTRY _ZTI8S20505C5[];
extern  VTBL_ENTRY _ZTV8S20505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20505C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C11;
extern VTBL_ENTRY _ZTI9S20505C11[];
extern  VTBL_ENTRY _ZTV9S20505C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C11[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
static Base_Class bases_S20505C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    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, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    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
    3, //immediately_derived
  0, 0},
  {&cd_S20505C5,    ABISELECT(32,16), //bcp->offset
    16, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2264C38,    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_S20505C3,    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
    6, //immediately_derived
  0, 0},
  {&cd_S20505C11,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20505C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S20505C10[];
extern void _ZN9S20505C10D1Ev();
extern void _ZN9S20505C10D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S20505C10D1Ev,_ZTv0_n24_N9S20505C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S20505C10D1Ev,_ZThn8_N9S20505C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20505C10D0Ev,_ZTv0_n24_N9S20505C10D0Ev)();
extern void ABISELECT(_ZThn16_N9S20505C10D0Ev,_ZThn8_N9S20505C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20505C10[] = {
  ABISELECT(32,16),
  0,
  ABISELECT(24,12),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
  (VTBL_ENTRY)&_ZN9S20505C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C10D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C10D1Ev,_ZTv0_n24_N9S20505C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C10D0Ev,_ZTv0_n24_N9S20505C10D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
};
extern VTBL_ENTRY _ZTV9S20505C10[];
extern void _ZN9S20505C11D1Ev();
extern void _ZN9S20505C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C10[] = {
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C11[0]),
  (VTBL_ENTRY)&_ZN9S20505C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C11__9S20505C10[] = {
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20505C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C10[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C5[0]),
};
static  VTT_ENTRY vtt_S20505C10[] = {
  {&(_ZTV9S20505C10[6]),  6,19},
  {&(_ZTV9S20505C10[14]),  14,19},
  {&(_ZTV9S20505C10[19]),  19,19},
  {&(_tg__ZTV9S20505C11__9S20505C10[5]),  5,7},
  {&(_tg__ZTV8S20505C5__9S20505C11__9S20505C10[3]),  3,3},
  {&(_tg__ZTV8S20505C5__9S20505C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20505C10[];
extern  VTBL_ENTRY _ZTV9S20505C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C10[];
static VTBL_ENTRY alt_thunk_names100[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C10D0Ev,_ZTv0_n24_N9S20505C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20505C10D0Ev,_ZThn8_N9S20505C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C10D1Ev,_ZTv0_n24_N9S20505C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20505C10D1Ev,_ZThn8_N9S20505C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20505C10 = {  "S20505C10", // class name
  bases_S20505C10, 9,
  &(vtc_S20505C10[0]), // expected_vtbl_contents
  &(vtt_S20505C10[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI9S20505C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20505C10),19, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20505C10),6, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names100,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20505C14  : S20505C3 {
  virtual  ~S20505C14(); // _ZN9S20505C14D1Ev
  S20505C14(); // tgen
};
//SIG(-1 S20505C14) C1{ BC2{ BC3{ m} vd} vd}


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

static void Test_S20505C14()
{
  extern Class_Descriptor cd_S20505C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20505C14, buf);
    S20505C14 *dp, &lv = *(dp=new (buf) S20505C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20505C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20505C14)");
    check_base_class_offset(lv, (S2264C38*)(S20505C3*), 0, "S20505C14");
    check_base_class_offset(lv, (S20505C3*), 0, "S20505C14");
    test_class_info(&lv, &cd_S20505C14);
    dp->~S20505C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20505C14(Test_S20505C14, "S20505C14", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S20505C14C1Ev();
extern void _ZN9S20505C14D1Ev();
Name_Map name_map_S20505C14[] = {
  NSPAIR(_ZN9S20505C14C1Ev),
  NSPAIR(_ZN9S20505C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
static Base_Class bases_S20505C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20505C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI9S20505C14[];
extern void _ZN9S20505C14D1Ev();
extern void _ZN9S20505C14D0Ev();
static  VTBL_ENTRY vtc_S20505C14[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C14[0]),
  (VTBL_ENTRY)&_ZN9S20505C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C14D0Ev,
};
extern VTBL_ENTRY _ZTI9S20505C14[];
extern  VTBL_ENTRY _ZTV9S20505C14[];
Class_Descriptor cd_S20505C14 = {  "S20505C14", // class name
  bases_S20505C14, 2,
  &(vtc_S20505C14[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S20505C14),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S20505C14),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  S20505C13  : S20505C14 , virtual S20505C5 , virtual S20505C11 , virtual S20505C3 , S2264C38 {
  ::S2264C38 s20505c13f0;
  __tsi64 s20505c13f1[2];
  virtual  ~S20505C13(); // _ZN9S20505C13D2Ev
  S20505C13(); // tgen
};
//SIG(-1 S20505C13) C1{ BC2{ BC3{ BC4{ m} vd} vd} VBC5{ BC4 VBC6{ m}} VBC7{ VBC4 VBC6 VBC5 BC3 vd} VBC3 BC4 vd FC4 FL[2]}


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

static void Test_S20505C13()
{
  extern Class_Descriptor cd_S20505C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S20505C13, buf);
    S20505C13 *dp, &lv = *(dp=new (buf) S20505C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S20505C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20505C13)");
    check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C14*), 0, "S20505C13");
    check_base_class_offset(lv, (S20505C3*)(S20505C14*), 0, "S20505C13");
    check_base_class_offset(lv, (S20505C14*), 0, "S20505C13");
    check_base_class_offset(lv, (S2264C38*)(S20505C5*), ABISELECT(32,24), "S20505C13");
    check_base_class_offset(lv, (S2264C28*)(S20505C5*), 0, "S20505C13");
    check_base_class_offset(lv, (S2264C28*)(S20505C11*), 0, "S20505C13");
    check_base_class_offset(lv, (S20505C5*), ABISELECT(32,24), "S20505C13");
    check_base_class_offset(lv, (S20505C5*)(S20505C11*), ABISELECT(32,24), "S20505C13");
    /*is_ambiguous_... S20505C11::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C11*), ABISELECT(48,32), "S20505C13");
    check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C11*), ABISELECT(40,28), "S20505C13");
    check_base_class_offset(lv, (S20505C3*)(S20505C11*), ABISELECT(40,28), "S20505C13");
    check_base_class_offset(lv, (S20505C11*), ABISELECT(40,28), "S20505C13");
    /*is_ambiguous_... S20505C13::S20505C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*), ABISELECT(56,36), "S20505C13");
    /*is_ambiguous_... S20505C13::S20505C3 */ AMB_check_base_class_offset(lv, (S20505C3*), ABISELECT(56,36), "S20505C13");
    /*is_ambiguous_... S20505C13::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), ABISELECT(8,4), "S20505C13");
    check_field_offset(lv, s20505c13f0, ABISELECT(9,5), "S20505C13.s20505c13f0");
    check_field_offset(lv, s20505c13f1, ABISELECT(16,8), "S20505C13.s20505c13f1");
    test_class_info(&lv, &cd_S20505C13);
    dp->~S20505C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20505C13(Test_S20505C13, "S20505C13", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN9S20505C13C1Ev();
extern void _ZN9S20505C13D2Ev();
Name_Map name_map_S20505C13[] = {
  NSPAIR(_ZN9S20505C13C1Ev),
  NSPAIR(_ZN9S20505C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C14;
extern VTBL_ENTRY _ZTI9S20505C14[];
extern  VTBL_ENTRY _ZTV9S20505C14[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20505C5;
extern VTBL_ENTRY _ZTI8S20505C5[];
extern  VTBL_ENTRY _ZTV8S20505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20505C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C11;
extern VTBL_ENTRY _ZTI9S20505C11[];
extern  VTBL_ENTRY _ZTV9S20505C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C11[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
static Base_Class bases_S20505C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20505C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S20505C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S2264C38,    ABISELECT(32,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
    5, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20505C5,    ABISELECT(32,24), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C38,    ABISELECT(48,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_S2264C38,    ABISELECT(40,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_S20505C3,    ABISELECT(40,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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20505C11,    ABISELECT(40,28), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //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},
  {&cd_S2264C38,    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
    11, //immediately_derived
  0, 0},
  {&cd_S20505C3,    ABISELECT(56,36), //bcp->offset
    20, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C38,    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 _ZTI9S20505C13[];
extern void _ZN9S20505C13D1Ev();
extern void _ZN9S20505C13D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S20505C13D1Ev,_ZTv0_n24_N9S20505C13D1Ev)();
extern void ABISELECT(_ZThn40_N9S20505C13D1Ev,_ZThn28_N9S20505C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20505C13D0Ev,_ZTv0_n24_N9S20505C13D0Ev)();
extern void ABISELECT(_ZThn40_N9S20505C13D0Ev,_ZThn28_N9S20505C13D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20505C13D1Ev,_ZTv0_n12_N9S20505C13D1Ev)();
extern void ABISELECT(_ZThn56_N9S20505C13D1Ev,_ZThn36_N9S20505C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20505C13D0Ev,_ZTv0_n12_N9S20505C13D0Ev)();
extern void ABISELECT(_ZThn56_N9S20505C13D0Ev,_ZThn36_N9S20505C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20505C13[] = {
  ABISELECT(56,36),
  ABISELECT(48,32),
  ABISELECT(40,28),
  0,
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
  (VTBL_ENTRY)&_ZN9S20505C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C13D0Ev,
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
  ABISELECT(-40,-28),
  ABISELECT(-8,-4),
  ABISELECT(-40,-28),
  ABISELECT(8,4),
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C13D1Ev,_ZTv0_n24_N9S20505C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C13D0Ev,_ZTv0_n24_N9S20505C13D0Ev),
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C13D1Ev,_ZTv0_n12_N9S20505C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C13D0Ev,_ZTv0_n12_N9S20505C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S20505C13[];
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C13[] = {
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C5[0]),
};
extern void _ZN9S20505C11D1Ev();
extern void _ZN9S20505C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C13[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-28),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C11[0]),
  (VTBL_ENTRY)&_ZN9S20505C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C11__9S20505C13[] = {
  ABISELECT(-32,-24),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20505C11[0]),
};
static  VTT_ENTRY vtt_S20505C13[] = {
  {&(_ZTV9S20505C13[7]),  7,25},
  {&(_ZTV9S20505C13[12]),  12,25},
  {&(_ZTV9S20505C13[18]),  18,25},
  {&(_ZTV9S20505C13[23]),  23,25},
  {&(_tg__ZTV8S20505C5__9S20505C13[3]),  3,3},
  {&(_tg__ZTV9S20505C11__9S20505C13[5]),  5,7},
  {&(_tg__ZTV8S20505C5__9S20505C11__9S20505C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20505C13[];
extern  VTBL_ENTRY _ZTV9S20505C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C13[];
static VTBL_ENTRY alt_thunk_names101[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C13D0Ev,_ZTv0_n12_N9S20505C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20505C13D0Ev,_ZThn36_N9S20505C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C13D1Ev,_ZTv0_n12_N9S20505C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20505C13D1Ev,_ZThn36_N9S20505C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C13D0Ev,_ZTv0_n24_N9S20505C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20505C13D0Ev,_ZThn28_N9S20505C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C13D1Ev,_ZTv0_n24_N9S20505C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20505C13D1Ev,_ZThn28_N9S20505C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20505C13 = {  "S20505C13", // class name
  bases_S20505C13, 13,
  &(vtc_S20505C13[0]), // expected_vtbl_contents
  &(vtt_S20505C13[0]), // expected_vtt_contents
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI9S20505C13),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20505C13),25, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20505C13),7, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names101,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20505C12  : S2264C38 , virtual S20505C11 , S20505C13 , virtual S20505C10 {
  ~S20505C12(); // tgen
  S20505C12(); // tgen
};
//SIG(-1 S20505C12) C1{ BC2{ m} VBC3{ VBC2 VBC4{ m} VBC5{ BC2 VBC4} BC6{ BC2 vd} vd} BC7{ BC8{ BC6 vd} VBC5 VBC3 VBC6 BC2 vd FC2 FL[2]} VBC9{ VBC3 BC6 Fp}}


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

static void Test_S20505C12()
{
  extern Class_Descriptor cd_S20505C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S20505C12, buf);
    S20505C12 *dp, &lv = *(dp=new (buf) S20505C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S20505C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20505C12)");
    /*is_ambiguous_... S20505C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), ABISELECT(32,24), "S20505C12");
    /*is_ambiguous_... S20505C11::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C11*), ABISELECT(48,32), "S20505C12");
    check_base_class_offset(lv, (S2264C28*)(S20505C11*), 0, "S20505C12");
    check_base_class_offset(lv, (S2264C28*)(S20505C5*), 0, "S20505C12");
    check_base_class_offset(lv, (S2264C38*)(S20505C5*), ABISELECT(56,36), "S20505C12");
    check_base_class_offset(lv, (S20505C5*)(S20505C11*), ABISELECT(56,36), "S20505C12");
    check_base_class_offset(lv, (S20505C5*)(S20505C13*), ABISELECT(56,36), "S20505C12");
    check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C11*), ABISELECT(40,28), "S20505C12");
    check_base_class_offset(lv, (S20505C3*)(S20505C11*), ABISELECT(40,28), "S20505C12");
    check_base_class_offset(lv, (S20505C11*), ABISELECT(40,28), "S20505C12");
    check_base_class_offset(lv, (S20505C11*)(S20505C13*), ABISELECT(40,28), "S20505C12");
    check_base_class_offset(lv, (S20505C11*)(S20505C10*), ABISELECT(40,28), "S20505C12");
    check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C14*)(S20505C13*), 0, "S20505C12");
    check_base_class_offset(lv, (S20505C3*)(S20505C14*)(S20505C13*), 0, "S20505C12");
    check_base_class_offset(lv, (S20505C14*)(S20505C13*), 0, "S20505C12");
    /*is_ambiguous_... S20505C12::S20505C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*), ABISELECT(64,40), "S20505C12");
    /*is_ambiguous_... S20505C13::S20505C3 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C13*), ABISELECT(64,40), "S20505C12");
    /*is_ambiguous_... S20505C13::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C13*), ABISELECT(8,4), "S20505C12");
    check_base_class_offset(lv, (S20505C13*), 0, "S20505C12");
    /*is_ambiguous_... S20505C10::S20505C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C10*), ABISELECT(72,44), "S20505C12");
    /*is_ambiguous_... S20505C10::S20505C3 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C10*), ABISELECT(72,44), "S20505C12");
    check_base_class_offset(lv, (S20505C10*), ABISELECT(72,44), "S20505C12");
    test_class_info(&lv, &cd_S20505C12);
    dp->~S20505C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20505C12(Test_S20505C12, "S20505C12", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN9S20505C12C1Ev();
extern void _ZN9S20505C12D1Ev();
Name_Map name_map_S20505C12[] = {
  NSPAIR(_ZN9S20505C12C1Ev),
  NSPAIR(_ZN9S20505C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C5;
extern VTBL_ENTRY _ZTI8S20505C5[];
extern  VTBL_ENTRY _ZTV8S20505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20505C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C11;
extern VTBL_ENTRY _ZTI9S20505C11[];
extern  VTBL_ENTRY _ZTV9S20505C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C11[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C14;
extern VTBL_ENTRY _ZTI9S20505C14[];
extern  VTBL_ENTRY _ZTV9S20505C14[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C13;
extern VTBL_ENTRY _ZTI9S20505C13[];
extern  VTBL_ENTRY _ZTV9S20505C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C13[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C10;
extern VTBL_ENTRY _ZTI9S20505C10[];
extern  VTBL_ENTRY _ZTV9S20505C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C10[];
static Base_Class bases_S20505C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    ABISELECT(32,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, 0},
  {&cd_S2264C38,    ABISELECT(48,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, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    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
    4, //immediately_derived
  0, 0},
  {&cd_S20505C5,    ABISELECT(56,36), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(40,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_S20505C3,    ABISELECT(40,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
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20505C11,    ABISELECT(40,28), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20505C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20505C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(64,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
    12, //immediately_derived
  0, 0},
  {&cd_S20505C3,    ABISELECT(64,40), //bcp->offset
    21, //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
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2264C38,    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
    14, //immediately_derived
  0, 0},
  {&cd_S20505C13,    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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C38,    ABISELECT(72,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
    16, //immediately_derived
  0, 0},
  {&cd_S20505C3,    ABISELECT(72,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
    17, //immediately_derived
  0, 0},
  {&cd_S20505C10,    ABISELECT(72,44), //bcp->offset
    26, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20505C12[];
extern void _ZN9S20505C12D1Ev();
extern void _ZN9S20505C12D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S20505C12D1Ev,_ZTv0_n24_N9S20505C12D1Ev)();
extern void ABISELECT(_ZThn40_N9S20505C12D1Ev,_ZThn28_N9S20505C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20505C12D0Ev,_ZTv0_n24_N9S20505C12D0Ev)();
extern void ABISELECT(_ZThn40_N9S20505C12D0Ev,_ZThn28_N9S20505C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20505C12D1Ev,_ZTv0_n12_N9S20505C12D1Ev)();
extern void ABISELECT(_ZThn64_N9S20505C12D1Ev,_ZThn40_N9S20505C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20505C12D0Ev,_ZTv0_n12_N9S20505C12D0Ev)();
extern void ABISELECT(_ZThn64_N9S20505C12D0Ev,_ZThn40_N9S20505C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20505C12D1Ev,_ZTv0_n28_N9S20505C12D1Ev)();
extern void ABISELECT(_ZThn72_N9S20505C12D1Ev,_ZThn44_N9S20505C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20505C12D0Ev,_ZTv0_n28_N9S20505C12D0Ev)();
extern void ABISELECT(_ZThn72_N9S20505C12D0Ev,_ZThn44_N9S20505C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20505C12[] = {
  ABISELECT(72,44),
  ABISELECT(64,40),
  ABISELECT(48,32),
  ABISELECT(40,28),
  0,
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
  (VTBL_ENTRY)&_ZN9S20505C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C12D0Ev,
  ABISELECT(-40,-28),
  ABISELECT(16,8),
  ABISELECT(-40,-28),
  ABISELECT(8,4),
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C12D1Ev,_ZTv0_n24_N9S20505C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C12D0Ev,_ZTv0_n24_N9S20505C12D0Ev),
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C12D1Ev,_ZTv0_n12_N9S20505C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C12D0Ev,_ZTv0_n12_N9S20505C12D0Ev),
  ABISELECT(-72,-44),
  ABISELECT(-16,-8),
  ABISELECT(-72,-44),
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20505C12D1Ev,_ZTv0_n28_N9S20505C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20505C12D0Ev,_ZTv0_n28_N9S20505C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S20505C12[];
extern void _ZN9S20505C13D1Ev();
extern void _ZN9S20505C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C13__9S20505C12[] = {
  ABISELECT(64,40),
  ABISELECT(48,32),
  ABISELECT(40,28),
  0,
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
  (VTBL_ENTRY)&_ZN9S20505C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C13__9S20505C12[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20505C13D1Ev,_ZTv0_n24_N9S20505C13D1Ev)();
extern void ABISELECT(_ZThn40_N9S20505C13D1Ev,_ZThn28_N9S20505C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20505C13D0Ev,_ZTv0_n24_N9S20505C13D0Ev)();
extern void ABISELECT(_ZThn40_N9S20505C13D0Ev,_ZThn28_N9S20505C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C13__9S20505C12[] = {
  ABISELECT(-40,-28),
  ABISELECT(16,8),
  ABISELECT(-40,-28),
  ABISELECT(8,4),
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C13D1Ev,_ZTv0_n24_N9S20505C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C13D0Ev,_ZTv0_n24_N9S20505C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20505C13D1Ev,_ZTv0_n12_N9S20505C13D1Ev)();
extern void ABISELECT(_ZThn64_N9S20505C13D1Ev,_ZThn40_N9S20505C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20505C13D0Ev,_ZTv0_n12_N9S20505C13D0Ev)();
extern void ABISELECT(_ZThn64_N9S20505C13D0Ev,_ZThn40_N9S20505C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20505C3__A2__9S20505C13__9S20505C12[] = {
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C13D1Ev,_ZTv0_n12_N9S20505C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C13D0Ev,_ZTv0_n12_N9S20505C13D0Ev),
};
extern void _ZN9S20505C11D1Ev();
extern void _ZN9S20505C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C12[] = {
  ABISELECT(16,8),
  ABISELECT(-40,-28),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C11[0]),
  (VTBL_ENTRY)&_ZN9S20505C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C11__9S20505C12[] = {
  ABISELECT(-56,-36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20505C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C12[] = {
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C5[0]),
};
extern void _ZN9S20505C10D1Ev();
extern void _ZN9S20505C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C10__9S20505C12[] = {
  ABISELECT(-16,-8),
  ABISELECT(-72,-44),
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
  (VTBL_ENTRY)&_ZN9S20505C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C10D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20505C10D1Ev,_ZTv0_n24_N9S20505C10D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20505C10D0Ev,_ZTv0_n24_N9S20505C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C10__9S20505C12[] = {
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-40,-28),
  ABISELECT(8,4),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C10D1Ev,_ZTv0_n24_N9S20505C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C10D0Ev,_ZTv0_n24_N9S20505C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C10__9S20505C12[] = {
  ABISELECT(-56,-36),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
};
static  VTT_ENTRY vtt_S20505C12[] = {
  {&(_ZTV9S20505C12[8]),  8,35},
  {&(_tg__ZTV9S20505C13__9S20505C12[7]),  7,9},
  {&(_tg__ZTV8S20505C5__9S20505C13__9S20505C12[3]),  3,3},
  {&(_tg__ZTV9S20505C11__9S20505C13__9S20505C12[6]),  6,8},
  {&(_tg__ZTV8S20505C3__A2__9S20505C13__9S20505C12[3]),  3,5},
  {&(_ZTV9S20505C12[16]),  16,35},
  {&(_ZTV9S20505C12[21]),  21,35},
  {&(_ZTV9S20505C12[24]),  24,35},
  {&(_ZTV9S20505C12[33]),  33,35},
  {&(_tg__ZTV9S20505C11__9S20505C12[5]),  5,7},
  {&(_tg__ZTV8S20505C5__9S20505C11__9S20505C12[3]),  3,3},
  {&(_tg__ZTV8S20505C5__9S20505C12[3]),  3,3},
  {&(_tg__ZTV9S20505C10__9S20505C12[6]),  6,8},
  {&(_tg__ZTV9S20505C11__9S20505C10__9S20505C12[6]),  6,8},
  {&(_tg__ZTV8S20505C5__9S20505C10__9S20505C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20505C12[];
extern  VTBL_ENTRY _ZTV9S20505C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C12[];
static VTBL_ENTRY alt_thunk_names102[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C13D0Ev,_ZTv0_n12_N9S20505C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20505C13D0Ev,_ZThn40_N9S20505C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C13D1Ev,_ZTv0_n12_N9S20505C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20505C13D1Ev,_ZThn40_N9S20505C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C13D0Ev,_ZTv0_n24_N9S20505C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20505C13D0Ev,_ZThn28_N9S20505C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C13D1Ev,_ZTv0_n24_N9S20505C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20505C13D1Ev,_ZThn28_N9S20505C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20505C12D0Ev,_ZTv0_n28_N9S20505C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20505C12D0Ev,_ZThn44_N9S20505C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20505C12D1Ev,_ZTv0_n28_N9S20505C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20505C12D1Ev,_ZThn44_N9S20505C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C12D0Ev,_ZTv0_n12_N9S20505C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20505C12D0Ev,_ZThn40_N9S20505C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C12D1Ev,_ZTv0_n12_N9S20505C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20505C12D1Ev,_ZThn40_N9S20505C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C12D0Ev,_ZTv0_n24_N9S20505C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20505C12D0Ev,_ZThn28_N9S20505C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C12D1Ev,_ZTv0_n24_N9S20505C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20505C12D1Ev,_ZThn28_N9S20505C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20505C12 = {  "S20505C12", // class name
  bases_S20505C12, 18,
  &(vtc_S20505C12[0]), // expected_vtbl_contents
  &(vtt_S20505C12[0]), // expected_vtt_contents
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI9S20505C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20505C12),35, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20505C12),15, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names102,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20505C9  : virtual S20505C2 , virtual S20505C10 , virtual S20505C12 , S20505C3 {
  char s20505c9f0[3];
  int s20505c9f1[2];
  ~S20505C9(); // tgen
  S20505C9(); // tgen
};
//SIG(-1 S20505C9) C1{ VBC2{ VBC3{ BC4{ m} vd} VBC5{ BC4 VBC6{ m}} vd Fp FC7{}} VBC8{ VBC9{ VBC4 VBC6 VBC5 BC3 vd} BC3 Fp} VBC10{ BC4 VBC9 BC11{ BC12{ BC3 vd} VBC5 VBC9 VBC3 BC4 vd FC4 FL[2]} VBC8} BC3 Fc[3] Fi[2]}


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

static void Test_S20505C9()
{
  extern Class_Descriptor cd_S20505C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,20)];
    init_test(&cd_S20505C9, buf);
    S20505C9 *dp, &lv = *(dp=new (buf) S20505C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,76), "sizeof(S20505C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20505C9)");
    /*is_ambiguous_... S20505C9::S20505C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*), ABISELECT(24,16), "S20505C9");
    check_base_class_offset(lv, (S20505C3*)(S20505C2*), ABISELECT(24,16), "S20505C9");
    /*is_ambiguous_... S20505C13::S20505C3 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C13*)(S20505C12*), ABISELECT(24,16), "S20505C9");
    check_base_class_offset(lv, (S2264C38*)(S20505C5*), ABISELECT(48,28), "S20505C9");
    check_base_class_offset(lv, (S2264C28*)(S20505C5*), 0, "S20505C9");
    check_base_class_offset(lv, (S2264C28*)(S20505C11*), 0, "S20505C9");
    check_base_class_offset(lv, (S20505C5*)(S20505C2*), ABISELECT(48,28), "S20505C9");
    check_base_class_offset(lv, (S20505C5*)(S20505C11*), ABISELECT(48,28), "S20505C9");
    check_base_class_offset(lv, (S20505C5*)(S20505C13*)(S20505C12*), ABISELECT(48,28), "S20505C9");
    check_base_class_offset(lv, (S20505C2*), ABISELECT(24,16), "S20505C9");
    /*is_ambiguous_... S20505C11::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C11*), ABISELECT(80,44), "S20505C9");
    check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C11*), ABISELECT(72,40), "S20505C9");
    check_base_class_offset(lv, (S20505C3*)(S20505C11*), ABISELECT(72,40), "S20505C9");
    check_base_class_offset(lv, (S20505C11*)(S20505C10*), ABISELECT(72,40), "S20505C9");
    check_base_class_offset(lv, (S20505C11*)(S20505C12*), ABISELECT(72,40), "S20505C9");
    check_base_class_offset(lv, (S20505C11*)(S20505C13*)(S20505C12*), ABISELECT(72,40), "S20505C9");
    /*is_ambiguous_... S20505C10::S20505C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C10*), ABISELECT(56,32), "S20505C9");
    /*is_ambiguous_... S20505C10::S20505C3 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C10*), ABISELECT(56,32), "S20505C9");
    check_base_class_offset(lv, (S20505C10*), ABISELECT(56,32), "S20505C9");
    check_base_class_offset(lv, (S20505C10*)(S20505C12*), ABISELECT(56,32), "S20505C9");
    /*is_ambiguous_... S20505C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C12*), ABISELECT(120,72), "S20505C9");
    check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C14*)(S20505C13*)(S20505C12*), ABISELECT(88,48), "S20505C9");
    check_base_class_offset(lv, (S20505C3*)(S20505C14*)(S20505C13*)(S20505C12*), ABISELECT(88,48), "S20505C9");
    check_base_class_offset(lv, (S20505C14*)(S20505C13*)(S20505C12*), ABISELECT(88,48), "S20505C9");
    /*is_ambiguous_... S20505C13::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C13*)(S20505C12*), ABISELECT(96,52), "S20505C9");
    check_base_class_offset(lv, (S20505C13*)(S20505C12*), ABISELECT(88,48), "S20505C9");
    check_base_class_offset(lv, (S20505C12*), ABISELECT(88,48), "S20505C9");
    /*is_ambiguous_... S20505C9::S20505C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*), 0, "S20505C9");
    /*is_ambiguous_... S20505C9::S20505C3 */ AMB_check_base_class_offset(lv, (S20505C3*), 0, "S20505C9");
    check_field_offset(lv, s20505c9f0, ABISELECT(8,4), "S20505C9.s20505c9f0");
    check_field_offset(lv, s20505c9f1, ABISELECT(12,8), "S20505C9.s20505c9f1");
    test_class_info(&lv, &cd_S20505C9);
    dp->~S20505C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20505C9(Test_S20505C9, "S20505C9", ABISELECT(128,76));

#else // __cplusplus

extern void _ZN8S20505C9C1Ev();
extern void _ZN8S20505C9D1Ev();
Name_Map name_map_S20505C9[] = {
  NSPAIR(_ZN8S20505C9C1Ev),
  NSPAIR(_ZN8S20505C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20505C5;
extern VTBL_ENTRY _ZTI8S20505C5[];
extern  VTBL_ENTRY _ZTV8S20505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20505C5[];
extern Class_Descriptor cd_S20505C2;
extern VTBL_ENTRY _ZTI8S20505C2[];
extern  VTBL_ENTRY _ZTV8S20505C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20505C2[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C11;
extern VTBL_ENTRY _ZTI9S20505C11[];
extern  VTBL_ENTRY _ZTV9S20505C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C11[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C10;
extern VTBL_ENTRY _ZTI9S20505C10[];
extern  VTBL_ENTRY _ZTV9S20505C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C10[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C14;
extern VTBL_ENTRY _ZTI9S20505C14[];
extern  VTBL_ENTRY _ZTV9S20505C14[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C13;
extern VTBL_ENTRY _ZTI9S20505C13[];
extern  VTBL_ENTRY _ZTV9S20505C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C13[];
extern Class_Descriptor cd_S20505C12;
extern VTBL_ENTRY _ZTI9S20505C12[];
extern  VTBL_ENTRY _ZTV9S20505C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C12[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
static Base_Class bases_S20505C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    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
    1, //immediately_derived
  0, 0},
  {&cd_S20505C3,    ABISELECT(24,16), //bcp->offset
    -1, //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
    5, //immediately_derived
  0, 1},
  {&cd_S2264C38,    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, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20505C5,    ABISELECT(48,28), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20505C2,    ABISELECT(24,16), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C38,    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
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(72,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
    8, //immediately_derived
  0, 0},
  {&cd_S20505C3,    ABISELECT(72,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
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20505C11,    ABISELECT(72,40), //bcp->offset
    32, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S2264C38,    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, 0},
  {&cd_S20505C3,    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
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20505C10,    ABISELECT(56,32), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C38,    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
    19, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(88,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
    15, //immediately_derived
  0, 0},
  {&cd_S20505C3,    ABISELECT(88,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
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20505C14,    ABISELECT(88,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
    9, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(96,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
    18, //immediately_derived
  0, 0},
  {&cd_S20505C13,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20505C12,    ABISELECT(88,48), //bcp->offset
    40, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20505C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20505C9[];
extern void _ZN8S20505C9D1Ev();
extern void _ZN8S20505C9D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20505C9D1Ev,_ZTv0_n12_N8S20505C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S20505C9D1Ev,_ZThn16_N8S20505C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20505C9D0Ev,_ZTv0_n12_N8S20505C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S20505C9D0Ev,_ZThn16_N8S20505C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20505C9D1Ev,_ZTv0_n28_N8S20505C9D1Ev)();
extern void ABISELECT(_ZThn56_N8S20505C9D1Ev,_ZThn32_N8S20505C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20505C9D0Ev,_ZTv0_n28_N8S20505C9D0Ev)();
extern void ABISELECT(_ZThn56_N8S20505C9D0Ev,_ZThn32_N8S20505C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20505C9D1Ev,_ZTv0_n24_N8S20505C9D1Ev)();
extern void ABISELECT(_ZThn72_N8S20505C9D1Ev,_ZThn40_N8S20505C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20505C9D0Ev,_ZTv0_n24_N8S20505C9D0Ev)();
extern void ABISELECT(_ZThn72_N8S20505C9D0Ev,_ZThn40_N8S20505C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20505C9D1Ev,_ZTv0_n36_N8S20505C9D1Ev)();
extern void ABISELECT(_ZThn88_N8S20505C9D1Ev,_ZThn48_N8S20505C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20505C9D0Ev,_ZTv0_n36_N8S20505C9D0Ev)();
extern void ABISELECT(_ZThn88_N8S20505C9D0Ev,_ZThn48_N8S20505C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20505C9[] = {
  ABISELECT(88,48),
  ABISELECT(80,44),
  ABISELECT(72,40),
  ABISELECT(56,32),
  0,
  ABISELECT(48,28),
  ABISELECT(24,16),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C9[0]),
  (VTBL_ENTRY)&_ZN8S20505C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20505C9D0Ev,
  ABISELECT(-24,-16),
  ABISELECT(24,12),
  0,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20505C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20505C9D1Ev,_ZTv0_n12_N8S20505C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20505C9D0Ev,_ZTv0_n12_N8S20505C9D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20505C9[0]),
  ABISELECT(-56,-32),
  ABISELECT(-8,-4),
  ABISELECT(-56,-32),
  ABISELECT(24,12),
  ABISELECT(16,8),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S20505C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20505C9D1Ev,_ZTv0_n28_N8S20505C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20505C9D0Ev,_ZTv0_n28_N8S20505C9D0Ev),
  ABISELECT(-72,-40),
  ABISELECT(-24,-12),
  ABISELECT(-72,-40),
  ABISELECT(8,4),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI8S20505C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20505C9D1Ev,_ZTv0_n24_N8S20505C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20505C9D0Ev,_ZTv0_n24_N8S20505C9D0Ev),
  ABISELECT(-88,-48),
  ABISELECT(-32,-16),
  ABISELECT(-64,-32),
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-88,-48),
  ABISELECT(-40,-20),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S20505C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20505C9D1Ev,_ZTv0_n36_N8S20505C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20505C9D0Ev,_ZTv0_n36_N8S20505C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S20505C9[];
extern void ABISELECT(_ZTv0_n24_N8S20505C2D1Ev,_ZTv0_n12_N8S20505C2D1Ev)();
extern void _ZN8S20505C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20505C2D0Ev,_ZTv0_n12_N8S20505C2D0Ev)();
extern void _ZN8S20505C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20505C2__8S20505C9[] = {
  ABISELECT(-24,-16),
  ABISELECT(24,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20505C2D1Ev,_ZTv0_n12_N8S20505C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20505C2D0Ev,_ZTv0_n12_N8S20505C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__8S20505C2__8S20505C9[] = {
  ABISELECT(-48,-28),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20505C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__8S20505C9[] = {
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C5[0]),
};
extern void _ZN9S20505C10D1Ev();
extern void _ZN9S20505C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C10__8S20505C9[] = {
  ABISELECT(-8,-4),
  ABISELECT(-56,-32),
  ABISELECT(24,12),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
  (VTBL_ENTRY)&_ZN9S20505C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C10D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20505C10D1Ev,_ZTv0_n24_N9S20505C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S20505C10D1Ev,_ZThn8_N9S20505C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20505C10D0Ev,_ZTv0_n24_N9S20505C10D0Ev)();
extern void ABISELECT(_ZThn16_N9S20505C10D0Ev,_ZThn8_N9S20505C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C10__8S20505C9[] = {
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(-72,-40),
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C10D1Ev,_ZTv0_n24_N9S20505C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C10D0Ev,_ZTv0_n24_N9S20505C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C10__8S20505C9[] = {
  ABISELECT(-48,-28),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
};
extern void _ZN9S20505C11D1Ev();
extern void _ZN9S20505C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C11__8S20505C9[] = {
  ABISELECT(-24,-12),
  ABISELECT(-72,-40),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C11[0]),
  (VTBL_ENTRY)&_ZN9S20505C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C11__8S20505C9[] = {
  ABISELECT(-48,-28),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S20505C11[0]),
};
extern void _ZN9S20505C12D1Ev();
extern void _ZN9S20505C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C12__8S20505C9[] = {
  ABISELECT(-32,-16),
  ABISELECT(-64,-32),
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-88,-48),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
  (VTBL_ENTRY)&_ZN9S20505C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C12D0Ev,
};
extern void _ZN9S20505C13D1Ev();
extern void _ZN9S20505C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C139S20505C12__8S20505C9[] = {
  ABISELECT(-64,-32),
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-88,-48),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
  (VTBL_ENTRY)&_ZN9S20505C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C139S20505C12__8S20505C9[] = {
  ABISELECT(-48,-28),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20505C13D1Ev,_ZTv0_n24_N9S20505C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20505C13D0Ev,_ZTv0_n24_N9S20505C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C139S20505C12__8S20505C9[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-72,-40),
  ABISELECT(8,4),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C13D1Ev,_ZTv0_n24_N9S20505C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C13D0Ev,_ZTv0_n24_N9S20505C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20505C13D1Ev,_ZTv0_n12_N9S20505C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20505C13D0Ev,_ZTv0_n12_N9S20505C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20505C3__A2__9S20505C139S20505C12__8S20505C9[] = {
  ABISELECT(64,32),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C13D1Ev,_ZTv0_n12_N9S20505C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C13D0Ev,_ZTv0_n12_N9S20505C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20505C12D1Ev,_ZTv0_n24_N9S20505C12D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20505C12D0Ev,_ZTv0_n24_N9S20505C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C12__8S20505C9[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-72,-40),
  ABISELECT(8,4),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C12D1Ev,_ZTv0_n24_N9S20505C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C12D0Ev,_ZTv0_n24_N9S20505C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C12__8S20505C9[] = {
  ABISELECT(-48,-28),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S20505C12D1Ev,_ZTv0_n12_N9S20505C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20505C12D0Ev,_ZTv0_n12_N9S20505C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20505C3__A2__9S20505C12__8S20505C9[] = {
  ABISELECT(64,32),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C12D1Ev,_ZTv0_n12_N9S20505C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C12D0Ev,_ZTv0_n12_N9S20505C12D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N9S20505C12D1Ev,_ZTv0_n28_N9S20505C12D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20505C12D0Ev,_ZTv0_n28_N9S20505C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20505C10__9S20505C12__8S20505C9[] = {
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  ABISELECT(-56,-32),
  ABISELECT(24,12),
  ABISELECT(16,8),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20505C12D1Ev,_ZTv0_n28_N9S20505C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20505C12D0Ev,_ZTv0_n28_N9S20505C12D0Ev),
};
static  VTT_ENTRY vtt_S20505C9[] = {
  {&(_ZTV8S20505C9[10]),  10,51},
  {&(_ZTV8S20505C9[18]),  18,51},
  {&(_ZTV8S20505C9[18]),  18,51},
  {&(_ZTV8S20505C9[23]),  23,51},
  {&(_ZTV8S20505C9[30]),  30,51},
  {&(_ZTV8S20505C9[38]),  38,51},
  {&(_ZTV8S20505C9[49]),  49,51},
  {&(_tg__ZTV8S20505C2__8S20505C9[6]),  6,8},
  {&(_tg__ZTV8S20505C2__8S20505C9[6]),  6,8},
  {&(_tg__ZTV8S20505C5__8S20505C2__8S20505C9[3]),  3,3},
  {&(_tg__ZTV8S20505C5__8S20505C9[3]),  3,3},
  {&(_tg__ZTV9S20505C10__8S20505C9[6]),  6,8},
  {&(_tg__ZTV9S20505C11__9S20505C10__8S20505C9[6]),  6,8},
  {&(_tg__ZTV8S20505C5__9S20505C10__8S20505C9[3]),  3,3},
  {&(_tg__ZTV9S20505C11__8S20505C9[5]),  5,7},
  {&(_tg__ZTV8S20505C5__9S20505C11__8S20505C9[3]),  3,3},
  {&(_tg__ZTV9S20505C12__8S20505C9[8]),  8,10},
  {&(_tg__ZTV9S20505C139S20505C12__8S20505C9[7]),  7,9},
  {&(_tg__ZTV8S20505C5__9S20505C139S20505C12__8S20505C9[3]),  3,3},
  {&(_tg__ZTV9S20505C11__9S20505C139S20505C12__8S20505C9[6]),  6,8},
  {&(_tg__ZTV8S20505C3__A2__9S20505C139S20505C12__8S20505C9[3]),  3,5},
  {&(_tg__ZTV9S20505C11__9S20505C12__8S20505C9[6]),  6,8},
  {&(_tg__ZTV8S20505C5__9S20505C12__8S20505C9[3]),  3,3},
  {&(_tg__ZTV8S20505C3__A2__9S20505C12__8S20505C9[3]),  3,5},
  {&(_tg__ZTV9S20505C10__9S20505C12__8S20505C9[7]),  7,9},
};
extern VTBL_ENTRY _ZTI8S20505C9[];
extern  VTBL_ENTRY _ZTV8S20505C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20505C9[];
static VTBL_ENTRY alt_thunk_names103[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C10D0Ev,_ZTv0_n24_N9S20505C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20505C10D0Ev,_ZThn8_N9S20505C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C10D1Ev,_ZTv0_n24_N9S20505C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20505C10D1Ev,_ZThn8_N9S20505C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20505C2D0Ev,_ZTv0_n12_N8S20505C2D0Ev), // 
  (VTBL_ENTRY)_ZN8S20505C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20505C2D1Ev,_ZTv0_n12_N8S20505C2D1Ev), // 
  (VTBL_ENTRY)_ZN8S20505C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20505C9D0Ev,_ZTv0_n36_N8S20505C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20505C9D0Ev,_ZThn48_N8S20505C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20505C9D1Ev,_ZTv0_n36_N8S20505C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S20505C9D1Ev,_ZThn48_N8S20505C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20505C9D0Ev,_ZTv0_n24_N8S20505C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20505C9D0Ev,_ZThn40_N8S20505C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20505C9D1Ev,_ZTv0_n24_N8S20505C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20505C9D1Ev,_ZThn40_N8S20505C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20505C9D0Ev,_ZTv0_n28_N8S20505C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20505C9D0Ev,_ZThn32_N8S20505C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20505C9D1Ev,_ZTv0_n28_N8S20505C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20505C9D1Ev,_ZThn32_N8S20505C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20505C9D0Ev,_ZTv0_n12_N8S20505C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20505C9D0Ev,_ZThn16_N8S20505C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20505C9D1Ev,_ZTv0_n12_N8S20505C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20505C9D1Ev,_ZThn16_N8S20505C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20505C9 = {  "S20505C9", // class name
  bases_S20505C9, 22,
  &(vtc_S20505C9[0]), // expected_vtbl_contents
  &(vtt_S20505C9[0]), // expected_vtt_contents
  ABISELECT(128,76), // object size
  NSPAIRA(_ZTI8S20505C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20505C9),51, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20505C9),25, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names103,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20505C15  {
  ::S3351C8_nt s20505c15f0;
  void  mf20505c15(); // _ZN9S20505C1510mf20505c15Ev
};
//SIG(-1 S20505C15) C1{ m FC2{ m Fi}}


void  S20505C15 ::mf20505c15(){}

static void Test_S20505C15()
{
  {
    init_simple_test("S20505C15");
    S20505C15 lv;
    check2(sizeof(lv), 4, "sizeof(S20505C15)");
    check2(__alignof__(lv), 4, "__alignof__(S20505C15)");
    check_field_offset(lv, s20505c15f0, 0, "S20505C15.s20505c15f0");
  }
}
static Arrange_To_Call_Me vS20505C15(Test_S20505C15, "S20505C15", 4);

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S20505C15[];
VTBL_ENTRY *P__ZTI9S20505C15 = _ZTI9S20505C15; 
Class_Descriptor cd_S20505C15 = {  "S20505C15", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  4, // object size
  NSPAIRA(_ZTI9S20505C15),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20505C18  : virtual S20505C5 , S20505C11 , virtual S20505C3 , virtual S20505C13 , S2264C28 {
  ~S20505C18(); // tgen
  S20505C18(); // tgen
};
//SIG(-1 S20505C18) C1{ VBC2{ BC3{ m} VBC4{ m}} BC5{ VBC3 VBC4 VBC2 BC6{ BC3 vd} vd} VBC6 VBC7{ BC8{ BC6 vd} VBC2 VBC5 VBC6 BC3 vd FC3 FL[2]} BC4}


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

static void Test_S20505C18()
{
  extern Class_Descriptor cd_S20505C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S20505C18, buf);
    S20505C18 *dp, &lv = *(dp=new (buf) S20505C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S20505C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20505C18)");
    check_base_class_offset(lv, (S2264C38*)(S20505C5*), ABISELECT(8,4), "S20505C18");
    check_base_class_offset(lv, (S2264C28*)(S20505C5*), ABISELECT(16,8), "S20505C18");
    /*is_ambiguous_... S20505C18::S20505C11 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20505C11*), ABISELECT(16,8), "S20505C18");
    /*is_ambiguous_... S20505C18::S20505C11 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20505C11*), ABISELECT(16,8), "S20505C18");
    check_base_class_offset(lv, (S20505C5*), ABISELECT(8,4), "S20505C18");
    /*is_ambiguous_... S20505C18::S20505C11 */ AMB_check_base_class_offset(lv, (S20505C5*)(S20505C11*), ABISELECT(8,4), "S20505C18");
    check_base_class_offset(lv, (S20505C5*)(S20505C13*), ABISELECT(8,4), "S20505C18");
    /*is_ambiguous_... S20505C18::S20505C11 */ AMB_check_base_class_offset(lv, (S20505C5*)(S20505C11*), ABISELECT(8,4), "S20505C18");
    /*is_ambiguous_... S20505C18::S20505C11 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C11*), ABISELECT(16,8), "S20505C18");
    /*is_ambiguous_... S20505C18::S20505C11 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C11*), ABISELECT(16,8), "S20505C18");
    /*is_ambiguous_... S20505C18::S20505C11 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C11*), 0, "S20505C18");
    /*is_ambiguous_... S20505C18::S20505C11 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C11*), 0, "S20505C18");
    /*is_ambiguous_... S20505C18::S20505C11 */ AMB_check_base_class_offset(lv, (S20505C11*), 0, "S20505C18");
    /*is_ambiguous_... S20505C18::S20505C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*), ABISELECT(24,12), "S20505C18");
    /*is_ambiguous_... S20505C18::S20505C3 */ AMB_check_base_class_offset(lv, (S20505C3*), ABISELECT(24,12), "S20505C18");
    /*is_ambiguous_... S20505C13::S20505C3 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C13*), ABISELECT(24,12), "S20505C18");
    check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C14*)(S20505C13*), ABISELECT(32,16), "S20505C18");
    check_base_class_offset(lv, (S20505C3*)(S20505C14*)(S20505C13*), ABISELECT(32,16), "S20505C18");
    check_base_class_offset(lv, (S20505C14*)(S20505C13*), ABISELECT(32,16), "S20505C18");
    /*is_ambiguous_... S20505C18::S20505C11 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C11*), ABISELECT(64,40), "S20505C18");
    /*is_ambiguous_... S20505C18::S20505C11 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C11*), ABISELECT(64,40), "S20505C18");
    check_base_class_offset(lv, (S20505C11*)(S20505C13*), ABISELECT(64,40), "S20505C18");
    /*is_ambiguous_... S20505C13::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C13*), ABISELECT(40,20), "S20505C18");
    check_base_class_offset(lv, (S20505C13*), ABISELECT(32,16), "S20505C18");
    /*is_ambiguous_... S20505C18::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), 0, "S20505C18");
    test_class_info(&lv, &cd_S20505C18);
    dp->~S20505C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20505C18(Test_S20505C18, "S20505C18", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN9S20505C18C1Ev();
extern void _ZN9S20505C18D1Ev();
Name_Map name_map_S20505C18[] = {
  NSPAIR(_ZN9S20505C18C1Ev),
  NSPAIR(_ZN9S20505C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20505C5;
extern VTBL_ENTRY _ZTI8S20505C5[];
extern  VTBL_ENTRY _ZTV8S20505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20505C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C11;
extern VTBL_ENTRY _ZTI9S20505C11[];
extern  VTBL_ENTRY _ZTV9S20505C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C11[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C14;
extern VTBL_ENTRY _ZTI9S20505C14[];
extern  VTBL_ENTRY _ZTV9S20505C14[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C11;
extern VTBL_ENTRY _ZTI9S20505C11[];
extern  VTBL_ENTRY _ZTV9S20505C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C11[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C13;
extern VTBL_ENTRY _ZTI9S20505C13[];
extern  VTBL_ENTRY _ZTV9S20505C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C13[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S20505C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    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_S2264C28,    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, 1},
  {&cd_S20505C5,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C38,    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
    6, //immediately_derived
  0, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20505C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20505C11,    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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C38,    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_S20505C3,    ABISELECT(24,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C38,    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
    10, //immediately_derived
  0, 0},
  {&cd_S20505C3,    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
    11, //immediately_derived
  0, 0},
  {&cd_S20505C14,    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
    6, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(64,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
    13, //immediately_derived
  0, 0},
  {&cd_S20505C3,    ABISELECT(64,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
    3, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20505C11,    ABISELECT(64,40), //bcp->offset
    28, //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
    4, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S2264C38,    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
    16, //immediately_derived
  0, 0},
  {&cd_S20505C13,    ABISELECT(32,16), //bcp->offset
    18, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI9S20505C18[];
extern void _ZN9S20505C18D1Ev();
extern void _ZN9S20505C18D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S20505C18D1Ev,_ZTv0_n12_N9S20505C18D1Ev)();
extern void ABISELECT(_ZThn24_N9S20505C18D1Ev,_ZThn12_N9S20505C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20505C18D0Ev,_ZTv0_n12_N9S20505C18D0Ev)();
extern void ABISELECT(_ZThn24_N9S20505C18D0Ev,_ZThn12_N9S20505C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20505C18D1Ev,_ZTv0_n32_N9S20505C18D1Ev)();
extern void ABISELECT(_ZThn32_N9S20505C18D1Ev,_ZThn16_N9S20505C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S20505C18D0Ev,_ZTv0_n32_N9S20505C18D0Ev)();
extern void ABISELECT(_ZThn32_N9S20505C18D0Ev,_ZThn16_N9S20505C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20505C18D1Ev,_ZTv0_n24_N9S20505C18D1Ev)();
extern void ABISELECT(_ZThn64_N9S20505C18D1Ev,_ZThn40_N9S20505C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20505C18D0Ev,_ZTv0_n24_N9S20505C18D0Ev)();
extern void ABISELECT(_ZThn64_N9S20505C18D0Ev,_ZThn40_N9S20505C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20505C18[] = {
  ABISELECT(64,40),
  ABISELECT(32,16),
  ABISELECT(24,12),
  ABISELECT(8,4),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C18[0]),
  (VTBL_ENTRY)&_ZN9S20505C18D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C18D0Ev,
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20505C18[0]),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20505C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C18D1Ev,_ZTv0_n12_N9S20505C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C18D0Ev,_ZTv0_n12_N9S20505C18D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20505C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20505C18D1Ev,_ZTv0_n32_N9S20505C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S20505C18D0Ev,_ZTv0_n32_N9S20505C18D0Ev),
  ABISELECT(-64,-40),
  ABISELECT(-56,-36),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI9S20505C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C18D1Ev,_ZTv0_n24_N9S20505C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C18D0Ev,_ZTv0_n24_N9S20505C18D0Ev),
};
extern VTBL_ENTRY _ZTV9S20505C18[];
extern void _ZN9S20505C11D1Ev();
extern void _ZN9S20505C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C11__A__9S20505C18[] = {
  ABISELECT(8,4),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C11[0]),
  (VTBL_ENTRY)&_ZN9S20505C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C11__A__9S20505C18[] = {
  ABISELECT(8,4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20505C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C18[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C5[0]),
};
extern void _ZN9S20505C13D1Ev();
extern void _ZN9S20505C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C13__9S20505C18[] = {
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
  (VTBL_ENTRY)&_ZN9S20505C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C13__9S20505C18[] = {
  ABISELECT(8,4),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20505C13D1Ev,_ZTv0_n24_N9S20505C13D1Ev)();
extern void ABISELECT(_ZThn32_N9S20505C13D1Ev,_ZThn24_N9S20505C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20505C13D0Ev,_ZTv0_n24_N9S20505C13D0Ev)();
extern void ABISELECT(_ZThn32_N9S20505C13D0Ev,_ZThn24_N9S20505C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C13__9S20505C18[] = {
  ABISELECT(-32,-24),
  ABISELECT(-56,-36),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C13D1Ev,_ZTv0_n24_N9S20505C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C13D0Ev,_ZTv0_n24_N9S20505C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20505C13D1Ev,_ZTv0_n12_N9S20505C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20505C13D0Ev,_ZTv0_n12_N9S20505C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20505C3__A2__9S20505C13__9S20505C18[] = {
  ABISELECT(8,4),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C13D1Ev,_ZTv0_n12_N9S20505C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C13D0Ev,_ZTv0_n12_N9S20505C13D0Ev),
};
extern void _ZN9S20505C11D1Ev();
extern void _ZN9S20505C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C11__A1__9S20505C18[] = {
  ABISELECT(-56,-36),
  ABISELECT(-48,-32),
  ABISELECT(-48,-32),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C11[0]),
  (VTBL_ENTRY)&_ZN9S20505C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C11__A1__9S20505C18[] = {
  ABISELECT(8,4),
  ABISELECT(56,36),
  (VTBL_ENTRY)&(_ZTI9S20505C11[0]),
};
static  VTT_ENTRY vtt_S20505C18[] = {
  {&(_ZTV9S20505C18[8]),  8,36},
  {&(_tg__ZTV9S20505C11__A__9S20505C18[5]),  5,7},
  {&(_tg__ZTV8S20505C5__9S20505C11__A__9S20505C18[3]),  3,3},
  {&(_ZTV9S20505C18[13]),  13,36},
  {&(_ZTV9S20505C18[16]),  16,36},
  {&(_ZTV9S20505C18[26]),  26,36},
  {&(_ZTV9S20505C18[34]),  34,36},
  {&(_tg__ZTV8S20505C5__9S20505C18[3]),  3,3},
  {&(_tg__ZTV9S20505C13__9S20505C18[7]),  7,9},
  {&(_tg__ZTV8S20505C5__9S20505C13__9S20505C18[3]),  3,3},
  {&(_tg__ZTV9S20505C11__9S20505C13__9S20505C18[6]),  6,8},
  {&(_tg__ZTV8S20505C3__A2__9S20505C13__9S20505C18[3]),  3,5},
  {&(_tg__ZTV9S20505C11__A1__9S20505C18[5]),  5,7},
  {&(_tg__ZTV8S20505C5__9S20505C11__A1__9S20505C18[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20505C18[];
extern  VTBL_ENTRY _ZTV9S20505C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C18[];
static VTBL_ENTRY alt_thunk_names104[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C13D0Ev,_ZTv0_n24_N9S20505C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20505C13D0Ev,_ZThn24_N9S20505C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C13D1Ev,_ZTv0_n24_N9S20505C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20505C13D1Ev,_ZThn24_N9S20505C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C18D0Ev,_ZTv0_n24_N9S20505C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20505C18D0Ev,_ZThn40_N9S20505C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C18D1Ev,_ZTv0_n24_N9S20505C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20505C18D1Ev,_ZThn40_N9S20505C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20505C18D0Ev,_ZTv0_n32_N9S20505C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20505C18D0Ev,_ZThn16_N9S20505C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S20505C18D1Ev,_ZTv0_n32_N9S20505C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20505C18D1Ev,_ZThn16_N9S20505C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C18D0Ev,_ZTv0_n12_N9S20505C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20505C18D0Ev,_ZThn12_N9S20505C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C18D1Ev,_ZTv0_n12_N9S20505C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20505C18D1Ev,_ZThn12_N9S20505C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20505C18 = {  "S20505C18", // class name
  bases_S20505C18, 18,
  &(vtc_S20505C18[0]), // expected_vtbl_contents
  &(vtt_S20505C18[0]), // expected_vtt_contents
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI9S20505C18),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20505C18),36, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20505C18),14, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names104,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20505C17  : S20505C10 , S20505C3 , virtual S20505C2 {
  ::S20505C18 s20505c17f0;
  virtual  ~S20505C17(); // _ZN9S20505C17D2Ev
  S20505C17(); // tgen
};
//SIG(-1 S20505C17) C1{ BC2{ VBC3{ VBC4{ m} VBC5{ m} VBC6{ BC4 VBC5} BC7{ BC4 vd} vd} BC7 Fp} BC7 VBC8{ VBC7 VBC6 vd Fp FC9{}} vd FC10{ VBC6 BC3 VBC7 VBC11{ BC12{ BC7 vd} VBC6 VBC3 VBC7 BC4 vd FC4 FL[2]} BC5}}


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

static void Test_S20505C17()
{
  extern Class_Descriptor cd_S20505C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,21)];
    init_test(&cd_S20505C17, buf);
    S20505C17 *dp, &lv = *(dp=new (buf) S20505C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,80), "sizeof(S20505C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20505C17)");
    /*is_ambiguous_... S20505C11::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C11*), ABISELECT(104,60), "S20505C17");
    check_base_class_offset(lv, (S2264C28*)(S20505C11*), 0, "S20505C17");
    check_base_class_offset(lv, (S2264C28*)(S20505C5*), 0, "S20505C17");
    check_base_class_offset(lv, (S2264C38*)(S20505C5*), ABISELECT(112,64), "S20505C17");
    check_base_class_offset(lv, (S20505C5*)(S20505C11*), ABISELECT(112,64), "S20505C17");
    check_base_class_offset(lv, (S20505C5*)(S20505C2*), ABISELECT(112,64), "S20505C17");
    check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C11*), ABISELECT(96,56), "S20505C17");
    check_base_class_offset(lv, (S20505C3*)(S20505C11*), ABISELECT(96,56), "S20505C17");
    check_base_class_offset(lv, (S20505C11*)(S20505C10*), ABISELECT(96,56), "S20505C17");
    /*is_ambiguous_... S20505C10::S20505C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C10*), 0, "S20505C17");
    /*is_ambiguous_... S20505C10::S20505C3 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C10*), 0, "S20505C17");
    check_base_class_offset(lv, (S20505C10*), 0, "S20505C17");
    /*is_ambiguous_... S20505C17::S20505C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*), ABISELECT(16,8), "S20505C17");
    /*is_ambiguous_... S20505C17::S20505C3 */ AMB_check_base_class_offset(lv, (S20505C3*), ABISELECT(16,8), "S20505C17");
    /*is_ambiguous_... S20505C17::S20505C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*), ABISELECT(120,68), "S20505C17");
    check_base_class_offset(lv, (S20505C3*)(S20505C2*), ABISELECT(120,68), "S20505C17");
    check_base_class_offset(lv, (S20505C2*), ABISELECT(120,68), "S20505C17");
    check_field_offset(lv, s20505c17f0, ABISELECT(24,12), "S20505C17.s20505c17f0");
    test_class_info(&lv, &cd_S20505C17);
    dp->~S20505C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20505C17(Test_S20505C17, "S20505C17", ABISELECT(144,80));

#else // __cplusplus

extern void _ZN9S20505C17C1Ev();
extern void _ZN9S20505C17D2Ev();
Name_Map name_map_S20505C17[] = {
  NSPAIR(_ZN9S20505C17C1Ev),
  NSPAIR(_ZN9S20505C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C5;
extern VTBL_ENTRY _ZTI8S20505C5[];
extern  VTBL_ENTRY _ZTV8S20505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20505C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C11;
extern VTBL_ENTRY _ZTI9S20505C11[];
extern  VTBL_ENTRY _ZTV9S20505C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C11[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C10;
extern VTBL_ENTRY _ZTI9S20505C10[];
extern  VTBL_ENTRY _ZTV9S20505C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C10[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C2;
extern VTBL_ENTRY _ZTI8S20505C2[];
extern  VTBL_ENTRY _ZTV8S20505C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20505C2[];
static Base_Class bases_S20505C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    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
    6, //immediately_derived
  0, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(112,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, 0},
  {&cd_S20505C5,    ABISELECT(112,64), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(96,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
    5, //immediately_derived
  0, 0},
  {&cd_S20505C3,    ABISELECT(96,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
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20505C11,    ABISELECT(96,56), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20505C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S20505C10,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C38,    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
    11, //immediately_derived
  0, 0},
  {&cd_S20505C3,    ABISELECT(16,8), //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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C38,    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
    13, //immediately_derived
  0, 0},
  {&cd_S20505C3,    ABISELECT(120,68), //bcp->offset
    -1, //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
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S20505C2,    ABISELECT(120,68), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20505C17[];
extern void _ZN9S20505C17D1Ev();
extern void _ZN9S20505C17D0Ev();
extern void ABISELECT(_ZThn16_N9S20505C17D1Ev,_ZThn8_N9S20505C17D1Ev)();
extern void ABISELECT(_ZThn16_N9S20505C17D0Ev,_ZThn8_N9S20505C17D0Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20505C17D1Ev,_ZTv0_n24_N9S20505C17D1Ev)();
extern void ABISELECT(_ZThn96_N9S20505C17D1Ev,_ZThn56_N9S20505C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20505C17D0Ev,_ZTv0_n24_N9S20505C17D0Ev)();
extern void ABISELECT(_ZThn96_N9S20505C17D0Ev,_ZThn56_N9S20505C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20505C17D1Ev,_ZTv0_n12_N9S20505C17D1Ev)();
extern void ABISELECT(_ZThn120_N9S20505C17D1Ev,_ZThn68_N9S20505C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20505C17D0Ev,_ZTv0_n12_N9S20505C17D0Ev)();
extern void ABISELECT(_ZThn120_N9S20505C17D0Ev,_ZThn68_N9S20505C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20505C17[] = {
  ABISELECT(120,68),
  ABISELECT(120,68),
  ABISELECT(112,64),
  0,
  ABISELECT(104,60),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C17[0]),
  (VTBL_ENTRY)&_ZN9S20505C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C17D0Ev,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20505C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20505C17D1Ev,_ZThn8_N9S20505C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N9S20505C17D0Ev,_ZThn8_N9S20505C17D0Ev),
  ABISELECT(-96,-56),
  ABISELECT(16,8),
  ABISELECT(-96,-56),
  ABISELECT(8,4),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S20505C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C17D1Ev,_ZTv0_n24_N9S20505C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C17D0Ev,_ZTv0_n24_N9S20505C17D0Ev),
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI9S20505C17[0]),
  ABISELECT(-120,-68),
  ABISELECT(-8,-4),
  0,
  ABISELECT(-120,-68),
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI9S20505C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C17D1Ev,_ZTv0_n12_N9S20505C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C17D0Ev,_ZTv0_n12_N9S20505C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S20505C17[];
extern void _ZN9S20505C10D1Ev();
extern void _ZN9S20505C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C10__9S20505C17[] = {
  ABISELECT(112,64),
  0,
  ABISELECT(104,60),
  ABISELECT(96,56),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
  (VTBL_ENTRY)&_ZN9S20505C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C10D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20505C10D1Ev,_ZTv0_n24_N9S20505C10D1Ev)();
extern void ABISELECT(_ZThn96_N9S20505C10D1Ev,_ZThn56_N9S20505C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20505C10D0Ev,_ZTv0_n24_N9S20505C10D0Ev)();
extern void ABISELECT(_ZThn96_N9S20505C10D0Ev,_ZThn56_N9S20505C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C10__9S20505C17[] = {
  ABISELECT(-96,-56),
  ABISELECT(16,8),
  ABISELECT(-96,-56),
  ABISELECT(8,4),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C10D1Ev,_ZTv0_n24_N9S20505C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C10D0Ev,_ZTv0_n24_N9S20505C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C10__9S20505C17[] = {
  ABISELECT(-112,-64),
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
};
extern void _ZN9S20505C11D1Ev();
extern void _ZN9S20505C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C17[] = {
  ABISELECT(16,8),
  ABISELECT(-96,-56),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C11[0]),
  (VTBL_ENTRY)&_ZN9S20505C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C11__9S20505C17[] = {
  ABISELECT(-112,-64),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20505C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C17[] = {
  ABISELECT(-112,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C5[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S20505C2D1Ev,_ZTv0_n12_N8S20505C2D1Ev)();
extern void _ZN8S20505C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20505C2D0Ev,_ZTv0_n12_N8S20505C2D0Ev)();
extern void _ZN8S20505C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20505C2__9S20505C17[] = {
  ABISELECT(-120,-68),
  ABISELECT(-8,-4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20505C2D1Ev,_ZTv0_n12_N8S20505C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20505C2D0Ev,_ZTv0_n12_N8S20505C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__8S20505C2__9S20505C17[] = {
  ABISELECT(-112,-64),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20505C2[0]),
};
static  VTT_ENTRY vtt_S20505C17[] = {
  {&(_ZTV9S20505C17[8]),  8,33},
  {&(_tg__ZTV9S20505C10__9S20505C17[6]),  6,8},
  {&(_tg__ZTV9S20505C11__9S20505C10__9S20505C17[6]),  6,8},
  {&(_tg__ZTV8S20505C5__9S20505C10__9S20505C17[3]),  3,3},
  {&(_ZTV9S20505C17[20]),  20,33},
  {&(_ZTV9S20505C17[25]),  25,33},
  {&(_ZTV9S20505C17[31]),  31,33},
  {&(_ZTV9S20505C17[31]),  31,33},
  {&(_tg__ZTV9S20505C11__9S20505C17[5]),  5,7},
  {&(_tg__ZTV8S20505C5__9S20505C11__9S20505C17[3]),  3,3},
  {&(_tg__ZTV8S20505C5__9S20505C17[3]),  3,3},
  {&(_tg__ZTV8S20505C2__9S20505C17[6]),  6,8},
  {&(_tg__ZTV8S20505C2__9S20505C17[6]),  6,8},
  {&(_tg__ZTV8S20505C5__8S20505C2__9S20505C17[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20505C17[];
extern  VTBL_ENTRY _ZTV9S20505C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C17[];
static VTBL_ENTRY alt_thunk_names105[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20505C2D0Ev,_ZTv0_n12_N8S20505C2D0Ev), // 
  (VTBL_ENTRY)_ZN8S20505C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20505C2D1Ev,_ZTv0_n12_N8S20505C2D1Ev), // 
  (VTBL_ENTRY)_ZN8S20505C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C10D0Ev,_ZTv0_n24_N9S20505C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20505C10D0Ev,_ZThn56_N9S20505C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C10D1Ev,_ZTv0_n24_N9S20505C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20505C10D1Ev,_ZThn56_N9S20505C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C17D0Ev,_ZTv0_n12_N9S20505C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S20505C17D0Ev,_ZThn68_N9S20505C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C17D1Ev,_ZTv0_n12_N9S20505C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S20505C17D1Ev,_ZThn68_N9S20505C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C17D0Ev,_ZTv0_n24_N9S20505C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20505C17D0Ev,_ZThn56_N9S20505C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C17D1Ev,_ZTv0_n24_N9S20505C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20505C17D1Ev,_ZThn56_N9S20505C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20505C17 = {  "S20505C17", // class name
  bases_S20505C17, 15,
  &(vtc_S20505C17[0]), // expected_vtbl_contents
  &(vtt_S20505C17[0]), // expected_vtt_contents
  ABISELECT(144,80), // object size
  NSPAIRA(_ZTI9S20505C17),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20505C17),33, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20505C17),14, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names105,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20505C8  : virtual S20505C2 , virtual S20505C9 , S20505C15 , S20505C12 , S20505C17 {
  int s20505c8f0;
  __tsi64 s20505c8f1;
  char s20505c8f2;
  ~S20505C8(); // tgen
  S20505C8(); // tgen
};
//SIG(-1 S20505C8) C1{ VBC2{ VBC3{ BC4{ m} vd} VBC5{ BC4 VBC6{ m}} vd Fp FC7{}} VBC8{ VBC2 VBC9{ VBC10{ VBC4 VBC6 VBC5 BC3 vd} BC3 Fp} VBC11{ BC4 VBC10 BC12{ BC13{ BC3 vd} VBC5 VBC10 VBC3 BC4 vd FC4 FL[2]} VBC9} BC3 Fc[3] Fi[2]} BC14{ m FC15{ m Fi}} BC11 BC16{ BC9 BC3 VBC2 vd FC17{ VBC5 BC10 VBC3 VBC12 BC6}} Fi FL Fc}


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

static void Test_S20505C8()
{
  extern Class_Descriptor cd_S20505C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,46)];
    init_test(&cd_S20505C8, buf);
    S20505C8 *dp, &lv = *(dp=new (buf) S20505C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,180), "sizeof(S20505C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20505C8)");
    /*is_ambiguous_... S20505C8::S20505C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*), ABISELECT(160,104), "S20505C8");
    check_base_class_offset(lv, (S20505C3*)(S20505C2*), ABISELECT(160,104), "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C13*)(S20505C12*), ABISELECT(160,104), "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C13*)(S20505C12*), ABISELECT(160,104), "S20505C8");
    check_base_class_offset(lv, (S2264C38*)(S20505C5*), ABISELECT(184,116), "S20505C8");
    check_base_class_offset(lv, (S2264C28*)(S20505C5*), 0, "S20505C8");
    check_base_class_offset(lv, (S2264C28*)(S20505C11*), 0, "S20505C8");
    check_base_class_offset(lv, (S20505C5*)(S20505C2*), ABISELECT(184,116), "S20505C8");
    check_base_class_offset(lv, (S20505C5*)(S20505C11*), ABISELECT(184,116), "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C5*)(S20505C13*)(S20505C12*), ABISELECT(184,116), "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C5*)(S20505C13*)(S20505C12*), ABISELECT(184,116), "S20505C8");
    check_base_class_offset(lv, (S20505C2*), ABISELECT(160,104), "S20505C8");
    check_base_class_offset(lv, (S20505C2*)(S20505C9*), ABISELECT(160,104), "S20505C8");
    check_base_class_offset(lv, (S20505C2*)(S20505C17*), ABISELECT(160,104), "S20505C8");
    /*is_ambiguous_... S20505C11::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C11*), ABISELECT(240,148), "S20505C8");
    check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C11*), ABISELECT(232,144), "S20505C8");
    check_base_class_offset(lv, (S20505C3*)(S20505C11*), ABISELECT(232,144), "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C10 */ AMB_check_base_class_offset(lv, (S20505C11*)(S20505C10*), ABISELECT(232,144), "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C11*)(S20505C12*), ABISELECT(232,144), "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C11*)(S20505C13*)(S20505C12*), ABISELECT(232,144), "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C11*)(S20505C12*), ABISELECT(232,144), "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C11*)(S20505C13*)(S20505C12*), ABISELECT(232,144), "S20505C8");
    check_base_class_offset(lv, (S20505C11*)(S20505C10*)(S20505C17*), ABISELECT(232,144), "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C10*), ABISELECT(216,136), "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C10 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C10*), ABISELECT(216,136), "S20505C8");
    check_base_class_offset(lv, (S20505C10*)(S20505C9*), ABISELECT(216,136), "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C10*)(S20505C12*), ABISELECT(216,136), "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C10*)(S20505C12*), ABISELECT(216,136), "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C12*), ABISELECT(280,176), "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C14*)(S20505C13*)(S20505C12*), ABISELECT(248,152), "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C14*)(S20505C13*)(S20505C12*), ABISELECT(248,152), "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C14*)(S20505C13*)(S20505C12*), ABISELECT(248,152), "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C13*)(S20505C12*), ABISELECT(256,156), "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C13*)(S20505C12*), ABISELECT(248,152), "S20505C8");
    check_base_class_offset(lv, (S20505C12*)(S20505C9*), ABISELECT(248,152), "S20505C8");
    /*is_ambiguous_... S20505C9::S20505C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C9*), ABISELECT(192,120), "S20505C8");
    /*is_ambiguous_... S20505C9::S20505C3 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C9*), ABISELECT(192,120), "S20505C8");
    check_base_class_offset(lv, (S20505C9*), ABISELECT(192,120), "S20505C8");
    check_base_class_offset(lv, (S20505C15*), ABISELECT(36,28), "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C12*), ABISELECT(32,24), "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C14*)(S20505C13*)(S20505C12*), 0, "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C14*)(S20505C13*)(S20505C12*), 0, "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C14*)(S20505C13*)(S20505C12*), 0, "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C13*)(S20505C12*), ABISELECT(8,4), "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C13*)(S20505C12*), 0, "S20505C8");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C12*), 0, "S20505C8");
    /*is_ambiguous_... S20505C10::S20505C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C10*)(S20505C17*), ABISELECT(40,32), "S20505C8");
    /*is_ambiguous_... S20505C10::S20505C3 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C10*)(S20505C17*), ABISELECT(40,32), "S20505C8");
    check_base_class_offset(lv, (S20505C10*)(S20505C17*), ABISELECT(40,32), "S20505C8");
    /*is_ambiguous_... S20505C17::S20505C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C17*), ABISELECT(56,40), "S20505C8");
    /*is_ambiguous_... S20505C17::S20505C3 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C17*), ABISELECT(56,40), "S20505C8");
    check_base_class_offset(lv, (S20505C17*), ABISELECT(40,32), "S20505C8");
    check_field_offset(lv, s20505c8f0, ABISELECT(136,88), "S20505C8.s20505c8f0");
    check_field_offset(lv, s20505c8f1, ABISELECT(144,92), "S20505C8.s20505c8f1");
    check_field_offset(lv, s20505c8f2, ABISELECT(152,100), "S20505C8.s20505c8f2");
    test_class_info(&lv, &cd_S20505C8);
    dp->~S20505C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20505C8(Test_S20505C8, "S20505C8", ABISELECT(288,180));

#else // __cplusplus

extern void _ZN8S20505C8C1Ev();
extern void _ZN8S20505C8D1Ev();
Name_Map name_map_S20505C8[] = {
  NSPAIR(_ZN8S20505C8C1Ev),
  NSPAIR(_ZN8S20505C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20505C5;
extern VTBL_ENTRY _ZTI8S20505C5[];
extern  VTBL_ENTRY _ZTV8S20505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20505C5[];
extern Class_Descriptor cd_S20505C2;
extern VTBL_ENTRY _ZTI8S20505C2[];
extern  VTBL_ENTRY _ZTV8S20505C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20505C2[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C11;
extern VTBL_ENTRY _ZTI9S20505C11[];
extern  VTBL_ENTRY _ZTV9S20505C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C11[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C10;
extern VTBL_ENTRY _ZTI9S20505C10[];
extern  VTBL_ENTRY _ZTV9S20505C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C10[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C14;
extern VTBL_ENTRY _ZTI9S20505C14[];
extern  VTBL_ENTRY _ZTV9S20505C14[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C13;
extern VTBL_ENTRY _ZTI9S20505C13[];
extern  VTBL_ENTRY _ZTV9S20505C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C13[];
extern Class_Descriptor cd_S20505C12;
extern VTBL_ENTRY _ZTI9S20505C12[];
extern  VTBL_ENTRY _ZTV9S20505C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C12[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C9;
extern VTBL_ENTRY _ZTI8S20505C9[];
extern  VTBL_ENTRY _ZTV8S20505C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20505C9[];
extern Class_Descriptor cd_S20505C15;
extern VTBL_ENTRY _ZTI9S20505C15[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C14;
extern VTBL_ENTRY _ZTI9S20505C14[];
extern  VTBL_ENTRY _ZTV9S20505C14[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C13;
extern VTBL_ENTRY _ZTI9S20505C13[];
extern  VTBL_ENTRY _ZTV9S20505C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C13[];
extern Class_Descriptor cd_S20505C12;
extern VTBL_ENTRY _ZTI9S20505C12[];
extern  VTBL_ENTRY _ZTV9S20505C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C12[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C10;
extern VTBL_ENTRY _ZTI9S20505C10[];
extern  VTBL_ENTRY _ZTV9S20505C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C10[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C17;
extern VTBL_ENTRY _ZTI9S20505C17[];
extern  VTBL_ENTRY _ZTV9S20505C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C17[];
static Base_Class bases_S20505C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    ABISELECT(160,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
    1, //immediately_derived
  0, 0},
  {&cd_S20505C3,    ABISELECT(160,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(184,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
    4, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20505C5,    ABISELECT(184,116), //bcp->offset
    35, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20505C2,    ABISELECT(160,104), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C38,    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
    9, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(232,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
    8, //immediately_derived
  0, 0},
  {&cd_S20505C3,    ABISELECT(232,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
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20505C11,    ABISELECT(232,144), //bcp->offset
    60, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(216,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
    11, //immediately_derived
  0, 0},
  {&cd_S20505C3,    ABISELECT(216,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
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20505C10,    ABISELECT(216,136), //bcp->offset
    51, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(280,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
    19, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    15, //immediately_derived
  0, 0},
  {&cd_S20505C3,    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
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20505C14,    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
    9, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(256,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
    18, //immediately_derived
  0, 0},
  {&cd_S20505C13,    ABISELECT(248,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20505C12,    ABISELECT(248,152), //bcp->offset
    68, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S2264C38,    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
    21, //immediately_derived
  0, 0},
  {&cd_S20505C3,    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
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20505C9,    ABISELECT(192,120), //bcp->offset
    38, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20505C15,    ABISELECT(36,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, 0},
  {&cd_S2264C38,    ABISELECT(32,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
    30, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20505C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20505C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    29, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    29, //immediately_derived
  0, 0},
  {&cd_S20505C13,    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
    16, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20505C12,    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
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C38,    ABISELECT(40,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
    32, //immediately_derived
  0, 0},
  {&cd_S20505C3,    ABISELECT(40,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
    18, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S20505C10,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(56,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
    35, //immediately_derived
  0, 0},
  {&cd_S20505C3,    ABISELECT(56,40), //bcp->offset
    23, //bcp->virtual_function_table_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
    36, //immediately_derived
  0, 0},
  {&cd_S20505C17,    ABISELECT(40,32), //bcp->offset
    13, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20505C8[];
extern void _ZN8S20505C8D1Ev();
extern void _ZN8S20505C8D0Ev();
extern void ABISELECT(_ZThn40_N8S20505C8D1Ev,_ZThn32_N8S20505C8D1Ev)();
extern void ABISELECT(_ZThn40_N8S20505C8D0Ev,_ZThn32_N8S20505C8D0Ev)();
extern void ABISELECT(_ZThn56_N8S20505C8D1Ev,_ZThn40_N8S20505C8D1Ev)();
extern void ABISELECT(_ZThn56_N8S20505C8D0Ev,_ZThn40_N8S20505C8D0Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20505C8D1Ev,_ZTv0_n12_N8S20505C8D1Ev)();
extern void ABISELECT(_ZThn160_N8S20505C8D1Ev,_ZThn104_N8S20505C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20505C8D0Ev,_ZTv0_n12_N8S20505C8D0Ev)();
extern void ABISELECT(_ZThn160_N8S20505C8D0Ev,_ZThn104_N8S20505C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20505C8D1Ev,_ZTv0_n44_N8S20505C8D1Ev)();
extern void ABISELECT(_ZThn192_N8S20505C8D1Ev,_ZThn120_N8S20505C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20505C8D0Ev,_ZTv0_n44_N8S20505C8D0Ev)();
extern void ABISELECT(_ZThn192_N8S20505C8D0Ev,_ZThn120_N8S20505C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20505C8D1Ev,_ZTv0_n28_N8S20505C8D1Ev)();
extern void ABISELECT(_ZThn216_N8S20505C8D1Ev,_ZThn136_N8S20505C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20505C8D0Ev,_ZTv0_n28_N8S20505C8D0Ev)();
extern void ABISELECT(_ZThn216_N8S20505C8D0Ev,_ZThn136_N8S20505C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20505C8D1Ev,_ZTv0_n24_N8S20505C8D1Ev)();
extern void ABISELECT(_ZThn232_N8S20505C8D1Ev,_ZThn144_N8S20505C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20505C8D0Ev,_ZTv0_n24_N8S20505C8D0Ev)();
extern void ABISELECT(_ZThn232_N8S20505C8D0Ev,_ZThn144_N8S20505C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20505C8D1Ev,_ZTv0_n36_N8S20505C8D1Ev)();
extern void ABISELECT(_ZThn248_N8S20505C8D1Ev,_ZThn152_N8S20505C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20505C8D0Ev,_ZTv0_n36_N8S20505C8D0Ev)();
extern void ABISELECT(_ZThn248_N8S20505C8D0Ev,_ZThn152_N8S20505C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20505C8[] = {
  ABISELECT(248,152),
  ABISELECT(192,120),
  ABISELECT(160,104),
  ABISELECT(216,136),
  ABISELECT(160,104),
  ABISELECT(240,148),
  ABISELECT(232,144),
  0,
  ABISELECT(184,116),
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C8[0]),
  (VTBL_ENTRY)&_ZN8S20505C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20505C8D0Ev,
  ABISELECT(120,72),
  ABISELECT(120,72),
  ABISELECT(144,84),
  ABISELECT(-40,-32),
  ABISELECT(200,116),
  ABISELECT(192,112),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S20505C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S20505C8D1Ev,_ZThn32_N8S20505C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S20505C8D0Ev,_ZThn32_N8S20505C8D0Ev),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S20505C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S20505C8D1Ev,_ZThn40_N8S20505C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn56_N8S20505C8D0Ev,_ZThn40_N8S20505C8D0Ev),
  ABISELECT(-160,-104),
  ABISELECT(24,12),
  0,
  ABISELECT(-160,-104),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI8S20505C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20505C8D1Ev,_ZTv0_n12_N8S20505C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20505C8D0Ev,_ZTv0_n12_N8S20505C8D0Ev),
  ABISELECT(-184,-116),
  ABISELECT(-184,-116),
  (VTBL_ENTRY)&(_ZTI8S20505C8[0]),
  ABISELECT(-192,-120),
  ABISELECT(56,32),
  ABISELECT(48,28),
  ABISELECT(40,24),
  ABISELECT(24,16),
  ABISELECT(-192,-120),
  ABISELECT(-8,-4),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI8S20505C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20505C8D1Ev,_ZTv0_n44_N8S20505C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20505C8D0Ev,_ZTv0_n44_N8S20505C8D0Ev),
  ABISELECT(-216,-136),
  ABISELECT(-32,-20),
  ABISELECT(-216,-136),
  ABISELECT(24,12),
  ABISELECT(16,8),
  ABISELECT(-216,-136),
  (VTBL_ENTRY)&(_ZTI8S20505C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20505C8D1Ev,_ZTv0_n28_N8S20505C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20505C8D0Ev,_ZTv0_n28_N8S20505C8D0Ev),
  ABISELECT(-232,-144),
  ABISELECT(-48,-28),
  ABISELECT(-232,-144),
  ABISELECT(8,4),
  ABISELECT(-232,-144),
  (VTBL_ENTRY)&(_ZTI8S20505C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20505C8D1Ev,_ZTv0_n24_N8S20505C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20505C8D0Ev,_ZTv0_n24_N8S20505C8D0Ev),
  ABISELECT(-248,-152),
  ABISELECT(-32,-16),
  ABISELECT(-88,-48),
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-248,-152),
  ABISELECT(-64,-36),
  ABISELECT(-248,-152),
  (VTBL_ENTRY)&(_ZTI8S20505C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20505C8D1Ev,_ZTv0_n36_N8S20505C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20505C8D0Ev,_ZTv0_n36_N8S20505C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S20505C8[];
extern void _ZN9S20505C12D1Ev();
extern void _ZN9S20505C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C12__A__8S20505C8[] = {
  ABISELECT(216,136),
  ABISELECT(160,104),
  ABISELECT(240,148),
  ABISELECT(232,144),
  0,
  ABISELECT(184,116),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
  (VTBL_ENTRY)&_ZN9S20505C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C12D0Ev,
};
extern void _ZN9S20505C13D1Ev();
extern void _ZN9S20505C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C139S20505C12__A1__8S20505C8[] = {
  ABISELECT(160,104),
  ABISELECT(240,148),
  ABISELECT(232,144),
  0,
  ABISELECT(184,116),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
  (VTBL_ENTRY)&_ZN9S20505C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C139S20505C12__A1__8S20505C8[] = {
  ABISELECT(-184,-116),
  ABISELECT(-184,-116),
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20505C13D1Ev,_ZTv0_n24_N9S20505C13D1Ev)();
extern void ABISELECT(_ZThn232_N9S20505C13D1Ev,_ZThn144_N9S20505C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20505C13D0Ev,_ZTv0_n24_N9S20505C13D0Ev)();
extern void ABISELECT(_ZThn232_N9S20505C13D0Ev,_ZThn144_N9S20505C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C139S20505C12__A1__8S20505C8[] = {
  ABISELECT(-232,-144),
  ABISELECT(-48,-28),
  ABISELECT(-232,-144),
  ABISELECT(8,4),
  ABISELECT(-232,-144),
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C13D1Ev,_ZTv0_n24_N9S20505C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C13D0Ev,_ZTv0_n24_N9S20505C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20505C13D1Ev,_ZTv0_n12_N9S20505C13D1Ev)();
extern void ABISELECT(_ZThn160_N9S20505C13D1Ev,_ZThn104_N9S20505C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20505C13D0Ev,_ZTv0_n12_N9S20505C13D0Ev)();
extern void ABISELECT(_ZThn160_N9S20505C13D0Ev,_ZThn104_N9S20505C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20505C3__A2__9S20505C139S20505C12__A1__8S20505C8[] = {
  ABISELECT(-160,-104),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C13D1Ev,_ZTv0_n12_N9S20505C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C13D0Ev,_ZTv0_n12_N9S20505C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20505C12D1Ev,_ZTv0_n24_N9S20505C12D1Ev)();
extern void ABISELECT(_ZThn232_N9S20505C12D1Ev,_ZThn144_N9S20505C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20505C12D0Ev,_ZTv0_n24_N9S20505C12D0Ev)();
extern void ABISELECT(_ZThn232_N9S20505C12D0Ev,_ZThn144_N9S20505C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C12__A__8S20505C8[] = {
  ABISELECT(-232,-144),
  ABISELECT(-48,-28),
  ABISELECT(-232,-144),
  ABISELECT(8,4),
  ABISELECT(-232,-144),
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C12D1Ev,_ZTv0_n24_N9S20505C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C12D0Ev,_ZTv0_n24_N9S20505C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C12__A__8S20505C8[] = {
  ABISELECT(-184,-116),
  ABISELECT(-184,-116),
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S20505C12D1Ev,_ZTv0_n12_N9S20505C12D1Ev)();
extern void ABISELECT(_ZThn160_N9S20505C12D1Ev,_ZThn104_N9S20505C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20505C12D0Ev,_ZTv0_n12_N9S20505C12D0Ev)();
extern void ABISELECT(_ZThn160_N9S20505C12D0Ev,_ZThn104_N9S20505C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20505C3__A2__9S20505C12__A__8S20505C8[] = {
  ABISELECT(-160,-104),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C12D1Ev,_ZTv0_n12_N9S20505C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C12D0Ev,_ZTv0_n12_N9S20505C12D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N9S20505C12D1Ev,_ZTv0_n28_N9S20505C12D1Ev)();
extern void ABISELECT(_ZThn216_N9S20505C12D1Ev,_ZThn136_N9S20505C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20505C12D0Ev,_ZTv0_n28_N9S20505C12D0Ev)();
extern void ABISELECT(_ZThn216_N9S20505C12D0Ev,_ZThn136_N9S20505C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20505C10__9S20505C12__A__8S20505C8[] = {
  ABISELECT(-216,-136),
  ABISELECT(-32,-20),
  ABISELECT(-216,-136),
  ABISELECT(24,12),
  ABISELECT(16,8),
  ABISELECT(-216,-136),
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20505C12D1Ev,_ZTv0_n28_N9S20505C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20505C12D0Ev,_ZTv0_n28_N9S20505C12D0Ev),
};
extern void _ZN9S20505C17D1Ev();
extern void _ZN9S20505C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C17__8S20505C8[] = {
  ABISELECT(120,72),
  ABISELECT(120,72),
  ABISELECT(144,84),
  ABISELECT(-40,-32),
  ABISELECT(200,116),
  ABISELECT(192,112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C17[0]),
  (VTBL_ENTRY)&_ZN9S20505C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C17D0Ev,
};
extern void _ZN9S20505C10D1Ev();
extern void _ZN9S20505C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C109S20505C17__A1__8S20505C8[] = {
  ABISELECT(144,84),
  ABISELECT(-40,-32),
  ABISELECT(200,116),
  ABISELECT(192,112),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
  (VTBL_ENTRY)&_ZN9S20505C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C10D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20505C10D1Ev,_ZTv0_n24_N9S20505C10D1Ev)();
extern void ABISELECT(_ZThn192_N9S20505C10D1Ev,_ZThn112_N9S20505C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20505C10D0Ev,_ZTv0_n24_N9S20505C10D0Ev)();
extern void ABISELECT(_ZThn192_N9S20505C10D0Ev,_ZThn112_N9S20505C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C109S20505C17__A1__8S20505C8[] = {
  ABISELECT(-192,-112),
  ABISELECT(-48,-28),
  ABISELECT(-232,-144),
  ABISELECT(8,4),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C10D1Ev,_ZTv0_n24_N9S20505C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C10D0Ev,_ZTv0_n24_N9S20505C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C109S20505C17__A1__8S20505C8[] = {
  ABISELECT(-184,-116),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20505C17D1Ev,_ZTv0_n24_N9S20505C17D1Ev)();
extern void ABISELECT(_ZThn192_N9S20505C17D1Ev,_ZThn112_N9S20505C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20505C17D0Ev,_ZTv0_n24_N9S20505C17D0Ev)();
extern void ABISELECT(_ZThn192_N9S20505C17D0Ev,_ZThn112_N9S20505C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C17__8S20505C8[] = {
  ABISELECT(-192,-112),
  ABISELECT(-48,-28),
  ABISELECT(-232,-144),
  ABISELECT(8,4),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI9S20505C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C17D1Ev,_ZTv0_n24_N9S20505C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C17D0Ev,_ZTv0_n24_N9S20505C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C17__8S20505C8[] = {
  ABISELECT(-184,-116),
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI9S20505C17[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S20505C17D1Ev,_ZTv0_n12_N9S20505C17D1Ev)();
extern void ABISELECT(_ZThn120_N9S20505C17D1Ev,_ZThn72_N9S20505C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20505C17D0Ev,_ZTv0_n12_N9S20505C17D0Ev)();
extern void ABISELECT(_ZThn120_N9S20505C17D0Ev,_ZThn72_N9S20505C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20505C2__9S20505C17__8S20505C8[] = {
  ABISELECT(-160,-104),
  ABISELECT(24,12),
  0,
  ABISELECT(-120,-72),
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI9S20505C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C17D1Ev,_ZTv0_n12_N9S20505C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C17D0Ev,_ZTv0_n12_N9S20505C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20505C2D1Ev,_ZTv0_n12_N8S20505C2D1Ev)();
extern void _ZN8S20505C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20505C2D0Ev,_ZTv0_n12_N8S20505C2D0Ev)();
extern void _ZN8S20505C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20505C2__8S20505C8[] = {
  ABISELECT(-160,-104),
  ABISELECT(24,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20505C2D1Ev,_ZTv0_n12_N8S20505C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20505C2D0Ev,_ZTv0_n12_N8S20505C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__8S20505C2__8S20505C8[] = {
  ABISELECT(-184,-116),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20505C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__8S20505C8[] = {
  ABISELECT(-184,-116),
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C5[0]),
};
extern void _ZN8S20505C9D1Ev();
extern void _ZN8S20505C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20505C9__8S20505C8[] = {
  ABISELECT(56,32),
  ABISELECT(48,28),
  ABISELECT(40,24),
  ABISELECT(24,16),
  ABISELECT(-192,-120),
  ABISELECT(-8,-4),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C9[0]),
  (VTBL_ENTRY)&_ZN8S20505C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20505C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20505C9D1Ev,_ZTv0_n12_N8S20505C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20505C9D0Ev,_ZTv0_n12_N8S20505C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20505C2__8S20505C9__8S20505C8[] = {
  ABISELECT(-160,-104),
  ABISELECT(24,12),
  0,
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S20505C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20505C9D1Ev,_ZTv0_n12_N8S20505C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20505C9D0Ev,_ZTv0_n12_N8S20505C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__8S20505C9__8S20505C8[] = {
  ABISELECT(-184,-116),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20505C9[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S20505C9D1Ev,_ZTv0_n28_N8S20505C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S20505C9D1Ev,_ZThn16_N8S20505C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20505C9D0Ev,_ZTv0_n28_N8S20505C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S20505C9D0Ev,_ZThn16_N8S20505C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20505C10__8S20505C9__8S20505C8[] = {
  ABISELECT(-24,-16),
  ABISELECT(-32,-20),
  ABISELECT(-216,-136),
  ABISELECT(24,12),
  ABISELECT(16,8),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20505C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20505C9D1Ev,_ZTv0_n28_N8S20505C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20505C9D0Ev,_ZTv0_n28_N8S20505C9D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20505C9D1Ev,_ZTv0_n24_N8S20505C9D1Ev)();
extern void ABISELECT(_ZThn40_N8S20505C9D1Ev,_ZThn24_N8S20505C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20505C9D0Ev,_ZTv0_n24_N8S20505C9D0Ev)();
extern void ABISELECT(_ZThn40_N8S20505C9D0Ev,_ZThn24_N8S20505C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20505C11__8S20505C9__8S20505C8[] = {
  ABISELECT(-40,-24),
  ABISELECT(-48,-28),
  ABISELECT(-232,-144),
  ABISELECT(8,4),
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S20505C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20505C9D1Ev,_ZTv0_n24_N8S20505C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20505C9D0Ev,_ZTv0_n24_N8S20505C9D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N8S20505C9D1Ev,_ZTv0_n36_N8S20505C9D1Ev)();
extern void ABISELECT(_ZThn56_N8S20505C9D1Ev,_ZThn32_N8S20505C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20505C9D0Ev,_ZTv0_n36_N8S20505C9D0Ev)();
extern void ABISELECT(_ZThn56_N8S20505C9D0Ev,_ZThn32_N8S20505C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20505C12__8S20505C9__8S20505C8[] = {
  ABISELECT(-56,-32),
  ABISELECT(-32,-16),
  ABISELECT(-88,-48),
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-248,-152),
  ABISELECT(-64,-36),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S20505C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20505C9D1Ev,_ZTv0_n36_N8S20505C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20505C9D0Ev,_ZTv0_n36_N8S20505C9D0Ev),
};
extern void _ZN9S20505C10D1Ev();
extern void _ZN9S20505C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C10__8S20505C8[] = {
  ABISELECT(-32,-20),
  ABISELECT(-216,-136),
  ABISELECT(24,12),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
  (VTBL_ENTRY)&_ZN9S20505C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C10D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20505C10D1Ev,_ZTv0_n24_N9S20505C10D1Ev)();
extern void ABISELECT(_ZThn16_N9S20505C10D1Ev,_ZThn8_N9S20505C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20505C10D0Ev,_ZTv0_n24_N9S20505C10D0Ev)();
extern void ABISELECT(_ZThn16_N9S20505C10D0Ev,_ZThn8_N9S20505C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C10__8S20505C8[] = {
  ABISELECT(-16,-8),
  ABISELECT(-48,-28),
  ABISELECT(-232,-144),
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C10D1Ev,_ZTv0_n24_N9S20505C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C10D0Ev,_ZTv0_n24_N9S20505C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C10__8S20505C8[] = {
  ABISELECT(-184,-116),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
};
extern void _ZN9S20505C11D1Ev();
extern void _ZN9S20505C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C11__8S20505C8[] = {
  ABISELECT(-48,-28),
  ABISELECT(-232,-144),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C11[0]),
  (VTBL_ENTRY)&_ZN9S20505C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C11__8S20505C8[] = {
  ABISELECT(-184,-116),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI9S20505C11[0]),
};
extern void _ZN9S20505C12D1Ev();
extern void _ZN9S20505C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C12__8S20505C8[] = {
  ABISELECT(-32,-16),
  ABISELECT(-88,-48),
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-248,-152),
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
  (VTBL_ENTRY)&_ZN9S20505C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C12D0Ev,
};
extern void _ZN9S20505C13D1Ev();
extern void _ZN9S20505C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C139S20505C12__8S20505C8[] = {
  ABISELECT(-88,-48),
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-248,-152),
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
  (VTBL_ENTRY)&_ZN9S20505C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C139S20505C12__8S20505C8[] = {
  ABISELECT(-184,-116),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20505C13D1Ev,_ZTv0_n24_N9S20505C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20505C13D0Ev,_ZTv0_n24_N9S20505C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C139S20505C12__8S20505C8[] = {
  ABISELECT(16,8),
  ABISELECT(-48,-28),
  ABISELECT(-232,-144),
  ABISELECT(8,4),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C13D1Ev,_ZTv0_n24_N9S20505C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C13D0Ev,_ZTv0_n24_N9S20505C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20505C13D1Ev,_ZTv0_n12_N9S20505C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20505C13D0Ev,_ZTv0_n12_N9S20505C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20505C3__A2__9S20505C139S20505C12__8S20505C8[] = {
  ABISELECT(88,48),
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C13D1Ev,_ZTv0_n12_N9S20505C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C13D0Ev,_ZTv0_n12_N9S20505C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20505C12D1Ev,_ZTv0_n24_N9S20505C12D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20505C12D0Ev,_ZTv0_n24_N9S20505C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C12__8S20505C8[] = {
  ABISELECT(16,8),
  ABISELECT(-48,-28),
  ABISELECT(-232,-144),
  ABISELECT(8,4),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C12D1Ev,_ZTv0_n24_N9S20505C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C12D0Ev,_ZTv0_n24_N9S20505C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C12__8S20505C8[] = {
  ABISELECT(-184,-116),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S20505C12D1Ev,_ZTv0_n12_N9S20505C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20505C12D0Ev,_ZTv0_n12_N9S20505C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20505C3__A2__9S20505C12__8S20505C8[] = {
  ABISELECT(88,48),
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C12D1Ev,_ZTv0_n12_N9S20505C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C12D0Ev,_ZTv0_n12_N9S20505C12D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N9S20505C12D1Ev,_ZTv0_n28_N9S20505C12D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20505C12D0Ev,_ZTv0_n28_N9S20505C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20505C10__9S20505C12__8S20505C8[] = {
  ABISELECT(32,16),
  ABISELECT(-32,-20),
  ABISELECT(-216,-136),
  ABISELECT(24,12),
  ABISELECT(16,8),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20505C12D1Ev,_ZTv0_n28_N9S20505C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20505C12D0Ev,_ZTv0_n28_N9S20505C12D0Ev),
};
static  VTT_ENTRY vtt_S20505C8[] = {
  {&(_ZTV8S20505C8[11]),  11,79},
  {&(_tg__ZTV9S20505C12__A__8S20505C8[8]),  8,10},
  {&(_tg__ZTV9S20505C139S20505C12__A1__8S20505C8[7]),  7,9},
  {&(_tg__ZTV8S20505C5__9S20505C139S20505C12__A1__8S20505C8[3]),  3,3},
  {&(_tg__ZTV9S20505C11__9S20505C139S20505C12__A1__8S20505C8[6]),  6,8},
  {&(_tg__ZTV8S20505C3__A2__9S20505C139S20505C12__A1__8S20505C8[3]),  3,5},
  {&(_tg__ZTV9S20505C11__9S20505C12__A__8S20505C8[6]),  6,8},
  {&(_tg__ZTV8S20505C5__9S20505C12__A__8S20505C8[3]),  3,3},
  {&(_tg__ZTV8S20505C3__A2__9S20505C12__A__8S20505C8[3]),  3,5},
  {&(_tg__ZTV9S20505C10__9S20505C12__A__8S20505C8[7]),  7,9},
  {&(_tg__ZTV9S20505C17__8S20505C8[8]),  8,10},
  {&(_tg__ZTV9S20505C109S20505C17__A1__8S20505C8[6]),  6,8},
  {&(_tg__ZTV9S20505C11__9S20505C109S20505C17__A1__8S20505C8[6]),  6,8},
  {&(_tg__ZTV8S20505C5__9S20505C109S20505C17__A1__8S20505C8[3]),  3,3},
  {&(_tg__ZTV9S20505C11__9S20505C17__8S20505C8[6]),  6,8},
  {&(_tg__ZTV8S20505C5__9S20505C17__8S20505C8[3]),  3,3},
  {&(_tg__ZTV8S20505C2__9S20505C17__8S20505C8[6]),  6,8},
  {&(_tg__ZTV8S20505C2__9S20505C17__8S20505C8[6]),  6,8},
  {&(_ZTV8S20505C8[33]),  33,79},
  {&(_ZTV8S20505C8[33]),  33,79},
  {&(_ZTV8S20505C8[38]),  38,79},
  {&(_ZTV8S20505C8[49]),  49,79},
  {&(_ZTV8S20505C8[58]),  58,79},
  {&(_ZTV8S20505C8[66]),  66,79},
  {&(_ZTV8S20505C8[77]),  77,79},
  {&(_ZTV8S20505C8[21]),  21,79},
  {&(_tg__ZTV8S20505C2__8S20505C8[6]),  6,8},
  {&(_tg__ZTV8S20505C2__8S20505C8[6]),  6,8},
  {&(_tg__ZTV8S20505C5__8S20505C2__8S20505C8[3]),  3,3},
  {&(_tg__ZTV8S20505C5__8S20505C8[3]),  3,3},
  {&(_tg__ZTV8S20505C9__8S20505C8[10]),  10,12},
  {&(_tg__ZTV8S20505C2__8S20505C9__8S20505C8[6]),  6,8},
  {&(_tg__ZTV8S20505C2__8S20505C9__8S20505C8[6]),  6,8},
  {&(_tg__ZTV8S20505C5__8S20505C9__8S20505C8[3]),  3,3},
  {&(_tg__ZTV9S20505C10__8S20505C9__8S20505C8[7]),  7,9},
  {&(_tg__ZTV9S20505C11__8S20505C9__8S20505C8[6]),  6,8},
  {&(_tg__ZTV9S20505C12__8S20505C9__8S20505C8[9]),  9,11},
  {&(_tg__ZTV9S20505C10__8S20505C8[6]),  6,8},
  {&(_tg__ZTV9S20505C11__9S20505C10__8S20505C8[6]),  6,8},
  {&(_tg__ZTV8S20505C5__9S20505C10__8S20505C8[3]),  3,3},
  {&(_tg__ZTV9S20505C11__8S20505C8[5]),  5,7},
  {&(_tg__ZTV8S20505C5__9S20505C11__8S20505C8[3]),  3,3},
  {&(_tg__ZTV9S20505C12__8S20505C8[8]),  8,10},
  {&(_tg__ZTV9S20505C139S20505C12__8S20505C8[7]),  7,9},
  {&(_tg__ZTV8S20505C5__9S20505C139S20505C12__8S20505C8[3]),  3,3},
  {&(_tg__ZTV9S20505C11__9S20505C139S20505C12__8S20505C8[6]),  6,8},
  {&(_tg__ZTV8S20505C3__A2__9S20505C139S20505C12__8S20505C8[3]),  3,5},
  {&(_tg__ZTV9S20505C11__9S20505C12__8S20505C8[6]),  6,8},
  {&(_tg__ZTV8S20505C5__9S20505C12__8S20505C8[3]),  3,3},
  {&(_tg__ZTV8S20505C3__A2__9S20505C12__8S20505C8[3]),  3,5},
  {&(_tg__ZTV9S20505C10__9S20505C12__8S20505C8[7]),  7,9},
};
extern VTBL_ENTRY _ZTI8S20505C8[];
extern  VTBL_ENTRY _ZTV8S20505C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20505C8[];
static VTBL_ENTRY alt_thunk_names106[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20505C9D0Ev,_ZTv0_n36_N8S20505C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20505C9D0Ev,_ZThn32_N8S20505C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20505C9D1Ev,_ZTv0_n36_N8S20505C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S20505C9D1Ev,_ZThn32_N8S20505C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20505C9D0Ev,_ZTv0_n24_N8S20505C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20505C9D0Ev,_ZThn24_N8S20505C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20505C9D1Ev,_ZTv0_n24_N8S20505C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20505C9D1Ev,_ZThn24_N8S20505C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20505C9D0Ev,_ZTv0_n28_N8S20505C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20505C9D0Ev,_ZThn16_N8S20505C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20505C9D1Ev,_ZTv0_n28_N8S20505C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20505C9D1Ev,_ZThn16_N8S20505C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20505C2D0Ev,_ZTv0_n12_N8S20505C2D0Ev), // 
  (VTBL_ENTRY)_ZN8S20505C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20505C2D1Ev,_ZTv0_n12_N8S20505C2D1Ev), // 
  (VTBL_ENTRY)_ZN8S20505C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C17D0Ev,_ZTv0_n12_N9S20505C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S20505C17D0Ev,_ZThn72_N9S20505C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C17D1Ev,_ZTv0_n12_N9S20505C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S20505C17D1Ev,_ZThn72_N9S20505C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C17D0Ev,_ZTv0_n24_N9S20505C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20505C17D0Ev,_ZThn112_N9S20505C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C17D1Ev,_ZTv0_n24_N9S20505C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20505C17D1Ev,_ZThn112_N9S20505C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C10D0Ev,_ZTv0_n24_N9S20505C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20505C10D0Ev,_ZThn8_N9S20505C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20505C10D0Ev,_ZThn112_N9S20505C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C10D1Ev,_ZTv0_n24_N9S20505C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20505C10D1Ev,_ZThn8_N9S20505C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn192_N9S20505C10D1Ev,_ZThn112_N9S20505C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20505C12D0Ev,_ZTv0_n28_N9S20505C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S20505C12D0Ev,_ZThn136_N9S20505C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20505C12D1Ev,_ZTv0_n28_N9S20505C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S20505C12D1Ev,_ZThn136_N9S20505C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C12D0Ev,_ZTv0_n12_N9S20505C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20505C12D0Ev,_ZThn104_N9S20505C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C12D1Ev,_ZTv0_n12_N9S20505C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20505C12D1Ev,_ZThn104_N9S20505C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C12D0Ev,_ZTv0_n24_N9S20505C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S20505C12D0Ev,_ZThn144_N9S20505C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C12D1Ev,_ZTv0_n24_N9S20505C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S20505C12D1Ev,_ZThn144_N9S20505C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C13D0Ev,_ZTv0_n12_N9S20505C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20505C13D0Ev,_ZThn104_N9S20505C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C13D1Ev,_ZTv0_n12_N9S20505C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N9S20505C13D1Ev,_ZThn104_N9S20505C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C13D0Ev,_ZTv0_n24_N9S20505C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S20505C13D0Ev,_ZThn144_N9S20505C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C13D1Ev,_ZTv0_n24_N9S20505C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S20505C13D1Ev,_ZThn144_N9S20505C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20505C8D0Ev,_ZTv0_n36_N8S20505C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S20505C8D0Ev,_ZThn152_N8S20505C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20505C8D1Ev,_ZTv0_n36_N8S20505C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S20505C8D1Ev,_ZThn152_N8S20505C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20505C8D0Ev,_ZTv0_n24_N8S20505C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S20505C8D0Ev,_ZThn144_N8S20505C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20505C8D1Ev,_ZTv0_n24_N8S20505C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N8S20505C8D1Ev,_ZThn144_N8S20505C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20505C8D0Ev,_ZTv0_n28_N8S20505C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S20505C8D0Ev,_ZThn136_N8S20505C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20505C8D1Ev,_ZTv0_n28_N8S20505C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S20505C8D1Ev,_ZThn136_N8S20505C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20505C8D0Ev,_ZTv0_n44_N8S20505C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20505C8D0Ev,_ZThn120_N8S20505C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20505C8D1Ev,_ZTv0_n44_N8S20505C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20505C8D1Ev,_ZThn120_N8S20505C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20505C8D0Ev,_ZTv0_n12_N8S20505C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S20505C8D0Ev,_ZThn104_N8S20505C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20505C8D1Ev,_ZTv0_n12_N8S20505C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S20505C8D1Ev,_ZThn104_N8S20505C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20505C8 = {  "S20505C8", // class name
  bases_S20505C8, 37,
  &(vtc_S20505C8[0]), // expected_vtbl_contents
  &(vtt_S20505C8[0]), // expected_vtt_contents
  ABISELECT(288,180), // object size
  NSPAIRA(_ZTI8S20505C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20505C8),79, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20505C8),51, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names106,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20505C19  {
  int  :0;
  int s20505c19f1:32;
  int s20505c19f2;
  void *s20505c19f3;
  long double s20505c19f4;
  void  mf20505c19(); // _ZN9S20505C1910mf20505c19Ev
};
//SIG(-1 S20505C19) C1{ m Fi:0 Fi:32 Fi Fp FD}


void  S20505C19 ::mf20505c19(){}

static void Test_S20505C19()
{
  {
    init_simple_test("S20505C19");
    static S20505C19 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S20505C19)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20505C19)");
    set_bf_and_test(lv, s20505c19f1, 0, 0, 32, 1, "S20505C19");
    set_bf_and_test(lv, s20505c19f1, 0, 0, 32, hide_sll(1LL<<31), "S20505C19");
    check_field_offset(lv, s20505c19f2, 4, "S20505C19.s20505c19f2");
    check_field_offset(lv, s20505c19f3, 8, "S20505C19.s20505c19f3");
    check_field_offset(lv, s20505c19f4, ABISELECT(16,12), "S20505C19.s20505c19f4");
  }
}
static Arrange_To_Call_Me vS20505C19(Test_S20505C19, "S20505C19", ABISELECT(32,24));

#else // __cplusplus

extern VTBL_ENTRY _ZTI9S20505C19[];
VTBL_ENTRY *P__ZTI9S20505C19 = _ZTI9S20505C19; 
Class_Descriptor cd_S20505C19 = {  "S20505C19", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI9S20505C19),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  S20505C21  : virtual S2264C28 , virtual S20505C11 , virtual S20505C3 {
  virtual  ~S20505C21(); // _ZN9S20505C21D2Ev
  S20505C21(); // tgen
};
//SIG(-1 S20505C21) C1{ VBC2{ m} VBC3{ VBC4{ m} VBC2 VBC5{ BC4 VBC2} BC6{ BC4 vd} vd} VBC6 vd}


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

static void Test_S20505C21()
{
  extern Class_Descriptor cd_S20505C21;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20505C21, buf);
    S20505C21 *dp, &lv = *(dp=new (buf) S20505C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20505C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20505C21)");
    check_base_class_offset(lv, (S2264C28*), 0, "S20505C21");
    check_base_class_offset(lv, (S2264C28*)(S20505C11*), 0, "S20505C21");
    check_base_class_offset(lv, (S2264C28*)(S20505C5*), 0, "S20505C21");
    /*is_ambiguous_... S20505C11::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C11*), ABISELECT(8,4), "S20505C21");
    check_base_class_offset(lv, (S2264C38*)(S20505C5*), ABISELECT(16,8), "S20505C21");
    check_base_class_offset(lv, (S20505C5*)(S20505C11*), ABISELECT(16,8), "S20505C21");
    check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C11*), 0, "S20505C21");
    check_base_class_offset(lv, (S20505C3*)(S20505C11*), 0, "S20505C21");
    check_base_class_offset(lv, (S20505C11*), 0, "S20505C21");
    /*is_ambiguous_... S20505C21::S20505C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*), ABISELECT(24,12), "S20505C21");
    /*is_ambiguous_... S20505C21::S20505C3 */ AMB_check_base_class_offset(lv, (S20505C3*), ABISELECT(24,12), "S20505C21");
    test_class_info(&lv, &cd_S20505C21);
    dp->~S20505C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20505C21(Test_S20505C21, "S20505C21", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S20505C21C1Ev();
extern void _ZN9S20505C21D2Ev();
Name_Map name_map_S20505C21[] = {
  NSPAIR(_ZN9S20505C21C1Ev),
  NSPAIR(_ZN9S20505C21D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C5;
extern VTBL_ENTRY _ZTI8S20505C5[];
extern  VTBL_ENTRY _ZTV8S20505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20505C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C11;
extern VTBL_ENTRY _ZTI9S20505C11[];
extern  VTBL_ENTRY _ZTV9S20505C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C11[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
static Base_Class bases_S20505C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C38,    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
    6, //immediately_derived
  0, 1},
  {&cd_S2264C38,    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_S20505C5,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20505C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S20505C11,    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},
  {&cd_S2264C38,    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_S20505C3,    ABISELECT(24,12), //bcp->offset
    13, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20505C21[];
extern void _ZN9S20505C21D1Ev();
extern void _ZN9S20505C21D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S20505C21D1Ev,_ZTv0_n12_N9S20505C21D1Ev)();
extern void ABISELECT(_ZThn24_N9S20505C21D1Ev,_ZThn12_N9S20505C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20505C21D0Ev,_ZTv0_n12_N9S20505C21D0Ev)();
extern void ABISELECT(_ZThn24_N9S20505C21D0Ev,_ZThn12_N9S20505C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20505C21[] = {
  ABISELECT(24,12),
  0,
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C21[0]),
  (VTBL_ENTRY)&_ZN9S20505C21D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C21D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20505C21[0]),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20505C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C21D1Ev,_ZTv0_n12_N9S20505C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C21D0Ev,_ZTv0_n12_N9S20505C21D0Ev),
};
extern VTBL_ENTRY _ZTV9S20505C21[];
extern void _ZN9S20505C11D1Ev();
extern void _ZN9S20505C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C21[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C11[0]),
  (VTBL_ENTRY)&_ZN9S20505C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C11__9S20505C21[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20505C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C21[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C5[0]),
};
static  VTT_ENTRY vtt_S20505C21[] = {
  {&(_ZTV9S20505C21[8]),  8,18},
  {&(_ZTV9S20505C21[8]),  8,18},
  {&(_ZTV9S20505C21[13]),  13,18},
  {&(_ZTV9S20505C21[16]),  16,18},
  {&(_tg__ZTV9S20505C11__9S20505C21[5]),  5,7},
  {&(_tg__ZTV8S20505C5__9S20505C11__9S20505C21[3]),  3,3},
  {&(_tg__ZTV8S20505C5__9S20505C21[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20505C21[];
extern  VTBL_ENTRY _ZTV9S20505C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C21[];
static VTBL_ENTRY alt_thunk_names107[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C21D0Ev,_ZTv0_n12_N9S20505C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20505C21D0Ev,_ZThn12_N9S20505C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C21D1Ev,_ZTv0_n12_N9S20505C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20505C21D1Ev,_ZThn12_N9S20505C21D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20505C21 = {  "S20505C21", // class name
  bases_S20505C21, 9,
  &(vtc_S20505C21[0]), // expected_vtbl_contents
  &(vtt_S20505C21[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S20505C21),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20505C21),18, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20505C21),7, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names107,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20505C20  : S20505C21 , virtual S20505C17 {
  long s20505c20f0;
  int s20505c20f1;
  void *s20505c20f2;
  ~S20505C20(); // tgen
  S20505C20(); // tgen
};
//SIG(-1 S20505C20) C1{ BC2{ VBC3{ m} VBC4{ VBC5{ m} VBC3 VBC6{ BC5 VBC3} BC7{ BC5 vd} vd} VBC7 vd} VBC8{ BC9{ VBC4 BC7 Fp} BC7 VBC10{ VBC7 VBC6 vd Fp FC11{}} vd FC12{ VBC6 BC4 VBC7 VBC13{ BC14{ BC7 vd} VBC6 VBC4 VBC7 BC5 vd FC5 FL[2]} BC3}} Fl Fi Fp}


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

static void Test_S20505C20()
{
  extern Class_Descriptor cd_S20505C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(22,24)];
    init_test(&cd_S20505C20, buf);
    S20505C20 *dp, &lv = *(dp=new (buf) S20505C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(168,92), "sizeof(S20505C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20505C20)");
    check_base_class_offset(lv, (S2264C28*)(S20505C21*), 0, "S20505C20");
    check_base_class_offset(lv, (S2264C28*)(S20505C11*), 0, "S20505C20");
    check_base_class_offset(lv, (S2264C28*)(S20505C5*), 0, "S20505C20");
    /*is_ambiguous_... S20505C11::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C11*), ABISELECT(32,16), "S20505C20");
    check_base_class_offset(lv, (S2264C38*)(S20505C5*), ABISELECT(40,20), "S20505C20");
    check_base_class_offset(lv, (S20505C5*)(S20505C11*), ABISELECT(40,20), "S20505C20");
    check_base_class_offset(lv, (S20505C5*)(S20505C2*), ABISELECT(40,20), "S20505C20");
    check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C11*), 0, "S20505C20");
    check_base_class_offset(lv, (S20505C3*)(S20505C11*), 0, "S20505C20");
    check_base_class_offset(lv, (S20505C11*)(S20505C21*), 0, "S20505C20");
    check_base_class_offset(lv, (S20505C11*)(S20505C10*)(S20505C17*), 0, "S20505C20");
    /*is_ambiguous_... S20505C20::S20505C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*), ABISELECT(144,80), "S20505C20");
    /*is_ambiguous_... S20505C21::S20505C3 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C21*), ABISELECT(144,80), "S20505C20");
    check_base_class_offset(lv, (S20505C3*)(S20505C2*), ABISELECT(144,80), "S20505C20");
    check_base_class_offset(lv, (S20505C21*), 0, "S20505C20");
    /*is_ambiguous_... S20505C10::S20505C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C10*)(S20505C17*), ABISELECT(48,24), "S20505C20");
    /*is_ambiguous_... S20505C10::S20505C3 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C10*)(S20505C17*), ABISELECT(48,24), "S20505C20");
    check_base_class_offset(lv, (S20505C10*)(S20505C17*), ABISELECT(48,24), "S20505C20");
    /*is_ambiguous_... S20505C17::S20505C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C17*), ABISELECT(64,32), "S20505C20");
    /*is_ambiguous_... S20505C17::S20505C3 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C17*), ABISELECT(64,32), "S20505C20");
    check_base_class_offset(lv, (S20505C2*)(S20505C17*), ABISELECT(144,80), "S20505C20");
    check_base_class_offset(lv, (S20505C17*), ABISELECT(48,24), "S20505C20");
    check_field_offset(lv, s20505c20f0, ABISELECT(8,4), "S20505C20.s20505c20f0");
    check_field_offset(lv, s20505c20f1, ABISELECT(16,8), "S20505C20.s20505c20f1");
    check_field_offset(lv, s20505c20f2, ABISELECT(24,12), "S20505C20.s20505c20f2");
    test_class_info(&lv, &cd_S20505C20);
    dp->~S20505C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20505C20(Test_S20505C20, "S20505C20", ABISELECT(168,92));

#else // __cplusplus

extern void _ZN9S20505C20C1Ev();
extern void _ZN9S20505C20D1Ev();
Name_Map name_map_S20505C20[] = {
  NSPAIR(_ZN9S20505C20C1Ev),
  NSPAIR(_ZN9S20505C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C5;
extern VTBL_ENTRY _ZTI8S20505C5[];
extern  VTBL_ENTRY _ZTV8S20505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20505C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C11;
extern VTBL_ENTRY _ZTI9S20505C11[];
extern  VTBL_ENTRY _ZTV9S20505C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C11[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C21;
extern VTBL_ENTRY _ZTI9S20505C21[];
extern  VTBL_ENTRY _ZTV9S20505C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C21[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C10;
extern VTBL_ENTRY _ZTI9S20505C10[];
extern  VTBL_ENTRY _ZTV9S20505C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C10[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C2;
extern VTBL_ENTRY _ZTI8S20505C2[];
extern  VTBL_ENTRY _ZTV8S20505C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20505C2[];
extern Class_Descriptor cd_S20505C17;
extern VTBL_ENTRY _ZTI9S20505C17[];
extern  VTBL_ENTRY _ZTV9S20505C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C17[];
static Base_Class bases_S20505C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    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, 1},
  {&cd_S2264C38,    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
    3, //immediately_derived
  0, 0},
  {&cd_S20505C5,    ABISELECT(40,20), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20505C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S20505C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S2264C38,    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
    8, //immediately_derived
  0, 0},
  {&cd_S20505C3,    ABISELECT(144,80), //bcp->offset
    -1, //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
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20505C21,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C38,    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, 0},
  {&cd_S20505C3,    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
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20505C10,    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
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    14, //immediately_derived
  0, 0},
  {&cd_S20505C3,    ABISELECT(64,32), //bcp->offset
    26, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20505C2,    ABISELECT(144,80), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S20505C17,    ABISELECT(48,24), //bcp->offset
    15, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20505C20[];
extern void _ZN9S20505C20D1Ev();
extern void _ZN9S20505C20D0Ev();
extern void ABISELECT(_ZTv0_n72_N9S20505C20D1Ev,_ZTv0_n36_N9S20505C20D1Ev)();
extern void ABISELECT(_ZThn48_N9S20505C20D1Ev,_ZThn24_N9S20505C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20505C20D0Ev,_ZTv0_n36_N9S20505C20D0Ev)();
extern void ABISELECT(_ZThn48_N9S20505C20D0Ev,_ZThn24_N9S20505C20D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n72_N9S20505C20D1Ev,_ZTvn8_n36_N9S20505C20D1Ev)();
extern void ABISELECT(_ZTvn16_n72_N9S20505C20D0Ev,_ZTvn8_n36_N9S20505C20D0Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20505C20D1Ev,_ZTv0_n12_N9S20505C20D1Ev)();
extern void ABISELECT(_ZThn144_N9S20505C20D1Ev,_ZThn80_N9S20505C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20505C20D0Ev,_ZTv0_n12_N9S20505C20D0Ev)();
extern void ABISELECT(_ZThn144_N9S20505C20D0Ev,_ZThn80_N9S20505C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20505C20[] = {
  ABISELECT(144,80),
  ABISELECT(48,24),
  ABISELECT(144,80),
  0,
  0,
  ABISELECT(40,20),
  0,
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C20[0]),
  (VTBL_ENTRY)&_ZN9S20505C20D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C20D0Ev,
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20505C20[0]),
  ABISELECT(-48,-24),
  ABISELECT(96,56),
  ABISELECT(96,56),
  ABISELECT(-8,-4),
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S20505C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20505C20D1Ev,_ZTv0_n36_N9S20505C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20505C20D0Ev,_ZTv0_n36_N9S20505C20D0Ev),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S20505C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n72_N9S20505C20D1Ev,_ZTvn8_n36_N9S20505C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n72_N9S20505C20D0Ev,_ZTvn8_n36_N9S20505C20D0Ev),
  ABISELECT(-144,-80),
  ABISELECT(-104,-60),
  0,
  ABISELECT(-144,-80),
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI9S20505C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C20D1Ev,_ZTv0_n12_N9S20505C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C20D0Ev,_ZTv0_n12_N9S20505C20D0Ev),
};
extern VTBL_ENTRY _ZTV9S20505C20[];
extern void _ZN9S20505C21D1Ev();
extern void _ZN9S20505C21D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C21__9S20505C20[] = {
  ABISELECT(144,80),
  0,
  0,
  ABISELECT(40,20),
  0,
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C21[0]),
  (VTBL_ENTRY)&_ZN9S20505C21D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C21D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C21__9S20505C20[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20505C21[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S20505C21D1Ev,_ZTv0_n12_N9S20505C21D1Ev)();
extern void ABISELECT(_ZThn144_N9S20505C21D1Ev,_ZThn80_N9S20505C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20505C21D0Ev,_ZTv0_n12_N9S20505C21D0Ev)();
extern void ABISELECT(_ZThn144_N9S20505C21D0Ev,_ZThn80_N9S20505C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20505C3__A1__9S20505C21__9S20505C20[] = {
  ABISELECT(-144,-80),
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI9S20505C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C21D1Ev,_ZTv0_n12_N9S20505C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C21D0Ev,_ZTv0_n12_N9S20505C21D0Ev),
};
extern void _ZN9S20505C11D1Ev();
extern void _ZN9S20505C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C20[] = {
  ABISELECT(40,20),
  0,
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C11[0]),
  (VTBL_ENTRY)&_ZN9S20505C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C11__9S20505C20[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20505C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C20[] = {
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C5[0]),
};
extern void _ZN9S20505C17D1Ev();
extern void _ZN9S20505C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C17__9S20505C20[] = {
  ABISELECT(96,56),
  ABISELECT(96,56),
  ABISELECT(-8,-4),
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C17[0]),
  (VTBL_ENTRY)&_ZN9S20505C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C17D0Ev,
};
extern void _ZN9S20505C10D1Ev();
extern void _ZN9S20505C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C109S20505C17__9S20505C20[] = {
  ABISELECT(-8,-4),
  ABISELECT(-48,-24),
  ABISELECT(-16,-8),
  ABISELECT(-48,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
  (VTBL_ENTRY)&_ZN9S20505C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C10D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20505C10D1Ev,_ZTv0_n24_N9S20505C10D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20505C10D0Ev,_ZTv0_n24_N9S20505C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C109S20505C17__9S20505C20[] = {
  ABISELECT(48,24),
  ABISELECT(40,20),
  0,
  ABISELECT(32,16),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C10D1Ev,_ZTv0_n24_N9S20505C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C10D0Ev,_ZTv0_n24_N9S20505C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C109S20505C17__9S20505C20[] = {
  ABISELECT(-40,-20),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20505C17D1Ev,_ZTv0_n24_N9S20505C17D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20505C17D0Ev,_ZTv0_n24_N9S20505C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C17__9S20505C20[] = {
  ABISELECT(48,24),
  ABISELECT(40,20),
  0,
  ABISELECT(32,16),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI9S20505C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C17D1Ev,_ZTv0_n24_N9S20505C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C17D0Ev,_ZTv0_n24_N9S20505C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C17__9S20505C20[] = {
  ABISELECT(-40,-20),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20505C17[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S20505C17D1Ev,_ZTv0_n12_N9S20505C17D1Ev)();
extern void ABISELECT(_ZThn96_N9S20505C17D1Ev,_ZThn56_N9S20505C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20505C17D0Ev,_ZTv0_n12_N9S20505C17D0Ev)();
extern void ABISELECT(_ZThn96_N9S20505C17D0Ev,_ZThn56_N9S20505C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20505C2__9S20505C17__9S20505C20[] = {
  ABISELECT(-144,-80),
  ABISELECT(-104,-60),
  0,
  ABISELECT(-96,-56),
  ABISELECT(-96,-56),
  (VTBL_ENTRY)&(_ZTI9S20505C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C17D1Ev,_ZTv0_n12_N9S20505C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C17D0Ev,_ZTv0_n12_N9S20505C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20505C2D1Ev,_ZTv0_n12_N8S20505C2D1Ev)();
extern void _ZN8S20505C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20505C2D0Ev,_ZTv0_n12_N8S20505C2D0Ev)();
extern void _ZN8S20505C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20505C2__9S20505C20[] = {
  ABISELECT(-144,-80),
  ABISELECT(-104,-60),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20505C2D1Ev,_ZTv0_n12_N8S20505C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20505C2D0Ev,_ZTv0_n12_N8S20505C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__8S20505C2__9S20505C20[] = {
  ABISELECT(-40,-20),
  ABISELECT(104,60),
  (VTBL_ENTRY)&(_ZTI8S20505C2[0]),
};
static  VTT_ENTRY vtt_S20505C20[] = {
  {&(_ZTV9S20505C20[10]),  10,38},
  {&(_tg__ZTV9S20505C21__9S20505C20[8]),  8,10},
  {&(_tg__ZTV9S20505C21__9S20505C20[8]),  8,10},
  {&(_tg__ZTV8S20505C5__9S20505C21__9S20505C20[3]),  3,3},
  {&(_tg__ZTV8S20505C3__A1__9S20505C21__9S20505C20[3]),  3,5},
  {&(_ZTV9S20505C20[10]),  10,38},
  {&(_ZTV9S20505C20[15]),  15,38},
  {&(_ZTV9S20505C20[36]),  36,38},
  {&(_ZTV9S20505C20[24]),  24,38},
  {&(_ZTV9S20505C20[28]),  28,38},
  {&(_ZTV9S20505C20[36]),  36,38},
  {&(_tg__ZTV9S20505C11__9S20505C20[5]),  5,7},
  {&(_tg__ZTV8S20505C5__9S20505C11__9S20505C20[3]),  3,3},
  {&(_tg__ZTV8S20505C5__9S20505C20[3]),  3,3},
  {&(_tg__ZTV9S20505C17__9S20505C20[8]),  8,10},
  {&(_tg__ZTV9S20505C109S20505C17__9S20505C20[6]),  6,8},
  {&(_tg__ZTV9S20505C11__9S20505C109S20505C17__9S20505C20[6]),  6,8},
  {&(_tg__ZTV8S20505C5__9S20505C109S20505C17__9S20505C20[3]),  3,3},
  {&(_tg__ZTV9S20505C11__9S20505C17__9S20505C20[6]),  6,8},
  {&(_tg__ZTV8S20505C5__9S20505C17__9S20505C20[3]),  3,3},
  {&(_tg__ZTV8S20505C2__9S20505C17__9S20505C20[6]),  6,8},
  {&(_tg__ZTV8S20505C2__9S20505C17__9S20505C20[6]),  6,8},
  {&(_tg__ZTV8S20505C2__9S20505C20[6]),  6,8},
  {&(_tg__ZTV8S20505C2__9S20505C20[6]),  6,8},
  {&(_tg__ZTV8S20505C5__8S20505C2__9S20505C20[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20505C20[];
extern  VTBL_ENTRY _ZTV9S20505C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C20[];
static VTBL_ENTRY alt_thunk_names108[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20505C2D0Ev,_ZTv0_n12_N8S20505C2D0Ev), // 
  (VTBL_ENTRY)_ZN8S20505C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20505C2D1Ev,_ZTv0_n12_N8S20505C2D1Ev), // 
  (VTBL_ENTRY)_ZN8S20505C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C17D0Ev,_ZTv0_n12_N9S20505C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20505C17D0Ev,_ZThn56_N9S20505C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C17D1Ev,_ZTv0_n12_N9S20505C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N9S20505C17D1Ev,_ZThn56_N9S20505C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C21D0Ev,_ZTv0_n12_N9S20505C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20505C21D0Ev,_ZThn80_N9S20505C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C21D1Ev,_ZTv0_n12_N9S20505C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20505C21D1Ev,_ZThn80_N9S20505C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C20D0Ev,_ZTv0_n12_N9S20505C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20505C20D0Ev,_ZThn80_N9S20505C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C20D1Ev,_ZTv0_n12_N9S20505C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N9S20505C20D1Ev,_ZThn80_N9S20505C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20505C20D0Ev,_ZTv0_n36_N9S20505C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20505C20D0Ev,_ZThn24_N9S20505C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20505C20D1Ev,_ZTv0_n36_N9S20505C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20505C20D1Ev,_ZThn24_N9S20505C20D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20505C20 = {  "S20505C20", // class name
  bases_S20505C20, 17,
  &(vtc_S20505C20[0]), // expected_vtbl_contents
  &(vtt_S20505C20[0]), // expected_vtt_contents
  ABISELECT(168,92), // object size
  NSPAIRA(_ZTI9S20505C20),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20505C20),38, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20505C20),25, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names108,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20505C1  : virtual S20505C2 , virtual S20505C8 , virtual S20505C19 , S20505C20 , virtual S2264C24 {
  virtual  ~S20505C1(); // _ZN8S20505C1D2Ev
  S20505C1(); // tgen
};
//SIG(1 S20505C1) C1{ VBC2{ VBC3{ BC4{ m} vd} VBC5{ BC4 VBC6{ m}} vd Fp FC7{}} VBC8{ VBC2 VBC9{ VBC2 VBC10{ VBC11{ VBC4 VBC6 VBC5 BC3 vd} BC3 Fp} VBC12{ BC4 VBC11 BC13{ BC14{ BC3 vd} VBC5 VBC11 VBC3 BC4 vd FC4 FL[2]} VBC10} BC3 Fc[3] Fi[2]} BC15{ m FC16{ m Fi}} BC12 BC17{ BC10 BC3 VBC2 vd FC18{ VBC5 BC11 VBC3 VBC13 BC6}} Fi FL Fc} VBC19{ m Fi:0 Fi:32 Fi Fp FD} BC20{ BC21{ VBC6 VBC11 VBC3 vd} VBC17 Fl Fi Fp} VBC22{ m} vd}


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

static void Test_S20505C1()
{
  extern Class_Descriptor cd_S20505C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(29,69)];
    init_test(&cd_S20505C1, buf);
    S20505C1 *dp, &lv = *(dp=new (buf) S20505C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(448,272), "sizeof(S20505C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20505C1)");
    /*is_ambiguous_... S20505C1::S20505C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*), ABISELECT(32,16), "S20505C1");
    check_base_class_offset(lv, (S20505C3*)(S20505C2*), ABISELECT(32,16), "S20505C1");
    /*is_ambiguous_... S20505C1::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C13*)(S20505C12*), ABISELECT(32,16), "S20505C1");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C13*)(S20505C12*)(S20505C8*), ABISELECT(32,16), "S20505C1");
    /*is_ambiguous_... S20505C21::S20505C3 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C21*)(S20505C20*), ABISELECT(32,16), "S20505C1");
    check_base_class_offset(lv, (S2264C38*)(S20505C5*), ABISELECT(56,28), "S20505C1");
    check_base_class_offset(lv, (S2264C28*)(S20505C5*), 0, "S20505C1");
    check_base_class_offset(lv, (S2264C28*)(S20505C11*), 0, "S20505C1");
    check_base_class_offset(lv, (S2264C28*)(S20505C21*)(S20505C20*), 0, "S20505C1");
    check_base_class_offset(lv, (S20505C5*)(S20505C2*), ABISELECT(56,28), "S20505C1");
    check_base_class_offset(lv, (S20505C5*)(S20505C11*), ABISELECT(56,28), "S20505C1");
    /*is_ambiguous_... S20505C1::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C5*)(S20505C13*)(S20505C12*), ABISELECT(56,28), "S20505C1");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C5*)(S20505C13*)(S20505C12*)(S20505C8*), ABISELECT(56,28), "S20505C1");
    check_base_class_offset(lv, (S20505C2*), ABISELECT(32,16), "S20505C1");
    check_base_class_offset(lv, (S20505C2*)(S20505C8*), ABISELECT(32,16), "S20505C1");
    check_base_class_offset(lv, (S20505C2*)(S20505C9*), ABISELECT(32,16), "S20505C1");
    check_base_class_offset(lv, (S20505C2*)(S20505C17*)(S20505C8*), ABISELECT(32,16), "S20505C1");
    /*is_ambiguous_... S20505C1::S20505C17 */ AMB_check_base_class_offset(lv, (S20505C2*)(S20505C17*), ABISELECT(32,16), "S20505C1");
    /*is_ambiguous_... S20505C11::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C11*), ABISELECT(264,160), "S20505C1");
    check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C11*), 0, "S20505C1");
    check_base_class_offset(lv, (S20505C3*)(S20505C11*), 0, "S20505C1");
    /*is_ambiguous_... S20505C1::S20505C10 */ AMB_check_base_class_offset(lv, (S20505C11*)(S20505C10*), 0, "S20505C1");
    /*is_ambiguous_... S20505C1::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C11*)(S20505C12*), 0, "S20505C1");
    /*is_ambiguous_... S20505C1::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C11*)(S20505C13*)(S20505C12*), 0, "S20505C1");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C11*)(S20505C12*)(S20505C8*), 0, "S20505C1");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C11*)(S20505C13*)(S20505C12*)(S20505C8*), 0, "S20505C1");
    check_base_class_offset(lv, (S20505C11*)(S20505C10*)(S20505C17*)(S20505C8*), 0, "S20505C1");
    check_base_class_offset(lv, (S20505C11*)(S20505C21*)(S20505C20*), 0, "S20505C1");
    /*is_ambiguous_... S20505C1::S20505C17 */ AMB_check_base_class_offset(lv, (S20505C11*)(S20505C10*)(S20505C17*), 0, "S20505C1");
    /*is_ambiguous_... S20505C1::S20505C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C10*), ABISELECT(248,152), "S20505C1");
    /*is_ambiguous_... S20505C1::S20505C10 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C10*), ABISELECT(248,152), "S20505C1");
    check_base_class_offset(lv, (S20505C10*)(S20505C9*), ABISELECT(248,152), "S20505C1");
    /*is_ambiguous_... S20505C1::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C10*)(S20505C12*), ABISELECT(248,152), "S20505C1");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C10*)(S20505C12*)(S20505C8*), ABISELECT(248,152), "S20505C1");
    /*is_ambiguous_... S20505C1::S20505C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C12*), ABISELECT(304,188), "S20505C1");
    /*is_ambiguous_... S20505C1::S20505C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C14*)(S20505C13*)(S20505C12*), ABISELECT(272,164), "S20505C1");
    /*is_ambiguous_... S20505C1::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C14*)(S20505C13*)(S20505C12*), ABISELECT(272,164), "S20505C1");
    /*is_ambiguous_... S20505C1::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C14*)(S20505C13*)(S20505C12*), ABISELECT(272,164), "S20505C1");
    /*is_ambiguous_... S20505C1::S20505C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C13*)(S20505C12*), ABISELECT(280,168), "S20505C1");
    /*is_ambiguous_... S20505C1::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C13*)(S20505C12*), ABISELECT(272,164), "S20505C1");
    check_base_class_offset(lv, (S20505C12*)(S20505C9*), ABISELECT(272,164), "S20505C1");
    /*is_ambiguous_... S20505C9::S20505C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C9*), ABISELECT(224,136), "S20505C1");
    /*is_ambiguous_... S20505C9::S20505C3 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C9*), ABISELECT(224,136), "S20505C1");
    check_base_class_offset(lv, (S20505C9*)(S20505C8*), ABISELECT(224,136), "S20505C1");
    check_base_class_offset(lv, (S20505C15*)(S20505C8*), ABISELECT(100,60), "S20505C1");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C12*)(S20505C8*), ABISELECT(96,56), "S20505C1");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C14*)(S20505C13*)(S20505C12*)(S20505C8*), ABISELECT(64,32), "S20505C1");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C14*)(S20505C13*)(S20505C12*)(S20505C8*), ABISELECT(64,32), "S20505C1");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C14*)(S20505C13*)(S20505C12*)(S20505C8*), ABISELECT(64,32), "S20505C1");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C13*)(S20505C12*)(S20505C8*), ABISELECT(72,36), "S20505C1");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C13*)(S20505C12*)(S20505C8*), ABISELECT(64,32), "S20505C1");
    /*is_ambiguous_... S20505C8::S20505C12 */ AMB_check_base_class_offset(lv, (S20505C12*)(S20505C8*), ABISELECT(64,32), "S20505C1");
    /*is_ambiguous_... S20505C10::S20505C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C10*)(S20505C17*)(S20505C8*), ABISELECT(104,64), "S20505C1");
    /*is_ambiguous_... S20505C10::S20505C3 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C10*)(S20505C17*)(S20505C8*), ABISELECT(104,64), "S20505C1");
    check_base_class_offset(lv, (S20505C10*)(S20505C17*)(S20505C8*), ABISELECT(104,64), "S20505C1");
    /*is_ambiguous_... S20505C17::S20505C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C17*)(S20505C8*), ABISELECT(120,72), "S20505C1");
    /*is_ambiguous_... S20505C17::S20505C3 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C17*)(S20505C8*), ABISELECT(120,72), "S20505C1");
    check_base_class_offset(lv, (S20505C17*)(S20505C8*), ABISELECT(104,64), "S20505C1");
    check_base_class_offset(lv, (S20505C8*), ABISELECT(64,32), "S20505C1");
    check_base_class_offset(lv, (S20505C19*), ABISELECT(320,192), "S20505C1");
    check_base_class_offset(lv, (S20505C21*)(S20505C20*), 0, "S20505C1");
    /*is_ambiguous_... S20505C1::S20505C17 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C10*)(S20505C17*), ABISELECT(352,216), "S20505C1");
    /*is_ambiguous_... S20505C1::S20505C17 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C10*)(S20505C17*), ABISELECT(352,216), "S20505C1");
    /*is_ambiguous_... S20505C1::S20505C17 */ AMB_check_base_class_offset(lv, (S20505C10*)(S20505C17*), ABISELECT(352,216), "S20505C1");
    /*is_ambiguous_... S20505C1::S20505C17 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20505C3*)(S20505C17*), ABISELECT(368,224), "S20505C1");
    /*is_ambiguous_... S20505C1::S20505C17 */ AMB_check_base_class_offset(lv, (S20505C3*)(S20505C17*), ABISELECT(368,224), "S20505C1");
    check_base_class_offset(lv, (S20505C17*)(S20505C20*), ABISELECT(352,216), "S20505C1");
    check_base_class_offset(lv, (S20505C20*), 0, "S20505C1");
    check_base_class_offset(lv, (S2264C24*), 0, "S20505C1");
    test_class_info(&lv, &cd_S20505C1);
    dp->~S20505C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20505C1(Test_S20505C1, "S20505C1", ABISELECT(448,272));

#else // __cplusplus

extern void _ZN8S20505C1C1Ev();
extern void _ZN8S20505C1D2Ev();
Name_Map name_map_S20505C1[] = {
  NSPAIR(_ZN8S20505C1C1Ev),
  NSPAIR(_ZN8S20505C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20505C5;
extern VTBL_ENTRY _ZTI8S20505C5[];
extern  VTBL_ENTRY _ZTV8S20505C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20505C5[];
extern Class_Descriptor cd_S20505C2;
extern VTBL_ENTRY _ZTI8S20505C2[];
extern  VTBL_ENTRY _ZTV8S20505C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20505C2[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C11;
extern VTBL_ENTRY _ZTI9S20505C11[];
extern  VTBL_ENTRY _ZTV9S20505C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C11[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C10;
extern VTBL_ENTRY _ZTI9S20505C10[];
extern  VTBL_ENTRY _ZTV9S20505C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C10[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C14;
extern VTBL_ENTRY _ZTI9S20505C14[];
extern  VTBL_ENTRY _ZTV9S20505C14[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C13;
extern VTBL_ENTRY _ZTI9S20505C13[];
extern  VTBL_ENTRY _ZTV9S20505C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C13[];
extern Class_Descriptor cd_S20505C12;
extern VTBL_ENTRY _ZTI9S20505C12[];
extern  VTBL_ENTRY _ZTV9S20505C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C12[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C9;
extern VTBL_ENTRY _ZTI8S20505C9[];
extern  VTBL_ENTRY _ZTV8S20505C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20505C9[];
extern Class_Descriptor cd_S20505C15;
extern VTBL_ENTRY _ZTI9S20505C15[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C14;
extern VTBL_ENTRY _ZTI9S20505C14[];
extern  VTBL_ENTRY _ZTV9S20505C14[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C13;
extern VTBL_ENTRY _ZTI9S20505C13[];
extern  VTBL_ENTRY _ZTV9S20505C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C13[];
extern Class_Descriptor cd_S20505C12;
extern VTBL_ENTRY _ZTI9S20505C12[];
extern  VTBL_ENTRY _ZTV9S20505C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C12[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C10;
extern VTBL_ENTRY _ZTI9S20505C10[];
extern  VTBL_ENTRY _ZTV9S20505C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C10[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C17;
extern VTBL_ENTRY _ZTI9S20505C17[];
extern  VTBL_ENTRY _ZTV9S20505C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C17[];
extern Class_Descriptor cd_S20505C8;
extern VTBL_ENTRY _ZTI8S20505C8[];
extern  VTBL_ENTRY _ZTV8S20505C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20505C8[];
extern Class_Descriptor cd_S20505C19;
extern VTBL_ENTRY _ZTI9S20505C19[];
extern Class_Descriptor cd_S20505C21;
extern VTBL_ENTRY _ZTI9S20505C21[];
extern  VTBL_ENTRY _ZTV9S20505C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C21[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C10;
extern VTBL_ENTRY _ZTI9S20505C10[];
extern  VTBL_ENTRY _ZTV9S20505C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C10[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20505C3;
extern VTBL_ENTRY _ZTI8S20505C3[];
extern  VTBL_ENTRY _ZTV8S20505C3[];
extern Class_Descriptor cd_S20505C17;
extern VTBL_ENTRY _ZTI9S20505C17[];
extern  VTBL_ENTRY _ZTV9S20505C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C17[];
extern Class_Descriptor cd_S20505C20;
extern VTBL_ENTRY _ZTI9S20505C20[];
extern  VTBL_ENTRY _ZTV9S20505C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20505C20[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
static Base_Class bases_S20505C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    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, 0},
  {&cd_S20505C3,    ABISELECT(32,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2264C38,    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
    4, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20505C5,    ABISELECT(56,28), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20505C2,    ABISELECT(32,16), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C38,    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
    9, //immediately_derived
  0, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20505C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20505C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    65, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S2264C38,    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
    11, //immediately_derived
  0, 0},
  {&cd_S20505C3,    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
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20505C10,    ABISELECT(248,152), //bcp->offset
    70, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    62, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(304,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
    19, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    15, //immediately_derived
  0, 0},
  {&cd_S20505C3,    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
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20505C14,    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
    9, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    18, //immediately_derived
  0, 0},
  {&cd_S20505C13,    ABISELECT(272,164), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    68, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20505C12,    ABISELECT(272,164), //bcp->offset
    79, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    67, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S2264C38,    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
    21, //immediately_derived
  0, 0},
  {&cd_S20505C3,    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
    12, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S20505C9,    ABISELECT(224,136), //bcp->offset
    57, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    37, //immediately_derived
  0, 1},
  {&cd_S20505C15,    ABISELECT(100,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
    37, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(96,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
    30, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    26, //immediately_derived
  0, 0},
  {&cd_S20505C3,    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
    14, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20505C14,    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
    15, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    29, //immediately_derived
  0, 0},
  {&cd_S20505C13,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20505C12,    ABISELECT(64,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(104,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
    32, //immediately_derived
  0, 0},
  {&cd_S20505C3,    ABISELECT(104,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
    18, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S20505C10,    ABISELECT(104,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    35, //immediately_derived
  0, 0},
  {&cd_S20505C3,    ABISELECT(120,72), //bcp->offset
    53, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S20505C17,    ABISELECT(104,64), //bcp->offset
    43, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S20505C8,    ABISELECT(64,32), //bcp->offset
    29, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20505C19,    ABISELECT(320,192), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20505C21,    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
    27, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(352,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    41, //immediately_derived
  0, 0},
  {&cd_S20505C3,    ABISELECT(352,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S20505C10,    ABISELECT(352,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(368,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S20505C3,    ABISELECT(368,224), //bcp->offset
    101, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    25, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S20505C17,    ABISELECT(352,216), //bcp->offset
    90, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    26, //init_seq
    46, //immediately_derived
  0, 1},
  {&cd_S20505C20,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    28, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20505C1[];
extern void _ZN8S20505C1D1Ev();
extern void _ZN8S20505C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20505C1D1Ev,_ZTv0_n12_N8S20505C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S20505C1D1Ev,_ZThn16_N8S20505C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20505C1D0Ev,_ZTv0_n12_N8S20505C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S20505C1D0Ev,_ZThn16_N8S20505C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S20505C1D1Ev,_ZTv0_n48_N8S20505C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S20505C1D1Ev,_ZThn32_N8S20505C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S20505C1D0Ev,_ZTv0_n48_N8S20505C1D0Ev)();
extern void ABISELECT(_ZThn64_N8S20505C1D0Ev,_ZThn32_N8S20505C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn40_n96_N8S20505C1D1Ev,_ZTvn32_n48_N8S20505C1D1Ev)();
extern void ABISELECT(_ZTvn40_n96_N8S20505C1D0Ev,_ZTvn32_n48_N8S20505C1D0Ev)();
extern void ABISELECT(_ZTvn56_n96_N8S20505C1D1Ev,_ZTvn40_n48_N8S20505C1D1Ev)();
extern void ABISELECT(_ZTvn56_n96_N8S20505C1D0Ev,_ZTvn40_n48_N8S20505C1D0Ev)();
extern void ABISELECT(_ZTv0_n88_N8S20505C1D1Ev,_ZTv0_n44_N8S20505C1D1Ev)();
extern void ABISELECT(_ZThn224_N8S20505C1D1Ev,_ZThn136_N8S20505C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20505C1D0Ev,_ZTv0_n44_N8S20505C1D0Ev)();
extern void ABISELECT(_ZThn224_N8S20505C1D0Ev,_ZThn136_N8S20505C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20505C1D1Ev,_ZTv0_n28_N8S20505C1D1Ev)();
extern void ABISELECT(_ZThn248_N8S20505C1D1Ev,_ZThn152_N8S20505C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20505C1D0Ev,_ZTv0_n28_N8S20505C1D0Ev)();
extern void ABISELECT(_ZThn248_N8S20505C1D0Ev,_ZThn152_N8S20505C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20505C1D1Ev,_ZTv0_n36_N8S20505C1D1Ev)();
extern void ABISELECT(_ZThn272_N8S20505C1D1Ev,_ZThn164_N8S20505C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20505C1D0Ev,_ZTv0_n36_N8S20505C1D0Ev)();
extern void ABISELECT(_ZThn272_N8S20505C1D0Ev,_ZThn164_N8S20505C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20505C1D1Ev,_ZTv0_n36_N8S20505C1D1Ev)();
extern void ABISELECT(_ZThn352_N8S20505C1D1Ev,_ZThn216_N8S20505C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20505C1D0Ev,_ZTv0_n36_N8S20505C1D0Ev)();
extern void ABISELECT(_ZThn352_N8S20505C1D0Ev,_ZThn216_N8S20505C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn16_n72_N8S20505C1D1Ev,_ZTvn8_n36_N8S20505C1D1Ev)();
extern void ABISELECT(_ZTvn16_n72_N8S20505C1D0Ev,_ZTvn8_n36_N8S20505C1D0Ev)();
static  VTBL_ENTRY vtc_S20505C1[] = {
  0,
  ABISELECT(320,192),
  ABISELECT(272,164),
  ABISELECT(248,152),
  ABISELECT(224,136),
  ABISELECT(64,32),
  ABISELECT(32,16),
  ABISELECT(352,216),
  ABISELECT(32,16),
  0,
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(264,160),
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C1[0]),
  (VTBL_ENTRY)&_ZN8S20505C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20505C1D0Ev,
  ABISELECT(-32,-16),
  ABISELECT(24,12),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20505C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20505C1D1Ev,_ZTv0_n12_N8S20505C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20505C1D0Ev,_ZTv0_n12_N8S20505C1D0Ev),
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20505C1[0]),
  ABISELECT(-64,-32),
  ABISELECT(208,132),
  ABISELECT(160,104),
  ABISELECT(-32,-16),
  ABISELECT(184,120),
  ABISELECT(-32,-16),
  ABISELECT(200,128),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-8,-4),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20505C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20505C1D1Ev,_ZTv0_n48_N8S20505C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S20505C1D0Ev,_ZTv0_n48_N8S20505C1D0Ev),
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-48,-36),
  ABISELECT(-104,-64),
  ABISELECT(160,96),
  ABISELECT(-104,-64),
  ABISELECT(-104,-64),
  (VTBL_ENTRY)&(_ZTI8S20505C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n96_N8S20505C1D1Ev,_ZTvn32_n48_N8S20505C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn40_n96_N8S20505C1D0Ev,_ZTvn32_n48_N8S20505C1D0Ev),
  ABISELECT(-120,-72),
  (VTBL_ENTRY)&(_ZTI8S20505C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n96_N8S20505C1D1Ev,_ZTvn40_n48_N8S20505C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn56_n96_N8S20505C1D0Ev,_ZTvn40_n48_N8S20505C1D0Ev),
  ABISELECT(-224,-136),
  ABISELECT(48,28),
  ABISELECT(40,24),
  ABISELECT(-224,-136),
  ABISELECT(24,16),
  ABISELECT(-224,-136),
  ABISELECT(-168,-108),
  ABISELECT(-192,-120),
  ABISELECT(-192,-120),
  ABISELECT(-224,-136),
  (VTBL_ENTRY)&(_ZTI8S20505C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20505C1D1Ev,_ZTv0_n44_N8S20505C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20505C1D0Ev,_ZTv0_n44_N8S20505C1D0Ev),
  ABISELECT(-248,-152),
  ABISELECT(-192,-124),
  ABISELECT(-248,-152),
  ABISELECT(16,8),
  ABISELECT(-248,-152),
  ABISELECT(-248,-152),
  (VTBL_ENTRY)&(_ZTI8S20505C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20505C1D1Ev,_ZTv0_n28_N8S20505C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20505C1D0Ev,_ZTv0_n28_N8S20505C1D0Ev),
  ABISELECT(-272,-164),
  ABISELECT(-24,-12),
  ABISELECT(-240,-148),
  ABISELECT(-8,-4),
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-216,-136),
  ABISELECT(-272,-164),
  (VTBL_ENTRY)&(_ZTI8S20505C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20505C1D1Ev,_ZTv0_n36_N8S20505C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20505C1D0Ev,_ZTv0_n36_N8S20505C1D0Ev),
  ABISELECT(-352,-216),
  ABISELECT(-320,-200),
  ABISELECT(-320,-200),
  ABISELECT(-296,-188),
  ABISELECT(-352,-216),
  ABISELECT(-88,-56),
  ABISELECT(-352,-216),
  ABISELECT(-352,-216),
  (VTBL_ENTRY)&(_ZTI8S20505C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20505C1D1Ev,_ZTv0_n36_N8S20505C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20505C1D0Ev,_ZTv0_n36_N8S20505C1D0Ev),
  ABISELECT(-368,-224),
  (VTBL_ENTRY)&(_ZTI8S20505C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n72_N8S20505C1D1Ev,_ZTvn8_n36_N8S20505C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n72_N8S20505C1D0Ev,_ZTvn8_n36_N8S20505C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20505C1[];
extern void _ZN9S20505C20D1Ev();
extern void _ZN9S20505C20D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C20__8S20505C1[] = {
  ABISELECT(32,16),
  ABISELECT(352,216),
  ABISELECT(32,16),
  0,
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(264,160),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C20[0]),
  (VTBL_ENTRY)&_ZN9S20505C20D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C20D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20505C21D1Ev,_ZTv0_n24_N9S20505C21D1Ev)();
extern void _ZN9S20505C21D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20505C21D0Ev,_ZTv0_n24_N9S20505C21D0Ev)();
extern void _ZN9S20505C21D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20505C219S20505C20__8S20505C1[] = {
  ABISELECT(32,16),
  0,
  0,
  ABISELECT(56,28),
  0,
  ABISELECT(264,160),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C21D1Ev,_ZTv0_n24_N9S20505C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C21D0Ev,_ZTv0_n24_N9S20505C21D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C219S20505C20__8S20505C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S20505C21[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S20505C21D1Ev,_ZTv0_n12_N9S20505C21D1Ev)();
extern void ABISELECT(_ZThn32_N9S20505C21D1Ev,_ZThn16_N9S20505C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20505C21D0Ev,_ZTv0_n12_N9S20505C21D0Ev)();
extern void ABISELECT(_ZThn32_N9S20505C21D0Ev,_ZThn16_N9S20505C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20505C3__A1__9S20505C219S20505C20__8S20505C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20505C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C21D1Ev,_ZTv0_n12_N9S20505C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C21D0Ev,_ZTv0_n12_N9S20505C21D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C20__8S20505C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S20505C20[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S20505C20D1Ev,_ZTv0_n12_N9S20505C20D1Ev)();
extern void ABISELECT(_ZThn32_N9S20505C20D1Ev,_ZThn16_N9S20505C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20505C20D0Ev,_ZTv0_n12_N9S20505C20D0Ev)();
extern void ABISELECT(_ZThn32_N9S20505C20D0Ev,_ZThn16_N9S20505C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20505C2__9S20505C20__8S20505C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(24,12),
  0,
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20505C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C20D1Ev,_ZTv0_n12_N9S20505C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C20D0Ev,_ZTv0_n12_N9S20505C20D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N9S20505C20D1Ev,_ZTv0_n36_N9S20505C20D1Ev)();
extern void ABISELECT(_ZThn352_N9S20505C20D1Ev,_ZThn216_N9S20505C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20505C20D0Ev,_ZTv0_n36_N9S20505C20D0Ev)();
extern void ABISELECT(_ZThn352_N9S20505C20D0Ev,_ZThn216_N9S20505C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20505C17__9S20505C20__8S20505C1[] = {
  ABISELECT(-352,-216),
  ABISELECT(-320,-200),
  ABISELECT(-320,-200),
  ABISELECT(-296,-188),
  ABISELECT(-352,-216),
  ABISELECT(-88,-56),
  ABISELECT(-352,-216),
  ABISELECT(-352,-216),
  (VTBL_ENTRY)&(_ZTI9S20505C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20505C20D1Ev,_ZTv0_n36_N9S20505C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20505C20D0Ev,_ZTv0_n36_N9S20505C20D0Ev),
};
extern void ABISELECT(_ZTvn16_n72_N9S20505C20D1Ev,_ZTvn8_n36_N9S20505C20D1Ev)();
extern void ABISELECT(_ZTvn16_n72_N9S20505C20D0Ev,_ZTvn8_n36_N9S20505C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20505C39S20505C17__A3__9S20505C20__8S20505C1[] = {
  ABISELECT(-368,-224),
  (VTBL_ENTRY)&(_ZTI9S20505C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n72_N9S20505C20D1Ev,_ZTvn8_n36_N9S20505C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn16_n72_N9S20505C20D0Ev,_ZTvn8_n36_N9S20505C20D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20505C2D1Ev,_ZTv0_n12_N8S20505C2D1Ev)();
extern void _ZN8S20505C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20505C2D0Ev,_ZTv0_n12_N8S20505C2D0Ev)();
extern void _ZN8S20505C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20505C2__8S20505C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(24,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20505C2D1Ev,_ZTv0_n12_N8S20505C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20505C2D0Ev,_ZTv0_n12_N8S20505C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__8S20505C2__8S20505C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20505C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__8S20505C1[] = {
  ABISELECT(-56,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C5[0]),
};
extern void _ZN8S20505C8D1Ev();
extern void _ZN8S20505C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20505C8__8S20505C1[] = {
  ABISELECT(208,132),
  ABISELECT(160,104),
  ABISELECT(-32,-16),
  ABISELECT(184,120),
  ABISELECT(-32,-16),
  ABISELECT(200,128),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C8[0]),
  (VTBL_ENTRY)&_ZN8S20505C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20505C8D0Ev,
};
extern void _ZN9S20505C12D1Ev();
extern void _ZN9S20505C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C128S20505C8__A1__8S20505C1[] = {
  ABISELECT(184,120),
  ABISELECT(-32,-16),
  ABISELECT(200,128),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
  (VTBL_ENTRY)&_ZN9S20505C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C12D0Ev,
};
extern void _ZN9S20505C13D1Ev();
extern void _ZN9S20505C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C139S20505C128S20505C8__A1__8S20505C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(200,128),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
  (VTBL_ENTRY)&_ZN9S20505C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C139S20505C128S20505C8__A1__8S20505C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20505C13D1Ev,_ZTv0_n24_N9S20505C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20505C13D0Ev,_ZTv0_n24_N9S20505C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C139S20505C128S20505C8__A1__8S20505C1[] = {
  ABISELECT(64,32),
  ABISELECT(56,28),
  0,
  ABISELECT(264,160),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C13D1Ev,_ZTv0_n24_N9S20505C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C13D0Ev,_ZTv0_n24_N9S20505C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20505C13D1Ev,_ZTv0_n12_N9S20505C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20505C13D0Ev,_ZTv0_n12_N9S20505C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20505C3__A2__9S20505C139S20505C128S20505C8__A1__8S20505C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C13D1Ev,_ZTv0_n12_N9S20505C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C13D0Ev,_ZTv0_n12_N9S20505C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20505C12D1Ev,_ZTv0_n24_N9S20505C12D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20505C12D0Ev,_ZTv0_n24_N9S20505C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C128S20505C8__A1__8S20505C1[] = {
  ABISELECT(64,32),
  ABISELECT(56,28),
  0,
  ABISELECT(264,160),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C12D1Ev,_ZTv0_n24_N9S20505C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C12D0Ev,_ZTv0_n24_N9S20505C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C128S20505C8__A1__8S20505C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S20505C12D1Ev,_ZTv0_n12_N9S20505C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20505C12D0Ev,_ZTv0_n12_N9S20505C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20505C3__A2__9S20505C128S20505C8__A1__8S20505C1[] = {
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C12D1Ev,_ZTv0_n12_N9S20505C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C12D0Ev,_ZTv0_n12_N9S20505C12D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N9S20505C12D1Ev,_ZTv0_n28_N9S20505C12D1Ev)();
extern void ABISELECT(_ZThn184_N9S20505C12D1Ev,_ZThn120_N9S20505C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20505C12D0Ev,_ZTv0_n28_N9S20505C12D0Ev)();
extern void ABISELECT(_ZThn184_N9S20505C12D0Ev,_ZThn120_N9S20505C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20505C10__9S20505C128S20505C8__A1__8S20505C1[] = {
  ABISELECT(-184,-120),
  ABISELECT(-192,-124),
  ABISELECT(-248,-152),
  ABISELECT(16,8),
  ABISELECT(-248,-152),
  ABISELECT(-184,-120),
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20505C12D1Ev,_ZTv0_n28_N9S20505C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20505C12D0Ev,_ZTv0_n28_N9S20505C12D0Ev),
};
extern void _ZN9S20505C17D1Ev();
extern void _ZN9S20505C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C178S20505C8__8S20505C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-48,-36),
  ABISELECT(-104,-64),
  ABISELECT(160,96),
  ABISELECT(-104,-64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C17[0]),
  (VTBL_ENTRY)&_ZN9S20505C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C17D0Ev,
};
extern void _ZN9S20505C10D1Ev();
extern void _ZN9S20505C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C109S20505C178S20505C8__A1__8S20505C1[] = {
  ABISELECT(-48,-36),
  ABISELECT(-104,-64),
  ABISELECT(160,96),
  ABISELECT(-104,-64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
  (VTBL_ENTRY)&_ZN9S20505C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C10D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20505C10D1Ev,_ZTv0_n24_N9S20505C10D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20505C10D0Ev,_ZTv0_n24_N9S20505C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C109S20505C178S20505C8__A1__8S20505C1[] = {
  ABISELECT(104,64),
  ABISELECT(56,28),
  0,
  ABISELECT(264,160),
  ABISELECT(104,64),
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C10D1Ev,_ZTv0_n24_N9S20505C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C10D0Ev,_ZTv0_n24_N9S20505C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C109S20505C178S20505C8__A1__8S20505C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(48,36),
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20505C17D1Ev,_ZTv0_n24_N9S20505C17D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20505C17D0Ev,_ZTv0_n24_N9S20505C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C178S20505C8__8S20505C1[] = {
  ABISELECT(104,64),
  ABISELECT(56,28),
  0,
  ABISELECT(264,160),
  ABISELECT(104,64),
  (VTBL_ENTRY)&(_ZTI9S20505C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C17D1Ev,_ZTv0_n24_N9S20505C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C17D0Ev,_ZTv0_n24_N9S20505C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C178S20505C8__8S20505C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(48,36),
  (VTBL_ENTRY)&(_ZTI9S20505C17[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S20505C17D1Ev,_ZTv0_n12_N9S20505C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20505C17D0Ev,_ZTv0_n12_N9S20505C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20505C2__9S20505C178S20505C8__8S20505C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(24,12),
  0,
  ABISELECT(72,48),
  ABISELECT(72,48),
  (VTBL_ENTRY)&(_ZTI9S20505C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C17D1Ev,_ZTv0_n12_N9S20505C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C17D0Ev,_ZTv0_n12_N9S20505C17D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N8S20505C8D1Ev,_ZTv0_n12_N8S20505C8D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20505C8D0Ev,_ZTv0_n12_N8S20505C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20505C2__8S20505C8__8S20505C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(24,12),
  0,
  ABISELECT(32,16),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S20505C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20505C8D1Ev,_ZTv0_n12_N8S20505C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20505C8D0Ev,_ZTv0_n12_N8S20505C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__8S20505C8__8S20505C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20505C8[0]),
};
extern void ABISELECT(_ZTv0_n88_N8S20505C8D1Ev,_ZTv0_n44_N8S20505C8D1Ev)();
extern void ABISELECT(_ZThn160_N8S20505C8D1Ev,_ZThn104_N8S20505C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20505C8D0Ev,_ZTv0_n44_N8S20505C8D0Ev)();
extern void ABISELECT(_ZThn160_N8S20505C8D0Ev,_ZThn104_N8S20505C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20505C9__8S20505C8__8S20505C1[] = {
  ABISELECT(-160,-104),
  ABISELECT(48,28),
  ABISELECT(40,24),
  ABISELECT(-224,-136),
  ABISELECT(24,16),
  ABISELECT(-224,-136),
  ABISELECT(-168,-108),
  ABISELECT(-192,-120),
  ABISELECT(-192,-120),
  ABISELECT(-160,-104),
  (VTBL_ENTRY)&(_ZTI8S20505C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20505C8D1Ev,_ZTv0_n44_N8S20505C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20505C8D0Ev,_ZTv0_n44_N8S20505C8D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N8S20505C8D1Ev,_ZTv0_n28_N8S20505C8D1Ev)();
extern void ABISELECT(_ZThn184_N8S20505C8D1Ev,_ZThn120_N8S20505C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20505C8D0Ev,_ZTv0_n28_N8S20505C8D0Ev)();
extern void ABISELECT(_ZThn184_N8S20505C8D0Ev,_ZThn120_N8S20505C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20505C10__8S20505C8__8S20505C1[] = {
  ABISELECT(-184,-120),
  ABISELECT(-192,-124),
  ABISELECT(-248,-152),
  ABISELECT(16,8),
  ABISELECT(-248,-152),
  ABISELECT(-184,-120),
  (VTBL_ENTRY)&(_ZTI8S20505C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20505C8D1Ev,_ZTv0_n28_N8S20505C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20505C8D0Ev,_ZTv0_n28_N8S20505C8D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20505C8D1Ev,_ZTv0_n24_N8S20505C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S20505C8D0Ev,_ZTv0_n24_N8S20505C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20505C11__8S20505C8__8S20505C1[] = {
  ABISELECT(64,32),
  ABISELECT(56,28),
  0,
  ABISELECT(264,160),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI8S20505C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20505C8D1Ev,_ZTv0_n24_N8S20505C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20505C8D0Ev,_ZTv0_n24_N8S20505C8D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N8S20505C8D1Ev,_ZTv0_n36_N8S20505C8D1Ev)();
extern void ABISELECT(_ZThn208_N8S20505C8D1Ev,_ZThn132_N8S20505C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20505C8D0Ev,_ZTv0_n36_N8S20505C8D0Ev)();
extern void ABISELECT(_ZThn208_N8S20505C8D0Ev,_ZThn132_N8S20505C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20505C12__8S20505C8__8S20505C1[] = {
  ABISELECT(-208,-132),
  ABISELECT(-24,-12),
  ABISELECT(-240,-148),
  ABISELECT(-8,-4),
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-216,-136),
  ABISELECT(-208,-132),
  (VTBL_ENTRY)&(_ZTI8S20505C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20505C8D1Ev,_ZTv0_n36_N8S20505C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20505C8D0Ev,_ZTv0_n36_N8S20505C8D0Ev),
};
extern void ABISELECT(_ZThn40_N8S20505C8D1Ev,_ZThn32_N8S20505C8D1Ev)();
extern void ABISELECT(_ZThn40_N8S20505C8D0Ev,_ZThn32_N8S20505C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20505C17__8S20505C8__8S20505C1[] = {
  ABISELECT(-72,-48),
  ABISELECT(-72,-48),
  ABISELECT(-48,-36),
  ABISELECT(-104,-64),
  ABISELECT(160,96),
  ABISELECT(-104,-64),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S20505C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S20505C8D1Ev,_ZThn32_N8S20505C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S20505C8D0Ev,_ZThn32_N8S20505C8D0Ev),
};
extern void _ZN8S20505C9D1Ev();
extern void _ZN8S20505C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20505C9__8S20505C1[] = {
  ABISELECT(48,28),
  ABISELECT(40,24),
  ABISELECT(-224,-136),
  ABISELECT(24,16),
  ABISELECT(-224,-136),
  ABISELECT(-168,-108),
  ABISELECT(-192,-120),
  ABISELECT(-192,-120),
  0,
  (VTBL_ENTRY)&(_ZTI8S20505C9[0]),
  (VTBL_ENTRY)&_ZN8S20505C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20505C9D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20505C9D1Ev,_ZTv0_n12_N8S20505C9D1Ev)();
extern void ABISELECT(_ZTv0_n24_N8S20505C9D0Ev,_ZTv0_n12_N8S20505C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20505C2__8S20505C9__8S20505C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(24,12),
  0,
  ABISELECT(192,120),
  ABISELECT(192,120),
  (VTBL_ENTRY)&(_ZTI8S20505C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20505C9D1Ev,_ZTv0_n12_N8S20505C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20505C9D0Ev,_ZTv0_n12_N8S20505C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__8S20505C9__8S20505C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(168,108),
  (VTBL_ENTRY)&(_ZTI8S20505C9[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S20505C9D1Ev,_ZTv0_n28_N8S20505C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S20505C9D1Ev,_ZThn16_N8S20505C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20505C9D0Ev,_ZTv0_n28_N8S20505C9D0Ev)();
extern void ABISELECT(_ZThn24_N8S20505C9D0Ev,_ZThn16_N8S20505C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20505C10__8S20505C9__8S20505C1[] = {
  ABISELECT(-24,-16),
  ABISELECT(-192,-124),
  ABISELECT(-248,-152),
  ABISELECT(16,8),
  ABISELECT(-248,-152),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20505C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20505C9D1Ev,_ZTv0_n28_N8S20505C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20505C9D0Ev,_ZTv0_n28_N8S20505C9D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20505C9D1Ev,_ZTv0_n24_N8S20505C9D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S20505C9D0Ev,_ZTv0_n24_N8S20505C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20505C11__8S20505C9__8S20505C1[] = {
  ABISELECT(224,136),
  ABISELECT(56,28),
  0,
  ABISELECT(264,160),
  ABISELECT(224,136),
  (VTBL_ENTRY)&(_ZTI8S20505C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20505C9D1Ev,_ZTv0_n24_N8S20505C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20505C9D0Ev,_ZTv0_n24_N8S20505C9D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N8S20505C9D1Ev,_ZTv0_n36_N8S20505C9D1Ev)();
extern void ABISELECT(_ZThn48_N8S20505C9D1Ev,_ZThn28_N8S20505C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20505C9D0Ev,_ZTv0_n36_N8S20505C9D0Ev)();
extern void ABISELECT(_ZThn48_N8S20505C9D0Ev,_ZThn28_N8S20505C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20505C12__8S20505C9__8S20505C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-24,-12),
  ABISELECT(-240,-148),
  ABISELECT(-8,-4),
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-216,-136),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20505C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20505C9D1Ev,_ZTv0_n36_N8S20505C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20505C9D0Ev,_ZTv0_n36_N8S20505C9D0Ev),
};
extern void _ZN9S20505C10D1Ev();
extern void _ZN9S20505C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C10__8S20505C1[] = {
  ABISELECT(-192,-124),
  ABISELECT(-248,-152),
  ABISELECT(16,8),
  ABISELECT(-248,-152),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
  (VTBL_ENTRY)&_ZN9S20505C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C10D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20505C10D1Ev,_ZTv0_n24_N9S20505C10D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20505C10D0Ev,_ZTv0_n24_N9S20505C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C10__8S20505C1[] = {
  ABISELECT(248,152),
  ABISELECT(56,28),
  0,
  ABISELECT(264,160),
  ABISELECT(248,152),
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C10D1Ev,_ZTv0_n24_N9S20505C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C10D0Ev,_ZTv0_n24_N9S20505C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C10__8S20505C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(192,124),
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
};
extern void _ZN9S20505C11D1Ev();
extern void _ZN9S20505C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C11__8S20505C1[] = {
  ABISELECT(56,28),
  0,
  ABISELECT(264,160),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C11[0]),
  (VTBL_ENTRY)&_ZN9S20505C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C11D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C11__8S20505C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI9S20505C11[0]),
};
extern void _ZN9S20505C12D1Ev();
extern void _ZN9S20505C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C12__8S20505C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-240,-148),
  ABISELECT(-8,-4),
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-216,-136),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
  (VTBL_ENTRY)&_ZN9S20505C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C12D0Ev,
};
extern void _ZN9S20505C13D1Ev();
extern void _ZN9S20505C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C139S20505C12__8S20505C1[] = {
  ABISELECT(-240,-148),
  ABISELECT(-8,-4),
  ABISELECT(-272,-164),
  ABISELECT(-272,-164),
  ABISELECT(-216,-136),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
  (VTBL_ENTRY)&_ZN9S20505C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C13D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C139S20505C12__8S20505C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(216,136),
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20505C13D1Ev,_ZTv0_n24_N9S20505C13D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20505C13D0Ev,_ZTv0_n24_N9S20505C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C139S20505C12__8S20505C1[] = {
  ABISELECT(272,164),
  ABISELECT(56,28),
  0,
  ABISELECT(264,160),
  ABISELECT(272,164),
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C13D1Ev,_ZTv0_n24_N9S20505C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C13D0Ev,_ZTv0_n24_N9S20505C13D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20505C13D1Ev,_ZTv0_n12_N9S20505C13D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20505C13D0Ev,_ZTv0_n12_N9S20505C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20505C3__A2__9S20505C139S20505C12__8S20505C1[] = {
  ABISELECT(240,148),
  ABISELECT(240,148),
  (VTBL_ENTRY)&(_ZTI9S20505C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C13D1Ev,_ZTv0_n12_N9S20505C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C13D0Ev,_ZTv0_n12_N9S20505C13D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20505C12D1Ev,_ZTv0_n24_N9S20505C12D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20505C12D0Ev,_ZTv0_n24_N9S20505C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C12__8S20505C1[] = {
  ABISELECT(272,164),
  ABISELECT(56,28),
  0,
  ABISELECT(264,160),
  ABISELECT(272,164),
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C12D1Ev,_ZTv0_n24_N9S20505C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C12D0Ev,_ZTv0_n24_N9S20505C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C12__8S20505C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(216,136),
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S20505C12D1Ev,_ZTv0_n12_N9S20505C12D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20505C12D0Ev,_ZTv0_n12_N9S20505C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20505C3__A2__9S20505C12__8S20505C1[] = {
  ABISELECT(240,148),
  ABISELECT(240,148),
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C12D1Ev,_ZTv0_n12_N9S20505C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C12D0Ev,_ZTv0_n12_N9S20505C12D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N9S20505C12D1Ev,_ZTv0_n28_N9S20505C12D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20505C12D0Ev,_ZTv0_n28_N9S20505C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20505C10__9S20505C12__8S20505C1[] = {
  ABISELECT(24,12),
  ABISELECT(-192,-124),
  ABISELECT(-248,-152),
  ABISELECT(16,8),
  ABISELECT(-248,-152),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S20505C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20505C12D1Ev,_ZTv0_n28_N9S20505C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20505C12D0Ev,_ZTv0_n28_N9S20505C12D0Ev),
};
extern void _ZN9S20505C17D1Ev();
extern void _ZN9S20505C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C17__A1__8S20505C1[] = {
  ABISELECT(-320,-200),
  ABISELECT(-320,-200),
  ABISELECT(-296,-188),
  ABISELECT(-352,-216),
  ABISELECT(-88,-56),
  ABISELECT(-352,-216),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C17[0]),
  (VTBL_ENTRY)&_ZN9S20505C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C17D0Ev,
};
extern void _ZN9S20505C10D1Ev();
extern void _ZN9S20505C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20505C109S20505C17__A2__8S20505C1[] = {
  ABISELECT(-296,-188),
  ABISELECT(-352,-216),
  ABISELECT(-88,-56),
  ABISELECT(-352,-216),
  0,
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
  (VTBL_ENTRY)&_ZN9S20505C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20505C10D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20505C10D1Ev,_ZTv0_n24_N9S20505C10D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20505C10D0Ev,_ZTv0_n24_N9S20505C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C109S20505C17__A2__8S20505C1[] = {
  ABISELECT(352,216),
  ABISELECT(56,28),
  0,
  ABISELECT(264,160),
  ABISELECT(352,216),
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C10D1Ev,_ZTv0_n24_N9S20505C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C10D0Ev,_ZTv0_n24_N9S20505C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C109S20505C17__A2__8S20505C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(296,188),
  (VTBL_ENTRY)&(_ZTI9S20505C10[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20505C17D1Ev,_ZTv0_n24_N9S20505C17D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20505C17D0Ev,_ZTv0_n24_N9S20505C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20505C11__9S20505C17__A1__8S20505C1[] = {
  ABISELECT(352,216),
  ABISELECT(56,28),
  0,
  ABISELECT(264,160),
  ABISELECT(352,216),
  (VTBL_ENTRY)&(_ZTI9S20505C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C17D1Ev,_ZTv0_n24_N9S20505C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20505C17D0Ev,_ZTv0_n24_N9S20505C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20505C5__9S20505C17__A1__8S20505C1[] = {
  ABISELECT(-56,-28),
  ABISELECT(296,188),
  (VTBL_ENTRY)&(_ZTI9S20505C17[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S20505C17D1Ev,_ZTv0_n12_N9S20505C17D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20505C17D0Ev,_ZTv0_n12_N9S20505C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20505C2__9S20505C17__A1__8S20505C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(24,12),
  0,
  ABISELECT(320,200),
  ABISELECT(320,200),
  (VTBL_ENTRY)&(_ZTI9S20505C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C17D1Ev,_ZTv0_n12_N9S20505C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20505C17D0Ev,_ZTv0_n12_N9S20505C17D0Ev),
};
static  VTT_ENTRY vtt_S20505C1[] = {
  {&(_ZTV8S20505C1[16]),  16,105},
  {&(_tg__ZTV9S20505C20__8S20505C1[10]),  10,12},
  {&(_tg__ZTV9S20505C219S20505C20__8S20505C1[8]),  8,10},
  {&(_tg__ZTV9S20505C219S20505C20__8S20505C1[8]),  8,10},
  {&(_tg__ZTV8S20505C5__9S20505C219S20505C20__8S20505C1[3]),  3,3},
  {&(_tg__ZTV8S20505C3__A1__9S20505C219S20505C20__8S20505C1[3]),  3,5},
  {&(_tg__ZTV9S20505C20__8S20505C1[10]),  10,12},
  {&(_tg__ZTV8S20505C5__9S20505C20__8S20505C1[3]),  3,3},
  {&(_tg__ZTV8S20505C2__9S20505C20__8S20505C1[6]),  6,8},
  {&(_tg__ZTV9S20505C17__9S20505C20__8S20505C1[9]),  9,11},
  {&(_tg__ZTV8S20505C39S20505C17__A3__9S20505C20__8S20505C1[2]),  2,4},
  {&(_tg__ZTV8S20505C2__9S20505C20__8S20505C1[6]),  6,8},
  {&(_ZTV8S20505C1[24]),  24,105},
  {&(_ZTV8S20505C1[24]),  24,105},
  {&(_ZTV8S20505C1[29]),  29,105},
  {&(_ZTV8S20505C1[41]),  41,105},
  {&(_ZTV8S20505C1[68]),  68,105},
  {&(_ZTV8S20505C1[77]),  77,105},
  {&(_ZTV8S20505C1[16]),  16,105},
  {&(_ZTV8S20505C1[88]),  88,105},
  {&(_ZTV8S20505C1[51]),  51,105},
  {&(_ZTV8S20505C1[55]),  55,105},
  {&(_ZTV8S20505C1[99]),  99,105},
  {&(_ZTV8S20505C1[103]),  103,105},
  {&(_tg__ZTV8S20505C2__8S20505C1[6]),  6,8},
  {&(_tg__ZTV8S20505C2__8S20505C1[6]),  6,8},
  {&(_tg__ZTV8S20505C5__8S20505C2__8S20505C1[3]),  3,3},
  {&(_tg__ZTV8S20505C5__8S20505C1[3]),  3,3},
  {&(_tg__ZTV8S20505C8__8S20505C1[11]),  11,13},
  {&(_tg__ZTV9S20505C128S20505C8__A1__8S20505C1[8]),  8,10},
  {&(_tg__ZTV9S20505C139S20505C128S20505C8__A1__8S20505C1[7]),  7,9},
  {&(_tg__ZTV8S20505C5__9S20505C139S20505C128S20505C8__A1__8S20505C1[3]),  3,3},
  {&(_tg__ZTV9S20505C11__9S20505C139S20505C128S20505C8__A1__8S20505C1[6]),  6,8},
  {&(_tg__ZTV8S20505C3__A2__9S20505C139S20505C128S20505C8__A1__8S20505C1[3]),  3,5},
  {&(_tg__ZTV9S20505C11__9S20505C128S20505C8__A1__8S20505C1[6]),  6,8},
  {&(_tg__ZTV8S20505C5__9S20505C128S20505C8__A1__8S20505C1[3]),  3,3},
  {&(_tg__ZTV8S20505C3__A2__9S20505C128S20505C8__A1__8S20505C1[3]),  3,5},
  {&(_tg__ZTV9S20505C10__9S20505C128S20505C8__A1__8S20505C1[7]),  7,9},
  {&(_tg__ZTV9S20505C178S20505C8__8S20505C1[8]),  8,10},
  {&(_tg__ZTV9S20505C109S20505C178S20505C8__A1__8S20505C1[6]),  6,8},
  {&(_tg__ZTV9S20505C11__9S20505C109S20505C178S20505C8__A1__8S20505C1[6]),  6,8},
  {&(_tg__ZTV8S20505C5__9S20505C109S20505C178S20505C8__A1__8S20505C1[3]),  3,3},
  {&(_tg__ZTV9S20505C11__9S20505C178S20505C8__8S20505C1[6]),  6,8},
  {&(_tg__ZTV8S20505C5__9S20505C178S20505C8__8S20505C1[3]),  3,3},
  {&(_tg__ZTV8S20505C2__9S20505C178S20505C8__8S20505C1[6]),  6,8},
  {&(_tg__ZTV8S20505C2__9S20505C178S20505C8__8S20505C1[6]),  6,8},
  {&(_tg__ZTV8S20505C2__8S20505C8__8S20505C1[6]),  6,8},
  {&(_tg__ZTV8S20505C2__8S20505C8__8S20505C1[6]),  6,8},
  {&(_tg__ZTV8S20505C5__8S20505C8__8S20505C1[3]),  3,3},
  {&(_tg__ZTV8S20505C9__8S20505C8__8S20505C1[11]),  11,13},
  {&(_tg__ZTV9S20505C10__8S20505C8__8S20505C1[7]),  7,9},
  {&(_tg__ZTV9S20505C11__8S20505C8__8S20505C1[6]),  6,8},
  {&(_tg__ZTV9S20505C12__8S20505C8__8S20505C1[9]),  9,11},
  {&(_tg__ZTV9S20505C17__8S20505C8__8S20505C1[8]),  8,10},
  {&(_tg__ZTV8S20505C9__8S20505C1[10]),  10,12},
  {&(_tg__ZTV8S20505C2__8S20505C9__8S20505C1[6]),  6,8},
  {&(_tg__ZTV8S20505C2__8S20505C9__8S20505C1[6]),  6,8},
  {&(_tg__ZTV8S20505C5__8S20505C9__8S20505C1[3]),  3,3},
  {&(_tg__ZTV9S20505C10__8S20505C9__8S20505C1[7]),  7,9},
  {&(_tg__ZTV9S20505C11__8S20505C9__8S20505C1[6]),  6,8},
  {&(_tg__ZTV9S20505C12__8S20505C9__8S20505C1[9]),  9,11},
  {&(_tg__ZTV9S20505C10__8S20505C1[6]),  6,8},
  {&(_tg__ZTV9S20505C11__9S20505C10__8S20505C1[6]),  6,8},
  {&(_tg__ZTV8S20505C5__9S20505C10__8S20505C1[3]),  3,3},
  {&(_tg__ZTV9S20505C11__8S20505C1[5]),  5,7},
  {&(_tg__ZTV8S20505C5__9S20505C11__8S20505C1[3]),  3,3},
  {&(_tg__ZTV9S20505C12__8S20505C1[8]),  8,10},
  {&(_tg__ZTV9S20505C139S20505C12__8S20505C1[7]),  7,9},
  {&(_tg__ZTV8S20505C5__9S20505C139S20505C12__8S20505C1[3]),  3,3},
  {&(_tg__ZTV9S20505C11__9S20505C139S20505C12__8S20505C1[6]),  6,8},
  {&(_tg__ZTV8S20505C3__A2__9S20505C139S20505C12__8S20505C1[3]),  3,5},
  {&(_tg__ZTV9S20505C11__9S20505C12__8S20505C1[6]),  6,8},
  {&(_tg__ZTV8S20505C5__9S20505C12__8S20505C1[3]),  3,3},
  {&(_tg__ZTV8S20505C3__A2__9S20505C12__8S20505C1[3]),  3,5},
  {&(_tg__ZTV9S20505C10__9S20505C12__8S20505C1[7]),  7,9},
  {&(_tg__ZTV9S20505C17__A1__8S20505C1[8]),  8,10},
  {&(_tg__ZTV9S20505C109S20505C17__A2__8S20505C1[6]),  6,8},
  {&(_tg__ZTV9S20505C11__9S20505C109S20505C17__A2__8S20505C1[6]),  6,8},
  {&(_tg__ZTV8S20505C5__9S20505C109S20505C17__A2__8S20505C1[3]),  3,3},
  {&(_tg__ZTV9S20505C11__9S20505C17__A1__8S20505C1[6]),  6,8},
  {&(_tg__ZTV8S20505C5__9S20505C17__A1__8S20505C1[3]),  3,3},
  {&(_tg__ZTV8S20505C2__9S20505C17__A1__8S20505C1[6]),  6,8},
  {&(_tg__ZTV8S20505C2__9S20505C17__A1__8S20505C1[6]),  6,8},
};
extern VTBL_ENTRY _ZTI8S20505C1[];
extern  VTBL_ENTRY _ZTV8S20505C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20505C1[];
static VTBL_ENTRY alt_thunk_names109[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20505C9D0Ev,_ZTv0_n36_N8S20505C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20505C9D0Ev,_ZThn28_N8S20505C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20505C9D1Ev,_ZTv0_n36_N8S20505C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20505C9D1Ev,_ZThn28_N8S20505C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20505C9D0Ev,_ZTv0_n28_N8S20505C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20505C9D0Ev,_ZThn16_N8S20505C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20505C9D1Ev,_ZTv0_n28_N8S20505C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20505C9D1Ev,_ZThn16_N8S20505C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20505C8D0Ev,_ZTv0_n36_N8S20505C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20505C8D0Ev,_ZThn132_N8S20505C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20505C8D1Ev,_ZTv0_n36_N8S20505C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S20505C8D1Ev,_ZThn132_N8S20505C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20505C8D0Ev,_ZTv0_n28_N8S20505C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20505C8D0Ev,_ZThn120_N8S20505C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20505C8D1Ev,_ZTv0_n28_N8S20505C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S20505C8D1Ev,_ZThn120_N8S20505C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20505C8D0Ev,_ZTv0_n44_N8S20505C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S20505C8D0Ev,_ZThn104_N8S20505C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20505C8D1Ev,_ZTv0_n44_N8S20505C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn160_N8S20505C8D1Ev,_ZThn104_N8S20505C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20505C12D0Ev,_ZTv0_n28_N9S20505C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20505C12D0Ev,_ZThn120_N9S20505C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20505C12D1Ev,_ZTv0_n28_N9S20505C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S20505C12D1Ev,_ZThn120_N9S20505C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20505C2D0Ev,_ZTv0_n12_N8S20505C2D0Ev), // 
  (VTBL_ENTRY)_ZN8S20505C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20505C2D1Ev,_ZTv0_n12_N8S20505C2D1Ev), // 
  (VTBL_ENTRY)_ZN8S20505C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20505C20D0Ev,_ZTv0_n36_N9S20505C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N9S20505C20D0Ev,_ZThn216_N9S20505C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20505C20D1Ev,_ZTv0_n36_N9S20505C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N9S20505C20D1Ev,_ZThn216_N9S20505C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C20D0Ev,_ZTv0_n12_N9S20505C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20505C20D0Ev,_ZThn16_N9S20505C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C20D1Ev,_ZTv0_n12_N9S20505C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20505C20D1Ev,_ZThn16_N9S20505C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C21D0Ev,_ZTv0_n12_N9S20505C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20505C21D0Ev,_ZThn16_N9S20505C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20505C21D1Ev,_ZTv0_n12_N9S20505C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N9S20505C21D1Ev,_ZThn16_N9S20505C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C21D0Ev,_ZTv0_n24_N9S20505C21D0Ev), // 
  (VTBL_ENTRY)_ZN9S20505C21D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20505C21D1Ev,_ZTv0_n24_N9S20505C21D1Ev), // 
  (VTBL_ENTRY)_ZN9S20505C21D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20505C1D0Ev,_ZTv0_n36_N8S20505C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S20505C1D0Ev,_ZThn216_N8S20505C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S20505C1D0Ev,_ZThn164_N8S20505C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20505C1D1Ev,_ZTv0_n36_N8S20505C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn352_N8S20505C1D1Ev,_ZThn216_N8S20505C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn272_N8S20505C1D1Ev,_ZThn164_N8S20505C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20505C1D0Ev,_ZTv0_n28_N8S20505C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S20505C1D0Ev,_ZThn152_N8S20505C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20505C1D1Ev,_ZTv0_n28_N8S20505C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S20505C1D1Ev,_ZThn152_N8S20505C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20505C1D0Ev,_ZTv0_n44_N8S20505C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20505C1D0Ev,_ZThn136_N8S20505C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20505C1D1Ev,_ZTv0_n44_N8S20505C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20505C1D1Ev,_ZThn136_N8S20505C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S20505C1D0Ev,_ZTv0_n48_N8S20505C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20505C1D0Ev,_ZThn32_N8S20505C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S20505C1D1Ev,_ZTv0_n48_N8S20505C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20505C1D1Ev,_ZThn32_N8S20505C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20505C1D0Ev,_ZTv0_n12_N8S20505C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20505C1D0Ev,_ZThn16_N8S20505C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20505C1D1Ev,_ZTv0_n12_N8S20505C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S20505C1D1Ev,_ZThn16_N8S20505C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20505C1 = {  "S20505C1", // class name
  bases_S20505C1, 48,
  &(vtc_S20505C1[0]), // expected_vtbl_contents
  &(vtt_S20505C1[0]), // expected_vtt_contents
  ABISELECT(448,272), // object size
  NSPAIRA(_ZTI8S20505C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20505C1),105, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20505C1),83, //virtual table table var
  28, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names109,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2776C5  : virtual S19566C5 , S19566C6 {
  ::S19566C5 s2776c5f0[3];
  int s2776c5f1[4];
  ~S2776C5(); // tgen
  S2776C5(); // tgen
};
//SIG(-1 S2776C5) C1{ VBC2{ m FL Fp FC3{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC3 FC2[3] Fi[4]}


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

static void Test_S2776C5()
{
  extern Class_Descriptor cd_S2776C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(198,243)];
    init_test(&cd_S2776C5, buf);
    S2776C5 *dp, &lv = *(dp=new (buf) S2776C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1576,968), "sizeof(S2776C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2776C5)");
    check_base_class_offset(lv, (S19566C5*), ABISELECT(1216,748), "S2776C5");
    check_base_class_offset(lv, (S19566C6*), ABISELECT(8,4), "S2776C5");
    check_field_offset(lv, s2776c5f0, ABISELECT(120,72), "S2776C5.s2776c5f0");
    check_field_offset(lv, s2776c5f1, ABISELECT(1200,732), "S2776C5.s2776c5f1");
    test_class_info(&lv, &cd_S2776C5);
    dp->~S2776C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2776C5(Test_S2776C5, "S2776C5", ABISELECT(1576,968));

#else // __cplusplus

extern void _ZN7S2776C5C1Ev();
extern void _ZN7S2776C5D1Ev();
Name_Map name_map_S2776C5[] = {
  NSPAIR(_ZN7S2776C5C1Ev),
  NSPAIR(_ZN7S2776C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
static Base_Class bases_S2776C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19566C6,    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 _ZTI7S2776C5[];
static  VTBL_ENTRY vtc_S2776C5[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
extern VTBL_ENTRY _ZTV7S2776C5[];
static  VTT_ENTRY vtt_S2776C5[] = {
  {&(_ZTV7S2776C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
Class_Descriptor cd_S2776C5 = {  "S2776C5", // class name
  bases_S2776C5, 2,
  &(vtc_S2776C5[0]), // expected_vtbl_contents
  &(vtt_S2776C5[0]), // expected_vtt_contents
  ABISELECT(1576,968), // object size
  NSPAIRA(_ZTI7S2776C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2776C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2776C5),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  S2776C8  : virtual S2776C5 , virtual S19566C6 {
  ::S19566C14 s2776c8f0;
  short s2776c8f1[8];
  virtual  ~S2776C8(); // _ZN7S2776C8D2Ev
  S2776C8(); // tgen
};
//SIG(-1 S2776C8) C1{ VBC2{ VBC3{ m FL Fp FC4{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC4 FC3[3] Fi[4]} VBC4 vd FU5{ m Fi FD} Fs[8]}


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

static void Test_S2776C8()
{
  extern Class_Descriptor cd_S2776C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(110,268)];
    init_test(&cd_S2776C8, buf);
    S2776C8 *dp, &lv = *(dp=new (buf) S2776C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1744,1068), "sizeof(S2776C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2776C8)");
    check_base_class_offset(lv, (S19566C5*)(S2776C5*), ABISELECT(1264,780), "S2776C8");
    check_base_class_offset(lv, (S19566C6*)(S2776C5*), ABISELECT(56,36), "S2776C8");
    check_base_class_offset(lv, (S2776C5*), ABISELECT(48,32), "S2776C8");
    /*is_ambiguous_... S2776C8::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*), ABISELECT(1624,1000), "S2776C8");
    check_field_offset(lv, s2776c8f0, ABISELECT(16,4), "S2776C8.s2776c8f0");
    check_field_offset(lv, s2776c8f1, ABISELECT(32,16), "S2776C8.s2776c8f1");
    test_class_info(&lv, &cd_S2776C8);
    dp->~S2776C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2776C8(Test_S2776C8, "S2776C8", ABISELECT(1744,1068));

#else // __cplusplus

extern void _ZN7S2776C8C1Ev();
extern void _ZN7S2776C8D2Ev();
Name_Map name_map_S2776C8[] = {
  NSPAIR(_ZN7S2776C8C1Ev),
  NSPAIR(_ZN7S2776C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
static Base_Class bases_S2776C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(1264,780), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    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
    2, //immediately_derived
  0, 0},
  {&cd_S2776C5,    ABISELECT(48,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //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_S19566C6,    ABISELECT(1624,1000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S2776C8[];
extern void _ZN7S2776C8D1Ev();
extern void _ZN7S2776C8D0Ev();
static  VTBL_ENTRY vtc_S2776C8[] = {
  ABISELECT(1624,1000),
  ABISELECT(1264,780),
  ABISELECT(48,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C8[0]),
  (VTBL_ENTRY)&_ZN7S2776C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2776C8D0Ev,
  ABISELECT(1216,748),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S2776C8[0]),
};
extern VTBL_ENTRY _ZTV7S2776C8[];
static  VTBL_ENTRY _tg__ZTV7S2776C5__7S2776C8[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
static  VTT_ENTRY vtt_S2776C8[] = {
  {&(_ZTV7S2776C8[5]),  5,10},
  {&(_ZTV7S2776C8[10]),  10,10},
  {&(_tg__ZTV7S2776C5__7S2776C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2776C8[];
extern  VTBL_ENTRY _ZTV7S2776C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C8[];
Class_Descriptor cd_S2776C8 = {  "S2776C8", // class name
  bases_S2776C8, 4,
  &(vtc_S2776C8[0]), // expected_vtbl_contents
  &(vtt_S2776C8[0]), // expected_vtt_contents
  ABISELECT(1744,1068), // object size
  NSPAIRA(_ZTI7S2776C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2776C8),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2776C8),3, //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  S2776C10  : S2776C5 , S19566C6 , S19566C5 {
  __tsi64 s2776c10f0[5];
  __tsi64 s2776c10f1;
  int s2776c10f2;
  ::S19566C5 s2776c10f3;
  void *s2776c10f4;
  ::S19566C6 s2776c10f5;
  int s2776c10f6;
  void *s2776c10f7[7];
  virtual  ~S2776C10(); // _ZN8S2776C10D2Ev
  S2776C10(); // tgen
};
//SIG(-1 S2776C10) C1{ BC2{ VBC3{ m FL Fp FC4{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC4 FC3[3] Fi[4]} BC4 BC3 vd FL[6] Fi FC3 Fp FC4 Fi Fp[7]}


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

static void Test_S2776C10()
{
  extern Class_Descriptor cd_S2776C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(332,409)];
    init_test(&cd_S2776C10, buf);
    S2776C10 *dp, &lv = *(dp=new (buf) S2776C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2648,1632), "sizeof(S2776C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2776C10)");
    check_base_class_offset(lv, (S19566C5*)(S2776C5*), ABISELECT(2288,1412), "S2776C10");
    check_base_class_offset(lv, (S19566C6*)(S2776C5*), ABISELECT(8,4), "S2776C10");
    check_base_class_offset(lv, (S2776C5*), 0, "S2776C10");
    /*is_ambiguous_... S2776C10::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*), ABISELECT(1216,748), "S2776C10");
    /*is_ambiguous_... S2776C10::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(1328,816), "S2776C10");
    check_field_offset(lv, s2776c10f0, ABISELECT(1688,1036), "S2776C10.s2776c10f0");
    check_field_offset(lv, s2776c10f1, ABISELECT(1728,1076), "S2776C10.s2776c10f1");
    check_field_offset(lv, s2776c10f2, ABISELECT(1736,1084), "S2776C10.s2776c10f2");
    check_field_offset(lv, s2776c10f3, ABISELECT(1744,1088), "S2776C10.s2776c10f3");
    check_field_offset(lv, s2776c10f4, ABISELECT(2104,1308), "S2776C10.s2776c10f4");
    check_field_offset(lv, s2776c10f5, ABISELECT(2112,1312), "S2776C10.s2776c10f5");
    check_field_offset(lv, s2776c10f6, ABISELECT(2224,1380), "S2776C10.s2776c10f6");
    check_field_offset(lv, s2776c10f7, ABISELECT(2232,1384), "S2776C10.s2776c10f7");
    test_class_info(&lv, &cd_S2776C10);
    dp->~S2776C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2776C10(Test_S2776C10, "S2776C10", ABISELECT(2648,1632));

#else // __cplusplus

extern void _ZN8S2776C10C1Ev();
extern void _ZN8S2776C10D2Ev();
Name_Map name_map_S2776C10[] = {
  NSPAIR(_ZN8S2776C10C1Ev),
  NSPAIR(_ZN8S2776C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
static Base_Class bases_S2776C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    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_S2776C5,    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_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S2776C10[];
extern void _ZN8S2776C10D1Ev();
extern void _ZN8S2776C10D0Ev();
static  VTBL_ENTRY vtc_S2776C10[] = {
  ABISELECT(2288,1412),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C10[0]),
  (VTBL_ENTRY)&_ZN8S2776C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C10D0Ev,
};
extern VTBL_ENTRY _ZTV8S2776C10[];
static  VTBL_ENTRY _tg__ZTV7S2776C5__8S2776C10[] = {
  ABISELECT(2288,1412),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
static  VTT_ENTRY vtt_S2776C10[] = {
  {&(_ZTV8S2776C10[3]),  3,5},
  {&(_tg__ZTV7S2776C5__8S2776C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2776C10[];
extern  VTBL_ENTRY _ZTV8S2776C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C10[];
Class_Descriptor cd_S2776C10 = {  "S2776C10", // class name
  bases_S2776C10, 5,
  &(vtc_S2776C10[0]), // expected_vtbl_contents
  &(vtt_S2776C10[0]), // expected_vtt_contents
  ABISELECT(2648,1632), // object size
  NSPAIRA(_ZTI8S2776C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S2776C10),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2776C10),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  S2776C12  : virtual S2776C5 , S19566C6 , S19566C5 , S2776C10 {
  int s2776c12f0;
  ::S2776C5 s2776c12f1;
  short s2776c12f2;
  void *s2776c12f3;
  int s2776c12f4[5];
  ~S2776C12(); // tgen
  S2776C12(); // tgen
};
//SIG(-1 S2776C12) C1{ VBC2{ VBC3{ m FL Fp FC4{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC4 FC3[3] Fi[4]} BC4 BC3 BC5{ BC2 BC4 BC3 vd FL[6] Fi FC3 Fp FC4 Fi Fp[7]} Fi FC2 Fs Fp Fi[5]}


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

static void Test_S2776C12()
{
  extern Class_Descriptor cd_S2776C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(746,918)];
    init_test(&cd_S2776C12, buf);
    S2776C12 *dp, &lv = *(dp=new (buf) S2776C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5960,3668), "sizeof(S2776C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2776C12)");
    /*is_ambiguous_... S2776C12::S2776C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C5*), ABISELECT(5600,3448), "S2776C12");
    check_base_class_offset(lv, (S19566C5*)(S2776C5*)(S2776C10*), ABISELECT(5600,3448), "S2776C12");
    /*is_ambiguous_... S2776C12::S2776C5 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C5*), ABISELECT(4392,2704), "S2776C12");
    /*is_ambiguous_... S2776C12::S2776C5 */ AMB_check_base_class_offset(lv, (S2776C5*), ABISELECT(4384,2700), "S2776C12");
    /*is_ambiguous_... S2776C12::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*), ABISELECT(2288,1412), "S2776C12");
    /*is_ambiguous_... S2776C12::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(2400,1480), "S2776C12");
    check_base_class_offset(lv, (S19566C6*)(S2776C5*)(S2776C10*), ABISELECT(8,4), "S2776C12");
    check_base_class_offset(lv, (S2776C5*)(S2776C10*), 0, "S2776C12");
    /*is_ambiguous_... S2776C10::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C10*), ABISELECT(1216,748), "S2776C12");
    /*is_ambiguous_... S2776C10::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C10*), ABISELECT(1328,816), "S2776C12");
    check_base_class_offset(lv, (S2776C10*), 0, "S2776C12");
    check_field_offset(lv, s2776c12f0, ABISELECT(2760,1700), "S2776C12.s2776c12f0");
    check_field_offset(lv, s2776c12f1, ABISELECT(2768,1704), "S2776C12.s2776c12f1");
    check_field_offset(lv, s2776c12f2, ABISELECT(4344,2672), "S2776C12.s2776c12f2");
    check_field_offset(lv, s2776c12f3, ABISELECT(4352,2676), "S2776C12.s2776c12f3");
    check_field_offset(lv, s2776c12f4, ABISELECT(4360,2680), "S2776C12.s2776c12f4");
    test_class_info(&lv, &cd_S2776C12);
    dp->~S2776C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2776C12(Test_S2776C12, "S2776C12", ABISELECT(5960,3668));

#else // __cplusplus

extern void _ZN8S2776C12C1Ev();
extern void _ZN8S2776C12D1Ev();
Name_Map name_map_S2776C12[] = {
  NSPAIR(_ZN8S2776C12C1Ev),
  NSPAIR(_ZN8S2776C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S2776C10;
extern VTBL_ENTRY _ZTI8S2776C10[];
extern  VTBL_ENTRY _ZTV8S2776C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C10[];
static Base_Class bases_S2776C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(5600,3448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(4392,2704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C5,    ABISELECT(4384,2700), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19566C5,    ABISELECT(2400,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
  1, 0},
  {&cd_S19566C6,    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
    6, //immediately_derived
  0, 0},
  {&cd_S2776C5,    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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C10,    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 _ZTI8S2776C12[];
extern void _ZN8S2776C12D1Ev();
extern void _ZN8S2776C12D0Ev();
static  VTBL_ENTRY vtc_S2776C12[] = {
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C12[0]),
  (VTBL_ENTRY)&_ZN8S2776C12D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C12D0Ev,
  ABISELECT(1216,748),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI8S2776C12[0]),
};
extern VTBL_ENTRY _ZTV8S2776C12[];
extern void _ZN8S2776C10D1Ev();
extern void _ZN8S2776C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C10__8S2776C12[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C10[0]),
  (VTBL_ENTRY)&_ZN8S2776C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2776C58S2776C10__A1__8S2776C12[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__8S2776C12[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
static  VTT_ENTRY vtt_S2776C12[] = {
  {&(_ZTV8S2776C12[4]),  4,9},
  {&(_tg__ZTV8S2776C10__8S2776C12[3]),  3,5},
  {&(_tg__ZTV7S2776C58S2776C10__A1__8S2776C12[3]),  3,3},
  {&(_ZTV8S2776C12[9]),  9,9},
  {&(_tg__ZTV7S2776C5__8S2776C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2776C12[];
extern  VTBL_ENTRY _ZTV8S2776C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C12[];
Class_Descriptor cd_S2776C12 = {  "S2776C12", // class name
  bases_S2776C12, 10,
  &(vtc_S2776C12[0]), // expected_vtbl_contents
  &(vtt_S2776C12[0]), // expected_vtt_contents
  ABISELECT(5960,3668), // object size
  NSPAIRA(_ZTI8S2776C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S2776C12),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2776C12),5, //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  S2776C13  : S2776C12 , S2776C5 , S2776C10 , S19566C5 {
  ::S3052C22_nt s2776c13f0;
  int s2776c13f1;
  int s2776c13f2;
  long s2776c13f3;
  void *s2776c13f4;
  virtual  ~S2776C13(); // _ZN8S2776C13D2Ev
  virtual void  v1(); // _ZN8S2776C132v1Ev
  S2776C13(); // tgen
};
//SIG(-1 S2776C13) C1{ BC2{ VBC3{ VBC4{ m FL Fp FC5{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC5 FC4[3] Fi[4]} BC5 BC4 BC6{ BC3 BC5 BC4 vd FL[6] Fi FC4 Fp FC5 Fi Fp[7]} Fi FC3 Fs Fp Fi[5]} BC3 BC6 BC4 vd v1 FC7{} Fi[2] Fl Fp}


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

static void Test_S2776C13()
{
  extern Class_Descriptor cd_S2776C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1233,1518)];
    init_test(&cd_S2776C13, buf);
    S2776C13 *dp, &lv = *(dp=new (buf) S2776C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9856,6068), "sizeof(S2776C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2776C13)");
    /*is_ambiguous_... S2776C13::S2776C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C5*), ABISELECT(9496,5848), "S2776C13");
    check_base_class_offset(lv, (S19566C5*)(S2776C5*)(S2776C10*)(S2776C12*), ABISELECT(9496,5848), "S2776C13");
    /*is_ambiguous_... S2776C13::S2776C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C5*), ABISELECT(9496,5848), "S2776C13");
    /*is_ambiguous_... S2776C13::S2776C10 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C5*)(S2776C10*), ABISELECT(9496,5848), "S2776C13");
    /*is_ambiguous_... S2776C13::S2776C5 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C5*), ABISELECT(8288,5104), "S2776C13");
    /*is_ambiguous_... S2776C12::S2776C5 */ AMB_check_base_class_offset(lv, (S2776C5*)(S2776C12*), ABISELECT(8280,5100), "S2776C13");
    /*is_ambiguous_... S2776C12::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C12*), ABISELECT(2288,1412), "S2776C13");
    /*is_ambiguous_... S2776C12::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C12*), ABISELECT(2400,1480), "S2776C13");
    check_base_class_offset(lv, (S19566C6*)(S2776C5*)(S2776C10*)(S2776C12*), ABISELECT(8,4), "S2776C13");
    check_base_class_offset(lv, (S2776C5*)(S2776C10*)(S2776C12*), 0, "S2776C13");
    /*is_ambiguous_... S2776C10::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C10*)(S2776C12*), ABISELECT(1216,748), "S2776C13");
    /*is_ambiguous_... S2776C10::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C10*)(S2776C12*), ABISELECT(1328,816), "S2776C13");
    check_base_class_offset(lv, (S2776C10*)(S2776C12*), 0, "S2776C13");
    check_base_class_offset(lv, (S2776C12*), 0, "S2776C13");
    /*is_ambiguous_... S2776C13::S2776C5 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C5*), ABISELECT(4392,2704), "S2776C13");
    /*is_ambiguous_... S2776C13::S2776C5 */ AMB_check_base_class_offset(lv, (S2776C5*), ABISELECT(4384,2700), "S2776C13");
    /*is_ambiguous_... S2776C13::S2776C10 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C5*)(S2776C10*), ABISELECT(5608,3452), "S2776C13");
    /*is_ambiguous_... S2776C13::S2776C10 */ AMB_check_base_class_offset(lv, (S2776C5*)(S2776C10*), ABISELECT(5600,3448), "S2776C13");
    /*is_ambiguous_... S2776C13::S2776C10 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C10*), ABISELECT(6816,4196), "S2776C13");
    /*is_ambiguous_... S2776C13::S2776C10 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C10*), ABISELECT(6928,4264), "S2776C13");
    /*is_ambiguous_... S2776C13::S2776C10 */ AMB_check_base_class_offset(lv, (S2776C10*), ABISELECT(5600,3448), "S2776C13");
    /*is_ambiguous_... S2776C13::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(7888,4860), "S2776C13");
    check_field_offset(lv, s2776c13f0, ABISELECT(8248,5080), "S2776C13.s2776c13f0");
    check_field_offset(lv, s2776c13f1, ABISELECT(8252,5084), "S2776C13.s2776c13f1");
    check_field_offset(lv, s2776c13f2, ABISELECT(8256,5088), "S2776C13.s2776c13f2");
    check_field_offset(lv, s2776c13f3, ABISELECT(8264,5092), "S2776C13.s2776c13f3");
    check_field_offset(lv, s2776c13f4, ABISELECT(8272,5096), "S2776C13.s2776c13f4");
    test_class_info(&lv, &cd_S2776C13);
    dp->~S2776C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2776C13(Test_S2776C13, "S2776C13", ABISELECT(9856,6068));

#else // __cplusplus

extern void _ZN8S2776C13C1Ev();
extern void _ZN8S2776C13D2Ev();
Name_Map name_map_S2776C13[] = {
  NSPAIR(_ZN8S2776C13C1Ev),
  NSPAIR(_ZN8S2776C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S2776C10;
extern VTBL_ENTRY _ZTI8S2776C10[];
extern  VTBL_ENTRY _ZTV8S2776C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C10[];
extern Class_Descriptor cd_S2776C12;
extern VTBL_ENTRY _ZTI8S2776C12[];
extern  VTBL_ENTRY _ZTV8S2776C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C12[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S2776C10;
extern VTBL_ENTRY _ZTI8S2776C10[];
extern  VTBL_ENTRY _ZTV8S2776C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C10[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
static Base_Class bases_S2776C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(9496,5848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(8288,5104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C5,    ABISELECT(8280,5100), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(2400,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
    10, //immediately_derived
  0, 0},
  {&cd_S19566C6,    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
    6, //immediately_derived
  0, 0},
  {&cd_S2776C5,    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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C10,    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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2776C12,    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_S19566C6,    ABISELECT(4392,2704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C5,    ABISELECT(4384,2700), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19566C6,    ABISELECT(5608,3452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C5,    ABISELECT(5600,3448), //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
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(6816,4196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(6928,4264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C10,    ABISELECT(5600,3448), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19566C5,    ABISELECT(7888,4860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S2776C13[];
extern void _ZN8S2776C13D1Ev();
extern void _ZN8S2776C13D0Ev();
extern void _ZN8S2776C132v1Ev();
extern void ABISELECT(_ZThn5600_N8S2776C13D1Ev,_ZThn3448_N8S2776C13D1Ev)();
extern void ABISELECT(_ZThn5600_N8S2776C13D0Ev,_ZThn3448_N8S2776C13D0Ev)();
static  VTBL_ENTRY vtc_S2776C13[] = {
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C13[0]),
  (VTBL_ENTRY)&_ZN8S2776C13D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C13D0Ev,
  (VTBL_ENTRY)&_ZN8S2776C132v1Ev,
  ABISELECT(5112,3148),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI8S2776C13[0]),
  ABISELECT(3896,2400),
  ABISELECT(-5600,-3448),
  (VTBL_ENTRY)&(_ZTI8S2776C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S2776C13D1Ev,_ZThn3448_N8S2776C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S2776C13D0Ev,_ZThn3448_N8S2776C13D0Ev),
  ABISELECT(1216,748),
  ABISELECT(-8280,-5100),
  (VTBL_ENTRY)&(_ZTI8S2776C13[0]),
};
extern VTBL_ENTRY _ZTV8S2776C13[];
extern void _ZN8S2776C12D1Ev();
extern void _ZN8S2776C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C12__8S2776C13[] = {
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C12[0]),
  (VTBL_ENTRY)&_ZN8S2776C12D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C12D0Ev,
};
extern void _ZN8S2776C10D1Ev();
extern void _ZN8S2776C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C108S2776C12__8S2776C13[] = {
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C10[0]),
  (VTBL_ENTRY)&_ZN8S2776C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2776C58S2776C108S2776C12__A1__8S2776C13[] = {
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__8S2776C12__8S2776C13[] = {
  ABISELECT(1216,748),
  ABISELECT(-8280,-5100),
  (VTBL_ENTRY)&(_ZTI8S2776C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__A__8S2776C13[] = {
  ABISELECT(5112,3148),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
extern void _ZN8S2776C10D1Ev();
extern void _ZN8S2776C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C10__A1__8S2776C13[] = {
  ABISELECT(3896,2400),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C10[0]),
  (VTBL_ENTRY)&_ZN8S2776C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2776C58S2776C10__A3__8S2776C13[] = {
  ABISELECT(3896,2400),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__8S2776C13[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
static  VTT_ENTRY vtt_S2776C13[] = {
  {&(_ZTV8S2776C13[4]),  4,18},
  {&(_tg__ZTV8S2776C12__8S2776C13[4]),  4,6},
  {&(_tg__ZTV8S2776C108S2776C12__8S2776C13[3]),  3,5},
  {&(_tg__ZTV7S2776C58S2776C108S2776C12__A1__8S2776C13[3]),  3,3},
  {&(_tg__ZTV7S2776C5__8S2776C12__8S2776C13[3]),  3,3},
  {&(_tg__ZTV7S2776C5__A__8S2776C13[3]),  3,3},
  {&(_tg__ZTV8S2776C10__A1__8S2776C13[3]),  3,5},
  {&(_tg__ZTV7S2776C58S2776C10__A3__8S2776C13[3]),  3,3},
  {&(_ZTV8S2776C13[18]),  18,18},
  {&(_ZTV8S2776C13[10]),  10,18},
  {&(_ZTV8S2776C13[13]),  13,18},
  {&(_tg__ZTV7S2776C5__8S2776C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2776C13[];
extern  VTBL_ENTRY _ZTV8S2776C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C13[];
Class_Descriptor cd_S2776C13 = {  "S2776C13", // class name
  bases_S2776C13, 19,
  &(vtc_S2776C13[0]), // expected_vtbl_contents
  &(vtt_S2776C13[0]), // expected_vtt_contents
  ABISELECT(9856,6068), // object size
  NSPAIRA(_ZTI8S2776C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S2776C13),18, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2776C13),12, //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  S2776C11  : S2776C12 , S19566C6 {
  int s2776c11f0[7];
  long s2776c11f1[7];
  short s2776c11f2[8];
  short s2776c11f3[8];
  ::S2776C5 s2776c11f4;
  void *s2776c11f5;
  ::S2776C13 s2776c11f6;
  virtual  ~S2776C11(); // _ZN8S2776C11D2Ev
  S2776C11(); // tgen
};
//SIG(-1 S2776C11) C1{ BC2{ VBC3{ VBC4{ m FL Fp FC5{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC5 FC4[3] Fi[4]} BC5 BC4 BC6{ BC3 BC5 BC4 vd FL[6] Fi FC4 Fp FC5 Fi Fp[7]} Fi FC3 Fs Fp Fi[5]} BC5 vd Fi[7] Fl[7] Fs[16] FC3 Fp FC7{ BC2 BC3 BC6 BC4 vd v1 FC8{} Fi[2] Fl Fp}}


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

static void Test_S2776C11()
{
  extern Class_Descriptor cd_S2776C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2205,2717)];
    init_test(&cd_S2776C11, buf);
    S2776C11 *dp, &lv = *(dp=new (buf) S2776C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17632,10864), "sizeof(S2776C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2776C11)");
    /*is_ambiguous_... S2776C11::S2776C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C5*), ABISELECT(17272,10644), "S2776C11");
    check_base_class_offset(lv, (S19566C5*)(S2776C5*)(S2776C10*)(S2776C12*), ABISELECT(17272,10644), "S2776C11");
    /*is_ambiguous_... S2776C11::S2776C5 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C5*), ABISELECT(16064,9900), "S2776C11");
    /*is_ambiguous_... S2776C12::S2776C5 */ AMB_check_base_class_offset(lv, (S2776C5*)(S2776C12*), ABISELECT(16056,9896), "S2776C11");
    /*is_ambiguous_... S2776C12::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C12*), ABISELECT(2288,1412), "S2776C11");
    /*is_ambiguous_... S2776C12::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C12*), ABISELECT(2400,1480), "S2776C11");
    check_base_class_offset(lv, (S19566C6*)(S2776C5*)(S2776C10*)(S2776C12*), ABISELECT(8,4), "S2776C11");
    check_base_class_offset(lv, (S2776C5*)(S2776C10*)(S2776C12*), 0, "S2776C11");
    /*is_ambiguous_... S2776C10::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C10*)(S2776C12*), ABISELECT(1216,748), "S2776C11");
    /*is_ambiguous_... S2776C10::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C10*)(S2776C12*), ABISELECT(1328,816), "S2776C11");
    check_base_class_offset(lv, (S2776C10*)(S2776C12*), 0, "S2776C11");
    check_base_class_offset(lv, (S2776C12*), 0, "S2776C11");
    /*is_ambiguous_... S2776C11::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*), ABISELECT(4384,2700), "S2776C11");
    check_field_offset(lv, s2776c11f0, ABISELECT(4496,2768), "S2776C11.s2776c11f0");
    check_field_offset(lv, s2776c11f1, ABISELECT(4528,2796), "S2776C11.s2776c11f1");
    check_field_offset(lv, s2776c11f2, ABISELECT(4584,2824), "S2776C11.s2776c11f2");
    check_field_offset(lv, s2776c11f3, ABISELECT(4600,2840), "S2776C11.s2776c11f3");
    check_field_offset(lv, s2776c11f4, ABISELECT(4616,2856), "S2776C11.s2776c11f4");
    check_field_offset(lv, s2776c11f5, ABISELECT(6192,3824), "S2776C11.s2776c11f5");
    check_field_offset(lv, s2776c11f6, ABISELECT(6200,3828), "S2776C11.s2776c11f6");
    test_class_info(&lv, &cd_S2776C11);
    dp->~S2776C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2776C11(Test_S2776C11, "S2776C11", ABISELECT(17632,10864));

#else // __cplusplus

extern void _ZN8S2776C11C1Ev();
extern void _ZN8S2776C11D2Ev();
Name_Map name_map_S2776C11[] = {
  NSPAIR(_ZN8S2776C11C1Ev),
  NSPAIR(_ZN8S2776C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S2776C10;
extern VTBL_ENTRY _ZTI8S2776C10[];
extern  VTBL_ENTRY _ZTV8S2776C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C10[];
extern Class_Descriptor cd_S2776C12;
extern VTBL_ENTRY _ZTI8S2776C12[];
extern  VTBL_ENTRY _ZTV8S2776C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C12[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
static Base_Class bases_S2776C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(17272,10644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(16064,9900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C5,    ABISELECT(16056,9896), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(2400,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
    10, //immediately_derived
  0, 0},
  {&cd_S19566C6,    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
    6, //immediately_derived
  0, 0},
  {&cd_S2776C5,    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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C10,    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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2776C12,    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_S19566C6,    ABISELECT(4384,2700), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S2776C11[];
extern void _ZN8S2776C11D1Ev();
extern void _ZN8S2776C11D0Ev();
static  VTBL_ENTRY vtc_S2776C11[] = {
  ABISELECT(16056,9896),
  ABISELECT(17272,10644),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C11[0]),
  (VTBL_ENTRY)&_ZN8S2776C11D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C11D0Ev,
  ABISELECT(1216,748),
  ABISELECT(-16056,-9896),
  (VTBL_ENTRY)&(_ZTI8S2776C11[0]),
};
extern VTBL_ENTRY _ZTV8S2776C11[];
extern void _ZN8S2776C12D1Ev();
extern void _ZN8S2776C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C12__8S2776C11[] = {
  ABISELECT(16056,9896),
  ABISELECT(17272,10644),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C12[0]),
  (VTBL_ENTRY)&_ZN8S2776C12D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C12D0Ev,
};
extern void _ZN8S2776C10D1Ev();
extern void _ZN8S2776C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C108S2776C12__8S2776C11[] = {
  ABISELECT(17272,10644),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C10[0]),
  (VTBL_ENTRY)&_ZN8S2776C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2776C58S2776C108S2776C12__A1__8S2776C11[] = {
  ABISELECT(17272,10644),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__8S2776C12__8S2776C11[] = {
  ABISELECT(1216,748),
  ABISELECT(-16056,-9896),
  (VTBL_ENTRY)&(_ZTI8S2776C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__8S2776C11[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
static  VTT_ENTRY vtt_S2776C11[] = {
  {&(_ZTV8S2776C11[4]),  4,9},
  {&(_tg__ZTV8S2776C12__8S2776C11[4]),  4,6},
  {&(_tg__ZTV8S2776C108S2776C12__8S2776C11[3]),  3,5},
  {&(_tg__ZTV7S2776C58S2776C108S2776C12__A1__8S2776C11[3]),  3,3},
  {&(_tg__ZTV7S2776C5__8S2776C12__8S2776C11[3]),  3,3},
  {&(_ZTV8S2776C11[9]),  9,9},
  {&(_tg__ZTV7S2776C5__8S2776C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2776C11[];
extern  VTBL_ENTRY _ZTV8S2776C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C11[];
Class_Descriptor cd_S2776C11 = {  "S2776C11", // class name
  bases_S2776C11, 12,
  &(vtc_S2776C11[0]), // expected_vtbl_contents
  &(vtt_S2776C11[0]), // expected_vtt_contents
  ABISELECT(17632,10864), // object size
  NSPAIRA(_ZTI8S2776C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S2776C11),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2776C11),7, //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  S2776C2  : S19566C11 , virtual S2776C5 , virtual S2776C8 , virtual S2776C10 , S2776C11 {
  int s2776c2f0;
  virtual  ~S2776C2(); // _ZN7S2776C2D2Ev
  S2776C2(); // tgen
};
//SIG(-1 S2776C2) C1{ BC2{ m Fp Fc Fi:6 Fl FC3{} Fi} VBC4{ VBC5{ m FL Fp FC6{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC6 FC5[3] Fi[4]} VBC7{ VBC4 VBC6 vd FU8{ m Fi FD} Fs[8]} VBC9{ BC4 BC6 BC5 vd FL[5] FL Fi FC5 Fp FC6 Fi Fp[7]} BC10{ BC11{ VBC4 BC6 BC5 BC9 Fi FC4 Fs Fp Fi[5]} BC6 vd Fi[7] Fl[7] Fs[8] Fs[8] FC4 Fp FC12{ BC11 BC4 BC9 BC5 vd v1 FC3 Fi Fi Fl Fp}} vd Fi}


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

static void Test_S2776C2()
{
  extern Class_Descriptor cd_S2776C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1259,3101)];
    init_test(&cd_S2776C2, buf);
    S2776C2 *dp, &lv = *(dp=new (buf) S2776C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20128,12400), "sizeof(S2776C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2776C2)");
    check_base_class_offset(lv, (S19566C11*), ABISELECT(16056,9896), "S2776C2");
    /*is_ambiguous_... S2776C2::S2776C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C5*), ABISELECT(17312,10668), "S2776C2");
    /*is_ambiguous_... S2776C2::S2776C10 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C5*)(S2776C10*), ABISELECT(17312,10668), "S2776C2");
    check_base_class_offset(lv, (S19566C5*)(S2776C5*)(S2776C10*)(S2776C12*)(S2776C11*), ABISELECT(17312,10668), "S2776C2");
    /*is_ambiguous_... S2776C2::S2776C5 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C5*), ABISELECT(16104,9924), "S2776C2");
    /*is_ambiguous_... S2776C2::S2776C5 */ AMB_check_base_class_offset(lv, (S2776C5*), ABISELECT(16096,9920), "S2776C2");
    check_base_class_offset(lv, (S2776C5*)(S2776C8*), ABISELECT(16096,9920), "S2776C2");
    /*is_ambiguous_... S2776C12::S2776C5 */ AMB_check_base_class_offset(lv, (S2776C5*)(S2776C12*)(S2776C11*), ABISELECT(16096,9920), "S2776C2");
    /*is_ambiguous_... S2776C8::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C8*), ABISELECT(17728,10920), "S2776C2");
    check_base_class_offset(lv, (S2776C8*), ABISELECT(17680,10888), "S2776C2");
    /*is_ambiguous_... S2776C2::S2776C10 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C5*)(S2776C10*), ABISELECT(17848,10992), "S2776C2");
    /*is_ambiguous_... S2776C2::S2776C10 */ AMB_check_base_class_offset(lv, (S2776C5*)(S2776C10*), ABISELECT(17840,10988), "S2776C2");
    /*is_ambiguous_... S2776C2::S2776C10 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C10*), ABISELECT(19056,11736), "S2776C2");
    /*is_ambiguous_... S2776C2::S2776C10 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C10*), ABISELECT(19168,11804), "S2776C2");
    /*is_ambiguous_... S2776C2::S2776C10 */ AMB_check_base_class_offset(lv, (S2776C10*), ABISELECT(17840,10988), "S2776C2");
    /*is_ambiguous_... S2776C12::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C12*)(S2776C11*), ABISELECT(2288,1412), "S2776C2");
    /*is_ambiguous_... S2776C12::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C12*)(S2776C11*), ABISELECT(2400,1480), "S2776C2");
    check_base_class_offset(lv, (S19566C6*)(S2776C5*)(S2776C10*)(S2776C12*)(S2776C11*), ABISELECT(8,4), "S2776C2");
    check_base_class_offset(lv, (S2776C5*)(S2776C10*)(S2776C12*)(S2776C11*), 0, "S2776C2");
    /*is_ambiguous_... S2776C10::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C10*)(S2776C12*)(S2776C11*), ABISELECT(1216,748), "S2776C2");
    /*is_ambiguous_... S2776C10::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C10*)(S2776C12*)(S2776C11*), ABISELECT(1328,816), "S2776C2");
    check_base_class_offset(lv, (S2776C10*)(S2776C12*)(S2776C11*), 0, "S2776C2");
    check_base_class_offset(lv, (S2776C12*)(S2776C11*), 0, "S2776C2");
    /*is_ambiguous_... S2776C11::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C11*), ABISELECT(4384,2700), "S2776C2");
    check_base_class_offset(lv, (S2776C11*), 0, "S2776C2");
    check_field_offset(lv, s2776c2f0, ABISELECT(16088,9916), "S2776C2.s2776c2f0");
    test_class_info(&lv, &cd_S2776C2);
    dp->~S2776C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2776C2(Test_S2776C2, "S2776C2", ABISELECT(20128,12400));

#else // __cplusplus

extern void _ZN7S2776C2C1Ev();
extern void _ZN7S2776C2D2Ev();
Name_Map name_map_S2776C2[] = {
  NSPAIR(_ZN7S2776C2C1Ev),
  NSPAIR(_ZN7S2776C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C11;
extern VTBL_ENTRY _ZTI9S19566C11[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C8;
extern VTBL_ENTRY _ZTI7S2776C8[];
extern  VTBL_ENTRY _ZTV7S2776C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C8[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S2776C10;
extern VTBL_ENTRY _ZTI8S2776C10[];
extern  VTBL_ENTRY _ZTV8S2776C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C10[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S2776C10;
extern VTBL_ENTRY _ZTI8S2776C10[];
extern  VTBL_ENTRY _ZTV8S2776C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C10[];
extern Class_Descriptor cd_S2776C12;
extern VTBL_ENTRY _ZTI8S2776C12[];
extern  VTBL_ENTRY _ZTV8S2776C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C12[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C11;
extern VTBL_ENTRY _ZTI8S2776C11[];
extern  VTBL_ENTRY _ZTV8S2776C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C11[];
static Base_Class bases_S2776C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C11,    ABISELECT(16056,9896), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19566C5,    ABISELECT(17312,10668), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(16104,9924), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C5,    ABISELECT(16096,9920), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(17728,10920), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C8,    ABISELECT(17680,10888), //bcp->offset
    12, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(17848,10992), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C5,    ABISELECT(17840,10988), //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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(19056,11736), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(19168,11804), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C10,    ABISELECT(17840,10988), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(2400,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
    18, //immediately_derived
  0, 0},
  {&cd_S19566C6,    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
    14, //immediately_derived
  0, 0},
  {&cd_S2776C5,    0, //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
    5, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C10,    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
    18, //immediately_derived
  0, 0},
  {&cd_S2776C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(4384,2700), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C11,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2776C2[];
extern void _ZN7S2776C2D1Ev();
extern void _ZN7S2776C2D0Ev();
extern void ABISELECT(_ZTv0_n48_N7S2776C2D1Ev,_ZTv0_n24_N7S2776C2D1Ev)();
extern void ABISELECT(_ZThn17680_N7S2776C2D1Ev,_ZThn10888_N7S2776C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S2776C2D0Ev,_ZTv0_n24_N7S2776C2D0Ev)();
extern void ABISELECT(_ZThn17680_N7S2776C2D0Ev,_ZThn10888_N7S2776C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S2776C2D1Ev,_ZTv0_n16_N7S2776C2D1Ev)();
extern void ABISELECT(_ZThn17840_N7S2776C2D1Ev,_ZThn10988_N7S2776C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S2776C2D0Ev,_ZTv0_n16_N7S2776C2D0Ev)();
extern void ABISELECT(_ZThn17840_N7S2776C2D0Ev,_ZThn10988_N7S2776C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2776C2[] = {
  ABISELECT(17840,10988),
  ABISELECT(17728,10920),
  ABISELECT(17680,10888),
  ABISELECT(16096,9920),
  ABISELECT(17312,10668),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C2[0]),
  (VTBL_ENTRY)&_ZN7S2776C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2776C2D0Ev,
  ABISELECT(1216,748),
  ABISELECT(-16096,-9920),
  (VTBL_ENTRY)&(_ZTI7S2776C2[0]),
  ABISELECT(-17680,-10888),
  ABISELECT(48,32),
  ABISELECT(-368,-220),
  ABISELECT(-1584,-968),
  ABISELECT(-17680,-10888),
  (VTBL_ENTRY)&(_ZTI7S2776C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S2776C2D1Ev,_ZTv0_n24_N7S2776C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S2776C2D0Ev,_ZTv0_n24_N7S2776C2D0Ev),
  ABISELECT(-17840,-10988),
  ABISELECT(-528,-320),
  ABISELECT(-17840,-10988),
  (VTBL_ENTRY)&(_ZTI7S2776C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2776C2D1Ev,_ZTv0_n16_N7S2776C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2776C2D0Ev,_ZTv0_n16_N7S2776C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S2776C2[];
extern void _ZN8S2776C11D1Ev();
extern void _ZN8S2776C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C11__7S2776C2[] = {
  ABISELECT(16096,9920),
  ABISELECT(17312,10668),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C11[0]),
  (VTBL_ENTRY)&_ZN8S2776C11D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C11D0Ev,
};
extern void _ZN8S2776C12D1Ev();
extern void _ZN8S2776C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C128S2776C11__7S2776C2[] = {
  ABISELECT(16096,9920),
  ABISELECT(17312,10668),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C12[0]),
  (VTBL_ENTRY)&_ZN8S2776C12D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C12D0Ev,
};
extern void _ZN8S2776C10D1Ev();
extern void _ZN8S2776C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C108S2776C128S2776C11__A1__7S2776C2[] = {
  ABISELECT(17312,10668),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C10[0]),
  (VTBL_ENTRY)&_ZN8S2776C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2776C58S2776C108S2776C128S2776C11__A2__7S2776C2[] = {
  ABISELECT(17312,10668),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__8S2776C128S2776C11__7S2776C2[] = {
  ABISELECT(1216,748),
  ABISELECT(-16096,-9920),
  (VTBL_ENTRY)&(_ZTI8S2776C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__8S2776C11__7S2776C2[] = {
  ABISELECT(1216,748),
  ABISELECT(-16096,-9920),
  (VTBL_ENTRY)&(_ZTI8S2776C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__7S2776C2[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
extern void _ZN7S2776C8D1Ev();
extern void _ZN7S2776C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2776C8__7S2776C2[] = {
  ABISELECT(48,32),
  ABISELECT(-368,-220),
  ABISELECT(-1584,-968),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C8[0]),
  (VTBL_ENTRY)&_ZN7S2776C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2776C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__7S2776C8__7S2776C2[] = {
  ABISELECT(1216,748),
  ABISELECT(1584,968),
  (VTBL_ENTRY)&(_ZTI7S2776C8[0]),
};
extern void _ZN8S2776C10D1Ev();
extern void _ZN8S2776C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C10__7S2776C2[] = {
  ABISELECT(-528,-320),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C10[0]),
  (VTBL_ENTRY)&_ZN8S2776C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2776C58S2776C10__A1__7S2776C2[] = {
  ABISELECT(-528,-320),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
static  VTT_ENTRY vtt_S2776C2[] = {
  {&(_ZTV7S2776C2[7]),  7,26},
  {&(_tg__ZTV8S2776C11__7S2776C2[4]),  4,6},
  {&(_tg__ZTV8S2776C128S2776C11__7S2776C2[4]),  4,6},
  {&(_tg__ZTV8S2776C108S2776C128S2776C11__A1__7S2776C2[3]),  3,5},
  {&(_tg__ZTV7S2776C58S2776C108S2776C128S2776C11__A2__7S2776C2[3]),  3,3},
  {&(_tg__ZTV7S2776C5__8S2776C128S2776C11__7S2776C2[3]),  3,3},
  {&(_tg__ZTV7S2776C5__8S2776C11__7S2776C2[3]),  3,3},
  {&(_ZTV7S2776C2[12]),  12,26},
  {&(_ZTV7S2776C2[18]),  18,26},
  {&(_ZTV7S2776C2[24]),  24,26},
  {&(_tg__ZTV7S2776C5__7S2776C2[3]),  3,3},
  {&(_tg__ZTV7S2776C8__7S2776C2[5]),  5,7},
  {&(_tg__ZTV7S2776C5__7S2776C8__7S2776C2[3]),  3,3},
  {&(_tg__ZTV8S2776C10__7S2776C2[3]),  3,5},
  {&(_tg__ZTV7S2776C58S2776C10__A1__7S2776C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2776C2[];
extern  VTBL_ENTRY _ZTV7S2776C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C2[];
static VTBL_ENTRY alt_thunk_names110[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S2776C2D0Ev,_ZTv0_n16_N7S2776C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17840_N7S2776C2D0Ev,_ZThn10988_N7S2776C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S2776C2D1Ev,_ZTv0_n16_N7S2776C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17840_N7S2776C2D1Ev,_ZThn10988_N7S2776C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S2776C2D0Ev,_ZTv0_n24_N7S2776C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17680_N7S2776C2D0Ev,_ZThn10888_N7S2776C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S2776C2D1Ev,_ZTv0_n24_N7S2776C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17680_N7S2776C2D1Ev,_ZThn10888_N7S2776C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2776C2 = {  "S2776C2", // class name
  bases_S2776C2, 21,
  &(vtc_S2776C2[0]), // expected_vtbl_contents
  &(vtt_S2776C2[0]), // expected_vtt_contents
  ABISELECT(20128,12400), // object size
  NSPAIRA(_ZTI7S2776C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S2776C2),26, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2776C2),15, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names110,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2776C14  : virtual S2776C13 , S2776C2 {
  short s2776c14f0[8];
  void *s2776c14f1;
  ~S2776C14(); // tgen
  S2776C14(); // tgen
};
//SIG(-1 S2776C14) C1{ VBC2{ BC3{ VBC4{ VBC5{ m FL Fp FC6{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC6 FC5[3] Fi[4]} BC6 BC5 BC7{ BC4 BC6 BC5 vd FL[6] Fi FC5 Fp FC6 Fi Fp[7]} Fi FC4 Fs Fp Fi[5]} BC4 BC7 BC5 vd v1 FC8{} Fi[2] Fl Fp} BC9{ BC10{ m Fp Fc Fi:6 Fl FC8 Fi} VBC4 VBC11{ VBC4 VBC6 vd FU12{ m Fi FD} Fs[8]} VBC7 BC13{ BC3 BC6 vd Fi[7] Fl[7] Fs[8] Fs[8] FC4 Fp FC2} vd Fi} Fs[8] Fp}


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

static void Test_S2776C14()
{
  extern Class_Descriptor cd_S2776C14;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1778,4381)];
    init_test(&cd_S2776C14, buf);
    S2776C14 *dp, &lv = *(dp=new (buf) S2776C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(28432,17520), "sizeof(S2776C14)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2776C14)");
    /*is_ambiguous_... S2776C14::S2776C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C5*), ABISELECT(25616,15788), "S2776C14");
    check_base_class_offset(lv, (S19566C5*)(S2776C5*)(S2776C10*)(S2776C12*)(S2776C13*), ABISELECT(25616,15788), "S2776C14");
    /*is_ambiguous_... S2776C13::S2776C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C5*)(S2776C13*), ABISELECT(25616,15788), "S2776C14");
    /*is_ambiguous_... S2776C13::S2776C10 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C5*)(S2776C10*)(S2776C13*), ABISELECT(25616,15788), "S2776C14");
    /*is_ambiguous_... S2776C14::S2776C10 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C5*)(S2776C10*), ABISELECT(25616,15788), "S2776C14");
    check_base_class_offset(lv, (S19566C5*)(S2776C5*)(S2776C10*)(S2776C12*)(S2776C11*)(S2776C2*), ABISELECT(25616,15788), "S2776C14");
    /*is_ambiguous_... S2776C14::S2776C5 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C5*), ABISELECT(24408,15044), "S2776C14");
    /*is_ambiguous_... S2776C12::S2776C5 */ AMB_check_base_class_offset(lv, (S2776C5*)(S2776C12*)(S2776C13*), ABISELECT(24400,15040), "S2776C14");
    /*is_ambiguous_... S2776C2::S2776C5 */ AMB_check_base_class_offset(lv, (S2776C5*)(S2776C2*), ABISELECT(24400,15040), "S2776C14");
    check_base_class_offset(lv, (S2776C5*)(S2776C8*), ABISELECT(24400,15040), "S2776C14");
    /*is_ambiguous_... S2776C12::S2776C5 */ AMB_check_base_class_offset(lv, (S2776C5*)(S2776C12*)(S2776C11*)(S2776C2*), ABISELECT(24400,15040), "S2776C14");
    /*is_ambiguous_... S2776C12::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C12*)(S2776C13*), ABISELECT(18408,11352), "S2776C14");
    /*is_ambiguous_... S2776C12::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C12*)(S2776C13*), ABISELECT(18520,11420), "S2776C14");
    check_base_class_offset(lv, (S19566C6*)(S2776C5*)(S2776C10*)(S2776C12*)(S2776C13*), ABISELECT(16128,9944), "S2776C14");
    check_base_class_offset(lv, (S2776C5*)(S2776C10*)(S2776C12*)(S2776C13*), ABISELECT(16120,9940), "S2776C14");
    /*is_ambiguous_... S2776C10::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C10*)(S2776C12*)(S2776C13*), ABISELECT(17336,10688), "S2776C14");
    /*is_ambiguous_... S2776C10::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C10*)(S2776C12*)(S2776C13*), ABISELECT(17448,10756), "S2776C14");
    check_base_class_offset(lv, (S2776C10*)(S2776C12*)(S2776C13*), ABISELECT(16120,9940), "S2776C14");
    check_base_class_offset(lv, (S2776C12*)(S2776C13*), ABISELECT(16120,9940), "S2776C14");
    /*is_ambiguous_... S2776C13::S2776C5 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C5*)(S2776C13*), ABISELECT(20512,12644), "S2776C14");
    /*is_ambiguous_... S2776C13::S2776C5 */ AMB_check_base_class_offset(lv, (S2776C5*)(S2776C13*), ABISELECT(20504,12640), "S2776C14");
    /*is_ambiguous_... S2776C13::S2776C10 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C5*)(S2776C10*)(S2776C13*), ABISELECT(21728,13392), "S2776C14");
    /*is_ambiguous_... S2776C13::S2776C10 */ AMB_check_base_class_offset(lv, (S2776C5*)(S2776C10*)(S2776C13*), ABISELECT(21720,13388), "S2776C14");
    /*is_ambiguous_... S2776C13::S2776C10 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C10*)(S2776C13*), ABISELECT(22936,14136), "S2776C14");
    /*is_ambiguous_... S2776C13::S2776C10 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C10*)(S2776C13*), ABISELECT(23048,14204), "S2776C14");
    /*is_ambiguous_... S2776C13::S2776C10 */ AMB_check_base_class_offset(lv, (S2776C10*)(S2776C13*), ABISELECT(21720,13388), "S2776C14");
    /*is_ambiguous_... S2776C13::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C13*), ABISELECT(24008,14800), "S2776C14");
    check_base_class_offset(lv, (S2776C13*), ABISELECT(16120,9940), "S2776C14");
    check_base_class_offset(lv, (S19566C11*)(S2776C2*), ABISELECT(16056,9896), "S2776C14");
    /*is_ambiguous_... S2776C8::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C8*), ABISELECT(26032,16040), "S2776C14");
    check_base_class_offset(lv, (S2776C8*)(S2776C2*), ABISELECT(25984,16008), "S2776C14");
    /*is_ambiguous_... S2776C14::S2776C10 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C5*)(S2776C10*), ABISELECT(26152,16112), "S2776C14");
    /*is_ambiguous_... S2776C14::S2776C10 */ AMB_check_base_class_offset(lv, (S2776C5*)(S2776C10*), ABISELECT(26144,16108), "S2776C14");
    /*is_ambiguous_... S2776C14::S2776C10 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C10*), ABISELECT(27360,16856), "S2776C14");
    /*is_ambiguous_... S2776C14::S2776C10 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C10*), ABISELECT(27472,16924), "S2776C14");
    /*is_ambiguous_... S2776C2::S2776C10 */ AMB_check_base_class_offset(lv, (S2776C10*)(S2776C2*), ABISELECT(26144,16108), "S2776C14");
    /*is_ambiguous_... S2776C12::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C12*)(S2776C11*)(S2776C2*), ABISELECT(2288,1412), "S2776C14");
    /*is_ambiguous_... S2776C12::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C12*)(S2776C11*)(S2776C2*), ABISELECT(2400,1480), "S2776C14");
    check_base_class_offset(lv, (S19566C6*)(S2776C5*)(S2776C10*)(S2776C12*)(S2776C11*)(S2776C2*), ABISELECT(8,4), "S2776C14");
    check_base_class_offset(lv, (S2776C5*)(S2776C10*)(S2776C12*)(S2776C11*)(S2776C2*), 0, "S2776C14");
    /*is_ambiguous_... S2776C10::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C10*)(S2776C12*)(S2776C11*)(S2776C2*), ABISELECT(1216,748), "S2776C14");
    /*is_ambiguous_... S2776C10::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C10*)(S2776C12*)(S2776C11*)(S2776C2*), ABISELECT(1328,816), "S2776C14");
    check_base_class_offset(lv, (S2776C10*)(S2776C12*)(S2776C11*)(S2776C2*), 0, "S2776C14");
    check_base_class_offset(lv, (S2776C12*)(S2776C11*)(S2776C2*), 0, "S2776C14");
    /*is_ambiguous_... S2776C11::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C11*)(S2776C2*), ABISELECT(4384,2700), "S2776C14");
    check_base_class_offset(lv, (S2776C11*)(S2776C2*), 0, "S2776C14");
    check_base_class_offset(lv, (S2776C2*), 0, "S2776C14");
    check_field_offset(lv, s2776c14f0, ABISELECT(16092,9920), "S2776C14.s2776c14f0");
    check_field_offset(lv, s2776c14f1, ABISELECT(16112,9936), "S2776C14.s2776c14f1");
    test_class_info(&lv, &cd_S2776C14);
    dp->~S2776C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2776C14(Test_S2776C14, "S2776C14", ABISELECT(28432,17520));

#else // __cplusplus

extern void _ZN8S2776C14C1Ev();
extern void _ZN8S2776C14D1Ev();
Name_Map name_map_S2776C14[] = {
  NSPAIR(_ZN8S2776C14C1Ev),
  NSPAIR(_ZN8S2776C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S2776C10;
extern VTBL_ENTRY _ZTI8S2776C10[];
extern  VTBL_ENTRY _ZTV8S2776C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C10[];
extern Class_Descriptor cd_S2776C12;
extern VTBL_ENTRY _ZTI8S2776C12[];
extern  VTBL_ENTRY _ZTV8S2776C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C12[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S2776C10;
extern VTBL_ENTRY _ZTI8S2776C10[];
extern  VTBL_ENTRY _ZTV8S2776C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C10[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S2776C13;
extern VTBL_ENTRY _ZTI8S2776C13[];
extern  VTBL_ENTRY _ZTV8S2776C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C13[];
extern Class_Descriptor cd_S19566C11;
extern VTBL_ENTRY _ZTI9S19566C11[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C8;
extern VTBL_ENTRY _ZTI7S2776C8[];
extern  VTBL_ENTRY _ZTV7S2776C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C8[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S2776C10;
extern VTBL_ENTRY _ZTI8S2776C10[];
extern  VTBL_ENTRY _ZTV8S2776C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C10[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S2776C10;
extern VTBL_ENTRY _ZTI8S2776C10[];
extern  VTBL_ENTRY _ZTV8S2776C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C10[];
extern Class_Descriptor cd_S2776C12;
extern VTBL_ENTRY _ZTI8S2776C12[];
extern  VTBL_ENTRY _ZTV8S2776C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C12[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C11;
extern VTBL_ENTRY _ZTI8S2776C11[];
extern  VTBL_ENTRY _ZTV8S2776C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C11[];
extern Class_Descriptor cd_S2776C2;
extern VTBL_ENTRY _ZTI7S2776C2[];
extern  VTBL_ENTRY _ZTV7S2776C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C2[];
static Base_Class bases_S2776C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(25616,15788), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(24408,15044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C5,    ABISELECT(24400,15040), //bcp->offset
    27, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(18408,11352), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(18520,11420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(16128,9944), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C5,    ABISELECT(16120,9940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(17336,10688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(17448,10756), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C10,    ABISELECT(16120,9940), //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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2776C12,    ABISELECT(16120,9940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(20512,12644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C5,    ABISELECT(20504,12640), //bcp->offset
    19, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(21728,13392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C5,    ABISELECT(21720,13388), //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
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(22936,14136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(23048,14204), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C10,    ABISELECT(21720,13388), //bcp->offset
    22, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(24008,14800), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C13,    ABISELECT(16120,9940), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C11,    ABISELECT(16056,9896), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(26032,16040), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S2776C8,    ABISELECT(25984,16008), //bcp->offset
    30, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    38, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(26152,16112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C5,    ABISELECT(26144,16108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(27360,16856), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(27472,16924), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S2776C10,    ABISELECT(26144,16108), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    38, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(2400,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
    35, //immediately_derived
  0, 0},
  {&cd_S19566C6,    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_S2776C5,    0, //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
    34, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S2776C10,    0, //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
    13, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S2776C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(4384,2700), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S2776C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S2776C2,    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
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2776C14[];
extern void _ZN8S2776C14D1Ev();
extern void _ZN8S2776C14D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S2776C14D1Ev,_ZTv0_n20_N8S2776C14D1Ev)();
extern void ABISELECT(_ZThn16120_N8S2776C14D1Ev,_ZThn9940_N8S2776C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2776C14D0Ev,_ZTv0_n20_N8S2776C14D0Ev)();
extern void ABISELECT(_ZThn16120_N8S2776C14D0Ev,_ZThn9940_N8S2776C14D0Ev)() __attribute__((weak));
extern void _ZN8S2776C132v1Ev();
extern void ABISELECT(_ZTvn5600_n40_N8S2776C14D1Ev,_ZTvn3448_n20_N8S2776C14D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N8S2776C14D0Ev,_ZTvn3448_n20_N8S2776C14D0Ev)();
extern void ABISELECT(_ZTv0_n48_N8S2776C14D1Ev,_ZTv0_n24_N8S2776C14D1Ev)();
extern void ABISELECT(_ZThn25984_N8S2776C14D1Ev,_ZThn16008_N8S2776C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S2776C14D0Ev,_ZTv0_n24_N8S2776C14D0Ev)();
extern void ABISELECT(_ZThn25984_N8S2776C14D0Ev,_ZThn16008_N8S2776C14D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S2776C14D1Ev,_ZTv0_n16_N8S2776C14D1Ev)();
extern void ABISELECT(_ZThn26144_N8S2776C14D1Ev,_ZThn16108_N8S2776C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S2776C14D0Ev,_ZTv0_n16_N8S2776C14D0Ev)();
extern void ABISELECT(_ZThn26144_N8S2776C14D0Ev,_ZThn16108_N8S2776C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2776C14[] = {
  ABISELECT(16120,9940),
  ABISELECT(26144,16108),
  ABISELECT(26032,16040),
  ABISELECT(25984,16008),
  ABISELECT(24400,15040),
  ABISELECT(25616,15788),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C14[0]),
  (VTBL_ENTRY)&_ZN8S2776C14D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C14D0Ev,
  0,
  ABISELECT(-16120,-9940),
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  ABISELECT(-16120,-9940),
  (VTBL_ENTRY)&(_ZTI8S2776C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2776C14D1Ev,_ZTv0_n20_N8S2776C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2776C14D0Ev,_ZTv0_n20_N8S2776C14D0Ev),
  (VTBL_ENTRY)&_ZN8S2776C132v1Ev,
  ABISELECT(5112,3148),
  ABISELECT(-20504,-12640),
  (VTBL_ENTRY)&(_ZTI8S2776C14[0]),
  ABISELECT(3896,2400),
  ABISELECT(-21720,-13388),
  (VTBL_ENTRY)&(_ZTI8S2776C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N8S2776C14D1Ev,_ZTvn3448_n20_N8S2776C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N8S2776C14D0Ev,_ZTvn3448_n20_N8S2776C14D0Ev),
  ABISELECT(1216,748),
  ABISELECT(-24400,-15040),
  (VTBL_ENTRY)&(_ZTI8S2776C14[0]),
  ABISELECT(-25984,-16008),
  ABISELECT(48,32),
  ABISELECT(-368,-220),
  ABISELECT(-1584,-968),
  ABISELECT(-25984,-16008),
  (VTBL_ENTRY)&(_ZTI8S2776C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S2776C14D1Ev,_ZTv0_n24_N8S2776C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S2776C14D0Ev,_ZTv0_n24_N8S2776C14D0Ev),
  ABISELECT(-26144,-16108),
  ABISELECT(-528,-320),
  ABISELECT(-26144,-16108),
  (VTBL_ENTRY)&(_ZTI8S2776C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S2776C14D1Ev,_ZTv0_n16_N8S2776C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S2776C14D0Ev,_ZTv0_n16_N8S2776C14D0Ev),
};
extern VTBL_ENTRY _ZTV8S2776C14[];
extern void _ZN7S2776C2D1Ev();
extern void _ZN7S2776C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2776C2__8S2776C14[] = {
  ABISELECT(26144,16108),
  ABISELECT(26032,16040),
  ABISELECT(25984,16008),
  ABISELECT(24400,15040),
  ABISELECT(25616,15788),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C2[0]),
  (VTBL_ENTRY)&_ZN7S2776C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2776C2D0Ev,
};
extern void _ZN8S2776C11D1Ev();
extern void _ZN8S2776C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C117S2776C2__8S2776C14[] = {
  ABISELECT(24400,15040),
  ABISELECT(25616,15788),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C11[0]),
  (VTBL_ENTRY)&_ZN8S2776C11D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C11D0Ev,
};
extern void _ZN8S2776C12D1Ev();
extern void _ZN8S2776C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C128S2776C117S2776C2__A1__8S2776C14[] = {
  ABISELECT(24400,15040),
  ABISELECT(25616,15788),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C12[0]),
  (VTBL_ENTRY)&_ZN8S2776C12D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C12D0Ev,
};
extern void _ZN8S2776C10D1Ev();
extern void _ZN8S2776C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C108S2776C128S2776C117S2776C2__A3__8S2776C14[] = {
  ABISELECT(25616,15788),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C10[0]),
  (VTBL_ENTRY)&_ZN8S2776C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2776C58S2776C108S2776C128S2776C117S2776C2__A5__8S2776C14[] = {
  ABISELECT(25616,15788),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__8S2776C128S2776C117S2776C2__A1__8S2776C14[] = {
  ABISELECT(1216,748),
  ABISELECT(-24400,-15040),
  (VTBL_ENTRY)&(_ZTI8S2776C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__8S2776C117S2776C2__8S2776C14[] = {
  ABISELECT(1216,748),
  ABISELECT(-24400,-15040),
  (VTBL_ENTRY)&(_ZTI8S2776C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__7S2776C2__8S2776C14[] = {
  ABISELECT(1216,748),
  ABISELECT(-24400,-15040),
  (VTBL_ENTRY)&(_ZTI7S2776C2[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S2776C2D1Ev,_ZTv0_n24_N7S2776C2D1Ev)();
extern void ABISELECT(_ZThn25984_N7S2776C2D1Ev,_ZThn16008_N7S2776C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S2776C2D0Ev,_ZTv0_n24_N7S2776C2D0Ev)();
extern void ABISELECT(_ZThn25984_N7S2776C2D0Ev,_ZThn16008_N7S2776C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2776C8__7S2776C2__8S2776C14[] = {
  ABISELECT(-25984,-16008),
  ABISELECT(48,32),
  ABISELECT(-368,-220),
  ABISELECT(-1584,-968),
  ABISELECT(-25984,-16008),
  (VTBL_ENTRY)&(_ZTI7S2776C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S2776C2D1Ev,_ZTv0_n24_N7S2776C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S2776C2D0Ev,_ZTv0_n24_N7S2776C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S2776C2D1Ev,_ZTv0_n16_N7S2776C2D1Ev)();
extern void ABISELECT(_ZThn26144_N7S2776C2D1Ev,_ZThn16108_N7S2776C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S2776C2D0Ev,_ZTv0_n16_N7S2776C2D0Ev)();
extern void ABISELECT(_ZThn26144_N7S2776C2D0Ev,_ZThn16108_N7S2776C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2776C10__7S2776C2__8S2776C14[] = {
  ABISELECT(-26144,-16108),
  ABISELECT(-528,-320),
  ABISELECT(-26144,-16108),
  (VTBL_ENTRY)&(_ZTI7S2776C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2776C2D1Ev,_ZTv0_n16_N7S2776C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2776C2D0Ev,_ZTv0_n16_N7S2776C2D0Ev),
};
extern void _ZN8S2776C13D1Ev();
extern void _ZN8S2776C13D0Ev();
extern void _ZN8S2776C132v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C13__8S2776C14[] = {
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C13[0]),
  (VTBL_ENTRY)&_ZN8S2776C13D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C13D0Ev,
  (VTBL_ENTRY)&_ZN8S2776C132v1Ev,
};
extern void _ZN8S2776C12D1Ev();
extern void _ZN8S2776C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C128S2776C13__8S2776C14[] = {
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C12[0]),
  (VTBL_ENTRY)&_ZN8S2776C12D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C12D0Ev,
};
extern void _ZN8S2776C10D1Ev();
extern void _ZN8S2776C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C108S2776C128S2776C13__8S2776C14[] = {
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C10[0]),
  (VTBL_ENTRY)&_ZN8S2776C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2776C58S2776C108S2776C128S2776C13__A1__8S2776C14[] = {
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__8S2776C128S2776C13__8S2776C14[] = {
  ABISELECT(1216,748),
  ABISELECT(-8280,-5100),
  (VTBL_ENTRY)&(_ZTI8S2776C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C58S2776C13__A2__8S2776C14[] = {
  ABISELECT(5112,3148),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
extern void _ZN8S2776C10D1Ev();
extern void _ZN8S2776C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C108S2776C13__A1__8S2776C14[] = {
  ABISELECT(3896,2400),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C10[0]),
  (VTBL_ENTRY)&_ZN8S2776C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2776C58S2776C108S2776C13__A3__8S2776C14[] = {
  ABISELECT(3896,2400),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__8S2776C13__8S2776C14[] = {
  ABISELECT(1216,748),
  ABISELECT(-8280,-5100),
  (VTBL_ENTRY)&(_ZTI8S2776C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__A__8S2776C13__8S2776C14[] = {
  ABISELECT(5112,3148),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI8S2776C13[0]),
};
extern void ABISELECT(_ZThn5600_N8S2776C13D1Ev,_ZThn3448_N8S2776C13D1Ev)();
extern void ABISELECT(_ZThn5600_N8S2776C13D0Ev,_ZThn3448_N8S2776C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2776C10__A1__8S2776C13__8S2776C14[] = {
  ABISELECT(3896,2400),
  ABISELECT(-5600,-3448),
  (VTBL_ENTRY)&(_ZTI8S2776C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S2776C13D1Ev,_ZThn3448_N8S2776C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S2776C13D0Ev,_ZThn3448_N8S2776C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__8S2776C14[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
extern void _ZN7S2776C8D1Ev();
extern void _ZN7S2776C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2776C8__8S2776C14[] = {
  ABISELECT(48,32),
  ABISELECT(-368,-220),
  ABISELECT(-1584,-968),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C8[0]),
  (VTBL_ENTRY)&_ZN7S2776C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2776C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__7S2776C8__8S2776C14[] = {
  ABISELECT(1216,748),
  ABISELECT(1584,968),
  (VTBL_ENTRY)&(_ZTI7S2776C8[0]),
};
extern void _ZN8S2776C10D1Ev();
extern void _ZN8S2776C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C10__A2__8S2776C14[] = {
  ABISELECT(-528,-320),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C10[0]),
  (VTBL_ENTRY)&_ZN8S2776C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2776C58S2776C10__A4__8S2776C14[] = {
  ABISELECT(-528,-320),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
static  VTT_ENTRY vtt_S2776C14[] = {
  {&(_ZTV8S2776C14[8]),  8,44},
  {&(_tg__ZTV7S2776C2__8S2776C14[7]),  7,9},
  {&(_tg__ZTV8S2776C117S2776C2__8S2776C14[4]),  4,6},
  {&(_tg__ZTV8S2776C128S2776C117S2776C2__A1__8S2776C14[4]),  4,6},
  {&(_tg__ZTV8S2776C108S2776C128S2776C117S2776C2__A3__8S2776C14[3]),  3,5},
  {&(_tg__ZTV7S2776C58S2776C108S2776C128S2776C117S2776C2__A5__8S2776C14[3]),  3,3},
  {&(_tg__ZTV7S2776C5__8S2776C128S2776C117S2776C2__A1__8S2776C14[3]),  3,3},
  {&(_tg__ZTV7S2776C5__8S2776C117S2776C2__8S2776C14[3]),  3,3},
  {&(_tg__ZTV7S2776C5__7S2776C2__8S2776C14[3]),  3,3},
  {&(_tg__ZTV7S2776C8__7S2776C2__8S2776C14[6]),  6,8},
  {&(_tg__ZTV8S2776C10__7S2776C2__8S2776C14[4]),  4,6},
  {&(_ZTV8S2776C14[16]),  16,44},
  {&(_ZTV8S2776C14[30]),  30,44},
  {&(_ZTV8S2776C14[22]),  22,44},
  {&(_ZTV8S2776C14[25]),  25,44},
  {&(_ZTV8S2776C14[36]),  36,44},
  {&(_ZTV8S2776C14[42]),  42,44},
  {&(_tg__ZTV8S2776C13__8S2776C14[4]),  4,7},
  {&(_tg__ZTV8S2776C128S2776C13__8S2776C14[4]),  4,6},
  {&(_tg__ZTV8S2776C108S2776C128S2776C13__8S2776C14[3]),  3,5},
  {&(_tg__ZTV7S2776C58S2776C108S2776C128S2776C13__A1__8S2776C14[3]),  3,3},
  {&(_tg__ZTV7S2776C5__8S2776C128S2776C13__8S2776C14[3]),  3,3},
  {&(_tg__ZTV7S2776C58S2776C13__A2__8S2776C14[3]),  3,3},
  {&(_tg__ZTV8S2776C108S2776C13__A1__8S2776C14[3]),  3,5},
  {&(_tg__ZTV7S2776C58S2776C108S2776C13__A3__8S2776C14[3]),  3,3},
  {&(_tg__ZTV7S2776C5__8S2776C13__8S2776C14[3]),  3,3},
  {&(_tg__ZTV7S2776C5__A__8S2776C13__8S2776C14[3]),  3,3},
  {&(_tg__ZTV8S2776C10__A1__8S2776C13__8S2776C14[3]),  3,5},
  {&(_tg__ZTV7S2776C5__8S2776C14[3]),  3,3},
  {&(_tg__ZTV7S2776C8__8S2776C14[5]),  5,7},
  {&(_tg__ZTV7S2776C5__7S2776C8__8S2776C14[3]),  3,3},
  {&(_tg__ZTV8S2776C10__A2__8S2776C14[3]),  3,5},
  {&(_tg__ZTV7S2776C58S2776C10__A4__8S2776C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S2776C14[];
extern  VTBL_ENTRY _ZTV8S2776C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C14[];
static VTBL_ENTRY alt_thunk_names111[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S2776C2D0Ev,_ZTv0_n16_N7S2776C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26144_N7S2776C2D0Ev,_ZThn16108_N7S2776C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S2776C2D1Ev,_ZTv0_n16_N7S2776C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26144_N7S2776C2D1Ev,_ZThn16108_N7S2776C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S2776C2D0Ev,_ZTv0_n24_N7S2776C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25984_N7S2776C2D0Ev,_ZThn16008_N7S2776C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S2776C2D1Ev,_ZTv0_n24_N7S2776C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25984_N7S2776C2D1Ev,_ZThn16008_N7S2776C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S2776C14D0Ev,_ZTv0_n16_N8S2776C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26144_N8S2776C14D0Ev,_ZThn16108_N8S2776C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S2776C14D1Ev,_ZTv0_n16_N8S2776C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn26144_N8S2776C14D1Ev,_ZThn16108_N8S2776C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S2776C14D0Ev,_ZTv0_n24_N8S2776C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25984_N8S2776C14D0Ev,_ZThn16008_N8S2776C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S2776C14D1Ev,_ZTv0_n24_N8S2776C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25984_N8S2776C14D1Ev,_ZThn16008_N8S2776C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2776C14D0Ev,_ZTv0_n20_N8S2776C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16120_N8S2776C14D0Ev,_ZThn9940_N8S2776C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2776C14D1Ev,_ZTv0_n20_N8S2776C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16120_N8S2776C14D1Ev,_ZThn9940_N8S2776C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2776C14 = {  "S2776C14", // class name
  bases_S2776C14, 39,
  &(vtc_S2776C14[0]), // expected_vtbl_contents
  &(vtt_S2776C14[0]), // expected_vtt_contents
  ABISELECT(28432,17520), // object size
  NSPAIRA(_ZTI8S2776C14),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S2776C14),44, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2776C14),33, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names111,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2776C1  : S2776C2 , S2776C14 {
  ~S2776C1(); // tgen
  S2776C1(); // tgen
};
//SIG(1 S2776C1) C1{ BC2{ BC3{ m Fp Fc Fi:6 Fl FC4{} Fi} VBC5{ VBC6{ m FL Fp FC7{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC7 FC6[3] Fi[4]} VBC8{ VBC5 VBC7 vd FU9{ m Fi FD} Fs[8]} VBC10{ BC5 BC7 BC6 vd FL[5] FL Fi FC6 Fp FC7 Fi Fp[7]} BC11{ BC12{ VBC5 BC7 BC6 BC10 Fi FC5 Fs Fp Fi[5]} BC7 vd Fi[7] Fl[7] Fs[8] Fs[8] FC5 Fp FC13{ BC12 BC5 BC10 BC6 vd v1 FC4 Fi Fi Fl Fp}} vd Fi} BC14{ VBC13 BC2 Fs[8] Fp}}


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

static void Test_S2776C1()
{
  extern Class_Descriptor cd_S2776C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2784,6861)];
    init_test(&cd_S2776C1, buf);
    S2776C1 *dp, &lv = *(dp=new (buf) S2776C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(44528,27440), "sizeof(S2776C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2776C1)");
    /*is_ambiguous_... S2776C1::S2776C2 */ AMB_check_base_class_offset(lv, (S19566C11*)(S2776C2*), ABISELECT(16056,9896), "S2776C1");
    /*is_ambiguous_... S2776C1::S2776C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C5*), ABISELECT(33432,20608), "S2776C1");
    /*is_ambiguous_... S2776C1::S2776C10 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C5*)(S2776C10*), ABISELECT(33432,20608), "S2776C1");
    /*is_ambiguous_... S2776C1::S2776C2 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C5*)(S2776C10*)(S2776C12*)(S2776C11*)(S2776C2*), ABISELECT(33432,20608), "S2776C1");
    check_base_class_offset(lv, (S19566C5*)(S2776C5*)(S2776C10*)(S2776C12*)(S2776C13*), ABISELECT(33432,20608), "S2776C1");
    /*is_ambiguous_... S2776C13::S2776C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C5*)(S2776C13*), ABISELECT(33432,20608), "S2776C1");
    /*is_ambiguous_... S2776C13::S2776C10 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C5*)(S2776C10*)(S2776C13*), ABISELECT(33432,20608), "S2776C1");
    check_base_class_offset(lv, (S19566C5*)(S2776C5*)(S2776C10*)(S2776C12*)(S2776C11*)(S2776C2*)(S2776C14*), ABISELECT(33432,20608), "S2776C1");
    /*is_ambiguous_... S2776C1::S2776C5 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C5*), ABISELECT(32224,19864), "S2776C1");
    /*is_ambiguous_... S2776C1::S2776C2 */ AMB_check_base_class_offset(lv, (S2776C5*)(S2776C2*), ABISELECT(32216,19860), "S2776C1");
    check_base_class_offset(lv, (S2776C5*)(S2776C8*), ABISELECT(32216,19860), "S2776C1");
    /*is_ambiguous_... S2776C1::S2776C2 */ AMB_check_base_class_offset(lv, (S2776C5*)(S2776C12*)(S2776C11*)(S2776C2*), ABISELECT(32216,19860), "S2776C1");
    /*is_ambiguous_... S2776C12::S2776C5 */ AMB_check_base_class_offset(lv, (S2776C5*)(S2776C12*)(S2776C13*), ABISELECT(32216,19860), "S2776C1");
    /*is_ambiguous_... S2776C2::S2776C5 */ AMB_check_base_class_offset(lv, (S2776C5*)(S2776C2*)(S2776C14*), ABISELECT(32216,19860), "S2776C1");
    /*is_ambiguous_... S2776C12::S2776C5 */ AMB_check_base_class_offset(lv, (S2776C5*)(S2776C12*)(S2776C11*)(S2776C2*)(S2776C14*), ABISELECT(32216,19860), "S2776C1");
    /*is_ambiguous_... S2776C8::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C8*), ABISELECT(33840,20860), "S2776C1");
    /*is_ambiguous_... S2776C1::S2776C2 */ AMB_check_base_class_offset(lv, (S2776C8*)(S2776C2*), ABISELECT(33792,20828), "S2776C1");
    check_base_class_offset(lv, (S2776C8*)(S2776C2*)(S2776C14*), ABISELECT(33792,20828), "S2776C1");
    /*is_ambiguous_... S2776C1::S2776C10 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C5*)(S2776C10*), ABISELECT(33960,20932), "S2776C1");
    /*is_ambiguous_... S2776C1::S2776C10 */ AMB_check_base_class_offset(lv, (S2776C5*)(S2776C10*), ABISELECT(33952,20928), "S2776C1");
    /*is_ambiguous_... S2776C1::S2776C10 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C10*), ABISELECT(35168,21676), "S2776C1");
    /*is_ambiguous_... S2776C1::S2776C10 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C10*), ABISELECT(35280,21744), "S2776C1");
    /*is_ambiguous_... S2776C1::S2776C2 */ AMB_check_base_class_offset(lv, (S2776C10*)(S2776C2*), ABISELECT(33952,20928), "S2776C1");
    /*is_ambiguous_... S2776C2::S2776C10 */ AMB_check_base_class_offset(lv, (S2776C10*)(S2776C2*)(S2776C14*), ABISELECT(33952,20928), "S2776C1");
    /*is_ambiguous_... S2776C1::S2776C2 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C12*)(S2776C11*)(S2776C2*), ABISELECT(2288,1412), "S2776C1");
    /*is_ambiguous_... S2776C1::S2776C2 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C12*)(S2776C11*)(S2776C2*), ABISELECT(2400,1480), "S2776C1");
    /*is_ambiguous_... S2776C1::S2776C2 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C5*)(S2776C10*)(S2776C12*)(S2776C11*)(S2776C2*), ABISELECT(8,4), "S2776C1");
    /*is_ambiguous_... S2776C1::S2776C2 */ AMB_check_base_class_offset(lv, (S2776C5*)(S2776C10*)(S2776C12*)(S2776C11*)(S2776C2*), 0, "S2776C1");
    /*is_ambiguous_... S2776C1::S2776C2 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C10*)(S2776C12*)(S2776C11*)(S2776C2*), ABISELECT(1216,748), "S2776C1");
    /*is_ambiguous_... S2776C1::S2776C2 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C10*)(S2776C12*)(S2776C11*)(S2776C2*), ABISELECT(1328,816), "S2776C1");
    /*is_ambiguous_... S2776C1::S2776C2 */ AMB_check_base_class_offset(lv, (S2776C10*)(S2776C12*)(S2776C11*)(S2776C2*), 0, "S2776C1");
    /*is_ambiguous_... S2776C1::S2776C2 */ AMB_check_base_class_offset(lv, (S2776C12*)(S2776C11*)(S2776C2*), 0, "S2776C1");
    /*is_ambiguous_... S2776C1::S2776C2 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C11*)(S2776C2*), ABISELECT(4384,2700), "S2776C1");
    /*is_ambiguous_... S2776C1::S2776C2 */ AMB_check_base_class_offset(lv, (S2776C11*)(S2776C2*), 0, "S2776C1");
    /*is_ambiguous_... S2776C1::S2776C2 */ AMB_check_base_class_offset(lv, (S2776C2*), 0, "S2776C1");
    /*is_ambiguous_... S2776C12::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C12*)(S2776C13*), ABISELECT(38528,23752), "S2776C1");
    /*is_ambiguous_... S2776C12::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C12*)(S2776C13*), ABISELECT(38640,23820), "S2776C1");
    check_base_class_offset(lv, (S19566C6*)(S2776C5*)(S2776C10*)(S2776C12*)(S2776C13*), ABISELECT(36248,22344), "S2776C1");
    check_base_class_offset(lv, (S2776C5*)(S2776C10*)(S2776C12*)(S2776C13*), ABISELECT(36240,22340), "S2776C1");
    /*is_ambiguous_... S2776C10::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C10*)(S2776C12*)(S2776C13*), ABISELECT(37456,23088), "S2776C1");
    /*is_ambiguous_... S2776C10::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C10*)(S2776C12*)(S2776C13*), ABISELECT(37568,23156), "S2776C1");
    check_base_class_offset(lv, (S2776C10*)(S2776C12*)(S2776C13*), ABISELECT(36240,22340), "S2776C1");
    check_base_class_offset(lv, (S2776C12*)(S2776C13*), ABISELECT(36240,22340), "S2776C1");
    /*is_ambiguous_... S2776C13::S2776C5 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C5*)(S2776C13*), ABISELECT(40632,25044), "S2776C1");
    /*is_ambiguous_... S2776C13::S2776C5 */ AMB_check_base_class_offset(lv, (S2776C5*)(S2776C13*), ABISELECT(40624,25040), "S2776C1");
    /*is_ambiguous_... S2776C13::S2776C10 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C5*)(S2776C10*)(S2776C13*), ABISELECT(41848,25792), "S2776C1");
    /*is_ambiguous_... S2776C13::S2776C10 */ AMB_check_base_class_offset(lv, (S2776C5*)(S2776C10*)(S2776C13*), ABISELECT(41840,25788), "S2776C1");
    /*is_ambiguous_... S2776C13::S2776C10 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C10*)(S2776C13*), ABISELECT(43056,26536), "S2776C1");
    /*is_ambiguous_... S2776C13::S2776C10 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C10*)(S2776C13*), ABISELECT(43168,26604), "S2776C1");
    /*is_ambiguous_... S2776C13::S2776C10 */ AMB_check_base_class_offset(lv, (S2776C10*)(S2776C13*), ABISELECT(41840,25788), "S2776C1");
    /*is_ambiguous_... S2776C13::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C13*), ABISELECT(44128,27200), "S2776C1");
    check_base_class_offset(lv, (S2776C13*)(S2776C14*), ABISELECT(36240,22340), "S2776C1");
    check_base_class_offset(lv, (S19566C11*)(S2776C2*)(S2776C14*), ABISELECT(32152,19816), "S2776C1");
    /*is_ambiguous_... S2776C12::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C12*)(S2776C11*)(S2776C2*)(S2776C14*), ABISELECT(18384,11332), "S2776C1");
    /*is_ambiguous_... S2776C12::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C12*)(S2776C11*)(S2776C2*)(S2776C14*), ABISELECT(18496,11400), "S2776C1");
    check_base_class_offset(lv, (S19566C6*)(S2776C5*)(S2776C10*)(S2776C12*)(S2776C11*)(S2776C2*)(S2776C14*), ABISELECT(16104,9924), "S2776C1");
    check_base_class_offset(lv, (S2776C5*)(S2776C10*)(S2776C12*)(S2776C11*)(S2776C2*)(S2776C14*), ABISELECT(16096,9920), "S2776C1");
    /*is_ambiguous_... S2776C10::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C10*)(S2776C12*)(S2776C11*)(S2776C2*)(S2776C14*), ABISELECT(17312,10668), "S2776C1");
    /*is_ambiguous_... S2776C10::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S2776C10*)(S2776C12*)(S2776C11*)(S2776C2*)(S2776C14*), ABISELECT(17424,10736), "S2776C1");
    check_base_class_offset(lv, (S2776C10*)(S2776C12*)(S2776C11*)(S2776C2*)(S2776C14*), ABISELECT(16096,9920), "S2776C1");
    check_base_class_offset(lv, (S2776C12*)(S2776C11*)(S2776C2*)(S2776C14*), ABISELECT(16096,9920), "S2776C1");
    /*is_ambiguous_... S2776C11::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S2776C11*)(S2776C2*)(S2776C14*), ABISELECT(20480,12620), "S2776C1");
    check_base_class_offset(lv, (S2776C11*)(S2776C2*)(S2776C14*), ABISELECT(16096,9920), "S2776C1");
    check_base_class_offset(lv, (S2776C2*)(S2776C14*), ABISELECT(16096,9920), "S2776C1");
    check_base_class_offset(lv, (S2776C14*), ABISELECT(16096,9920), "S2776C1");
    test_class_info(&lv, &cd_S2776C1);
    dp->~S2776C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2776C1(Test_S2776C1, "S2776C1", ABISELECT(44528,27440));

#else // __cplusplus

extern void _ZN7S2776C1C1Ev();
extern void _ZN7S2776C1D1Ev();
Name_Map name_map_S2776C1[] = {
  NSPAIR(_ZN7S2776C1C1Ev),
  NSPAIR(_ZN7S2776C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C11;
extern VTBL_ENTRY _ZTI9S19566C11[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C8;
extern VTBL_ENTRY _ZTI7S2776C8[];
extern  VTBL_ENTRY _ZTV7S2776C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C8[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S2776C10;
extern VTBL_ENTRY _ZTI8S2776C10[];
extern  VTBL_ENTRY _ZTV8S2776C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C10[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S2776C10;
extern VTBL_ENTRY _ZTI8S2776C10[];
extern  VTBL_ENTRY _ZTV8S2776C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C10[];
extern Class_Descriptor cd_S2776C12;
extern VTBL_ENTRY _ZTI8S2776C12[];
extern  VTBL_ENTRY _ZTV8S2776C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C12[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C11;
extern VTBL_ENTRY _ZTI8S2776C11[];
extern  VTBL_ENTRY _ZTV8S2776C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C11[];
extern Class_Descriptor cd_S2776C2;
extern VTBL_ENTRY _ZTI7S2776C2[];
extern  VTBL_ENTRY _ZTV7S2776C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C2[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S2776C10;
extern VTBL_ENTRY _ZTI8S2776C10[];
extern  VTBL_ENTRY _ZTV8S2776C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C10[];
extern Class_Descriptor cd_S2776C12;
extern VTBL_ENTRY _ZTI8S2776C12[];
extern  VTBL_ENTRY _ZTV8S2776C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C12[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S2776C10;
extern VTBL_ENTRY _ZTI8S2776C10[];
extern  VTBL_ENTRY _ZTV8S2776C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C10[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S2776C13;
extern VTBL_ENTRY _ZTI8S2776C13[];
extern  VTBL_ENTRY _ZTV8S2776C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C13[];
extern Class_Descriptor cd_S19566C11;
extern VTBL_ENTRY _ZTI9S19566C11[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C5;
extern VTBL_ENTRY _ZTI7S2776C5[];
extern  VTBL_ENTRY _ZTV7S2776C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S2776C10;
extern VTBL_ENTRY _ZTI8S2776C10[];
extern  VTBL_ENTRY _ZTV8S2776C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C10[];
extern Class_Descriptor cd_S2776C12;
extern VTBL_ENTRY _ZTI8S2776C12[];
extern  VTBL_ENTRY _ZTV8S2776C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C12[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S2776C11;
extern VTBL_ENTRY _ZTI8S2776C11[];
extern  VTBL_ENTRY _ZTV8S2776C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C11[];
extern Class_Descriptor cd_S2776C2;
extern VTBL_ENTRY _ZTI7S2776C2[];
extern  VTBL_ENTRY _ZTV7S2776C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C2[];
extern Class_Descriptor cd_S2776C14;
extern VTBL_ENTRY _ZTI8S2776C14[];
extern  VTBL_ENTRY _ZTV8S2776C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2776C14[];
static Base_Class bases_S2776C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C11,    ABISELECT(16056,9896), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(33432,20608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(32224,19864), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C5,    ABISELECT(32216,19860), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(33840,20860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C8,    ABISELECT(33792,20828), //bcp->offset
    23, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(33960,20932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C5,    ABISELECT(33952,20928), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(35168,21676), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(35280,21744), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C10,    ABISELECT(33952,20928), //bcp->offset
    31, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(2400,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
    18, //immediately_derived
  0, 0},
  {&cd_S19566C6,    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
    14, //immediately_derived
  0, 0},
  {&cd_S2776C5,    0, //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
    17, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C10,    0, //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
    13, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2776C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(4384,2700), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2776C2,    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
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19566C6,    ABISELECT(38528,23752), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(38640,23820), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(36248,22344), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C5,    ABISELECT(36240,22340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(37456,23088), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(37568,23156), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C10,    ABISELECT(36240,22340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S2776C12,    ABISELECT(36240,22340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    38, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(40632,25044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C5,    ABISELECT(40624,25040), //bcp->offset
    46, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(41848,25792), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2776C5,    ABISELECT(41840,25788), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(43056,26536), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(43168,26604), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S2776C10,    ABISELECT(41840,25788), //bcp->offset
    49, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(44128,27200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S2776C13,    ABISELECT(36240,22340), //bcp->offset
    37, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    51, //immediately_derived
  0, 1},
  {&cd_S19566C11,    ABISELECT(32152,19816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(18384,11332), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(18496,11400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(16104,9924), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    43, //immediately_derived
  0, 0},
  {&cd_S2776C5,    ABISELECT(16096,9920), //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
    17, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(17312,10668), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(17424,10736), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S2776C10,    ABISELECT(16096,9920), //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
    18, //init_seq
    47, //immediately_derived
  0, 0},
  {&cd_S2776C12,    ABISELECT(16096,9920), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(20480,12620), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    49, //immediately_derived
  0, 0},
  {&cd_S2776C11,    ABISELECT(16096,9920), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S2776C2,    ABISELECT(16096,9920), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S2776C14,    ABISELECT(16096,9920), //bcp->offset
    10, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2776C1[];
extern void _ZN7S2776C1D1Ev();
extern void _ZN7S2776C1D0Ev();
extern void ABISELECT(_ZThn16096_N7S2776C1D1Ev,_ZThn9920_N7S2776C1D1Ev)();
extern void ABISELECT(_ZThn16096_N7S2776C1D0Ev,_ZThn9920_N7S2776C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N7S2776C1D1Ev,_ZTv0_n24_N7S2776C1D1Ev)();
extern void ABISELECT(_ZThn33792_N7S2776C1D1Ev,_ZThn20828_N7S2776C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S2776C1D0Ev,_ZTv0_n24_N7S2776C1D0Ev)();
extern void ABISELECT(_ZThn33792_N7S2776C1D0Ev,_ZThn20828_N7S2776C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S2776C1D1Ev,_ZTv0_n16_N7S2776C1D1Ev)();
extern void ABISELECT(_ZThn33952_N7S2776C1D1Ev,_ZThn20928_N7S2776C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S2776C1D0Ev,_ZTv0_n16_N7S2776C1D0Ev)();
extern void ABISELECT(_ZThn33952_N7S2776C1D0Ev,_ZThn20928_N7S2776C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2776C1D1Ev,_ZTv0_n20_N7S2776C1D1Ev)();
extern void ABISELECT(_ZThn36240_N7S2776C1D1Ev,_ZThn22340_N7S2776C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S2776C1D0Ev,_ZTv0_n20_N7S2776C1D0Ev)();
extern void ABISELECT(_ZThn36240_N7S2776C1D0Ev,_ZThn22340_N7S2776C1D0Ev)() __attribute__((weak));
extern void _ZN8S2776C132v1Ev();
extern void ABISELECT(_ZTvn5600_n40_N7S2776C1D1Ev,_ZTvn3448_n20_N7S2776C1D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N7S2776C1D0Ev,_ZTvn3448_n20_N7S2776C1D0Ev)();
static  VTBL_ENTRY vtc_S2776C1[] = {
  ABISELECT(36240,22340),
  ABISELECT(33952,20928),
  ABISELECT(33840,20860),
  ABISELECT(33792,20828),
  ABISELECT(32216,19860),
  ABISELECT(33432,20608),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C1[0]),
  (VTBL_ENTRY)&_ZN7S2776C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2776C1D0Ev,
  ABISELECT(20144,12420),
  ABISELECT(17856,11008),
  ABISELECT(17744,10940),
  ABISELECT(17696,10908),
  ABISELECT(16120,9940),
  ABISELECT(17336,10688),
  ABISELECT(-16096,-9920),
  (VTBL_ENTRY)&(_ZTI7S2776C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16096_N7S2776C1D1Ev,_ZThn9920_N7S2776C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16096_N7S2776C1D0Ev,_ZThn9920_N7S2776C1D0Ev),
  ABISELECT(1216,748),
  ABISELECT(-32216,-19860),
  (VTBL_ENTRY)&(_ZTI7S2776C1[0]),
  ABISELECT(-33792,-20828),
  ABISELECT(48,32),
  ABISELECT(-360,-220),
  ABISELECT(-1576,-968),
  ABISELECT(-33792,-20828),
  (VTBL_ENTRY)&(_ZTI7S2776C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S2776C1D1Ev,_ZTv0_n24_N7S2776C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S2776C1D0Ev,_ZTv0_n24_N7S2776C1D0Ev),
  ABISELECT(-33952,-20928),
  ABISELECT(-520,-320),
  ABISELECT(-33952,-20928),
  (VTBL_ENTRY)&(_ZTI7S2776C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2776C1D1Ev,_ZTv0_n16_N7S2776C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2776C1D0Ev,_ZTv0_n16_N7S2776C1D0Ev),
  0,
  ABISELECT(-36240,-22340),
  ABISELECT(-4024,-2480),
  ABISELECT(-2808,-1732),
  ABISELECT(-36240,-22340),
  (VTBL_ENTRY)&(_ZTI7S2776C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2776C1D1Ev,_ZTv0_n20_N7S2776C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S2776C1D0Ev,_ZTv0_n20_N7S2776C1D0Ev),
  (VTBL_ENTRY)&_ZN8S2776C132v1Ev,
  ABISELECT(-7192,-4432),
  ABISELECT(-40624,-25040),
  (VTBL_ENTRY)&(_ZTI7S2776C1[0]),
  ABISELECT(-8408,-5180),
  ABISELECT(-41840,-25788),
  (VTBL_ENTRY)&(_ZTI7S2776C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N7S2776C1D1Ev,_ZTvn3448_n20_N7S2776C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N7S2776C1D0Ev,_ZTvn3448_n20_N7S2776C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S2776C1[];
extern void _ZN7S2776C2D1Ev();
extern void _ZN7S2776C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2776C2__7S2776C1[] = {
  ABISELECT(33952,20928),
  ABISELECT(33840,20860),
  ABISELECT(33792,20828),
  ABISELECT(32216,19860),
  ABISELECT(33432,20608),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C2[0]),
  (VTBL_ENTRY)&_ZN7S2776C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2776C2D0Ev,
};
extern void _ZN8S2776C11D1Ev();
extern void _ZN8S2776C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C117S2776C2__7S2776C1[] = {
  ABISELECT(32216,19860),
  ABISELECT(33432,20608),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C11[0]),
  (VTBL_ENTRY)&_ZN8S2776C11D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C11D0Ev,
};
extern void _ZN8S2776C12D1Ev();
extern void _ZN8S2776C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C128S2776C117S2776C2__7S2776C1[] = {
  ABISELECT(32216,19860),
  ABISELECT(33432,20608),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C12[0]),
  (VTBL_ENTRY)&_ZN8S2776C12D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C12D0Ev,
};
extern void _ZN8S2776C10D1Ev();
extern void _ZN8S2776C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C108S2776C128S2776C117S2776C2__A1__7S2776C1[] = {
  ABISELECT(33432,20608),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C10[0]),
  (VTBL_ENTRY)&_ZN8S2776C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2776C58S2776C108S2776C128S2776C117S2776C2__A2__7S2776C1[] = {
  ABISELECT(33432,20608),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__8S2776C128S2776C117S2776C2__7S2776C1[] = {
  ABISELECT(1216,748),
  ABISELECT(-32216,-19860),
  (VTBL_ENTRY)&(_ZTI8S2776C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__8S2776C117S2776C2__7S2776C1[] = {
  ABISELECT(1216,748),
  ABISELECT(-32216,-19860),
  (VTBL_ENTRY)&(_ZTI8S2776C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__7S2776C2__7S2776C1[] = {
  ABISELECT(1216,748),
  ABISELECT(-32216,-19860),
  (VTBL_ENTRY)&(_ZTI7S2776C2[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S2776C2D1Ev,_ZTv0_n24_N7S2776C2D1Ev)();
extern void ABISELECT(_ZThn33792_N7S2776C2D1Ev,_ZThn20828_N7S2776C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S2776C2D0Ev,_ZTv0_n24_N7S2776C2D0Ev)();
extern void ABISELECT(_ZThn33792_N7S2776C2D0Ev,_ZThn20828_N7S2776C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2776C8__7S2776C2__7S2776C1[] = {
  ABISELECT(-33792,-20828),
  ABISELECT(48,32),
  ABISELECT(-360,-220),
  ABISELECT(-1576,-968),
  ABISELECT(-33792,-20828),
  (VTBL_ENTRY)&(_ZTI7S2776C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S2776C2D1Ev,_ZTv0_n24_N7S2776C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S2776C2D0Ev,_ZTv0_n24_N7S2776C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S2776C2D1Ev,_ZTv0_n16_N7S2776C2D1Ev)();
extern void ABISELECT(_ZThn33952_N7S2776C2D1Ev,_ZThn20928_N7S2776C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S2776C2D0Ev,_ZTv0_n16_N7S2776C2D0Ev)();
extern void ABISELECT(_ZThn33952_N7S2776C2D0Ev,_ZThn20928_N7S2776C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2776C10__7S2776C2__7S2776C1[] = {
  ABISELECT(-33952,-20928),
  ABISELECT(-520,-320),
  ABISELECT(-33952,-20928),
  (VTBL_ENTRY)&(_ZTI7S2776C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2776C2D1Ev,_ZTv0_n16_N7S2776C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2776C2D0Ev,_ZTv0_n16_N7S2776C2D0Ev),
};
extern void _ZN8S2776C14D1Ev();
extern void _ZN8S2776C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C14__7S2776C1[] = {
  ABISELECT(20144,12420),
  ABISELECT(17856,11008),
  ABISELECT(17744,10940),
  ABISELECT(17696,10908),
  ABISELECT(16120,9940),
  ABISELECT(17336,10688),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C14[0]),
  (VTBL_ENTRY)&_ZN8S2776C14D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C14D0Ev,
};
extern void _ZN7S2776C2D1Ev();
extern void _ZN7S2776C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2776C28S2776C14__A1__7S2776C1[] = {
  ABISELECT(17856,11008),
  ABISELECT(17744,10940),
  ABISELECT(17696,10908),
  ABISELECT(16120,9940),
  ABISELECT(17336,10688),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C2[0]),
  (VTBL_ENTRY)&_ZN7S2776C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2776C2D0Ev,
};
extern void _ZN8S2776C11D1Ev();
extern void _ZN8S2776C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C117S2776C28S2776C14__A1__7S2776C1[] = {
  ABISELECT(16120,9940),
  ABISELECT(17336,10688),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C11[0]),
  (VTBL_ENTRY)&_ZN8S2776C11D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C11D0Ev,
};
extern void _ZN8S2776C12D1Ev();
extern void _ZN8S2776C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C128S2776C117S2776C28S2776C14__A2__7S2776C1[] = {
  ABISELECT(16120,9940),
  ABISELECT(17336,10688),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C12[0]),
  (VTBL_ENTRY)&_ZN8S2776C12D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C12D0Ev,
};
extern void _ZN8S2776C10D1Ev();
extern void _ZN8S2776C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C108S2776C128S2776C117S2776C28S2776C14__A4__7S2776C1[] = {
  ABISELECT(17336,10688),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C10[0]),
  (VTBL_ENTRY)&_ZN8S2776C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2776C58S2776C108S2776C128S2776C117S2776C28S2776C14__A6__7S2776C1[] = {
  ABISELECT(17336,10688),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__8S2776C128S2776C117S2776C28S2776C14__A2__7S2776C1[] = {
  ABISELECT(1216,748),
  ABISELECT(-16120,-9940),
  (VTBL_ENTRY)&(_ZTI8S2776C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__8S2776C117S2776C28S2776C14__A1__7S2776C1[] = {
  ABISELECT(1216,748),
  ABISELECT(-16120,-9940),
  (VTBL_ENTRY)&(_ZTI8S2776C11[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__7S2776C28S2776C14__A1__7S2776C1[] = {
  ABISELECT(1216,748),
  ABISELECT(-16120,-9940),
  (VTBL_ENTRY)&(_ZTI7S2776C2[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S2776C2D1Ev,_ZTv0_n24_N7S2776C2D1Ev)();
extern void ABISELECT(_ZThn17696_N7S2776C2D1Ev,_ZThn10908_N7S2776C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S2776C2D0Ev,_ZTv0_n24_N7S2776C2D0Ev)();
extern void ABISELECT(_ZThn17696_N7S2776C2D0Ev,_ZThn10908_N7S2776C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2776C8__7S2776C28S2776C14__A1__7S2776C1[] = {
  ABISELECT(-17696,-10908),
  ABISELECT(48,32),
  ABISELECT(-360,-220),
  ABISELECT(-1576,-968),
  ABISELECT(-17696,-10908),
  (VTBL_ENTRY)&(_ZTI7S2776C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S2776C2D1Ev,_ZTv0_n24_N7S2776C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S2776C2D0Ev,_ZTv0_n24_N7S2776C2D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N7S2776C2D1Ev,_ZTv0_n16_N7S2776C2D1Ev)();
extern void ABISELECT(_ZThn17856_N7S2776C2D1Ev,_ZThn11008_N7S2776C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S2776C2D0Ev,_ZTv0_n16_N7S2776C2D0Ev)();
extern void ABISELECT(_ZThn17856_N7S2776C2D0Ev,_ZThn11008_N7S2776C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2776C10__7S2776C28S2776C14__A1__7S2776C1[] = {
  ABISELECT(-17856,-11008),
  ABISELECT(-520,-320),
  ABISELECT(-17856,-11008),
  (VTBL_ENTRY)&(_ZTI7S2776C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2776C2D1Ev,_ZTv0_n16_N7S2776C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2776C2D0Ev,_ZTv0_n16_N7S2776C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S2776C14D1Ev,_ZTv0_n20_N8S2776C14D1Ev)();
extern void ABISELECT(_ZThn20144_N8S2776C14D1Ev,_ZThn12420_N8S2776C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S2776C14D0Ev,_ZTv0_n20_N8S2776C14D0Ev)();
extern void ABISELECT(_ZThn20144_N8S2776C14D0Ev,_ZThn12420_N8S2776C14D0Ev)() __attribute__((weak));
extern void _ZN8S2776C132v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C13__8S2776C14__7S2776C1[] = {
  0,
  ABISELECT(-20144,-12420),
  ABISELECT(-4024,-2480),
  ABISELECT(-2808,-1732),
  ABISELECT(-20144,-12420),
  (VTBL_ENTRY)&(_ZTI8S2776C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2776C14D1Ev,_ZTv0_n20_N8S2776C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S2776C14D0Ev,_ZTv0_n20_N8S2776C14D0Ev),
  (VTBL_ENTRY)&_ZN8S2776C132v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__8S2776C14__7S2776C1[] = {
  ABISELECT(1216,748),
  ABISELECT(-16120,-9940),
  (VTBL_ENTRY)&(_ZTI8S2776C14[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C58S2776C13__A2__8S2776C14__7S2776C1[] = {
  ABISELECT(-7192,-4432),
  ABISELECT(-24528,-15120),
  (VTBL_ENTRY)&(_ZTI8S2776C14[0]),
};
extern void ABISELECT(_ZTvn5600_n40_N8S2776C14D1Ev,_ZTvn3448_n20_N8S2776C14D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N8S2776C14D0Ev,_ZTvn3448_n20_N8S2776C14D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2776C108S2776C13__A1__8S2776C14__7S2776C1[] = {
  ABISELECT(-8408,-5180),
  ABISELECT(-25744,-15868),
  (VTBL_ENTRY)&(_ZTI8S2776C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N8S2776C14D1Ev,_ZTvn3448_n20_N8S2776C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N8S2776C14D0Ev,_ZTvn3448_n20_N8S2776C14D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S2776C14D1Ev,_ZTv0_n24_N8S2776C14D1Ev)();
extern void ABISELECT(_ZThn17696_N8S2776C14D1Ev,_ZThn10908_N8S2776C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S2776C14D0Ev,_ZTv0_n24_N8S2776C14D0Ev)();
extern void ABISELECT(_ZThn17696_N8S2776C14D0Ev,_ZThn10908_N8S2776C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2776C8__8S2776C14__7S2776C1[] = {
  ABISELECT(-17696,-10908),
  ABISELECT(48,32),
  ABISELECT(-360,-220),
  ABISELECT(-1576,-968),
  ABISELECT(-17696,-10908),
  (VTBL_ENTRY)&(_ZTI8S2776C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S2776C14D1Ev,_ZTv0_n24_N8S2776C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S2776C14D0Ev,_ZTv0_n24_N8S2776C14D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S2776C14D1Ev,_ZTv0_n16_N8S2776C14D1Ev)();
extern void ABISELECT(_ZThn17856_N8S2776C14D1Ev,_ZThn11008_N8S2776C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S2776C14D0Ev,_ZTv0_n16_N8S2776C14D0Ev)();
extern void ABISELECT(_ZThn17856_N8S2776C14D0Ev,_ZThn11008_N8S2776C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2776C10__A2__8S2776C14__7S2776C1[] = {
  ABISELECT(-17856,-11008),
  ABISELECT(-520,-320),
  ABISELECT(-17856,-11008),
  (VTBL_ENTRY)&(_ZTI8S2776C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S2776C14D1Ev,_ZTv0_n16_N8S2776C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S2776C14D0Ev,_ZTv0_n16_N8S2776C14D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__7S2776C1[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
extern void _ZN7S2776C8D1Ev();
extern void _ZN7S2776C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2776C8__7S2776C1[] = {
  ABISELECT(48,32),
  ABISELECT(-360,-220),
  ABISELECT(-1576,-968),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C8[0]),
  (VTBL_ENTRY)&_ZN7S2776C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2776C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__7S2776C8__7S2776C1[] = {
  ABISELECT(1216,748),
  ABISELECT(1576,968),
  (VTBL_ENTRY)&(_ZTI7S2776C8[0]),
};
extern void _ZN8S2776C10D1Ev();
extern void _ZN8S2776C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C10__7S2776C1[] = {
  ABISELECT(-520,-320),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C10[0]),
  (VTBL_ENTRY)&_ZN8S2776C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2776C58S2776C10__A1__7S2776C1[] = {
  ABISELECT(-520,-320),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
extern void _ZN8S2776C13D1Ev();
extern void _ZN8S2776C13D0Ev();
extern void _ZN8S2776C132v1Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C13__7S2776C1[] = {
  ABISELECT(-4024,-2480),
  ABISELECT(-2808,-1732),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C13[0]),
  (VTBL_ENTRY)&_ZN8S2776C13D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C13D0Ev,
  (VTBL_ENTRY)&_ZN8S2776C132v1Ev,
};
extern void _ZN8S2776C12D1Ev();
extern void _ZN8S2776C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C128S2776C13__A1__7S2776C1[] = {
  ABISELECT(-4024,-2480),
  ABISELECT(-2808,-1732),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C12[0]),
  (VTBL_ENTRY)&_ZN8S2776C12D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C12D0Ev,
};
extern void _ZN8S2776C10D1Ev();
extern void _ZN8S2776C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C108S2776C128S2776C13__A2__7S2776C1[] = {
  ABISELECT(-2808,-1732),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C10[0]),
  (VTBL_ENTRY)&_ZN8S2776C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2776C58S2776C108S2776C128S2776C13__A3__7S2776C1[] = {
  ABISELECT(-2808,-1732),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__8S2776C128S2776C13__A1__7S2776C1[] = {
  ABISELECT(1216,748),
  ABISELECT(4024,2480),
  (VTBL_ENTRY)&(_ZTI8S2776C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C58S2776C13__A4__7S2776C1[] = {
  ABISELECT(-7192,-4432),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
extern void _ZN8S2776C10D1Ev();
extern void _ZN8S2776C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2776C108S2776C13__A3__7S2776C1[] = {
  ABISELECT(-8408,-5180),
  0,
  (VTBL_ENTRY)&(_ZTI8S2776C10[0]),
  (VTBL_ENTRY)&_ZN8S2776C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2776C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2776C58S2776C108S2776C13__A5__7S2776C1[] = {
  ABISELECT(-8408,-5180),
  0,
  (VTBL_ENTRY)&(_ZTI7S2776C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__8S2776C13__7S2776C1[] = {
  ABISELECT(1216,748),
  ABISELECT(4024,2480),
  (VTBL_ENTRY)&(_ZTI8S2776C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2776C5__A__8S2776C13__7S2776C1[] = {
  ABISELECT(-7192,-4432),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI8S2776C13[0]),
};
extern void ABISELECT(_ZThn5600_N8S2776C13D1Ev,_ZThn3448_N8S2776C13D1Ev)();
extern void ABISELECT(_ZThn5600_N8S2776C13D0Ev,_ZThn3448_N8S2776C13D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2776C10__A1__8S2776C13__7S2776C1[] = {
  ABISELECT(-8408,-5180),
  ABISELECT(-5600,-3448),
  (VTBL_ENTRY)&(_ZTI8S2776C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S2776C13D1Ev,_ZThn3448_N8S2776C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S2776C13D0Ev,_ZThn3448_N8S2776C13D0Ev),
};
static  VTT_ENTRY vtt_S2776C1[] = {
  {&(_ZTV7S2776C1[8]),  8,54},
  {&(_tg__ZTV7S2776C2__7S2776C1[7]),  7,9},
  {&(_tg__ZTV8S2776C117S2776C2__7S2776C1[4]),  4,6},
  {&(_tg__ZTV8S2776C128S2776C117S2776C2__7S2776C1[4]),  4,6},
  {&(_tg__ZTV8S2776C108S2776C128S2776C117S2776C2__A1__7S2776C1[3]),  3,5},
  {&(_tg__ZTV7S2776C58S2776C108S2776C128S2776C117S2776C2__A2__7S2776C1[3]),  3,3},
  {&(_tg__ZTV7S2776C5__8S2776C128S2776C117S2776C2__7S2776C1[3]),  3,3},
  {&(_tg__ZTV7S2776C5__8S2776C117S2776C2__7S2776C1[3]),  3,3},
  {&(_tg__ZTV7S2776C5__7S2776C2__7S2776C1[3]),  3,3},
  {&(_tg__ZTV7S2776C8__7S2776C2__7S2776C1[6]),  6,8},
  {&(_tg__ZTV8S2776C10__7S2776C2__7S2776C1[4]),  4,6},
  {&(_tg__ZTV8S2776C14__7S2776C1[8]),  8,10},
  {&(_tg__ZTV7S2776C28S2776C14__A1__7S2776C1[7]),  7,9},
  {&(_tg__ZTV8S2776C117S2776C28S2776C14__A1__7S2776C1[4]),  4,6},
  {&(_tg__ZTV8S2776C128S2776C117S2776C28S2776C14__A2__7S2776C1[4]),  4,6},
  {&(_tg__ZTV8S2776C108S2776C128S2776C117S2776C28S2776C14__A4__7S2776C1[3]),  3,5},
  {&(_tg__ZTV7S2776C58S2776C108S2776C128S2776C117S2776C28S2776C14__A6__7S2776C1[3]),  3,3},
  {&(_tg__ZTV7S2776C5__8S2776C128S2776C117S2776C28S2776C14__A2__7S2776C1[3]),  3,3},
  {&(_tg__ZTV7S2776C5__8S2776C117S2776C28S2776C14__A1__7S2776C1[3]),  3,3},
  {&(_tg__ZTV7S2776C5__7S2776C28S2776C14__A1__7S2776C1[3]),  3,3},
  {&(_tg__ZTV7S2776C8__7S2776C28S2776C14__A1__7S2776C1[6]),  6,8},
  {&(_tg__ZTV8S2776C10__7S2776C28S2776C14__A1__7S2776C1[4]),  4,6},
  {&(_tg__ZTV8S2776C13__8S2776C14__7S2776C1[6]),  6,9},
  {&(_tg__ZTV7S2776C5__8S2776C14__7S2776C1[3]),  3,3},
  {&(_tg__ZTV7S2776C58S2776C13__A2__8S2776C14__7S2776C1[3]),  3,3},
  {&(_tg__ZTV8S2776C108S2776C13__A1__8S2776C14__7S2776C1[3]),  3,5},
  {&(_tg__ZTV7S2776C8__8S2776C14__7S2776C1[6]),  6,8},
  {&(_tg__ZTV8S2776C10__A2__8S2776C14__7S2776C1[4]),  4,6},
  {&(_ZTV7S2776C1[23]),  23,54},
  {&(_ZTV7S2776C1[29]),  29,54},
  {&(_ZTV7S2776C1[35]),  35,54},
  {&(_ZTV7S2776C1[18]),  18,54},
  {&(_ZTV7S2776C1[43]),  43,54},
  {&(_ZTV7S2776C1[49]),  49,54},
  {&(_ZTV7S2776C1[52]),  52,54},
  {&(_tg__ZTV7S2776C5__7S2776C1[3]),  3,3},
  {&(_tg__ZTV7S2776C8__7S2776C1[5]),  5,7},
  {&(_tg__ZTV7S2776C5__7S2776C8__7S2776C1[3]),  3,3},
  {&(_tg__ZTV8S2776C10__7S2776C1[3]),  3,5},
  {&(_tg__ZTV7S2776C58S2776C10__A1__7S2776C1[3]),  3,3},
  {&(_tg__ZTV8S2776C13__7S2776C1[4]),  4,7},
  {&(_tg__ZTV8S2776C128S2776C13__A1__7S2776C1[4]),  4,6},
  {&(_tg__ZTV8S2776C108S2776C128S2776C13__A2__7S2776C1[3]),  3,5},
  {&(_tg__ZTV7S2776C58S2776C108S2776C128S2776C13__A3__7S2776C1[3]),  3,3},
  {&(_tg__ZTV7S2776C5__8S2776C128S2776C13__A1__7S2776C1[3]),  3,3},
  {&(_tg__ZTV7S2776C58S2776C13__A4__7S2776C1[3]),  3,3},
  {&(_tg__ZTV8S2776C108S2776C13__A3__7S2776C1[3]),  3,5},
  {&(_tg__ZTV7S2776C58S2776C108S2776C13__A5__7S2776C1[3]),  3,3},
  {&(_tg__ZTV7S2776C5__8S2776C13__7S2776C1[3]),  3,3},
  {&(_tg__ZTV7S2776C5__A__8S2776C13__7S2776C1[3]),  3,3},
  {&(_tg__ZTV8S2776C10__A1__8S2776C13__7S2776C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S2776C1[];
extern  VTBL_ENTRY _ZTV7S2776C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2776C1[];
static VTBL_ENTRY alt_thunk_names112[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S2776C14D0Ev,_ZTv0_n16_N8S2776C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17856_N8S2776C14D0Ev,_ZThn11008_N8S2776C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S2776C14D1Ev,_ZTv0_n16_N8S2776C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17856_N8S2776C14D1Ev,_ZThn11008_N8S2776C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S2776C14D0Ev,_ZTv0_n24_N8S2776C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17696_N8S2776C14D0Ev,_ZThn10908_N8S2776C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S2776C14D1Ev,_ZTv0_n24_N8S2776C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17696_N8S2776C14D1Ev,_ZThn10908_N8S2776C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2776C14D0Ev,_ZTv0_n20_N8S2776C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20144_N8S2776C14D0Ev,_ZThn12420_N8S2776C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S2776C14D1Ev,_ZTv0_n20_N8S2776C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20144_N8S2776C14D1Ev,_ZThn12420_N8S2776C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S2776C2D0Ev,_ZTv0_n16_N7S2776C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17856_N7S2776C2D0Ev,_ZThn11008_N7S2776C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn33952_N7S2776C2D0Ev,_ZThn20928_N7S2776C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S2776C2D1Ev,_ZTv0_n16_N7S2776C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17856_N7S2776C2D1Ev,_ZThn11008_N7S2776C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn33952_N7S2776C2D1Ev,_ZThn20928_N7S2776C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S2776C2D0Ev,_ZTv0_n24_N7S2776C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17696_N7S2776C2D0Ev,_ZThn10908_N7S2776C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn33792_N7S2776C2D0Ev,_ZThn20828_N7S2776C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S2776C2D1Ev,_ZTv0_n24_N7S2776C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17696_N7S2776C2D1Ev,_ZThn10908_N7S2776C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn33792_N7S2776C2D1Ev,_ZThn20828_N7S2776C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2776C1D0Ev,_ZTv0_n20_N7S2776C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn36240_N7S2776C1D0Ev,_ZThn22340_N7S2776C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S2776C1D1Ev,_ZTv0_n20_N7S2776C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn36240_N7S2776C1D1Ev,_ZThn22340_N7S2776C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S2776C1D0Ev,_ZTv0_n16_N7S2776C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33952_N7S2776C1D0Ev,_ZThn20928_N7S2776C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S2776C1D1Ev,_ZTv0_n16_N7S2776C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33952_N7S2776C1D1Ev,_ZThn20928_N7S2776C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S2776C1D0Ev,_ZTv0_n24_N7S2776C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33792_N7S2776C1D0Ev,_ZThn20828_N7S2776C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S2776C1D1Ev,_ZTv0_n24_N7S2776C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33792_N7S2776C1D1Ev,_ZThn20828_N7S2776C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2776C1 = {  "S2776C1", // class name
  bases_S2776C1, 52,
  &(vtc_S2776C1[0]), // expected_vtbl_contents
  &(vtt_S2776C1[0]), // expected_vtt_contents
  ABISELECT(44528,27440), // object size
  NSPAIRA(_ZTI7S2776C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2776C1),54, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2776C1),51, //virtual table table var
  22, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names112,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6424C2  {
  short s6424c2f0[6];
  __tsi64 s6424c2f1[8];
  int s6424c2f2;
  virtual  ~S6424C2(); // _ZN7S6424C2D1Ev
  virtual void  v1(); // _ZN7S6424C22v1Ev
  S6424C2(); // tgen
};
//SIG(-1 S6424C2) C1{ vd v1 Fs[6] FL[8] Fi}


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

static void Test_S6424C2()
{
  extern Class_Descriptor cd_S6424C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,22)];
    init_test(&cd_S6424C2, buf);
    S6424C2 *dp, &lv = *(dp=new (buf) S6424C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,84), "sizeof(S6424C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6424C2)");
    check_field_offset(lv, s6424c2f0, ABISELECT(8,4), "S6424C2.s6424c2f0");
    check_field_offset(lv, s6424c2f1, ABISELECT(24,16), "S6424C2.s6424c2f1");
    check_field_offset(lv, s6424c2f2, ABISELECT(88,80), "S6424C2.s6424c2f2");
    test_class_info(&lv, &cd_S6424C2);
    dp->~S6424C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6424C2(Test_S6424C2, "S6424C2", ABISELECT(96,84));

#else // __cplusplus

extern void _ZN7S6424C2C1Ev();
extern void _ZN7S6424C2D1Ev();
Name_Map name_map_S6424C2[] = {
  NSPAIR(_ZN7S6424C2C1Ev),
  NSPAIR(_ZN7S6424C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6424C2[];
extern void _ZN7S6424C2D1Ev();
extern void _ZN7S6424C2D0Ev();
extern void _ZN7S6424C22v1Ev();
static  VTBL_ENTRY vtc_S6424C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6424C2[0]),
  (VTBL_ENTRY)&_ZN7S6424C2D1Ev,
  (VTBL_ENTRY)&_ZN7S6424C2D0Ev,
  (VTBL_ENTRY)&_ZN7S6424C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S6424C2[];
extern  VTBL_ENTRY _ZTV7S6424C2[];
Class_Descriptor cd_S6424C2 = {  "S6424C2", // class name
  0,0,//no base classes
  &(vtc_S6424C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,84), // object size
  NSPAIRA(_ZTI7S6424C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6424C2),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  S6424C6  : virtual S6424C2 {
  __tsi64 s6424c6f0;
  void *s6424c6f1;
  __tsi64 s6424c6f2:54;
  ~S6424C6(); // tgen
  S6424C6(); // tgen
};
//SIG(-1 S6424C6) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} FL Fp FL:54}


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

static void Test_S6424C6()
{
  extern Class_Descriptor cd_S6424C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,28)];
    init_test(&cd_S6424C6, buf);
    S6424C6 *dp, &lv = *(dp=new (buf) S6424C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,108), "sizeof(S6424C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6424C6)");
    check_base_class_offset(lv, (S6424C2*), ABISELECT(32,24), "S6424C6");
    check_field_offset(lv, s6424c6f0, ABISELECT(8,4), "S6424C6.s6424c6f0");
    check_field_offset(lv, s6424c6f1, ABISELECT(16,12), "S6424C6.s6424c6f1");
    set_bf_and_test(lv, s6424c6f2, ABISELECT(24,16), 0, 54, 1, "S6424C6");
    set_bf_and_test(lv, s6424c6f2, ABISELECT(24,16), 0, 54, hide_sll(1LL<<53), "S6424C6");
    test_class_info(&lv, &cd_S6424C6);
    dp->~S6424C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6424C6(Test_S6424C6, "S6424C6", ABISELECT(128,108));

#else // __cplusplus

extern void _ZN7S6424C6C1Ev();
extern void _ZN7S6424C6D1Ev();
Name_Map name_map_S6424C6[] = {
  NSPAIR(_ZN7S6424C6C1Ev),
  NSPAIR(_ZN7S6424C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6424C2;
extern VTBL_ENTRY _ZTI7S6424C2[];
extern  VTBL_ENTRY _ZTV7S6424C2[];
static Base_Class bases_S6424C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6424C2,    ABISELECT(32,24), //bcp->offset
    5, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S6424C6[];
extern void _ZN7S6424C6D1Ev();
extern void _ZN7S6424C6D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S6424C6D1Ev,_ZTv0_n12_N7S6424C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S6424C6D1Ev,_ZThn24_N7S6424C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6424C6D0Ev,_ZTv0_n12_N7S6424C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S6424C6D0Ev,_ZThn24_N7S6424C6D0Ev)() __attribute__((weak));
extern void _ZN7S6424C22v1Ev();
static  VTBL_ENTRY vtc_S6424C6[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S6424C6[0]),
  (VTBL_ENTRY)&_ZN7S6424C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6424C6D0Ev,
  0,
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S6424C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6424C6D1Ev,_ZTv0_n12_N7S6424C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6424C6D0Ev,_ZTv0_n12_N7S6424C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6424C22v1Ev,
};
extern VTBL_ENTRY _ZTV7S6424C6[];
static  VTT_ENTRY vtt_S6424C6[] = {
  {&(_ZTV7S6424C6[3]),  3,12},
  {&(_ZTV7S6424C6[9]),  9,12},
};
extern VTBL_ENTRY _ZTI7S6424C6[];
extern  VTBL_ENTRY _ZTV7S6424C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6424C6[];
static VTBL_ENTRY alt_thunk_names113[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6424C6D0Ev,_ZTv0_n12_N7S6424C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S6424C6D0Ev,_ZThn24_N7S6424C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6424C6D1Ev,_ZTv0_n12_N7S6424C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S6424C6D1Ev,_ZThn24_N7S6424C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6424C6 = {  "S6424C6", // class name
  bases_S6424C6, 1,
  &(vtc_S6424C6[0]), // expected_vtbl_contents
  &(vtt_S6424C6[0]), // expected_vtt_contents
  ABISELECT(128,108), // object size
  NSPAIRA(_ZTI7S6424C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6424C6),12, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6424C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names113,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6424C5  : virtual S6424C2 , S6424C6 {
  char  :0;
  void *s6424c5f1[8];
  char s6424c5f2;
  virtual void  v2(); // _ZN7S6424C52v2Ev
  virtual void  v3(); // _ZN7S6424C52v3Ev
  ~S6424C5(); // tgen
  S6424C5(); // tgen
};
//SIG(-1 S6424C5) C1{ VBC2{ vd v3 Fs[6] FL[8] Fi} BC3{ VBC2 FL Fp FL:54} v1 v2 Fc:0 Fp[8] Fc}


void  S6424C5 ::v2(){vfunc_called(this, "_ZN7S6424C52v2Ev");}
void  S6424C5 ::v3(){vfunc_called(this, "_ZN7S6424C52v3Ev");}
S6424C5 ::~S6424C5(){ note_dtor("S6424C5", this);} // tgen
S6424C5 ::S6424C5(){ note_ctor("S6424C5", this);} // tgen

static void Test_S6424C5()
{
  extern Class_Descriptor cd_S6424C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,37)];
    init_test(&cd_S6424C5, buf);
    S6424C5 *dp, &lv = *(dp=new (buf) S6424C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,144), "sizeof(S6424C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6424C5)");
    check_base_class_offset(lv, (S6424C2*), ABISELECT(104,60), "S6424C5");
    check_base_class_offset(lv, (S6424C2*)(S6424C6*), ABISELECT(104,60), "S6424C5");
    check_base_class_offset(lv, (S6424C6*), 0, "S6424C5");
    check_field_offset(lv, s6424c5f1, ABISELECT(32,24), "S6424C5.s6424c5f1");
    check_field_offset(lv, s6424c5f2, ABISELECT(96,56), "S6424C5.s6424c5f2");
    test_class_info(&lv, &cd_S6424C5);
    dp->~S6424C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6424C5(Test_S6424C5, "S6424C5", ABISELECT(200,144));

#else // __cplusplus

extern void _ZN7S6424C5C1Ev();
extern void _ZN7S6424C5D1Ev();
Name_Map name_map_S6424C5[] = {
  NSPAIR(_ZN7S6424C5C1Ev),
  NSPAIR(_ZN7S6424C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6424C2;
extern VTBL_ENTRY _ZTI7S6424C2[];
extern  VTBL_ENTRY _ZTV7S6424C2[];
extern Class_Descriptor cd_S6424C6;
extern VTBL_ENTRY _ZTI7S6424C6[];
extern  VTBL_ENTRY _ZTV7S6424C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6424C6[];
static Base_Class bases_S6424C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6424C2,    ABISELECT(104,60), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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_S6424C6,    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 _ZTI7S6424C5[];
extern void _ZN7S6424C5D1Ev();
extern void _ZN7S6424C5D0Ev();
extern void _ZN7S6424C52v2Ev();
extern void _ZN7S6424C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S6424C5D1Ev,_ZTv0_n12_N7S6424C5D1Ev)();
extern void ABISELECT(_ZThn104_N7S6424C5D1Ev,_ZThn60_N7S6424C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6424C5D0Ev,_ZTv0_n12_N7S6424C5D0Ev)();
extern void ABISELECT(_ZThn104_N7S6424C5D0Ev,_ZThn60_N7S6424C5D0Ev)() __attribute__((weak));
extern void _ZN7S6424C22v1Ev();
static  VTBL_ENTRY vtc_S6424C5[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S6424C5[0]),
  (VTBL_ENTRY)&_ZN7S6424C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6424C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6424C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6424C52v3Ev,
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S6424C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6424C5D1Ev,_ZTv0_n12_N7S6424C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6424C5D0Ev,_ZTv0_n12_N7S6424C5D0Ev),
  (VTBL_ENTRY)&_ZN7S6424C22v1Ev,
};
extern VTBL_ENTRY _ZTV7S6424C5[];
extern void _ZN7S6424C6D1Ev();
extern void _ZN7S6424C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6424C6__7S6424C5[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S6424C6[0]),
  (VTBL_ENTRY)&_ZN7S6424C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6424C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6424C6D1Ev,_ZTv0_n12_N7S6424C6D1Ev)();
extern void ABISELECT(_ZThn104_N7S6424C6D1Ev,_ZThn60_N7S6424C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6424C6D0Ev,_ZTv0_n12_N7S6424C6D0Ev)();
extern void ABISELECT(_ZThn104_N7S6424C6D0Ev,_ZThn60_N7S6424C6D0Ev)() __attribute__((weak));
extern void _ZN7S6424C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6424C2__7S6424C6__7S6424C5[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S6424C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6424C6D1Ev,_ZTv0_n12_N7S6424C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6424C6D0Ev,_ZTv0_n12_N7S6424C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6424C22v1Ev,
};
static  VTT_ENTRY vtt_S6424C5[] = {
  {&(_ZTV7S6424C5[3]),  3,14},
  {&(_tg__ZTV7S6424C6__7S6424C5[3]),  3,5},
  {&(_tg__ZTV7S6424C2__7S6424C6__7S6424C5[4]),  4,7},
  {&(_ZTV7S6424C5[11]),  11,14},
};
extern VTBL_ENTRY _ZTI7S6424C5[];
extern  VTBL_ENTRY _ZTV7S6424C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6424C5[];
static VTBL_ENTRY alt_thunk_names114[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6424C6D0Ev,_ZTv0_n12_N7S6424C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S6424C6D0Ev,_ZThn60_N7S6424C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6424C6D1Ev,_ZTv0_n12_N7S6424C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S6424C6D1Ev,_ZThn60_N7S6424C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6424C5D0Ev,_ZTv0_n12_N7S6424C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S6424C5D0Ev,_ZThn60_N7S6424C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6424C5D1Ev,_ZTv0_n12_N7S6424C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S6424C5D1Ev,_ZThn60_N7S6424C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6424C5 = {  "S6424C5", // class name
  bases_S6424C5, 2,
  &(vtc_S6424C5[0]), // expected_vtbl_contents
  &(vtt_S6424C5[0]), // expected_vtt_contents
  ABISELECT(200,144), // object size
  NSPAIRA(_ZTI7S6424C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6424C5),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6424C5),4, //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  S6424C3  : S3052C10 , virtual S6424C5 {
  void *s6424c3f0;
  char s6424c3f1[4];
  int s6424c3f2:11;
  void *s6424c3f3[2];
  int s6424c3f4[6];
  ::S21123C11 s6424c3f5[6];
  ~S6424C3(); // tgen
  S6424C3(); // tgen
};
//SIG(-1 S6424C3) C1{ BC2{ m Fp Fi FL Fp Fi} VBC3{ VBC4{ vd v1 Fs[6] FL[8] Fi} BC5{ VBC4 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp Fc[4] Fi:11 Fp[2] Fi[6] FC6{ VBC7{ vd v4 Fs[6] FL[8] Fi} BC8{ VBC7 BC9{ VBC7 FL Fp FL:54} v5 v6 Fc:0 Fp[8] Fc} BC10{ VBC7 BC8 Fp[3] Fc:8 Fi[2] Fc FC7 Fp[3] FL[5] Fi} BC11{ vd m FC12{ VBC13{ vd v9 Fs[6] FL[8] Fi} BC14{ VBC13 FL Fp FL:54} v7 v8 Fc:0 Fp[8] Fc}} VBC9 Fp Fl FC10 FC11 FC9 Fi[2] FU15{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]}


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

static void Test_S6424C3()
{
  extern Class_Descriptor cd_S6424C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(645,1909)];
    init_test(&cd_S6424C3, buf);
    S6424C3 *dp, &lv = *(dp=new (buf) S6424C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(10304,7632), "sizeof(S6424C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6424C3)");
    check_base_class_offset(lv, (S3052C10*), ABISELECT(8,4), "S6424C3");
    check_base_class_offset(lv, (S6424C2*)(S6424C5*), ABISELECT(10200,7548), "S6424C3");
    check_base_class_offset(lv, (S6424C2*)(S6424C6*)(S6424C5*), ABISELECT(10200,7548), "S6424C3");
    check_base_class_offset(lv, (S6424C6*)(S6424C5*), ABISELECT(10096,7488), "S6424C3");
    check_base_class_offset(lv, (S6424C5*), ABISELECT(10096,7488), "S6424C3");
    check_field_offset(lv, s6424c3f0, ABISELECT(48,28), "S6424C3.s6424c3f0");
    check_field_offset(lv, s6424c3f1, ABISELECT(56,32), "S6424C3.s6424c3f1");
    set_bf_and_test(lv, s6424c3f2, ABISELECT(60,36), 0, 11, 1, "S6424C3");
    set_bf_and_test(lv, s6424c3f2, ABISELECT(60,36), 0, 11, hide_sll(1LL<<10), "S6424C3");
    check_field_offset(lv, s6424c3f3, ABISELECT(64,40), "S6424C3.s6424c3f3");
    check_field_offset(lv, s6424c3f4, ABISELECT(80,48), "S6424C3.s6424c3f4");
    check_field_offset(lv, s6424c3f5, ABISELECT(112,72), "S6424C3.s6424c3f5");
    test_class_info(&lv, &cd_S6424C3);
    dp->~S6424C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6424C3(Test_S6424C3, "S6424C3", ABISELECT(10304,7632));

#else // __cplusplus

extern void _ZN7S6424C3C1Ev();
extern void _ZN7S6424C3D1Ev();
Name_Map name_map_S6424C3[] = {
  NSPAIR(_ZN7S6424C3C1Ev),
  NSPAIR(_ZN7S6424C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S6424C2;
extern VTBL_ENTRY _ZTI7S6424C2[];
extern  VTBL_ENTRY _ZTV7S6424C2[];
extern Class_Descriptor cd_S6424C6;
extern VTBL_ENTRY _ZTI7S6424C6[];
extern  VTBL_ENTRY _ZTV7S6424C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6424C6[];
extern Class_Descriptor cd_S6424C5;
extern VTBL_ENTRY _ZTI7S6424C5[];
extern  VTBL_ENTRY _ZTV7S6424C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6424C5[];
static Base_Class bases_S6424C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C10,    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_S6424C2,    ABISELECT(10200,7548), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //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_S6424C6,    ABISELECT(10096,7488), //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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6424C5,    ABISELECT(10096,7488), //bcp->offset
    6, //bcp->virtual_function_table_offset
    6, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S6424C3[];
extern void _ZN7S6424C3D1Ev();
extern void _ZN7S6424C3D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S6424C3D1Ev,_ZTv0_n16_N7S6424C3D1Ev)();
extern void ABISELECT(_ZThn10096_N7S6424C3D1Ev,_ZThn7488_N7S6424C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6424C3D0Ev,_ZTv0_n16_N7S6424C3D0Ev)();
extern void ABISELECT(_ZThn10096_N7S6424C3D0Ev,_ZThn7488_N7S6424C3D0Ev)() __attribute__((weak));
extern void _ZN7S6424C52v2Ev();
extern void _ZN7S6424C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S6424C3D1Ev,_ZTv0_n12_N7S6424C3D1Ev)();
extern void ABISELECT(_ZThn10200_N7S6424C3D1Ev,_ZThn7548_N7S6424C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6424C3D0Ev,_ZTv0_n12_N7S6424C3D0Ev)();
extern void ABISELECT(_ZThn10200_N7S6424C3D0Ev,_ZThn7548_N7S6424C3D0Ev)() __attribute__((weak));
extern void _ZN7S6424C22v1Ev();
static  VTBL_ENTRY vtc_S6424C3[] = {
  ABISELECT(10200,7548),
  ABISELECT(10096,7488),
  0,
  (VTBL_ENTRY)&(_ZTI7S6424C3[0]),
  (VTBL_ENTRY)&_ZN7S6424C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6424C3D0Ev,
  0,
  0,
  ABISELECT(-10096,-7488),
  ABISELECT(104,60),
  ABISELECT(-10096,-7488),
  (VTBL_ENTRY)&(_ZTI7S6424C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6424C3D1Ev,_ZTv0_n16_N7S6424C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6424C3D0Ev,_ZTv0_n16_N7S6424C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6424C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6424C52v3Ev,
  0,
  ABISELECT(-10200,-7548),
  ABISELECT(-10200,-7548),
  (VTBL_ENTRY)&(_ZTI7S6424C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6424C3D1Ev,_ZTv0_n12_N7S6424C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6424C3D0Ev,_ZTv0_n12_N7S6424C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6424C22v1Ev,
};
extern VTBL_ENTRY _ZTV7S6424C3[];
extern void _ZN7S6424C5D1Ev();
extern void _ZN7S6424C5D0Ev();
extern void _ZN7S6424C52v2Ev();
extern void _ZN7S6424C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6424C5__7S6424C3[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S6424C5[0]),
  (VTBL_ENTRY)&_ZN7S6424C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6424C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6424C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6424C52v3Ev,
};
extern void _ZN7S6424C6D1Ev();
extern void _ZN7S6424C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6424C67S6424C5__7S6424C3[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S6424C6[0]),
  (VTBL_ENTRY)&_ZN7S6424C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6424C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6424C6D1Ev,_ZTv0_n12_N7S6424C6D1Ev)();
extern void ABISELECT(_ZThn104_N7S6424C6D1Ev,_ZThn60_N7S6424C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6424C6D0Ev,_ZTv0_n12_N7S6424C6D0Ev)();
extern void ABISELECT(_ZThn104_N7S6424C6D0Ev,_ZThn60_N7S6424C6D0Ev)() __attribute__((weak));
extern void _ZN7S6424C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6424C2__7S6424C67S6424C5__7S6424C3[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S6424C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6424C6D1Ev,_ZTv0_n12_N7S6424C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6424C6D0Ev,_ZTv0_n12_N7S6424C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6424C22v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6424C5D1Ev,_ZTv0_n12_N7S6424C5D1Ev)();
extern void ABISELECT(_ZThn104_N7S6424C5D1Ev,_ZThn60_N7S6424C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6424C5D0Ev,_ZTv0_n12_N7S6424C5D0Ev)();
extern void ABISELECT(_ZThn104_N7S6424C5D0Ev,_ZThn60_N7S6424C5D0Ev)() __attribute__((weak));
extern void _ZN7S6424C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6424C2__7S6424C5__7S6424C3[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S6424C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6424C5D1Ev,_ZTv0_n12_N7S6424C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6424C5D0Ev,_ZTv0_n12_N7S6424C5D0Ev),
  (VTBL_ENTRY)&_ZN7S6424C22v1Ev,
};
static  VTT_ENTRY vtt_S6424C3[] = {
  {&(_ZTV7S6424C3[4]),  4,23},
  {&(_ZTV7S6424C3[12]),  12,23},
  {&(_ZTV7S6424C3[20]),  20,23},
  {&(_tg__ZTV7S6424C5__7S6424C3[3]),  3,7},
  {&(_tg__ZTV7S6424C67S6424C5__7S6424C3[3]),  3,5},
  {&(_tg__ZTV7S6424C2__7S6424C67S6424C5__7S6424C3[4]),  4,7},
  {&(_tg__ZTV7S6424C2__7S6424C5__7S6424C3[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S6424C3[];
extern  VTBL_ENTRY _ZTV7S6424C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6424C3[];
static VTBL_ENTRY alt_thunk_names115[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6424C5D0Ev,_ZTv0_n12_N7S6424C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S6424C5D0Ev,_ZThn60_N7S6424C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6424C5D1Ev,_ZTv0_n12_N7S6424C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S6424C5D1Ev,_ZThn60_N7S6424C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6424C6D0Ev,_ZTv0_n12_N7S6424C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S6424C6D0Ev,_ZThn60_N7S6424C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6424C6D1Ev,_ZTv0_n12_N7S6424C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S6424C6D1Ev,_ZThn60_N7S6424C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6424C3D0Ev,_ZTv0_n12_N7S6424C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10200_N7S6424C3D0Ev,_ZThn7548_N7S6424C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6424C3D1Ev,_ZTv0_n12_N7S6424C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10200_N7S6424C3D1Ev,_ZThn7548_N7S6424C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6424C3D0Ev,_ZTv0_n16_N7S6424C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10096_N7S6424C3D0Ev,_ZThn7488_N7S6424C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6424C3D1Ev,_ZTv0_n16_N7S6424C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10096_N7S6424C3D1Ev,_ZThn7488_N7S6424C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6424C3 = {  "S6424C3", // class name
  bases_S6424C3, 4,
  &(vtc_S6424C3[0]), // expected_vtbl_contents
  &(vtt_S6424C3[0]), // expected_vtt_contents
  ABISELECT(10304,7632), // object size
  NSPAIRA(_ZTI7S6424C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6424C3),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6424C3),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names115,
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S6424C11  {
  char s6424c11f0;
  char s6424c11f1;
  int s6424c11f2[6];
  long s6424c11f3;
  __tsi64 s6424c11f4;
  void  mf6424c11(); // _ZN8S6424C119mf6424c11Ev
};
//SIG(1 S6424C11) U1{ m Fc Fc Fi[6] Fl FL}

#endif // __cplusplus
#ifdef __cplusplus

struct  S6424C1  : S6424C2 , virtual S6424C3 , virtual S3052C10 {
  long double s6424c1f0;
  char s6424c1f1;
  int s6424c1f2;
  short s6424c1f3;
  ::S3052C13 s6424c1f4;
  ::S3052C13 s6424c1f5;
  ::S3052C13 s6424c1f6;
  ::S3052C13 s6424c1f7[5];
  ::S6424C11 s6424c1f8;
  short s6424c1f9;
  char s6424c1f10:8;
  virtual  ~S6424C1(); // _ZN7S6424C1D2Ev
  S6424C1(); // tgen
};
//SIG(1 S6424C1) C1{ BC2{ vd v1 Fs[6] FL[8] Fi} VBC3{ BC4{ m Fp Fi FL Fp Fi} VBC5{ VBC2 BC6{ VBC2 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp Fc[4] Fi:11 Fp[2] Fi[6] FC7{ VBC8{ vd v4 Fs[6] FL[8] Fi} BC9{ VBC8 BC10{ VBC8 FL Fp FL:54} v5 v6 Fc:0 Fp[8] Fc} BC11{ VBC8 BC9 Fp[3] Fc:8 Fi[2] Fc FC8 Fp[3] FL[5] Fi} BC12{ vd m FC13{ VBC14{ vd v9 Fs[6] FL[8] Fi} BC15{ VBC14 FL Fp FL:54} v7 v8 Fc:0 Fp[8] Fc}} VBC10 Fp Fl FC11 FC12 FC10 Fi[2] FU16{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} VBC4 vd FD Fc Fi Fs FU16 FU16 FU16 FU16[5] FU17{ m Fc Fc Fi[6] Fl FL} Fs Fc:8}


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

static void Test_S6424C1()
{
  extern Class_Descriptor cd_S6424C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(665,1973)];
    init_test(&cd_S6424C1, buf);
    S6424C1 *dp, &lv = *(dp=new (buf) S6424C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(10624,7888), "sizeof(S6424C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6424C1)");
    /*is_ambiguous_... S6424C1::S6424C2 */ AMB_check_base_class_offset(lv, (S6424C2*), 0, "S6424C1");
    check_base_class_offset(lv, (S3052C10*)(S6424C3*), ABISELECT(296,236), "S6424C1");
    check_base_class_offset(lv, (S6424C2*)(S6424C5*), ABISELECT(10488,7780), "S6424C1");
    check_base_class_offset(lv, (S6424C2*)(S6424C6*)(S6424C5*), ABISELECT(10488,7780), "S6424C1");
    check_base_class_offset(lv, (S6424C6*)(S6424C5*), ABISELECT(10384,7720), "S6424C1");
    check_base_class_offset(lv, (S6424C5*)(S6424C3*), ABISELECT(10384,7720), "S6424C1");
    check_base_class_offset(lv, (S6424C3*), ABISELECT(288,232), "S6424C1");
    /*is_ambiguous_... S6424C1::S3052C10 */ AMB_check_base_class_offset(lv, (S3052C10*), ABISELECT(10584,7864), "S6424C1");
    check_field_offset(lv, s6424c1f0, ABISELECT(96,84), "S6424C1.s6424c1f0");
    check_field_offset(lv, s6424c1f1, ABISELECT(112,96), "S6424C1.s6424c1f1");
    check_field_offset(lv, s6424c1f2, ABISELECT(116,100), "S6424C1.s6424c1f2");
    check_field_offset(lv, s6424c1f3, ABISELECT(120,104), "S6424C1.s6424c1f3");
    check_field_offset(lv, s6424c1f4, ABISELECT(128,108), "S6424C1.s6424c1f4");
    check_field_offset(lv, s6424c1f5, ABISELECT(144,120), "S6424C1.s6424c1f5");
    check_field_offset(lv, s6424c1f6, ABISELECT(160,132), "S6424C1.s6424c1f6");
    check_field_offset(lv, s6424c1f7, ABISELECT(176,144), "S6424C1.s6424c1f7");
    check_field_offset(lv, s6424c1f8, ABISELECT(256,204), "S6424C1.s6424c1f8");
    check_field_offset(lv, s6424c1f9, ABISELECT(280,228), "S6424C1.s6424c1f9");
    set_bf_and_test(lv, s6424c1f10, ABISELECT(282,230), 0, 8, 1, "S6424C1");
    set_bf_and_test(lv, s6424c1f10, ABISELECT(282,230), 0, 8, hide_sll(1LL<<7), "S6424C1");
    test_class_info(&lv, &cd_S6424C1);
    dp->~S6424C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6424C1(Test_S6424C1, "S6424C1", ABISELECT(10624,7888));

#else // __cplusplus

extern void _ZN7S6424C1C1Ev();
extern void _ZN7S6424C1D2Ev();
Name_Map name_map_S6424C1[] = {
  NSPAIR(_ZN7S6424C1C1Ev),
  NSPAIR(_ZN7S6424C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6424C2;
extern VTBL_ENTRY _ZTI7S6424C2[];
extern  VTBL_ENTRY _ZTV7S6424C2[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S6424C2;
extern VTBL_ENTRY _ZTI7S6424C2[];
extern  VTBL_ENTRY _ZTV7S6424C2[];
extern Class_Descriptor cd_S6424C6;
extern VTBL_ENTRY _ZTI7S6424C6[];
extern  VTBL_ENTRY _ZTV7S6424C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6424C6[];
extern Class_Descriptor cd_S6424C5;
extern VTBL_ENTRY _ZTI7S6424C5[];
extern  VTBL_ENTRY _ZTV7S6424C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6424C5[];
extern Class_Descriptor cd_S6424C3;
extern VTBL_ENTRY _ZTI7S6424C3[];
extern  VTBL_ENTRY _ZTV7S6424C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6424C3[];
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
static Base_Class bases_S6424C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6424C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S3052C10,    ABISELECT(296,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6424C2,    ABISELECT(10488,7780), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //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
    3, //immediately_derived
  0, 1},
  {&cd_S6424C6,    ABISELECT(10384,7720), //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
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S6424C5,    ABISELECT(10384,7720), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //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
    5, //immediately_derived
  0, 1},
  {&cd_S6424C3,    ABISELECT(288,232), //bcp->offset
    9, //bcp->virtual_function_table_offset
    5, //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},
  {&cd_S3052C10,    ABISELECT(10584,7864), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S6424C1[];
extern void _ZN7S6424C1D1Ev();
extern void _ZN7S6424C1D0Ev();
extern void _ZN7S6424C22v1Ev();
extern void ABISELECT(_ZTv0_n40_N7S6424C1D1Ev,_ZTv0_n20_N7S6424C1D1Ev)();
extern void ABISELECT(_ZThn288_N7S6424C1D1Ev,_ZThn232_N7S6424C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S6424C1D0Ev,_ZTv0_n20_N7S6424C1D0Ev)();
extern void ABISELECT(_ZThn288_N7S6424C1D0Ev,_ZThn232_N7S6424C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6424C1D1Ev,_ZTv0_n16_N7S6424C1D1Ev)();
extern void ABISELECT(_ZThn10384_N7S6424C1D1Ev,_ZThn7720_N7S6424C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6424C1D0Ev,_ZTv0_n16_N7S6424C1D0Ev)();
extern void ABISELECT(_ZThn10384_N7S6424C1D0Ev,_ZThn7720_N7S6424C1D0Ev)() __attribute__((weak));
extern void _ZN7S6424C52v2Ev();
extern void _ZN7S6424C52v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S6424C1D1Ev,_ZTv0_n12_N7S6424C1D1Ev)();
extern void ABISELECT(_ZThn10488_N7S6424C1D1Ev,_ZThn7780_N7S6424C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6424C1D0Ev,_ZTv0_n12_N7S6424C1D0Ev)();
extern void ABISELECT(_ZThn10488_N7S6424C1D0Ev,_ZThn7780_N7S6424C1D0Ev)() __attribute__((weak));
extern void _ZN7S6424C22v1Ev();
static  VTBL_ENTRY vtc_S6424C1[] = {
  ABISELECT(10584,7864),
  ABISELECT(10488,7780),
  ABISELECT(10384,7720),
  ABISELECT(288,232),
  0,
  (VTBL_ENTRY)&(_ZTI7S6424C1[0]),
  (VTBL_ENTRY)&_ZN7S6424C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6424C1D0Ev,
  (VTBL_ENTRY)&_ZN7S6424C22v1Ev,
  ABISELECT(-288,-232),
  ABISELECT(10200,7548),
  ABISELECT(10096,7488),
  ABISELECT(-288,-232),
  (VTBL_ENTRY)&(_ZTI7S6424C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6424C1D1Ev,_ZTv0_n20_N7S6424C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S6424C1D0Ev,_ZTv0_n20_N7S6424C1D0Ev),
  0,
  0,
  ABISELECT(-10384,-7720),
  ABISELECT(104,60),
  ABISELECT(-10384,-7720),
  (VTBL_ENTRY)&(_ZTI7S6424C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6424C1D1Ev,_ZTv0_n16_N7S6424C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6424C1D0Ev,_ZTv0_n16_N7S6424C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6424C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6424C52v3Ev,
  0,
  ABISELECT(-10488,-7780),
  ABISELECT(-10488,-7780),
  (VTBL_ENTRY)&(_ZTI7S6424C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6424C1D1Ev,_ZTv0_n12_N7S6424C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6424C1D0Ev,_ZTv0_n12_N7S6424C1D0Ev),
  (VTBL_ENTRY)&_ZN7S6424C22v1Ev,
};
extern VTBL_ENTRY _ZTV7S6424C1[];
extern void _ZN7S6424C3D1Ev();
extern void _ZN7S6424C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6424C3__7S6424C1[] = {
  ABISELECT(10200,7548),
  ABISELECT(10096,7488),
  0,
  (VTBL_ENTRY)&(_ZTI7S6424C3[0]),
  (VTBL_ENTRY)&_ZN7S6424C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6424C3D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S6424C3D1Ev,_ZTv0_n16_N7S6424C3D1Ev)();
extern void ABISELECT(_ZThn10096_N7S6424C3D1Ev,_ZThn7488_N7S6424C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S6424C3D0Ev,_ZTv0_n16_N7S6424C3D0Ev)();
extern void ABISELECT(_ZThn10096_N7S6424C3D0Ev,_ZThn7488_N7S6424C3D0Ev)() __attribute__((weak));
extern void _ZN7S6424C52v2Ev();
extern void _ZN7S6424C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6424C5__7S6424C3__7S6424C1[] = {
  0,
  0,
  ABISELECT(-10096,-7488),
  ABISELECT(104,60),
  ABISELECT(-10096,-7488),
  (VTBL_ENTRY)&(_ZTI7S6424C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6424C3D1Ev,_ZTv0_n16_N7S6424C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S6424C3D0Ev,_ZTv0_n16_N7S6424C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6424C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6424C52v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6424C3D1Ev,_ZTv0_n12_N7S6424C3D1Ev)();
extern void ABISELECT(_ZThn10200_N7S6424C3D1Ev,_ZThn7548_N7S6424C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6424C3D0Ev,_ZTv0_n12_N7S6424C3D0Ev)();
extern void ABISELECT(_ZThn10200_N7S6424C3D0Ev,_ZThn7548_N7S6424C3D0Ev)() __attribute__((weak));
extern void _ZN7S6424C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6424C2__7S6424C3__7S6424C1[] = {
  0,
  ABISELECT(-10200,-7548),
  ABISELECT(-10200,-7548),
  (VTBL_ENTRY)&(_ZTI7S6424C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6424C3D1Ev,_ZTv0_n12_N7S6424C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6424C3D0Ev,_ZTv0_n12_N7S6424C3D0Ev),
  (VTBL_ENTRY)&_ZN7S6424C22v1Ev,
};
extern void _ZN7S6424C5D1Ev();
extern void _ZN7S6424C5D0Ev();
extern void _ZN7S6424C52v2Ev();
extern void _ZN7S6424C52v3Ev();
static  VTBL_ENTRY _tg__ZTV7S6424C5__7S6424C1[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S6424C5[0]),
  (VTBL_ENTRY)&_ZN7S6424C5D1Ev,
  (VTBL_ENTRY)&_ZN7S6424C5D0Ev,
  (VTBL_ENTRY)&_ZN7S6424C52v2Ev,
  (VTBL_ENTRY)&_ZN7S6424C52v3Ev,
};
extern void _ZN7S6424C6D1Ev();
extern void _ZN7S6424C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6424C67S6424C5__7S6424C1[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S6424C6[0]),
  (VTBL_ENTRY)&_ZN7S6424C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6424C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6424C6D1Ev,_ZTv0_n12_N7S6424C6D1Ev)();
extern void ABISELECT(_ZThn104_N7S6424C6D1Ev,_ZThn60_N7S6424C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6424C6D0Ev,_ZTv0_n12_N7S6424C6D0Ev)();
extern void ABISELECT(_ZThn104_N7S6424C6D0Ev,_ZThn60_N7S6424C6D0Ev)() __attribute__((weak));
extern void _ZN7S6424C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6424C2__7S6424C67S6424C5__7S6424C1[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S6424C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6424C6D1Ev,_ZTv0_n12_N7S6424C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6424C6D0Ev,_ZTv0_n12_N7S6424C6D0Ev),
  (VTBL_ENTRY)&_ZN7S6424C22v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S6424C5D1Ev,_ZTv0_n12_N7S6424C5D1Ev)();
extern void ABISELECT(_ZThn104_N7S6424C5D1Ev,_ZThn60_N7S6424C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6424C5D0Ev,_ZTv0_n12_N7S6424C5D0Ev)();
extern void ABISELECT(_ZThn104_N7S6424C5D0Ev,_ZThn60_N7S6424C5D0Ev)() __attribute__((weak));
extern void _ZN7S6424C22v1Ev();
static  VTBL_ENTRY _tg__ZTV7S6424C2__7S6424C5__7S6424C1[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S6424C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6424C5D1Ev,_ZTv0_n12_N7S6424C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6424C5D0Ev,_ZTv0_n12_N7S6424C5D0Ev),
  (VTBL_ENTRY)&_ZN7S6424C22v1Ev,
};
static  VTT_ENTRY vtt_S6424C1[] = {
  {&(_ZTV7S6424C1[6]),  6,33},
  {&(_ZTV7S6424C1[14]),  14,33},
  {&(_ZTV7S6424C1[22]),  22,33},
  {&(_ZTV7S6424C1[30]),  30,33},
  {&(_tg__ZTV7S6424C3__7S6424C1[4]),  4,6},
  {&(_tg__ZTV7S6424C5__7S6424C3__7S6424C1[6]),  6,10},
  {&(_tg__ZTV7S6424C2__7S6424C3__7S6424C1[4]),  4,7},
  {&(_tg__ZTV7S6424C5__7S6424C1[3]),  3,7},
  {&(_tg__ZTV7S6424C67S6424C5__7S6424C1[3]),  3,5},
  {&(_tg__ZTV7S6424C2__7S6424C67S6424C5__7S6424C1[4]),  4,7},
  {&(_tg__ZTV7S6424C2__7S6424C5__7S6424C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S6424C1[];
extern  VTBL_ENTRY _ZTV7S6424C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6424C1[];
static VTBL_ENTRY alt_thunk_names116[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6424C5D0Ev,_ZTv0_n12_N7S6424C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S6424C5D0Ev,_ZThn60_N7S6424C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6424C5D1Ev,_ZTv0_n12_N7S6424C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S6424C5D1Ev,_ZThn60_N7S6424C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6424C6D0Ev,_ZTv0_n12_N7S6424C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S6424C6D0Ev,_ZThn60_N7S6424C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6424C6D1Ev,_ZTv0_n12_N7S6424C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S6424C6D1Ev,_ZThn60_N7S6424C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6424C3D0Ev,_ZTv0_n12_N7S6424C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10200_N7S6424C3D0Ev,_ZThn7548_N7S6424C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6424C3D1Ev,_ZTv0_n12_N7S6424C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10200_N7S6424C3D1Ev,_ZThn7548_N7S6424C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6424C3D0Ev,_ZTv0_n16_N7S6424C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10096_N7S6424C3D0Ev,_ZThn7488_N7S6424C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6424C3D1Ev,_ZTv0_n16_N7S6424C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10096_N7S6424C3D1Ev,_ZThn7488_N7S6424C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6424C1D0Ev,_ZTv0_n12_N7S6424C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10488_N7S6424C1D0Ev,_ZThn7780_N7S6424C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6424C1D1Ev,_ZTv0_n12_N7S6424C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10488_N7S6424C1D1Ev,_ZThn7780_N7S6424C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6424C1D0Ev,_ZTv0_n16_N7S6424C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10384_N7S6424C1D0Ev,_ZThn7720_N7S6424C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S6424C1D1Ev,_ZTv0_n16_N7S6424C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10384_N7S6424C1D1Ev,_ZThn7720_N7S6424C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6424C1D0Ev,_ZTv0_n20_N7S6424C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S6424C1D0Ev,_ZThn232_N7S6424C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S6424C1D1Ev,_ZTv0_n20_N7S6424C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn288_N7S6424C1D1Ev,_ZThn232_N7S6424C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6424C1 = {  "S6424C1", // class name
  bases_S6424C1, 7,
  &(vtc_S6424C1[0]), // expected_vtbl_contents
  &(vtt_S6424C1[0]), // expected_vtt_contents
  ABISELECT(10624,7888), // object size
  NSPAIRA(_ZTI7S6424C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6424C1),33, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6424C1),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names116,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19474C3  : virtual S19566C5 , S19566C6 {
  ::S19566C5 s19474c3f0[3];
  int s19474c3f1[4];
  ~S19474C3(); // tgen
  S19474C3(); // tgen
};
//SIG(-1 S19474C3) C1{ VBC2{ m FL Fp FC3{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC3 FC2[3] Fi[4]}


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

static void Test_S19474C3()
{
  extern Class_Descriptor cd_S19474C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(198,243)];
    init_test(&cd_S19474C3, buf);
    S19474C3 *dp, &lv = *(dp=new (buf) S19474C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1576,968), "sizeof(S19474C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19474C3)");
    check_base_class_offset(lv, (S19566C5*), ABISELECT(1216,748), "S19474C3");
    check_base_class_offset(lv, (S19566C6*), ABISELECT(8,4), "S19474C3");
    check_field_offset(lv, s19474c3f0, ABISELECT(120,72), "S19474C3.s19474c3f0");
    check_field_offset(lv, s19474c3f1, ABISELECT(1200,732), "S19474C3.s19474c3f1");
    test_class_info(&lv, &cd_S19474C3);
    dp->~S19474C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19474C3(Test_S19474C3, "S19474C3", ABISELECT(1576,968));

#else // __cplusplus

extern void _ZN8S19474C3C1Ev();
extern void _ZN8S19474C3D1Ev();
Name_Map name_map_S19474C3[] = {
  NSPAIR(_ZN8S19474C3C1Ev),
  NSPAIR(_ZN8S19474C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
static Base_Class bases_S19474C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19566C6,    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 _ZTI8S19474C3[];
static  VTBL_ENTRY vtc_S19474C3[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C3[0]),
};
extern VTBL_ENTRY _ZTV8S19474C3[];
static  VTT_ENTRY vtt_S19474C3[] = {
  {&(_ZTV8S19474C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19474C3[];
extern  VTBL_ENTRY _ZTV8S19474C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C3[];
Class_Descriptor cd_S19474C3 = {  "S19474C3", // class name
  bases_S19474C3, 2,
  &(vtc_S19474C3[0]), // expected_vtbl_contents
  &(vtt_S19474C3[0]), // expected_vtt_contents
  ABISELECT(1576,968), // object size
  NSPAIRA(_ZTI8S19474C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19474C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19474C3),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  S19474C2  : S19474C3 , S19566C6 , S19566C5 {
  __tsi64 s19474c2f0[6];
  int s19474c2f1;
  ::S19566C5 s19474c2f2;
  void *s19474c2f3;
  ::S19566C6 s19474c2f4;
  int s19474c2f5;
  void *s19474c2f6[7];
  virtual  ~S19474C2(); // _ZN8S19474C2D2Ev
  S19474C2(); // tgen
};
//SIG(-1 S19474C2) C1{ BC2{ VBC3{ m FL Fp FC4{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC4 FC3[3] Fi[4]} BC4 BC3 vd FL[6] Fi FC3 Fp FC4 Fi Fp[7]}


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

static void Test_S19474C2()
{
  extern Class_Descriptor cd_S19474C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(332,409)];
    init_test(&cd_S19474C2, buf);
    S19474C2 *dp, &lv = *(dp=new (buf) S19474C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2648,1632), "sizeof(S19474C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19474C2)");
    check_base_class_offset(lv, (S19566C5*)(S19474C3*), ABISELECT(2288,1412), "S19474C2");
    check_base_class_offset(lv, (S19566C6*)(S19474C3*), ABISELECT(8,4), "S19474C2");
    check_base_class_offset(lv, (S19474C3*), 0, "S19474C2");
    /*is_ambiguous_... S19474C2::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*), ABISELECT(1216,748), "S19474C2");
    /*is_ambiguous_... S19474C2::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(1328,816), "S19474C2");
    check_field_offset(lv, s19474c2f0, ABISELECT(1688,1036), "S19474C2.s19474c2f0");
    check_field_offset(lv, s19474c2f1, ABISELECT(1736,1084), "S19474C2.s19474c2f1");
    check_field_offset(lv, s19474c2f2, ABISELECT(1744,1088), "S19474C2.s19474c2f2");
    check_field_offset(lv, s19474c2f3, ABISELECT(2104,1308), "S19474C2.s19474c2f3");
    check_field_offset(lv, s19474c2f4, ABISELECT(2112,1312), "S19474C2.s19474c2f4");
    check_field_offset(lv, s19474c2f5, ABISELECT(2224,1380), "S19474C2.s19474c2f5");
    check_field_offset(lv, s19474c2f6, ABISELECT(2232,1384), "S19474C2.s19474c2f6");
    test_class_info(&lv, &cd_S19474C2);
    dp->~S19474C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19474C2(Test_S19474C2, "S19474C2", ABISELECT(2648,1632));

#else // __cplusplus

extern void _ZN8S19474C2C1Ev();
extern void _ZN8S19474C2D2Ev();
Name_Map name_map_S19474C2[] = {
  NSPAIR(_ZN8S19474C2C1Ev),
  NSPAIR(_ZN8S19474C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19474C3;
extern VTBL_ENTRY _ZTI8S19474C3[];
extern  VTBL_ENTRY _ZTV8S19474C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
static Base_Class bases_S19474C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    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_S19474C3,    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_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19474C2[];
extern void _ZN8S19474C2D1Ev();
extern void _ZN8S19474C2D0Ev();
static  VTBL_ENTRY vtc_S19474C2[] = {
  ABISELECT(2288,1412),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C2[0]),
  (VTBL_ENTRY)&_ZN8S19474C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19474C2D0Ev,
};
extern VTBL_ENTRY _ZTV8S19474C2[];
static  VTBL_ENTRY _tg__ZTV8S19474C3__8S19474C2[] = {
  ABISELECT(2288,1412),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C3[0]),
};
static  VTT_ENTRY vtt_S19474C2[] = {
  {&(_ZTV8S19474C2[3]),  3,5},
  {&(_tg__ZTV8S19474C3__8S19474C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19474C2[];
extern  VTBL_ENTRY _ZTV8S19474C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C2[];
Class_Descriptor cd_S19474C2 = {  "S19474C2", // class name
  bases_S19474C2, 5,
  &(vtc_S19474C2[0]), // expected_vtbl_contents
  &(vtt_S19474C2[0]), // expected_vtt_contents
  ABISELECT(2648,1632), // object size
  NSPAIRA(_ZTI8S19474C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19474C2),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19474C2),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  S19474C9  : virtual S19474C3 , virtual S19566C6 {
  ::S19566C14 s19474c9f0;
  short s19474c9f1[8];
  virtual  ~S19474C9(); // _ZN8S19474C9D2Ev
  S19474C9(); // tgen
};
//SIG(-1 S19474C9) C1{ VBC2{ VBC3{ m FL Fp FC4{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC4 FC3[3] Fi[4]} VBC4 vd FU5{ m Fi FD} Fs[8]}


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

static void Test_S19474C9()
{
  extern Class_Descriptor cd_S19474C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(110,268)];
    init_test(&cd_S19474C9, buf);
    S19474C9 *dp, &lv = *(dp=new (buf) S19474C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1744,1068), "sizeof(S19474C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19474C9)");
    check_base_class_offset(lv, (S19566C5*)(S19474C3*), ABISELECT(1264,780), "S19474C9");
    check_base_class_offset(lv, (S19566C6*)(S19474C3*), ABISELECT(56,36), "S19474C9");
    check_base_class_offset(lv, (S19474C3*), ABISELECT(48,32), "S19474C9");
    /*is_ambiguous_... S19474C9::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*), ABISELECT(1624,1000), "S19474C9");
    check_field_offset(lv, s19474c9f0, ABISELECT(16,4), "S19474C9.s19474c9f0");
    check_field_offset(lv, s19474c9f1, ABISELECT(32,16), "S19474C9.s19474c9f1");
    test_class_info(&lv, &cd_S19474C9);
    dp->~S19474C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19474C9(Test_S19474C9, "S19474C9", ABISELECT(1744,1068));

#else // __cplusplus

extern void _ZN8S19474C9C1Ev();
extern void _ZN8S19474C9D2Ev();
Name_Map name_map_S19474C9[] = {
  NSPAIR(_ZN8S19474C9C1Ev),
  NSPAIR(_ZN8S19474C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19474C3;
extern VTBL_ENTRY _ZTI8S19474C3[];
extern  VTBL_ENTRY _ZTV8S19474C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
static Base_Class bases_S19474C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(1264,780), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    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
    2, //immediately_derived
  0, 0},
  {&cd_S19474C3,    ABISELECT(48,32), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //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_S19566C6,    ABISELECT(1624,1000), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19474C9[];
extern void _ZN8S19474C9D1Ev();
extern void _ZN8S19474C9D0Ev();
static  VTBL_ENTRY vtc_S19474C9[] = {
  ABISELECT(1624,1000),
  ABISELECT(1264,780),
  ABISELECT(48,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C9[0]),
  (VTBL_ENTRY)&_ZN8S19474C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19474C9D0Ev,
  ABISELECT(1216,748),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S19474C9[0]),
};
extern VTBL_ENTRY _ZTV8S19474C9[];
static  VTBL_ENTRY _tg__ZTV8S19474C3__8S19474C9[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C3[0]),
};
static  VTT_ENTRY vtt_S19474C9[] = {
  {&(_ZTV8S19474C9[5]),  5,10},
  {&(_ZTV8S19474C9[10]),  10,10},
  {&(_tg__ZTV8S19474C3__8S19474C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19474C9[];
extern  VTBL_ENTRY _ZTV8S19474C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C9[];
Class_Descriptor cd_S19474C9 = {  "S19474C9", // class name
  bases_S19474C9, 4,
  &(vtc_S19474C9[0]), // expected_vtbl_contents
  &(vtt_S19474C9[0]), // expected_vtt_contents
  ABISELECT(1744,1068), // object size
  NSPAIRA(_ZTI8S19474C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19474C9),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19474C9),3, //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  S19474C12  : virtual S19474C3 , S19566C6 , S19566C5 , S19474C2 {
  int s19474c12f0;
  ::S19474C3 s19474c12f1;
  short s19474c12f2;
  void *s19474c12f3;
  int s19474c12f4[5];
  ~S19474C12(); // tgen
  S19474C12(); // tgen
};
//SIG(-1 S19474C12) C1{ VBC2{ VBC3{ m FL Fp FC4{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC4 FC3[3] Fi[4]} BC4 BC3 BC5{ BC2 BC4 BC3 vd FL[6] Fi FC3 Fp FC4 Fi Fp[7]} Fi FC2 Fs Fp Fi[5]}


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

static void Test_S19474C12()
{
  extern Class_Descriptor cd_S19474C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(746,918)];
    init_test(&cd_S19474C12, buf);
    S19474C12 *dp, &lv = *(dp=new (buf) S19474C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5960,3668), "sizeof(S19474C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19474C12)");
    /*is_ambiguous_... S19474C12::S19474C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19474C3*), ABISELECT(5600,3448), "S19474C12");
    check_base_class_offset(lv, (S19566C5*)(S19474C3*)(S19474C2*), ABISELECT(5600,3448), "S19474C12");
    /*is_ambiguous_... S19474C12::S19474C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19474C3*), ABISELECT(4392,2704), "S19474C12");
    /*is_ambiguous_... S19474C12::S19474C3 */ AMB_check_base_class_offset(lv, (S19474C3*), ABISELECT(4384,2700), "S19474C12");
    /*is_ambiguous_... S19474C12::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*), ABISELECT(2288,1412), "S19474C12");
    /*is_ambiguous_... S19474C12::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(2400,1480), "S19474C12");
    check_base_class_offset(lv, (S19566C6*)(S19474C3*)(S19474C2*), ABISELECT(8,4), "S19474C12");
    check_base_class_offset(lv, (S19474C3*)(S19474C2*), 0, "S19474C12");
    /*is_ambiguous_... S19474C2::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19474C2*), ABISELECT(1216,748), "S19474C12");
    /*is_ambiguous_... S19474C2::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19474C2*), ABISELECT(1328,816), "S19474C12");
    check_base_class_offset(lv, (S19474C2*), 0, "S19474C12");
    check_field_offset(lv, s19474c12f0, ABISELECT(2760,1700), "S19474C12.s19474c12f0");
    check_field_offset(lv, s19474c12f1, ABISELECT(2768,1704), "S19474C12.s19474c12f1");
    check_field_offset(lv, s19474c12f2, ABISELECT(4344,2672), "S19474C12.s19474c12f2");
    check_field_offset(lv, s19474c12f3, ABISELECT(4352,2676), "S19474C12.s19474c12f3");
    check_field_offset(lv, s19474c12f4, ABISELECT(4360,2680), "S19474C12.s19474c12f4");
    test_class_info(&lv, &cd_S19474C12);
    dp->~S19474C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19474C12(Test_S19474C12, "S19474C12", ABISELECT(5960,3668));

#else // __cplusplus

extern void _ZN9S19474C12C1Ev();
extern void _ZN9S19474C12D1Ev();
Name_Map name_map_S19474C12[] = {
  NSPAIR(_ZN9S19474C12C1Ev),
  NSPAIR(_ZN9S19474C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19474C3;
extern VTBL_ENTRY _ZTI8S19474C3[];
extern  VTBL_ENTRY _ZTV8S19474C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19474C3;
extern VTBL_ENTRY _ZTI8S19474C3[];
extern  VTBL_ENTRY _ZTV8S19474C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19474C2;
extern VTBL_ENTRY _ZTI8S19474C2[];
extern  VTBL_ENTRY _ZTV8S19474C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C2[];
static Base_Class bases_S19474C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(5600,3448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(4392,2704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19474C3,    ABISELECT(4384,2700), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19566C5,    ABISELECT(2400,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
  1, 0},
  {&cd_S19566C6,    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
    6, //immediately_derived
  0, 0},
  {&cd_S19474C3,    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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19474C2,    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 _ZTI9S19474C12[];
extern void _ZN9S19474C12D1Ev();
extern void _ZN9S19474C12D0Ev();
static  VTBL_ENTRY vtc_S19474C12[] = {
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI9S19474C12[0]),
  (VTBL_ENTRY)&_ZN9S19474C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19474C12D0Ev,
  ABISELECT(1216,748),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI9S19474C12[0]),
};
extern VTBL_ENTRY _ZTV9S19474C12[];
extern void _ZN8S19474C2D1Ev();
extern void _ZN8S19474C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19474C2__9S19474C12[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C2[0]),
  (VTBL_ENTRY)&_ZN8S19474C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19474C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19474C38S19474C2__A1__9S19474C12[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19474C3__9S19474C12[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C3[0]),
};
static  VTT_ENTRY vtt_S19474C12[] = {
  {&(_ZTV9S19474C12[4]),  4,9},
  {&(_tg__ZTV8S19474C2__9S19474C12[3]),  3,5},
  {&(_tg__ZTV8S19474C38S19474C2__A1__9S19474C12[3]),  3,3},
  {&(_ZTV9S19474C12[9]),  9,9},
  {&(_tg__ZTV8S19474C3__9S19474C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19474C12[];
extern  VTBL_ENTRY _ZTV9S19474C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19474C12[];
Class_Descriptor cd_S19474C12 = {  "S19474C12", // class name
  bases_S19474C12, 10,
  &(vtc_S19474C12[0]), // expected_vtbl_contents
  &(vtt_S19474C12[0]), // expected_vtt_contents
  ABISELECT(5960,3668), // object size
  NSPAIRA(_ZTI9S19474C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19474C12),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19474C12),5, //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  S19474C13  : S19474C12 , S19474C3 , S19474C2 , S19566C5 {
  ::S3052C22_nt s19474c13f0;
  int s19474c13f1;
  int s19474c13f2;
  long s19474c13f3;
  void *s19474c13f4;
  virtual  ~S19474C13(); // _ZN9S19474C13D2Ev
  virtual void  v1(); // _ZN9S19474C132v1Ev
  S19474C13(); // tgen
};
//SIG(-1 S19474C13) C1{ BC2{ VBC3{ VBC4{ m FL Fp FC5{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC5 FC4[3] Fi[4]} BC5 BC4 BC6{ BC3 BC5 BC4 vd FL[6] Fi FC4 Fp FC5 Fi Fp[7]} Fi FC3 Fs Fp Fi[5]} BC3 BC6 BC4 vd v1 FC7{} Fi[2] Fl Fp}


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

static void Test_S19474C13()
{
  extern Class_Descriptor cd_S19474C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1233,1518)];
    init_test(&cd_S19474C13, buf);
    S19474C13 *dp, &lv = *(dp=new (buf) S19474C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9856,6068), "sizeof(S19474C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19474C13)");
    /*is_ambiguous_... S19474C13::S19474C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19474C3*), ABISELECT(9496,5848), "S19474C13");
    check_base_class_offset(lv, (S19566C5*)(S19474C3*)(S19474C2*)(S19474C12*), ABISELECT(9496,5848), "S19474C13");
    /*is_ambiguous_... S19474C13::S19474C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19474C3*), ABISELECT(9496,5848), "S19474C13");
    /*is_ambiguous_... S19474C13::S19474C2 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19474C3*)(S19474C2*), ABISELECT(9496,5848), "S19474C13");
    /*is_ambiguous_... S19474C13::S19474C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19474C3*), ABISELECT(8288,5104), "S19474C13");
    /*is_ambiguous_... S19474C12::S19474C3 */ AMB_check_base_class_offset(lv, (S19474C3*)(S19474C12*), ABISELECT(8280,5100), "S19474C13");
    /*is_ambiguous_... S19474C12::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19474C12*), ABISELECT(2288,1412), "S19474C13");
    /*is_ambiguous_... S19474C12::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19474C12*), ABISELECT(2400,1480), "S19474C13");
    check_base_class_offset(lv, (S19566C6*)(S19474C3*)(S19474C2*)(S19474C12*), ABISELECT(8,4), "S19474C13");
    check_base_class_offset(lv, (S19474C3*)(S19474C2*)(S19474C12*), 0, "S19474C13");
    /*is_ambiguous_... S19474C2::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19474C2*)(S19474C12*), ABISELECT(1216,748), "S19474C13");
    /*is_ambiguous_... S19474C2::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19474C2*)(S19474C12*), ABISELECT(1328,816), "S19474C13");
    check_base_class_offset(lv, (S19474C2*)(S19474C12*), 0, "S19474C13");
    check_base_class_offset(lv, (S19474C12*), 0, "S19474C13");
    /*is_ambiguous_... S19474C13::S19474C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19474C3*), ABISELECT(4392,2704), "S19474C13");
    /*is_ambiguous_... S19474C13::S19474C3 */ AMB_check_base_class_offset(lv, (S19474C3*), ABISELECT(4384,2700), "S19474C13");
    /*is_ambiguous_... S19474C13::S19474C2 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19474C3*)(S19474C2*), ABISELECT(5608,3452), "S19474C13");
    /*is_ambiguous_... S19474C13::S19474C2 */ AMB_check_base_class_offset(lv, (S19474C3*)(S19474C2*), ABISELECT(5600,3448), "S19474C13");
    /*is_ambiguous_... S19474C13::S19474C2 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19474C2*), ABISELECT(6816,4196), "S19474C13");
    /*is_ambiguous_... S19474C13::S19474C2 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19474C2*), ABISELECT(6928,4264), "S19474C13");
    /*is_ambiguous_... S19474C13::S19474C2 */ AMB_check_base_class_offset(lv, (S19474C2*), ABISELECT(5600,3448), "S19474C13");
    /*is_ambiguous_... S19474C13::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(7888,4860), "S19474C13");
    check_field_offset(lv, s19474c13f0, ABISELECT(8248,5080), "S19474C13.s19474c13f0");
    check_field_offset(lv, s19474c13f1, ABISELECT(8252,5084), "S19474C13.s19474c13f1");
    check_field_offset(lv, s19474c13f2, ABISELECT(8256,5088), "S19474C13.s19474c13f2");
    check_field_offset(lv, s19474c13f3, ABISELECT(8264,5092), "S19474C13.s19474c13f3");
    check_field_offset(lv, s19474c13f4, ABISELECT(8272,5096), "S19474C13.s19474c13f4");
    test_class_info(&lv, &cd_S19474C13);
    dp->~S19474C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19474C13(Test_S19474C13, "S19474C13", ABISELECT(9856,6068));

#else // __cplusplus

extern void _ZN9S19474C13C1Ev();
extern void _ZN9S19474C13D2Ev();
Name_Map name_map_S19474C13[] = {
  NSPAIR(_ZN9S19474C13C1Ev),
  NSPAIR(_ZN9S19474C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19474C3;
extern VTBL_ENTRY _ZTI8S19474C3[];
extern  VTBL_ENTRY _ZTV8S19474C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19474C3;
extern VTBL_ENTRY _ZTI8S19474C3[];
extern  VTBL_ENTRY _ZTV8S19474C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19474C2;
extern VTBL_ENTRY _ZTI8S19474C2[];
extern  VTBL_ENTRY _ZTV8S19474C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C2[];
extern Class_Descriptor cd_S19474C12;
extern VTBL_ENTRY _ZTI9S19474C12[];
extern  VTBL_ENTRY _ZTV9S19474C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19474C12[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19474C3;
extern VTBL_ENTRY _ZTI8S19474C3[];
extern  VTBL_ENTRY _ZTV8S19474C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19474C3;
extern VTBL_ENTRY _ZTI8S19474C3[];
extern  VTBL_ENTRY _ZTV8S19474C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19474C2;
extern VTBL_ENTRY _ZTI8S19474C2[];
extern  VTBL_ENTRY _ZTV8S19474C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C2[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
static Base_Class bases_S19474C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(9496,5848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(8288,5104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19474C3,    ABISELECT(8280,5100), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(2400,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
    10, //immediately_derived
  0, 0},
  {&cd_S19566C6,    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
    6, //immediately_derived
  0, 0},
  {&cd_S19474C3,    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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19474C2,    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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19474C12,    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_S19566C6,    ABISELECT(4392,2704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19474C3,    ABISELECT(4384,2700), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19566C6,    ABISELECT(5608,3452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19474C3,    ABISELECT(5600,3448), //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
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(6816,4196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(6928,4264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19474C2,    ABISELECT(5600,3448), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19566C5,    ABISELECT(7888,4860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI9S19474C13[];
extern void _ZN9S19474C13D1Ev();
extern void _ZN9S19474C13D0Ev();
extern void _ZN9S19474C132v1Ev();
extern void ABISELECT(_ZThn5600_N9S19474C13D1Ev,_ZThn3448_N9S19474C13D1Ev)();
extern void ABISELECT(_ZThn5600_N9S19474C13D0Ev,_ZThn3448_N9S19474C13D0Ev)();
static  VTBL_ENTRY vtc_S19474C13[] = {
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI9S19474C13[0]),
  (VTBL_ENTRY)&_ZN9S19474C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19474C13D0Ev,
  (VTBL_ENTRY)&_ZN9S19474C132v1Ev,
  ABISELECT(5112,3148),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI9S19474C13[0]),
  ABISELECT(3896,2400),
  ABISELECT(-5600,-3448),
  (VTBL_ENTRY)&(_ZTI9S19474C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N9S19474C13D1Ev,_ZThn3448_N9S19474C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N9S19474C13D0Ev,_ZThn3448_N9S19474C13D0Ev),
  ABISELECT(1216,748),
  ABISELECT(-8280,-5100),
  (VTBL_ENTRY)&(_ZTI9S19474C13[0]),
};
extern VTBL_ENTRY _ZTV9S19474C13[];
extern void _ZN9S19474C12D1Ev();
extern void _ZN9S19474C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19474C12__9S19474C13[] = {
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI9S19474C12[0]),
  (VTBL_ENTRY)&_ZN9S19474C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19474C12D0Ev,
};
extern void _ZN8S19474C2D1Ev();
extern void _ZN8S19474C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19474C29S19474C12__9S19474C13[] = {
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C2[0]),
  (VTBL_ENTRY)&_ZN8S19474C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19474C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19474C38S19474C29S19474C12__A1__9S19474C13[] = {
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19474C3__9S19474C12__9S19474C13[] = {
  ABISELECT(1216,748),
  ABISELECT(-8280,-5100),
  (VTBL_ENTRY)&(_ZTI9S19474C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19474C3__A__9S19474C13[] = {
  ABISELECT(5112,3148),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C3[0]),
};
extern void _ZN8S19474C2D1Ev();
extern void _ZN8S19474C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19474C2__A1__9S19474C13[] = {
  ABISELECT(3896,2400),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C2[0]),
  (VTBL_ENTRY)&_ZN8S19474C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19474C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19474C38S19474C2__A3__9S19474C13[] = {
  ABISELECT(3896,2400),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19474C3__9S19474C13[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C3[0]),
};
static  VTT_ENTRY vtt_S19474C13[] = {
  {&(_ZTV9S19474C13[4]),  4,18},
  {&(_tg__ZTV9S19474C12__9S19474C13[4]),  4,6},
  {&(_tg__ZTV8S19474C29S19474C12__9S19474C13[3]),  3,5},
  {&(_tg__ZTV8S19474C38S19474C29S19474C12__A1__9S19474C13[3]),  3,3},
  {&(_tg__ZTV8S19474C3__9S19474C12__9S19474C13[3]),  3,3},
  {&(_tg__ZTV8S19474C3__A__9S19474C13[3]),  3,3},
  {&(_tg__ZTV8S19474C2__A1__9S19474C13[3]),  3,5},
  {&(_tg__ZTV8S19474C38S19474C2__A3__9S19474C13[3]),  3,3},
  {&(_ZTV9S19474C13[18]),  18,18},
  {&(_ZTV9S19474C13[10]),  10,18},
  {&(_ZTV9S19474C13[13]),  13,18},
  {&(_tg__ZTV8S19474C3__9S19474C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19474C13[];
extern  VTBL_ENTRY _ZTV9S19474C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19474C13[];
Class_Descriptor cd_S19474C13 = {  "S19474C13", // class name
  bases_S19474C13, 19,
  &(vtc_S19474C13[0]), // expected_vtbl_contents
  &(vtt_S19474C13[0]), // expected_vtt_contents
  ABISELECT(9856,6068), // object size
  NSPAIRA(_ZTI9S19474C13),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19474C13),18, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19474C13),12, //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  S19474C11  : S19474C12 , S19566C6 {
  int s19474c11f0[7];
  long s19474c11f1[7];
  short s19474c11f2[8];
  short s19474c11f3[8];
  ::S19474C3 s19474c11f4;
  void *s19474c11f5;
  ::S19474C13 s19474c11f6;
  virtual  ~S19474C11(); // _ZN9S19474C11D2Ev
  S19474C11(); // tgen
};
//SIG(-1 S19474C11) C1{ BC2{ VBC3{ VBC4{ m FL Fp FC5{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC5 FC4[3] Fi[4]} BC5 BC4 BC6{ BC3 BC5 BC4 vd FL[6] Fi FC4 Fp FC5 Fi Fp[7]} Fi FC3 Fs Fp Fi[5]} BC5 vd Fi[7] Fl[7] Fs[16] FC3 Fp FC7{ BC2 BC3 BC6 BC4 vd v1 FC8{} Fi[2] Fl Fp}}


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

static void Test_S19474C11()
{
  extern Class_Descriptor cd_S19474C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2205,2717)];
    init_test(&cd_S19474C11, buf);
    S19474C11 *dp, &lv = *(dp=new (buf) S19474C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(17632,10864), "sizeof(S19474C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19474C11)");
    /*is_ambiguous_... S19474C11::S19474C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19474C3*), ABISELECT(17272,10644), "S19474C11");
    check_base_class_offset(lv, (S19566C5*)(S19474C3*)(S19474C2*)(S19474C12*), ABISELECT(17272,10644), "S19474C11");
    /*is_ambiguous_... S19474C11::S19474C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19474C3*), ABISELECT(16064,9900), "S19474C11");
    /*is_ambiguous_... S19474C12::S19474C3 */ AMB_check_base_class_offset(lv, (S19474C3*)(S19474C12*), ABISELECT(16056,9896), "S19474C11");
    /*is_ambiguous_... S19474C12::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19474C12*), ABISELECT(2288,1412), "S19474C11");
    /*is_ambiguous_... S19474C12::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19474C12*), ABISELECT(2400,1480), "S19474C11");
    check_base_class_offset(lv, (S19566C6*)(S19474C3*)(S19474C2*)(S19474C12*), ABISELECT(8,4), "S19474C11");
    check_base_class_offset(lv, (S19474C3*)(S19474C2*)(S19474C12*), 0, "S19474C11");
    /*is_ambiguous_... S19474C2::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19474C2*)(S19474C12*), ABISELECT(1216,748), "S19474C11");
    /*is_ambiguous_... S19474C2::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19474C2*)(S19474C12*), ABISELECT(1328,816), "S19474C11");
    check_base_class_offset(lv, (S19474C2*)(S19474C12*), 0, "S19474C11");
    check_base_class_offset(lv, (S19474C12*), 0, "S19474C11");
    /*is_ambiguous_... S19474C11::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*), ABISELECT(4384,2700), "S19474C11");
    check_field_offset(lv, s19474c11f0, ABISELECT(4496,2768), "S19474C11.s19474c11f0");
    check_field_offset(lv, s19474c11f1, ABISELECT(4528,2796), "S19474C11.s19474c11f1");
    check_field_offset(lv, s19474c11f2, ABISELECT(4584,2824), "S19474C11.s19474c11f2");
    check_field_offset(lv, s19474c11f3, ABISELECT(4600,2840), "S19474C11.s19474c11f3");
    check_field_offset(lv, s19474c11f4, ABISELECT(4616,2856), "S19474C11.s19474c11f4");
    check_field_offset(lv, s19474c11f5, ABISELECT(6192,3824), "S19474C11.s19474c11f5");
    check_field_offset(lv, s19474c11f6, ABISELECT(6200,3828), "S19474C11.s19474c11f6");
    test_class_info(&lv, &cd_S19474C11);
    dp->~S19474C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19474C11(Test_S19474C11, "S19474C11", ABISELECT(17632,10864));

#else // __cplusplus

extern void _ZN9S19474C11C1Ev();
extern void _ZN9S19474C11D2Ev();
Name_Map name_map_S19474C11[] = {
  NSPAIR(_ZN9S19474C11C1Ev),
  NSPAIR(_ZN9S19474C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19474C3;
extern VTBL_ENTRY _ZTI8S19474C3[];
extern  VTBL_ENTRY _ZTV8S19474C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19474C3;
extern VTBL_ENTRY _ZTI8S19474C3[];
extern  VTBL_ENTRY _ZTV8S19474C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19474C2;
extern VTBL_ENTRY _ZTI8S19474C2[];
extern  VTBL_ENTRY _ZTV8S19474C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C2[];
extern Class_Descriptor cd_S19474C12;
extern VTBL_ENTRY _ZTI9S19474C12[];
extern  VTBL_ENTRY _ZTV9S19474C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19474C12[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
static Base_Class bases_S19474C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(17272,10644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(16064,9900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19474C3,    ABISELECT(16056,9896), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(2400,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
    10, //immediately_derived
  0, 0},
  {&cd_S19566C6,    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
    6, //immediately_derived
  0, 0},
  {&cd_S19474C3,    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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19474C2,    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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19474C12,    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_S19566C6,    ABISELECT(4384,2700), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI9S19474C11[];
extern void _ZN9S19474C11D1Ev();
extern void _ZN9S19474C11D0Ev();
static  VTBL_ENTRY vtc_S19474C11[] = {
  ABISELECT(16056,9896),
  ABISELECT(17272,10644),
  0,
  (VTBL_ENTRY)&(_ZTI9S19474C11[0]),
  (VTBL_ENTRY)&_ZN9S19474C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19474C11D0Ev,
  ABISELECT(1216,748),
  ABISELECT(-16056,-9896),
  (VTBL_ENTRY)&(_ZTI9S19474C11[0]),
};
extern VTBL_ENTRY _ZTV9S19474C11[];
extern void _ZN9S19474C12D1Ev();
extern void _ZN9S19474C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19474C12__9S19474C11[] = {
  ABISELECT(16056,9896),
  ABISELECT(17272,10644),
  0,
  (VTBL_ENTRY)&(_ZTI9S19474C12[0]),
  (VTBL_ENTRY)&_ZN9S19474C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19474C12D0Ev,
};
extern void _ZN8S19474C2D1Ev();
extern void _ZN8S19474C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19474C29S19474C12__9S19474C11[] = {
  ABISELECT(17272,10644),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C2[0]),
  (VTBL_ENTRY)&_ZN8S19474C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19474C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19474C38S19474C29S19474C12__A1__9S19474C11[] = {
  ABISELECT(17272,10644),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19474C3__9S19474C12__9S19474C11[] = {
  ABISELECT(1216,748),
  ABISELECT(-16056,-9896),
  (VTBL_ENTRY)&(_ZTI9S19474C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19474C3__9S19474C11[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C3[0]),
};
static  VTT_ENTRY vtt_S19474C11[] = {
  {&(_ZTV9S19474C11[4]),  4,9},
  {&(_tg__ZTV9S19474C12__9S19474C11[4]),  4,6},
  {&(_tg__ZTV8S19474C29S19474C12__9S19474C11[3]),  3,5},
  {&(_tg__ZTV8S19474C38S19474C29S19474C12__A1__9S19474C11[3]),  3,3},
  {&(_tg__ZTV8S19474C3__9S19474C12__9S19474C11[3]),  3,3},
  {&(_ZTV9S19474C11[9]),  9,9},
  {&(_tg__ZTV8S19474C3__9S19474C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19474C11[];
extern  VTBL_ENTRY _ZTV9S19474C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19474C11[];
Class_Descriptor cd_S19474C11 = {  "S19474C11", // class name
  bases_S19474C11, 12,
  &(vtc_S19474C11[0]), // expected_vtbl_contents
  &(vtt_S19474C11[0]), // expected_vtt_contents
  ABISELECT(17632,10864), // object size
  NSPAIRA(_ZTI9S19474C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19474C11),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19474C11),7, //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  S19474C6  : S19566C11 , virtual S19474C3 , virtual S19474C9 , virtual S19474C2 , S19474C11 {
  int s19474c6f0;
  virtual  ~S19474C6(); // _ZN8S19474C6D2Ev
  S19474C6(); // tgen
};
//SIG(-1 S19474C6) C1{ BC2{ m Fp Fc Fi:6 Fl FC3{} Fi} VBC4{ VBC5{ m FL Fp FC6{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC6 FC5[3] Fi[4]} VBC7{ VBC4 VBC6 vd FU8{ m Fi FD} Fs[8]} VBC9{ BC4 BC6 BC5 vd FL[6] Fi FC5 Fp FC6 Fi Fp[7]} BC10{ BC11{ VBC4 BC6 BC5 BC9 Fi FC4 Fs Fp Fi[5]} BC6 vd Fi[7] Fl[7] Fs[8] Fs[8] FC4 Fp FC12{ BC11 BC4 BC9 BC5 vd v1 FC3 Fi Fi Fl Fp}} vd Fi}


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

static void Test_S19474C6()
{
  extern Class_Descriptor cd_S19474C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1259,3101)];
    init_test(&cd_S19474C6, buf);
    S19474C6 *dp, &lv = *(dp=new (buf) S19474C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20128,12400), "sizeof(S19474C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19474C6)");
    check_base_class_offset(lv, (S19566C11*), ABISELECT(16056,9896), "S19474C6");
    /*is_ambiguous_... S19474C6::S19474C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19474C3*), ABISELECT(17312,10668), "S19474C6");
    /*is_ambiguous_... S19474C6::S19474C2 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19474C3*)(S19474C2*), ABISELECT(17312,10668), "S19474C6");
    check_base_class_offset(lv, (S19566C5*)(S19474C3*)(S19474C2*)(S19474C12*)(S19474C11*), ABISELECT(17312,10668), "S19474C6");
    /*is_ambiguous_... S19474C6::S19474C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19474C3*), ABISELECT(16104,9924), "S19474C6");
    /*is_ambiguous_... S19474C6::S19474C3 */ AMB_check_base_class_offset(lv, (S19474C3*), ABISELECT(16096,9920), "S19474C6");
    check_base_class_offset(lv, (S19474C3*)(S19474C9*), ABISELECT(16096,9920), "S19474C6");
    /*is_ambiguous_... S19474C12::S19474C3 */ AMB_check_base_class_offset(lv, (S19474C3*)(S19474C12*)(S19474C11*), ABISELECT(16096,9920), "S19474C6");
    /*is_ambiguous_... S19474C9::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19474C9*), ABISELECT(17728,10920), "S19474C6");
    check_base_class_offset(lv, (S19474C9*), ABISELECT(17680,10888), "S19474C6");
    /*is_ambiguous_... S19474C6::S19474C2 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19474C3*)(S19474C2*), ABISELECT(17848,10992), "S19474C6");
    /*is_ambiguous_... S19474C6::S19474C2 */ AMB_check_base_class_offset(lv, (S19474C3*)(S19474C2*), ABISELECT(17840,10988), "S19474C6");
    /*is_ambiguous_... S19474C6::S19474C2 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19474C2*), ABISELECT(19056,11736), "S19474C6");
    /*is_ambiguous_... S19474C6::S19474C2 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19474C2*), ABISELECT(19168,11804), "S19474C6");
    /*is_ambiguous_... S19474C6::S19474C2 */ AMB_check_base_class_offset(lv, (S19474C2*), ABISELECT(17840,10988), "S19474C6");
    /*is_ambiguous_... S19474C12::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19474C12*)(S19474C11*), ABISELECT(2288,1412), "S19474C6");
    /*is_ambiguous_... S19474C12::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19474C12*)(S19474C11*), ABISELECT(2400,1480), "S19474C6");
    check_base_class_offset(lv, (S19566C6*)(S19474C3*)(S19474C2*)(S19474C12*)(S19474C11*), ABISELECT(8,4), "S19474C6");
    check_base_class_offset(lv, (S19474C3*)(S19474C2*)(S19474C12*)(S19474C11*), 0, "S19474C6");
    /*is_ambiguous_... S19474C2::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19474C2*)(S19474C12*)(S19474C11*), ABISELECT(1216,748), "S19474C6");
    /*is_ambiguous_... S19474C2::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19474C2*)(S19474C12*)(S19474C11*), ABISELECT(1328,816), "S19474C6");
    check_base_class_offset(lv, (S19474C2*)(S19474C12*)(S19474C11*), 0, "S19474C6");
    check_base_class_offset(lv, (S19474C12*)(S19474C11*), 0, "S19474C6");
    /*is_ambiguous_... S19474C11::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19474C11*), ABISELECT(4384,2700), "S19474C6");
    check_base_class_offset(lv, (S19474C11*), 0, "S19474C6");
    check_field_offset(lv, s19474c6f0, ABISELECT(16088,9916), "S19474C6.s19474c6f0");
    test_class_info(&lv, &cd_S19474C6);
    dp->~S19474C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19474C6(Test_S19474C6, "S19474C6", ABISELECT(20128,12400));

#else // __cplusplus

extern void _ZN8S19474C6C1Ev();
extern void _ZN8S19474C6D2Ev();
Name_Map name_map_S19474C6[] = {
  NSPAIR(_ZN8S19474C6C1Ev),
  NSPAIR(_ZN8S19474C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C11;
extern VTBL_ENTRY _ZTI9S19566C11[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19474C3;
extern VTBL_ENTRY _ZTI8S19474C3[];
extern  VTBL_ENTRY _ZTV8S19474C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19474C9;
extern VTBL_ENTRY _ZTI8S19474C9[];
extern  VTBL_ENTRY _ZTV8S19474C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C9[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19474C3;
extern VTBL_ENTRY _ZTI8S19474C3[];
extern  VTBL_ENTRY _ZTV8S19474C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19474C2;
extern VTBL_ENTRY _ZTI8S19474C2[];
extern  VTBL_ENTRY _ZTV8S19474C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C2[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19474C3;
extern VTBL_ENTRY _ZTI8S19474C3[];
extern  VTBL_ENTRY _ZTV8S19474C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19474C2;
extern VTBL_ENTRY _ZTI8S19474C2[];
extern  VTBL_ENTRY _ZTV8S19474C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C2[];
extern Class_Descriptor cd_S19474C12;
extern VTBL_ENTRY _ZTI9S19474C12[];
extern  VTBL_ENTRY _ZTV9S19474C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19474C12[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19474C11;
extern VTBL_ENTRY _ZTI9S19474C11[];
extern  VTBL_ENTRY _ZTV9S19474C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19474C11[];
static Base_Class bases_S19474C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C11,    ABISELECT(16056,9896), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19566C5,    ABISELECT(17312,10668), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(16104,9924), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19474C3,    ABISELECT(16096,9920), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(17728,10920), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19474C9,    ABISELECT(17680,10888), //bcp->offset
    12, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(17848,10992), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19474C3,    ABISELECT(17840,10988), //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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(19056,11736), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(19168,11804), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19474C2,    ABISELECT(17840,10988), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(2400,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
    18, //immediately_derived
  0, 0},
  {&cd_S19566C6,    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
    14, //immediately_derived
  0, 0},
  {&cd_S19474C3,    0, //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
    5, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19474C2,    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
    18, //immediately_derived
  0, 0},
  {&cd_S19474C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(4384,2700), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19474C11,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19474C6[];
extern void _ZN8S19474C6D1Ev();
extern void _ZN8S19474C6D0Ev();
extern void ABISELECT(_ZTv0_n48_N8S19474C6D1Ev,_ZTv0_n24_N8S19474C6D1Ev)();
extern void ABISELECT(_ZThn17680_N8S19474C6D1Ev,_ZThn10888_N8S19474C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19474C6D0Ev,_ZTv0_n24_N8S19474C6D0Ev)();
extern void ABISELECT(_ZThn17680_N8S19474C6D0Ev,_ZThn10888_N8S19474C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19474C6D1Ev,_ZTv0_n16_N8S19474C6D1Ev)();
extern void ABISELECT(_ZThn17840_N8S19474C6D1Ev,_ZThn10988_N8S19474C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19474C6D0Ev,_ZTv0_n16_N8S19474C6D0Ev)();
extern void ABISELECT(_ZThn17840_N8S19474C6D0Ev,_ZThn10988_N8S19474C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19474C6[] = {
  ABISELECT(17840,10988),
  ABISELECT(17728,10920),
  ABISELECT(17680,10888),
  ABISELECT(16096,9920),
  ABISELECT(17312,10668),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C6[0]),
  (VTBL_ENTRY)&_ZN8S19474C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19474C6D0Ev,
  ABISELECT(1216,748),
  ABISELECT(-16096,-9920),
  (VTBL_ENTRY)&(_ZTI8S19474C6[0]),
  ABISELECT(-17680,-10888),
  ABISELECT(48,32),
  ABISELECT(-368,-220),
  ABISELECT(-1584,-968),
  ABISELECT(-17680,-10888),
  (VTBL_ENTRY)&(_ZTI8S19474C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19474C6D1Ev,_ZTv0_n24_N8S19474C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19474C6D0Ev,_ZTv0_n24_N8S19474C6D0Ev),
  ABISELECT(-17840,-10988),
  ABISELECT(-528,-320),
  ABISELECT(-17840,-10988),
  (VTBL_ENTRY)&(_ZTI8S19474C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19474C6D1Ev,_ZTv0_n16_N8S19474C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19474C6D0Ev,_ZTv0_n16_N8S19474C6D0Ev),
};
extern VTBL_ENTRY _ZTV8S19474C6[];
extern void _ZN9S19474C11D1Ev();
extern void _ZN9S19474C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19474C11__8S19474C6[] = {
  ABISELECT(16096,9920),
  ABISELECT(17312,10668),
  0,
  (VTBL_ENTRY)&(_ZTI9S19474C11[0]),
  (VTBL_ENTRY)&_ZN9S19474C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19474C11D0Ev,
};
extern void _ZN9S19474C12D1Ev();
extern void _ZN9S19474C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19474C129S19474C11__8S19474C6[] = {
  ABISELECT(16096,9920),
  ABISELECT(17312,10668),
  0,
  (VTBL_ENTRY)&(_ZTI9S19474C12[0]),
  (VTBL_ENTRY)&_ZN9S19474C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19474C12D0Ev,
};
extern void _ZN8S19474C2D1Ev();
extern void _ZN8S19474C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19474C29S19474C129S19474C11__A1__8S19474C6[] = {
  ABISELECT(17312,10668),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C2[0]),
  (VTBL_ENTRY)&_ZN8S19474C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19474C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19474C38S19474C29S19474C129S19474C11__A2__8S19474C6[] = {
  ABISELECT(17312,10668),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19474C3__9S19474C129S19474C11__8S19474C6[] = {
  ABISELECT(1216,748),
  ABISELECT(-16096,-9920),
  (VTBL_ENTRY)&(_ZTI9S19474C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19474C3__9S19474C11__8S19474C6[] = {
  ABISELECT(1216,748),
  ABISELECT(-16096,-9920),
  (VTBL_ENTRY)&(_ZTI9S19474C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19474C3__8S19474C6[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C3[0]),
};
extern void _ZN8S19474C9D1Ev();
extern void _ZN8S19474C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19474C9__8S19474C6[] = {
  ABISELECT(48,32),
  ABISELECT(-368,-220),
  ABISELECT(-1584,-968),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C9[0]),
  (VTBL_ENTRY)&_ZN8S19474C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19474C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19474C3__8S19474C9__8S19474C6[] = {
  ABISELECT(1216,748),
  ABISELECT(1584,968),
  (VTBL_ENTRY)&(_ZTI8S19474C9[0]),
};
extern void _ZN8S19474C2D1Ev();
extern void _ZN8S19474C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19474C2__8S19474C6[] = {
  ABISELECT(-528,-320),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C2[0]),
  (VTBL_ENTRY)&_ZN8S19474C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19474C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19474C38S19474C2__A1__8S19474C6[] = {
  ABISELECT(-528,-320),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C3[0]),
};
static  VTT_ENTRY vtt_S19474C6[] = {
  {&(_ZTV8S19474C6[7]),  7,26},
  {&(_tg__ZTV9S19474C11__8S19474C6[4]),  4,6},
  {&(_tg__ZTV9S19474C129S19474C11__8S19474C6[4]),  4,6},
  {&(_tg__ZTV8S19474C29S19474C129S19474C11__A1__8S19474C6[3]),  3,5},
  {&(_tg__ZTV8S19474C38S19474C29S19474C129S19474C11__A2__8S19474C6[3]),  3,3},
  {&(_tg__ZTV8S19474C3__9S19474C129S19474C11__8S19474C6[3]),  3,3},
  {&(_tg__ZTV8S19474C3__9S19474C11__8S19474C6[3]),  3,3},
  {&(_ZTV8S19474C6[12]),  12,26},
  {&(_ZTV8S19474C6[18]),  18,26},
  {&(_ZTV8S19474C6[24]),  24,26},
  {&(_tg__ZTV8S19474C3__8S19474C6[3]),  3,3},
  {&(_tg__ZTV8S19474C9__8S19474C6[5]),  5,7},
  {&(_tg__ZTV8S19474C3__8S19474C9__8S19474C6[3]),  3,3},
  {&(_tg__ZTV8S19474C2__8S19474C6[3]),  3,5},
  {&(_tg__ZTV8S19474C38S19474C2__A1__8S19474C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19474C6[];
extern  VTBL_ENTRY _ZTV8S19474C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C6[];
static VTBL_ENTRY alt_thunk_names117[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19474C6D0Ev,_ZTv0_n16_N8S19474C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17840_N8S19474C6D0Ev,_ZThn10988_N8S19474C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19474C6D1Ev,_ZTv0_n16_N8S19474C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17840_N8S19474C6D1Ev,_ZThn10988_N8S19474C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19474C6D0Ev,_ZTv0_n24_N8S19474C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17680_N8S19474C6D0Ev,_ZThn10888_N8S19474C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19474C6D1Ev,_ZTv0_n24_N8S19474C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17680_N8S19474C6D1Ev,_ZThn10888_N8S19474C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19474C6 = {  "S19474C6", // class name
  bases_S19474C6, 21,
  &(vtc_S19474C6[0]), // expected_vtbl_contents
  &(vtt_S19474C6[0]), // expected_vtt_contents
  ABISELECT(20128,12400), // object size
  NSPAIRA(_ZTI8S19474C6),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19474C6),26, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19474C6),15, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names117,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19474C1  : virtual S19474C2 , virtual S19474C6 {
  short s19474c1f0[8];
  short s19474c1f1:11;
  virtual  ~S19474C1(); // _ZN8S19474C1D2Ev
  S19474C1(); // tgen
};
//SIG(1 S19474C1) C1{ VBC2{ BC3{ VBC4{ m FL Fp FC5{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC5 FC4[3] Fi[4]} BC5 BC4 vd FL[6] Fi FC4 Fp FC5 Fi Fp[7]} VBC6{ BC7{ m Fp Fc Fi:6 Fl FC8{} Fi} VBC3 VBC9{ VBC3 VBC5 vd FU10{ m Fi FD} Fs[8]} VBC2 BC11{ BC12{ VBC3 BC5 BC4 BC2 Fi FC3 Fs Fp Fi[5]} BC5 vd Fi[7] Fl[7] Fs[8] Fs[8] FC3 Fp FC13{ BC12 BC3 BC2 BC4 vd v1 FC8 Fi Fi Fl Fp}} vd Fi} vd Fs[8] Fs:11}


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

static void Test_S19474C1()
{
  extern Class_Descriptor cd_S19474C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(1261,3107)];
    init_test(&cd_S19474C1, buf);
    S19474C1 *dp, &lv = *(dp=new (buf) S19474C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(20160,12424), "sizeof(S19474C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S19474C1)");
    /*is_ambiguous_... S19474C1::S19474C2 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19474C3*)(S19474C2*), ABISELECT(2320,1436), "S19474C1");
    /*is_ambiguous_... S19474C1::S19474C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19474C3*), ABISELECT(2320,1436), "S19474C1");
    check_base_class_offset(lv, (S19566C5*)(S19474C3*)(S19474C2*)(S19474C12*)(S19474C11*)(S19474C6*), ABISELECT(2320,1436), "S19474C1");
    /*is_ambiguous_... S19474C1::S19474C2 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19474C3*)(S19474C2*), ABISELECT(40,28), "S19474C1");
    /*is_ambiguous_... S19474C1::S19474C2 */ AMB_check_base_class_offset(lv, (S19474C3*)(S19474C2*), ABISELECT(32,24), "S19474C1");
    /*is_ambiguous_... S19474C1::S19474C2 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19474C2*), ABISELECT(1248,772), "S19474C1");
    /*is_ambiguous_... S19474C1::S19474C2 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19474C2*), ABISELECT(1360,840), "S19474C1");
    /*is_ambiguous_... S19474C1::S19474C2 */ AMB_check_base_class_offset(lv, (S19474C2*), ABISELECT(32,24), "S19474C1");
    /*is_ambiguous_... S19474C6::S19474C2 */ AMB_check_base_class_offset(lv, (S19474C2*)(S19474C6*), ABISELECT(32,24), "S19474C1");
    check_base_class_offset(lv, (S19566C11*)(S19474C6*), ABISELECT(18736,11552), "S19474C1");
    /*is_ambiguous_... S19474C1::S19474C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19474C3*), ABISELECT(18784,11580), "S19474C1");
    /*is_ambiguous_... S19474C6::S19474C3 */ AMB_check_base_class_offset(lv, (S19474C3*)(S19474C6*), ABISELECT(18776,11576), "S19474C1");
    check_base_class_offset(lv, (S19474C3*)(S19474C9*), ABISELECT(18776,11576), "S19474C1");
    /*is_ambiguous_... S19474C12::S19474C3 */ AMB_check_base_class_offset(lv, (S19474C3*)(S19474C12*)(S19474C11*)(S19474C6*), ABISELECT(18776,11576), "S19474C1");
    /*is_ambiguous_... S19474C9::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19474C9*), ABISELECT(20048,12356), "S19474C1");
    check_base_class_offset(lv, (S19474C9*)(S19474C6*), ABISELECT(20000,12324), "S19474C1");
    /*is_ambiguous_... S19474C12::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19474C12*)(S19474C11*)(S19474C6*), ABISELECT(4968,3068), "S19474C1");
    /*is_ambiguous_... S19474C12::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19474C12*)(S19474C11*)(S19474C6*), ABISELECT(5080,3136), "S19474C1");
    check_base_class_offset(lv, (S19566C6*)(S19474C3*)(S19474C2*)(S19474C12*)(S19474C11*)(S19474C6*), ABISELECT(2688,1660), "S19474C1");
    check_base_class_offset(lv, (S19474C3*)(S19474C2*)(S19474C12*)(S19474C11*)(S19474C6*), ABISELECT(2680,1656), "S19474C1");
    /*is_ambiguous_... S19474C2::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19474C2*)(S19474C12*)(S19474C11*)(S19474C6*), ABISELECT(3896,2404), "S19474C1");
    /*is_ambiguous_... S19474C2::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S19474C2*)(S19474C12*)(S19474C11*)(S19474C6*), ABISELECT(4008,2472), "S19474C1");
    check_base_class_offset(lv, (S19474C2*)(S19474C12*)(S19474C11*)(S19474C6*), ABISELECT(2680,1656), "S19474C1");
    check_base_class_offset(lv, (S19474C12*)(S19474C11*)(S19474C6*), ABISELECT(2680,1656), "S19474C1");
    /*is_ambiguous_... S19474C11::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S19474C11*)(S19474C6*), ABISELECT(7064,4356), "S19474C1");
    check_base_class_offset(lv, (S19474C11*)(S19474C6*), ABISELECT(2680,1656), "S19474C1");
    check_base_class_offset(lv, (S19474C6*), ABISELECT(2680,1656), "S19474C1");
    check_field_offset(lv, s19474c1f0, ABISELECT(8,4), "S19474C1.s19474c1f0");
    set_bf_and_test(lv, s19474c1f1, ABISELECT(24,20), 0, 11, 1, "S19474C1");
    set_bf_and_test(lv, s19474c1f1, ABISELECT(24,20), 0, 11, hide_sll(1LL<<10), "S19474C1");
    test_class_info(&lv, &cd_S19474C1);
    dp->~S19474C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19474C1(Test_S19474C1, "S19474C1", ABISELECT(20160,12424));

#else // __cplusplus

extern void _ZN8S19474C1C1Ev();
extern void _ZN8S19474C1D2Ev();
Name_Map name_map_S19474C1[] = {
  NSPAIR(_ZN8S19474C1C1Ev),
  NSPAIR(_ZN8S19474C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19474C3;
extern VTBL_ENTRY _ZTI8S19474C3[];
extern  VTBL_ENTRY _ZTV8S19474C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19474C2;
extern VTBL_ENTRY _ZTI8S19474C2[];
extern  VTBL_ENTRY _ZTV8S19474C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C2[];
extern Class_Descriptor cd_S19566C11;
extern VTBL_ENTRY _ZTI9S19566C11[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19474C3;
extern VTBL_ENTRY _ZTI8S19474C3[];
extern  VTBL_ENTRY _ZTV8S19474C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19474C9;
extern VTBL_ENTRY _ZTI8S19474C9[];
extern  VTBL_ENTRY _ZTV8S19474C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C9[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19474C3;
extern VTBL_ENTRY _ZTI8S19474C3[];
extern  VTBL_ENTRY _ZTV8S19474C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19474C2;
extern VTBL_ENTRY _ZTI8S19474C2[];
extern  VTBL_ENTRY _ZTV8S19474C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C2[];
extern Class_Descriptor cd_S19474C12;
extern VTBL_ENTRY _ZTI9S19474C12[];
extern  VTBL_ENTRY _ZTV9S19474C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19474C12[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19474C11;
extern VTBL_ENTRY _ZTI9S19474C11[];
extern  VTBL_ENTRY _ZTV9S19474C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19474C11[];
extern Class_Descriptor cd_S19474C6;
extern VTBL_ENTRY _ZTI8S19474C6[];
extern  VTBL_ENTRY _ZTV8S19474C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C6[];
static Base_Class bases_S19474C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(2320,1436), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(40,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
    2, //immediately_derived
  0, 0},
  {&cd_S19474C3,    ABISELECT(32,24), //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
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1248,772), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1360,840), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19474C2,    ABISELECT(32,24), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C11,    ABISELECT(18736,11552), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(18784,11580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19474C3,    ABISELECT(18776,11576), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(20048,12356), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19474C9,    ABISELECT(20000,12324), //bcp->offset
    29, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(4968,3068), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(5080,3136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(2688,1660), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19474C3,    ABISELECT(2680,1656), //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
    5, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(3896,2404), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(4008,2472), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19474C2,    ABISELECT(2680,1656), //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
    6, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19474C12,    ABISELECT(2680,1656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(7064,4356), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19474C11,    ABISELECT(2680,1656), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19474C6,    ABISELECT(2680,1656), //bcp->offset
    16, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19474C1[];
extern void _ZN8S19474C1D1Ev();
extern void _ZN8S19474C1D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S19474C1D1Ev,_ZTv0_n16_N8S19474C1D1Ev)();
extern void ABISELECT(_ZThn32_N8S19474C1D1Ev,_ZThn24_N8S19474C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19474C1D0Ev,_ZTv0_n16_N8S19474C1D0Ev)();
extern void ABISELECT(_ZThn32_N8S19474C1D0Ev,_ZThn24_N8S19474C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19474C1D1Ev,_ZTv0_n32_N8S19474C1D1Ev)();
extern void ABISELECT(_ZThn2680_N8S19474C1D1Ev,_ZThn1656_N8S19474C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19474C1D0Ev,_ZTv0_n32_N8S19474C1D0Ev)();
extern void ABISELECT(_ZThn2680_N8S19474C1D0Ev,_ZThn1656_N8S19474C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19474C1D1Ev,_ZTv0_n24_N8S19474C1D1Ev)();
extern void ABISELECT(_ZThn20000_N8S19474C1D1Ev,_ZThn12324_N8S19474C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19474C1D0Ev,_ZTv0_n24_N8S19474C1D0Ev)();
extern void ABISELECT(_ZThn20000_N8S19474C1D0Ev,_ZThn12324_N8S19474C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19474C1[] = {
  ABISELECT(20048,12356),
  ABISELECT(20000,12324),
  ABISELECT(18776,11576),
  ABISELECT(2680,1656),
  ABISELECT(2320,1436),
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C1[0]),
  (VTBL_ENTRY)&_ZN8S19474C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19474C1D0Ev,
  ABISELECT(-32,-24),
  ABISELECT(2288,1412),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S19474C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19474C1D1Ev,_ZTv0_n16_N8S19474C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19474C1D0Ev,_ZTv0_n16_N8S19474C1D0Ev),
  ABISELECT(-2680,-1656),
  ABISELECT(-2648,-1632),
  ABISELECT(17368,10700),
  ABISELECT(17320,10668),
  ABISELECT(16096,9920),
  ABISELECT(-360,-220),
  ABISELECT(-2680,-1656),
  (VTBL_ENTRY)&(_ZTI8S19474C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19474C1D1Ev,_ZTv0_n32_N8S19474C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19474C1D0Ev,_ZTv0_n32_N8S19474C1D0Ev),
  ABISELECT(-16456,-10140),
  ABISELECT(-18776,-11576),
  (VTBL_ENTRY)&(_ZTI8S19474C1[0]),
  ABISELECT(-20000,-12324),
  ABISELECT(48,32),
  ABISELECT(-17680,-10888),
  ABISELECT(-1224,-748),
  ABISELECT(-20000,-12324),
  (VTBL_ENTRY)&(_ZTI8S19474C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19474C1D1Ev,_ZTv0_n24_N8S19474C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19474C1D0Ev,_ZTv0_n24_N8S19474C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19474C1[];
extern void _ZN8S19474C2D1Ev();
extern void _ZN8S19474C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19474C2__8S19474C1[] = {
  ABISELECT(2288,1412),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C2[0]),
  (VTBL_ENTRY)&_ZN8S19474C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19474C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19474C38S19474C2__8S19474C1[] = {
  ABISELECT(2288,1412),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C3[0]),
};
extern void _ZN8S19474C6D1Ev();
extern void _ZN8S19474C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19474C6__8S19474C1[] = {
  ABISELECT(-2648,-1632),
  ABISELECT(17368,10700),
  ABISELECT(17320,10668),
  ABISELECT(16096,9920),
  ABISELECT(-360,-220),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C6[0]),
  (VTBL_ENTRY)&_ZN8S19474C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19474C6D0Ev,
};
extern void _ZN9S19474C11D1Ev();
extern void _ZN9S19474C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19474C118S19474C6__8S19474C1[] = {
  ABISELECT(16096,9920),
  ABISELECT(-360,-220),
  0,
  (VTBL_ENTRY)&(_ZTI9S19474C11[0]),
  (VTBL_ENTRY)&_ZN9S19474C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19474C11D0Ev,
};
extern void _ZN9S19474C12D1Ev();
extern void _ZN9S19474C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19474C129S19474C118S19474C6__8S19474C1[] = {
  ABISELECT(16096,9920),
  ABISELECT(-360,-220),
  0,
  (VTBL_ENTRY)&(_ZTI9S19474C12[0]),
  (VTBL_ENTRY)&_ZN9S19474C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19474C12D0Ev,
};
extern void _ZN8S19474C2D1Ev();
extern void _ZN8S19474C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19474C29S19474C129S19474C118S19474C6__A1__8S19474C1[] = {
  ABISELECT(-360,-220),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C2[0]),
  (VTBL_ENTRY)&_ZN8S19474C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19474C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19474C38S19474C29S19474C129S19474C118S19474C6__A2__8S19474C1[] = {
  ABISELECT(-360,-220),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19474C3__9S19474C129S19474C118S19474C6__8S19474C1[] = {
  ABISELECT(-16456,-10140),
  ABISELECT(-16096,-9920),
  (VTBL_ENTRY)&(_ZTI9S19474C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19474C3__9S19474C118S19474C6__8S19474C1[] = {
  ABISELECT(-16456,-10140),
  ABISELECT(-16096,-9920),
  (VTBL_ENTRY)&(_ZTI9S19474C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19474C3__8S19474C6__8S19474C1[] = {
  ABISELECT(-16456,-10140),
  ABISELECT(-16096,-9920),
  (VTBL_ENTRY)&(_ZTI8S19474C6[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19474C6D1Ev,_ZTv0_n24_N8S19474C6D1Ev)();
extern void ABISELECT(_ZThn17320_N8S19474C6D1Ev,_ZThn10668_N8S19474C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19474C6D0Ev,_ZTv0_n24_N8S19474C6D0Ev)();
extern void ABISELECT(_ZThn17320_N8S19474C6D0Ev,_ZThn10668_N8S19474C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19474C9__8S19474C6__8S19474C1[] = {
  ABISELECT(-17320,-10668),
  ABISELECT(48,32),
  ABISELECT(-17680,-10888),
  ABISELECT(-1224,-748),
  ABISELECT(-17320,-10668),
  (VTBL_ENTRY)&(_ZTI8S19474C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19474C6D1Ev,_ZTv0_n24_N8S19474C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19474C6D0Ev,_ZTv0_n24_N8S19474C6D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N8S19474C6D1Ev,_ZTv0_n16_N8S19474C6D1Ev)();
extern void ABISELECT(_ZTv0_n32_N8S19474C6D0Ev,_ZTv0_n16_N8S19474C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19474C2__8S19474C6__8S19474C1[] = {
  ABISELECT(2648,1632),
  ABISELECT(2288,1412),
  ABISELECT(2648,1632),
  (VTBL_ENTRY)&(_ZTI8S19474C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19474C6D1Ev,_ZTv0_n16_N8S19474C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19474C6D0Ev,_ZTv0_n16_N8S19474C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19474C3__A1__8S19474C1[] = {
  ABISELECT(-16456,-10140),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C3[0]),
};
extern void _ZN8S19474C9D1Ev();
extern void _ZN8S19474C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19474C9__8S19474C1[] = {
  ABISELECT(48,32),
  ABISELECT(-17680,-10888),
  ABISELECT(-1224,-748),
  0,
  (VTBL_ENTRY)&(_ZTI8S19474C9[0]),
  (VTBL_ENTRY)&_ZN8S19474C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19474C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19474C3__8S19474C9__8S19474C1[] = {
  ABISELECT(-16456,-10140),
  ABISELECT(1224,748),
  (VTBL_ENTRY)&(_ZTI8S19474C9[0]),
};
static  VTT_ENTRY vtt_S19474C1[] = {
  {&(_ZTV8S19474C1[8]),  8,37},
  {&(_ZTV8S19474C1[14]),  14,37},
  {&(_ZTV8S19474C1[24]),  24,37},
  {&(_ZTV8S19474C1[29]),  29,37},
  {&(_ZTV8S19474C1[35]),  35,37},
  {&(_tg__ZTV8S19474C2__8S19474C1[3]),  3,5},
  {&(_tg__ZTV8S19474C38S19474C2__8S19474C1[3]),  3,3},
  {&(_tg__ZTV8S19474C6__8S19474C1[7]),  7,9},
  {&(_tg__ZTV9S19474C118S19474C6__8S19474C1[4]),  4,6},
  {&(_tg__ZTV9S19474C129S19474C118S19474C6__8S19474C1[4]),  4,6},
  {&(_tg__ZTV8S19474C29S19474C129S19474C118S19474C6__A1__8S19474C1[3]),  3,5},
  {&(_tg__ZTV8S19474C38S19474C29S19474C129S19474C118S19474C6__A2__8S19474C1[3]),  3,3},
  {&(_tg__ZTV8S19474C3__9S19474C129S19474C118S19474C6__8S19474C1[3]),  3,3},
  {&(_tg__ZTV8S19474C3__9S19474C118S19474C6__8S19474C1[3]),  3,3},
  {&(_tg__ZTV8S19474C3__8S19474C6__8S19474C1[3]),  3,3},
  {&(_tg__ZTV8S19474C9__8S19474C6__8S19474C1[6]),  6,8},
  {&(_tg__ZTV8S19474C2__8S19474C6__8S19474C1[4]),  4,6},
  {&(_tg__ZTV8S19474C3__A1__8S19474C1[3]),  3,3},
  {&(_tg__ZTV8S19474C9__8S19474C1[5]),  5,7},
  {&(_tg__ZTV8S19474C3__8S19474C9__8S19474C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19474C1[];
extern  VTBL_ENTRY _ZTV8S19474C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19474C1[];
static VTBL_ENTRY alt_thunk_names118[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19474C6D0Ev,_ZTv0_n24_N8S19474C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17320_N8S19474C6D0Ev,_ZThn10668_N8S19474C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19474C6D1Ev,_ZTv0_n24_N8S19474C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn17320_N8S19474C6D1Ev,_ZThn10668_N8S19474C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19474C1D0Ev,_ZTv0_n24_N8S19474C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20000_N8S19474C1D0Ev,_ZThn12324_N8S19474C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19474C1D1Ev,_ZTv0_n24_N8S19474C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn20000_N8S19474C1D1Ev,_ZThn12324_N8S19474C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19474C1D0Ev,_ZTv0_n32_N8S19474C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2680_N8S19474C1D0Ev,_ZThn1656_N8S19474C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19474C1D1Ev,_ZTv0_n32_N8S19474C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn2680_N8S19474C1D1Ev,_ZThn1656_N8S19474C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19474C1D0Ev,_ZTv0_n16_N8S19474C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19474C1D0Ev,_ZThn24_N8S19474C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19474C1D1Ev,_ZTv0_n16_N8S19474C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19474C1D1Ev,_ZThn24_N8S19474C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19474C1 = {  "S19474C1", // class name
  bases_S19474C1, 22,
  &(vtc_S19474C1[0]), // expected_vtbl_contents
  &(vtt_S19474C1[0]), // expected_vtt_contents
  ABISELECT(20160,12424), // object size
  NSPAIRA(_ZTI8S19474C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19474C1),37, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19474C1),20, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names118,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7218C8  {
  int s7218c8f0;
  virtual void  v14(); // _ZN7S7218C83v14Ev
  virtual void  v15(); // _ZN7S7218C83v15Ev
  virtual void  v16(); // _ZN7S7218C83v16Ev
  virtual void  v17(); // _ZN7S7218C83v17Ev
  virtual void  v18(); // _ZN7S7218C83v18Ev
  virtual void  v19(); // _ZN7S7218C83v19Ev
  ~S7218C8(); // tgen
  S7218C8(); // tgen
};
//SIG(-1 S7218C8) C1{ v1 v2 v3 v4 v5 v6 Fi}


void  S7218C8 ::v14(){vfunc_called(this, "_ZN7S7218C83v14Ev");}
void  S7218C8 ::v15(){vfunc_called(this, "_ZN7S7218C83v15Ev");}
void  S7218C8 ::v16(){vfunc_called(this, "_ZN7S7218C83v16Ev");}
void  S7218C8 ::v17(){vfunc_called(this, "_ZN7S7218C83v17Ev");}
void  S7218C8 ::v18(){vfunc_called(this, "_ZN7S7218C83v18Ev");}
void  S7218C8 ::v19(){vfunc_called(this, "_ZN7S7218C83v19Ev");}
S7218C8 ::~S7218C8(){ note_dtor("S7218C8", this);} // tgen
S7218C8 ::S7218C8(){ note_ctor("S7218C8", this);} // tgen

static void Test_S7218C8()
{
  extern Class_Descriptor cd_S7218C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7218C8, buf);
    S7218C8 *dp, &lv = *(dp=new (buf) S7218C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7218C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7218C8)");
    check_field_offset(lv, s7218c8f0, ABISELECT(8,4), "S7218C8.s7218c8f0");
    test_class_info(&lv, &cd_S7218C8);
    dp->~S7218C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7218C8(Test_S7218C8, "S7218C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7218C8C1Ev();
extern void _ZN7S7218C8D1Ev();
Name_Map name_map_S7218C8[] = {
  NSPAIR(_ZN7S7218C8C1Ev),
  NSPAIR(_ZN7S7218C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7218C8[];
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
static  VTBL_ENTRY vtc_S7218C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7218C8[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
};
extern VTBL_ENTRY _ZTI7S7218C8[];
extern  VTBL_ENTRY _ZTV7S7218C8[];
Class_Descriptor cd_S7218C8 = {  "S7218C8", // class name
  0,0,//no base classes
  &(vtc_S7218C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7218C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7218C8),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  S7218C7  : S7218C8 {
  virtual void  v28(); // _ZN7S7218C73v28Ev
  ~S7218C7(); // tgen
  S7218C7(); // tgen
};
//SIG(-1 S7218C7) C1{ BC2{ v2 v3 v4 v5 v6 v7 Fi} v1}


void  S7218C7 ::v28(){vfunc_called(this, "_ZN7S7218C73v28Ev");}
S7218C7 ::~S7218C7(){ note_dtor("S7218C7", this);} // tgen
S7218C7 ::S7218C7(){ note_ctor("S7218C7", this);} // tgen

static void Test_S7218C7()
{
  extern Class_Descriptor cd_S7218C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7218C7, buf);
    S7218C7 *dp, &lv = *(dp=new (buf) S7218C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7218C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7218C7)");
    check_base_class_offset(lv, (S7218C8*), 0, "S7218C7");
    test_class_info(&lv, &cd_S7218C7);
    dp->~S7218C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7218C7(Test_S7218C7, "S7218C7", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7218C7C1Ev();
extern void _ZN7S7218C7D1Ev();
Name_Map name_map_S7218C7[] = {
  NSPAIR(_ZN7S7218C7C1Ev),
  NSPAIR(_ZN7S7218C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7218C8;
extern VTBL_ENTRY _ZTI7S7218C8[];
extern  VTBL_ENTRY _ZTV7S7218C8[];
static Base_Class bases_S7218C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7218C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S7218C7[];
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
extern void _ZN7S7218C73v28Ev();
static  VTBL_ENTRY vtc_S7218C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7218C7[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7218C73v28Ev,
};
extern VTBL_ENTRY _ZTI7S7218C7[];
extern  VTBL_ENTRY _ZTV7S7218C7[];
Class_Descriptor cd_S7218C7 = {  "S7218C7", // class name
  bases_S7218C7, 1,
  &(vtc_S7218C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7218C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7218C7),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7218C6  : S7218C7 {
  virtual void  v52(); // _ZN7S7218C63v52Ev
  virtual void  v53(); // _ZN7S7218C63v53Ev
  virtual void  v54(); // _ZN7S7218C63v54Ev
  virtual void  v55(); // _ZN7S7218C63v55Ev
  virtual void  v56(); // _ZN7S7218C63v56Ev
  virtual void  v57(); // _ZN7S7218C63v57Ev
  virtual void  v58(); // _ZN7S7218C63v58Ev
  ~S7218C6(); // tgen
  S7218C6(); // tgen
};
//SIG(-1 S7218C6) C1{ BC2{ BC3{ v8 v9 v10 v11 v12 v13 Fi} v14} v1 v2 v3 v4 v5 v6 v7}


void  S7218C6 ::v52(){vfunc_called(this, "_ZN7S7218C63v52Ev");}
void  S7218C6 ::v53(){vfunc_called(this, "_ZN7S7218C63v53Ev");}
void  S7218C6 ::v54(){vfunc_called(this, "_ZN7S7218C63v54Ev");}
void  S7218C6 ::v55(){vfunc_called(this, "_ZN7S7218C63v55Ev");}
void  S7218C6 ::v56(){vfunc_called(this, "_ZN7S7218C63v56Ev");}
void  S7218C6 ::v57(){vfunc_called(this, "_ZN7S7218C63v57Ev");}
void  S7218C6 ::v58(){vfunc_called(this, "_ZN7S7218C63v58Ev");}
S7218C6 ::~S7218C6(){ note_dtor("S7218C6", this);} // tgen
S7218C6 ::S7218C6(){ note_ctor("S7218C6", this);} // tgen

static void Test_S7218C6()
{
  extern Class_Descriptor cd_S7218C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7218C6, buf);
    S7218C6 *dp, &lv = *(dp=new (buf) S7218C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7218C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7218C6)");
    check_base_class_offset(lv, (S7218C8*)(S7218C7*), 0, "S7218C6");
    check_base_class_offset(lv, (S7218C7*), 0, "S7218C6");
    test_class_info(&lv, &cd_S7218C6);
    dp->~S7218C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7218C6(Test_S7218C6, "S7218C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7218C6C1Ev();
extern void _ZN7S7218C6D1Ev();
Name_Map name_map_S7218C6[] = {
  NSPAIR(_ZN7S7218C6C1Ev),
  NSPAIR(_ZN7S7218C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7218C8;
extern VTBL_ENTRY _ZTI7S7218C8[];
extern  VTBL_ENTRY _ZTV7S7218C8[];
extern Class_Descriptor cd_S7218C7;
extern VTBL_ENTRY _ZTI7S7218C7[];
extern  VTBL_ENTRY _ZTV7S7218C7[];
static Base_Class bases_S7218C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7218C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7218C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7218C6[];
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
extern void _ZN7S7218C73v28Ev();
extern void _ZN7S7218C63v52Ev();
extern void _ZN7S7218C63v53Ev();
extern void _ZN7S7218C63v54Ev();
extern void _ZN7S7218C63v55Ev();
extern void _ZN7S7218C63v56Ev();
extern void _ZN7S7218C63v57Ev();
extern void _ZN7S7218C63v58Ev();
static  VTBL_ENTRY vtc_S7218C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7218C6[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7218C73v28Ev,
  (VTBL_ENTRY)&_ZN7S7218C63v52Ev,
  (VTBL_ENTRY)&_ZN7S7218C63v53Ev,
  (VTBL_ENTRY)&_ZN7S7218C63v54Ev,
  (VTBL_ENTRY)&_ZN7S7218C63v55Ev,
  (VTBL_ENTRY)&_ZN7S7218C63v56Ev,
  (VTBL_ENTRY)&_ZN7S7218C63v57Ev,
  (VTBL_ENTRY)&_ZN7S7218C63v58Ev,
};
extern VTBL_ENTRY _ZTI7S7218C6[];
extern  VTBL_ENTRY _ZTV7S7218C6[];
Class_Descriptor cd_S7218C6 = {  "S7218C6", // class name
  bases_S7218C6, 2,
  &(vtc_S7218C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7218C6),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7218C6),16, //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  S7218C5  {
  ::S7218C6 s7218c5f0;
  virtual void  v7(); // _ZN7S7218C52v7Ev
  virtual void  v8(); // _ZN7S7218C52v8Ev
  virtual void  v9(); // _ZN7S7218C52v9Ev
  ~S7218C5(); // tgen
  S7218C5(); // tgen
};
//SIG(-1 S7218C5) C1{ v1 v2 v3 FC2{ BC3{ BC4{ v11 v12 v13 v14 v15 v16 Fi} v17} v4 v5 v6 v7 v8 v9 v10}}


void  S7218C5 ::v7(){vfunc_called(this, "_ZN7S7218C52v7Ev");}
void  S7218C5 ::v8(){vfunc_called(this, "_ZN7S7218C52v8Ev");}
void  S7218C5 ::v9(){vfunc_called(this, "_ZN7S7218C52v9Ev");}
S7218C5 ::~S7218C5(){ note_dtor("S7218C5", this);} // tgen
S7218C5 ::S7218C5(){ note_ctor("S7218C5", this);} // tgen

static void Test_S7218C5()
{
  extern Class_Descriptor cd_S7218C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7218C5, buf);
    S7218C5 *dp, &lv = *(dp=new (buf) S7218C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7218C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7218C5)");
    check_field_offset(lv, s7218c5f0, ABISELECT(8,4), "S7218C5.s7218c5f0");
    test_class_info(&lv, &cd_S7218C5);
    dp->~S7218C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7218C5(Test_S7218C5, "S7218C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7218C5C1Ev();
extern void _ZN7S7218C5D1Ev();
Name_Map name_map_S7218C5[] = {
  NSPAIR(_ZN7S7218C5C1Ev),
  NSPAIR(_ZN7S7218C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7218C5[];
extern void _ZN7S7218C52v7Ev();
extern void _ZN7S7218C52v8Ev();
extern void _ZN7S7218C52v9Ev();
static  VTBL_ENTRY vtc_S7218C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7218C5[0]),
  (VTBL_ENTRY)&_ZN7S7218C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7218C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7218C52v9Ev,
};
extern VTBL_ENTRY _ZTI7S7218C5[];
extern  VTBL_ENTRY _ZTV7S7218C5[];
Class_Descriptor cd_S7218C5 = {  "S7218C5", // class name
  0,0,//no base classes
  &(vtc_S7218C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7218C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7218C5),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  S7218C4  : S7218C5 {
  void *s7218c4f0;
  char s7218c4f1;
  virtual void  v10(); // _ZN7S7218C43v10Ev
  virtual void  v11(); // _ZN7S7218C43v11Ev
  virtual void  v12(); // _ZN7S7218C43v12Ev
  virtual void  v13(); // _ZN7S7218C43v13Ev
  ~S7218C4(); // tgen
  S7218C4(); // tgen
};
//SIG(-1 S7218C4) C1{ BC2{ v5 v6 v7 FC3{ BC4{ BC5{ v15 v16 v17 v18 v19 v20 Fi} v21} v8 v9 v10 v11 v12 v13 v14}} v1 v2 v3 v4 Fp Fc}


void  S7218C4 ::v10(){vfunc_called(this, "_ZN7S7218C43v10Ev");}
void  S7218C4 ::v11(){vfunc_called(this, "_ZN7S7218C43v11Ev");}
void  S7218C4 ::v12(){vfunc_called(this, "_ZN7S7218C43v12Ev");}
void  S7218C4 ::v13(){vfunc_called(this, "_ZN7S7218C43v13Ev");}
S7218C4 ::~S7218C4(){ note_dtor("S7218C4", this);} // tgen
S7218C4 ::S7218C4(){ note_ctor("S7218C4", this);} // tgen

static void Test_S7218C4()
{
  extern Class_Descriptor cd_S7218C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7218C4, buf);
    S7218C4 *dp, &lv = *(dp=new (buf) S7218C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7218C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7218C4)");
    check_base_class_offset(lv, (S7218C5*), 0, "S7218C4");
    check_field_offset(lv, s7218c4f0, ABISELECT(24,12), "S7218C4.s7218c4f0");
    check_field_offset(lv, s7218c4f1, ABISELECT(32,16), "S7218C4.s7218c4f1");
    test_class_info(&lv, &cd_S7218C4);
    dp->~S7218C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7218C4(Test_S7218C4, "S7218C4", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7218C4C1Ev();
extern void _ZN7S7218C4D1Ev();
Name_Map name_map_S7218C4[] = {
  NSPAIR(_ZN7S7218C4C1Ev),
  NSPAIR(_ZN7S7218C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7218C5;
extern VTBL_ENTRY _ZTI7S7218C5[];
extern  VTBL_ENTRY _ZTV7S7218C5[];
static Base_Class bases_S7218C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7218C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S7218C4[];
extern void _ZN7S7218C52v7Ev();
extern void _ZN7S7218C52v8Ev();
extern void _ZN7S7218C52v9Ev();
extern void _ZN7S7218C43v10Ev();
extern void _ZN7S7218C43v11Ev();
extern void _ZN7S7218C43v12Ev();
extern void _ZN7S7218C43v13Ev();
static  VTBL_ENTRY vtc_S7218C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7218C4[0]),
  (VTBL_ENTRY)&_ZN7S7218C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7218C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7218C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7218C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7218C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7218C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7218C43v13Ev,
};
extern VTBL_ENTRY _ZTI7S7218C4[];
extern  VTBL_ENTRY _ZTV7S7218C4[];
Class_Descriptor cd_S7218C4 = {  "S7218C4", // class name
  bases_S7218C4, 1,
  &(vtc_S7218C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7218C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7218C4),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  S7218C3  : S7218C4 , S7218C8 {
  void *s7218c3f0[2];
  virtual  ~S7218C3(); // _ZN7S7218C3D1Ev
  virtual void  v20(); // _ZN7S7218C33v20Ev
  virtual void  v21(); // _ZN7S7218C33v21Ev
  virtual void  v22(); // _ZN7S7218C33v22Ev
  virtual void  v23(); // _ZN7S7218C33v23Ev
  virtual void  v24(); // _ZN7S7218C33v24Ev
  virtual void  v25(); // _ZN7S7218C33v25Ev
  virtual void  v26(); // _ZN7S7218C33v26Ev
  virtual void  v27(); // _ZN7S7218C33v27Ev
  S7218C3(); // tgen
};
//SIG(-1 S7218C3) C1{ BC2{ BC3{ v9 v10 v11 FC4{ BC5{ BC6{ v16 v17 v18 v19 v20 v21 Fi} v29} v22 v23 v24 v25 v26 v27 v28}} v12 v13 v14 v15 Fp Fc} BC6 vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[2]}


 S7218C3 ::~S7218C3(){ note_dtor("S7218C3", this);}
void  S7218C3 ::v20(){vfunc_called(this, "_ZN7S7218C33v20Ev");}
void  S7218C3 ::v21(){vfunc_called(this, "_ZN7S7218C33v21Ev");}
void  S7218C3 ::v22(){vfunc_called(this, "_ZN7S7218C33v22Ev");}
void  S7218C3 ::v23(){vfunc_called(this, "_ZN7S7218C33v23Ev");}
void  S7218C3 ::v24(){vfunc_called(this, "_ZN7S7218C33v24Ev");}
void  S7218C3 ::v25(){vfunc_called(this, "_ZN7S7218C33v25Ev");}
void  S7218C3 ::v26(){vfunc_called(this, "_ZN7S7218C33v26Ev");}
void  S7218C3 ::v27(){vfunc_called(this, "_ZN7S7218C33v27Ev");}
S7218C3 ::S7218C3(){ note_ctor("S7218C3", this);} // tgen

static void Test_S7218C3()
{
  extern Class_Descriptor cd_S7218C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S7218C3, buf);
    S7218C3 *dp, &lv = *(dp=new (buf) S7218C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S7218C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7218C3)");
    check_base_class_offset(lv, (S7218C5*)(S7218C4*), 0, "S7218C3");
    check_base_class_offset(lv, (S7218C4*), 0, "S7218C3");
    check_base_class_offset(lv, (S7218C8*), ABISELECT(40,20), "S7218C3");
    check_field_offset(lv, s7218c3f0, ABISELECT(56,28), "S7218C3.s7218c3f0");
    test_class_info(&lv, &cd_S7218C3);
    dp->~S7218C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7218C3(Test_S7218C3, "S7218C3", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN7S7218C3C1Ev();
extern void _ZN7S7218C3D1Ev();
Name_Map name_map_S7218C3[] = {
  NSPAIR(_ZN7S7218C3C1Ev),
  NSPAIR(_ZN7S7218C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7218C5;
extern VTBL_ENTRY _ZTI7S7218C5[];
extern  VTBL_ENTRY _ZTV7S7218C5[];
extern Class_Descriptor cd_S7218C4;
extern VTBL_ENTRY _ZTI7S7218C4[];
extern  VTBL_ENTRY _ZTV7S7218C4[];
extern Class_Descriptor cd_S7218C8;
extern VTBL_ENTRY _ZTI7S7218C8[];
extern  VTBL_ENTRY _ZTV7S7218C8[];
static Base_Class bases_S7218C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7218C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7218C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7218C8,    ABISELECT(40,20), //bcp->offset
    19, //bcp->virtual_function_table_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 _ZTI7S7218C3[];
extern void _ZN7S7218C52v7Ev();
extern void _ZN7S7218C52v8Ev();
extern void _ZN7S7218C52v9Ev();
extern void _ZN7S7218C43v10Ev();
extern void _ZN7S7218C43v11Ev();
extern void _ZN7S7218C43v12Ev();
extern void _ZN7S7218C43v13Ev();
extern void _ZN7S7218C3D1Ev();
extern void _ZN7S7218C3D0Ev();
extern void _ZN7S7218C33v20Ev();
extern void _ZN7S7218C33v21Ev();
extern void _ZN7S7218C33v22Ev();
extern void _ZN7S7218C33v23Ev();
extern void _ZN7S7218C33v24Ev();
extern void _ZN7S7218C33v25Ev();
extern void _ZN7S7218C33v26Ev();
extern void _ZN7S7218C33v27Ev();
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
static  VTBL_ENTRY vtc_S7218C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7218C3[0]),
  (VTBL_ENTRY)&_ZN7S7218C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7218C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7218C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7218C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7218C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7218C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7218C43v13Ev,
  (VTBL_ENTRY)&_ZN7S7218C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7218C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v23Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v24Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v25Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v27Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7218C3[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
};
extern VTBL_ENTRY _ZTI7S7218C3[];
extern  VTBL_ENTRY _ZTV7S7218C3[];
Class_Descriptor cd_S7218C3 = {  "S7218C3", // class name
  bases_S7218C3, 3,
  &(vtc_S7218C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI7S7218C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7218C3),27, //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  S7218C11  : virtual S7218C7 {
  int s7218c11f0;
  short s7218c11f1;
  virtual  ~S7218C11(); // _ZN8S7218C11D2Ev
  virtual void  v29(); // _ZN8S7218C113v29Ev
  virtual void  v30(); // _ZN8S7218C113v30Ev
  virtual void  v31(); // _ZN8S7218C113v31Ev
  virtual void  v32(); // _ZN8S7218C113v32Ev
  virtual void  v33(); // _ZN8S7218C113v33Ev
  virtual void  v34(); // _ZN8S7218C113v34Ev
  virtual void  v35(); // _ZN8S7218C113v35Ev
  virtual void  v36(); // _ZN8S7218C113v36Ev
  S7218C11(); // tgen
};
//SIG(-1 S7218C11) C1{ VBC2{ BC3{ v9 v10 v11 v12 v13 v14 Fi} v15} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fs}


 S7218C11 ::~S7218C11(){ note_dtor("S7218C11", this);}
void  S7218C11 ::v29(){vfunc_called(this, "_ZN8S7218C113v29Ev");}
void  S7218C11 ::v30(){vfunc_called(this, "_ZN8S7218C113v30Ev");}
void  S7218C11 ::v31(){vfunc_called(this, "_ZN8S7218C113v31Ev");}
void  S7218C11 ::v32(){vfunc_called(this, "_ZN8S7218C113v32Ev");}
void  S7218C11 ::v33(){vfunc_called(this, "_ZN8S7218C113v33Ev");}
void  S7218C11 ::v34(){vfunc_called(this, "_ZN8S7218C113v34Ev");}
void  S7218C11 ::v35(){vfunc_called(this, "_ZN8S7218C113v35Ev");}
void  S7218C11 ::v36(){vfunc_called(this, "_ZN8S7218C113v36Ev");}
S7218C11 ::S7218C11(){ note_ctor("S7218C11", this);} // tgen

static void Test_S7218C11()
{
  extern Class_Descriptor cd_S7218C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S7218C11, buf);
    S7218C11 *dp, &lv = *(dp=new (buf) S7218C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S7218C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7218C11)");
    check_base_class_offset(lv, (S7218C8*)(S7218C7*), ABISELECT(16,12), "S7218C11");
    check_base_class_offset(lv, (S7218C7*), ABISELECT(16,12), "S7218C11");
    check_field_offset(lv, s7218c11f0, ABISELECT(8,4), "S7218C11.s7218c11f0");
    check_field_offset(lv, s7218c11f1, ABISELECT(12,8), "S7218C11.s7218c11f1");
    test_class_info(&lv, &cd_S7218C11);
    dp->~S7218C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7218C11(Test_S7218C11, "S7218C11", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S7218C11C1Ev();
extern void _ZN8S7218C11D2Ev();
Name_Map name_map_S7218C11[] = {
  NSPAIR(_ZN8S7218C11C1Ev),
  NSPAIR(_ZN8S7218C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7218C8;
extern VTBL_ENTRY _ZTI7S7218C8[];
extern  VTBL_ENTRY _ZTV7S7218C8[];
extern Class_Descriptor cd_S7218C7;
extern VTBL_ENTRY _ZTI7S7218C7[];
extern  VTBL_ENTRY _ZTV7S7218C7[];
static Base_Class bases_S7218C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7218C8,    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
  0, 0},
  {&cd_S7218C7,    ABISELECT(16,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S7218C11[];
extern void _ZN8S7218C11D1Ev();
extern void _ZN8S7218C11D0Ev();
extern void _ZN8S7218C113v29Ev();
extern void _ZN8S7218C113v30Ev();
extern void _ZN8S7218C113v31Ev();
extern void _ZN8S7218C113v32Ev();
extern void _ZN8S7218C113v33Ev();
extern void _ZN8S7218C113v34Ev();
extern void _ZN8S7218C113v35Ev();
extern void _ZN8S7218C113v36Ev();
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
extern void _ZN7S7218C73v28Ev();
static  VTBL_ENTRY vtc_S7218C11[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7218C11[0]),
  (VTBL_ENTRY)&_ZN8S7218C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7218C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v29Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v30Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v31Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v32Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v33Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v35Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v36Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7218C11[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7218C73v28Ev,
};
extern VTBL_ENTRY _ZTV8S7218C11[];
static  VTT_ENTRY vtt_S7218C11[] = {
  {&(_ZTV8S7218C11[3]),  3,29},
  {&(_ZTV8S7218C11[22]),  22,29},
};
extern VTBL_ENTRY _ZTI8S7218C11[];
extern  VTBL_ENTRY _ZTV8S7218C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7218C11[];
Class_Descriptor cd_S7218C11 = {  "S7218C11", // class name
  bases_S7218C11, 2,
  &(vtc_S7218C11[0]), // expected_vtbl_contents
  &(vtt_S7218C11[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S7218C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7218C11),29, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7218C11),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  S7218C10  : S7218C11 , S7218C8 {
  virtual void  v37(); // _ZN8S7218C103v37Ev
  virtual void  v38(); // _ZN8S7218C103v38Ev
  virtual void  v39(); // _ZN8S7218C103v39Ev
  virtual void  v40(); // _ZN8S7218C103v40Ev
  ~S7218C10(); // tgen
  S7218C10(); // tgen
};
//SIG(-1 S7218C10) C1{ BC2{ VBC3{ BC4{ v5 v6 v7 v8 v9 v10 Fi} v11} vd v12 v13 v14 v15 v16 v17 v18 v19 Fi Fs} BC4 v1 v2 v3 v4}


void  S7218C10 ::v37(){vfunc_called(this, "_ZN8S7218C103v37Ev");}
void  S7218C10 ::v38(){vfunc_called(this, "_ZN8S7218C103v38Ev");}
void  S7218C10 ::v39(){vfunc_called(this, "_ZN8S7218C103v39Ev");}
void  S7218C10 ::v40(){vfunc_called(this, "_ZN8S7218C103v40Ev");}
S7218C10 ::~S7218C10(){ note_dtor("S7218C10", this);} // tgen
S7218C10 ::S7218C10(){ note_ctor("S7218C10", this);} // tgen

static void Test_S7218C10()
{
  extern Class_Descriptor cd_S7218C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S7218C10, buf);
    S7218C10 *dp, &lv = *(dp=new (buf) S7218C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S7218C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7218C10)");
    check_base_class_offset(lv, (S7218C8*)(S7218C7*), ABISELECT(32,20), "S7218C10");
    check_base_class_offset(lv, (S7218C7*)(S7218C11*), ABISELECT(32,20), "S7218C10");
    check_base_class_offset(lv, (S7218C11*), 0, "S7218C10");
    /*is_ambiguous_... S7218C10::S7218C8 */ AMB_check_base_class_offset(lv, (S7218C8*), ABISELECT(16,12), "S7218C10");
    test_class_info(&lv, &cd_S7218C10);
    dp->~S7218C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7218C10(Test_S7218C10, "S7218C10", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S7218C10C1Ev();
extern void _ZN8S7218C10D1Ev();
Name_Map name_map_S7218C10[] = {
  NSPAIR(_ZN8S7218C10C1Ev),
  NSPAIR(_ZN8S7218C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7218C8;
extern VTBL_ENTRY _ZTI7S7218C8[];
extern  VTBL_ENTRY _ZTV7S7218C8[];
extern Class_Descriptor cd_S7218C7;
extern VTBL_ENTRY _ZTI7S7218C7[];
extern  VTBL_ENTRY _ZTV7S7218C7[];
extern Class_Descriptor cd_S7218C11;
extern VTBL_ENTRY _ZTI8S7218C11[];
extern  VTBL_ENTRY _ZTV8S7218C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7218C11[];
extern Class_Descriptor cd_S7218C8;
extern VTBL_ENTRY _ZTI7S7218C8[];
extern  VTBL_ENTRY _ZTV7S7218C8[];
static Base_Class bases_S7218C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7218C8,    ABISELECT(32,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
  0, 0},
  {&cd_S7218C7,    ABISELECT(32,20), //bcp->offset
    25, //bcp->virtual_function_table_offset
    9, //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
    2, //immediately_derived
  0, 1},
  {&cd_S7218C11,    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_S7218C8,    ABISELECT(16,12), //bcp->offset
    17, //bcp->virtual_function_table_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 _ZTI8S7218C10[];
extern void _ZN8S7218C10D1Ev();
extern void _ZN8S7218C10D0Ev();
extern void _ZN8S7218C113v29Ev();
extern void _ZN8S7218C113v30Ev();
extern void _ZN8S7218C113v31Ev();
extern void _ZN8S7218C113v32Ev();
extern void _ZN8S7218C113v33Ev();
extern void _ZN8S7218C113v34Ev();
extern void _ZN8S7218C113v35Ev();
extern void _ZN8S7218C113v36Ev();
extern void _ZN8S7218C103v37Ev();
extern void _ZN8S7218C103v38Ev();
extern void _ZN8S7218C103v39Ev();
extern void _ZN8S7218C103v40Ev();
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
extern void _ZN7S7218C73v28Ev();
static  VTBL_ENTRY vtc_S7218C10[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S7218C10[0]),
  (VTBL_ENTRY)&_ZN8S7218C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7218C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v29Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v30Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v31Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v32Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v33Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v35Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v36Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v37Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v38Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v39Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v40Ev,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S7218C10[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S7218C10[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7218C73v28Ev,
};
extern VTBL_ENTRY _ZTV8S7218C10[];
extern void _ZN8S7218C11D1Ev();
extern void _ZN8S7218C11D0Ev();
extern void _ZN8S7218C113v29Ev();
extern void _ZN8S7218C113v30Ev();
extern void _ZN8S7218C113v31Ev();
extern void _ZN8S7218C113v32Ev();
extern void _ZN8S7218C113v33Ev();
extern void _ZN8S7218C113v34Ev();
extern void _ZN8S7218C113v35Ev();
extern void _ZN8S7218C113v36Ev();
static  VTBL_ENTRY _tg__ZTV8S7218C11__8S7218C10[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S7218C11[0]),
  (VTBL_ENTRY)&_ZN8S7218C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7218C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v29Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v30Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v31Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v32Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v33Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v35Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v36Ev,
};
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
extern void _ZN7S7218C73v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7218C7__8S7218C11__8S7218C10[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S7218C11[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7218C73v28Ev,
};
static  VTT_ENTRY vtt_S7218C10[] = {
  {&(_ZTV8S7218C10[3]),  3,41},
  {&(_tg__ZTV8S7218C11__8S7218C10[3]),  3,13},
  {&(_tg__ZTV7S7218C7__8S7218C11__8S7218C10[9]),  9,16},
  {&(_ZTV8S7218C10[34]),  34,41},
};
extern VTBL_ENTRY _ZTI8S7218C10[];
extern  VTBL_ENTRY _ZTV8S7218C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7218C10[];
Class_Descriptor cd_S7218C10 = {  "S7218C10", // class name
  bases_S7218C10, 4,
  &(vtc_S7218C10[0]), // expected_vtbl_contents
  &(vtt_S7218C10[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S7218C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7218C10),41, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7218C10),4, //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  S7218C9  : S7218C10 {
  ::S3052C22_nt s7218c9f0;
  virtual  ~S7218C9(); // _ZN7S7218C9D2Ev
  virtual void  v41(); // _ZN7S7218C93v41Ev
  virtual void  v42(); // _ZN7S7218C93v42Ev
  virtual void  v43(); // _ZN7S7218C93v43Ev
  virtual void  v44(); // _ZN7S7218C93v44Ev
  S7218C9(); // tgen
};
//SIG(-1 S7218C9) C1{ BC2{ BC3{ VBC4{ BC5{ v5 v6 v7 v8 v9 v10 Fi} v11} vd v12 v13 v14 v15 v16 v17 v18 v19 Fi Fs} BC5 v20 v21 v22 v23} vd v1 v2 v3 v4 FC6{}}


 S7218C9 ::~S7218C9(){ note_dtor("S7218C9", this);}
void  S7218C9 ::v41(){vfunc_called(this, "_ZN7S7218C93v41Ev");}
void  S7218C9 ::v42(){vfunc_called(this, "_ZN7S7218C93v42Ev");}
void  S7218C9 ::v43(){vfunc_called(this, "_ZN7S7218C93v43Ev");}
void  S7218C9 ::v44(){vfunc_called(this, "_ZN7S7218C93v44Ev");}
S7218C9 ::S7218C9(){ note_ctor("S7218C9", this);} // tgen

static void Test_S7218C9()
{
  extern Class_Descriptor cd_S7218C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S7218C9, buf);
    S7218C9 *dp, &lv = *(dp=new (buf) S7218C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S7218C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7218C9)");
    check_base_class_offset(lv, (S7218C8*)(S7218C7*), ABISELECT(32,24), "S7218C9");
    check_base_class_offset(lv, (S7218C7*)(S7218C11*)(S7218C10*), ABISELECT(32,24), "S7218C9");
    check_base_class_offset(lv, (S7218C11*)(S7218C10*), 0, "S7218C9");
    /*is_ambiguous_... S7218C10::S7218C8 */ AMB_check_base_class_offset(lv, (S7218C8*)(S7218C10*), ABISELECT(16,12), "S7218C9");
    check_base_class_offset(lv, (S7218C10*), 0, "S7218C9");
    check_field_offset(lv, s7218c9f0, ABISELECT(28,20), "S7218C9.s7218c9f0");
    test_class_info(&lv, &cd_S7218C9);
    dp->~S7218C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7218C9(Test_S7218C9, "S7218C9", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S7218C9C1Ev();
extern void _ZN7S7218C9D2Ev();
Name_Map name_map_S7218C9[] = {
  NSPAIR(_ZN7S7218C9C1Ev),
  NSPAIR(_ZN7S7218C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7218C8;
extern VTBL_ENTRY _ZTI7S7218C8[];
extern  VTBL_ENTRY _ZTV7S7218C8[];
extern Class_Descriptor cd_S7218C7;
extern VTBL_ENTRY _ZTI7S7218C7[];
extern  VTBL_ENTRY _ZTV7S7218C7[];
extern Class_Descriptor cd_S7218C11;
extern VTBL_ENTRY _ZTI8S7218C11[];
extern  VTBL_ENTRY _ZTV8S7218C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7218C11[];
extern Class_Descriptor cd_S7218C8;
extern VTBL_ENTRY _ZTI7S7218C8[];
extern  VTBL_ENTRY _ZTV7S7218C8[];
extern Class_Descriptor cd_S7218C10;
extern VTBL_ENTRY _ZTI8S7218C10[];
extern  VTBL_ENTRY _ZTV8S7218C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7218C10[];
static Base_Class bases_S7218C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7218C8,    ABISELECT(32,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
  0, 0},
  {&cd_S7218C7,    ABISELECT(32,24), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //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
    2, //immediately_derived
  0, 1},
  {&cd_S7218C11,    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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7218C8,    ABISELECT(16,12), //bcp->offset
    21, //bcp->virtual_function_table_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_S7218C10,    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},
  {0}};
extern VTBL_ENTRY _ZTI7S7218C9[];
extern void _ZN7S7218C9D1Ev();
extern void _ZN7S7218C9D0Ev();
extern void _ZN8S7218C113v29Ev();
extern void _ZN8S7218C113v30Ev();
extern void _ZN8S7218C113v31Ev();
extern void _ZN8S7218C113v32Ev();
extern void _ZN8S7218C113v33Ev();
extern void _ZN8S7218C113v34Ev();
extern void _ZN8S7218C113v35Ev();
extern void _ZN8S7218C113v36Ev();
extern void _ZN8S7218C103v37Ev();
extern void _ZN8S7218C103v38Ev();
extern void _ZN8S7218C103v39Ev();
extern void _ZN8S7218C103v40Ev();
extern void _ZN7S7218C93v41Ev();
extern void _ZN7S7218C93v42Ev();
extern void _ZN7S7218C93v43Ev();
extern void _ZN7S7218C93v44Ev();
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
extern void _ZN7S7218C73v28Ev();
static  VTBL_ENTRY vtc_S7218C9[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7218C9[0]),
  (VTBL_ENTRY)&_ZN7S7218C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7218C9D0Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v29Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v30Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v31Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v32Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v33Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v35Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v36Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v37Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v38Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v39Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v40Ev,
  (VTBL_ENTRY)&_ZN7S7218C93v41Ev,
  (VTBL_ENTRY)&_ZN7S7218C93v42Ev,
  (VTBL_ENTRY)&_ZN7S7218C93v43Ev,
  (VTBL_ENTRY)&_ZN7S7218C93v44Ev,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7218C9[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S7218C9[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7218C73v28Ev,
};
extern VTBL_ENTRY _ZTV7S7218C9[];
extern void _ZN8S7218C10D1Ev();
extern void _ZN8S7218C10D0Ev();
extern void _ZN8S7218C113v29Ev();
extern void _ZN8S7218C113v30Ev();
extern void _ZN8S7218C113v31Ev();
extern void _ZN8S7218C113v32Ev();
extern void _ZN8S7218C113v33Ev();
extern void _ZN8S7218C113v34Ev();
extern void _ZN8S7218C113v35Ev();
extern void _ZN8S7218C113v36Ev();
extern void _ZN8S7218C103v37Ev();
extern void _ZN8S7218C103v38Ev();
extern void _ZN8S7218C103v39Ev();
extern void _ZN8S7218C103v40Ev();
static  VTBL_ENTRY _tg__ZTV8S7218C10__7S7218C9[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7218C10[0]),
  (VTBL_ENTRY)&_ZN8S7218C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7218C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v29Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v30Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v31Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v32Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v33Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v35Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v36Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v37Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v38Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v39Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v40Ev,
};
extern void _ZN8S7218C11D1Ev();
extern void _ZN8S7218C11D0Ev();
extern void _ZN8S7218C113v29Ev();
extern void _ZN8S7218C113v30Ev();
extern void _ZN8S7218C113v31Ev();
extern void _ZN8S7218C113v32Ev();
extern void _ZN8S7218C113v33Ev();
extern void _ZN8S7218C113v34Ev();
extern void _ZN8S7218C113v35Ev();
extern void _ZN8S7218C113v36Ev();
static  VTBL_ENTRY _tg__ZTV8S7218C118S7218C10__7S7218C9[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7218C11[0]),
  (VTBL_ENTRY)&_ZN8S7218C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7218C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v29Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v30Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v31Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v32Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v33Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v35Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v36Ev,
};
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
extern void _ZN7S7218C73v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7218C7__8S7218C118S7218C10__7S7218C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S7218C11[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7218C73v28Ev,
};
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
extern void _ZN7S7218C73v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7218C7__8S7218C10__7S7218C9[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S7218C10[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7218C73v28Ev,
};
static  VTT_ENTRY vtt_S7218C9[] = {
  {&(_ZTV7S7218C9[3]),  3,45},
  {&(_tg__ZTV8S7218C10__7S7218C9[3]),  3,17},
  {&(_tg__ZTV8S7218C118S7218C10__7S7218C9[3]),  3,13},
  {&(_tg__ZTV7S7218C7__8S7218C118S7218C10__7S7218C9[9]),  9,16},
  {&(_tg__ZTV7S7218C7__8S7218C10__7S7218C9[9]),  9,16},
  {&(_ZTV7S7218C9[38]),  38,45},
};
extern VTBL_ENTRY _ZTI7S7218C9[];
extern  VTBL_ENTRY _ZTV7S7218C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7218C9[];
Class_Descriptor cd_S7218C9 = {  "S7218C9", // class name
  bases_S7218C9, 5,
  &(vtc_S7218C9[0]), // expected_vtbl_contents
  &(vtt_S7218C9[0]), // expected_vtt_contents
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S7218C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7218C9),45, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7218C9),6, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7218C2  : virtual S7218C3 , virtual S7218C9 {
  void *s7218c2f0;
  int s7218c2f1[2];
  virtual  ~S7218C2(); // _ZN7S7218C2D2Ev
  virtual void  v45(); // _ZN7S7218C23v45Ev
  virtual void  v46(); // _ZN7S7218C23v46Ev
  virtual void  v47(); // _ZN7S7218C23v47Ev
  virtual void  v48(); // _ZN7S7218C23v48Ev
  virtual void  v49(); // _ZN7S7218C23v49Ev
  virtual void  v50(); // _ZN7S7218C23v50Ev
  virtual void  v51(); // _ZN7S7218C23v51Ev
  S7218C2(); // tgen
};
//SIG(-1 S7218C2) C1{ VBC2{ BC3{ BC4{ v8 v9 v10 FC5{ BC6{ BC7{ v15 v16 v17 v18 v19 v20 Fi} v29} v46 v47 v48 v49 v50 v51 v52}} v11 v12 v13 v14 Fp Fc} BC7 vd v21 v22 v23 v24 v25 v26 v27 v28 Fp[2]} VBC8{ BC9{ BC10{ VBC6 vd v30 v31 v32 v33 v34 v35 v36 v37 Fi Fs} BC7 v38 v39 v40 v41} vd v42 v43 v44 v45 FC11{}} vd v1 v2 v3 v4 v5 v6 v7 Fp Fi[2]}


 S7218C2 ::~S7218C2(){ note_dtor("S7218C2", this);}
void  S7218C2 ::v45(){vfunc_called(this, "_ZN7S7218C23v45Ev");}
void  S7218C2 ::v46(){vfunc_called(this, "_ZN7S7218C23v46Ev");}
void  S7218C2 ::v47(){vfunc_called(this, "_ZN7S7218C23v47Ev");}
void  S7218C2 ::v48(){vfunc_called(this, "_ZN7S7218C23v48Ev");}
void  S7218C2 ::v49(){vfunc_called(this, "_ZN7S7218C23v49Ev");}
void  S7218C2 ::v50(){vfunc_called(this, "_ZN7S7218C23v50Ev");}
void  S7218C2 ::v51(){vfunc_called(this, "_ZN7S7218C23v51Ev");}
S7218C2 ::S7218C2(){ note_ctor("S7218C2", this);} // tgen

static void Test_S7218C2()
{
  extern Class_Descriptor cd_S7218C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,22)];
    init_test(&cd_S7218C2, buf);
    S7218C2 *dp, &lv = *(dp=new (buf) S7218C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,84), "sizeof(S7218C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7218C2)");
    check_base_class_offset(lv, (S7218C5*)(S7218C4*)(S7218C3*), ABISELECT(24,16), "S7218C2");
    check_base_class_offset(lv, (S7218C4*)(S7218C3*), ABISELECT(24,16), "S7218C2");
    check_base_class_offset(lv, (S7218C8*)(S7218C3*), ABISELECT(64,36), "S7218C2");
    check_base_class_offset(lv, (S7218C3*), ABISELECT(24,16), "S7218C2");
    check_base_class_offset(lv, (S7218C8*)(S7218C7*), ABISELECT(128,76), "S7218C2");
    check_base_class_offset(lv, (S7218C7*)(S7218C11*)(S7218C10*)(S7218C9*), ABISELECT(128,76), "S7218C2");
    check_base_class_offset(lv, (S7218C11*)(S7218C10*)(S7218C9*), ABISELECT(96,52), "S7218C2");
    /*is_ambiguous_... S7218C10::S7218C8 */ AMB_check_base_class_offset(lv, (S7218C8*)(S7218C10*)(S7218C9*), ABISELECT(112,64), "S7218C2");
    check_base_class_offset(lv, (S7218C10*)(S7218C9*), ABISELECT(96,52), "S7218C2");
    check_base_class_offset(lv, (S7218C9*), ABISELECT(96,52), "S7218C2");
    check_field_offset(lv, s7218c2f0, ABISELECT(8,4), "S7218C2.s7218c2f0");
    check_field_offset(lv, s7218c2f1, ABISELECT(16,8), "S7218C2.s7218c2f1");
    test_class_info(&lv, &cd_S7218C2);
    dp->~S7218C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7218C2(Test_S7218C2, "S7218C2", ABISELECT(144,84));

#else // __cplusplus

extern void _ZN7S7218C2C1Ev();
extern void _ZN7S7218C2D2Ev();
Name_Map name_map_S7218C2[] = {
  NSPAIR(_ZN7S7218C2C1Ev),
  NSPAIR(_ZN7S7218C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7218C5;
extern VTBL_ENTRY _ZTI7S7218C5[];
extern  VTBL_ENTRY _ZTV7S7218C5[];
extern Class_Descriptor cd_S7218C4;
extern VTBL_ENTRY _ZTI7S7218C4[];
extern  VTBL_ENTRY _ZTV7S7218C4[];
extern Class_Descriptor cd_S7218C8;
extern VTBL_ENTRY _ZTI7S7218C8[];
extern  VTBL_ENTRY _ZTV7S7218C8[];
extern Class_Descriptor cd_S7218C3;
extern VTBL_ENTRY _ZTI7S7218C3[];
extern  VTBL_ENTRY _ZTV7S7218C3[];
extern Class_Descriptor cd_S7218C8;
extern VTBL_ENTRY _ZTI7S7218C8[];
extern  VTBL_ENTRY _ZTV7S7218C8[];
extern Class_Descriptor cd_S7218C7;
extern VTBL_ENTRY _ZTI7S7218C7[];
extern  VTBL_ENTRY _ZTV7S7218C7[];
extern Class_Descriptor cd_S7218C11;
extern VTBL_ENTRY _ZTI8S7218C11[];
extern  VTBL_ENTRY _ZTV8S7218C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7218C11[];
extern Class_Descriptor cd_S7218C8;
extern VTBL_ENTRY _ZTI7S7218C8[];
extern  VTBL_ENTRY _ZTV7S7218C8[];
extern Class_Descriptor cd_S7218C10;
extern VTBL_ENTRY _ZTI8S7218C10[];
extern  VTBL_ENTRY _ZTV8S7218C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7218C10[];
extern Class_Descriptor cd_S7218C9;
extern VTBL_ENTRY _ZTI7S7218C9[];
extern  VTBL_ENTRY _ZTV7S7218C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7218C9[];
static Base_Class bases_S7218C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7218C5,    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
    1, //immediately_derived
  0, 0},
  {&cd_S7218C4,    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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7218C8,    ABISELECT(64,36), //bcp->offset
    55, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7218C3,    ABISELECT(24,16), //bcp->offset
    14, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7218C8,    ABISELECT(128,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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7218C7,    ABISELECT(128,76), //bcp->offset
    115, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7218C11,    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
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7218C8,    ABISELECT(112,64), //bcp->offset
    107, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7218C10,    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
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7218C9,    ABISELECT(96,52), //bcp->offset
    63, //bcp->virtual_function_table_offset
    26, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7218C2[];
extern void _ZN7S7218C2D1Ev();
extern void _ZN7S7218C2D0Ev();
extern void _ZN7S7218C23v45Ev();
extern void _ZN7S7218C23v46Ev();
extern void _ZN7S7218C23v47Ev();
extern void _ZN7S7218C23v48Ev();
extern void _ZN7S7218C23v49Ev();
extern void _ZN7S7218C23v50Ev();
extern void _ZN7S7218C23v51Ev();
extern void _ZN7S7218C52v7Ev();
extern void _ZN7S7218C52v8Ev();
extern void _ZN7S7218C52v9Ev();
extern void _ZN7S7218C43v10Ev();
extern void _ZN7S7218C43v11Ev();
extern void _ZN7S7218C43v12Ev();
extern void _ZN7S7218C43v13Ev();
extern void ABISELECT(_ZTv0_n80_N7S7218C2D1Ev,_ZTv0_n40_N7S7218C2D1Ev)();
extern void ABISELECT(_ZThn24_N7S7218C2D1Ev,_ZThn16_N7S7218C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7218C2D0Ev,_ZTv0_n40_N7S7218C2D0Ev)();
extern void ABISELECT(_ZThn24_N7S7218C2D0Ev,_ZThn16_N7S7218C2D0Ev)() __attribute__((weak));
extern void _ZN7S7218C33v20Ev();
extern void _ZN7S7218C33v21Ev();
extern void _ZN7S7218C33v22Ev();
extern void _ZN7S7218C33v23Ev();
extern void _ZN7S7218C33v24Ev();
extern void _ZN7S7218C33v25Ev();
extern void _ZN7S7218C33v26Ev();
extern void _ZN7S7218C33v27Ev();
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
extern void ABISELECT(_ZTv0_n32_N7S7218C2D1Ev,_ZTv0_n16_N7S7218C2D1Ev)();
extern void ABISELECT(_ZThn96_N7S7218C2D1Ev,_ZThn52_N7S7218C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7218C2D0Ev,_ZTv0_n16_N7S7218C2D0Ev)();
extern void ABISELECT(_ZThn96_N7S7218C2D0Ev,_ZThn52_N7S7218C2D0Ev)() __attribute__((weak));
extern void _ZN8S7218C113v29Ev();
extern void _ZN8S7218C113v30Ev();
extern void _ZN8S7218C113v31Ev();
extern void _ZN8S7218C113v32Ev();
extern void _ZN8S7218C113v33Ev();
extern void _ZN8S7218C113v34Ev();
extern void _ZN8S7218C113v35Ev();
extern void _ZN8S7218C113v36Ev();
extern void _ZN8S7218C103v37Ev();
extern void _ZN8S7218C103v38Ev();
extern void _ZN8S7218C103v39Ev();
extern void _ZN8S7218C103v40Ev();
extern void _ZN7S7218C93v41Ev();
extern void _ZN7S7218C93v42Ev();
extern void _ZN7S7218C93v43Ev();
extern void _ZN7S7218C93v44Ev();
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
extern void _ZN7S7218C73v28Ev();
static  VTBL_ENTRY vtc_S7218C2[] = {
  ABISELECT(128,76),
  ABISELECT(96,52),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7218C2[0]),
  (VTBL_ENTRY)&_ZN7S7218C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7218C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7218C23v45Ev,
  (VTBL_ENTRY)&_ZN7S7218C23v46Ev,
  (VTBL_ENTRY)&_ZN7S7218C23v47Ev,
  (VTBL_ENTRY)&_ZN7S7218C23v48Ev,
  (VTBL_ENTRY)&_ZN7S7218C23v49Ev,
  (VTBL_ENTRY)&_ZN7S7218C23v50Ev,
  (VTBL_ENTRY)&_ZN7S7218C23v51Ev,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7218C2[0]),
  (VTBL_ENTRY)&_ZN7S7218C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7218C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7218C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7218C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7218C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7218C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7218C43v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7218C2D1Ev,_ZTv0_n40_N7S7218C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7218C2D0Ev,_ZTv0_n40_N7S7218C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7218C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v23Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v24Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v25Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v27Ev,
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7218C2[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  ABISELECT(16,12),
  ABISELECT(16,12),
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-52),
  ABISELECT(32,24),
  ABISELECT(-96,-52),
  (VTBL_ENTRY)&(_ZTI7S7218C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7218C2D1Ev,_ZTv0_n16_N7S7218C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7218C2D0Ev,_ZTv0_n16_N7S7218C2D0Ev),
  (VTBL_ENTRY)&_ZN8S7218C113v29Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v30Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v31Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v32Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v33Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v35Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v36Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v37Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v38Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v39Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v40Ev,
  (VTBL_ENTRY)&_ZN7S7218C93v41Ev,
  (VTBL_ENTRY)&_ZN7S7218C93v42Ev,
  (VTBL_ENTRY)&_ZN7S7218C93v43Ev,
  (VTBL_ENTRY)&_ZN7S7218C93v44Ev,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI7S7218C2[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-128,-76),
  (VTBL_ENTRY)&(_ZTI7S7218C2[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7218C73v28Ev,
};
extern VTBL_ENTRY _ZTV7S7218C2[];
extern void _ZN7S7218C9D1Ev();
extern void _ZN7S7218C9D0Ev();
extern void _ZN8S7218C113v29Ev();
extern void _ZN8S7218C113v30Ev();
extern void _ZN8S7218C113v31Ev();
extern void _ZN8S7218C113v32Ev();
extern void _ZN8S7218C113v33Ev();
extern void _ZN8S7218C113v34Ev();
extern void _ZN8S7218C113v35Ev();
extern void _ZN8S7218C113v36Ev();
extern void _ZN8S7218C103v37Ev();
extern void _ZN8S7218C103v38Ev();
extern void _ZN8S7218C103v39Ev();
extern void _ZN8S7218C103v40Ev();
extern void _ZN7S7218C93v41Ev();
extern void _ZN7S7218C93v42Ev();
extern void _ZN7S7218C93v43Ev();
extern void _ZN7S7218C93v44Ev();
static  VTBL_ENTRY _tg__ZTV7S7218C9__7S7218C2[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7218C9[0]),
  (VTBL_ENTRY)&_ZN7S7218C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7218C9D0Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v29Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v30Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v31Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v32Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v33Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v35Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v36Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v37Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v38Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v39Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v40Ev,
  (VTBL_ENTRY)&_ZN7S7218C93v41Ev,
  (VTBL_ENTRY)&_ZN7S7218C93v42Ev,
  (VTBL_ENTRY)&_ZN7S7218C93v43Ev,
  (VTBL_ENTRY)&_ZN7S7218C93v44Ev,
};
extern void _ZN8S7218C10D1Ev();
extern void _ZN8S7218C10D0Ev();
extern void _ZN8S7218C113v29Ev();
extern void _ZN8S7218C113v30Ev();
extern void _ZN8S7218C113v31Ev();
extern void _ZN8S7218C113v32Ev();
extern void _ZN8S7218C113v33Ev();
extern void _ZN8S7218C113v34Ev();
extern void _ZN8S7218C113v35Ev();
extern void _ZN8S7218C113v36Ev();
extern void _ZN8S7218C103v37Ev();
extern void _ZN8S7218C103v38Ev();
extern void _ZN8S7218C103v39Ev();
extern void _ZN8S7218C103v40Ev();
static  VTBL_ENTRY _tg__ZTV8S7218C107S7218C9__7S7218C2[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7218C10[0]),
  (VTBL_ENTRY)&_ZN8S7218C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7218C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v29Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v30Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v31Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v32Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v33Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v35Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v36Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v37Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v38Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v39Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v40Ev,
};
extern void _ZN8S7218C11D1Ev();
extern void _ZN8S7218C11D0Ev();
extern void _ZN8S7218C113v29Ev();
extern void _ZN8S7218C113v30Ev();
extern void _ZN8S7218C113v31Ev();
extern void _ZN8S7218C113v32Ev();
extern void _ZN8S7218C113v33Ev();
extern void _ZN8S7218C113v34Ev();
extern void _ZN8S7218C113v35Ev();
extern void _ZN8S7218C113v36Ev();
static  VTBL_ENTRY _tg__ZTV8S7218C118S7218C107S7218C9__7S7218C2[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7218C11[0]),
  (VTBL_ENTRY)&_ZN8S7218C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7218C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v29Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v30Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v31Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v32Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v33Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v35Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v36Ev,
};
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
extern void _ZN7S7218C73v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7218C7__8S7218C118S7218C107S7218C9__7S7218C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S7218C11[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7218C73v28Ev,
};
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
extern void _ZN7S7218C73v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7218C7__8S7218C107S7218C9__7S7218C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S7218C10[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7218C73v28Ev,
};
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
extern void _ZN7S7218C73v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7218C7__7S7218C9__7S7218C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S7218C9[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7218C73v28Ev,
};
static  VTT_ENTRY vtt_S7218C2[] = {
  {&(_ZTV7S7218C2[5]),  5,131},
  {&(_ZTV7S7218C2[38]),  38,131},
  {&(_ZTV7S7218C2[57]),  57,131},
  {&(_ZTV7S7218C2[89]),  89,131},
  {&(_ZTV7S7218C2[124]),  124,131},
  {&(_ZTV7S7218C2[109]),  109,131},
  {&(_tg__ZTV7S7218C9__7S7218C2[3]),  3,21},
  {&(_tg__ZTV8S7218C107S7218C9__7S7218C2[3]),  3,17},
  {&(_tg__ZTV8S7218C118S7218C107S7218C9__7S7218C2[3]),  3,13},
  {&(_tg__ZTV7S7218C7__8S7218C118S7218C107S7218C9__7S7218C2[9]),  9,16},
  {&(_tg__ZTV7S7218C7__8S7218C107S7218C9__7S7218C2[9]),  9,16},
  {&(_tg__ZTV7S7218C7__7S7218C9__7S7218C2[9]),  9,16},
};
extern VTBL_ENTRY _ZTI7S7218C2[];
extern  VTBL_ENTRY _ZTV7S7218C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7218C2[];
static VTBL_ENTRY alt_thunk_names119[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7218C2D0Ev,_ZTv0_n16_N7S7218C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7218C2D0Ev,_ZThn52_N7S7218C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7218C2D1Ev,_ZTv0_n16_N7S7218C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn96_N7S7218C2D1Ev,_ZThn52_N7S7218C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7218C2D0Ev,_ZTv0_n40_N7S7218C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7218C2D0Ev,_ZThn16_N7S7218C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7218C2D1Ev,_ZTv0_n40_N7S7218C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7218C2D1Ev,_ZThn16_N7S7218C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7218C2 = {  "S7218C2", // class name
  bases_S7218C2, 10,
  &(vtc_S7218C2[0]), // expected_vtbl_contents
  &(vtt_S7218C2[0]), // expected_vtt_contents
  ABISELECT(144,84), // object size
  NSPAIRA(_ZTI7S7218C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7218C2),131, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7218C2),12, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names119,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7218C1  : S7218C2 {
  void *s7218c1f0;
  virtual  ~S7218C1(); // _ZN7S7218C1D2Ev
  virtual void  v1(); // _ZN7S7218C12v1Ev
  virtual void  v2(); // _ZN7S7218C12v2Ev
  virtual void  v3(); // _ZN7S7218C12v3Ev
  virtual void  v4(); // _ZN7S7218C12v4Ev
  virtual void  v5(); // _ZN7S7218C12v5Ev
  virtual void  v6(); // _ZN7S7218C12v6Ev
  S7218C1(); // tgen
};
//SIG(1 S7218C1) C1{ BC2{ VBC3{ BC4{ BC5{ v7 v8 v9 FC6{ BC7{ BC8{ v14 v15 v16 v17 v18 v19 Fi} v28} v52 v53 v54 v55 v56 v57 v58}} v10 v11 v12 v13 Fp Fc} BC8 vd v20 v21 v22 v23 v24 v25 v26 v27 Fp[2]} VBC9{ BC10{ BC11{ VBC7 vd v29 v30 v31 v32 v33 v34 v35 v36 Fi Fs} BC8 v37 v38 v39 v40} vd v41 v42 v43 v44 FC12{}} vd v45 v46 v47 v48 v49 v50 v51 Fp Fi[2]} vd v1 v2 v3 v4 v5 v6 Fp}


 S7218C1 ::~S7218C1(){ note_dtor("S7218C1", this);}
void  S7218C1 ::v1(){vfunc_called(this, "_ZN7S7218C12v1Ev");}
void  S7218C1 ::v2(){vfunc_called(this, "_ZN7S7218C12v2Ev");}
void  S7218C1 ::v3(){vfunc_called(this, "_ZN7S7218C12v3Ev");}
void  S7218C1 ::v4(){vfunc_called(this, "_ZN7S7218C12v4Ev");}
void  S7218C1 ::v5(){vfunc_called(this, "_ZN7S7218C12v5Ev");}
void  S7218C1 ::v6(){vfunc_called(this, "_ZN7S7218C12v6Ev");}
S7218C1 ::S7218C1(){ note_ctor("S7218C1", this);} // tgen

static void Test_S7218C1()
{
  extern Class_Descriptor cd_S7218C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,23)];
    init_test(&cd_S7218C1, buf);
    S7218C1 *dp, &lv = *(dp=new (buf) S7218C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,88), "sizeof(S7218C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7218C1)");
    check_base_class_offset(lv, (S7218C5*)(S7218C4*)(S7218C3*), ABISELECT(32,20), "S7218C1");
    check_base_class_offset(lv, (S7218C4*)(S7218C3*), ABISELECT(32,20), "S7218C1");
    check_base_class_offset(lv, (S7218C8*)(S7218C3*), ABISELECT(72,40), "S7218C1");
    check_base_class_offset(lv, (S7218C3*)(S7218C2*), ABISELECT(32,20), "S7218C1");
    check_base_class_offset(lv, (S7218C8*)(S7218C7*), ABISELECT(136,80), "S7218C1");
    check_base_class_offset(lv, (S7218C7*)(S7218C11*)(S7218C10*)(S7218C9*), ABISELECT(136,80), "S7218C1");
    check_base_class_offset(lv, (S7218C11*)(S7218C10*)(S7218C9*), ABISELECT(104,56), "S7218C1");
    /*is_ambiguous_... S7218C10::S7218C8 */ AMB_check_base_class_offset(lv, (S7218C8*)(S7218C10*)(S7218C9*), ABISELECT(120,68), "S7218C1");
    check_base_class_offset(lv, (S7218C10*)(S7218C9*), ABISELECT(104,56), "S7218C1");
    check_base_class_offset(lv, (S7218C9*)(S7218C2*), ABISELECT(104,56), "S7218C1");
    check_base_class_offset(lv, (S7218C2*), 0, "S7218C1");
    check_field_offset(lv, s7218c1f0, ABISELECT(24,16), "S7218C1.s7218c1f0");
    test_class_info(&lv, &cd_S7218C1);
    dp->~S7218C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7218C1(Test_S7218C1, "S7218C1", ABISELECT(152,88));

#else // __cplusplus

extern void _ZN7S7218C1C1Ev();
extern void _ZN7S7218C1D2Ev();
Name_Map name_map_S7218C1[] = {
  NSPAIR(_ZN7S7218C1C1Ev),
  NSPAIR(_ZN7S7218C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7218C5;
extern VTBL_ENTRY _ZTI7S7218C5[];
extern  VTBL_ENTRY _ZTV7S7218C5[];
extern Class_Descriptor cd_S7218C4;
extern VTBL_ENTRY _ZTI7S7218C4[];
extern  VTBL_ENTRY _ZTV7S7218C4[];
extern Class_Descriptor cd_S7218C8;
extern VTBL_ENTRY _ZTI7S7218C8[];
extern  VTBL_ENTRY _ZTV7S7218C8[];
extern Class_Descriptor cd_S7218C3;
extern VTBL_ENTRY _ZTI7S7218C3[];
extern  VTBL_ENTRY _ZTV7S7218C3[];
extern Class_Descriptor cd_S7218C8;
extern VTBL_ENTRY _ZTI7S7218C8[];
extern  VTBL_ENTRY _ZTV7S7218C8[];
extern Class_Descriptor cd_S7218C7;
extern VTBL_ENTRY _ZTI7S7218C7[];
extern  VTBL_ENTRY _ZTV7S7218C7[];
extern Class_Descriptor cd_S7218C11;
extern VTBL_ENTRY _ZTI8S7218C11[];
extern  VTBL_ENTRY _ZTV8S7218C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7218C11[];
extern Class_Descriptor cd_S7218C8;
extern VTBL_ENTRY _ZTI7S7218C8[];
extern  VTBL_ENTRY _ZTV7S7218C8[];
extern Class_Descriptor cd_S7218C10;
extern VTBL_ENTRY _ZTI8S7218C10[];
extern  VTBL_ENTRY _ZTV8S7218C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7218C10[];
extern Class_Descriptor cd_S7218C9;
extern VTBL_ENTRY _ZTI7S7218C9[];
extern  VTBL_ENTRY _ZTV7S7218C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7218C9[];
extern Class_Descriptor cd_S7218C2;
extern VTBL_ENTRY _ZTI7S7218C2[];
extern  VTBL_ENTRY _ZTV7S7218C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7218C2[];
static Base_Class bases_S7218C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7218C5,    ABISELECT(32,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
  0, 0},
  {&cd_S7218C4,    ABISELECT(32,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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7218C8,    ABISELECT(72,40), //bcp->offset
    61, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S7218C3,    ABISELECT(32,20), //bcp->offset
    20, //bcp->virtual_function_table_offset
    24, //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
    10, //immediately_derived
  0, 1},
  {&cd_S7218C8,    ABISELECT(136,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
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7218C7,    ABISELECT(136,80), //bcp->offset
    121, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7218C11,    ABISELECT(104,56), //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
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7218C8,    ABISELECT(120,68), //bcp->offset
    113, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7218C10,    ABISELECT(104,56), //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
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7218C9,    ABISELECT(104,56), //bcp->offset
    69, //bcp->virtual_function_table_offset
    26, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7218C2,    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
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7218C1[];
extern void _ZN7S7218C1D1Ev();
extern void _ZN7S7218C1D0Ev();
extern void _ZN7S7218C23v45Ev();
extern void _ZN7S7218C23v46Ev();
extern void _ZN7S7218C23v47Ev();
extern void _ZN7S7218C23v48Ev();
extern void _ZN7S7218C23v49Ev();
extern void _ZN7S7218C23v50Ev();
extern void _ZN7S7218C23v51Ev();
extern void _ZN7S7218C12v1Ev();
extern void _ZN7S7218C12v2Ev();
extern void _ZN7S7218C12v3Ev();
extern void _ZN7S7218C12v4Ev();
extern void _ZN7S7218C12v5Ev();
extern void _ZN7S7218C12v6Ev();
extern void _ZN7S7218C52v7Ev();
extern void _ZN7S7218C52v8Ev();
extern void _ZN7S7218C52v9Ev();
extern void _ZN7S7218C43v10Ev();
extern void _ZN7S7218C43v11Ev();
extern void _ZN7S7218C43v12Ev();
extern void _ZN7S7218C43v13Ev();
extern void ABISELECT(_ZTv0_n80_N7S7218C1D1Ev,_ZTv0_n40_N7S7218C1D1Ev)();
extern void ABISELECT(_ZThn32_N7S7218C1D1Ev,_ZThn20_N7S7218C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7218C1D0Ev,_ZTv0_n40_N7S7218C1D0Ev)();
extern void ABISELECT(_ZThn32_N7S7218C1D0Ev,_ZThn20_N7S7218C1D0Ev)() __attribute__((weak));
extern void _ZN7S7218C33v20Ev();
extern void _ZN7S7218C33v21Ev();
extern void _ZN7S7218C33v22Ev();
extern void _ZN7S7218C33v23Ev();
extern void _ZN7S7218C33v24Ev();
extern void _ZN7S7218C33v25Ev();
extern void _ZN7S7218C33v26Ev();
extern void _ZN7S7218C33v27Ev();
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
extern void ABISELECT(_ZTv0_n32_N7S7218C1D1Ev,_ZTv0_n16_N7S7218C1D1Ev)();
extern void ABISELECT(_ZThn104_N7S7218C1D1Ev,_ZThn56_N7S7218C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7218C1D0Ev,_ZTv0_n16_N7S7218C1D0Ev)();
extern void ABISELECT(_ZThn104_N7S7218C1D0Ev,_ZThn56_N7S7218C1D0Ev)() __attribute__((weak));
extern void _ZN8S7218C113v29Ev();
extern void _ZN8S7218C113v30Ev();
extern void _ZN8S7218C113v31Ev();
extern void _ZN8S7218C113v32Ev();
extern void _ZN8S7218C113v33Ev();
extern void _ZN8S7218C113v34Ev();
extern void _ZN8S7218C113v35Ev();
extern void _ZN8S7218C113v36Ev();
extern void _ZN8S7218C103v37Ev();
extern void _ZN8S7218C103v38Ev();
extern void _ZN8S7218C103v39Ev();
extern void _ZN8S7218C103v40Ev();
extern void _ZN7S7218C93v41Ev();
extern void _ZN7S7218C93v42Ev();
extern void _ZN7S7218C93v43Ev();
extern void _ZN7S7218C93v44Ev();
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
extern void _ZN7S7218C73v28Ev();
static  VTBL_ENTRY vtc_S7218C1[] = {
  ABISELECT(136,80),
  ABISELECT(104,56),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7218C1[0]),
  (VTBL_ENTRY)&_ZN7S7218C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7218C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7218C23v45Ev,
  (VTBL_ENTRY)&_ZN7S7218C23v46Ev,
  (VTBL_ENTRY)&_ZN7S7218C23v47Ev,
  (VTBL_ENTRY)&_ZN7S7218C23v48Ev,
  (VTBL_ENTRY)&_ZN7S7218C23v49Ev,
  (VTBL_ENTRY)&_ZN7S7218C23v50Ev,
  (VTBL_ENTRY)&_ZN7S7218C23v51Ev,
  (VTBL_ENTRY)&_ZN7S7218C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7218C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7218C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7218C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7218C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7218C12v6Ev,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7218C1[0]),
  (VTBL_ENTRY)&_ZN7S7218C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7218C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7218C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7218C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7218C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7218C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7218C43v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7218C1D1Ev,_ZTv0_n40_N7S7218C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7218C1D0Ev,_ZTv0_n40_N7S7218C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7218C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v23Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v24Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v25Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v27Ev,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S7218C1[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  ABISELECT(16,12),
  ABISELECT(16,12),
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-56),
  ABISELECT(32,24),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S7218C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7218C1D1Ev,_ZTv0_n16_N7S7218C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7218C1D0Ev,_ZTv0_n16_N7S7218C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7218C113v29Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v30Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v31Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v32Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v33Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v35Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v36Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v37Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v38Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v39Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v40Ev,
  (VTBL_ENTRY)&_ZN7S7218C93v41Ev,
  (VTBL_ENTRY)&_ZN7S7218C93v42Ev,
  (VTBL_ENTRY)&_ZN7S7218C93v43Ev,
  (VTBL_ENTRY)&_ZN7S7218C93v44Ev,
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI7S7218C1[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S7218C1[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7218C73v28Ev,
};
extern VTBL_ENTRY _ZTV7S7218C1[];
extern void _ZN7S7218C2D1Ev();
extern void _ZN7S7218C2D0Ev();
extern void _ZN7S7218C23v45Ev();
extern void _ZN7S7218C23v46Ev();
extern void _ZN7S7218C23v47Ev();
extern void _ZN7S7218C23v48Ev();
extern void _ZN7S7218C23v49Ev();
extern void _ZN7S7218C23v50Ev();
extern void _ZN7S7218C23v51Ev();
static  VTBL_ENTRY _tg__ZTV7S7218C2__7S7218C1[] = {
  ABISELECT(136,80),
  ABISELECT(104,56),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7218C2[0]),
  (VTBL_ENTRY)&_ZN7S7218C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7218C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7218C23v45Ev,
  (VTBL_ENTRY)&_ZN7S7218C23v46Ev,
  (VTBL_ENTRY)&_ZN7S7218C23v47Ev,
  (VTBL_ENTRY)&_ZN7S7218C23v48Ev,
  (VTBL_ENTRY)&_ZN7S7218C23v49Ev,
  (VTBL_ENTRY)&_ZN7S7218C23v50Ev,
  (VTBL_ENTRY)&_ZN7S7218C23v51Ev,
};
extern void _ZN7S7218C52v7Ev();
extern void _ZN7S7218C52v8Ev();
extern void _ZN7S7218C52v9Ev();
extern void _ZN7S7218C43v10Ev();
extern void _ZN7S7218C43v11Ev();
extern void _ZN7S7218C43v12Ev();
extern void _ZN7S7218C43v13Ev();
extern void ABISELECT(_ZTv0_n80_N7S7218C2D1Ev,_ZTv0_n40_N7S7218C2D1Ev)();
extern void ABISELECT(_ZThn32_N7S7218C2D1Ev,_ZThn20_N7S7218C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7218C2D0Ev,_ZTv0_n40_N7S7218C2D0Ev)();
extern void ABISELECT(_ZThn32_N7S7218C2D0Ev,_ZThn20_N7S7218C2D0Ev)() __attribute__((weak));
extern void _ZN7S7218C33v20Ev();
extern void _ZN7S7218C33v21Ev();
extern void _ZN7S7218C33v22Ev();
extern void _ZN7S7218C33v23Ev();
extern void _ZN7S7218C33v24Ev();
extern void _ZN7S7218C33v25Ev();
extern void _ZN7S7218C33v26Ev();
extern void _ZN7S7218C33v27Ev();
static  VTBL_ENTRY _tg__ZTV7S7218C3__7S7218C2__7S7218C1[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S7218C2[0]),
  (VTBL_ENTRY)&_ZN7S7218C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7218C52v8Ev,
  (VTBL_ENTRY)&_ZN7S7218C52v9Ev,
  (VTBL_ENTRY)&_ZN7S7218C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7218C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7218C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7218C43v13Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7218C2D1Ev,_ZTv0_n40_N7S7218C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7218C2D0Ev,_ZTv0_n40_N7S7218C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7218C33v20Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v21Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v22Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v23Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v24Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v25Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v26Ev,
  (VTBL_ENTRY)&_ZN7S7218C33v27Ev,
};
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7218C87S7218C3__7S7218C2__7S7218C1[] = {
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S7218C2[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7218C2D1Ev,_ZTv0_n16_N7S7218C2D1Ev)();
extern void ABISELECT(_ZThn104_N7S7218C2D1Ev,_ZThn56_N7S7218C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7218C2D0Ev,_ZTv0_n16_N7S7218C2D0Ev)();
extern void ABISELECT(_ZThn104_N7S7218C2D0Ev,_ZThn56_N7S7218C2D0Ev)() __attribute__((weak));
extern void _ZN8S7218C113v29Ev();
extern void _ZN8S7218C113v30Ev();
extern void _ZN8S7218C113v31Ev();
extern void _ZN8S7218C113v32Ev();
extern void _ZN8S7218C113v33Ev();
extern void _ZN8S7218C113v34Ev();
extern void _ZN8S7218C113v35Ev();
extern void _ZN8S7218C113v36Ev();
extern void _ZN8S7218C103v37Ev();
extern void _ZN8S7218C103v38Ev();
extern void _ZN8S7218C103v39Ev();
extern void _ZN8S7218C103v40Ev();
extern void _ZN7S7218C93v41Ev();
extern void _ZN7S7218C93v42Ev();
extern void _ZN7S7218C93v43Ev();
extern void _ZN7S7218C93v44Ev();
static  VTBL_ENTRY _tg__ZTV7S7218C9__7S7218C2__7S7218C1[] = {
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  ABISELECT(16,12),
  ABISELECT(16,12),
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-56),
  ABISELECT(32,24),
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S7218C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7218C2D1Ev,_ZTv0_n16_N7S7218C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7218C2D0Ev,_ZTv0_n16_N7S7218C2D0Ev),
  (VTBL_ENTRY)&_ZN8S7218C113v29Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v30Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v31Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v32Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v33Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v35Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v36Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v37Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v38Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v39Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v40Ev,
  (VTBL_ENTRY)&_ZN7S7218C93v41Ev,
  (VTBL_ENTRY)&_ZN7S7218C93v42Ev,
  (VTBL_ENTRY)&_ZN7S7218C93v43Ev,
  (VTBL_ENTRY)&_ZN7S7218C93v44Ev,
};
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
extern void _ZN7S7218C73v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7218C7__7S7218C2__7S7218C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-136,-80),
  (VTBL_ENTRY)&(_ZTI7S7218C2[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7218C73v28Ev,
};
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
static  VTBL_ENTRY _tg__ZTV7S7218C88S7218C107S7218C9__A2__7S7218C2__7S7218C1[] = {
  ABISELECT(-120,-68),
  (VTBL_ENTRY)&(_ZTI7S7218C2[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
};
extern void _ZN7S7218C9D1Ev();
extern void _ZN7S7218C9D0Ev();
extern void _ZN8S7218C113v29Ev();
extern void _ZN8S7218C113v30Ev();
extern void _ZN8S7218C113v31Ev();
extern void _ZN8S7218C113v32Ev();
extern void _ZN8S7218C113v33Ev();
extern void _ZN8S7218C113v34Ev();
extern void _ZN8S7218C113v35Ev();
extern void _ZN8S7218C113v36Ev();
extern void _ZN8S7218C103v37Ev();
extern void _ZN8S7218C103v38Ev();
extern void _ZN8S7218C103v39Ev();
extern void _ZN8S7218C103v40Ev();
extern void _ZN7S7218C93v41Ev();
extern void _ZN7S7218C93v42Ev();
extern void _ZN7S7218C93v43Ev();
extern void _ZN7S7218C93v44Ev();
static  VTBL_ENTRY _tg__ZTV7S7218C9__7S7218C1[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7218C9[0]),
  (VTBL_ENTRY)&_ZN7S7218C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7218C9D0Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v29Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v30Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v31Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v32Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v33Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v35Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v36Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v37Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v38Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v39Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v40Ev,
  (VTBL_ENTRY)&_ZN7S7218C93v41Ev,
  (VTBL_ENTRY)&_ZN7S7218C93v42Ev,
  (VTBL_ENTRY)&_ZN7S7218C93v43Ev,
  (VTBL_ENTRY)&_ZN7S7218C93v44Ev,
};
extern void _ZN8S7218C10D1Ev();
extern void _ZN8S7218C10D0Ev();
extern void _ZN8S7218C113v29Ev();
extern void _ZN8S7218C113v30Ev();
extern void _ZN8S7218C113v31Ev();
extern void _ZN8S7218C113v32Ev();
extern void _ZN8S7218C113v33Ev();
extern void _ZN8S7218C113v34Ev();
extern void _ZN8S7218C113v35Ev();
extern void _ZN8S7218C113v36Ev();
extern void _ZN8S7218C103v37Ev();
extern void _ZN8S7218C103v38Ev();
extern void _ZN8S7218C103v39Ev();
extern void _ZN8S7218C103v40Ev();
static  VTBL_ENTRY _tg__ZTV8S7218C107S7218C9__7S7218C1[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7218C10[0]),
  (VTBL_ENTRY)&_ZN8S7218C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7218C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v29Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v30Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v31Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v32Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v33Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v35Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v36Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v37Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v38Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v39Ev,
  (VTBL_ENTRY)&_ZN8S7218C103v40Ev,
};
extern void _ZN8S7218C11D1Ev();
extern void _ZN8S7218C11D0Ev();
extern void _ZN8S7218C113v29Ev();
extern void _ZN8S7218C113v30Ev();
extern void _ZN8S7218C113v31Ev();
extern void _ZN8S7218C113v32Ev();
extern void _ZN8S7218C113v33Ev();
extern void _ZN8S7218C113v34Ev();
extern void _ZN8S7218C113v35Ev();
extern void _ZN8S7218C113v36Ev();
static  VTBL_ENTRY _tg__ZTV8S7218C118S7218C107S7218C9__7S7218C1[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7218C11[0]),
  (VTBL_ENTRY)&_ZN8S7218C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7218C11D0Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v29Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v30Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v31Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v32Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v33Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v35Ev,
  (VTBL_ENTRY)&_ZN8S7218C113v36Ev,
};
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
extern void _ZN7S7218C73v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7218C7__8S7218C118S7218C107S7218C9__7S7218C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S7218C11[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7218C73v28Ev,
};
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
extern void _ZN7S7218C73v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7218C7__8S7218C107S7218C9__7S7218C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S7218C10[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7218C73v28Ev,
};
extern void _ZN7S7218C83v14Ev();
extern void _ZN7S7218C83v15Ev();
extern void _ZN7S7218C83v16Ev();
extern void _ZN7S7218C83v17Ev();
extern void _ZN7S7218C83v18Ev();
extern void _ZN7S7218C83v19Ev();
extern void _ZN7S7218C73v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7218C7__7S7218C9__7S7218C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S7218C9[0]),
  (VTBL_ENTRY)&_ZN7S7218C83v14Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v15Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v16Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v17Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v18Ev,
  (VTBL_ENTRY)&_ZN7S7218C83v19Ev,
  (VTBL_ENTRY)&_ZN7S7218C73v28Ev,
};
static  VTT_ENTRY vtt_S7218C1[] = {
  {&(_ZTV7S7218C1[5]),  5,137},
  {&(_tg__ZTV7S7218C2__7S7218C1[5]),  5,14},
  {&(_tg__ZTV7S7218C3__7S7218C2__7S7218C1[24]),  24,41},
  {&(_tg__ZTV7S7218C87S7218C3__7S7218C2__7S7218C1[2]),  2,8},
  {&(_tg__ZTV7S7218C9__7S7218C2__7S7218C1[26]),  26,44},
  {&(_tg__ZTV7S7218C7__7S7218C2__7S7218C1[9]),  9,16},
  {&(_tg__ZTV7S7218C88S7218C107S7218C9__A2__7S7218C2__7S7218C1[2]),  2,8},
  {&(_ZTV7S7218C1[44]),  44,137},
  {&(_ZTV7S7218C1[63]),  63,137},
  {&(_ZTV7S7218C1[95]),  95,137},
  {&(_ZTV7S7218C1[130]),  130,137},
  {&(_ZTV7S7218C1[115]),  115,137},
  {&(_tg__ZTV7S7218C9__7S7218C1[3]),  3,21},
  {&(_tg__ZTV8S7218C107S7218C9__7S7218C1[3]),  3,17},
  {&(_tg__ZTV8S7218C118S7218C107S7218C9__7S7218C1[3]),  3,13},
  {&(_tg__ZTV7S7218C7__8S7218C118S7218C107S7218C9__7S7218C1[9]),  9,16},
  {&(_tg__ZTV7S7218C7__8S7218C107S7218C9__7S7218C1[9]),  9,16},
  {&(_tg__ZTV7S7218C7__7S7218C9__7S7218C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI7S7218C1[];
extern  VTBL_ENTRY _ZTV7S7218C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7218C1[];
static VTBL_ENTRY alt_thunk_names120[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7218C2D0Ev,_ZTv0_n16_N7S7218C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7218C2D0Ev,_ZThn56_N7S7218C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7218C2D1Ev,_ZTv0_n16_N7S7218C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7218C2D1Ev,_ZThn56_N7S7218C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7218C2D0Ev,_ZTv0_n40_N7S7218C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7218C2D0Ev,_ZThn20_N7S7218C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7218C2D1Ev,_ZTv0_n40_N7S7218C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7218C2D1Ev,_ZThn20_N7S7218C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7218C1D0Ev,_ZTv0_n16_N7S7218C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7218C1D0Ev,_ZThn56_N7S7218C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7218C1D1Ev,_ZTv0_n16_N7S7218C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7218C1D1Ev,_ZThn56_N7S7218C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7218C1D0Ev,_ZTv0_n40_N7S7218C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7218C1D0Ev,_ZThn20_N7S7218C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7218C1D1Ev,_ZTv0_n40_N7S7218C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7218C1D1Ev,_ZThn20_N7S7218C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7218C1 = {  "S7218C1", // class name
  bases_S7218C1, 11,
  &(vtc_S7218C1[0]), // expected_vtbl_contents
  &(vtt_S7218C1[0]), // expected_vtt_contents
  ABISELECT(152,88), // object size
  NSPAIRA(_ZTI7S7218C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7218C1),137, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7218C1),18, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names120,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19750C8  : virtual S2264C24 , virtual S2264C28 {
  int s19750c8f0[9];
  ~S19750C8(); // tgen
  S19750C8(); // tgen
};
//SIG(-1 S19750C8) C1{ VBC2{ m} VBC3{ m} Fi[9]}


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

static void Test_S19750C8()
{
  extern Class_Descriptor cd_S19750C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S19750C8, buf);
    S19750C8 *dp, &lv = *(dp=new (buf) S19750C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S19750C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19750C8)");
    check_base_class_offset(lv, (S2264C24*), 0, "S19750C8");
    check_base_class_offset(lv, (S2264C28*), 0, "S19750C8");
    check_field_offset(lv, s19750c8f0, ABISELECT(8,4), "S19750C8.s19750c8f0");
    test_class_info(&lv, &cd_S19750C8);
    dp->~S19750C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19750C8(Test_S19750C8, "S19750C8", ABISELECT(48,40));

#else // __cplusplus

extern void _ZN8S19750C8C1Ev();
extern void _ZN8S19750C8D1Ev();
Name_Map name_map_S19750C8[] = {
  NSPAIR(_ZN8S19750C8C1Ev),
  NSPAIR(_ZN8S19750C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S19750C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19750C8[];
static  VTBL_ENTRY vtc_S19750C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C8[0]),
};
extern VTBL_ENTRY _ZTV8S19750C8[];
static  VTT_ENTRY vtt_S19750C8[] = {
  {&(_ZTV8S19750C8[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19750C8[];
extern  VTBL_ENTRY _ZTV8S19750C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C8[];
Class_Descriptor cd_S19750C8 = {  "S19750C8", // class name
  bases_S19750C8, 2,
  &(vtc_S19750C8[0]), // expected_vtbl_contents
  &(vtt_S19750C8[0]), // expected_vtt_contents
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI8S19750C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19750C8),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19750C8),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  S19750C10  : virtual S2264C24 , virtual S2264C28 , virtual S19750C8 {
  void *s19750c10f0;
  virtual  ~S19750C10(); // _ZN9S19750C10D2Ev
  S19750C10(); // tgen
};
//SIG(-1 S19750C10) C1{ VBC2{ m} VBC3{ m} VBC4{ VBC2 VBC3 Fi[9]} vd Fp}


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

static void Test_S19750C10()
{
  extern Class_Descriptor cd_S19750C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S19750C10, buf);
    S19750C10 *dp, &lv = *(dp=new (buf) S19750C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S19750C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19750C10)");
    check_base_class_offset(lv, (S2264C24*), 0, "S19750C10");
    check_base_class_offset(lv, (S2264C24*)(S19750C8*), 0, "S19750C10");
    check_base_class_offset(lv, (S2264C28*), 0, "S19750C10");
    check_base_class_offset(lv, (S2264C28*)(S19750C8*), 0, "S19750C10");
    check_base_class_offset(lv, (S19750C8*), ABISELECT(16,8), "S19750C10");
    check_field_offset(lv, s19750c10f0, ABISELECT(8,4), "S19750C10.s19750c10f0");
    test_class_info(&lv, &cd_S19750C10);
    dp->~S19750C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19750C10(Test_S19750C10, "S19750C10", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN9S19750C10C1Ev();
extern void _ZN9S19750C10D2Ev();
Name_Map name_map_S19750C10[] = {
  NSPAIR(_ZN9S19750C10C1Ev),
  NSPAIR(_ZN9S19750C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C8;
extern VTBL_ENTRY _ZTI8S19750C8[];
extern  VTBL_ENTRY _ZTV8S19750C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C8[];
static Base_Class bases_S19750C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19750C8,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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 _ZTI9S19750C10[];
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY vtc_S19750C10[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
extern VTBL_ENTRY _ZTV9S19750C10[];
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C10[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C8[0]),
};
static  VTT_ENTRY vtt_S19750C10[] = {
  {&(_ZTV9S19750C10[5]),  5,11},
  {&(_ZTV9S19750C10[11]),  11,11},
  {&(_tg__ZTV8S19750C8__9S19750C10[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
Class_Descriptor cd_S19750C10 = {  "S19750C10", // class name
  bases_S19750C10, 3,
  &(vtc_S19750C10[0]), // expected_vtbl_contents
  &(vtt_S19750C10[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI9S19750C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19750C10),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19750C10),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  S19750C11  : virtual S2264C28 , S2264C24 , S19750C10 , virtual S2264C38 {
  virtual  ~S19750C11(); // _ZN9S19750C11D2Ev
  S19750C11(); // tgen
};
//SIG(-1 S19750C11) C1{ VBC2{ m} BC3{ m} BC4{ VBC3 VBC2 VBC5{ VBC3 VBC2 Fi[9]} vd Fp} VBC6{ m} vd}


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

static void Test_S19750C11()
{
  extern Class_Descriptor cd_S19750C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S19750C11, buf);
    S19750C11 *dp, &lv = *(dp=new (buf) S19750C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S19750C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19750C11)");
    check_base_class_offset(lv, (S2264C28*), 0, "S19750C11");
    check_base_class_offset(lv, (S2264C28*)(S19750C10*), 0, "S19750C11");
    check_base_class_offset(lv, (S2264C28*)(S19750C8*), 0, "S19750C11");
    /*is_ambiguous_... S19750C11::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*), 0, "S19750C11");
    check_base_class_offset(lv, (S2264C24*)(S19750C10*), ABISELECT(16,8), "S19750C11");
    check_base_class_offset(lv, (S2264C24*)(S19750C8*), ABISELECT(16,8), "S19750C11");
    check_base_class_offset(lv, (S19750C8*)(S19750C10*), ABISELECT(16,8), "S19750C11");
    check_base_class_offset(lv, (S19750C10*), 0, "S19750C11");
    check_base_class_offset(lv, (S2264C38*), 0, "S19750C11");
    test_class_info(&lv, &cd_S19750C11);
    dp->~S19750C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19750C11(Test_S19750C11, "S19750C11", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN9S19750C11C1Ev();
extern void _ZN9S19750C11D2Ev();
Name_Map name_map_S19750C11[] = {
  NSPAIR(_ZN9S19750C11C1Ev),
  NSPAIR(_ZN9S19750C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19750C8;
extern VTBL_ENTRY _ZTI8S19750C8[];
extern  VTBL_ENTRY _ZTV8S19750C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C8[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
static Base_Class bases_S19750C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C24,    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, 1},
  {&cd_S19750C8,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19750C10,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S19750C11[];
extern void _ZN9S19750C11D1Ev();
extern void _ZN9S19750C11D0Ev();
static  VTBL_ENTRY vtc_S19750C11[] = {
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C11[0]),
  (VTBL_ENTRY)&_ZN9S19750C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C11D0Ev,
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19750C11[0]),
};
extern VTBL_ENTRY _ZTV9S19750C11[];
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C10__9S19750C11[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C10__9S19750C11[] = {
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C11[] = {
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C8[0]),
};
static  VTT_ENTRY vtt_S19750C11[] = {
  {&(_ZTV9S19750C11[6]),  6,12},
  {&(_tg__ZTV9S19750C10__9S19750C11[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C10__9S19750C11[4]),  4,4},
  {&(_ZTV9S19750C11[12]),  12,12},
  {&(_tg__ZTV8S19750C8__9S19750C11[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19750C11[];
extern  VTBL_ENTRY _ZTV9S19750C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C11[];
Class_Descriptor cd_S19750C11 = {  "S19750C11", // class name
  bases_S19750C11, 6,
  &(vtc_S19750C11[0]), // expected_vtbl_contents
  &(vtt_S19750C11[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI9S19750C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19750C11),12, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19750C11),5, //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  S19750C6  : S2264C28 , virtual S19750C8 , S19750C10 , S2264C24 , virtual S19750C11 {
  virtual  ~S19750C6(); // _ZN8S19750C6D2Ev
  S19750C6(); // tgen
};
//SIG(-1 S19750C6) C1{ BC2{ m} VBC3{ VBC4{ m} VBC2 Fi[9]} BC5{ VBC4 VBC2 VBC3 vd Fp} BC4 VBC6{ VBC2 BC4 BC5 VBC7{ m} vd} vd}


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

static void Test_S19750C6()
{
  extern Class_Descriptor cd_S19750C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,16)];
    init_test(&cd_S19750C6, buf);
    S19750C6 *dp, &lv = *(dp=new (buf) S19750C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S19750C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19750C6)");
    /*is_ambiguous_... S19750C6::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), 0, "S19750C6");
    check_base_class_offset(lv, (S2264C24*)(S19750C8*), ABISELECT(60,48), "S19750C6");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C10*), ABISELECT(60,48), "S19750C6");
    check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C11*), ABISELECT(60,48), "S19750C6");
    check_base_class_offset(lv, (S2264C28*)(S19750C8*), ABISELECT(60,48), "S19750C6");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C10*), ABISELECT(60,48), "S19750C6");
    check_base_class_offset(lv, (S2264C28*)(S19750C11*), ABISELECT(60,48), "S19750C6");
    check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C11*), ABISELECT(60,48), "S19750C6");
    check_base_class_offset(lv, (S19750C8*), ABISELECT(16,8), "S19750C6");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S19750C8*)(S19750C10*), ABISELECT(16,8), "S19750C6");
    check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C11*), ABISELECT(16,8), "S19750C6");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S19750C10*), 0, "S19750C6");
    /*is_ambiguous_... S19750C6::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*), 0, "S19750C6");
    /*is_ambiguous_... S19750C11::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C11*), ABISELECT(64,52), "S19750C6");
    check_base_class_offset(lv, (S19750C10*)(S19750C11*), ABISELECT(64,52), "S19750C6");
    check_base_class_offset(lv, (S2264C38*)(S19750C11*), 0, "S19750C6");
    check_base_class_offset(lv, (S19750C11*), ABISELECT(64,52), "S19750C6");
    test_class_info(&lv, &cd_S19750C6);
    dp->~S19750C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19750C6(Test_S19750C6, "S19750C6", ABISELECT(80,60));

#else // __cplusplus

extern void _ZN8S19750C6C1Ev();
extern void _ZN8S19750C6D2Ev();
Name_Map name_map_S19750C6[] = {
  NSPAIR(_ZN8S19750C6C1Ev),
  NSPAIR(_ZN8S19750C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C8;
extern VTBL_ENTRY _ZTI8S19750C8[];
extern  VTBL_ENTRY _ZTV8S19750C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C8[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S19750C11;
extern VTBL_ENTRY _ZTI9S19750C11[];
extern  VTBL_ENTRY _ZTV9S19750C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C11[];
static Base_Class bases_S19750C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C24,    ABISELECT(60,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_S2264C28,    ABISELECT(60,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_S19750C8,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19750C10,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C24,    ABISELECT(64,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
    9, //immediately_derived
  0, 0},
  {&cd_S19750C10,    ABISELECT(64,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19750C11,    ABISELECT(64,52), //bcp->offset
    13, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19750C6[];
extern void _ZN8S19750C6D1Ev();
extern void _ZN8S19750C6D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S19750C6D1Ev,_ZThn52_N8S19750C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S19750C6D0Ev,_ZThn52_N8S19750C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19750C6[] = {
  0,
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
  (VTBL_ENTRY)&_ZN8S19750C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19750C6D0Ev,
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev),
};
extern VTBL_ENTRY _ZTV8S19750C6[];
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C10__8S19750C6[] = {
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C10__8S19750C6[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__8S19750C6[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C8[0]),
};
extern void _ZN9S19750C11D1Ev();
extern void _ZN9S19750C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C11__8S19750C6[] = {
  ABISELECT(-64,-52),
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C11[0]),
  (VTBL_ENTRY)&_ZN9S19750C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C11D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C109S19750C11__A1__8S19750C6[] = {
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C109S19750C11__A1__8S19750C6[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C11__8S19750C6[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI9S19750C11[0]),
};
static  VTT_ENTRY vtt_S19750C6[] = {
  {&(_ZTV8S19750C6[7]),  7,22},
  {&(_tg__ZTV9S19750C10__8S19750C6[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C10__8S19750C6[4]),  4,4},
  {&(_ZTV8S19750C6[13]),  13,22},
  {&(_ZTV8S19750C6[20]),  20,22},
  {&(_tg__ZTV8S19750C8__8S19750C6[4]),  4,4},
  {&(_tg__ZTV9S19750C11__8S19750C6[6]),  6,8},
  {&(_tg__ZTV9S19750C109S19750C11__A1__8S19750C6[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C109S19750C11__A1__8S19750C6[4]),  4,4},
  {&(_tg__ZTV8S19750C8__9S19750C11__8S19750C6[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19750C6[];
extern  VTBL_ENTRY _ZTV8S19750C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C6[];
static VTBL_ENTRY alt_thunk_names121[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19750C6D0Ev,_ZThn52_N8S19750C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19750C6D1Ev,_ZThn52_N8S19750C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19750C6 = {  "S19750C6", // class name
  bases_S19750C6, 10,
  &(vtc_S19750C6[0]), // expected_vtbl_contents
  &(vtt_S19750C6[0]), // expected_vtt_contents
  ABISELECT(80,60), // object size
  NSPAIRA(_ZTI8S19750C6),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19750C6),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19750C6),10, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names121,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19750C12  : S2264C28 , virtual S2264C38 {
  ~S19750C12(); // tgen
  S19750C12(); // tgen
};
//SIG(-1 S19750C12) C1{ BC2{ m} VBC3{ m}}


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

static void Test_S19750C12()
{
  extern Class_Descriptor cd_S19750C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19750C12, buf);
    S19750C12 *dp, &lv = *(dp=new (buf) S19750C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19750C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19750C12)");
    check_base_class_offset(lv, (S2264C28*), 0, "S19750C12");
    check_base_class_offset(lv, (S2264C38*), 0, "S19750C12");
    test_class_info(&lv, &cd_S19750C12);
    dp->~S19750C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19750C12(Test_S19750C12, "S19750C12", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S19750C12C1Ev();
extern void _ZN9S19750C12D1Ev();
Name_Map name_map_S19750C12[] = {
  NSPAIR(_ZN9S19750C12C1Ev),
  NSPAIR(_ZN9S19750C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
static Base_Class bases_S19750C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S19750C12[];
static  VTBL_ENTRY vtc_S19750C12[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C12[0]),
};
extern VTBL_ENTRY _ZTV9S19750C12[];
static  VTT_ENTRY vtt_S19750C12[] = {
  {&(_ZTV9S19750C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19750C12[];
extern  VTBL_ENTRY _ZTV9S19750C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C12[];
Class_Descriptor cd_S19750C12 = {  "S19750C12", // class name
  bases_S19750C12, 2,
  &(vtc_S19750C12[0]), // expected_vtbl_contents
  &(vtt_S19750C12[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19750C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19750C12),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19750C12),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  S19750C13  : S19750C10 , S2264C28 , virtual S19750C12 {
  virtual  ~S19750C13(); // _ZN9S19750C13D2Ev
  S19750C13(); // tgen
};
//SIG(-1 S19750C13) C1{ BC2{ VBC3{ m} VBC4{ m} VBC5{ VBC3 VBC4 Fi[9]} vd Fp} BC4 VBC6{ BC4 VBC7{ m}} vd}


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

static void Test_S19750C13()
{
  extern Class_Descriptor cd_S19750C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S19750C13, buf);
    S19750C13 *dp, &lv = *(dp=new (buf) S19750C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S19750C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19750C13)");
    check_base_class_offset(lv, (S2264C24*)(S19750C10*), 0, "S19750C13");
    check_base_class_offset(lv, (S2264C24*)(S19750C8*), 0, "S19750C13");
    check_base_class_offset(lv, (S2264C28*)(S19750C10*), ABISELECT(16,8), "S19750C13");
    check_base_class_offset(lv, (S2264C28*)(S19750C8*), ABISELECT(16,8), "S19750C13");
    check_base_class_offset(lv, (S19750C8*)(S19750C10*), ABISELECT(16,8), "S19750C13");
    check_base_class_offset(lv, (S19750C10*), 0, "S19750C13");
    /*is_ambiguous_... S19750C13::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), 0, "S19750C13");
    check_base_class_offset(lv, (S2264C28*)(S19750C12*), ABISELECT(64,48), "S19750C13");
    check_base_class_offset(lv, (S2264C38*)(S19750C12*), 0, "S19750C13");
    check_base_class_offset(lv, (S19750C12*), ABISELECT(64,48), "S19750C13");
    test_class_info(&lv, &cd_S19750C13);
    dp->~S19750C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19750C13(Test_S19750C13, "S19750C13", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN9S19750C13C1Ev();
extern void _ZN9S19750C13D2Ev();
Name_Map name_map_S19750C13[] = {
  NSPAIR(_ZN9S19750C13C1Ev),
  NSPAIR(_ZN9S19750C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C8;
extern VTBL_ENTRY _ZTI8S19750C8[];
extern  VTBL_ENTRY _ZTV8S19750C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C8[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S19750C12;
extern VTBL_ENTRY _ZTI9S19750C12[];
extern  VTBL_ENTRY _ZTV9S19750C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C12[];
static Base_Class bases_S19750C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    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, 1},
  {&cd_S19750C8,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19750C10,    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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C28,    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
    7, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19750C12,    ABISELECT(64,48), //bcp->offset
    13, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19750C13[];
extern void _ZN9S19750C13D1Ev();
extern void _ZN9S19750C13D0Ev();
static  VTBL_ENTRY vtc_S19750C13[] = {
  0,
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C13[0]),
  (VTBL_ENTRY)&_ZN9S19750C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C13D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19750C13[0]),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI9S19750C13[0]),
};
extern VTBL_ENTRY _ZTV9S19750C13[];
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C10__9S19750C13[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C10__9S19750C13[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C13[] = {
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19750C12__9S19750C13[] = {
  ABISELECT(-64,-48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C12[0]),
};
static  VTT_ENTRY vtt_S19750C13[] = {
  {&(_ZTV9S19750C13[7]),  7,16},
  {&(_tg__ZTV9S19750C10__9S19750C13[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C10__9S19750C13[4]),  4,4},
  {&(_ZTV9S19750C13[13]),  13,16},
  {&(_ZTV9S19750C13[16]),  16,16},
  {&(_tg__ZTV8S19750C8__9S19750C13[4]),  4,4},
  {&(_tg__ZTV9S19750C12__9S19750C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19750C13[];
extern  VTBL_ENTRY _ZTV9S19750C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C13[];
Class_Descriptor cd_S19750C13 = {  "S19750C13", // class name
  bases_S19750C13, 8,
  &(vtc_S19750C13[0]), // expected_vtbl_contents
  &(vtt_S19750C13[0]), // expected_vtt_contents
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI9S19750C13),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19750C13),16, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19750C13),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19750C5  : virtual S19750C6 , virtual S19750C12 , virtual S19750C13 , S2264C24 {
  virtual void  v1(); // _ZN8S19750C52v1Ev
  ~S19750C5(); // tgen
  S19750C5(); // tgen
};
//SIG(-1 S19750C5) C1{ VBC2{ BC3{ m} VBC4{ VBC5{ m} VBC3 Fi[9]} BC6{ VBC5 VBC3 VBC4 vd Fp} BC5 VBC7{ VBC3 BC5 BC6 VBC8{ m} vd} vd} VBC9{ BC3 VBC8} VBC10{ BC6 BC3 VBC9 vd} BC5 v1}


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

static void Test_S19750C5()
{
  extern Class_Descriptor cd_S19750C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,19)];
    init_test(&cd_S19750C5, buf);
    S19750C5 *dp, &lv = *(dp=new (buf) S19750C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,72), "sizeof(S19750C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19750C5)");
    /*is_ambiguous_... S19750C6::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C6*), ABISELECT(8,4), "S19750C5");
    check_base_class_offset(lv, (S2264C24*)(S19750C8*), ABISELECT(68,52), "S19750C5");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C6*), ABISELECT(68,52), "S19750C5");
    check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C11*), ABISELECT(68,52), "S19750C5");
    check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C13*), ABISELECT(68,52), "S19750C5");
    check_base_class_offset(lv, (S2264C28*)(S19750C8*), ABISELECT(68,52), "S19750C5");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C6*), ABISELECT(68,52), "S19750C5");
    check_base_class_offset(lv, (S2264C28*)(S19750C11*), ABISELECT(68,52), "S19750C5");
    check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C11*), ABISELECT(68,52), "S19750C5");
    check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C13*), ABISELECT(68,52), "S19750C5");
    check_base_class_offset(lv, (S19750C8*)(S19750C6*), ABISELECT(24,12), "S19750C5");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C6*), ABISELECT(24,12), "S19750C5");
    check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C11*), ABISELECT(24,12), "S19750C5");
    check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C13*), ABISELECT(24,12), "S19750C5");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S19750C10*)(S19750C6*), ABISELECT(8,4), "S19750C5");
    /*is_ambiguous_... S19750C6::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C6*), ABISELECT(8,4), "S19750C5");
    /*is_ambiguous_... S19750C11::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C11*), ABISELECT(72,56), "S19750C5");
    check_base_class_offset(lv, (S19750C10*)(S19750C11*), ABISELECT(72,56), "S19750C5");
    check_base_class_offset(lv, (S2264C38*)(S19750C11*), 0, "S19750C5");
    check_base_class_offset(lv, (S2264C38*)(S19750C12*), 0, "S19750C5");
    check_base_class_offset(lv, (S19750C11*)(S19750C6*), ABISELECT(72,56), "S19750C5");
    check_base_class_offset(lv, (S19750C6*), ABISELECT(8,4), "S19750C5");
    check_base_class_offset(lv, (S2264C28*)(S19750C12*), 0, "S19750C5");
    check_base_class_offset(lv, (S19750C12*), 0, "S19750C5");
    check_base_class_offset(lv, (S19750C12*)(S19750C13*), 0, "S19750C5");
    check_base_class_offset(lv, (S19750C10*)(S19750C13*), ABISELECT(88,64), "S19750C5");
    /*is_ambiguous_... S19750C13::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C13*), ABISELECT(88,64), "S19750C5");
    check_base_class_offset(lv, (S19750C13*), ABISELECT(88,64), "S19750C5");
    /*is_ambiguous_... S19750C5::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*), 0, "S19750C5");
    test_class_info(&lv, &cd_S19750C5);
    dp->~S19750C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19750C5(Test_S19750C5, "S19750C5", ABISELECT(104,72));

#else // __cplusplus

extern void _ZN8S19750C5C1Ev();
extern void _ZN8S19750C5D1Ev();
Name_Map name_map_S19750C5[] = {
  NSPAIR(_ZN8S19750C5C1Ev),
  NSPAIR(_ZN8S19750C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C8;
extern VTBL_ENTRY _ZTI8S19750C8[];
extern  VTBL_ENTRY _ZTV8S19750C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C8[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S19750C11;
extern VTBL_ENTRY _ZTI9S19750C11[];
extern  VTBL_ENTRY _ZTV9S19750C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C11[];
extern Class_Descriptor cd_S19750C6;
extern VTBL_ENTRY _ZTI8S19750C6[];
extern  VTBL_ENTRY _ZTV8S19750C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C6[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C12;
extern VTBL_ENTRY _ZTI9S19750C12[];
extern  VTBL_ENTRY _ZTV9S19750C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C12[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C13;
extern VTBL_ENTRY _ZTI9S19750C13[];
extern  VTBL_ENTRY _ZTV9S19750C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C13[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
static Base_Class bases_S19750C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    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
    10, //immediately_derived
  0, 0},
  {&cd_S2264C24,    ABISELECT(68,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_S2264C28,    ABISELECT(68,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_S19750C8,    ABISELECT(24,12), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19750C10,    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
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2264C24,    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
    10, //immediately_derived
  0, 0},
  {&cd_S2264C24,    ABISELECT(72,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
    9, //immediately_derived
  0, 0},
  {&cd_S19750C10,    ABISELECT(72,56), //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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19750C11,    ABISELECT(72,56), //bcp->offset
    27, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19750C6,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19750C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19750C10,    ABISELECT(88,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(88,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
    15, //immediately_derived
  0, 0},
  {&cd_S19750C13,    ABISELECT(88,64), //bcp->offset
    36, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19750C5[];
extern void _ZN8S19750C52v1Ev();
extern void _ZN8S19750C5D1Ev();
extern void _ZN8S19750C5D0Ev();
extern void ABISELECT(_ZTv0_n64_N8S19750C5D1Ev,_ZTv0_n32_N8S19750C5D1Ev)();
extern void ABISELECT(_ZThn8_N8S19750C5D1Ev,_ZThn4_N8S19750C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19750C5D0Ev,_ZTv0_n32_N8S19750C5D0Ev)();
extern void ABISELECT(_ZThn8_N8S19750C5D0Ev,_ZThn4_N8S19750C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19750C5D1Ev,_ZTv0_n28_N8S19750C5D1Ev)();
extern void ABISELECT(_ZThn72_N8S19750C5D1Ev,_ZThn56_N8S19750C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19750C5D0Ev,_ZTv0_n28_N8S19750C5D0Ev)();
extern void ABISELECT(_ZThn72_N8S19750C5D0Ev,_ZThn56_N8S19750C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19750C5D1Ev,_ZTv0_n32_N8S19750C5D1Ev)();
extern void ABISELECT(_ZThn88_N8S19750C5D1Ev,_ZThn64_N8S19750C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19750C5D0Ev,_ZTv0_n32_N8S19750C5D0Ev)();
extern void ABISELECT(_ZThn88_N8S19750C5D0Ev,_ZThn64_N8S19750C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19750C5[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(72,56),
  ABISELECT(68,52),
  ABISELECT(68,52),
  ABISELECT(24,12),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C5[0]),
  (VTBL_ENTRY)&_ZN8S19750C52v1Ev,
  (VTBL_ENTRY)&_ZN8S19750C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19750C5D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19750C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C5D1Ev,_ZTv0_n32_N8S19750C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C5D0Ev,_ZTv0_n32_N8S19750C5D0Ev),
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19750C5[0]),
  ABISELECT(-72,-56),
  ABISELECT(-72,-56),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-72,-56),
  (VTBL_ENTRY)&(_ZTI8S19750C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C5D1Ev,_ZTv0_n28_N8S19750C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C5D0Ev,_ZTv0_n28_N8S19750C5D0Ev),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-64,-52),
  ABISELECT(-20,-12),
  ABISELECT(-20,-12),
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI8S19750C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C5D1Ev,_ZTv0_n32_N8S19750C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C5D0Ev,_ZTv0_n32_N8S19750C5D0Ev),
};
extern VTBL_ENTRY _ZTV8S19750C5[];
extern void _ZN8S19750C6D1Ev();
extern void _ZN8S19750C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19750C6__8S19750C5[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
  (VTBL_ENTRY)&_ZN8S19750C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19750C6D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C108S19750C6__8S19750C5[] = {
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C108S19750C6__8S19750C5[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__8S19750C6__8S19750C5[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S19750C6D1Ev,_ZThn52_N8S19750C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S19750C6D0Ev,_ZThn52_N8S19750C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C11__8S19750C6__8S19750C5[] = {
  ABISELECT(-64,-52),
  ABISELECT(-72,-56),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__8S19750C5[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C8[0]),
};
extern void _ZN9S19750C11D1Ev();
extern void _ZN9S19750C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C11__8S19750C5[] = {
  ABISELECT(-72,-56),
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C11[0]),
  (VTBL_ENTRY)&_ZN9S19750C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C11D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C109S19750C11__A1__8S19750C5[] = {
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C109S19750C11__A1__8S19750C5[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C11__8S19750C5[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI9S19750C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19750C12__8S19750C5[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C12[0]),
};
extern void _ZN9S19750C13D1Ev();
extern void _ZN9S19750C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C13__8S19750C5[] = {
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-64,-52),
  ABISELECT(-20,-12),
  ABISELECT(-20,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C13[0]),
  (VTBL_ENTRY)&_ZN9S19750C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C13D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C109S19750C13__A2__8S19750C5[] = {
  ABISELECT(-64,-52),
  ABISELECT(-20,-12),
  ABISELECT(-20,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C109S19750C13__A2__8S19750C5[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(64,52),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C13__8S19750C5[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(64,52),
  (VTBL_ENTRY)&(_ZTI9S19750C13[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19750C12__9S19750C13__8S19750C5[] = {
  0,
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI9S19750C13[0]),
};
static  VTT_ENTRY vtt_S19750C5[] = {
  {&(_ZTV8S19750C5[10]),  10,46},
  {&(_ZTV8S19750C5[21]),  21,46},
  {&(_ZTV8S19750C5[27]),  27,46},
  {&(_ZTV8S19750C5[34]),  34,46},
  {&(_ZTV8S19750C5[10]),  10,46},
  {&(_ZTV8S19750C5[44]),  44,46},
  {&(_tg__ZTV8S19750C6__8S19750C5[7]),  7,9},
  {&(_tg__ZTV9S19750C108S19750C6__8S19750C5[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C108S19750C6__8S19750C5[4]),  4,4},
  {&(_tg__ZTV8S19750C8__8S19750C6__8S19750C5[4]),  4,4},
  {&(_tg__ZTV9S19750C11__8S19750C6__8S19750C5[7]),  7,9},
  {&(_tg__ZTV8S19750C8__8S19750C5[4]),  4,4},
  {&(_tg__ZTV9S19750C11__8S19750C5[6]),  6,8},
  {&(_tg__ZTV9S19750C109S19750C11__A1__8S19750C5[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C109S19750C11__A1__8S19750C5[4]),  4,4},
  {&(_tg__ZTV8S19750C8__9S19750C11__8S19750C5[4]),  4,4},
  {&(_tg__ZTV9S19750C12__8S19750C5[3]),  3,3},
  {&(_tg__ZTV9S19750C13__8S19750C5[7]),  7,9},
  {&(_tg__ZTV9S19750C109S19750C13__A2__8S19750C5[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C109S19750C13__A2__8S19750C5[4]),  4,4},
  {&(_tg__ZTV8S19750C8__9S19750C13__8S19750C5[4]),  4,4},
  {&(_tg__ZTV9S19750C12__9S19750C13__8S19750C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19750C5[];
extern  VTBL_ENTRY _ZTV8S19750C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C5[];
static VTBL_ENTRY alt_thunk_names122[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19750C6D0Ev,_ZThn52_N8S19750C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19750C6D1Ev,_ZThn52_N8S19750C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C5D0Ev,_ZTv0_n28_N8S19750C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19750C5D0Ev,_ZThn56_N8S19750C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C5D1Ev,_ZTv0_n28_N8S19750C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19750C5D1Ev,_ZThn56_N8S19750C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19750C5D0Ev,_ZTv0_n32_N8S19750C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19750C5D0Ev,_ZThn64_N8S19750C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19750C5D0Ev,_ZThn4_N8S19750C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19750C5D1Ev,_ZTv0_n32_N8S19750C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19750C5D1Ev,_ZThn64_N8S19750C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19750C5D1Ev,_ZThn4_N8S19750C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19750C5 = {  "S19750C5", // class name
  bases_S19750C5, 17,
  &(vtc_S19750C5[0]), // expected_vtbl_contents
  &(vtt_S19750C5[0]), // expected_vtt_contents
  ABISELECT(104,72), // object size
  NSPAIRA(_ZTI8S19750C5),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19750C5),46, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19750C5),22, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names122,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19750C15  : virtual S2264C24 {
  virtual  ~S19750C15(); // _ZN9S19750C15D2Ev
  S19750C15(); // tgen
};
//SIG(-1 S19750C15) C1{ VBC2{ m} vd}


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

static void Test_S19750C15()
{
  extern Class_Descriptor cd_S19750C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19750C15, buf);
    S19750C15 *dp, &lv = *(dp=new (buf) S19750C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19750C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19750C15)");
    check_base_class_offset(lv, (S2264C24*), 0, "S19750C15");
    test_class_info(&lv, &cd_S19750C15);
    dp->~S19750C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19750C15(Test_S19750C15, "S19750C15", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S19750C15C1Ev();
extern void _ZN9S19750C15D2Ev();
Name_Map name_map_S19750C15[] = {
  NSPAIR(_ZN9S19750C15C1Ev),
  NSPAIR(_ZN9S19750C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
static Base_Class bases_S19750C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S19750C15[];
extern void _ZN9S19750C15D1Ev();
extern void _ZN9S19750C15D0Ev();
static  VTBL_ENTRY vtc_S19750C15[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C15[0]),
  (VTBL_ENTRY)&_ZN9S19750C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C15D0Ev,
};
extern VTBL_ENTRY _ZTV9S19750C15[];
static  VTT_ENTRY vtt_S19750C15[] = {
  {&(_ZTV9S19750C15[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19750C15[];
extern  VTBL_ENTRY _ZTV9S19750C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C15[];
Class_Descriptor cd_S19750C15 = {  "S19750C15", // class name
  bases_S19750C15, 1,
  &(vtc_S19750C15[0]), // expected_vtbl_contents
  &(vtt_S19750C15[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19750C15),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19750C15),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19750C15),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  S19750C14  : virtual S19750C15 {
  ::S2264C38 s19750c14f0;
  virtual  ~S19750C14(); // _ZN9S19750C14D2Ev
  S19750C14(); // tgen
};
//SIG(-1 S19750C14) C1{ VBC2{ VBC3{ m} vd} vd FC4{ m}}


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

static void Test_S19750C14()
{
  extern Class_Descriptor cd_S19750C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19750C14, buf);
    S19750C14 *dp, &lv = *(dp=new (buf) S19750C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19750C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19750C14)");
    check_base_class_offset(lv, (S2264C24*)(S19750C15*), 0, "S19750C14");
    check_base_class_offset(lv, (S19750C15*), 0, "S19750C14");
    check_field_offset(lv, s19750c14f0, ABISELECT(8,4), "S19750C14.s19750c14f0");
    test_class_info(&lv, &cd_S19750C14);
    dp->~S19750C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19750C14(Test_S19750C14, "S19750C14", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S19750C14C1Ev();
extern void _ZN9S19750C14D2Ev();
Name_Map name_map_S19750C14[] = {
  NSPAIR(_ZN9S19750C14C1Ev),
  NSPAIR(_ZN9S19750C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19750C15;
extern VTBL_ENTRY _ZTI9S19750C15[];
extern  VTBL_ENTRY _ZTV9S19750C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C15[];
static Base_Class bases_S19750C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19750C15,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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 _ZTI9S19750C14[];
extern void _ZN9S19750C14D1Ev();
extern void _ZN9S19750C14D0Ev();
static  VTBL_ENTRY vtc_S19750C14[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C14[0]),
  (VTBL_ENTRY)&_ZN9S19750C14D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C14D0Ev,
};
extern VTBL_ENTRY _ZTV9S19750C14[];
extern void _ZN9S19750C15D1Ev();
extern void _ZN9S19750C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C15__9S19750C14[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C15[0]),
  (VTBL_ENTRY)&_ZN9S19750C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C15D0Ev,
};
static  VTT_ENTRY vtt_S19750C14[] = {
  {&(_ZTV9S19750C14[5]),  5,7},
  {&(_ZTV9S19750C14[5]),  5,7},
  {&(_tg__ZTV9S19750C15__9S19750C14[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S19750C14[];
extern  VTBL_ENTRY _ZTV9S19750C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C14[];
Class_Descriptor cd_S19750C14 = {  "S19750C14", // class name
  bases_S19750C14, 2,
  &(vtc_S19750C14[0]), // expected_vtbl_contents
  &(vtt_S19750C14[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S19750C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19750C14),7, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19750C14),3, //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  S19750C4  : virtual S19750C5 {
  ::S19750C14 s19750c4f0;
  ~S19750C4(); // tgen
  S19750C4(); // tgen
};
//SIG(-1 S19750C4) C1{ VBC2{ VBC3{ BC4{ m} VBC5{ VBC6{ m} VBC4 Fi[9]} BC7{ VBC6 VBC4 VBC5 vd Fp} BC6 VBC8{ VBC4 BC6 BC7 VBC9{ m} vd} vd} VBC10{ BC4 VBC9} VBC11{ BC7 BC4 VBC10 vd} BC6 v1} FC12{ VBC13{ VBC6 vd} vd FC9}}


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

static void Test_S19750C4()
{
  extern Class_Descriptor cd_S19750C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,21)];
    init_test(&cd_S19750C4, buf);
    S19750C4 *dp, &lv = *(dp=new (buf) S19750C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,80), "sizeof(S19750C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19750C4)");
    /*is_ambiguous_... S19750C6::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C6*), ABISELECT(24,12), "S19750C4");
    check_base_class_offset(lv, (S2264C24*)(S19750C8*), ABISELECT(84,60), "S19750C4");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C6*), ABISELECT(84,60), "S19750C4");
    check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C11*), ABISELECT(84,60), "S19750C4");
    check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C13*), ABISELECT(84,60), "S19750C4");
    check_base_class_offset(lv, (S2264C28*)(S19750C8*), ABISELECT(84,60), "S19750C4");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C6*), ABISELECT(84,60), "S19750C4");
    check_base_class_offset(lv, (S2264C28*)(S19750C11*), ABISELECT(84,60), "S19750C4");
    check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C11*), ABISELECT(84,60), "S19750C4");
    check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C13*), ABISELECT(84,60), "S19750C4");
    check_base_class_offset(lv, (S19750C8*)(S19750C6*), ABISELECT(40,20), "S19750C4");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C6*), ABISELECT(40,20), "S19750C4");
    check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C11*), ABISELECT(40,20), "S19750C4");
    check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C13*), ABISELECT(40,20), "S19750C4");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S19750C10*)(S19750C6*), ABISELECT(24,12), "S19750C4");
    /*is_ambiguous_... S19750C6::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C6*), ABISELECT(24,12), "S19750C4");
    /*is_ambiguous_... S19750C11::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C11*), ABISELECT(88,64), "S19750C4");
    check_base_class_offset(lv, (S19750C10*)(S19750C11*), ABISELECT(88,64), "S19750C4");
    check_base_class_offset(lv, (S2264C38*)(S19750C11*), 0, "S19750C4");
    check_base_class_offset(lv, (S2264C38*)(S19750C12*), 0, "S19750C4");
    check_base_class_offset(lv, (S19750C11*)(S19750C6*), ABISELECT(88,64), "S19750C4");
    check_base_class_offset(lv, (S19750C6*)(S19750C5*), ABISELECT(24,12), "S19750C4");
    check_base_class_offset(lv, (S2264C28*)(S19750C12*), 0, "S19750C4");
    check_base_class_offset(lv, (S19750C12*)(S19750C5*), 0, "S19750C4");
    check_base_class_offset(lv, (S19750C12*)(S19750C13*), 0, "S19750C4");
    check_base_class_offset(lv, (S19750C10*)(S19750C13*), ABISELECT(104,72), "S19750C4");
    /*is_ambiguous_... S19750C13::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C13*), ABISELECT(104,72), "S19750C4");
    check_base_class_offset(lv, (S19750C13*)(S19750C5*), ABISELECT(104,72), "S19750C4");
    /*is_ambiguous_... S19750C5::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C5*), 0, "S19750C4");
    check_base_class_offset(lv, (S19750C5*), 0, "S19750C4");
    check_field_offset(lv, s19750c4f0, ABISELECT(8,4), "S19750C4.s19750c4f0");
    test_class_info(&lv, &cd_S19750C4);
    dp->~S19750C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19750C4(Test_S19750C4, "S19750C4", ABISELECT(120,80));

#else // __cplusplus

extern void _ZN8S19750C4C1Ev();
extern void _ZN8S19750C4D1Ev();
Name_Map name_map_S19750C4[] = {
  NSPAIR(_ZN8S19750C4C1Ev),
  NSPAIR(_ZN8S19750C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C8;
extern VTBL_ENTRY _ZTI8S19750C8[];
extern  VTBL_ENTRY _ZTV8S19750C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C8[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S19750C11;
extern VTBL_ENTRY _ZTI9S19750C11[];
extern  VTBL_ENTRY _ZTV9S19750C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C11[];
extern Class_Descriptor cd_S19750C6;
extern VTBL_ENTRY _ZTI8S19750C6[];
extern  VTBL_ENTRY _ZTV8S19750C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C6[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C12;
extern VTBL_ENTRY _ZTI9S19750C12[];
extern  VTBL_ENTRY _ZTV9S19750C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C12[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C13;
extern VTBL_ENTRY _ZTI9S19750C13[];
extern  VTBL_ENTRY _ZTV9S19750C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C13[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19750C5;
extern VTBL_ENTRY _ZTI8S19750C5[];
extern  VTBL_ENTRY _ZTV8S19750C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C5[];
static Base_Class bases_S19750C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    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
    10, //immediately_derived
  0, 0},
  {&cd_S2264C24,    ABISELECT(84,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_S2264C28,    ABISELECT(84,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_S19750C8,    ABISELECT(40,20), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19750C10,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2264C24,    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
    10, //immediately_derived
  0, 0},
  {&cd_S2264C24,    ABISELECT(88,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
    9, //immediately_derived
  0, 0},
  {&cd_S19750C10,    ABISELECT(88,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19750C11,    ABISELECT(88,64), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19750C6,    ABISELECT(24,12), //bcp->offset
    16, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19750C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S19750C10,    ABISELECT(104,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(104,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
    15, //immediately_derived
  0, 0},
  {&cd_S19750C13,    ABISELECT(104,72), //bcp->offset
    39, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19750C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19750C4[];
extern void _ZN8S19750C52v1Ev();
extern void _ZN8S19750C4D1Ev();
extern void _ZN8S19750C4D0Ev();
extern void ABISELECT(_ZTv0_n64_N8S19750C4D1Ev,_ZTv0_n32_N8S19750C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S19750C4D1Ev,_ZThn12_N8S19750C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19750C4D0Ev,_ZTv0_n32_N8S19750C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S19750C4D0Ev,_ZThn12_N8S19750C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19750C4D1Ev,_ZTv0_n28_N8S19750C4D1Ev)();
extern void ABISELECT(_ZThn88_N8S19750C4D1Ev,_ZThn64_N8S19750C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19750C4D0Ev,_ZTv0_n28_N8S19750C4D0Ev)();
extern void ABISELECT(_ZThn88_N8S19750C4D0Ev,_ZThn64_N8S19750C4D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19750C4D1Ev,_ZTv0_n32_N8S19750C4D1Ev)();
extern void ABISELECT(_ZThn104_N8S19750C4D1Ev,_ZThn72_N8S19750C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19750C4D0Ev,_ZTv0_n32_N8S19750C4D0Ev)();
extern void ABISELECT(_ZThn104_N8S19750C4D0Ev,_ZThn72_N8S19750C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19750C4[] = {
  0,
  0,
  0,
  ABISELECT(104,72),
  0,
  ABISELECT(88,64),
  ABISELECT(84,60),
  ABISELECT(84,60),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C4[0]),
  (VTBL_ENTRY)&_ZN8S19750C52v1Ev,
  (VTBL_ENTRY)&_ZN8S19750C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19750C4D0Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19750C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C4D1Ev,_ZTv0_n32_N8S19750C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C4D0Ev,_ZTv0_n32_N8S19750C4D0Ev),
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19750C4[0]),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI8S19750C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C4D1Ev,_ZTv0_n28_N8S19750C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C4D0Ev,_ZTv0_n28_N8S19750C4D0Ev),
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  ABISELECT(-64,-52),
  ABISELECT(-20,-12),
  ABISELECT(-20,-12),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI8S19750C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C4D1Ev,_ZTv0_n32_N8S19750C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C4D0Ev,_ZTv0_n32_N8S19750C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S19750C4[];
extern void _ZN8S19750C52v1Ev();
extern void _ZN8S19750C5D1Ev();
extern void _ZN8S19750C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19750C5__8S19750C4[] = {
  ABISELECT(104,72),
  0,
  ABISELECT(88,64),
  ABISELECT(84,60),
  ABISELECT(84,60),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C5[0]),
  (VTBL_ENTRY)&_ZN8S19750C52v1Ev,
  (VTBL_ENTRY)&_ZN8S19750C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19750C5D0Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S19750C5D1Ev,_ZTv0_n32_N8S19750C5D1Ev)();
extern void ABISELECT(_ZThn24_N8S19750C5D1Ev,_ZThn12_N8S19750C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19750C5D0Ev,_ZTv0_n32_N8S19750C5D0Ev)();
extern void ABISELECT(_ZThn24_N8S19750C5D0Ev,_ZThn12_N8S19750C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19750C6__8S19750C5__8S19750C4[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19750C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C5D1Ev,_ZTv0_n32_N8S19750C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C5D0Ev,_ZTv0_n32_N8S19750C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__8S19750C5__8S19750C4[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19750C5[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S19750C5D1Ev,_ZTv0_n28_N8S19750C5D1Ev)();
extern void ABISELECT(_ZThn88_N8S19750C5D1Ev,_ZThn64_N8S19750C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19750C5D0Ev,_ZTv0_n28_N8S19750C5D0Ev)();
extern void ABISELECT(_ZThn88_N8S19750C5D0Ev,_ZThn64_N8S19750C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C11__8S19750C5__8S19750C4[] = {
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI8S19750C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C5D1Ev,_ZTv0_n28_N8S19750C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C5D0Ev,_ZTv0_n28_N8S19750C5D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S19750C5D1Ev,_ZTv0_n32_N8S19750C5D1Ev)();
extern void ABISELECT(_ZThn104_N8S19750C5D1Ev,_ZThn72_N8S19750C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19750C5D0Ev,_ZTv0_n32_N8S19750C5D0Ev)();
extern void ABISELECT(_ZThn104_N8S19750C5D0Ev,_ZThn72_N8S19750C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C13__8S19750C5__8S19750C4[] = {
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  ABISELECT(-64,-52),
  ABISELECT(-20,-12),
  ABISELECT(-20,-12),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI8S19750C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C5D1Ev,_ZTv0_n32_N8S19750C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C5D0Ev,_ZTv0_n32_N8S19750C5D0Ev),
};
extern void _ZN8S19750C6D1Ev();
extern void _ZN8S19750C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19750C6__8S19750C4[] = {
  ABISELECT(-24,-12),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
  (VTBL_ENTRY)&_ZN8S19750C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19750C6D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C108S19750C6__8S19750C4[] = {
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C108S19750C6__8S19750C4[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__8S19750C6__8S19750C4[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S19750C6D1Ev,_ZThn52_N8S19750C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S19750C6D0Ev,_ZThn52_N8S19750C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C11__8S19750C6__8S19750C4[] = {
  ABISELECT(-64,-52),
  ABISELECT(-88,-64),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__8S19750C4[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C8[0]),
};
extern void _ZN9S19750C11D1Ev();
extern void _ZN9S19750C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C11__8S19750C4[] = {
  ABISELECT(-88,-64),
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C11[0]),
  (VTBL_ENTRY)&_ZN9S19750C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C11D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C109S19750C11__A1__8S19750C4[] = {
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C109S19750C11__A1__8S19750C4[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C11__8S19750C4[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI9S19750C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19750C12__8S19750C4[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C12[0]),
};
extern void _ZN9S19750C13D1Ev();
extern void _ZN9S19750C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C13__8S19750C4[] = {
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  ABISELECT(-64,-52),
  ABISELECT(-20,-12),
  ABISELECT(-20,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C13[0]),
  (VTBL_ENTRY)&_ZN9S19750C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C13D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C109S19750C13__A2__8S19750C4[] = {
  ABISELECT(-64,-52),
  ABISELECT(-20,-12),
  ABISELECT(-20,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C109S19750C13__A2__8S19750C4[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(64,52),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C13__8S19750C4[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(64,52),
  (VTBL_ENTRY)&(_ZTI9S19750C13[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19750C12__9S19750C13__8S19750C4[] = {
  0,
  ABISELECT(104,72),
  (VTBL_ENTRY)&(_ZTI9S19750C13[0]),
};
static  VTT_ENTRY vtt_S19750C4[] = {
  {&(_ZTV8S19750C4[13]),  13,49},
  {&(_ZTV8S19750C4[13]),  13,49},
  {&(_ZTV8S19750C4[24]),  24,49},
  {&(_ZTV8S19750C4[30]),  30,49},
  {&(_ZTV8S19750C4[37]),  37,49},
  {&(_ZTV8S19750C4[13]),  13,49},
  {&(_ZTV8S19750C4[47]),  47,49},
  {&(_tg__ZTV8S19750C5__8S19750C4[10]),  10,13},
  {&(_tg__ZTV8S19750C6__8S19750C5__8S19750C4[8]),  8,10},
  {&(_tg__ZTV8S19750C8__8S19750C5__8S19750C4[4]),  4,4},
  {&(_tg__ZTV9S19750C11__8S19750C5__8S19750C4[7]),  7,9},
  {&(_tg__ZTV8S19750C5__8S19750C4[10]),  10,13},
  {&(_tg__ZTV9S19750C13__8S19750C5__8S19750C4[8]),  8,10},
  {&(_tg__ZTV8S19750C6__8S19750C4[7]),  7,9},
  {&(_tg__ZTV9S19750C108S19750C6__8S19750C4[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C108S19750C6__8S19750C4[4]),  4,4},
  {&(_tg__ZTV8S19750C8__8S19750C6__8S19750C4[4]),  4,4},
  {&(_tg__ZTV9S19750C11__8S19750C6__8S19750C4[7]),  7,9},
  {&(_tg__ZTV8S19750C8__8S19750C4[4]),  4,4},
  {&(_tg__ZTV9S19750C11__8S19750C4[6]),  6,8},
  {&(_tg__ZTV9S19750C109S19750C11__A1__8S19750C4[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C109S19750C11__A1__8S19750C4[4]),  4,4},
  {&(_tg__ZTV8S19750C8__9S19750C11__8S19750C4[4]),  4,4},
  {&(_tg__ZTV9S19750C12__8S19750C4[3]),  3,3},
  {&(_tg__ZTV9S19750C13__8S19750C4[7]),  7,9},
  {&(_tg__ZTV9S19750C109S19750C13__A2__8S19750C4[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C109S19750C13__A2__8S19750C4[4]),  4,4},
  {&(_tg__ZTV8S19750C8__9S19750C13__8S19750C4[4]),  4,4},
  {&(_tg__ZTV9S19750C12__9S19750C13__8S19750C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19750C4[];
extern  VTBL_ENTRY _ZTV8S19750C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C4[];
static VTBL_ENTRY alt_thunk_names123[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19750C6D0Ev,_ZThn52_N8S19750C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19750C6D1Ev,_ZThn52_N8S19750C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C5D0Ev,_ZTv0_n28_N8S19750C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19750C5D0Ev,_ZThn64_N8S19750C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C5D1Ev,_ZTv0_n28_N8S19750C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19750C5D1Ev,_ZThn64_N8S19750C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19750C5D0Ev,_ZTv0_n32_N8S19750C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19750C5D0Ev,_ZThn72_N8S19750C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19750C5D0Ev,_ZThn12_N8S19750C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19750C5D1Ev,_ZTv0_n32_N8S19750C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19750C5D1Ev,_ZThn72_N8S19750C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19750C5D1Ev,_ZThn12_N8S19750C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C4D0Ev,_ZTv0_n28_N8S19750C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19750C4D0Ev,_ZThn64_N8S19750C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C4D1Ev,_ZTv0_n28_N8S19750C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19750C4D1Ev,_ZThn64_N8S19750C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19750C4D0Ev,_ZTv0_n32_N8S19750C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19750C4D0Ev,_ZThn72_N8S19750C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19750C4D0Ev,_ZThn12_N8S19750C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19750C4D1Ev,_ZTv0_n32_N8S19750C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19750C4D1Ev,_ZThn72_N8S19750C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19750C4D1Ev,_ZThn12_N8S19750C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19750C4 = {  "S19750C4", // class name
  bases_S19750C4, 18,
  &(vtc_S19750C4[0]), // expected_vtbl_contents
  &(vtt_S19750C4[0]), // expected_vtt_contents
  ABISELECT(120,80), // object size
  NSPAIRA(_ZTI8S19750C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19750C4),49, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19750C4),29, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names123,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19750C17  : virtual S2264C38 , virtual S19750C6 , S19750C12 , virtual S19750C14 , virtual S19750C13 {
  virtual  ~S19750C17(); // _ZN9S19750C17D2Ev
  S19750C17(); // tgen
};
//SIG(-1 S19750C17) C1{ VBC2{ m} VBC3{ BC4{ m} VBC5{ VBC6{ m} VBC4 Fi[9]} BC7{ VBC6 VBC4 VBC5 vd Fp} BC6 VBC8{ VBC4 BC6 BC7 VBC2 vd} vd} BC9{ BC4 VBC2} VBC10{ VBC11{ VBC6 vd} vd FC2} VBC12{ BC7 BC4 VBC9 vd} vd}


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

static void Test_S19750C17()
{
  extern Class_Descriptor cd_S19750C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,21)];
    init_test(&cd_S19750C17, buf);
    S19750C17 *dp, &lv = *(dp=new (buf) S19750C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,80), "sizeof(S19750C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19750C17)");
    check_base_class_offset(lv, (S2264C38*), 0, "S19750C17");
    check_base_class_offset(lv, (S2264C38*)(S19750C11*), 0, "S19750C17");
    /*is_ambiguous_... S19750C17::S19750C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19750C12*), 0, "S19750C17");
    /*is_ambiguous_... S19750C17::S19750C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19750C12*), 0, "S19750C17");
    /*is_ambiguous_... S19750C6::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C6*), ABISELECT(8,4), "S19750C17");
    check_base_class_offset(lv, (S2264C24*)(S19750C8*), 0, "S19750C17");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C6*), 0, "S19750C17");
    check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C11*), 0, "S19750C17");
    check_base_class_offset(lv, (S2264C24*)(S19750C15*), 0, "S19750C17");
    check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C13*), 0, "S19750C17");
    check_base_class_offset(lv, (S2264C28*)(S19750C8*), ABISELECT(68,52), "S19750C17");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C6*), ABISELECT(68,52), "S19750C17");
    check_base_class_offset(lv, (S2264C28*)(S19750C11*), ABISELECT(68,52), "S19750C17");
    check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C11*), ABISELECT(68,52), "S19750C17");
    check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C13*), ABISELECT(68,52), "S19750C17");
    check_base_class_offset(lv, (S19750C8*)(S19750C6*), ABISELECT(24,12), "S19750C17");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C6*), ABISELECT(24,12), "S19750C17");
    check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C11*), ABISELECT(24,12), "S19750C17");
    check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C13*), ABISELECT(24,12), "S19750C17");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S19750C10*)(S19750C6*), ABISELECT(8,4), "S19750C17");
    /*is_ambiguous_... S19750C6::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C6*), ABISELECT(8,4), "S19750C17");
    /*is_ambiguous_... S19750C11::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C11*), ABISELECT(72,52), "S19750C17");
    check_base_class_offset(lv, (S19750C10*)(S19750C11*), ABISELECT(72,52), "S19750C17");
    check_base_class_offset(lv, (S19750C11*)(S19750C6*), ABISELECT(72,52), "S19750C17");
    check_base_class_offset(lv, (S19750C6*), ABISELECT(8,4), "S19750C17");
    /*is_ambiguous_... S19750C17::S19750C12 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C12*), 0, "S19750C17");
    /*is_ambiguous_... S19750C17::S19750C12 */ AMB_check_base_class_offset(lv, (S19750C12*), 0, "S19750C17");
    check_base_class_offset(lv, (S19750C15*)(S19750C14*), ABISELECT(88,60), "S19750C17");
    check_base_class_offset(lv, (S19750C14*), ABISELECT(88,60), "S19750C17");
    check_base_class_offset(lv, (S19750C10*)(S19750C13*), ABISELECT(104,68), "S19750C17");
    /*is_ambiguous_... S19750C13::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C13*), ABISELECT(104,68), "S19750C17");
    /*is_ambiguous_... S19750C17::S19750C12 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C12*), ABISELECT(120,76), "S19750C17");
    check_base_class_offset(lv, (S19750C12*)(S19750C13*), ABISELECT(120,76), "S19750C17");
    check_base_class_offset(lv, (S19750C13*), ABISELECT(104,68), "S19750C17");
    test_class_info(&lv, &cd_S19750C17);
    dp->~S19750C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19750C17(Test_S19750C17, "S19750C17", ABISELECT(128,80));

#else // __cplusplus

extern void _ZN9S19750C17C1Ev();
extern void _ZN9S19750C17D2Ev();
Name_Map name_map_S19750C17[] = {
  NSPAIR(_ZN9S19750C17C1Ev),
  NSPAIR(_ZN9S19750C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C8;
extern VTBL_ENTRY _ZTI8S19750C8[];
extern  VTBL_ENTRY _ZTV8S19750C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C8[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S19750C11;
extern VTBL_ENTRY _ZTI9S19750C11[];
extern  VTBL_ENTRY _ZTV9S19750C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C11[];
extern Class_Descriptor cd_S19750C6;
extern VTBL_ENTRY _ZTI8S19750C6[];
extern  VTBL_ENTRY _ZTV8S19750C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C6[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C12;
extern VTBL_ENTRY _ZTI9S19750C12[];
extern  VTBL_ENTRY _ZTV9S19750C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C12[];
extern Class_Descriptor cd_S19750C15;
extern VTBL_ENTRY _ZTI9S19750C15[];
extern  VTBL_ENTRY _ZTV9S19750C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C15[];
extern Class_Descriptor cd_S19750C14;
extern VTBL_ENTRY _ZTI9S19750C14[];
extern  VTBL_ENTRY _ZTV9S19750C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C14[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C12;
extern VTBL_ENTRY _ZTI9S19750C12[];
extern  VTBL_ENTRY _ZTV9S19750C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C12[];
extern Class_Descriptor cd_S19750C13;
extern VTBL_ENTRY _ZTI9S19750C13[];
extern  VTBL_ENTRY _ZTV9S19750C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C13[];
static Base_Class bases_S19750C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C28,    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
    10, //immediately_derived
  0, 0},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    ABISELECT(68,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
    4, //immediately_derived
  0, 1},
  {&cd_S19750C8,    ABISELECT(24,12), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19750C10,    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
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2264C24,    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
    10, //immediately_derived
  0, 0},
  {&cd_S2264C24,    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
    9, //immediately_derived
  0, 0},
  {&cd_S19750C10,    ABISELECT(72,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19750C11,    ABISELECT(72,52), //bcp->offset
    28, //bcp->virtual_function_table_offset
    7, //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
    10, //immediately_derived
  0, 1},
  {&cd_S19750C6,    ABISELECT(8,4), //bcp->offset
    14, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19750C12,    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_S19750C15,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S19750C14,    ABISELECT(88,60), //bcp->offset
    37, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19750C10,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S2264C28,    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
    19, //immediately_derived
  0, 0},
  {&cd_S2264C28,    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
    18, //immediately_derived
  0, 0},
  {&cd_S19750C12,    ABISELECT(120,76), //bcp->offset
    54, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19750C13,    ABISELECT(104,68), //bcp->offset
    44, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19750C17[];
extern void _ZN9S19750C17D1Ev();
extern void _ZN9S19750C17D0Ev();
extern void ABISELECT(_ZTv0_n64_N9S19750C17D1Ev,_ZTv0_n32_N9S19750C17D1Ev)();
extern void ABISELECT(_ZThn8_N9S19750C17D1Ev,_ZThn4_N9S19750C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19750C17D0Ev,_ZTv0_n32_N9S19750C17D0Ev)();
extern void ABISELECT(_ZThn8_N9S19750C17D0Ev,_ZThn4_N9S19750C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19750C17D1Ev,_ZTv0_n28_N9S19750C17D1Ev)();
extern void ABISELECT(_ZThn72_N9S19750C17D1Ev,_ZThn52_N9S19750C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19750C17D0Ev,_ZTv0_n28_N9S19750C17D0Ev)();
extern void ABISELECT(_ZThn72_N9S19750C17D0Ev,_ZThn52_N9S19750C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19750C17D1Ev,_ZTv0_n16_N9S19750C17D1Ev)();
extern void ABISELECT(_ZThn88_N9S19750C17D1Ev,_ZThn60_N9S19750C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19750C17D0Ev,_ZTv0_n16_N9S19750C17D0Ev)();
extern void ABISELECT(_ZThn88_N9S19750C17D0Ev,_ZThn60_N9S19750C17D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19750C17D1Ev,_ZTv0_n32_N9S19750C17D1Ev)();
extern void ABISELECT(_ZThn104_N9S19750C17D1Ev,_ZThn68_N9S19750C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19750C17D0Ev,_ZTv0_n32_N9S19750C17D0Ev)();
extern void ABISELECT(_ZThn104_N9S19750C17D0Ev,_ZThn68_N9S19750C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19750C17[] = {
  ABISELECT(120,76),
  ABISELECT(104,68),
  ABISELECT(88,60),
  ABISELECT(88,60),
  ABISELECT(72,52),
  ABISELECT(68,52),
  0,
  ABISELECT(24,12),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
  (VTBL_ENTRY)&_ZN9S19750C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C17D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C17D1Ev,_ZTv0_n32_N9S19750C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C17D0Ev,_ZTv0_n32_N9S19750C17D0Ev),
  ABISELECT(44,40),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  ABISELECT(-48,-40),
  ABISELECT(-4,0),
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C17D1Ev,_ZTv0_n28_N9S19750C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C17D0Ev,_ZTv0_n28_N9S19750C17D0Ev),
  0,
  ABISELECT(-88,-60),
  ABISELECT(-88,-60),
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C17D1Ev,_ZTv0_n16_N9S19750C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C17D0Ev,_ZTv0_n16_N9S19750C17D0Ev),
  ABISELECT(-104,-68),
  ABISELECT(-104,-68),
  ABISELECT(16,8),
  ABISELECT(-80,-56),
  ABISELECT(-36,-16),
  ABISELECT(-104,-68),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C17D1Ev,_ZTv0_n32_N9S19750C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C17D0Ev,_ZTv0_n32_N9S19750C17D0Ev),
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
};
extern VTBL_ENTRY _ZTV9S19750C17[];
static  VTBL_ENTRY _tg__ZTV9S19750C12__A__9S19750C17[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C12[0]),
};
extern void _ZN8S19750C6D1Ev();
extern void _ZN8S19750C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19750C6__9S19750C17[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
  (VTBL_ENTRY)&_ZN8S19750C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19750C6D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C108S19750C6__9S19750C17[] = {
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C108S19750C6__9S19750C17[] = {
  ABISELECT(44,40),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__8S19750C6__9S19750C17[] = {
  ABISELECT(44,40),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S19750C6D1Ev,_ZThn48_N8S19750C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S19750C6D0Ev,_ZThn48_N8S19750C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C11__8S19750C6__9S19750C17[] = {
  ABISELECT(-64,-48),
  ABISELECT(-72,-52),
  ABISELECT(-48,-40),
  ABISELECT(-4,0),
  ABISELECT(-72,-52),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C17[] = {
  ABISELECT(44,40),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C8[0]),
};
extern void _ZN9S19750C11D1Ev();
extern void _ZN9S19750C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C11__9S19750C17[] = {
  ABISELECT(-72,-52),
  ABISELECT(-48,-40),
  ABISELECT(-4,0),
  ABISELECT(-72,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C11[0]),
  (VTBL_ENTRY)&_ZN9S19750C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C11D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C109S19750C11__A1__9S19750C17[] = {
  ABISELECT(-48,-40),
  ABISELECT(-4,0),
  ABISELECT(-72,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C109S19750C11__A1__9S19750C17[] = {
  ABISELECT(44,40),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C11__9S19750C17[] = {
  ABISELECT(44,40),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  (VTBL_ENTRY)&(_ZTI9S19750C11[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19750C14D1Ev,_ZTv0_n16_N9S19750C14D1Ev)();
extern void _ZN9S19750C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19750C14D0Ev,_ZTv0_n16_N9S19750C14D0Ev)();
extern void _ZN9S19750C14D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C14__9S19750C17[] = {
  0,
  0,
  ABISELECT(-88,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C14D1Ev,_ZTv0_n16_N9S19750C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C14D0Ev,_ZTv0_n16_N9S19750C14D0Ev),
};
extern void _ZN9S19750C15D1Ev();
extern void _ZN9S19750C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C15__9S19750C17[] = {
  ABISELECT(-88,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C15[0]),
  (VTBL_ENTRY)&_ZN9S19750C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C15D0Ev,
};
extern void _ZN9S19750C13D1Ev();
extern void _ZN9S19750C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C13__9S19750C17[] = {
  ABISELECT(-104,-68),
  ABISELECT(16,8),
  ABISELECT(-80,-56),
  ABISELECT(-36,-16),
  ABISELECT(-104,-68),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C13[0]),
  (VTBL_ENTRY)&_ZN9S19750C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C13D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C109S19750C13__A2__9S19750C17[] = {
  ABISELECT(-80,-56),
  ABISELECT(-36,-16),
  ABISELECT(-104,-68),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C109S19750C13__A2__9S19750C17[] = {
  ABISELECT(44,40),
  ABISELECT(-24,-12),
  ABISELECT(80,56),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C13__9S19750C17[] = {
  ABISELECT(44,40),
  ABISELECT(-24,-12),
  ABISELECT(80,56),
  (VTBL_ENTRY)&(_ZTI9S19750C13[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19750C12__9S19750C13__9S19750C17[] = {
  ABISELECT(-120,-76),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19750C13[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19750C12__A1__9S19750C17[] = {
  ABISELECT(-120,-76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C12[0]),
};
static  VTT_ENTRY vtt_S19750C17[] = {
  {&(_ZTV9S19750C17[12]),  12,57},
  {&(_tg__ZTV9S19750C12__A__9S19750C17[3]),  3,3},
  {&(_ZTV9S19750C17[22]),  22,57},
  {&(_ZTV9S19750C17[28]),  28,57},
  {&(_ZTV9S19750C17[35]),  35,57},
  {&(_ZTV9S19750C17[42]),  42,57},
  {&(_ZTV9S19750C17[42]),  42,57},
  {&(_ZTV9S19750C17[52]),  52,57},
  {&(_ZTV9S19750C17[57]),  57,57},
  {&(_tg__ZTV8S19750C6__9S19750C17[7]),  7,9},
  {&(_tg__ZTV9S19750C108S19750C6__9S19750C17[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C108S19750C6__9S19750C17[4]),  4,4},
  {&(_tg__ZTV8S19750C8__8S19750C6__9S19750C17[4]),  4,4},
  {&(_tg__ZTV9S19750C11__8S19750C6__9S19750C17[7]),  7,9},
  {&(_tg__ZTV8S19750C8__9S19750C17[4]),  4,4},
  {&(_tg__ZTV9S19750C11__9S19750C17[6]),  6,8},
  {&(_tg__ZTV9S19750C109S19750C11__A1__9S19750C17[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C109S19750C11__A1__9S19750C17[4]),  4,4},
  {&(_tg__ZTV8S19750C8__9S19750C11__9S19750C17[4]),  4,4},
  {&(_tg__ZTV9S19750C14__9S19750C17[5]),  5,7},
  {&(_tg__ZTV9S19750C14__9S19750C17[5]),  5,7},
  {&(_tg__ZTV9S19750C15__9S19750C17[3]),  3,5},
  {&(_tg__ZTV9S19750C13__9S19750C17[7]),  7,9},
  {&(_tg__ZTV9S19750C109S19750C13__A2__9S19750C17[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C109S19750C13__A2__9S19750C17[4]),  4,4},
  {&(_tg__ZTV8S19750C8__9S19750C13__9S19750C17[4]),  4,4},
  {&(_tg__ZTV9S19750C12__9S19750C13__9S19750C17[3]),  3,3},
  {&(_tg__ZTV9S19750C12__A1__9S19750C17[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19750C17[];
extern  VTBL_ENTRY _ZTV9S19750C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C17[];
static VTBL_ENTRY alt_thunk_names124[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C14D0Ev,_ZTv0_n16_N9S19750C14D0Ev), // 
  (VTBL_ENTRY)_ZN9S19750C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C14D1Ev,_ZTv0_n16_N9S19750C14D1Ev), // 
  (VTBL_ENTRY)_ZN9S19750C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19750C6D0Ev,_ZThn48_N8S19750C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19750C6D1Ev,_ZThn48_N8S19750C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C17D0Ev,_ZTv0_n16_N9S19750C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19750C17D0Ev,_ZThn60_N9S19750C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C17D1Ev,_ZTv0_n16_N9S19750C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19750C17D1Ev,_ZThn60_N9S19750C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19750C17D0Ev,_ZTv0_n28_N9S19750C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19750C17D0Ev,_ZThn52_N9S19750C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19750C17D1Ev,_ZTv0_n28_N9S19750C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S19750C17D1Ev,_ZThn52_N9S19750C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19750C17D0Ev,_ZTv0_n32_N9S19750C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19750C17D0Ev,_ZThn68_N9S19750C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19750C17D0Ev,_ZThn4_N9S19750C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19750C17D1Ev,_ZTv0_n32_N9S19750C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19750C17D1Ev,_ZThn68_N9S19750C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19750C17D1Ev,_ZThn4_N9S19750C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19750C17 = {  "S19750C17", // class name
  bases_S19750C17, 20,
  &(vtc_S19750C17[0]), // expected_vtbl_contents
  &(vtt_S19750C17[0]), // expected_vtt_contents
  ABISELECT(128,80), // object size
  NSPAIRA(_ZTI9S19750C17),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19750C17),57, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19750C17),28, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names124,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19750C16  : virtual S19750C15 , virtual S19750C17 , virtual S19750C4 , S2264C24 {
  ::S19750C5 s19750c16f0;
  ~S19750C16(); // tgen
  S19750C16(); // tgen
};
//SIG(-1 S19750C16) C1{ VBC2{ VBC3{ m} vd} VBC4{ VBC5{ m} VBC6{ BC7{ m} VBC8{ VBC3 VBC7 Fi[9]} BC9{ VBC3 VBC7 VBC8 vd Fp} BC3 VBC10{ VBC7 BC3 BC9 VBC5 vd} vd} BC11{ BC7 VBC5} VBC12{ VBC2 vd FC5} VBC13{ BC9 BC7 VBC11 vd} vd} VBC14{ VBC15{ VBC6 VBC11 VBC13 BC3 v1} FC12} BC3 FC15}


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

static void Test_S19750C16()
{
  extern Class_Descriptor cd_S19750C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(33,42)];
    init_test(&cd_S19750C16, buf);
    S19750C16 *dp, &lv = *(dp=new (buf) S19750C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(256,164), "sizeof(S19750C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19750C16)");
    check_base_class_offset(lv, (S2264C24*)(S19750C15*), ABISELECT(112,76), "S19750C16");
    check_base_class_offset(lv, (S2264C24*)(S19750C8*), ABISELECT(112,76), "S19750C16");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C6*), ABISELECT(112,76), "S19750C16");
    check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C11*), ABISELECT(112,76), "S19750C16");
    check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C13*), ABISELECT(112,76), "S19750C16");
    check_base_class_offset(lv, (S19750C15*), ABISELECT(200,136), "S19750C16");
    check_base_class_offset(lv, (S19750C15*)(S19750C14*), ABISELECT(200,136), "S19750C16");
    check_base_class_offset(lv, (S2264C38*)(S19750C17*), 0, "S19750C16");
    check_base_class_offset(lv, (S2264C38*)(S19750C11*), 0, "S19750C16");
    /*is_ambiguous_... S19750C17::S19750C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19750C12*)(S19750C17*), 0, "S19750C16");
    /*is_ambiguous_... S19750C16::S19750C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19750C12*), 0, "S19750C16");
    /*is_ambiguous_... S19750C6::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C6*), ABISELECT(120,80), "S19750C16");
    check_base_class_offset(lv, (S2264C28*)(S19750C8*), ABISELECT(180,128), "S19750C16");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C6*), ABISELECT(180,128), "S19750C16");
    check_base_class_offset(lv, (S2264C28*)(S19750C11*), ABISELECT(180,128), "S19750C16");
    check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C11*), ABISELECT(180,128), "S19750C16");
    check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C13*), ABISELECT(180,128), "S19750C16");
    check_base_class_offset(lv, (S19750C8*)(S19750C6*), ABISELECT(136,88), "S19750C16");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C6*), ABISELECT(136,88), "S19750C16");
    check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C11*), ABISELECT(136,88), "S19750C16");
    check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C13*), ABISELECT(136,88), "S19750C16");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S19750C10*)(S19750C6*), ABISELECT(120,80), "S19750C16");
    /*is_ambiguous_... S19750C6::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C6*), ABISELECT(120,80), "S19750C16");
    /*is_ambiguous_... S19750C11::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C11*), ABISELECT(184,128), "S19750C16");
    check_base_class_offset(lv, (S19750C10*)(S19750C11*), ABISELECT(184,128), "S19750C16");
    check_base_class_offset(lv, (S19750C11*)(S19750C6*), ABISELECT(184,128), "S19750C16");
    check_base_class_offset(lv, (S19750C6*)(S19750C17*), ABISELECT(120,80), "S19750C16");
    check_base_class_offset(lv, (S19750C6*)(S19750C5*), ABISELECT(120,80), "S19750C16");
    /*is_ambiguous_... S19750C17::S19750C12 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C12*)(S19750C17*), 0, "S19750C16");
    /*is_ambiguous_... S19750C17::S19750C12 */ AMB_check_base_class_offset(lv, (S19750C12*)(S19750C17*), 0, "S19750C16");
    check_base_class_offset(lv, (S19750C14*)(S19750C17*), ABISELECT(200,136), "S19750C16");
    check_base_class_offset(lv, (S19750C10*)(S19750C13*), ABISELECT(216,144), "S19750C16");
    /*is_ambiguous_... S19750C13::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C13*), ABISELECT(216,144), "S19750C16");
    /*is_ambiguous_... S19750C16::S19750C12 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C12*), ABISELECT(232,152), "S19750C16");
    check_base_class_offset(lv, (S19750C12*)(S19750C13*), ABISELECT(232,152), "S19750C16");
    check_base_class_offset(lv, (S19750C12*)(S19750C5*), ABISELECT(232,152), "S19750C16");
    check_base_class_offset(lv, (S19750C13*)(S19750C17*), ABISELECT(216,144), "S19750C16");
    check_base_class_offset(lv, (S19750C13*)(S19750C5*), ABISELECT(216,144), "S19750C16");
    check_base_class_offset(lv, (S19750C17*), 0, "S19750C16");
    /*is_ambiguous_... S19750C5::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C5*), ABISELECT(232,152), "S19750C16");
    check_base_class_offset(lv, (S19750C5*)(S19750C4*), ABISELECT(232,152), "S19750C16");
    check_base_class_offset(lv, (S19750C4*), ABISELECT(232,152), "S19750C16");
    /*is_ambiguous_... S19750C16::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*), 0, "S19750C16");
    check_field_offset(lv, s19750c16f0, ABISELECT(8,4), "S19750C16.s19750c16f0");
    test_class_info(&lv, &cd_S19750C16);
    dp->~S19750C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19750C16(Test_S19750C16, "S19750C16", ABISELECT(256,164));

#else // __cplusplus

extern void _ZN9S19750C16C1Ev();
extern void _ZN9S19750C16D1Ev();
Name_Map name_map_S19750C16[] = {
  NSPAIR(_ZN9S19750C16C1Ev),
  NSPAIR(_ZN9S19750C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19750C15;
extern VTBL_ENTRY _ZTI9S19750C15[];
extern  VTBL_ENTRY _ZTV9S19750C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C15[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C8;
extern VTBL_ENTRY _ZTI8S19750C8[];
extern  VTBL_ENTRY _ZTV8S19750C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C8[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S19750C11;
extern VTBL_ENTRY _ZTI9S19750C11[];
extern  VTBL_ENTRY _ZTV9S19750C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C11[];
extern Class_Descriptor cd_S19750C6;
extern VTBL_ENTRY _ZTI8S19750C6[];
extern  VTBL_ENTRY _ZTV8S19750C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C6[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C12;
extern VTBL_ENTRY _ZTI9S19750C12[];
extern  VTBL_ENTRY _ZTV9S19750C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C12[];
extern Class_Descriptor cd_S19750C14;
extern VTBL_ENTRY _ZTI9S19750C14[];
extern  VTBL_ENTRY _ZTV9S19750C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C14[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C12;
extern VTBL_ENTRY _ZTI9S19750C12[];
extern  VTBL_ENTRY _ZTV9S19750C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C12[];
extern Class_Descriptor cd_S19750C13;
extern VTBL_ENTRY _ZTI9S19750C13[];
extern  VTBL_ENTRY _ZTV9S19750C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C13[];
extern Class_Descriptor cd_S19750C17;
extern VTBL_ENTRY _ZTI9S19750C17[];
extern  VTBL_ENTRY _ZTV9S19750C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C17[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19750C5;
extern VTBL_ENTRY _ZTI8S19750C5[];
extern  VTBL_ENTRY _ZTV8S19750C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C5[];
extern Class_Descriptor cd_S19750C4;
extern VTBL_ENTRY _ZTI8S19750C4[];
extern  VTBL_ENTRY _ZTV8S19750C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C4[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
static Base_Class bases_S19750C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C24,    ABISELECT(112,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
    1, //immediately_derived
  0, 1},
  {&cd_S19750C15,    ABISELECT(200,136), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    ABISELECT(120,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
    11, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(180,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
    5, //immediately_derived
  0, 1},
  {&cd_S19750C8,    ABISELECT(136,88), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19750C10,    ABISELECT(120,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2264C24,    ABISELECT(120,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
    11, //immediately_derived
  0, 0},
  {&cd_S2264C24,    ABISELECT(184,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
    10, //immediately_derived
  0, 0},
  {&cd_S19750C10,    ABISELECT(184,128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S19750C11,    ABISELECT(184,128), //bcp->offset
    32, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S19750C6,    ABISELECT(120,80), //bcp->offset
    18, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19750C12,    0, //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
    11, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19750C14,    ABISELECT(200,136), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S19750C10,    ABISELECT(216,144), //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
    9, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(216,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
    19, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(232,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
    18, //immediately_derived
  0, 0},
  {&cd_S19750C12,    ABISELECT(232,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19750C13,    ABISELECT(216,144), //bcp->offset
    48, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S19750C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C24,    ABISELECT(232,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
    22, //immediately_derived
  0, 0},
  {&cd_S19750C5,    ABISELECT(232,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19750C4,    ABISELECT(232,152), //bcp->offset
    58, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI9S19750C16[];
extern void _ZN9S19750C16D1Ev();
extern void _ZN9S19750C16D0Ev();
extern void ABISELECT(_ZTv0_n64_N9S19750C16D1Ev,_ZTv0_n32_N9S19750C16D1Ev)();
extern void ABISELECT(_ZThn120_N9S19750C16D1Ev,_ZThn80_N9S19750C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19750C16D0Ev,_ZTv0_n32_N9S19750C16D0Ev)();
extern void ABISELECT(_ZThn120_N9S19750C16D0Ev,_ZThn80_N9S19750C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19750C16D1Ev,_ZTv0_n28_N9S19750C16D1Ev)();
extern void ABISELECT(_ZThn184_N9S19750C16D1Ev,_ZThn128_N9S19750C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19750C16D0Ev,_ZTv0_n28_N9S19750C16D0Ev)();
extern void ABISELECT(_ZThn184_N9S19750C16D0Ev,_ZThn128_N9S19750C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19750C16D1Ev,_ZTv0_n16_N9S19750C16D1Ev)();
extern void ABISELECT(_ZThn200_N9S19750C16D1Ev,_ZThn136_N9S19750C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19750C16D0Ev,_ZTv0_n16_N9S19750C16D0Ev)();
extern void ABISELECT(_ZThn200_N9S19750C16D0Ev,_ZThn136_N9S19750C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19750C16D1Ev,_ZTv0_n32_N9S19750C16D1Ev)();
extern void ABISELECT(_ZThn216_N9S19750C16D1Ev,_ZThn144_N9S19750C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19750C16D0Ev,_ZTv0_n32_N9S19750C16D0Ev)();
extern void ABISELECT(_ZThn216_N9S19750C16D0Ev,_ZThn144_N9S19750C16D0Ev)() __attribute__((weak));
extern void _ZN8S19750C52v1Ev();
extern void ABISELECT(_ZTv0_n96_N9S19750C16D1Ev,_ZTv0_n48_N9S19750C16D1Ev)();
extern void ABISELECT(_ZThn232_N9S19750C16D1Ev,_ZThn152_N9S19750C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19750C16D0Ev,_ZTv0_n48_N9S19750C16D0Ev)();
extern void ABISELECT(_ZThn232_N9S19750C16D0Ev,_ZThn152_N9S19750C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19750C16[] = {
  ABISELECT(232,152),
  ABISELECT(232,152),
  0,
  0,
  ABISELECT(232,152),
  ABISELECT(216,144),
  ABISELECT(200,136),
  ABISELECT(200,136),
  ABISELECT(184,128),
  ABISELECT(180,128),
  ABISELECT(112,76),
  ABISELECT(136,88),
  ABISELECT(120,80),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  (VTBL_ENTRY)&_ZN9S19750C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C16D0Ev,
  ABISELECT(-120,-80),
  ABISELECT(-120,-80),
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(-8,-4),
  ABISELECT(-120,-80),
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C16D1Ev,_ZTv0_n32_N9S19750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C16D0Ev,_ZTv0_n32_N9S19750C16D0Ev),
  ABISELECT(44,40),
  ABISELECT(-24,-12),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  ABISELECT(-184,-128),
  ABISELECT(-184,-128),
  ABISELECT(-48,-40),
  ABISELECT(-4,0),
  ABISELECT(-72,-52),
  ABISELECT(-184,-128),
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C16D1Ev,_ZTv0_n28_N9S19750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C16D0Ev,_ZTv0_n28_N9S19750C16D0Ev),
  0,
  ABISELECT(-200,-136),
  ABISELECT(-88,-60),
  ABISELECT(-200,-136),
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C16D1Ev,_ZTv0_n16_N9S19750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C16D0Ev,_ZTv0_n16_N9S19750C16D0Ev),
  ABISELECT(-216,-144),
  ABISELECT(-216,-144),
  ABISELECT(16,8),
  ABISELECT(-80,-56),
  ABISELECT(-36,-16),
  ABISELECT(-104,-68),
  ABISELECT(-216,-144),
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C16D1Ev,_ZTv0_n32_N9S19750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C16D0Ev,_ZTv0_n32_N9S19750C16D0Ev),
  0,
  ABISELECT(-232,-152),
  0,
  ABISELECT(-16,-8),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-52,-24),
  ABISELECT(-120,-76),
  ABISELECT(-96,-64),
  ABISELECT(-112,-72),
  ABISELECT(-232,-152),
  ABISELECT(-232,-152),
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  (VTBL_ENTRY)&_ZN8S19750C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19750C16D1Ev,_ZTv0_n48_N9S19750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19750C16D0Ev,_ZTv0_n48_N9S19750C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S19750C16[];
extern void _ZN9S19750C15D1Ev();
extern void _ZN9S19750C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C15__9S19750C16[] = {
  ABISELECT(-88,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C15[0]),
  (VTBL_ENTRY)&_ZN9S19750C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C15D0Ev,
};
extern void _ZN9S19750C17D1Ev();
extern void _ZN9S19750C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C17__9S19750C16[] = {
  ABISELECT(232,152),
  ABISELECT(216,144),
  ABISELECT(200,136),
  ABISELECT(200,136),
  ABISELECT(184,128),
  ABISELECT(180,128),
  ABISELECT(112,76),
  ABISELECT(136,88),
  ABISELECT(120,80),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
  (VTBL_ENTRY)&_ZN9S19750C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19750C129S19750C17__9S19750C16[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C12[0]),
};
extern void ABISELECT(_ZTv0_n64_N9S19750C17D1Ev,_ZTv0_n32_N9S19750C17D1Ev)();
extern void ABISELECT(_ZThn120_N9S19750C17D1Ev,_ZThn80_N9S19750C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19750C17D0Ev,_ZTv0_n32_N9S19750C17D0Ev)();
extern void ABISELECT(_ZThn120_N9S19750C17D0Ev,_ZThn80_N9S19750C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19750C6__9S19750C17__9S19750C16[] = {
  ABISELECT(-120,-80),
  ABISELECT(-120,-80),
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(-8,-4),
  ABISELECT(-120,-80),
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C17D1Ev,_ZTv0_n32_N9S19750C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C17D0Ev,_ZTv0_n32_N9S19750C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C17__9S19750C16[] = {
  ABISELECT(44,40),
  ABISELECT(-24,-12),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
};
extern void ABISELECT(_ZTv0_n56_N9S19750C17D1Ev,_ZTv0_n28_N9S19750C17D1Ev)();
extern void ABISELECT(_ZThn184_N9S19750C17D1Ev,_ZThn128_N9S19750C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19750C17D0Ev,_ZTv0_n28_N9S19750C17D0Ev)();
extern void ABISELECT(_ZThn184_N9S19750C17D0Ev,_ZThn128_N9S19750C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C11__9S19750C17__9S19750C16[] = {
  ABISELECT(-184,-128),
  ABISELECT(-184,-128),
  ABISELECT(-48,-40),
  ABISELECT(-4,0),
  ABISELECT(-72,-52),
  ABISELECT(-184,-128),
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C17D1Ev,_ZTv0_n28_N9S19750C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C17D0Ev,_ZTv0_n28_N9S19750C17D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19750C17D1Ev,_ZTv0_n16_N9S19750C17D1Ev)();
extern void ABISELECT(_ZThn200_N9S19750C17D1Ev,_ZThn136_N9S19750C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19750C17D0Ev,_ZTv0_n16_N9S19750C17D0Ev)();
extern void ABISELECT(_ZThn200_N9S19750C17D0Ev,_ZThn136_N9S19750C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C14__9S19750C17__9S19750C16[] = {
  0,
  ABISELECT(-200,-136),
  ABISELECT(-88,-60),
  ABISELECT(-200,-136),
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C17D1Ev,_ZTv0_n16_N9S19750C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C17D0Ev,_ZTv0_n16_N9S19750C17D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N9S19750C17D1Ev,_ZTv0_n32_N9S19750C17D1Ev)();
extern void ABISELECT(_ZThn216_N9S19750C17D1Ev,_ZThn144_N9S19750C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19750C17D0Ev,_ZTv0_n32_N9S19750C17D0Ev)();
extern void ABISELECT(_ZThn216_N9S19750C17D0Ev,_ZThn144_N9S19750C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C13__9S19750C17__9S19750C16[] = {
  ABISELECT(-216,-144),
  ABISELECT(-216,-144),
  ABISELECT(16,8),
  ABISELECT(-80,-56),
  ABISELECT(-36,-16),
  ABISELECT(-104,-68),
  ABISELECT(-216,-144),
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C17D1Ev,_ZTv0_n32_N9S19750C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C17D0Ev,_ZTv0_n32_N9S19750C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19750C12__A1__9S19750C17__9S19750C16[] = {
  ABISELECT(-232,-152),
  ABISELECT(-232,-152),
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
};
extern void _ZN8S19750C6D1Ev();
extern void _ZN8S19750C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19750C6__9S19750C16[] = {
  ABISELECT(-120,-80),
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
  (VTBL_ENTRY)&_ZN8S19750C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19750C6D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C108S19750C6__9S19750C16[] = {
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C108S19750C6__9S19750C16[] = {
  ABISELECT(44,40),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__8S19750C6__9S19750C16[] = {
  ABISELECT(44,40),
  ABISELECT(-24,-12),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S19750C6D1Ev,_ZThn48_N8S19750C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S19750C6D0Ev,_ZThn48_N8S19750C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C11__8S19750C6__9S19750C16[] = {
  ABISELECT(-64,-48),
  ABISELECT(-184,-128),
  ABISELECT(-48,-40),
  ABISELECT(-4,0),
  ABISELECT(-72,-52),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C16[] = {
  ABISELECT(44,40),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C8[0]),
};
extern void _ZN9S19750C11D1Ev();
extern void _ZN9S19750C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C11__9S19750C16[] = {
  ABISELECT(-184,-128),
  ABISELECT(-48,-40),
  ABISELECT(-4,0),
  ABISELECT(-72,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C11[0]),
  (VTBL_ENTRY)&_ZN9S19750C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C11D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C109S19750C11__A1__9S19750C16[] = {
  ABISELECT(-48,-40),
  ABISELECT(-4,0),
  ABISELECT(-72,-52),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C109S19750C11__A1__9S19750C16[] = {
  ABISELECT(44,40),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C11__9S19750C16[] = {
  ABISELECT(44,40),
  ABISELECT(-24,-12),
  ABISELECT(48,40),
  (VTBL_ENTRY)&(_ZTI9S19750C11[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19750C14D1Ev,_ZTv0_n16_N9S19750C14D1Ev)();
extern void _ZN9S19750C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19750C14D0Ev,_ZTv0_n16_N9S19750C14D0Ev)();
extern void _ZN9S19750C14D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C14__9S19750C16[] = {
  0,
  0,
  ABISELECT(-88,-60),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C14D1Ev,_ZTv0_n16_N9S19750C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C14D0Ev,_ZTv0_n16_N9S19750C14D0Ev),
};
extern void _ZN9S19750C13D1Ev();
extern void _ZN9S19750C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C13__9S19750C16[] = {
  ABISELECT(-216,-144),
  ABISELECT(16,8),
  ABISELECT(-80,-56),
  ABISELECT(-36,-16),
  ABISELECT(-104,-68),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C13[0]),
  (VTBL_ENTRY)&_ZN9S19750C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C13D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C109S19750C13__A2__9S19750C16[] = {
  ABISELECT(-80,-56),
  ABISELECT(-36,-16),
  ABISELECT(-104,-68),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C109S19750C13__A2__9S19750C16[] = {
  ABISELECT(44,40),
  ABISELECT(-24,-12),
  ABISELECT(80,56),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C13__9S19750C16[] = {
  ABISELECT(44,40),
  ABISELECT(-24,-12),
  ABISELECT(80,56),
  (VTBL_ENTRY)&(_ZTI9S19750C13[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19750C12__9S19750C13__9S19750C16[] = {
  ABISELECT(-232,-152),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19750C13[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19750C12__A1__9S19750C16[] = {
  ABISELECT(-232,-152),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C12[0]),
};
extern void _ZN8S19750C52v1Ev();
extern void ABISELECT(_ZTv0_n96_N8S19750C4D1Ev,_ZTv0_n48_N8S19750C4D1Ev)();
extern void _ZN8S19750C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19750C4D0Ev,_ZTv0_n48_N8S19750C4D0Ev)();
extern void _ZN8S19750C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19750C4__9S19750C16[] = {
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-52,-24),
  ABISELECT(-120,-76),
  ABISELECT(-96,-64),
  ABISELECT(-112,-72),
  ABISELECT(-232,-152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C4[0]),
  (VTBL_ENTRY)&_ZN8S19750C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19750C4D1Ev,_ZTv0_n48_N8S19750C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19750C4D0Ev,_ZTv0_n48_N8S19750C4D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S19750C4D1Ev,_ZTv0_n32_N8S19750C4D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S19750C4D0Ev,_ZTv0_n32_N8S19750C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19750C6__8S19750C4__9S19750C16[] = {
  ABISELECT(112,72),
  ABISELECT(-120,-80),
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(-8,-4),
  ABISELECT(112,72),
  (VTBL_ENTRY)&(_ZTI8S19750C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C4D1Ev,_ZTv0_n32_N8S19750C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C4D0Ev,_ZTv0_n32_N8S19750C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__8S19750C4__9S19750C16[] = {
  ABISELECT(44,40),
  ABISELECT(-24,-12),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI8S19750C4[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S19750C4D1Ev,_ZTv0_n28_N8S19750C4D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S19750C4D0Ev,_ZTv0_n28_N8S19750C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19750C11__8S19750C4__9S19750C16[] = {
  ABISELECT(48,24),
  ABISELECT(-184,-128),
  ABISELECT(-48,-40),
  ABISELECT(-4,0),
  ABISELECT(-72,-52),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S19750C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C4D1Ev,_ZTv0_n28_N8S19750C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C4D0Ev,_ZTv0_n28_N8S19750C4D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S19750C4D1Ev,_ZTv0_n32_N8S19750C4D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S19750C4D0Ev,_ZTv0_n32_N8S19750C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19750C13__8S19750C4__9S19750C16[] = {
  ABISELECT(16,8),
  ABISELECT(-216,-144),
  ABISELECT(16,8),
  ABISELECT(-80,-56),
  ABISELECT(-36,-16),
  ABISELECT(-104,-68),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19750C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C4D1Ev,_ZTv0_n32_N8S19750C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C4D0Ev,_ZTv0_n32_N8S19750C4D0Ev),
};
extern void _ZN8S19750C52v1Ev();
extern void _ZN8S19750C5D1Ev();
extern void _ZN8S19750C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19750C5__9S19750C16[] = {
  ABISELECT(-16,-8),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-52,-24),
  ABISELECT(-120,-76),
  ABISELECT(-96,-64),
  ABISELECT(-112,-72),
  ABISELECT(-232,-152),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C5[0]),
  (VTBL_ENTRY)&_ZN8S19750C52v1Ev,
  (VTBL_ENTRY)&_ZN8S19750C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19750C5D0Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S19750C5D1Ev,_ZTv0_n32_N8S19750C5D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S19750C5D0Ev,_ZTv0_n32_N8S19750C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19750C6__8S19750C5__9S19750C16[] = {
  ABISELECT(112,72),
  ABISELECT(-120,-80),
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(-8,-4),
  ABISELECT(112,72),
  (VTBL_ENTRY)&(_ZTI8S19750C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C5D1Ev,_ZTv0_n32_N8S19750C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C5D0Ev,_ZTv0_n32_N8S19750C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__8S19750C5__9S19750C16[] = {
  ABISELECT(44,40),
  ABISELECT(-24,-12),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI8S19750C5[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S19750C5D1Ev,_ZTv0_n28_N8S19750C5D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S19750C5D0Ev,_ZTv0_n28_N8S19750C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19750C11__8S19750C5__9S19750C16[] = {
  ABISELECT(48,24),
  ABISELECT(-184,-128),
  ABISELECT(-48,-40),
  ABISELECT(-4,0),
  ABISELECT(-72,-52),
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S19750C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C5D1Ev,_ZTv0_n28_N8S19750C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C5D0Ev,_ZTv0_n28_N8S19750C5D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S19750C5D1Ev,_ZTv0_n32_N8S19750C5D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S19750C5D0Ev,_ZTv0_n32_N8S19750C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19750C13__8S19750C5__9S19750C16[] = {
  ABISELECT(16,8),
  ABISELECT(-216,-144),
  ABISELECT(16,8),
  ABISELECT(-80,-56),
  ABISELECT(-36,-16),
  ABISELECT(-104,-68),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19750C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C5D1Ev,_ZTv0_n32_N8S19750C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C5D0Ev,_ZTv0_n32_N8S19750C5D0Ev),
};
static  VTT_ENTRY vtt_S19750C16[] = {
  {&(_ZTV9S19750C16[16]),  16,74},
  {&(_ZTV9S19750C16[46]),  46,74},
  {&(_ZTV9S19750C16[16]),  16,74},
  {&(_ZTV9S19750C16[26]),  26,74},
  {&(_ZTV9S19750C16[32]),  32,74},
  {&(_ZTV9S19750C16[39]),  39,74},
  {&(_ZTV9S19750C16[46]),  46,74},
  {&(_ZTV9S19750C16[56]),  56,74},
  {&(_ZTV9S19750C16[71]),  71,74},
  {&(_ZTV9S19750C16[71]),  71,74},
  {&(_ZTV9S19750C16[71]),  71,74},
  {&(_tg__ZTV9S19750C15__9S19750C16[3]),  3,5},
  {&(_tg__ZTV9S19750C17__9S19750C16[12]),  12,14},
  {&(_tg__ZTV9S19750C129S19750C17__9S19750C16[3]),  3,3},
  {&(_tg__ZTV8S19750C6__9S19750C17__9S19750C16[8]),  8,10},
  {&(_tg__ZTV8S19750C8__9S19750C17__9S19750C16[4]),  4,4},
  {&(_tg__ZTV9S19750C11__9S19750C17__9S19750C16[7]),  7,9},
  {&(_tg__ZTV9S19750C14__9S19750C17__9S19750C16[5]),  5,7},
  {&(_tg__ZTV9S19750C14__9S19750C17__9S19750C16[5]),  5,7},
  {&(_tg__ZTV9S19750C13__9S19750C17__9S19750C16[8]),  8,10},
  {&(_tg__ZTV9S19750C12__A1__9S19750C17__9S19750C16[3]),  3,3},
  {&(_tg__ZTV8S19750C6__9S19750C16[7]),  7,9},
  {&(_tg__ZTV9S19750C108S19750C6__9S19750C16[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C108S19750C6__9S19750C16[4]),  4,4},
  {&(_tg__ZTV8S19750C8__8S19750C6__9S19750C16[4]),  4,4},
  {&(_tg__ZTV9S19750C11__8S19750C6__9S19750C16[7]),  7,9},
  {&(_tg__ZTV8S19750C8__9S19750C16[4]),  4,4},
  {&(_tg__ZTV9S19750C11__9S19750C16[6]),  6,8},
  {&(_tg__ZTV9S19750C109S19750C11__A1__9S19750C16[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C109S19750C11__A1__9S19750C16[4]),  4,4},
  {&(_tg__ZTV8S19750C8__9S19750C11__9S19750C16[4]),  4,4},
  {&(_tg__ZTV9S19750C14__9S19750C16[5]),  5,7},
  {&(_tg__ZTV9S19750C14__9S19750C16[5]),  5,7},
  {&(_tg__ZTV9S19750C13__9S19750C16[7]),  7,9},
  {&(_tg__ZTV9S19750C109S19750C13__A2__9S19750C16[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C109S19750C13__A2__9S19750C16[4]),  4,4},
  {&(_tg__ZTV8S19750C8__9S19750C13__9S19750C16[4]),  4,4},
  {&(_tg__ZTV9S19750C12__9S19750C13__9S19750C16[3]),  3,3},
  {&(_tg__ZTV9S19750C12__A1__9S19750C16[3]),  3,3},
  {&(_tg__ZTV8S19750C4__9S19750C16[13]),  13,16},
  {&(_tg__ZTV8S19750C4__9S19750C16[13]),  13,16},
  {&(_tg__ZTV8S19750C6__8S19750C4__9S19750C16[8]),  8,10},
  {&(_tg__ZTV8S19750C8__8S19750C4__9S19750C16[4]),  4,4},
  {&(_tg__ZTV9S19750C11__8S19750C4__9S19750C16[7]),  7,9},
  {&(_tg__ZTV8S19750C4__9S19750C16[13]),  13,16},
  {&(_tg__ZTV9S19750C13__8S19750C4__9S19750C16[8]),  8,10},
  {&(_tg__ZTV8S19750C5__9S19750C16[10]),  10,13},
  {&(_tg__ZTV8S19750C6__8S19750C5__9S19750C16[8]),  8,10},
  {&(_tg__ZTV8S19750C8__8S19750C5__9S19750C16[4]),  4,4},
  {&(_tg__ZTV9S19750C11__8S19750C5__9S19750C16[7]),  7,9},
  {&(_tg__ZTV8S19750C5__9S19750C16[10]),  10,13},
  {&(_tg__ZTV9S19750C13__8S19750C5__9S19750C16[8]),  8,10},
};
extern VTBL_ENTRY _ZTI9S19750C16[];
extern  VTBL_ENTRY _ZTV9S19750C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C16[];
static VTBL_ENTRY alt_thunk_names125[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19750C4D0Ev,_ZTv0_n48_N8S19750C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19750C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19750C4D1Ev,_ZTv0_n48_N8S19750C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19750C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C14D0Ev,_ZTv0_n16_N9S19750C14D0Ev), // 
  (VTBL_ENTRY)_ZN9S19750C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C14D1Ev,_ZTv0_n16_N9S19750C14D1Ev), // 
  (VTBL_ENTRY)_ZN9S19750C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19750C6D0Ev,_ZThn48_N8S19750C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19750C6D1Ev,_ZThn48_N8S19750C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C17D0Ev,_ZTv0_n16_N9S19750C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S19750C17D0Ev,_ZThn136_N9S19750C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C17D1Ev,_ZTv0_n16_N9S19750C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S19750C17D1Ev,_ZThn136_N9S19750C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19750C17D0Ev,_ZTv0_n28_N9S19750C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S19750C17D0Ev,_ZThn128_N9S19750C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19750C17D1Ev,_ZTv0_n28_N9S19750C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S19750C17D1Ev,_ZThn128_N9S19750C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19750C17D0Ev,_ZTv0_n32_N9S19750C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S19750C17D0Ev,_ZThn144_N9S19750C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19750C17D0Ev,_ZThn80_N9S19750C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19750C17D1Ev,_ZTv0_n32_N9S19750C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S19750C17D1Ev,_ZThn144_N9S19750C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19750C17D1Ev,_ZThn80_N9S19750C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19750C16D0Ev,_ZTv0_n48_N9S19750C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S19750C16D0Ev,_ZThn152_N9S19750C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19750C16D1Ev,_ZTv0_n48_N9S19750C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn232_N9S19750C16D1Ev,_ZThn152_N9S19750C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C16D0Ev,_ZTv0_n16_N9S19750C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S19750C16D0Ev,_ZThn136_N9S19750C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C16D1Ev,_ZTv0_n16_N9S19750C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N9S19750C16D1Ev,_ZThn136_N9S19750C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19750C16D0Ev,_ZTv0_n28_N9S19750C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S19750C16D0Ev,_ZThn128_N9S19750C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19750C16D1Ev,_ZTv0_n28_N9S19750C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N9S19750C16D1Ev,_ZThn128_N9S19750C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19750C16D0Ev,_ZTv0_n32_N9S19750C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S19750C16D0Ev,_ZThn144_N9S19750C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19750C16D0Ev,_ZThn80_N9S19750C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19750C16D1Ev,_ZTv0_n32_N9S19750C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S19750C16D1Ev,_ZThn144_N9S19750C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19750C16D1Ev,_ZThn80_N9S19750C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19750C16 = {  "S19750C16", // class name
  bases_S19750C16, 25,
  &(vtc_S19750C16[0]), // expected_vtbl_contents
  &(vtt_S19750C16[0]), // expected_vtt_contents
  ABISELECT(256,164), // object size
  NSPAIRA(_ZTI9S19750C16),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19750C16),74, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19750C16),52, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names125,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19750C20  : S19750C6 , S19750C12 , S19750C11 , S2264C24 {
  virtual  ~S19750C20(); // _ZN9S19750C20D2Ev
  S19750C20(); // tgen
};
//SIG(-1 S19750C20) C1{ BC2{ BC3{ m} VBC4{ VBC5{ m} VBC3 Fi[9]} BC6{ VBC5 VBC3 VBC4 vd Fp} BC5 VBC7{ VBC3 BC5 BC6 VBC8{ m} vd} vd} BC9{ BC3 VBC8} BC7 BC5 vd}


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

static void Test_S19750C20()
{
  extern Class_Descriptor cd_S19750C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,19)];
    init_test(&cd_S19750C20, buf);
    S19750C20 *dp, &lv = *(dp=new (buf) S19750C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,72), "sizeof(S19750C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19750C20)");
    /*is_ambiguous_... S19750C6::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C6*), 0, "S19750C20");
    check_base_class_offset(lv, (S2264C24*)(S19750C8*), ABISELECT(84,60), "S19750C20");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C6*), ABISELECT(84,60), "S19750C20");
    /*is_ambiguous_... S19750C20::S19750C11 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C11*), ABISELECT(84,60), "S19750C20");
    /*is_ambiguous_... S19750C20::S19750C11 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C11*), ABISELECT(84,60), "S19750C20");
    check_base_class_offset(lv, (S2264C28*)(S19750C8*), ABISELECT(84,60), "S19750C20");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C6*), ABISELECT(84,60), "S19750C20");
    /*is_ambiguous_... S19750C20::S19750C11 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C11*), ABISELECT(84,60), "S19750C20");
    /*is_ambiguous_... S19750C20::S19750C11 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C11*), ABISELECT(84,60), "S19750C20");
    /*is_ambiguous_... S19750C20::S19750C11 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C11*), ABISELECT(84,60), "S19750C20");
    /*is_ambiguous_... S19750C20::S19750C11 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C11*), ABISELECT(84,60), "S19750C20");
    check_base_class_offset(lv, (S19750C8*)(S19750C6*), ABISELECT(40,20), "S19750C20");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C6*), ABISELECT(40,20), "S19750C20");
    /*is_ambiguous_... S19750C20::S19750C11 */ AMB_check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C11*), ABISELECT(40,20), "S19750C20");
    /*is_ambiguous_... S19750C20::S19750C11 */ AMB_check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C11*), ABISELECT(40,20), "S19750C20");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S19750C10*)(S19750C6*), 0, "S19750C20");
    /*is_ambiguous_... S19750C6::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C6*), 0, "S19750C20");
    /*is_ambiguous_... S19750C20::S19750C11 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C11*), ABISELECT(88,64), "S19750C20");
    /*is_ambiguous_... S19750C20::S19750C11 */ AMB_check_base_class_offset(lv, (S19750C10*)(S19750C11*), ABISELECT(88,64), "S19750C20");
    /*is_ambiguous_... S19750C20::S19750C11 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19750C11*), 0, "S19750C20");
    check_base_class_offset(lv, (S2264C38*)(S19750C12*), 0, "S19750C20");
    /*is_ambiguous_... S19750C20::S19750C11 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19750C11*), 0, "S19750C20");
    check_base_class_offset(lv, (S19750C11*)(S19750C6*), ABISELECT(88,64), "S19750C20");
    check_base_class_offset(lv, (S19750C6*), 0, "S19750C20");
    check_base_class_offset(lv, (S2264C28*)(S19750C12*), ABISELECT(16,8), "S19750C20");
    check_base_class_offset(lv, (S19750C12*), ABISELECT(16,8), "S19750C20");
    /*is_ambiguous_... S19750C20::S19750C11 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C11*), ABISELECT(24,12), "S19750C20");
    /*is_ambiguous_... S19750C20::S19750C11 */ AMB_check_base_class_offset(lv, (S19750C10*)(S19750C11*), ABISELECT(24,12), "S19750C20");
    /*is_ambiguous_... S19750C20::S19750C11 */ AMB_check_base_class_offset(lv, (S19750C11*), ABISELECT(24,12), "S19750C20");
    /*is_ambiguous_... S19750C20::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*), ABISELECT(40,20), "S19750C20");
    test_class_info(&lv, &cd_S19750C20);
    dp->~S19750C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19750C20(Test_S19750C20, "S19750C20", ABISELECT(104,72));

#else // __cplusplus

extern void _ZN9S19750C20C1Ev();
extern void _ZN9S19750C20D2Ev();
Name_Map name_map_S19750C20[] = {
  NSPAIR(_ZN9S19750C20C1Ev),
  NSPAIR(_ZN9S19750C20D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C8;
extern VTBL_ENTRY _ZTI8S19750C8[];
extern  VTBL_ENTRY _ZTV8S19750C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C8[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S19750C11;
extern VTBL_ENTRY _ZTI9S19750C11[];
extern  VTBL_ENTRY _ZTV9S19750C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C11[];
extern Class_Descriptor cd_S19750C6;
extern VTBL_ENTRY _ZTI8S19750C6[];
extern  VTBL_ENTRY _ZTV8S19750C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C6[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C12;
extern VTBL_ENTRY _ZTI9S19750C12[];
extern  VTBL_ENTRY _ZTV9S19750C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C12[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S19750C11;
extern VTBL_ENTRY _ZTI9S19750C11[];
extern  VTBL_ENTRY _ZTV9S19750C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C11[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
static Base_Class bases_S19750C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C24,    ABISELECT(84,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_S2264C28,    ABISELECT(84,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_S19750C8,    ABISELECT(40,20), //bcp->offset
    20, //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
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19750C10,    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
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C24,    ABISELECT(88,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
    9, //immediately_derived
  0, 0},
  {&cd_S19750C10,    ABISELECT(88,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19750C11,    ABISELECT(88,64), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19750C6,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C28,    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
    12, //immediately_derived
  0, 0},
  {&cd_S19750C12,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C24,    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
    15, //immediately_derived
  0, 0},
  {&cd_S19750C10,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19750C11,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C24,    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},
  {0}};
extern VTBL_ENTRY _ZTI9S19750C20[];
extern void _ZN9S19750C20D1Ev();
extern void _ZN9S19750C20D0Ev();
extern void ABISELECT(_ZThn24_N9S19750C20D1Ev,_ZThn12_N9S19750C20D1Ev)();
extern void ABISELECT(_ZThn24_N9S19750C20D0Ev,_ZThn12_N9S19750C20D0Ev)();
extern void ABISELECT(_ZTv0_n56_N9S19750C20D1Ev,_ZTv0_n28_N9S19750C20D1Ev)();
extern void ABISELECT(_ZThn88_N9S19750C20D1Ev,_ZThn64_N9S19750C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19750C20D0Ev,_ZTv0_n28_N9S19750C20D0Ev)();
extern void ABISELECT(_ZThn88_N9S19750C20D0Ev,_ZThn64_N9S19750C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19750C20[] = {
  0,
  ABISELECT(88,64),
  ABISELECT(40,20),
  ABISELECT(84,60),
  ABISELECT(84,60),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C20[0]),
  (VTBL_ENTRY)&_ZN9S19750C20D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C20D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19750C20[0]),
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19750C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N9S19750C20D1Ev,_ZThn12_N9S19750C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N9S19750C20D0Ev,_ZThn12_N9S19750C20D0Ev),
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19750C20[0]),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI9S19750C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C20D1Ev,_ZTv0_n28_N9S19750C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C20D0Ev,_ZTv0_n28_N9S19750C20D0Ev),
};
extern VTBL_ENTRY _ZTV9S19750C20[];
extern void _ZN8S19750C6D1Ev();
extern void _ZN8S19750C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19750C6__9S19750C20[] = {
  0,
  ABISELECT(88,64),
  ABISELECT(40,20),
  ABISELECT(84,60),
  ABISELECT(84,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
  (VTBL_ENTRY)&_ZN8S19750C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19750C6D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C108S19750C6__9S19750C20[] = {
  ABISELECT(40,20),
  ABISELECT(84,60),
  ABISELECT(84,60),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C108S19750C6__9S19750C20[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__8S19750C6__9S19750C20[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev)();
extern void ABISELECT(_ZThn88_N8S19750C6D1Ev,_ZThn64_N8S19750C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev)();
extern void ABISELECT(_ZThn88_N8S19750C6D0Ev,_ZThn64_N8S19750C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C11__8S19750C6__9S19750C20[] = {
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19750C12__9S19750C20[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C12[0]),
};
extern void _ZN9S19750C11D1Ev();
extern void _ZN9S19750C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C11__A__9S19750C20[] = {
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C11[0]),
  (VTBL_ENTRY)&_ZN9S19750C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C11D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C109S19750C11__A2__9S19750C20[] = {
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C109S19750C11__A2__9S19750C20[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C11__A__9S19750C20[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19750C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C20[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C8[0]),
};
extern void _ZN9S19750C11D1Ev();
extern void _ZN9S19750C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C11__9S19750C20[] = {
  ABISELECT(-88,-64),
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C11[0]),
  (VTBL_ENTRY)&_ZN9S19750C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C11D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C109S19750C11__A1__9S19750C20[] = {
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C109S19750C11__A1__9S19750C20[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C11__9S19750C20[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI9S19750C11[0]),
};
static  VTT_ENTRY vtt_S19750C20[] = {
  {&(_ZTV9S19750C20[7]),  7,33},
  {&(_tg__ZTV8S19750C6__9S19750C20[7]),  7,9},
  {&(_tg__ZTV9S19750C108S19750C6__9S19750C20[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C108S19750C6__9S19750C20[4]),  4,4},
  {&(_tg__ZTV8S19750C8__8S19750C6__9S19750C20[4]),  4,4},
  {&(_tg__ZTV9S19750C11__8S19750C6__9S19750C20[7]),  7,9},
  {&(_tg__ZTV9S19750C12__9S19750C20[3]),  3,3},
  {&(_tg__ZTV9S19750C11__A__9S19750C20[6]),  6,8},
  {&(_tg__ZTV9S19750C109S19750C11__A2__9S19750C20[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C109S19750C11__A2__9S19750C20[4]),  4,4},
  {&(_tg__ZTV8S19750C8__9S19750C11__A__9S19750C20[4]),  4,4},
  {&(_ZTV9S19750C20[24]),  24,33},
  {&(_ZTV9S19750C20[31]),  31,33},
  {&(_ZTV9S19750C20[12]),  12,33},
  {&(_ZTV9S19750C20[18]),  18,33},
  {&(_tg__ZTV8S19750C8__9S19750C20[4]),  4,4},
  {&(_tg__ZTV9S19750C11__9S19750C20[6]),  6,8},
  {&(_tg__ZTV9S19750C109S19750C11__A1__9S19750C20[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C109S19750C11__A1__9S19750C20[4]),  4,4},
  {&(_tg__ZTV8S19750C8__9S19750C11__9S19750C20[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19750C20[];
extern  VTBL_ENTRY _ZTV9S19750C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C20[];
static VTBL_ENTRY alt_thunk_names126[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19750C6D0Ev,_ZThn64_N8S19750C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19750C6D1Ev,_ZThn64_N8S19750C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19750C20D0Ev,_ZTv0_n28_N9S19750C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19750C20D0Ev,_ZThn64_N9S19750C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19750C20D1Ev,_ZTv0_n28_N9S19750C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19750C20D1Ev,_ZThn64_N9S19750C20D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19750C20 = {  "S19750C20", // class name
  bases_S19750C20, 17,
  &(vtc_S19750C20[0]), // expected_vtbl_contents
  &(vtt_S19750C20[0]), // expected_vtt_contents
  ABISELECT(104,72), // object size
  NSPAIRA(_ZTI9S19750C20),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19750C20),33, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19750C20),20, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names126,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19750C19  : S2264C24 , virtual S2264C38 , virtual S19750C13 , virtual S19750C11 , S19750C20 {
  virtual  ~S19750C19(); // _ZN9S19750C19D2Ev
  S19750C19(); // tgen
};
//SIG(-1 S19750C19) C1{ BC2{ m} VBC3{ m} VBC4{ BC5{ VBC2 VBC6{ m} VBC7{ VBC2 VBC6 Fi[9]} vd Fp} BC6 VBC8{ BC6 VBC3} vd} VBC9{ VBC6 BC2 BC5 VBC3 vd} BC10{ BC11{ BC6 VBC7 BC5 BC2 VBC9 vd} BC8 BC9 BC2 vd} vd}


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

static void Test_S19750C19()
{
  extern Class_Descriptor cd_S19750C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,22)];
    init_test(&cd_S19750C19, buf);
    S19750C19 *dp, &lv = *(dp=new (buf) S19750C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,84), "sizeof(S19750C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19750C19)");
    /*is_ambiguous_... S19750C19::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*), ABISELECT(41,21), "S19750C19");
    check_base_class_offset(lv, (S2264C38*), 0, "S19750C19");
    /*is_ambiguous_... S19750C19::S19750C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19750C12*), 0, "S19750C19");
    /*is_ambiguous_... S19750C19::S19750C11 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19750C11*), 0, "S19750C19");
    check_base_class_offset(lv, (S2264C38*)(S19750C12*)(S19750C20*), 0, "S19750C19");
    /*is_ambiguous_... S19750C20::S19750C11 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19750C11*)(S19750C20*), 0, "S19750C19");
    check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C13*), ABISELECT(64,32), "S19750C19");
    check_base_class_offset(lv, (S2264C24*)(S19750C8*), ABISELECT(64,32), "S19750C19");
    /*is_ambiguous_... S19750C19::S19750C11 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C11*), ABISELECT(64,32), "S19750C19");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C6*)(S19750C20*), ABISELECT(64,32), "S19750C19");
    /*is_ambiguous_... S19750C20::S19750C11 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C11*)(S19750C20*), ABISELECT(64,32), "S19750C19");
    check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C13*), ABISELECT(64,32), "S19750C19");
    check_base_class_offset(lv, (S2264C28*)(S19750C8*), ABISELECT(64,32), "S19750C19");
    /*is_ambiguous_... S19750C19::S19750C11 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C11*), ABISELECT(64,32), "S19750C19");
    /*is_ambiguous_... S19750C19::S19750C11 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C11*), ABISELECT(64,32), "S19750C19");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C6*)(S19750C20*), ABISELECT(64,32), "S19750C19");
    /*is_ambiguous_... S19750C20::S19750C11 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C11*)(S19750C20*), ABISELECT(64,32), "S19750C19");
    /*is_ambiguous_... S19750C20::S19750C11 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C11*)(S19750C20*), ABISELECT(64,32), "S19750C19");
    check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C13*), ABISELECT(64,32), "S19750C19");
    /*is_ambiguous_... S19750C19::S19750C11 */ AMB_check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C11*), ABISELECT(64,32), "S19750C19");
    check_base_class_offset(lv, (S19750C8*)(S19750C6*)(S19750C20*), ABISELECT(64,32), "S19750C19");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C6*)(S19750C20*), ABISELECT(64,32), "S19750C19");
    /*is_ambiguous_... S19750C20::S19750C11 */ AMB_check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C11*)(S19750C20*), ABISELECT(64,32), "S19750C19");
    check_base_class_offset(lv, (S19750C10*)(S19750C13*), ABISELECT(48,24), "S19750C19");
    /*is_ambiguous_... S19750C13::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C13*), ABISELECT(48,24), "S19750C19");
    /*is_ambiguous_... S19750C19::S19750C12 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C12*), ABISELECT(112,72), "S19750C19");
    check_base_class_offset(lv, (S19750C12*)(S19750C13*), ABISELECT(112,72), "S19750C19");
    check_base_class_offset(lv, (S19750C13*), ABISELECT(48,24), "S19750C19");
    /*is_ambiguous_... S19750C19::S19750C11 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C11*), ABISELECT(120,76), "S19750C19");
    /*is_ambiguous_... S19750C19::S19750C11 */ AMB_check_base_class_offset(lv, (S19750C10*)(S19750C11*), ABISELECT(120,76), "S19750C19");
    /*is_ambiguous_... S19750C19::S19750C11 */ AMB_check_base_class_offset(lv, (S19750C11*), ABISELECT(120,76), "S19750C19");
    check_base_class_offset(lv, (S19750C11*)(S19750C6*)(S19750C20*), ABISELECT(120,76), "S19750C19");
    /*is_ambiguous_... S19750C6::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C6*)(S19750C20*), 0, "S19750C19");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S19750C10*)(S19750C6*)(S19750C20*), 0, "S19750C19");
    /*is_ambiguous_... S19750C6::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C6*)(S19750C20*), 0, "S19750C19");
    check_base_class_offset(lv, (S19750C6*)(S19750C20*), 0, "S19750C19");
    check_base_class_offset(lv, (S2264C28*)(S19750C12*)(S19750C20*), ABISELECT(16,8), "S19750C19");
    check_base_class_offset(lv, (S19750C12*)(S19750C20*), ABISELECT(16,8), "S19750C19");
    /*is_ambiguous_... S19750C20::S19750C11 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C11*)(S19750C20*), ABISELECT(24,12), "S19750C19");
    /*is_ambiguous_... S19750C20::S19750C11 */ AMB_check_base_class_offset(lv, (S19750C10*)(S19750C11*)(S19750C20*), ABISELECT(24,12), "S19750C19");
    /*is_ambiguous_... S19750C20::S19750C11 */ AMB_check_base_class_offset(lv, (S19750C11*)(S19750C20*), ABISELECT(24,12), "S19750C19");
    /*is_ambiguous_... S19750C20::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C20*), ABISELECT(40,20), "S19750C19");
    check_base_class_offset(lv, (S19750C20*), 0, "S19750C19");
    test_class_info(&lv, &cd_S19750C19);
    dp->~S19750C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19750C19(Test_S19750C19, "S19750C19", ABISELECT(136,84));

#else // __cplusplus

extern void _ZN9S19750C19C1Ev();
extern void _ZN9S19750C19D2Ev();
Name_Map name_map_S19750C19[] = {
  NSPAIR(_ZN9S19750C19C1Ev),
  NSPAIR(_ZN9S19750C19D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C8;
extern VTBL_ENTRY _ZTI8S19750C8[];
extern  VTBL_ENTRY _ZTV8S19750C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C8[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C12;
extern VTBL_ENTRY _ZTI9S19750C12[];
extern  VTBL_ENTRY _ZTV9S19750C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C12[];
extern Class_Descriptor cd_S19750C13;
extern VTBL_ENTRY _ZTI9S19750C13[];
extern  VTBL_ENTRY _ZTV9S19750C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C13[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S19750C11;
extern VTBL_ENTRY _ZTI9S19750C11[];
extern  VTBL_ENTRY _ZTV9S19750C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C11[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19750C6;
extern VTBL_ENTRY _ZTI8S19750C6[];
extern  VTBL_ENTRY _ZTV8S19750C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C6[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C12;
extern VTBL_ENTRY _ZTI9S19750C12[];
extern  VTBL_ENTRY _ZTV9S19750C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C12[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S19750C11;
extern VTBL_ENTRY _ZTI9S19750C11[];
extern  VTBL_ENTRY _ZTV9S19750C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C11[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19750C20;
extern VTBL_ENTRY _ZTI9S19750C20[];
extern  VTBL_ENTRY _ZTV9S19750C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C20[];
static Base_Class bases_S19750C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C24,    ABISELECT(41,21), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C24,    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, 1},
  {&cd_S2264C28,    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, 1},
  {&cd_S19750C8,    ABISELECT(64,32), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19750C10,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2264C28,    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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C28,    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
    8, //immediately_derived
  0, 0},
  {&cd_S19750C12,    ABISELECT(112,72), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19750C13,    ABISELECT(48,24), //bcp->offset
    22, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C24,    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
    12, //immediately_derived
  0, 0},
  {&cd_S19750C10,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    12, //immediately_derived
  0, 0},
  {&cd_S19750C11,    ABISELECT(120,76), //bcp->offset
    39, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19750C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19750C6,    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
    23, //immediately_derived
  0, 0},
  {&cd_S2264C28,    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
    18, //immediately_derived
  0, 0},
  {&cd_S19750C12,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2264C24,    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
    21, //immediately_derived
  0, 0},
  {&cd_S19750C10,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19750C11,    ABISELECT(24,12), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2264C24,    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
    23, //immediately_derived
  0, 0},
  {&cd_S19750C20,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19750C19[];
extern void _ZN9S19750C19D1Ev();
extern void _ZN9S19750C19D0Ev();
extern void ABISELECT(_ZThn24_N9S19750C19D1Ev,_ZThn12_N9S19750C19D1Ev)();
extern void ABISELECT(_ZThn24_N9S19750C19D0Ev,_ZThn12_N9S19750C19D0Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19750C19D1Ev,_ZTv0_n32_N9S19750C19D1Ev)();
extern void ABISELECT(_ZThn48_N9S19750C19D1Ev,_ZThn24_N9S19750C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19750C19D0Ev,_ZTv0_n32_N9S19750C19D0Ev)();
extern void ABISELECT(_ZThn48_N9S19750C19D0Ev,_ZThn24_N9S19750C19D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19750C19D1Ev,_ZTv0_n28_N9S19750C19D1Ev)();
extern void ABISELECT(_ZThn120_N9S19750C19D1Ev,_ZThn76_N9S19750C19D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19750C19D0Ev,_ZTv0_n28_N9S19750C19D0Ev)();
extern void ABISELECT(_ZThn120_N9S19750C19D0Ev,_ZThn76_N9S19750C19D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19750C19[] = {
  ABISELECT(112,72),
  ABISELECT(48,24),
  0,
  ABISELECT(120,76),
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C19[0]),
  (VTBL_ENTRY)&_ZN9S19750C19D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C19D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19750C19[0]),
  ABISELECT(-24,-12),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19750C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N9S19750C19D1Ev,_ZThn12_N9S19750C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N9S19750C19D0Ev,_ZThn12_N9S19750C19D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19750C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C19D1Ev,_ZTv0_n32_N9S19750C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C19D0Ev,_ZTv0_n32_N9S19750C19D0Ev),
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S19750C19[0]),
  ABISELECT(-112,-72),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI9S19750C19[0]),
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI9S19750C19[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C19D1Ev,_ZTv0_n28_N9S19750C19D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C19D0Ev,_ZTv0_n28_N9S19750C19D0Ev),
};
extern VTBL_ENTRY _ZTV9S19750C19[];
extern void _ZN9S19750C20D1Ev();
extern void _ZN9S19750C20D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C20__9S19750C19[] = {
  0,
  ABISELECT(120,76),
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C20[0]),
  (VTBL_ENTRY)&_ZN9S19750C20D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C20D0Ev,
};
extern void _ZN8S19750C6D1Ev();
extern void _ZN8S19750C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19750C69S19750C20__9S19750C19[] = {
  0,
  ABISELECT(120,76),
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
  (VTBL_ENTRY)&_ZN8S19750C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19750C6D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C108S19750C69S19750C20__A2__9S19750C19[] = {
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C108S19750C69S19750C20__A2__9S19750C19[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__8S19750C69S19750C20__9S19750C19[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev)();
extern void ABISELECT(_ZThn120_N8S19750C6D1Ev,_ZThn76_N8S19750C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev)();
extern void ABISELECT(_ZThn120_N8S19750C6D0Ev,_ZThn76_N8S19750C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C11__8S19750C69S19750C20__9S19750C19[] = {
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19750C129S19750C20__A1__9S19750C19[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C12[0]),
};
extern void _ZN9S19750C11D1Ev();
extern void _ZN9S19750C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C119S19750C20__A1__9S19750C19[] = {
  ABISELECT(-24,-12),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C11[0]),
  (VTBL_ENTRY)&_ZN9S19750C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C11D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C109S19750C119S19750C20__A3__9S19750C19[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C109S19750C119S19750C20__A3__9S19750C19[] = {
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C119S19750C20__A1__9S19750C19[] = {
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19750C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C20__9S19750C19[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S19750C20[0]),
};
extern void ABISELECT(_ZTv0_n56_N9S19750C20D1Ev,_ZTv0_n28_N9S19750C20D1Ev)();
extern void ABISELECT(_ZThn120_N9S19750C20D1Ev,_ZThn76_N9S19750C20D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19750C20D0Ev,_ZTv0_n28_N9S19750C20D0Ev)();
extern void ABISELECT(_ZThn120_N9S19750C20D0Ev,_ZThn76_N9S19750C20D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C11__9S19750C20__9S19750C19[] = {
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI9S19750C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C20D1Ev,_ZTv0_n28_N9S19750C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C20D0Ev,_ZTv0_n28_N9S19750C20D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19750C12__9S19750C20__9S19750C19[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19750C20[0]),
};
extern void ABISELECT(_ZThn24_N9S19750C20D1Ev,_ZThn12_N9S19750C20D1Ev)();
extern void ABISELECT(_ZThn24_N9S19750C20D0Ev,_ZThn12_N9S19750C20D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19750C11__A__9S19750C20__9S19750C19[] = {
  ABISELECT(-24,-12),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19750C20[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N9S19750C20D1Ev,_ZThn12_N9S19750C20D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N9S19750C20D0Ev,_ZThn12_N9S19750C20D0Ev),
};
extern void _ZN9S19750C13D1Ev();
extern void _ZN9S19750C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C13__9S19750C19[] = {
  ABISELECT(-48,-24),
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C13[0]),
  (VTBL_ENTRY)&_ZN9S19750C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C13D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C109S19750C13__9S19750C19[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C109S19750C13__9S19750C19[] = {
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C13__9S19750C19[] = {
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19750C13[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19750C12__9S19750C13__9S19750C19[] = {
  ABISELECT(-112,-72),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI9S19750C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C19[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19750C12__9S19750C19[] = {
  ABISELECT(-112,-72),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C12[0]),
};
extern void _ZN9S19750C11D1Ev();
extern void _ZN9S19750C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C11__9S19750C19[] = {
  ABISELECT(-120,-76),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C11[0]),
  (VTBL_ENTRY)&_ZN9S19750C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C11D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C109S19750C11__A1__9S19750C19[] = {
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C109S19750C11__A1__9S19750C19[] = {
  0,
  0,
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C11__9S19750C19[] = {
  0,
  0,
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI9S19750C11[0]),
};
static  VTT_ENTRY vtt_S19750C19[] = {
  {&(_ZTV9S19750C19[9]),  9,48},
  {&(_tg__ZTV9S19750C20__9S19750C19[7]),  7,9},
  {&(_tg__ZTV8S19750C69S19750C20__9S19750C19[7]),  7,9},
  {&(_tg__ZTV9S19750C108S19750C69S19750C20__A2__9S19750C19[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C108S19750C69S19750C20__A2__9S19750C19[4]),  4,4},
  {&(_tg__ZTV8S19750C8__8S19750C69S19750C20__9S19750C19[4]),  4,4},
  {&(_tg__ZTV9S19750C11__8S19750C69S19750C20__9S19750C19[7]),  7,9},
  {&(_tg__ZTV9S19750C129S19750C20__A1__9S19750C19[3]),  3,3},
  {&(_tg__ZTV9S19750C119S19750C20__A1__9S19750C19[6]),  6,8},
  {&(_tg__ZTV9S19750C109S19750C119S19750C20__A3__9S19750C19[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C109S19750C119S19750C20__A3__9S19750C19[4]),  4,4},
  {&(_tg__ZTV8S19750C8__9S19750C119S19750C20__A1__9S19750C19[4]),  4,4},
  {&(_tg__ZTV8S19750C8__9S19750C20__9S19750C19[4]),  4,4},
  {&(_tg__ZTV9S19750C11__9S19750C20__9S19750C19[7]),  7,9},
  {&(_tg__ZTV9S19750C12__9S19750C20__9S19750C19[3]),  3,3},
  {&(_tg__ZTV9S19750C11__A__9S19750C20__9S19750C19[6]),  6,8},
  {&(_ZTV9S19750C19[30]),  30,48},
  {&(_ZTV9S19750C19[36]),  36,48},
  {&(_ZTV9S19750C19[39]),  39,48},
  {&(_ZTV9S19750C19[46]),  46,48},
  {&(_ZTV9S19750C19[14]),  14,48},
  {&(_ZTV9S19750C19[20]),  20,48},
  {&(_tg__ZTV9S19750C13__9S19750C19[7]),  7,9},
  {&(_tg__ZTV9S19750C109S19750C13__9S19750C19[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C109S19750C13__9S19750C19[4]),  4,4},
  {&(_tg__ZTV8S19750C8__9S19750C13__9S19750C19[4]),  4,4},
  {&(_tg__ZTV9S19750C12__9S19750C13__9S19750C19[3]),  3,3},
  {&(_tg__ZTV8S19750C8__9S19750C19[4]),  4,4},
  {&(_tg__ZTV9S19750C12__9S19750C19[3]),  3,3},
  {&(_tg__ZTV9S19750C11__9S19750C19[6]),  6,8},
  {&(_tg__ZTV9S19750C109S19750C11__A1__9S19750C19[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C109S19750C11__A1__9S19750C19[4]),  4,4},
  {&(_tg__ZTV8S19750C8__9S19750C11__9S19750C19[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19750C19[];
extern  VTBL_ENTRY _ZTV9S19750C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C19[];
static VTBL_ENTRY alt_thunk_names127[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19750C20D0Ev,_ZTv0_n28_N9S19750C20D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19750C20D0Ev,_ZThn76_N9S19750C20D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19750C20D1Ev,_ZTv0_n28_N9S19750C20D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19750C20D1Ev,_ZThn76_N9S19750C20D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19750C6D0Ev,_ZThn76_N8S19750C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19750C6D1Ev,_ZThn76_N8S19750C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19750C19D0Ev,_ZTv0_n28_N9S19750C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19750C19D0Ev,_ZThn76_N9S19750C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19750C19D1Ev,_ZTv0_n28_N9S19750C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19750C19D1Ev,_ZThn76_N9S19750C19D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19750C19D0Ev,_ZTv0_n32_N9S19750C19D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19750C19D0Ev,_ZThn24_N9S19750C19D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19750C19D1Ev,_ZTv0_n32_N9S19750C19D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19750C19D1Ev,_ZThn24_N9S19750C19D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19750C19 = {  "S19750C19", // class name
  bases_S19750C19, 24,
  &(vtc_S19750C19[0]), // expected_vtbl_contents
  &(vtt_S19750C19[0]), // expected_vtt_contents
  ABISELECT(136,84), // object size
  NSPAIRA(_ZTI9S19750C19),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19750C19),48, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19750C19),33, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names127,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19750C18  : virtual S19750C6 , S19750C16 {
  ::S19750C19 s19750c18f0;
  virtual  ~S19750C18(); // _ZN9S19750C18D2Ev
  S19750C18(); // tgen
};
//SIG(-1 S19750C18) C1{ VBC2{ BC3{ m} VBC4{ VBC5{ m} VBC3 Fi[9]} BC6{ VBC5 VBC3 VBC4 vd Fp} BC5 VBC7{ VBC3 BC5 BC6 VBC8{ m} vd} vd} BC9{ VBC10{ VBC5 vd} VBC11{ VBC8 VBC2 BC12{ BC3 VBC8} VBC13{ VBC10 vd FC8} VBC14{ BC6 BC3 VBC12 vd} vd} VBC15{ VBC16{ VBC2 VBC12 VBC14 BC5 v1} FC13} BC5 FC16} vd FC17{ BC5 VBC8 VBC14 VBC7 BC18{ BC2 BC12 BC7 BC5 vd} vd}}


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

static void Test_S19750C18()
{
  extern Class_Descriptor cd_S19750C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(49,63)];
    init_test(&cd_S19750C18, buf);
    S19750C18 *dp, &lv = *(dp=new (buf) S19750C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(384,248), "sizeof(S19750C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19750C18)");
    /*is_ambiguous_... S19750C6::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C6*), ABISELECT(248,160), "S19750C18");
    check_base_class_offset(lv, (S2264C24*)(S19750C8*), ABISELECT(308,208), "S19750C18");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C6*), ABISELECT(308,208), "S19750C18");
    check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C11*), ABISELECT(308,208), "S19750C18");
    check_base_class_offset(lv, (S2264C24*)(S19750C15*), ABISELECT(308,208), "S19750C18");
    check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C13*), ABISELECT(308,208), "S19750C18");
    check_base_class_offset(lv, (S2264C28*)(S19750C8*), ABISELECT(308,208), "S19750C18");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C6*), ABISELECT(308,208), "S19750C18");
    check_base_class_offset(lv, (S2264C28*)(S19750C11*), ABISELECT(308,208), "S19750C18");
    check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C11*), ABISELECT(308,208), "S19750C18");
    check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C13*), ABISELECT(308,208), "S19750C18");
    check_base_class_offset(lv, (S19750C8*)(S19750C6*), ABISELECT(264,168), "S19750C18");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C6*), ABISELECT(264,168), "S19750C18");
    check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C11*), ABISELECT(264,168), "S19750C18");
    check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C13*), ABISELECT(264,168), "S19750C18");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S19750C10*)(S19750C6*), ABISELECT(248,160), "S19750C18");
    /*is_ambiguous_... S19750C6::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C6*), ABISELECT(248,160), "S19750C18");
    /*is_ambiguous_... S19750C11::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C11*), ABISELECT(312,212), "S19750C18");
    check_base_class_offset(lv, (S19750C10*)(S19750C11*), ABISELECT(312,212), "S19750C18");
    check_base_class_offset(lv, (S2264C38*)(S19750C11*), 0, "S19750C18");
    check_base_class_offset(lv, (S2264C38*)(S19750C17*), 0, "S19750C18");
    /*is_ambiguous_... S19750C17::S19750C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19750C12*)(S19750C17*), 0, "S19750C18");
    /*is_ambiguous_... S19750C18::S19750C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19750C12*), 0, "S19750C18");
    check_base_class_offset(lv, (S19750C11*)(S19750C6*), ABISELECT(312,212), "S19750C18");
    check_base_class_offset(lv, (S19750C6*), ABISELECT(248,160), "S19750C18");
    check_base_class_offset(lv, (S19750C6*)(S19750C17*), ABISELECT(248,160), "S19750C18");
    check_base_class_offset(lv, (S19750C6*)(S19750C5*), ABISELECT(248,160), "S19750C18");
    check_base_class_offset(lv, (S19750C15*)(S19750C16*), ABISELECT(328,220), "S19750C18");
    check_base_class_offset(lv, (S19750C15*)(S19750C14*), ABISELECT(328,220), "S19750C18");
    /*is_ambiguous_... S19750C17::S19750C12 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C12*)(S19750C17*), 0, "S19750C18");
    /*is_ambiguous_... S19750C17::S19750C12 */ AMB_check_base_class_offset(lv, (S19750C12*)(S19750C17*), 0, "S19750C18");
    check_base_class_offset(lv, (S19750C14*)(S19750C17*), ABISELECT(328,220), "S19750C18");
    check_base_class_offset(lv, (S19750C10*)(S19750C13*), ABISELECT(344,228), "S19750C18");
    /*is_ambiguous_... S19750C13::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C13*), ABISELECT(344,228), "S19750C18");
    /*is_ambiguous_... S19750C18::S19750C12 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C12*), ABISELECT(360,236), "S19750C18");
    check_base_class_offset(lv, (S19750C12*)(S19750C13*), ABISELECT(360,236), "S19750C18");
    check_base_class_offset(lv, (S19750C12*)(S19750C5*), ABISELECT(360,236), "S19750C18");
    check_base_class_offset(lv, (S19750C13*)(S19750C17*), ABISELECT(344,228), "S19750C18");
    check_base_class_offset(lv, (S19750C13*)(S19750C5*), ABISELECT(344,228), "S19750C18");
    check_base_class_offset(lv, (S19750C17*)(S19750C16*), 0, "S19750C18");
    /*is_ambiguous_... S19750C5::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C5*), ABISELECT(360,236), "S19750C18");
    check_base_class_offset(lv, (S19750C5*)(S19750C4*), ABISELECT(360,236), "S19750C18");
    check_base_class_offset(lv, (S19750C4*)(S19750C16*), ABISELECT(360,236), "S19750C18");
    /*is_ambiguous_... S19750C16::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C16*), 0, "S19750C18");
    check_base_class_offset(lv, (S19750C16*), 0, "S19750C18");
    check_field_offset(lv, s19750c18f0, ABISELECT(112,76), "S19750C18.s19750c18f0");
    test_class_info(&lv, &cd_S19750C18);
    dp->~S19750C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19750C18(Test_S19750C18, "S19750C18", ABISELECT(384,248));

#else // __cplusplus

extern void _ZN9S19750C18C1Ev();
extern void _ZN9S19750C18D2Ev();
Name_Map name_map_S19750C18[] = {
  NSPAIR(_ZN9S19750C18C1Ev),
  NSPAIR(_ZN9S19750C18D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C8;
extern VTBL_ENTRY _ZTI8S19750C8[];
extern  VTBL_ENTRY _ZTV8S19750C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C8[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S19750C11;
extern VTBL_ENTRY _ZTI9S19750C11[];
extern  VTBL_ENTRY _ZTV9S19750C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C11[];
extern Class_Descriptor cd_S19750C6;
extern VTBL_ENTRY _ZTI8S19750C6[];
extern  VTBL_ENTRY _ZTV8S19750C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C6[];
extern Class_Descriptor cd_S19750C15;
extern VTBL_ENTRY _ZTI9S19750C15[];
extern  VTBL_ENTRY _ZTV9S19750C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C15[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C12;
extern VTBL_ENTRY _ZTI9S19750C12[];
extern  VTBL_ENTRY _ZTV9S19750C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C12[];
extern Class_Descriptor cd_S19750C14;
extern VTBL_ENTRY _ZTI9S19750C14[];
extern  VTBL_ENTRY _ZTV9S19750C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C14[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C12;
extern VTBL_ENTRY _ZTI9S19750C12[];
extern  VTBL_ENTRY _ZTV9S19750C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C12[];
extern Class_Descriptor cd_S19750C13;
extern VTBL_ENTRY _ZTI9S19750C13[];
extern  VTBL_ENTRY _ZTV9S19750C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C13[];
extern Class_Descriptor cd_S19750C17;
extern VTBL_ENTRY _ZTI9S19750C17[];
extern  VTBL_ENTRY _ZTV9S19750C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C17[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19750C5;
extern VTBL_ENTRY _ZTI8S19750C5[];
extern  VTBL_ENTRY _ZTV8S19750C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C5[];
extern Class_Descriptor cd_S19750C4;
extern VTBL_ENTRY _ZTI8S19750C4[];
extern  VTBL_ENTRY _ZTV8S19750C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C4[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19750C16;
extern VTBL_ENTRY _ZTI9S19750C16[];
extern  VTBL_ENTRY _ZTV9S19750C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C16[];
static Base_Class bases_S19750C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    ABISELECT(248,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
    10, //immediately_derived
  0, 0},
  {&cd_S2264C24,    ABISELECT(308,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
    3, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(308,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
    3, //immediately_derived
  0, 1},
  {&cd_S19750C8,    ABISELECT(264,168), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19750C10,    ABISELECT(248,160), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2264C24,    ABISELECT(248,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
    10, //immediately_derived
  0, 0},
  {&cd_S2264C24,    ABISELECT(312,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19750C10,    ABISELECT(312,212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19750C11,    ABISELECT(312,212), //bcp->offset
    32, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19750C6,    ABISELECT(248,160), //bcp->offset
    18, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19750C15,    ABISELECT(328,220), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19750C12,    0, //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
    11, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S19750C14,    ABISELECT(328,220), //bcp->offset
    41, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S19750C10,    ABISELECT(344,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(344,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    ABISELECT(360,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19750C12,    ABISELECT(360,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19750C13,    ABISELECT(344,228), //bcp->offset
    48, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S19750C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S2264C24,    ABISELECT(360,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19750C5,    ABISELECT(360,236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S19750C4,    ABISELECT(360,236), //bcp->offset
    58, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19750C16,    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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19750C18[];
extern void _ZN9S19750C18D1Ev();
extern void _ZN9S19750C18D0Ev();
extern void ABISELECT(_ZTv0_n64_N9S19750C18D1Ev,_ZTv0_n32_N9S19750C18D1Ev)();
extern void ABISELECT(_ZThn248_N9S19750C18D1Ev,_ZThn160_N9S19750C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19750C18D0Ev,_ZTv0_n32_N9S19750C18D0Ev)();
extern void ABISELECT(_ZThn248_N9S19750C18D0Ev,_ZThn160_N9S19750C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19750C18D1Ev,_ZTv0_n28_N9S19750C18D1Ev)();
extern void ABISELECT(_ZThn312_N9S19750C18D1Ev,_ZThn212_N9S19750C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19750C18D0Ev,_ZTv0_n28_N9S19750C18D0Ev)();
extern void ABISELECT(_ZThn312_N9S19750C18D0Ev,_ZThn212_N9S19750C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19750C18D1Ev,_ZTv0_n16_N9S19750C18D1Ev)();
extern void ABISELECT(_ZThn328_N9S19750C18D1Ev,_ZThn220_N9S19750C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19750C18D0Ev,_ZTv0_n16_N9S19750C18D0Ev)();
extern void ABISELECT(_ZThn328_N9S19750C18D0Ev,_ZThn220_N9S19750C18D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19750C18D1Ev,_ZTv0_n32_N9S19750C18D1Ev)();
extern void ABISELECT(_ZThn344_N9S19750C18D1Ev,_ZThn228_N9S19750C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19750C18D0Ev,_ZTv0_n32_N9S19750C18D0Ev)();
extern void ABISELECT(_ZThn344_N9S19750C18D0Ev,_ZThn228_N9S19750C18D0Ev)() __attribute__((weak));
extern void _ZN8S19750C52v1Ev();
extern void ABISELECT(_ZTv0_n96_N9S19750C18D1Ev,_ZTv0_n48_N9S19750C18D1Ev)();
extern void ABISELECT(_ZThn360_N9S19750C18D1Ev,_ZThn236_N9S19750C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19750C18D0Ev,_ZTv0_n48_N9S19750C18D0Ev)();
extern void ABISELECT(_ZThn360_N9S19750C18D0Ev,_ZThn236_N9S19750C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19750C18[] = {
  ABISELECT(360,236),
  ABISELECT(360,236),
  0,
  0,
  ABISELECT(360,236),
  ABISELECT(344,228),
  ABISELECT(328,220),
  ABISELECT(328,220),
  ABISELECT(312,212),
  ABISELECT(308,208),
  ABISELECT(308,208),
  ABISELECT(264,168),
  ABISELECT(248,160),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C18[0]),
  (VTBL_ENTRY)&_ZN9S19750C18D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C18D0Ev,
  ABISELECT(-248,-160),
  ABISELECT(-248,-160),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  ABISELECT(-248,-160),
  (VTBL_ENTRY)&(_ZTI9S19750C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C18D1Ev,_ZTv0_n32_N9S19750C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C18D0Ev,_ZTv0_n32_N9S19750C18D0Ev),
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-264,-168),
  (VTBL_ENTRY)&(_ZTI9S19750C18[0]),
  ABISELECT(-312,-212),
  ABISELECT(-312,-212),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-312,-212),
  (VTBL_ENTRY)&(_ZTI9S19750C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C18D1Ev,_ZTv0_n28_N9S19750C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C18D0Ev,_ZTv0_n28_N9S19750C18D0Ev),
  0,
  ABISELECT(-328,-220),
  ABISELECT(-20,-12),
  ABISELECT(-328,-220),
  (VTBL_ENTRY)&(_ZTI9S19750C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C18D1Ev,_ZTv0_n16_N9S19750C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C18D0Ev,_ZTv0_n16_N9S19750C18D0Ev),
  ABISELECT(-344,-228),
  ABISELECT(-344,-228),
  ABISELECT(16,8),
  ABISELECT(-80,-60),
  ABISELECT(-36,-20),
  ABISELECT(-36,-20),
  ABISELECT(-344,-228),
  (VTBL_ENTRY)&(_ZTI9S19750C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C18D1Ev,_ZTv0_n32_N9S19750C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C18D0Ev,_ZTv0_n32_N9S19750C18D0Ev),
  0,
  ABISELECT(-360,-236),
  0,
  ABISELECT(-16,-8),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-52,-28),
  ABISELECT(-52,-28),
  ABISELECT(-96,-68),
  ABISELECT(-112,-76),
  ABISELECT(-360,-236),
  ABISELECT(-360,-236),
  (VTBL_ENTRY)&(_ZTI9S19750C18[0]),
  (VTBL_ENTRY)&_ZN8S19750C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19750C18D1Ev,_ZTv0_n48_N9S19750C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19750C18D0Ev,_ZTv0_n48_N9S19750C18D0Ev),
};
extern VTBL_ENTRY _ZTV9S19750C18[];
extern void _ZN9S19750C16D1Ev();
extern void _ZN9S19750C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C16__9S19750C18[] = {
  ABISELECT(360,236),
  ABISELECT(360,236),
  0,
  0,
  ABISELECT(360,236),
  ABISELECT(344,228),
  ABISELECT(328,220),
  ABISELECT(328,220),
  ABISELECT(312,212),
  ABISELECT(308,208),
  ABISELECT(308,208),
  ABISELECT(264,168),
  ABISELECT(248,160),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  (VTBL_ENTRY)&_ZN9S19750C16D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C16D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N9S19750C16D1Ev,_ZTv0_n16_N9S19750C16D1Ev)();
extern void ABISELECT(_ZThn328_N9S19750C16D1Ev,_ZThn220_N9S19750C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19750C16D0Ev,_ZTv0_n16_N9S19750C16D0Ev)();
extern void ABISELECT(_ZThn328_N9S19750C16D0Ev,_ZThn220_N9S19750C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C14__9S19750C16__9S19750C18[] = {
  0,
  ABISELECT(-328,-220),
  ABISELECT(-20,-12),
  ABISELECT(-328,-220),
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C16D1Ev,_ZTv0_n16_N9S19750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C16D0Ev,_ZTv0_n16_N9S19750C16D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N9S19750C16D1Ev,_ZTv0_n32_N9S19750C16D1Ev)();
extern void ABISELECT(_ZThn248_N9S19750C16D1Ev,_ZThn160_N9S19750C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19750C16D0Ev,_ZTv0_n32_N9S19750C16D0Ev)();
extern void ABISELECT(_ZThn248_N9S19750C16D0Ev,_ZThn160_N9S19750C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19750C6__9S19750C16__9S19750C18[] = {
  ABISELECT(-248,-160),
  ABISELECT(-248,-160),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  ABISELECT(-248,-160),
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C16D1Ev,_ZTv0_n32_N9S19750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C16D0Ev,_ZTv0_n32_N9S19750C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C16__9S19750C18[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-264,-168),
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
};
extern void ABISELECT(_ZTv0_n56_N9S19750C16D1Ev,_ZTv0_n28_N9S19750C16D1Ev)();
extern void ABISELECT(_ZThn312_N9S19750C16D1Ev,_ZThn212_N9S19750C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19750C16D0Ev,_ZTv0_n28_N9S19750C16D0Ev)();
extern void ABISELECT(_ZThn312_N9S19750C16D0Ev,_ZThn212_N9S19750C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C11__9S19750C16__9S19750C18[] = {
  ABISELECT(-312,-212),
  ABISELECT(-312,-212),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-312,-212),
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C16D1Ev,_ZTv0_n28_N9S19750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C16D0Ev,_ZTv0_n28_N9S19750C16D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N9S19750C16D1Ev,_ZTv0_n32_N9S19750C16D1Ev)();
extern void ABISELECT(_ZThn344_N9S19750C16D1Ev,_ZThn228_N9S19750C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19750C16D0Ev,_ZTv0_n32_N9S19750C16D0Ev)();
extern void ABISELECT(_ZThn344_N9S19750C16D0Ev,_ZThn228_N9S19750C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C13__9S19750C16__9S19750C18[] = {
  ABISELECT(-344,-228),
  ABISELECT(-344,-228),
  ABISELECT(16,8),
  ABISELECT(-80,-60),
  ABISELECT(-36,-20),
  ABISELECT(-36,-20),
  ABISELECT(-344,-228),
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C16D1Ev,_ZTv0_n32_N9S19750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C16D0Ev,_ZTv0_n32_N9S19750C16D0Ev),
};
extern void _ZN8S19750C52v1Ev();
extern void ABISELECT(_ZTv0_n96_N9S19750C16D1Ev,_ZTv0_n48_N9S19750C16D1Ev)();
extern void ABISELECT(_ZThn360_N9S19750C16D1Ev,_ZThn236_N9S19750C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19750C16D0Ev,_ZTv0_n48_N9S19750C16D0Ev)();
extern void ABISELECT(_ZThn360_N9S19750C16D0Ev,_ZThn236_N9S19750C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19750C4__9S19750C16__9S19750C18[] = {
  0,
  ABISELECT(-360,-236),
  0,
  ABISELECT(-16,-8),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-52,-28),
  ABISELECT(-52,-28),
  ABISELECT(-96,-68),
  ABISELECT(-112,-76),
  ABISELECT(-360,-236),
  ABISELECT(-360,-236),
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  (VTBL_ENTRY)&_ZN8S19750C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19750C16D1Ev,_ZTv0_n48_N9S19750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19750C16D0Ev,_ZTv0_n48_N9S19750C16D0Ev),
};
extern void _ZN8S19750C6D1Ev();
extern void _ZN8S19750C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19750C6__9S19750C18[] = {
  ABISELECT(-248,-160),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
  (VTBL_ENTRY)&_ZN8S19750C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19750C6D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C108S19750C6__9S19750C18[] = {
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C108S19750C6__9S19750C18[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__8S19750C6__9S19750C18[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S19750C6D1Ev,_ZThn52_N8S19750C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S19750C6D0Ev,_ZThn52_N8S19750C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C11__8S19750C6__9S19750C18[] = {
  ABISELECT(-64,-52),
  ABISELECT(-312,-212),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C18[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C8[0]),
};
extern void _ZN9S19750C11D1Ev();
extern void _ZN9S19750C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C11__9S19750C18[] = {
  ABISELECT(-312,-212),
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C11[0]),
  (VTBL_ENTRY)&_ZN9S19750C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C11D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C109S19750C11__A1__9S19750C18[] = {
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C109S19750C11__A1__9S19750C18[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C11__9S19750C18[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI9S19750C11[0]),
};
extern void _ZN9S19750C15D1Ev();
extern void _ZN9S19750C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C15__9S19750C18[] = {
  ABISELECT(-20,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C15[0]),
  (VTBL_ENTRY)&_ZN9S19750C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C15D0Ev,
};
extern void _ZN9S19750C17D1Ev();
extern void _ZN9S19750C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C17__9S19750C18[] = {
  ABISELECT(360,236),
  ABISELECT(344,228),
  ABISELECT(328,220),
  ABISELECT(328,220),
  ABISELECT(312,212),
  ABISELECT(308,208),
  ABISELECT(308,208),
  ABISELECT(264,168),
  ABISELECT(248,160),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
  (VTBL_ENTRY)&_ZN9S19750C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19750C129S19750C17__9S19750C18[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C12[0]),
};
extern void ABISELECT(_ZTv0_n64_N9S19750C17D1Ev,_ZTv0_n32_N9S19750C17D1Ev)();
extern void ABISELECT(_ZThn248_N9S19750C17D1Ev,_ZThn160_N9S19750C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19750C17D0Ev,_ZTv0_n32_N9S19750C17D0Ev)();
extern void ABISELECT(_ZThn248_N9S19750C17D0Ev,_ZThn160_N9S19750C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19750C6__9S19750C17__9S19750C18[] = {
  ABISELECT(-248,-160),
  ABISELECT(-248,-160),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  ABISELECT(-248,-160),
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C17D1Ev,_ZTv0_n32_N9S19750C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C17D0Ev,_ZTv0_n32_N9S19750C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C17__9S19750C18[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-264,-168),
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
};
extern void ABISELECT(_ZTv0_n56_N9S19750C17D1Ev,_ZTv0_n28_N9S19750C17D1Ev)();
extern void ABISELECT(_ZThn312_N9S19750C17D1Ev,_ZThn212_N9S19750C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19750C17D0Ev,_ZTv0_n28_N9S19750C17D0Ev)();
extern void ABISELECT(_ZThn312_N9S19750C17D0Ev,_ZThn212_N9S19750C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C11__9S19750C17__9S19750C18[] = {
  ABISELECT(-312,-212),
  ABISELECT(-312,-212),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-312,-212),
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C17D1Ev,_ZTv0_n28_N9S19750C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C17D0Ev,_ZTv0_n28_N9S19750C17D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19750C17D1Ev,_ZTv0_n16_N9S19750C17D1Ev)();
extern void ABISELECT(_ZThn328_N9S19750C17D1Ev,_ZThn220_N9S19750C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19750C17D0Ev,_ZTv0_n16_N9S19750C17D0Ev)();
extern void ABISELECT(_ZThn328_N9S19750C17D0Ev,_ZThn220_N9S19750C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C14__9S19750C17__9S19750C18[] = {
  0,
  ABISELECT(-328,-220),
  ABISELECT(-20,-12),
  ABISELECT(-328,-220),
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C17D1Ev,_ZTv0_n16_N9S19750C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C17D0Ev,_ZTv0_n16_N9S19750C17D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N9S19750C17D1Ev,_ZTv0_n32_N9S19750C17D1Ev)();
extern void ABISELECT(_ZThn344_N9S19750C17D1Ev,_ZThn228_N9S19750C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19750C17D0Ev,_ZTv0_n32_N9S19750C17D0Ev)();
extern void ABISELECT(_ZThn344_N9S19750C17D0Ev,_ZThn228_N9S19750C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C13__9S19750C17__9S19750C18[] = {
  ABISELECT(-344,-228),
  ABISELECT(-344,-228),
  ABISELECT(16,8),
  ABISELECT(-80,-60),
  ABISELECT(-36,-20),
  ABISELECT(-36,-20),
  ABISELECT(-344,-228),
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C17D1Ev,_ZTv0_n32_N9S19750C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C17D0Ev,_ZTv0_n32_N9S19750C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19750C12__A1__9S19750C17__9S19750C18[] = {
  ABISELECT(-360,-236),
  ABISELECT(-360,-236),
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19750C14D1Ev,_ZTv0_n16_N9S19750C14D1Ev)();
extern void _ZN9S19750C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19750C14D0Ev,_ZTv0_n16_N9S19750C14D0Ev)();
extern void _ZN9S19750C14D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C14__9S19750C18[] = {
  0,
  0,
  ABISELECT(-20,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C14D1Ev,_ZTv0_n16_N9S19750C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C14D0Ev,_ZTv0_n16_N9S19750C14D0Ev),
};
extern void _ZN9S19750C13D1Ev();
extern void _ZN9S19750C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C13__9S19750C18[] = {
  ABISELECT(-344,-228),
  ABISELECT(16,8),
  ABISELECT(-80,-60),
  ABISELECT(-36,-20),
  ABISELECT(-36,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C13[0]),
  (VTBL_ENTRY)&_ZN9S19750C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C13D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C109S19750C13__A2__9S19750C18[] = {
  ABISELECT(-80,-60),
  ABISELECT(-36,-20),
  ABISELECT(-36,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C109S19750C13__A2__9S19750C18[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(80,60),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C13__9S19750C18[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(80,60),
  (VTBL_ENTRY)&(_ZTI9S19750C13[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19750C12__9S19750C13__9S19750C18[] = {
  ABISELECT(-360,-236),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19750C13[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19750C12__A1__9S19750C18[] = {
  ABISELECT(-360,-236),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C12[0]),
};
extern void _ZN8S19750C52v1Ev();
extern void ABISELECT(_ZTv0_n96_N8S19750C4D1Ev,_ZTv0_n48_N8S19750C4D1Ev)();
extern void _ZN8S19750C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19750C4D0Ev,_ZTv0_n48_N8S19750C4D0Ev)();
extern void _ZN8S19750C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19750C4__9S19750C18[] = {
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-52,-28),
  ABISELECT(-52,-28),
  ABISELECT(-96,-68),
  ABISELECT(-112,-76),
  ABISELECT(-360,-236),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C4[0]),
  (VTBL_ENTRY)&_ZN8S19750C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19750C4D1Ev,_ZTv0_n48_N8S19750C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19750C4D0Ev,_ZTv0_n48_N8S19750C4D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S19750C4D1Ev,_ZTv0_n32_N8S19750C4D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S19750C4D0Ev,_ZTv0_n32_N8S19750C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19750C6__8S19750C4__9S19750C18[] = {
  ABISELECT(112,76),
  ABISELECT(-248,-160),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  ABISELECT(112,76),
  (VTBL_ENTRY)&(_ZTI8S19750C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C4D1Ev,_ZTv0_n32_N8S19750C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C4D0Ev,_ZTv0_n32_N8S19750C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__8S19750C4__9S19750C18[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(96,68),
  (VTBL_ENTRY)&(_ZTI8S19750C4[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S19750C4D1Ev,_ZTv0_n28_N8S19750C4D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S19750C4D0Ev,_ZTv0_n28_N8S19750C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19750C11__8S19750C4__9S19750C18[] = {
  ABISELECT(48,24),
  ABISELECT(-312,-212),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S19750C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C4D1Ev,_ZTv0_n28_N8S19750C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C4D0Ev,_ZTv0_n28_N8S19750C4D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S19750C4D1Ev,_ZTv0_n32_N8S19750C4D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S19750C4D0Ev,_ZTv0_n32_N8S19750C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19750C13__8S19750C4__9S19750C18[] = {
  ABISELECT(16,8),
  ABISELECT(-344,-228),
  ABISELECT(16,8),
  ABISELECT(-80,-60),
  ABISELECT(-36,-20),
  ABISELECT(-36,-20),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19750C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C4D1Ev,_ZTv0_n32_N8S19750C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C4D0Ev,_ZTv0_n32_N8S19750C4D0Ev),
};
extern void _ZN8S19750C52v1Ev();
extern void _ZN8S19750C5D1Ev();
extern void _ZN8S19750C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19750C5__9S19750C18[] = {
  ABISELECT(-16,-8),
  0,
  ABISELECT(-48,-24),
  ABISELECT(-52,-28),
  ABISELECT(-52,-28),
  ABISELECT(-96,-68),
  ABISELECT(-112,-76),
  ABISELECT(-360,-236),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C5[0]),
  (VTBL_ENTRY)&_ZN8S19750C52v1Ev,
  (VTBL_ENTRY)&_ZN8S19750C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19750C5D0Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S19750C5D1Ev,_ZTv0_n32_N8S19750C5D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S19750C5D0Ev,_ZTv0_n32_N8S19750C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19750C6__8S19750C5__9S19750C18[] = {
  ABISELECT(112,76),
  ABISELECT(-248,-160),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  ABISELECT(112,76),
  (VTBL_ENTRY)&(_ZTI8S19750C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C5D1Ev,_ZTv0_n32_N8S19750C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C5D0Ev,_ZTv0_n32_N8S19750C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__8S19750C5__9S19750C18[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(96,68),
  (VTBL_ENTRY)&(_ZTI8S19750C5[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S19750C5D1Ev,_ZTv0_n28_N8S19750C5D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S19750C5D0Ev,_ZTv0_n28_N8S19750C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19750C11__8S19750C5__9S19750C18[] = {
  ABISELECT(48,24),
  ABISELECT(-312,-212),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(48,24),
  (VTBL_ENTRY)&(_ZTI8S19750C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C5D1Ev,_ZTv0_n28_N8S19750C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C5D0Ev,_ZTv0_n28_N8S19750C5D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S19750C5D1Ev,_ZTv0_n32_N8S19750C5D1Ev)();
extern void ABISELECT(_ZTv0_n64_N8S19750C5D0Ev,_ZTv0_n32_N8S19750C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19750C13__8S19750C5__9S19750C18[] = {
  ABISELECT(16,8),
  ABISELECT(-344,-228),
  ABISELECT(16,8),
  ABISELECT(-80,-60),
  ABISELECT(-36,-20),
  ABISELECT(-36,-20),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19750C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C5D1Ev,_ZTv0_n32_N8S19750C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C5D0Ev,_ZTv0_n32_N8S19750C5D0Ev),
};
static  VTT_ENTRY vtt_S19750C18[] = {
  {&(_ZTV9S19750C18[16]),  16,74},
  {&(_tg__ZTV9S19750C16__9S19750C18[16]),  16,18},
  {&(_tg__ZTV9S19750C14__9S19750C16__9S19750C18[5]),  5,7},
  {&(_tg__ZTV9S19750C16__9S19750C18[16]),  16,18},
  {&(_tg__ZTV8S19750C6__9S19750C16__9S19750C18[8]),  8,10},
  {&(_tg__ZTV8S19750C8__9S19750C16__9S19750C18[4]),  4,4},
  {&(_tg__ZTV9S19750C11__9S19750C16__9S19750C18[7]),  7,9},
  {&(_tg__ZTV9S19750C14__9S19750C16__9S19750C18[5]),  5,7},
  {&(_tg__ZTV9S19750C13__9S19750C16__9S19750C18[8]),  8,10},
  {&(_tg__ZTV8S19750C4__9S19750C16__9S19750C18[13]),  13,16},
  {&(_tg__ZTV8S19750C4__9S19750C16__9S19750C18[13]),  13,16},
  {&(_tg__ZTV8S19750C4__9S19750C16__9S19750C18[13]),  13,16},
  {&(_ZTV9S19750C18[26]),  26,74},
  {&(_ZTV9S19750C18[32]),  32,74},
  {&(_ZTV9S19750C18[39]),  39,74},
  {&(_ZTV9S19750C18[46]),  46,74},
  {&(_ZTV9S19750C18[16]),  16,74},
  {&(_ZTV9S19750C18[46]),  46,74},
  {&(_ZTV9S19750C18[56]),  56,74},
  {&(_ZTV9S19750C18[71]),  71,74},
  {&(_ZTV9S19750C18[71]),  71,74},
  {&(_ZTV9S19750C18[71]),  71,74},
  {&(_tg__ZTV8S19750C6__9S19750C18[7]),  7,9},
  {&(_tg__ZTV9S19750C108S19750C6__9S19750C18[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C108S19750C6__9S19750C18[4]),  4,4},
  {&(_tg__ZTV8S19750C8__8S19750C6__9S19750C18[4]),  4,4},
  {&(_tg__ZTV9S19750C11__8S19750C6__9S19750C18[7]),  7,9},
  {&(_tg__ZTV8S19750C8__9S19750C18[4]),  4,4},
  {&(_tg__ZTV9S19750C11__9S19750C18[6]),  6,8},
  {&(_tg__ZTV9S19750C109S19750C11__A1__9S19750C18[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C109S19750C11__A1__9S19750C18[4]),  4,4},
  {&(_tg__ZTV8S19750C8__9S19750C11__9S19750C18[4]),  4,4},
  {&(_tg__ZTV9S19750C15__9S19750C18[3]),  3,5},
  {&(_tg__ZTV9S19750C17__9S19750C18[12]),  12,14},
  {&(_tg__ZTV9S19750C129S19750C17__9S19750C18[3]),  3,3},
  {&(_tg__ZTV8S19750C6__9S19750C17__9S19750C18[8]),  8,10},
  {&(_tg__ZTV8S19750C8__9S19750C17__9S19750C18[4]),  4,4},
  {&(_tg__ZTV9S19750C11__9S19750C17__9S19750C18[7]),  7,9},
  {&(_tg__ZTV9S19750C14__9S19750C17__9S19750C18[5]),  5,7},
  {&(_tg__ZTV9S19750C14__9S19750C17__9S19750C18[5]),  5,7},
  {&(_tg__ZTV9S19750C13__9S19750C17__9S19750C18[8]),  8,10},
  {&(_tg__ZTV9S19750C12__A1__9S19750C17__9S19750C18[3]),  3,3},
  {&(_tg__ZTV9S19750C14__9S19750C18[5]),  5,7},
  {&(_tg__ZTV9S19750C14__9S19750C18[5]),  5,7},
  {&(_tg__ZTV9S19750C13__9S19750C18[7]),  7,9},
  {&(_tg__ZTV9S19750C109S19750C13__A2__9S19750C18[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C109S19750C13__A2__9S19750C18[4]),  4,4},
  {&(_tg__ZTV8S19750C8__9S19750C13__9S19750C18[4]),  4,4},
  {&(_tg__ZTV9S19750C12__9S19750C13__9S19750C18[3]),  3,3},
  {&(_tg__ZTV9S19750C12__A1__9S19750C18[3]),  3,3},
  {&(_tg__ZTV8S19750C4__9S19750C18[13]),  13,16},
  {&(_tg__ZTV8S19750C4__9S19750C18[13]),  13,16},
  {&(_tg__ZTV8S19750C6__8S19750C4__9S19750C18[8]),  8,10},
  {&(_tg__ZTV8S19750C8__8S19750C4__9S19750C18[4]),  4,4},
  {&(_tg__ZTV9S19750C11__8S19750C4__9S19750C18[7]),  7,9},
  {&(_tg__ZTV8S19750C4__9S19750C18[13]),  13,16},
  {&(_tg__ZTV9S19750C13__8S19750C4__9S19750C18[8]),  8,10},
  {&(_tg__ZTV8S19750C5__9S19750C18[10]),  10,13},
  {&(_tg__ZTV8S19750C6__8S19750C5__9S19750C18[8]),  8,10},
  {&(_tg__ZTV8S19750C8__8S19750C5__9S19750C18[4]),  4,4},
  {&(_tg__ZTV9S19750C11__8S19750C5__9S19750C18[7]),  7,9},
  {&(_tg__ZTV8S19750C5__9S19750C18[10]),  10,13},
  {&(_tg__ZTV9S19750C13__8S19750C5__9S19750C18[8]),  8,10},
};
extern VTBL_ENTRY _ZTI9S19750C18[];
extern  VTBL_ENTRY _ZTV9S19750C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C18[];
static VTBL_ENTRY alt_thunk_names128[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19750C4D0Ev,_ZTv0_n48_N8S19750C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19750C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19750C4D1Ev,_ZTv0_n48_N8S19750C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19750C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C14D0Ev,_ZTv0_n16_N9S19750C14D0Ev), // 
  (VTBL_ENTRY)_ZN9S19750C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C14D1Ev,_ZTv0_n16_N9S19750C14D1Ev), // 
  (VTBL_ENTRY)_ZN9S19750C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C17D0Ev,_ZTv0_n16_N9S19750C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N9S19750C17D0Ev,_ZThn220_N9S19750C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C17D1Ev,_ZTv0_n16_N9S19750C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N9S19750C17D1Ev,_ZThn220_N9S19750C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19750C17D0Ev,_ZTv0_n28_N9S19750C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N9S19750C17D0Ev,_ZThn212_N9S19750C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19750C17D1Ev,_ZTv0_n28_N9S19750C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N9S19750C17D1Ev,_ZThn212_N9S19750C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19750C17D0Ev,_ZTv0_n32_N9S19750C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N9S19750C17D0Ev,_ZThn228_N9S19750C17D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S19750C17D0Ev,_ZThn160_N9S19750C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19750C17D1Ev,_ZTv0_n32_N9S19750C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N9S19750C17D1Ev,_ZThn228_N9S19750C17D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S19750C17D1Ev,_ZThn160_N9S19750C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19750C6D0Ev,_ZThn52_N8S19750C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19750C6D1Ev,_ZThn52_N8S19750C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19750C16D0Ev,_ZTv0_n48_N9S19750C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn360_N9S19750C16D0Ev,_ZThn236_N9S19750C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19750C16D1Ev,_ZTv0_n48_N9S19750C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn360_N9S19750C16D1Ev,_ZThn236_N9S19750C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19750C16D0Ev,_ZTv0_n28_N9S19750C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N9S19750C16D0Ev,_ZThn212_N9S19750C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19750C16D1Ev,_ZTv0_n28_N9S19750C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N9S19750C16D1Ev,_ZThn212_N9S19750C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19750C16D0Ev,_ZTv0_n32_N9S19750C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N9S19750C16D0Ev,_ZThn228_N9S19750C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S19750C16D0Ev,_ZThn160_N9S19750C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19750C16D1Ev,_ZTv0_n32_N9S19750C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N9S19750C16D1Ev,_ZThn228_N9S19750C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S19750C16D1Ev,_ZThn160_N9S19750C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C16D0Ev,_ZTv0_n16_N9S19750C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N9S19750C16D0Ev,_ZThn220_N9S19750C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C16D1Ev,_ZTv0_n16_N9S19750C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N9S19750C16D1Ev,_ZThn220_N9S19750C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19750C18D0Ev,_ZTv0_n48_N9S19750C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn360_N9S19750C18D0Ev,_ZThn236_N9S19750C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19750C18D1Ev,_ZTv0_n48_N9S19750C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn360_N9S19750C18D1Ev,_ZThn236_N9S19750C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C18D0Ev,_ZTv0_n16_N9S19750C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N9S19750C18D0Ev,_ZThn220_N9S19750C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C18D1Ev,_ZTv0_n16_N9S19750C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn328_N9S19750C18D1Ev,_ZThn220_N9S19750C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19750C18D0Ev,_ZTv0_n28_N9S19750C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N9S19750C18D0Ev,_ZThn212_N9S19750C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19750C18D1Ev,_ZTv0_n28_N9S19750C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N9S19750C18D1Ev,_ZThn212_N9S19750C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19750C18D0Ev,_ZTv0_n32_N9S19750C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N9S19750C18D0Ev,_ZThn228_N9S19750C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S19750C18D0Ev,_ZThn160_N9S19750C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19750C18D1Ev,_ZTv0_n32_N9S19750C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N9S19750C18D1Ev,_ZThn228_N9S19750C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn248_N9S19750C18D1Ev,_ZThn160_N9S19750C18D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19750C18 = {  "S19750C18", // class name
  bases_S19750C18, 26,
  &(vtc_S19750C18[0]), // expected_vtbl_contents
  &(vtt_S19750C18[0]), // expected_vtt_contents
  ABISELECT(384,248), // object size
  NSPAIRA(_ZTI9S19750C18),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19750C18),74, //virtual function table var
  16, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19750C18),63, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names128,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19750C1  : virtual S5635C37_nt , S2264C38 , virtual S19750C4 , virtual S19750C16 , S19750C18 {
  virtual  ~S19750C1(); // _ZN8S19750C1D2Ev
  S19750C1(); // tgen
};
//SIG(1 S19750C1) C1{ VBC2{ m FL} BC3{ m} VBC4{ VBC5{ VBC6{ BC7{ m} VBC8{ VBC9{ m} VBC7 Fi[9]} BC10{ VBC9 VBC7 VBC8 vd Fp} BC9 VBC11{ VBC7 BC9 BC10 VBC3 vd} vd} VBC12{ BC7 VBC3} VBC13{ BC10 BC7 VBC12 vd} BC9 v1} FC14{ VBC15{ VBC9 vd} vd FC3}} VBC16{ VBC15 VBC17{ VBC3 VBC6 BC12 VBC14 VBC13 vd} VBC4 BC9 FC5} BC18{ VBC6 BC16 vd FC19{ BC9 VBC3 VBC13 VBC11 BC20{ BC6 BC12 BC11 BC9 vd} vd}} vd}


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

static void Test_S19750C1()
{
  extern Class_Descriptor cd_S19750C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(64,84)];
    init_test(&cd_S19750C1, buf);
    S19750C1 *dp, &lv = *(dp=new (buf) S19750C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(504,332), "sizeof(S19750C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19750C1)");
    check_base_class_offset(lv, (S5635C37_nt*), ABISELECT(248,160), "S19750C1");
    /*is_ambiguous_... S19750C1::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), 0, "S19750C1");
    /*is_ambiguous_... S19750C6::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C6*), ABISELECT(280,180), "S19750C1");
    check_base_class_offset(lv, (S2264C24*)(S19750C8*), ABISELECT(340,228), "S19750C1");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C6*), ABISELECT(340,228), "S19750C1");
    check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C11*), ABISELECT(340,228), "S19750C1");
    check_base_class_offset(lv, (S2264C24*)(S19750C10*)(S19750C13*), ABISELECT(340,228), "S19750C1");
    check_base_class_offset(lv, (S2264C24*)(S19750C15*), ABISELECT(340,228), "S19750C1");
    check_base_class_offset(lv, (S2264C28*)(S19750C8*), 0, "S19750C1");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C6*), 0, "S19750C1");
    check_base_class_offset(lv, (S2264C28*)(S19750C11*), 0, "S19750C1");
    check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C11*), 0, "S19750C1");
    check_base_class_offset(lv, (S2264C28*)(S19750C10*)(S19750C13*), 0, "S19750C1");
    check_base_class_offset(lv, (S19750C8*)(S19750C6*), ABISELECT(296,188), "S19750C1");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C6*), ABISELECT(296,188), "S19750C1");
    check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C11*), ABISELECT(296,188), "S19750C1");
    check_base_class_offset(lv, (S19750C8*)(S19750C10*)(S19750C13*), ABISELECT(296,188), "S19750C1");
    /*is_ambiguous_... S19750C6::S19750C10 */ AMB_check_base_class_offset(lv, (S19750C10*)(S19750C6*), ABISELECT(280,180), "S19750C1");
    /*is_ambiguous_... S19750C6::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C6*), ABISELECT(280,180), "S19750C1");
    /*is_ambiguous_... S19750C11::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C11*), ABISELECT(344,232), "S19750C1");
    check_base_class_offset(lv, (S19750C10*)(S19750C11*), ABISELECT(344,232), "S19750C1");
    check_base_class_offset(lv, (S2264C38*)(S19750C11*), ABISELECT(360,240), "S19750C1");
    /*is_ambiguous_... S19750C1::S19750C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19750C12*), ABISELECT(360,240), "S19750C1");
    check_base_class_offset(lv, (S2264C38*)(S19750C17*), ABISELECT(360,240), "S19750C1");
    /*is_ambiguous_... S19750C17::S19750C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19750C12*)(S19750C17*), ABISELECT(360,240), "S19750C1");
    check_base_class_offset(lv, (S19750C11*)(S19750C6*), ABISELECT(344,232), "S19750C1");
    check_base_class_offset(lv, (S19750C6*)(S19750C5*), ABISELECT(280,180), "S19750C1");
    check_base_class_offset(lv, (S19750C6*)(S19750C17*), ABISELECT(280,180), "S19750C1");
    check_base_class_offset(lv, (S19750C6*)(S19750C18*), ABISELECT(280,180), "S19750C1");
    /*is_ambiguous_... S19750C1::S19750C12 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C12*), ABISELECT(256,168), "S19750C1");
    check_base_class_offset(lv, (S19750C12*)(S19750C5*), ABISELECT(256,168), "S19750C1");
    check_base_class_offset(lv, (S19750C12*)(S19750C13*), ABISELECT(256,168), "S19750C1");
    check_base_class_offset(lv, (S19750C10*)(S19750C13*), ABISELECT(360,240), "S19750C1");
    /*is_ambiguous_... S19750C13::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C13*), ABISELECT(360,240), "S19750C1");
    check_base_class_offset(lv, (S19750C13*)(S19750C5*), ABISELECT(360,240), "S19750C1");
    check_base_class_offset(lv, (S19750C13*)(S19750C17*), ABISELECT(360,240), "S19750C1");
    /*is_ambiguous_... S19750C5::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C5*), ABISELECT(256,168), "S19750C1");
    check_base_class_offset(lv, (S19750C5*)(S19750C4*), ABISELECT(256,168), "S19750C1");
    check_base_class_offset(lv, (S19750C4*), ABISELECT(256,168), "S19750C1");
    /*is_ambiguous_... S19750C1::S19750C16 */ AMB_check_base_class_offset(lv, (S19750C4*)(S19750C16*), ABISELECT(256,168), "S19750C1");
    check_base_class_offset(lv, (S19750C4*)(S19750C16*)(S19750C18*), ABISELECT(256,168), "S19750C1");
    /*is_ambiguous_... S19750C1::S19750C16 */ AMB_check_base_class_offset(lv, (S19750C15*)(S19750C16*), ABISELECT(488,324), "S19750C1");
    check_base_class_offset(lv, (S19750C15*)(S19750C14*), ABISELECT(488,324), "S19750C1");
    check_base_class_offset(lv, (S19750C15*)(S19750C16*)(S19750C18*), ABISELECT(488,324), "S19750C1");
    /*is_ambiguous_... S19750C17::S19750C12 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19750C12*)(S19750C17*), ABISELECT(376,248), "S19750C1");
    /*is_ambiguous_... S19750C17::S19750C12 */ AMB_check_base_class_offset(lv, (S19750C12*)(S19750C17*), ABISELECT(376,248), "S19750C1");
    check_base_class_offset(lv, (S19750C14*)(S19750C17*), ABISELECT(488,324), "S19750C1");
    /*is_ambiguous_... S19750C1::S19750C16 */ AMB_check_base_class_offset(lv, (S19750C17*)(S19750C16*), ABISELECT(376,248), "S19750C1");
    check_base_class_offset(lv, (S19750C17*)(S19750C16*)(S19750C18*), ABISELECT(376,248), "S19750C1");
    /*is_ambiguous_... S19750C1::S19750C16 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C16*), ABISELECT(376,248), "S19750C1");
    /*is_ambiguous_... S19750C1::S19750C16 */ AMB_check_base_class_offset(lv, (S19750C16*), ABISELECT(376,248), "S19750C1");
    /*is_ambiguous_... S19750C16::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19750C16*)(S19750C18*), 0, "S19750C1");
    check_base_class_offset(lv, (S19750C16*)(S19750C18*), 0, "S19750C1");
    check_base_class_offset(lv, (S19750C18*), 0, "S19750C1");
    test_class_info(&lv, &cd_S19750C1);
    dp->~S19750C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19750C1(Test_S19750C1, "S19750C1", ABISELECT(504,332));

#else // __cplusplus

extern void _ZN8S19750C1C1Ev();
extern void _ZN8S19750C1D2Ev();
Name_Map name_map_S19750C1[] = {
  NSPAIR(_ZN8S19750C1C1Ev),
  NSPAIR(_ZN8S19750C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S5635C37_nt;
extern VTBL_ENTRY _ZTI11S5635C37_nt[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C8;
extern VTBL_ENTRY _ZTI8S19750C8[];
extern  VTBL_ENTRY _ZTV8S19750C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C8[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S19750C11;
extern VTBL_ENTRY _ZTI9S19750C11[];
extern  VTBL_ENTRY _ZTV9S19750C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C11[];
extern Class_Descriptor cd_S19750C6;
extern VTBL_ENTRY _ZTI8S19750C6[];
extern  VTBL_ENTRY _ZTV8S19750C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C6[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C12;
extern VTBL_ENTRY _ZTI9S19750C12[];
extern  VTBL_ENTRY _ZTV9S19750C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C12[];
extern Class_Descriptor cd_S19750C10;
extern VTBL_ENTRY _ZTI9S19750C10[];
extern  VTBL_ENTRY _ZTV9S19750C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C10[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C13;
extern VTBL_ENTRY _ZTI9S19750C13[];
extern  VTBL_ENTRY _ZTV9S19750C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C13[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19750C5;
extern VTBL_ENTRY _ZTI8S19750C5[];
extern  VTBL_ENTRY _ZTV8S19750C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C5[];
extern Class_Descriptor cd_S19750C4;
extern VTBL_ENTRY _ZTI8S19750C4[];
extern  VTBL_ENTRY _ZTV8S19750C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C4[];
extern Class_Descriptor cd_S19750C15;
extern VTBL_ENTRY _ZTI9S19750C15[];
extern  VTBL_ENTRY _ZTV9S19750C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C15[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19750C12;
extern VTBL_ENTRY _ZTI9S19750C12[];
extern  VTBL_ENTRY _ZTV9S19750C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C12[];
extern Class_Descriptor cd_S19750C14;
extern VTBL_ENTRY _ZTI9S19750C14[];
extern  VTBL_ENTRY _ZTV9S19750C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C14[];
extern Class_Descriptor cd_S19750C17;
extern VTBL_ENTRY _ZTI9S19750C17[];
extern  VTBL_ENTRY _ZTV9S19750C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C17[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19750C16;
extern VTBL_ENTRY _ZTI9S19750C16[];
extern  VTBL_ENTRY _ZTV9S19750C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C16[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19750C16;
extern VTBL_ENTRY _ZTI9S19750C16[];
extern  VTBL_ENTRY _ZTV9S19750C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C16[];
extern Class_Descriptor cd_S19750C18;
extern VTBL_ENTRY _ZTI9S19750C18[];
extern  VTBL_ENTRY _ZTV9S19750C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19750C18[];
static Base_Class bases_S19750C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5635C37_nt,    ABISELECT(248,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
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C28,    ABISELECT(280,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
    12, //immediately_derived
  0, 0},
  {&cd_S2264C24,    ABISELECT(340,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19750C8,    ABISELECT(296,188), //bcp->offset
    46, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S19750C10,    ABISELECT(280,180), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2264C24,    ABISELECT(280,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
    12, //immediately_derived
  0, 0},
  {&cd_S2264C24,    ABISELECT(344,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
    11, //immediately_derived
  0, 0},
  {&cd_S19750C10,    ABISELECT(344,232), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(360,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19750C11,    ABISELECT(344,232), //bcp->offset
    50, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    54, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S19750C6,    ABISELECT(280,180), //bcp->offset
    36, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(256,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
    14, //immediately_derived
  0, 0},
  {&cd_S19750C12,    ABISELECT(256,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S19750C10,    ABISELECT(360,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(360,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19750C13,    ABISELECT(360,240), //bcp->offset
    59, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    59, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S2264C24,    ABISELECT(256,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
    19, //immediately_derived
  0, 0},
  {&cd_S19750C5,    ABISELECT(256,168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S19750C4,    ABISELECT(256,168), //bcp->offset
    20, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19750C15,    ABISELECT(488,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    75, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(376,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19750C12,    ABISELECT(376,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    77, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S19750C14,    ABISELECT(488,324), //bcp->offset
    87, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    85, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S19750C17,    ABISELECT(376,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    76, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S2264C24,    ABISELECT(376,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S19750C16,    ABISELECT(376,248), //bcp->offset
    69, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    64, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S19750C16,    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
    16, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19750C18,    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
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19750C1[];
extern void ABISELECT(_ZTv0_n104_N8S19750C1D1Ev,_ZTv0_n52_N8S19750C1D1Ev)();
extern void _ZN8S19750C1D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S19750C1D0Ev,_ZTv0_n52_N8S19750C1D0Ev)();
extern void _ZN8S19750C1D0Ev() __attribute__((weak));
extern void _ZN8S19750C52v1Ev();
extern void ABISELECT(_ZTv0_n96_N8S19750C1D1Ev,_ZTv0_n48_N8S19750C1D1Ev)();
extern void ABISELECT(_ZThn256_N8S19750C1D1Ev,_ZThn168_N8S19750C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19750C1D0Ev,_ZTv0_n48_N8S19750C1D0Ev)();
extern void ABISELECT(_ZThn256_N8S19750C1D0Ev,_ZThn168_N8S19750C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19750C1D1Ev,_ZTv0_n32_N8S19750C1D1Ev)();
extern void ABISELECT(_ZThn280_N8S19750C1D1Ev,_ZThn180_N8S19750C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19750C1D0Ev,_ZTv0_n32_N8S19750C1D0Ev)();
extern void ABISELECT(_ZThn280_N8S19750C1D0Ev,_ZThn180_N8S19750C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19750C1D1Ev,_ZTv0_n28_N8S19750C1D1Ev)();
extern void ABISELECT(_ZThn344_N8S19750C1D1Ev,_ZThn232_N8S19750C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19750C1D0Ev,_ZTv0_n28_N8S19750C1D0Ev)();
extern void ABISELECT(_ZThn344_N8S19750C1D0Ev,_ZThn232_N8S19750C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19750C1D1Ev,_ZTv0_n32_N8S19750C1D1Ev)();
extern void ABISELECT(_ZThn360_N8S19750C1D1Ev,_ZThn240_N8S19750C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19750C1D0Ev,_ZTv0_n32_N8S19750C1D0Ev)();
extern void ABISELECT(_ZThn360_N8S19750C1D0Ev,_ZThn240_N8S19750C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S19750C1D1Ev,_ZTv0_n52_N8S19750C1D1Ev)();
extern void ABISELECT(_ZThn376_N8S19750C1D1Ev,_ZThn248_N8S19750C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N8S19750C1D0Ev,_ZTv0_n52_N8S19750C1D0Ev)();
extern void ABISELECT(_ZThn376_N8S19750C1D0Ev,_ZThn248_N8S19750C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19750C1D1Ev,_ZTv0_n16_N8S19750C1D1Ev)();
extern void ABISELECT(_ZThn488_N8S19750C1D1Ev,_ZThn324_N8S19750C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19750C1D0Ev,_ZTv0_n16_N8S19750C1D0Ev)();
extern void ABISELECT(_ZThn488_N8S19750C1D0Ev,_ZThn324_N8S19750C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19750C1[] = {
  ABISELECT(376,248),
  ABISELECT(248,160),
  ABISELECT(256,168),
  ABISELECT(256,168),
  ABISELECT(376,248),
  0,
  ABISELECT(256,168),
  ABISELECT(360,240),
  ABISELECT(488,324),
  ABISELECT(488,324),
  ABISELECT(344,232),
  0,
  ABISELECT(340,228),
  ABISELECT(296,188),
  ABISELECT(280,180),
  ABISELECT(360,240),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19750C1D1Ev,_ZTv0_n52_N8S19750C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19750C1D0Ev,_ZTv0_n52_N8S19750C1D0Ev),
  0,
  ABISELECT(-256,-168),
  0,
  ABISELECT(104,72),
  0,
  ABISELECT(88,64),
  ABISELECT(-256,-168),
  ABISELECT(84,60),
  ABISELECT(40,20),
  ABISELECT(24,12),
  ABISELECT(104,72),
  ABISELECT(-256,-168),
  (VTBL_ENTRY)&(_ZTI8S19750C1[0]),
  (VTBL_ENTRY)&_ZN8S19750C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19750C1D1Ev,_ZTv0_n48_N8S19750C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19750C1D0Ev,_ZTv0_n48_N8S19750C1D0Ev),
  ABISELECT(-280,-180),
  ABISELECT(80,60),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(-280,-180),
  ABISELECT(60,48),
  ABISELECT(-280,-180),
  (VTBL_ENTRY)&(_ZTI8S19750C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C1D1Ev,_ZTv0_n32_N8S19750C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C1D0Ev,_ZTv0_n32_N8S19750C1D0Ev),
  ABISELECT(-296,-188),
  ABISELECT(44,40),
  ABISELECT(-296,-188),
  (VTBL_ENTRY)&(_ZTI8S19750C1[0]),
  ABISELECT(-344,-232),
  ABISELECT(16,8),
  ABISELECT(-48,-44),
  ABISELECT(-344,-232),
  -4,
  ABISELECT(-344,-232),
  (VTBL_ENTRY)&(_ZTI8S19750C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C1D1Ev,_ZTv0_n28_N8S19750C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C1D0Ev,_ZTv0_n28_N8S19750C1D0Ev),
  ABISELECT(-360,-240),
  0,
  ABISELECT(-104,-72),
  ABISELECT(-64,-52),
  ABISELECT(-360,-240),
  ABISELECT(-20,-12),
  ABISELECT(-360,-240),
  (VTBL_ENTRY)&(_ZTI8S19750C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C1D1Ev,_ZTv0_n32_N8S19750C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C1D0Ev,_ZTv0_n32_N8S19750C1D0Ev),
  ABISELECT(-120,-80),
  ABISELECT(-120,-80),
  0,
  ABISELECT(-376,-248),
  ABISELECT(-120,-80),
  ABISELECT(-16,-8),
  ABISELECT(112,76),
  ABISELECT(112,76),
  ABISELECT(-32,-16),
  ABISELECT(-376,-248),
  ABISELECT(-36,-20),
  ABISELECT(-80,-60),
  ABISELECT(-96,-68),
  ABISELECT(-16,-8),
  ABISELECT(-376,-248),
  (VTBL_ENTRY)&(_ZTI8S19750C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19750C1D1Ev,_ZTv0_n52_N8S19750C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N8S19750C1D0Ev,_ZTv0_n52_N8S19750C1D0Ev),
  0,
  ABISELECT(-488,-324),
  ABISELECT(-148,-96),
  ABISELECT(-488,-324),
  (VTBL_ENTRY)&(_ZTI8S19750C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19750C1D1Ev,_ZTv0_n16_N8S19750C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19750C1D0Ev,_ZTv0_n16_N8S19750C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19750C1[];
extern void ABISELECT(_ZTv0_n104_N9S19750C18D1Ev,_ZTv0_n52_N9S19750C18D1Ev)();
extern void _ZN9S19750C18D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N9S19750C18D0Ev,_ZTv0_n52_N9S19750C18D0Ev)();
extern void _ZN9S19750C18D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C18__8S19750C1[] = {
  ABISELECT(256,168),
  ABISELECT(256,168),
  ABISELECT(376,248),
  0,
  ABISELECT(256,168),
  ABISELECT(360,240),
  ABISELECT(488,324),
  ABISELECT(488,324),
  ABISELECT(344,232),
  0,
  ABISELECT(340,228),
  ABISELECT(296,188),
  ABISELECT(280,180),
  ABISELECT(360,240),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N9S19750C18D1Ev,_ZTv0_n52_N9S19750C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N9S19750C18D0Ev,_ZTv0_n52_N9S19750C18D0Ev),
};
extern void ABISELECT(_ZTv0_n104_N9S19750C16D1Ev,_ZTv0_n52_N9S19750C16D1Ev)();
extern void _ZN9S19750C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N9S19750C16D0Ev,_ZTv0_n52_N9S19750C16D0Ev)();
extern void _ZN9S19750C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C169S19750C18__A1__8S19750C1[] = {
  ABISELECT(256,168),
  ABISELECT(256,168),
  ABISELECT(376,248),
  0,
  ABISELECT(256,168),
  ABISELECT(360,240),
  ABISELECT(488,324),
  ABISELECT(488,324),
  ABISELECT(344,232),
  0,
  ABISELECT(340,228),
  ABISELECT(296,188),
  ABISELECT(280,180),
  ABISELECT(360,240),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N9S19750C16D1Ev,_ZTv0_n52_N9S19750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N9S19750C16D0Ev,_ZTv0_n52_N9S19750C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19750C16D1Ev,_ZTv0_n16_N9S19750C16D1Ev)();
extern void ABISELECT(_ZThn488_N9S19750C16D1Ev,_ZThn324_N9S19750C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19750C16D0Ev,_ZTv0_n16_N9S19750C16D0Ev)();
extern void ABISELECT(_ZThn488_N9S19750C16D0Ev,_ZThn324_N9S19750C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C14__9S19750C169S19750C18__A1__8S19750C1[] = {
  0,
  ABISELECT(-488,-324),
  ABISELECT(-148,-96),
  ABISELECT(-488,-324),
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C16D1Ev,_ZTv0_n16_N9S19750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C16D0Ev,_ZTv0_n16_N9S19750C16D0Ev),
};
extern void ABISELECT(_ZTv0_n104_N9S19750C16D1Ev,_ZTv0_n52_N9S19750C16D1Ev)();
extern void ABISELECT(_ZThn376_N9S19750C16D1Ev,_ZThn248_N9S19750C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N9S19750C16D0Ev,_ZTv0_n52_N9S19750C16D0Ev)();
extern void ABISELECT(_ZThn376_N9S19750C16D0Ev,_ZThn248_N9S19750C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C17__9S19750C169S19750C18__A1__8S19750C1[] = {
  ABISELECT(-376,-248),
  ABISELECT(-120,-80),
  ABISELECT(-16,-8),
  ABISELECT(112,76),
  ABISELECT(112,76),
  ABISELECT(-32,-16),
  ABISELECT(-376,-248),
  ABISELECT(-36,-20),
  ABISELECT(-80,-60),
  ABISELECT(-96,-68),
  ABISELECT(-16,-8),
  ABISELECT(-376,-248),
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N9S19750C16D1Ev,_ZTv0_n52_N9S19750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N9S19750C16D0Ev,_ZTv0_n52_N9S19750C16D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N9S19750C16D1Ev,_ZTv0_n32_N9S19750C16D1Ev)();
extern void ABISELECT(_ZThn280_N9S19750C16D1Ev,_ZThn180_N9S19750C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19750C16D0Ev,_ZTv0_n32_N9S19750C16D0Ev)();
extern void ABISELECT(_ZThn280_N9S19750C16D0Ev,_ZThn180_N9S19750C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19750C6__9S19750C169S19750C18__A1__8S19750C1[] = {
  ABISELECT(-280,-180),
  ABISELECT(80,60),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(-280,-180),
  ABISELECT(60,48),
  ABISELECT(-280,-180),
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C16D1Ev,_ZTv0_n32_N9S19750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C16D0Ev,_ZTv0_n32_N9S19750C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C169S19750C18__A1__8S19750C1[] = {
  ABISELECT(-296,-188),
  ABISELECT(44,40),
  ABISELECT(-296,-188),
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
};
extern void ABISELECT(_ZTv0_n56_N9S19750C16D1Ev,_ZTv0_n28_N9S19750C16D1Ev)();
extern void ABISELECT(_ZThn344_N9S19750C16D1Ev,_ZThn232_N9S19750C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19750C16D0Ev,_ZTv0_n28_N9S19750C16D0Ev)();
extern void ABISELECT(_ZThn344_N9S19750C16D0Ev,_ZThn232_N9S19750C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C11__9S19750C169S19750C18__A1__8S19750C1[] = {
  ABISELECT(-344,-232),
  ABISELECT(16,8),
  ABISELECT(-48,-44),
  ABISELECT(-344,-232),
  -4,
  ABISELECT(-344,-232),
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C16D1Ev,_ZTv0_n28_N9S19750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C16D0Ev,_ZTv0_n28_N9S19750C16D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N9S19750C16D1Ev,_ZTv0_n32_N9S19750C16D1Ev)();
extern void ABISELECT(_ZThn360_N9S19750C16D1Ev,_ZThn240_N9S19750C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19750C16D0Ev,_ZTv0_n32_N9S19750C16D0Ev)();
extern void ABISELECT(_ZThn360_N9S19750C16D0Ev,_ZThn240_N9S19750C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C13__9S19750C169S19750C18__A1__8S19750C1[] = {
  ABISELECT(-360,-240),
  0,
  ABISELECT(-104,-72),
  ABISELECT(-64,-52),
  ABISELECT(-360,-240),
  ABISELECT(-20,-12),
  ABISELECT(-360,-240),
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C16D1Ev,_ZTv0_n32_N9S19750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C16D0Ev,_ZTv0_n32_N9S19750C16D0Ev),
};
extern void _ZN8S19750C52v1Ev();
extern void ABISELECT(_ZTv0_n96_N9S19750C16D1Ev,_ZTv0_n48_N9S19750C16D1Ev)();
extern void ABISELECT(_ZThn256_N9S19750C16D1Ev,_ZThn168_N9S19750C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19750C16D0Ev,_ZTv0_n48_N9S19750C16D0Ev)();
extern void ABISELECT(_ZThn256_N9S19750C16D0Ev,_ZThn168_N9S19750C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19750C4__9S19750C169S19750C18__A1__8S19750C1[] = {
  0,
  ABISELECT(-256,-168),
  0,
  ABISELECT(104,72),
  0,
  ABISELECT(88,64),
  ABISELECT(-256,-168),
  ABISELECT(84,60),
  ABISELECT(40,20),
  ABISELECT(24,12),
  ABISELECT(104,72),
  ABISELECT(-256,-168),
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  (VTBL_ENTRY)&_ZN8S19750C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19750C16D1Ev,_ZTv0_n48_N9S19750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19750C16D0Ev,_ZTv0_n48_N9S19750C16D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N9S19750C18D1Ev,_ZTv0_n32_N9S19750C18D1Ev)();
extern void ABISELECT(_ZThn280_N9S19750C18D1Ev,_ZThn180_N9S19750C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19750C18D0Ev,_ZTv0_n32_N9S19750C18D0Ev)();
extern void ABISELECT(_ZThn280_N9S19750C18D0Ev,_ZThn180_N9S19750C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19750C6__9S19750C18__8S19750C1[] = {
  ABISELECT(-280,-180),
  ABISELECT(80,60),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(-280,-180),
  ABISELECT(60,48),
  ABISELECT(-280,-180),
  (VTBL_ENTRY)&(_ZTI9S19750C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C18D1Ev,_ZTv0_n32_N9S19750C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C18D0Ev,_ZTv0_n32_N9S19750C18D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C18__8S19750C1[] = {
  ABISELECT(-296,-188),
  ABISELECT(44,40),
  ABISELECT(-296,-188),
  (VTBL_ENTRY)&(_ZTI9S19750C18[0]),
};
extern void ABISELECT(_ZTv0_n56_N9S19750C18D1Ev,_ZTv0_n28_N9S19750C18D1Ev)();
extern void ABISELECT(_ZThn344_N9S19750C18D1Ev,_ZThn232_N9S19750C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19750C18D0Ev,_ZTv0_n28_N9S19750C18D0Ev)();
extern void ABISELECT(_ZThn344_N9S19750C18D0Ev,_ZThn232_N9S19750C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C11__9S19750C18__8S19750C1[] = {
  ABISELECT(-344,-232),
  ABISELECT(16,8),
  ABISELECT(-48,-44),
  ABISELECT(-344,-232),
  -4,
  ABISELECT(-344,-232),
  (VTBL_ENTRY)&(_ZTI9S19750C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C18D1Ev,_ZTv0_n28_N9S19750C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C18D0Ev,_ZTv0_n28_N9S19750C18D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19750C18D1Ev,_ZTv0_n16_N9S19750C18D1Ev)();
extern void ABISELECT(_ZThn488_N9S19750C18D1Ev,_ZThn324_N9S19750C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19750C18D0Ev,_ZTv0_n16_N9S19750C18D0Ev)();
extern void ABISELECT(_ZThn488_N9S19750C18D0Ev,_ZThn324_N9S19750C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C14__9S19750C18__8S19750C1[] = {
  0,
  ABISELECT(-488,-324),
  ABISELECT(-148,-96),
  ABISELECT(-488,-324),
  (VTBL_ENTRY)&(_ZTI9S19750C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C18D1Ev,_ZTv0_n16_N9S19750C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C18D0Ev,_ZTv0_n16_N9S19750C18D0Ev),
};
extern void ABISELECT(_ZTv0_n104_N9S19750C18D1Ev,_ZTv0_n52_N9S19750C18D1Ev)();
extern void ABISELECT(_ZThn376_N9S19750C18D1Ev,_ZThn248_N9S19750C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N9S19750C18D0Ev,_ZTv0_n52_N9S19750C18D0Ev)();
extern void ABISELECT(_ZThn376_N9S19750C18D0Ev,_ZThn248_N9S19750C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C17__9S19750C18__8S19750C1[] = {
  ABISELECT(-376,-248),
  ABISELECT(-120,-80),
  ABISELECT(-16,-8),
  ABISELECT(112,76),
  ABISELECT(112,76),
  ABISELECT(-32,-16),
  ABISELECT(-376,-248),
  ABISELECT(-36,-20),
  ABISELECT(-80,-60),
  ABISELECT(-96,-68),
  ABISELECT(-16,-8),
  ABISELECT(-376,-248),
  (VTBL_ENTRY)&(_ZTI9S19750C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N9S19750C18D1Ev,_ZTv0_n52_N9S19750C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N9S19750C18D0Ev,_ZTv0_n52_N9S19750C18D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N9S19750C18D1Ev,_ZTv0_n32_N9S19750C18D1Ev)();
extern void ABISELECT(_ZThn360_N9S19750C18D1Ev,_ZThn240_N9S19750C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19750C18D0Ev,_ZTv0_n32_N9S19750C18D0Ev)();
extern void ABISELECT(_ZThn360_N9S19750C18D0Ev,_ZThn240_N9S19750C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C13__9S19750C18__8S19750C1[] = {
  ABISELECT(-360,-240),
  0,
  ABISELECT(-104,-72),
  ABISELECT(-64,-52),
  ABISELECT(-360,-240),
  ABISELECT(-20,-12),
  ABISELECT(-360,-240),
  (VTBL_ENTRY)&(_ZTI9S19750C18[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C18D1Ev,_ZTv0_n32_N9S19750C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C18D0Ev,_ZTv0_n32_N9S19750C18D0Ev),
};
extern void _ZN8S19750C52v1Ev();
extern void ABISELECT(_ZTv0_n96_N9S19750C18D1Ev,_ZTv0_n48_N9S19750C18D1Ev)();
extern void ABISELECT(_ZThn256_N9S19750C18D1Ev,_ZThn168_N9S19750C18D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N9S19750C18D0Ev,_ZTv0_n48_N9S19750C18D0Ev)();
extern void ABISELECT(_ZThn256_N9S19750C18D0Ev,_ZThn168_N9S19750C18D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19750C4__9S19750C18__8S19750C1[] = {
  0,
  ABISELECT(-256,-168),
  0,
  ABISELECT(104,72),
  0,
  ABISELECT(88,64),
  ABISELECT(-256,-168),
  ABISELECT(84,60),
  ABISELECT(40,20),
  ABISELECT(24,12),
  ABISELECT(104,72),
  ABISELECT(-256,-168),
  (VTBL_ENTRY)&(_ZTI9S19750C18[0]),
  (VTBL_ENTRY)&_ZN8S19750C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19750C18D1Ev,_ZTv0_n48_N9S19750C18D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19750C18D0Ev,_ZTv0_n48_N9S19750C18D0Ev),
};
extern void _ZN8S19750C52v1Ev();
extern void ABISELECT(_ZTv0_n96_N8S19750C4D1Ev,_ZTv0_n48_N8S19750C4D1Ev)();
extern void _ZN8S19750C4D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N8S19750C4D0Ev,_ZTv0_n48_N8S19750C4D0Ev)();
extern void _ZN8S19750C4D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19750C4__8S19750C1[] = {
  0,
  0,
  0,
  ABISELECT(104,72),
  0,
  ABISELECT(88,64),
  ABISELECT(-256,-168),
  ABISELECT(84,60),
  ABISELECT(40,20),
  ABISELECT(24,12),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C4[0]),
  (VTBL_ENTRY)&_ZN8S19750C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19750C4D1Ev,_ZTv0_n48_N8S19750C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N8S19750C4D0Ev,_ZTv0_n48_N8S19750C4D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S19750C4D1Ev,_ZTv0_n32_N8S19750C4D1Ev)();
extern void ABISELECT(_ZThn24_N8S19750C4D1Ev,_ZThn12_N8S19750C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19750C4D0Ev,_ZTv0_n32_N8S19750C4D0Ev)();
extern void ABISELECT(_ZThn24_N8S19750C4D0Ev,_ZThn12_N8S19750C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19750C6__8S19750C4__8S19750C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(80,60),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(-280,-180),
  ABISELECT(60,48),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19750C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C4D1Ev,_ZTv0_n32_N8S19750C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C4D0Ev,_ZTv0_n32_N8S19750C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__8S19750C4__8S19750C1[] = {
  ABISELECT(-296,-188),
  ABISELECT(44,40),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19750C4[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S19750C4D1Ev,_ZTv0_n28_N8S19750C4D1Ev)();
extern void ABISELECT(_ZThn88_N8S19750C4D1Ev,_ZThn64_N8S19750C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19750C4D0Ev,_ZTv0_n28_N8S19750C4D0Ev)();
extern void ABISELECT(_ZThn88_N8S19750C4D0Ev,_ZThn64_N8S19750C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C11__8S19750C4__8S19750C1[] = {
  ABISELECT(-88,-64),
  ABISELECT(16,8),
  ABISELECT(-48,-44),
  ABISELECT(-344,-232),
  -4,
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI8S19750C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C4D1Ev,_ZTv0_n28_N8S19750C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C4D0Ev,_ZTv0_n28_N8S19750C4D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S19750C4D1Ev,_ZTv0_n32_N8S19750C4D1Ev)();
extern void ABISELECT(_ZThn104_N8S19750C4D1Ev,_ZThn72_N8S19750C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19750C4D0Ev,_ZTv0_n32_N8S19750C4D0Ev)();
extern void ABISELECT(_ZThn104_N8S19750C4D0Ev,_ZThn72_N8S19750C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C13__8S19750C4__8S19750C1[] = {
  ABISELECT(-104,-72),
  0,
  ABISELECT(-104,-72),
  ABISELECT(-64,-52),
  ABISELECT(-360,-240),
  ABISELECT(-20,-12),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI8S19750C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C4D1Ev,_ZTv0_n32_N8S19750C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C4D0Ev,_ZTv0_n32_N8S19750C4D0Ev),
};
extern void _ZN8S19750C52v1Ev();
extern void _ZN8S19750C5D1Ev();
extern void _ZN8S19750C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19750C5__8S19750C1[] = {
  ABISELECT(104,72),
  0,
  ABISELECT(88,64),
  ABISELECT(-256,-168),
  ABISELECT(84,60),
  ABISELECT(40,20),
  ABISELECT(24,12),
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C5[0]),
  (VTBL_ENTRY)&_ZN8S19750C52v1Ev,
  (VTBL_ENTRY)&_ZN8S19750C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19750C5D0Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S19750C5D1Ev,_ZTv0_n32_N8S19750C5D1Ev)();
extern void ABISELECT(_ZThn24_N8S19750C5D1Ev,_ZThn12_N8S19750C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19750C5D0Ev,_ZTv0_n32_N8S19750C5D0Ev)();
extern void ABISELECT(_ZThn24_N8S19750C5D0Ev,_ZThn12_N8S19750C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19750C6__8S19750C5__8S19750C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(80,60),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(-280,-180),
  ABISELECT(60,48),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19750C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C5D1Ev,_ZTv0_n32_N8S19750C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C5D0Ev,_ZTv0_n32_N8S19750C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__8S19750C5__8S19750C1[] = {
  ABISELECT(-296,-188),
  ABISELECT(44,40),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19750C5[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S19750C5D1Ev,_ZTv0_n28_N8S19750C5D1Ev)();
extern void ABISELECT(_ZThn88_N8S19750C5D1Ev,_ZThn64_N8S19750C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19750C5D0Ev,_ZTv0_n28_N8S19750C5D0Ev)();
extern void ABISELECT(_ZThn88_N8S19750C5D0Ev,_ZThn64_N8S19750C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C11__8S19750C5__8S19750C1[] = {
  ABISELECT(-88,-64),
  ABISELECT(16,8),
  ABISELECT(-48,-44),
  ABISELECT(-344,-232),
  -4,
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI8S19750C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C5D1Ev,_ZTv0_n28_N8S19750C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C5D0Ev,_ZTv0_n28_N8S19750C5D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S19750C5D1Ev,_ZTv0_n32_N8S19750C5D1Ev)();
extern void ABISELECT(_ZThn104_N8S19750C5D1Ev,_ZThn72_N8S19750C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19750C5D0Ev,_ZTv0_n32_N8S19750C5D0Ev)();
extern void ABISELECT(_ZThn104_N8S19750C5D0Ev,_ZThn72_N8S19750C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C13__8S19750C5__8S19750C1[] = {
  ABISELECT(-104,-72),
  0,
  ABISELECT(-104,-72),
  ABISELECT(-64,-52),
  ABISELECT(-360,-240),
  ABISELECT(-20,-12),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI8S19750C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C5D1Ev,_ZTv0_n32_N8S19750C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19750C5D0Ev,_ZTv0_n32_N8S19750C5D0Ev),
};
extern void _ZN8S19750C6D1Ev();
extern void _ZN8S19750C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19750C6__8S19750C1[] = {
  ABISELECT(80,60),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(-280,-180),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
  (VTBL_ENTRY)&_ZN8S19750C6D1Ev,
  (VTBL_ENTRY)&_ZN8S19750C6D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C108S19750C6__8S19750C1[] = {
  ABISELECT(16,8),
  ABISELECT(-280,-180),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C108S19750C6__8S19750C1[] = {
  ABISELECT(-296,-188),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__8S19750C6__8S19750C1[] = {
  ABISELECT(-296,-188),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev)();
extern void ABISELECT(_ZThn64_N8S19750C6D1Ev,_ZThn52_N8S19750C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev)();
extern void ABISELECT(_ZThn64_N8S19750C6D0Ev,_ZThn52_N8S19750C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C11__8S19750C6__8S19750C1[] = {
  ABISELECT(-64,-52),
  ABISELECT(16,8),
  ABISELECT(-48,-44),
  ABISELECT(-344,-232),
  -4,
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI8S19750C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__8S19750C1[] = {
  ABISELECT(-296,-188),
  ABISELECT(44,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19750C8[0]),
};
extern void _ZN9S19750C11D1Ev();
extern void _ZN9S19750C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C11__8S19750C1[] = {
  ABISELECT(16,8),
  ABISELECT(-48,-44),
  ABISELECT(-344,-232),
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C11[0]),
  (VTBL_ENTRY)&_ZN9S19750C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C11D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C109S19750C11__A1__8S19750C1[] = {
  ABISELECT(-48,-44),
  ABISELECT(-344,-232),
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C109S19750C11__A1__8S19750C1[] = {
  ABISELECT(-296,-188),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C11__8S19750C1[] = {
  ABISELECT(-296,-188),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI9S19750C11[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19750C12__8S19750C1[] = {
  ABISELECT(104,72),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C12[0]),
};
extern void _ZN9S19750C13D1Ev();
extern void _ZN9S19750C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C13__8S19750C1[] = {
  0,
  ABISELECT(-104,-72),
  ABISELECT(-64,-52),
  ABISELECT(-360,-240),
  ABISELECT(-20,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C13[0]),
  (VTBL_ENTRY)&_ZN9S19750C13D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C13D0Ev,
};
extern void _ZN9S19750C10D1Ev();
extern void _ZN9S19750C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C109S19750C13__A2__8S19750C1[] = {
  ABISELECT(-64,-52),
  ABISELECT(-360,-240),
  ABISELECT(-20,-12),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
  (VTBL_ENTRY)&_ZN9S19750C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C109S19750C13__A2__8S19750C1[] = {
  ABISELECT(-296,-188),
  ABISELECT(44,40),
  ABISELECT(64,52),
  (VTBL_ENTRY)&(_ZTI9S19750C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C13__8S19750C1[] = {
  ABISELECT(-296,-188),
  ABISELECT(44,40),
  ABISELECT(64,52),
  (VTBL_ENTRY)&(_ZTI9S19750C13[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19750C12__9S19750C13__8S19750C1[] = {
  ABISELECT(104,72),
  ABISELECT(104,72),
  (VTBL_ENTRY)&(_ZTI9S19750C13[0]),
};
extern void ABISELECT(_ZTv0_n104_N9S19750C16D1Ev,_ZTv0_n52_N9S19750C16D1Ev)();
extern void _ZN9S19750C16D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n104_N9S19750C16D0Ev,_ZTv0_n52_N9S19750C16D0Ev)();
extern void _ZN9S19750C16D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C16__8S19750C1[] = {
  ABISELECT(-120,-80),
  ABISELECT(-120,-80),
  0,
  0,
  ABISELECT(-120,-80),
  ABISELECT(-16,-8),
  ABISELECT(112,76),
  ABISELECT(112,76),
  ABISELECT(-32,-16),
  ABISELECT(-376,-248),
  ABISELECT(-36,-20),
  ABISELECT(-80,-60),
  ABISELECT(-96,-68),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N9S19750C16D1Ev,_ZTv0_n52_N9S19750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n104_N9S19750C16D0Ev,_ZTv0_n52_N9S19750C16D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19750C16D1Ev,_ZTv0_n16_N9S19750C16D1Ev)();
extern void ABISELECT(_ZThn112_N9S19750C16D1Ev,_ZThn76_N9S19750C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19750C16D0Ev,_ZTv0_n16_N9S19750C16D0Ev)();
extern void ABISELECT(_ZThn112_N9S19750C16D0Ev,_ZThn76_N9S19750C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C14__9S19750C16__8S19750C1[] = {
  0,
  ABISELECT(-112,-76),
  ABISELECT(-148,-96),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C16D1Ev,_ZTv0_n16_N9S19750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C16D0Ev,_ZTv0_n16_N9S19750C16D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N9S19750C16D1Ev,_ZTv0_n32_N9S19750C16D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19750C16D0Ev,_ZTv0_n32_N9S19750C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19750C6__9S19750C16__8S19750C1[] = {
  ABISELECT(96,68),
  ABISELECT(80,60),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(-280,-180),
  ABISELECT(60,48),
  ABISELECT(96,68),
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C16D1Ev,_ZTv0_n32_N9S19750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C16D0Ev,_ZTv0_n32_N9S19750C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C16__8S19750C1[] = {
  ABISELECT(-296,-188),
  ABISELECT(44,40),
  ABISELECT(80,60),
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
};
extern void ABISELECT(_ZTv0_n56_N9S19750C16D1Ev,_ZTv0_n28_N9S19750C16D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S19750C16D0Ev,_ZTv0_n28_N9S19750C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19750C11__9S19750C16__8S19750C1[] = {
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-48,-44),
  ABISELECT(-344,-232),
  -4,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C16D1Ev,_ZTv0_n28_N9S19750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C16D0Ev,_ZTv0_n28_N9S19750C16D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N9S19750C16D1Ev,_ZTv0_n32_N9S19750C16D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19750C16D0Ev,_ZTv0_n32_N9S19750C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19750C13__9S19750C16__8S19750C1[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(-104,-72),
  ABISELECT(-64,-52),
  ABISELECT(-360,-240),
  ABISELECT(-20,-12),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C16D1Ev,_ZTv0_n32_N9S19750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C16D0Ev,_ZTv0_n32_N9S19750C16D0Ev),
};
extern void _ZN8S19750C52v1Ev();
extern void ABISELECT(_ZTv0_n96_N9S19750C16D1Ev,_ZTv0_n48_N9S19750C16D1Ev)();
extern void ABISELECT(_ZTv0_n96_N9S19750C16D0Ev,_ZTv0_n48_N9S19750C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19750C4__9S19750C16__8S19750C1[] = {
  0,
  ABISELECT(120,80),
  0,
  ABISELECT(104,72),
  0,
  ABISELECT(88,64),
  ABISELECT(-256,-168),
  ABISELECT(84,60),
  ABISELECT(40,20),
  ABISELECT(24,12),
  ABISELECT(104,72),
  ABISELECT(120,80),
  (VTBL_ENTRY)&(_ZTI9S19750C16[0]),
  (VTBL_ENTRY)&_ZN8S19750C52v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19750C16D1Ev,_ZTv0_n48_N9S19750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N9S19750C16D0Ev,_ZTv0_n48_N9S19750C16D0Ev),
};
extern void _ZN9S19750C15D1Ev();
extern void _ZN9S19750C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C15__8S19750C1[] = {
  ABISELECT(-148,-96),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C15[0]),
  (VTBL_ENTRY)&_ZN9S19750C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C15D0Ev,
};
extern void _ZN9S19750C17D1Ev();
extern void _ZN9S19750C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19750C17__8S19750C1[] = {
  ABISELECT(-120,-80),
  ABISELECT(-16,-8),
  ABISELECT(112,76),
  ABISELECT(112,76),
  ABISELECT(-32,-16),
  ABISELECT(-376,-248),
  ABISELECT(-36,-20),
  ABISELECT(-80,-60),
  ABISELECT(-96,-68),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
  (VTBL_ENTRY)&_ZN9S19750C17D1Ev,
  (VTBL_ENTRY)&_ZN9S19750C17D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19750C129S19750C17__A1__8S19750C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C12[0]),
};
extern void ABISELECT(_ZTv0_n64_N9S19750C17D1Ev,_ZTv0_n32_N9S19750C17D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19750C17D0Ev,_ZTv0_n32_N9S19750C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S19750C6__9S19750C17__8S19750C1[] = {
  ABISELECT(96,68),
  ABISELECT(80,60),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(-280,-180),
  ABISELECT(60,48),
  ABISELECT(96,68),
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C17D1Ev,_ZTv0_n32_N9S19750C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C17D0Ev,_ZTv0_n32_N9S19750C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19750C8__9S19750C17__8S19750C1[] = {
  ABISELECT(-296,-188),
  ABISELECT(44,40),
  ABISELECT(80,60),
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
};
extern void ABISELECT(_ZTv0_n56_N9S19750C17D1Ev,_ZTv0_n28_N9S19750C17D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S19750C17D0Ev,_ZTv0_n28_N9S19750C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19750C11__9S19750C17__8S19750C1[] = {
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-48,-44),
  ABISELECT(-344,-232),
  -4,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C17D1Ev,_ZTv0_n28_N9S19750C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19750C17D0Ev,_ZTv0_n28_N9S19750C17D0Ev),
};
extern void ABISELECT(_ZTv0_n32_N9S19750C17D1Ev,_ZTv0_n16_N9S19750C17D1Ev)();
extern void ABISELECT(_ZThn112_N9S19750C17D1Ev,_ZThn76_N9S19750C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19750C17D0Ev,_ZTv0_n16_N9S19750C17D0Ev)();
extern void ABISELECT(_ZThn112_N9S19750C17D0Ev,_ZThn76_N9S19750C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C14__9S19750C17__8S19750C1[] = {
  0,
  ABISELECT(-112,-76),
  ABISELECT(-148,-96),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C17D1Ev,_ZTv0_n16_N9S19750C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C17D0Ev,_ZTv0_n16_N9S19750C17D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N9S19750C17D1Ev,_ZTv0_n32_N9S19750C17D1Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19750C17D0Ev,_ZTv0_n32_N9S19750C17D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19750C13__9S19750C17__8S19750C1[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(-104,-72),
  ABISELECT(-64,-52),
  ABISELECT(-360,-240),
  ABISELECT(-20,-12),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C17D1Ev,_ZTv0_n32_N9S19750C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19750C17D0Ev,_ZTv0_n32_N9S19750C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S19750C12__A1__9S19750C17__8S19750C1[] = {
  ABISELECT(104,72),
  ABISELECT(120,80),
  (VTBL_ENTRY)&(_ZTI9S19750C17[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S19750C14D1Ev,_ZTv0_n16_N9S19750C14D1Ev)();
extern void _ZN9S19750C14D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S19750C14D0Ev,_ZTv0_n16_N9S19750C14D0Ev)();
extern void _ZN9S19750C14D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19750C14__8S19750C1[] = {
  0,
  0,
  ABISELECT(-148,-96),
  0,
  (VTBL_ENTRY)&(_ZTI9S19750C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C14D1Ev,_ZTv0_n16_N9S19750C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S19750C14D0Ev,_ZTv0_n16_N9S19750C14D0Ev),
};
static  VTT_ENTRY vtt_S19750C1[] = {
  {&(_ZTV8S19750C1[18]),  18,94},
  {&(_tg__ZTV9S19750C18__8S19750C1[16]),  16,18},
  {&(_tg__ZTV9S19750C169S19750C18__A1__8S19750C1[16]),  16,18},
  {&(_tg__ZTV9S19750C14__9S19750C169S19750C18__A1__8S19750C1[5]),  5,7},
  {&(_tg__ZTV9S19750C17__9S19750C169S19750C18__A1__8S19750C1[13]),  13,15},
  {&(_tg__ZTV8S19750C6__9S19750C169S19750C18__A1__8S19750C1[8]),  8,10},
  {&(_tg__ZTV8S19750C8__9S19750C169S19750C18__A1__8S19750C1[4]),  4,4},
  {&(_tg__ZTV9S19750C11__9S19750C169S19750C18__A1__8S19750C1[7]),  7,9},
  {&(_tg__ZTV9S19750C14__9S19750C169S19750C18__A1__8S19750C1[5]),  5,7},
  {&(_tg__ZTV9S19750C13__9S19750C169S19750C18__A1__8S19750C1[8]),  8,10},
  {&(_tg__ZTV8S19750C4__9S19750C169S19750C18__A1__8S19750C1[13]),  13,16},
  {&(_tg__ZTV8S19750C4__9S19750C169S19750C18__A1__8S19750C1[13]),  13,16},
  {&(_tg__ZTV8S19750C4__9S19750C169S19750C18__A1__8S19750C1[13]),  13,16},
  {&(_tg__ZTV8S19750C6__9S19750C18__8S19750C1[8]),  8,10},
  {&(_tg__ZTV8S19750C8__9S19750C18__8S19750C1[4]),  4,4},
  {&(_tg__ZTV9S19750C11__9S19750C18__8S19750C1[7]),  7,9},
  {&(_tg__ZTV9S19750C14__9S19750C18__8S19750C1[5]),  5,7},
  {&(_tg__ZTV9S19750C17__9S19750C18__8S19750C1[13]),  13,15},
  {&(_tg__ZTV9S19750C14__9S19750C18__8S19750C1[5]),  5,7},
  {&(_tg__ZTV9S19750C13__9S19750C18__8S19750C1[8]),  8,10},
  {&(_tg__ZTV8S19750C4__9S19750C18__8S19750C1[13]),  13,16},
  {&(_tg__ZTV8S19750C4__9S19750C18__8S19750C1[13]),  13,16},
  {&(_tg__ZTV8S19750C4__9S19750C18__8S19750C1[13]),  13,16},
  {&(_ZTV8S19750C1[33]),  33,94},
  {&(_ZTV8S19750C1[33]),  33,94},
  {&(_ZTV8S19750C1[44]),  44,94},
  {&(_ZTV8S19750C1[50]),  50,94},
  {&(_ZTV8S19750C1[57]),  57,94},
  {&(_ZTV8S19750C1[33]),  33,94},
  {&(_ZTV8S19750C1[67]),  67,94},
  {&(_ZTV8S19750C1[85]),  85,94},
  {&(_ZTV8S19750C1[92]),  92,94},
  {&(_ZTV8S19750C1[85]),  85,94},
  {&(_ZTV8S19750C1[92]),  92,94},
  {&(_tg__ZTV8S19750C4__8S19750C1[13]),  13,16},
  {&(_tg__ZTV8S19750C4__8S19750C1[13]),  13,16},
  {&(_tg__ZTV8S19750C6__8S19750C4__8S19750C1[8]),  8,10},
  {&(_tg__ZTV8S19750C8__8S19750C4__8S19750C1[4]),  4,4},
  {&(_tg__ZTV9S19750C11__8S19750C4__8S19750C1[7]),  7,9},
  {&(_tg__ZTV8S19750C4__8S19750C1[13]),  13,16},
  {&(_tg__ZTV9S19750C13__8S19750C4__8S19750C1[8]),  8,10},
  {&(_tg__ZTV8S19750C5__8S19750C1[10]),  10,13},
  {&(_tg__ZTV8S19750C6__8S19750C5__8S19750C1[8]),  8,10},
  {&(_tg__ZTV8S19750C8__8S19750C5__8S19750C1[4]),  4,4},
  {&(_tg__ZTV9S19750C11__8S19750C5__8S19750C1[7]),  7,9},
  {&(_tg__ZTV8S19750C5__8S19750C1[10]),  10,13},
  {&(_tg__ZTV9S19750C13__8S19750C5__8S19750C1[8]),  8,10},
  {&(_tg__ZTV8S19750C6__8S19750C1[7]),  7,9},
  {&(_tg__ZTV9S19750C108S19750C6__8S19750C1[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C108S19750C6__8S19750C1[4]),  4,4},
  {&(_tg__ZTV8S19750C8__8S19750C6__8S19750C1[4]),  4,4},
  {&(_tg__ZTV9S19750C11__8S19750C6__8S19750C1[7]),  7,9},
  {&(_tg__ZTV8S19750C8__8S19750C1[4]),  4,4},
  {&(_tg__ZTV9S19750C11__8S19750C1[6]),  6,8},
  {&(_tg__ZTV9S19750C109S19750C11__A1__8S19750C1[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C109S19750C11__A1__8S19750C1[4]),  4,4},
  {&(_tg__ZTV8S19750C8__9S19750C11__8S19750C1[4]),  4,4},
  {&(_tg__ZTV9S19750C12__8S19750C1[3]),  3,3},
  {&(_tg__ZTV9S19750C13__8S19750C1[7]),  7,9},
  {&(_tg__ZTV9S19750C109S19750C13__A2__8S19750C1[5]),  5,7},
  {&(_tg__ZTV8S19750C8__9S19750C109S19750C13__A2__8S19750C1[4]),  4,4},
  {&(_tg__ZTV8S19750C8__9S19750C13__8S19750C1[4]),  4,4},
  {&(_tg__ZTV9S19750C12__9S19750C13__8S19750C1[3]),  3,3},
  {&(_tg__ZTV9S19750C16__8S19750C1[16]),  16,18},
  {&(_tg__ZTV9S19750C14__9S19750C16__8S19750C1[5]),  5,7},
  {&(_tg__ZTV9S19750C16__8S19750C1[16]),  16,18},
  {&(_tg__ZTV8S19750C6__9S19750C16__8S19750C1[8]),  8,10},
  {&(_tg__ZTV8S19750C8__9S19750C16__8S19750C1[4]),  4,4},
  {&(_tg__ZTV9S19750C11__9S19750C16__8S19750C1[7]),  7,9},
  {&(_tg__ZTV9S19750C14__9S19750C16__8S19750C1[5]),  5,7},
  {&(_tg__ZTV9S19750C13__9S19750C16__8S19750C1[8]),  8,10},
  {&(_tg__ZTV8S19750C4__9S19750C16__8S19750C1[13]),  13,16},
  {&(_tg__ZTV8S19750C4__9S19750C16__8S19750C1[13]),  13,16},
  {&(_tg__ZTV8S19750C4__9S19750C16__8S19750C1[13]),  13,16},
  {&(_tg__ZTV9S19750C15__8S19750C1[3]),  3,5},
  {&(_tg__ZTV9S19750C17__8S19750C1[12]),  12,14},
  {&(_tg__ZTV9S19750C129S19750C17__A1__8S19750C1[3]),  3,3},
  {&(_tg__ZTV8S19750C6__9S19750C17__8S19750C1[8]),  8,10},
  {&(_tg__ZTV8S19750C8__9S19750C17__8S19750C1[4]),  4,4},
  {&(_tg__ZTV9S19750C11__9S19750C17__8S19750C1[7]),  7,9},
  {&(_tg__ZTV9S19750C14__9S19750C17__8S19750C1[5]),  5,7},
  {&(_tg__ZTV9S19750C14__9S19750C17__8S19750C1[5]),  5,7},
  {&(_tg__ZTV9S19750C13__9S19750C17__8S19750C1[8]),  8,10},
  {&(_tg__ZTV9S19750C12__A1__9S19750C17__8S19750C1[3]),  3,3},
  {&(_tg__ZTV9S19750C14__8S19750C1[5]),  5,7},
  {&(_tg__ZTV9S19750C14__8S19750C1[5]),  5,7},
};
extern VTBL_ENTRY _ZTI8S19750C1[];
extern  VTBL_ENTRY _ZTV8S19750C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19750C1[];
static VTBL_ENTRY alt_thunk_names129[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C14D0Ev,_ZTv0_n16_N9S19750C14D0Ev), // 
  (VTBL_ENTRY)_ZN9S19750C14D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C14D1Ev,_ZTv0_n16_N9S19750C14D1Ev), // 
  (VTBL_ENTRY)_ZN9S19750C14D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C17D0Ev,_ZTv0_n16_N9S19750C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19750C17D0Ev,_ZThn76_N9S19750C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C17D1Ev,_ZTv0_n16_N9S19750C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19750C17D1Ev,_ZThn76_N9S19750C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C6D0Ev,_ZTv0_n28_N8S19750C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19750C6D0Ev,_ZThn52_N8S19750C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C6D1Ev,_ZTv0_n28_N8S19750C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S19750C6D1Ev,_ZThn52_N8S19750C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C5D0Ev,_ZTv0_n28_N8S19750C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19750C5D0Ev,_ZThn64_N8S19750C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C5D1Ev,_ZTv0_n28_N8S19750C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19750C5D1Ev,_ZThn64_N8S19750C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19750C5D0Ev,_ZTv0_n32_N8S19750C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19750C5D0Ev,_ZThn72_N8S19750C5D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19750C5D0Ev,_ZThn12_N8S19750C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19750C5D1Ev,_ZTv0_n32_N8S19750C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19750C5D1Ev,_ZThn72_N8S19750C5D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19750C5D1Ev,_ZThn12_N8S19750C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C4D0Ev,_ZTv0_n28_N8S19750C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19750C4D0Ev,_ZThn64_N8S19750C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C4D1Ev,_ZTv0_n28_N8S19750C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19750C4D1Ev,_ZThn64_N8S19750C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19750C4D0Ev,_ZTv0_n32_N8S19750C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19750C4D0Ev,_ZThn72_N8S19750C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19750C4D0Ev,_ZThn12_N8S19750C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19750C4D1Ev,_ZTv0_n32_N8S19750C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19750C4D1Ev,_ZThn72_N8S19750C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19750C4D1Ev,_ZThn12_N8S19750C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19750C4D0Ev,_ZTv0_n48_N8S19750C4D0Ev), // 
  (VTBL_ENTRY)_ZN8S19750C4D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19750C4D1Ev,_ZTv0_n48_N8S19750C4D1Ev), // 
  (VTBL_ENTRY)_ZN8S19750C4D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19750C18D0Ev,_ZTv0_n48_N9S19750C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19750C18D0Ev,_ZThn168_N9S19750C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19750C18D1Ev,_ZTv0_n48_N9S19750C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19750C18D1Ev,_ZThn168_N9S19750C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C18D0Ev,_ZTv0_n16_N9S19750C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N9S19750C18D0Ev,_ZThn324_N9S19750C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C18D1Ev,_ZTv0_n16_N9S19750C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N9S19750C18D1Ev,_ZThn324_N9S19750C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19750C18D0Ev,_ZTv0_n28_N9S19750C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N9S19750C18D0Ev,_ZThn232_N9S19750C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19750C18D1Ev,_ZTv0_n28_N9S19750C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N9S19750C18D1Ev,_ZThn232_N9S19750C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19750C18D0Ev,_ZTv0_n32_N9S19750C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn360_N9S19750C18D0Ev,_ZThn240_N9S19750C18D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N9S19750C18D0Ev,_ZThn180_N9S19750C18D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19750C18D1Ev,_ZTv0_n32_N9S19750C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn360_N9S19750C18D1Ev,_ZThn240_N9S19750C18D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N9S19750C18D1Ev,_ZThn180_N9S19750C18D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19750C16D0Ev,_ZTv0_n48_N9S19750C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19750C16D0Ev,_ZThn168_N9S19750C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N9S19750C16D1Ev,_ZTv0_n48_N9S19750C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N9S19750C16D1Ev,_ZThn168_N9S19750C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19750C16D0Ev,_ZTv0_n28_N9S19750C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N9S19750C16D0Ev,_ZThn232_N9S19750C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19750C16D1Ev,_ZTv0_n28_N9S19750C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N9S19750C16D1Ev,_ZThn232_N9S19750C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19750C16D0Ev,_ZTv0_n32_N9S19750C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn360_N9S19750C16D0Ev,_ZThn240_N9S19750C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N9S19750C16D0Ev,_ZThn180_N9S19750C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19750C16D1Ev,_ZTv0_n32_N9S19750C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn360_N9S19750C16D1Ev,_ZThn240_N9S19750C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N9S19750C16D1Ev,_ZThn180_N9S19750C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C16D0Ev,_ZTv0_n16_N9S19750C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19750C16D0Ev,_ZThn76_N9S19750C16D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn488_N9S19750C16D0Ev,_ZThn324_N9S19750C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S19750C16D1Ev,_ZTv0_n16_N9S19750C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N9S19750C16D1Ev,_ZThn76_N9S19750C16D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn488_N9S19750C16D1Ev,_ZThn324_N9S19750C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N9S19750C16D0Ev,_ZTv0_n52_N9S19750C16D0Ev), // 
  (VTBL_ENTRY)_ZN9S19750C16D0Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn376_N9S19750C16D0Ev,_ZThn248_N9S19750C16D0Ev),
  (VTBL_ENTRY)_ZN9S19750C16D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N9S19750C16D1Ev,_ZTv0_n52_N9S19750C16D1Ev), // 
  (VTBL_ENTRY)_ZN9S19750C16D1Ev,
  (VTBL_ENTRY)ABISELECT(_ZThn376_N9S19750C16D1Ev,_ZThn248_N9S19750C16D1Ev),
  (VTBL_ENTRY)_ZN9S19750C16D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N9S19750C18D0Ev,_ZTv0_n52_N9S19750C18D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N9S19750C18D0Ev,_ZThn248_N9S19750C18D0Ev),
  (VTBL_ENTRY)_ZN9S19750C18D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N9S19750C18D1Ev,_ZTv0_n52_N9S19750C18D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N9S19750C18D1Ev,_ZThn248_N9S19750C18D1Ev),
  (VTBL_ENTRY)_ZN9S19750C18D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19750C1D0Ev,_ZTv0_n16_N8S19750C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S19750C1D0Ev,_ZThn324_N8S19750C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19750C1D1Ev,_ZTv0_n16_N8S19750C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S19750C1D1Ev,_ZThn324_N8S19750C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C1D0Ev,_ZTv0_n28_N8S19750C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N8S19750C1D0Ev,_ZThn232_N8S19750C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19750C1D1Ev,_ZTv0_n28_N8S19750C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn344_N8S19750C1D1Ev,_ZThn232_N8S19750C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19750C1D0Ev,_ZTv0_n32_N8S19750C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn360_N8S19750C1D0Ev,_ZThn240_N8S19750C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19750C1D0Ev,_ZThn180_N8S19750C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19750C1D1Ev,_ZTv0_n32_N8S19750C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn360_N8S19750C1D1Ev,_ZThn240_N8S19750C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn280_N8S19750C1D1Ev,_ZThn180_N8S19750C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19750C1D0Ev,_ZTv0_n48_N8S19750C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19750C1D0Ev,_ZThn168_N8S19750C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N8S19750C1D1Ev,_ZTv0_n48_N8S19750C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S19750C1D1Ev,_ZThn168_N8S19750C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19750C1D0Ev,_ZTv0_n52_N8S19750C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S19750C1D0Ev,_ZThn248_N8S19750C1D0Ev),
  (VTBL_ENTRY)_ZN8S19750C1D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n104_N8S19750C1D1Ev,_ZTv0_n52_N8S19750C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N8S19750C1D1Ev,_ZThn248_N8S19750C1D1Ev),
  (VTBL_ENTRY)_ZN8S19750C1D1Ev,
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19750C1 = {  "S19750C1", // class name
  bases_S19750C1, 31,
  &(vtc_S19750C1[0]), // expected_vtbl_contents
  &(vtt_S19750C1[0]), // expected_vtt_contents
  ABISELECT(504,332), // object size
  NSPAIRA(_ZTI8S19750C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19750C1),94, //virtual function table var
  18, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19750C1),86, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names129,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20659C7  : virtual S19566C5 , S19566C6 {
  ::S19566C5 s20659c7f0[3];
  int s20659c7f1[4];
  ~S20659C7(); // tgen
  S20659C7(); // tgen
};
//SIG(-1 S20659C7) C1{ VBC2{ m FL Fp FC3{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC3 FC2[3] Fi[4]}


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

static void Test_S20659C7()
{
  extern Class_Descriptor cd_S20659C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(198,243)];
    init_test(&cd_S20659C7, buf);
    S20659C7 *dp, &lv = *(dp=new (buf) S20659C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1576,968), "sizeof(S20659C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20659C7)");
    check_base_class_offset(lv, (S19566C5*), ABISELECT(1216,748), "S20659C7");
    check_base_class_offset(lv, (S19566C6*), ABISELECT(8,4), "S20659C7");
    check_field_offset(lv, s20659c7f0, ABISELECT(120,72), "S20659C7.s20659c7f0");
    check_field_offset(lv, s20659c7f1, ABISELECT(1200,732), "S20659C7.s20659c7f1");
    test_class_info(&lv, &cd_S20659C7);
    dp->~S20659C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20659C7(Test_S20659C7, "S20659C7", ABISELECT(1576,968));

#else // __cplusplus

extern void _ZN8S20659C7C1Ev();
extern void _ZN8S20659C7D1Ev();
Name_Map name_map_S20659C7[] = {
  NSPAIR(_ZN8S20659C7C1Ev),
  NSPAIR(_ZN8S20659C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
static Base_Class bases_S20659C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19566C6,    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 _ZTI8S20659C7[];
static  VTBL_ENTRY vtc_S20659C7[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
extern VTBL_ENTRY _ZTV8S20659C7[];
static  VTT_ENTRY vtt_S20659C7[] = {
  {&(_ZTV8S20659C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
Class_Descriptor cd_S20659C7 = {  "S20659C7", // class name
  bases_S20659C7, 2,
  &(vtc_S20659C7[0]), // expected_vtbl_contents
  &(vtt_S20659C7[0]), // expected_vtt_contents
  ABISELECT(1576,968), // object size
  NSPAIRA(_ZTI8S20659C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20659C7),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20659C7),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  S20659C8  : S20659C7 , S19566C6 , S19566C5 {
  __tsi64 s20659c8f0[6];
  int s20659c8f1;
  ::S19566C5 s20659c8f2;
  void *s20659c8f3;
  ::S19566C6 s20659c8f4;
  int s20659c8f5;
  void *s20659c8f6[7];
  virtual  ~S20659C8(); // _ZN8S20659C8D2Ev
  S20659C8(); // tgen
};
//SIG(-1 S20659C8) C1{ BC2{ VBC3{ m FL Fp FC4{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC4 FC3[3] Fi[4]} BC4 BC3 vd FL[6] Fi FC3 Fp FC4 Fi Fp[7]}


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

static void Test_S20659C8()
{
  extern Class_Descriptor cd_S20659C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(332,409)];
    init_test(&cd_S20659C8, buf);
    S20659C8 *dp, &lv = *(dp=new (buf) S20659C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2648,1632), "sizeof(S20659C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20659C8)");
    check_base_class_offset(lv, (S19566C5*)(S20659C7*), ABISELECT(2288,1412), "S20659C8");
    check_base_class_offset(lv, (S19566C6*)(S20659C7*), ABISELECT(8,4), "S20659C8");
    check_base_class_offset(lv, (S20659C7*), 0, "S20659C8");
    /*is_ambiguous_... S20659C8::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*), ABISELECT(1216,748), "S20659C8");
    /*is_ambiguous_... S20659C8::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(1328,816), "S20659C8");
    check_field_offset(lv, s20659c8f0, ABISELECT(1688,1036), "S20659C8.s20659c8f0");
    check_field_offset(lv, s20659c8f1, ABISELECT(1736,1084), "S20659C8.s20659c8f1");
    check_field_offset(lv, s20659c8f2, ABISELECT(1744,1088), "S20659C8.s20659c8f2");
    check_field_offset(lv, s20659c8f3, ABISELECT(2104,1308), "S20659C8.s20659c8f3");
    check_field_offset(lv, s20659c8f4, ABISELECT(2112,1312), "S20659C8.s20659c8f4");
    check_field_offset(lv, s20659c8f5, ABISELECT(2224,1380), "S20659C8.s20659c8f5");
    check_field_offset(lv, s20659c8f6, ABISELECT(2232,1384), "S20659C8.s20659c8f6");
    test_class_info(&lv, &cd_S20659C8);
    dp->~S20659C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20659C8(Test_S20659C8, "S20659C8", ABISELECT(2648,1632));

#else // __cplusplus

extern void _ZN8S20659C8C1Ev();
extern void _ZN8S20659C8D2Ev();
Name_Map name_map_S20659C8[] = {
  NSPAIR(_ZN8S20659C8C1Ev),
  NSPAIR(_ZN8S20659C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
static Base_Class bases_S20659C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    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_S20659C7,    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_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S20659C8[];
extern void _ZN8S20659C8D1Ev();
extern void _ZN8S20659C8D0Ev();
static  VTBL_ENTRY vtc_S20659C8[] = {
  ABISELECT(2288,1412),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C8[0]),
  (VTBL_ENTRY)&_ZN8S20659C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C8D0Ev,
};
extern VTBL_ENTRY _ZTV8S20659C8[];
static  VTBL_ENTRY _tg__ZTV8S20659C7__8S20659C8[] = {
  ABISELECT(2288,1412),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
static  VTT_ENTRY vtt_S20659C8[] = {
  {&(_ZTV8S20659C8[3]),  3,5},
  {&(_tg__ZTV8S20659C7__8S20659C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20659C8[];
extern  VTBL_ENTRY _ZTV8S20659C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C8[];
Class_Descriptor cd_S20659C8 = {  "S20659C8", // class name
  bases_S20659C8, 5,
  &(vtc_S20659C8[0]), // expected_vtbl_contents
  &(vtt_S20659C8[0]), // expected_vtt_contents
  ABISELECT(2648,1632), // object size
  NSPAIRA(_ZTI8S20659C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20659C8),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20659C8),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  S20659C6  : virtual S20659C7 , S19566C6 , S19566C5 , S20659C8 {
  int s20659c6f0;
  ::S20659C7 s20659c6f1;
  short s20659c6f2;
  void *s20659c6f3;
  int s20659c6f4[5];
  ~S20659C6(); // tgen
  S20659C6(); // tgen
};
//SIG(-1 S20659C6) C1{ VBC2{ VBC3{ m FL Fp FC4{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC4 FC3[3] Fi[4]} BC4 BC3 BC5{ BC2 BC4 BC3 vd FL[6] Fi FC3 Fp FC4 Fi Fp[7]} Fi FC2 Fs Fp Fi[5]}


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

static void Test_S20659C6()
{
  extern Class_Descriptor cd_S20659C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(746,918)];
    init_test(&cd_S20659C6, buf);
    S20659C6 *dp, &lv = *(dp=new (buf) S20659C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5960,3668), "sizeof(S20659C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20659C6)");
    /*is_ambiguous_... S20659C6::S20659C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C7*), ABISELECT(5600,3448), "S20659C6");
    check_base_class_offset(lv, (S19566C5*)(S20659C7*)(S20659C8*), ABISELECT(5600,3448), "S20659C6");
    /*is_ambiguous_... S20659C6::S20659C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C7*), ABISELECT(4392,2704), "S20659C6");
    /*is_ambiguous_... S20659C6::S20659C7 */ AMB_check_base_class_offset(lv, (S20659C7*), ABISELECT(4384,2700), "S20659C6");
    /*is_ambiguous_... S20659C6::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*), ABISELECT(2288,1412), "S20659C6");
    /*is_ambiguous_... S20659C6::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(2400,1480), "S20659C6");
    check_base_class_offset(lv, (S19566C6*)(S20659C7*)(S20659C8*), ABISELECT(8,4), "S20659C6");
    check_base_class_offset(lv, (S20659C7*)(S20659C8*), 0, "S20659C6");
    /*is_ambiguous_... S20659C8::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C8*), ABISELECT(1216,748), "S20659C6");
    /*is_ambiguous_... S20659C8::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C8*), ABISELECT(1328,816), "S20659C6");
    check_base_class_offset(lv, (S20659C8*), 0, "S20659C6");
    check_field_offset(lv, s20659c6f0, ABISELECT(2760,1700), "S20659C6.s20659c6f0");
    check_field_offset(lv, s20659c6f1, ABISELECT(2768,1704), "S20659C6.s20659c6f1");
    check_field_offset(lv, s20659c6f2, ABISELECT(4344,2672), "S20659C6.s20659c6f2");
    check_field_offset(lv, s20659c6f3, ABISELECT(4352,2676), "S20659C6.s20659c6f3");
    check_field_offset(lv, s20659c6f4, ABISELECT(4360,2680), "S20659C6.s20659c6f4");
    test_class_info(&lv, &cd_S20659C6);
    dp->~S20659C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20659C6(Test_S20659C6, "S20659C6", ABISELECT(5960,3668));

#else // __cplusplus

extern void _ZN8S20659C6C1Ev();
extern void _ZN8S20659C6D1Ev();
Name_Map name_map_S20659C6[] = {
  NSPAIR(_ZN8S20659C6C1Ev),
  NSPAIR(_ZN8S20659C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S20659C8;
extern VTBL_ENTRY _ZTI8S20659C8[];
extern  VTBL_ENTRY _ZTV8S20659C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C8[];
static Base_Class bases_S20659C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(5600,3448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(4392,2704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C7,    ABISELECT(4384,2700), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19566C5,    ABISELECT(2400,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
  1, 0},
  {&cd_S19566C6,    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
    6, //immediately_derived
  0, 0},
  {&cd_S20659C7,    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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C8,    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 _ZTI8S20659C6[];
extern void _ZN8S20659C6D1Ev();
extern void _ZN8S20659C6D0Ev();
static  VTBL_ENTRY vtc_S20659C6[] = {
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C6[0]),
  (VTBL_ENTRY)&_ZN8S20659C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C6D0Ev,
  ABISELECT(1216,748),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI8S20659C6[0]),
};
extern VTBL_ENTRY _ZTV8S20659C6[];
extern void _ZN8S20659C8D1Ev();
extern void _ZN8S20659C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C8__8S20659C6[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C8[0]),
  (VTBL_ENTRY)&_ZN8S20659C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20659C78S20659C8__A1__8S20659C6[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C7__8S20659C6[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
static  VTT_ENTRY vtt_S20659C6[] = {
  {&(_ZTV8S20659C6[4]),  4,9},
  {&(_tg__ZTV8S20659C8__8S20659C6[3]),  3,5},
  {&(_tg__ZTV8S20659C78S20659C8__A1__8S20659C6[3]),  3,3},
  {&(_ZTV8S20659C6[9]),  9,9},
  {&(_tg__ZTV8S20659C7__8S20659C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20659C6[];
extern  VTBL_ENTRY _ZTV8S20659C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C6[];
Class_Descriptor cd_S20659C6 = {  "S20659C6", // class name
  bases_S20659C6, 10,
  &(vtc_S20659C6[0]), // expected_vtbl_contents
  &(vtt_S20659C6[0]), // expected_vtt_contents
  ABISELECT(5960,3668), // object size
  NSPAIRA(_ZTI8S20659C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20659C6),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20659C6),5, //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  S20659C5  : S20659C6 , S20659C7 , S20659C8 , S19566C5 {
  ::S3052C22_nt s20659c5f0;
  int s20659c5f1[2];
  long s20659c5f2;
  void *s20659c5f3;
  virtual  ~S20659C5(); // _ZN8S20659C5D2Ev
  virtual void  v1(); // _ZN8S20659C52v1Ev
  S20659C5(); // tgen
};
//SIG(-1 S20659C5) C1{ BC2{ VBC3{ VBC4{ m FL Fp FC5{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC5 FC4[3] Fi[4]} BC5 BC4 BC6{ BC3 BC5 BC4 vd FL[6] Fi FC4 Fp FC5 Fi Fp[7]} Fi FC3 Fs Fp Fi[5]} BC3 BC6 BC4 vd v1 FC7{} Fi[2] Fl Fp}


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

static void Test_S20659C5()
{
  extern Class_Descriptor cd_S20659C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1233,1518)];
    init_test(&cd_S20659C5, buf);
    S20659C5 *dp, &lv = *(dp=new (buf) S20659C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9856,6068), "sizeof(S20659C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20659C5)");
    /*is_ambiguous_... S20659C5::S20659C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C7*), ABISELECT(9496,5848), "S20659C5");
    check_base_class_offset(lv, (S19566C5*)(S20659C7*)(S20659C8*)(S20659C6*), ABISELECT(9496,5848), "S20659C5");
    /*is_ambiguous_... S20659C5::S20659C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C7*), ABISELECT(9496,5848), "S20659C5");
    /*is_ambiguous_... S20659C5::S20659C8 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C7*)(S20659C8*), ABISELECT(9496,5848), "S20659C5");
    /*is_ambiguous_... S20659C5::S20659C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C7*), ABISELECT(8288,5104), "S20659C5");
    /*is_ambiguous_... S20659C6::S20659C7 */ AMB_check_base_class_offset(lv, (S20659C7*)(S20659C6*), ABISELECT(8280,5100), "S20659C5");
    /*is_ambiguous_... S20659C6::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C6*), ABISELECT(2288,1412), "S20659C5");
    /*is_ambiguous_... S20659C6::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C6*), ABISELECT(2400,1480), "S20659C5");
    check_base_class_offset(lv, (S19566C6*)(S20659C7*)(S20659C8*)(S20659C6*), ABISELECT(8,4), "S20659C5");
    check_base_class_offset(lv, (S20659C7*)(S20659C8*)(S20659C6*), 0, "S20659C5");
    /*is_ambiguous_... S20659C8::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C8*)(S20659C6*), ABISELECT(1216,748), "S20659C5");
    /*is_ambiguous_... S20659C8::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C8*)(S20659C6*), ABISELECT(1328,816), "S20659C5");
    check_base_class_offset(lv, (S20659C8*)(S20659C6*), 0, "S20659C5");
    check_base_class_offset(lv, (S20659C6*), 0, "S20659C5");
    /*is_ambiguous_... S20659C5::S20659C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C7*), ABISELECT(4392,2704), "S20659C5");
    /*is_ambiguous_... S20659C5::S20659C7 */ AMB_check_base_class_offset(lv, (S20659C7*), ABISELECT(4384,2700), "S20659C5");
    /*is_ambiguous_... S20659C5::S20659C8 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C7*)(S20659C8*), ABISELECT(5608,3452), "S20659C5");
    /*is_ambiguous_... S20659C5::S20659C8 */ AMB_check_base_class_offset(lv, (S20659C7*)(S20659C8*), ABISELECT(5600,3448), "S20659C5");
    /*is_ambiguous_... S20659C5::S20659C8 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C8*), ABISELECT(6816,4196), "S20659C5");
    /*is_ambiguous_... S20659C5::S20659C8 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C8*), ABISELECT(6928,4264), "S20659C5");
    /*is_ambiguous_... S20659C5::S20659C8 */ AMB_check_base_class_offset(lv, (S20659C8*), ABISELECT(5600,3448), "S20659C5");
    /*is_ambiguous_... S20659C5::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(7888,4860), "S20659C5");
    check_field_offset(lv, s20659c5f0, ABISELECT(8248,5080), "S20659C5.s20659c5f0");
    check_field_offset(lv, s20659c5f1, ABISELECT(8252,5084), "S20659C5.s20659c5f1");
    check_field_offset(lv, s20659c5f2, ABISELECT(8264,5092), "S20659C5.s20659c5f2");
    check_field_offset(lv, s20659c5f3, ABISELECT(8272,5096), "S20659C5.s20659c5f3");
    test_class_info(&lv, &cd_S20659C5);
    dp->~S20659C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20659C5(Test_S20659C5, "S20659C5", ABISELECT(9856,6068));

#else // __cplusplus

extern void _ZN8S20659C5C1Ev();
extern void _ZN8S20659C5D2Ev();
Name_Map name_map_S20659C5[] = {
  NSPAIR(_ZN8S20659C5C1Ev),
  NSPAIR(_ZN8S20659C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S20659C8;
extern VTBL_ENTRY _ZTI8S20659C8[];
extern  VTBL_ENTRY _ZTV8S20659C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C8[];
extern Class_Descriptor cd_S20659C6;
extern VTBL_ENTRY _ZTI8S20659C6[];
extern  VTBL_ENTRY _ZTV8S20659C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C6[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S20659C8;
extern VTBL_ENTRY _ZTI8S20659C8[];
extern  VTBL_ENTRY _ZTV8S20659C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C8[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
static Base_Class bases_S20659C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(9496,5848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(8288,5104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C7,    ABISELECT(8280,5100), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(2400,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
    10, //immediately_derived
  0, 0},
  {&cd_S19566C6,    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
    6, //immediately_derived
  0, 0},
  {&cd_S20659C7,    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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C8,    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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20659C6,    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_S19566C6,    ABISELECT(4392,2704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C7,    ABISELECT(4384,2700), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19566C6,    ABISELECT(5608,3452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C7,    ABISELECT(5600,3448), //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
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(6816,4196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(6928,4264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C8,    ABISELECT(5600,3448), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19566C5,    ABISELECT(7888,4860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S20659C5[];
extern void _ZN8S20659C5D1Ev();
extern void _ZN8S20659C5D0Ev();
extern void _ZN8S20659C52v1Ev();
extern void ABISELECT(_ZThn5600_N8S20659C5D1Ev,_ZThn3448_N8S20659C5D1Ev)();
extern void ABISELECT(_ZThn5600_N8S20659C5D0Ev,_ZThn3448_N8S20659C5D0Ev)();
static  VTBL_ENTRY vtc_S20659C5[] = {
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C5[0]),
  (VTBL_ENTRY)&_ZN8S20659C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20659C52v1Ev,
  ABISELECT(5112,3148),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI8S20659C5[0]),
  ABISELECT(3896,2400),
  ABISELECT(-5600,-3448),
  (VTBL_ENTRY)&(_ZTI8S20659C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S20659C5D1Ev,_ZThn3448_N8S20659C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S20659C5D0Ev,_ZThn3448_N8S20659C5D0Ev),
  ABISELECT(1216,748),
  ABISELECT(-8280,-5100),
  (VTBL_ENTRY)&(_ZTI8S20659C5[0]),
};
extern VTBL_ENTRY _ZTV8S20659C5[];
extern void _ZN8S20659C6D1Ev();
extern void _ZN8S20659C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C6__8S20659C5[] = {
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C6[0]),
  (VTBL_ENTRY)&_ZN8S20659C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C6D0Ev,
};
extern void _ZN8S20659C8D1Ev();
extern void _ZN8S20659C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C88S20659C6__8S20659C5[] = {
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C8[0]),
  (VTBL_ENTRY)&_ZN8S20659C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20659C78S20659C88S20659C6__A1__8S20659C5[] = {
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C7__8S20659C6__8S20659C5[] = {
  ABISELECT(1216,748),
  ABISELECT(-8280,-5100),
  (VTBL_ENTRY)&(_ZTI8S20659C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C7__A__8S20659C5[] = {
  ABISELECT(5112,3148),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
extern void _ZN8S20659C8D1Ev();
extern void _ZN8S20659C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C8__A1__8S20659C5[] = {
  ABISELECT(3896,2400),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C8[0]),
  (VTBL_ENTRY)&_ZN8S20659C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20659C78S20659C8__A3__8S20659C5[] = {
  ABISELECT(3896,2400),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C7__8S20659C5[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
static  VTT_ENTRY vtt_S20659C5[] = {
  {&(_ZTV8S20659C5[4]),  4,18},
  {&(_tg__ZTV8S20659C6__8S20659C5[4]),  4,6},
  {&(_tg__ZTV8S20659C88S20659C6__8S20659C5[3]),  3,5},
  {&(_tg__ZTV8S20659C78S20659C88S20659C6__A1__8S20659C5[3]),  3,3},
  {&(_tg__ZTV8S20659C7__8S20659C6__8S20659C5[3]),  3,3},
  {&(_tg__ZTV8S20659C7__A__8S20659C5[3]),  3,3},
  {&(_tg__ZTV8S20659C8__A1__8S20659C5[3]),  3,5},
  {&(_tg__ZTV8S20659C78S20659C8__A3__8S20659C5[3]),  3,3},
  {&(_ZTV8S20659C5[18]),  18,18},
  {&(_ZTV8S20659C5[10]),  10,18},
  {&(_ZTV8S20659C5[13]),  13,18},
  {&(_tg__ZTV8S20659C7__8S20659C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20659C5[];
extern  VTBL_ENTRY _ZTV8S20659C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C5[];
Class_Descriptor cd_S20659C5 = {  "S20659C5", // class name
  bases_S20659C5, 19,
  &(vtc_S20659C5[0]), // expected_vtbl_contents
  &(vtt_S20659C5[0]), // expected_vtt_contents
  ABISELECT(9856,6068), // object size
  NSPAIRA(_ZTI8S20659C5),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20659C5),18, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20659C5),12, //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  S20659C2_nt  : virtual S19566C5 , S20659C5 , S20659C8 {
  void *s20659c2f0;
  ::S20659C7 s20659c2f1;
  ~S20659C2_nt(); // tgen
  S20659C2_nt(); // tgen
};
//SIG(-1 S20659C2_nt) C1{ VBC2{ m FL Fp FC3{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC4{ BC5{ VBC6{ VBC2 BC3 FC2[3] Fi[4]} BC3 BC2 BC7{ BC6 BC3 BC2 vd FL[6] Fi FC2 Fp FC3 Fi Fp[7]} Fi FC6 Fs Fp Fi[5]} BC6 BC7 BC2 vd v1 FC8{} Fi[2] Fl Fp} BC7 Fp FC6}


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

//skip512 S20659C2_nt

#else // __cplusplus

extern void _ZN11S20659C2_ntC1Ev();
extern void _ZN11S20659C2_ntD1Ev();
Name_Map name_map_S20659C2_nt[] = {
  NSPAIR(_ZN11S20659C2_ntC1Ev),
  NSPAIR(_ZN11S20659C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S20659C8;
extern VTBL_ENTRY _ZTI8S20659C8[];
extern  VTBL_ENTRY _ZTV8S20659C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C8[];
extern Class_Descriptor cd_S20659C6;
extern VTBL_ENTRY _ZTI8S20659C6[];
extern  VTBL_ENTRY _ZTV8S20659C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C6[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S20659C8;
extern VTBL_ENTRY _ZTI8S20659C8[];
extern  VTBL_ENTRY _ZTV8S20659C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C8[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S20659C5;
extern VTBL_ENTRY _ZTI8S20659C5[];
extern  VTBL_ENTRY _ZTV8S20659C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S20659C8;
extern VTBL_ENTRY _ZTI8S20659C8[];
extern  VTBL_ENTRY _ZTV8S20659C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C8[];
static Base_Class bases_S20659C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(12152,7484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19566C6,    ABISELECT(12520,7708), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C7,    ABISELECT(12512,7704), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(2400,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
    10, //immediately_derived
  0, 0},
  {&cd_S19566C6,    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
    6, //immediately_derived
  0, 0},
  {&cd_S20659C7,    0, //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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C8,    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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20659C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    19, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(4392,2704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C7,    ABISELECT(4384,2700), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(5608,3452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C7,    ABISELECT(5600,3448), //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
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(6816,4196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(6928,4264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C8,    ABISELECT(5600,3448), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(7888,4860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C5,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19566C6,    ABISELECT(8288,5104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C7,    ABISELECT(8280,5100), //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
    9, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(9496,5848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(9608,5916), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C8,    ABISELECT(8280,5100), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI11S20659C2_nt[];
extern void _ZN11S20659C2_ntD1Ev();
extern void _ZN11S20659C2_ntD0Ev();
extern void _ZN8S20659C52v1Ev();
extern void ABISELECT(_ZThn5600_N11S20659C2_ntD1Ev,_ZThn3448_N11S20659C2_ntD1Ev)();
extern void ABISELECT(_ZThn5600_N11S20659C2_ntD0Ev,_ZThn3448_N11S20659C2_ntD0Ev)();
extern void ABISELECT(_ZThn8280_N11S20659C2_ntD1Ev,_ZThn5100_N11S20659C2_ntD1Ev)();
extern void ABISELECT(_ZThn8280_N11S20659C2_ntD0Ev,_ZThn5100_N11S20659C2_ntD0Ev)();
static  VTBL_ENTRY vtc_S20659C2_nt[] = {
  ABISELECT(12512,7704),
  ABISELECT(12152,7484),
  0,
  (VTBL_ENTRY)&(_ZTI11S20659C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S20659C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20659C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S20659C52v1Ev,
  ABISELECT(7768,4784),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI11S20659C2_nt[0]),
  ABISELECT(6552,4036),
  ABISELECT(-5600,-3448),
  (VTBL_ENTRY)&(_ZTI11S20659C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N11S20659C2_ntD1Ev,_ZThn3448_N11S20659C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N11S20659C2_ntD0Ev,_ZThn3448_N11S20659C2_ntD0Ev),
  ABISELECT(3872,2384),
  ABISELECT(-8280,-5100),
  (VTBL_ENTRY)&(_ZTI11S20659C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8280_N11S20659C2_ntD1Ev,_ZThn5100_N11S20659C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8280_N11S20659C2_ntD0Ev,_ZThn5100_N11S20659C2_ntD0Ev),
  ABISELECT(-360,-220),
  ABISELECT(-12512,-7704),
  (VTBL_ENTRY)&(_ZTI11S20659C2_nt[0]),
};
extern VTBL_ENTRY _ZTV11S20659C2_nt[];
extern void _ZN8S20659C5D1Ev();
extern void _ZN8S20659C5D0Ev();
extern void _ZN8S20659C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C5__11S20659C2_nt[] = {
  ABISELECT(12512,7704),
  ABISELECT(12152,7484),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C5[0]),
  (VTBL_ENTRY)&_ZN8S20659C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20659C52v1Ev,
};
extern void _ZN8S20659C6D1Ev();
extern void _ZN8S20659C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C68S20659C5__11S20659C2_nt[] = {
  ABISELECT(12512,7704),
  ABISELECT(12152,7484),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C6[0]),
  (VTBL_ENTRY)&_ZN8S20659C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C6D0Ev,
};
extern void _ZN8S20659C8D1Ev();
extern void _ZN8S20659C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C88S20659C68S20659C5__11S20659C2_nt[] = {
  ABISELECT(12152,7484),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C8[0]),
  (VTBL_ENTRY)&_ZN8S20659C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20659C78S20659C88S20659C68S20659C5__A1__11S20659C2_nt[] = {
  ABISELECT(12152,7484),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C7__8S20659C68S20659C5__11S20659C2_nt[] = {
  ABISELECT(-360,-220),
  ABISELECT(-12512,-7704),
  (VTBL_ENTRY)&(_ZTI8S20659C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C78S20659C5__A2__11S20659C2_nt[] = {
  ABISELECT(7768,4784),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
extern void _ZN8S20659C8D1Ev();
extern void _ZN8S20659C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C88S20659C5__A1__11S20659C2_nt[] = {
  ABISELECT(6552,4036),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C8[0]),
  (VTBL_ENTRY)&_ZN8S20659C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20659C78S20659C88S20659C5__A3__11S20659C2_nt[] = {
  ABISELECT(6552,4036),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C7__8S20659C5__11S20659C2_nt[] = {
  ABISELECT(-360,-220),
  ABISELECT(-12512,-7704),
  (VTBL_ENTRY)&(_ZTI8S20659C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C7__A__8S20659C5__11S20659C2_nt[] = {
  ABISELECT(7768,4784),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI8S20659C5[0]),
};
extern void ABISELECT(_ZThn5600_N8S20659C5D1Ev,_ZThn3448_N8S20659C5D1Ev)();
extern void ABISELECT(_ZThn5600_N8S20659C5D0Ev,_ZThn3448_N8S20659C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20659C8__A1__8S20659C5__11S20659C2_nt[] = {
  ABISELECT(6552,4036),
  ABISELECT(-5600,-3448),
  (VTBL_ENTRY)&(_ZTI8S20659C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S20659C5D1Ev,_ZThn3448_N8S20659C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S20659C5D0Ev,_ZThn3448_N8S20659C5D0Ev),
};
extern void _ZN8S20659C8D1Ev();
extern void _ZN8S20659C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C8__A2__11S20659C2_nt[] = {
  ABISELECT(3872,2384),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C8[0]),
  (VTBL_ENTRY)&_ZN8S20659C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20659C78S20659C8__A4__11S20659C2_nt[] = {
  ABISELECT(3872,2384),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C7__11S20659C2_nt[] = {
  ABISELECT(-360,-220),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
static  VTT_ENTRY vtt_S20659C2_nt[] = {
  {&(_ZTV11S20659C2_nt[4]),  4,23},
  {&(_tg__ZTV8S20659C5__11S20659C2_nt[4]),  4,7},
  {&(_tg__ZTV8S20659C68S20659C5__11S20659C2_nt[4]),  4,6},
  {&(_tg__ZTV8S20659C88S20659C68S20659C5__11S20659C2_nt[3]),  3,5},
  {&(_tg__ZTV8S20659C78S20659C88S20659C68S20659C5__A1__11S20659C2_nt[3]),  3,3},
  {&(_tg__ZTV8S20659C7__8S20659C68S20659C5__11S20659C2_nt[3]),  3,3},
  {&(_tg__ZTV8S20659C78S20659C5__A2__11S20659C2_nt[3]),  3,3},
  {&(_tg__ZTV8S20659C88S20659C5__A1__11S20659C2_nt[3]),  3,5},
  {&(_tg__ZTV8S20659C78S20659C88S20659C5__A3__11S20659C2_nt[3]),  3,3},
  {&(_tg__ZTV8S20659C7__8S20659C5__11S20659C2_nt[3]),  3,3},
  {&(_tg__ZTV8S20659C7__A__8S20659C5__11S20659C2_nt[3]),  3,3},
  {&(_tg__ZTV8S20659C8__A1__8S20659C5__11S20659C2_nt[3]),  3,5},
  {&(_tg__ZTV8S20659C8__A2__11S20659C2_nt[3]),  3,5},
  {&(_tg__ZTV8S20659C78S20659C8__A4__11S20659C2_nt[3]),  3,3},
  {&(_ZTV11S20659C2_nt[23]),  23,23},
  {&(_ZTV11S20659C2_nt[10]),  10,23},
  {&(_ZTV11S20659C2_nt[13]),  13,23},
  {&(_ZTV11S20659C2_nt[18]),  18,23},
  {&(_tg__ZTV8S20659C7__11S20659C2_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI11S20659C2_nt[];
VTBL_ENTRY *P__ZTI11S20659C2_nt = _ZTI11S20659C2_nt; 
extern  VTBL_ENTRY _ZTV11S20659C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20659C2_nt[];
Class_Descriptor cd_S20659C2_nt = {  "S20659C2_nt", // class name
  bases_S20659C2_nt, 25,
  &(vtc_S20659C2_nt[0]), // expected_vtbl_contents
  &(vtt_S20659C2_nt[0]), // expected_vtt_contents
  ABISELECT(13728,8452), // object size
  NSPAIRA(_ZTI11S20659C2_nt),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV11S20659C2_nt),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S20659C2_nt),19, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20659C10  : virtual S20659C6 , virtual S20659C8 , virtual S20659C5 , S19566C5 , virtual S19566C11 {
  int s20659c10f0;
  virtual  ~S20659C10(); // _ZN9S20659C10D2Ev
  virtual void  v2(); // _ZN9S20659C102v2Ev
  S20659C10(); // tgen
};
//SIG(-1 S20659C10) C1{ VBC2{ VBC3{ VBC4{ m FL Fp FC5{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC5 FC4[3] Fi[4]} BC5 BC4 BC6{ BC3 BC5 BC4 vd FL[6] Fi FC4 Fp FC5 Fi Fp[7]} Fi FC3 Fs Fp Fi[5]} VBC6 VBC7{ BC2 BC3 BC6 BC4 vd v2 FC8{} Fi[2] Fl Fp} BC4 VBC9{ m Fp Fc Fi:6 Fl FC8 Fi} vd v1 Fi}


 S20659C10 ::~S20659C10(){ note_dtor("S20659C10", this);}
void  S20659C10 ::v2(){vfunc_called(this, "_ZN9S20659C102v2Ev");}
S20659C10 ::S20659C10(){ note_ctor("S20659C10", this);} // tgen

static void Test_S20659C10()
{
  extern Class_Descriptor cd_S20659C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2118,2608)];
    init_test(&cd_S20659C10, buf);
    S20659C10 *dp, &lv = *(dp=new (buf) S20659C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16936,10428), "sizeof(S20659C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20659C10)");
    /*is_ambiguous_... S20659C10::S20659C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C7*), ABISELECT(5976,3676), "S20659C10");
    /*is_ambiguous_... S20659C10::S20659C6 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C7*)(S20659C8*)(S20659C6*), ABISELECT(5976,3676), "S20659C10");
    /*is_ambiguous_... S20659C10::S20659C8 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C7*)(S20659C8*), ABISELECT(5976,3676), "S20659C10");
    check_base_class_offset(lv, (S19566C5*)(S20659C7*)(S20659C8*)(S20659C6*)(S20659C5*), ABISELECT(5976,3676), "S20659C10");
    /*is_ambiguous_... S20659C5::S20659C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C7*)(S20659C5*), ABISELECT(5976,3676), "S20659C10");
    /*is_ambiguous_... S20659C5::S20659C8 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C7*)(S20659C8*)(S20659C5*), ABISELECT(5976,3676), "S20659C10");
    /*is_ambiguous_... S20659C10::S20659C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C7*), ABISELECT(4768,2932), "S20659C10");
    /*is_ambiguous_... S20659C10::S20659C6 */ AMB_check_base_class_offset(lv, (S20659C7*)(S20659C6*), ABISELECT(4760,2928), "S20659C10");
    /*is_ambiguous_... S20659C6::S20659C7 */ AMB_check_base_class_offset(lv, (S20659C7*)(S20659C6*)(S20659C5*), ABISELECT(4760,2928), "S20659C10");
    /*is_ambiguous_... S20659C10::S20659C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C6*), ABISELECT(2664,1640), "S20659C10");
    /*is_ambiguous_... S20659C10::S20659C6 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C6*), ABISELECT(2776,1708), "S20659C10");
    /*is_ambiguous_... S20659C10::S20659C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C7*)(S20659C8*)(S20659C6*), ABISELECT(384,232), "S20659C10");
    /*is_ambiguous_... S20659C10::S20659C6 */ AMB_check_base_class_offset(lv, (S20659C7*)(S20659C8*)(S20659C6*), ABISELECT(376,228), "S20659C10");
    /*is_ambiguous_... S20659C10::S20659C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C8*)(S20659C6*), ABISELECT(1592,976), "S20659C10");
    /*is_ambiguous_... S20659C10::S20659C6 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C8*)(S20659C6*), ABISELECT(1704,1044), "S20659C10");
    /*is_ambiguous_... S20659C10::S20659C6 */ AMB_check_base_class_offset(lv, (S20659C8*)(S20659C6*), ABISELECT(376,228), "S20659C10");
    /*is_ambiguous_... S20659C10::S20659C6 */ AMB_check_base_class_offset(lv, (S20659C6*), ABISELECT(376,228), "S20659C10");
    /*is_ambiguous_... S20659C10::S20659C8 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C7*)(S20659C8*), ABISELECT(6344,3900), "S20659C10");
    /*is_ambiguous_... S20659C10::S20659C8 */ AMB_check_base_class_offset(lv, (S20659C7*)(S20659C8*), ABISELECT(6336,3896), "S20659C10");
    /*is_ambiguous_... S20659C10::S20659C8 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C8*), ABISELECT(7552,4644), "S20659C10");
    /*is_ambiguous_... S20659C10::S20659C8 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C8*), ABISELECT(7664,4712), "S20659C10");
    /*is_ambiguous_... S20659C10::S20659C8 */ AMB_check_base_class_offset(lv, (S20659C8*), ABISELECT(6336,3896), "S20659C10");
    /*is_ambiguous_... S20659C6::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C6*)(S20659C5*), ABISELECT(10912,6720), "S20659C10");
    /*is_ambiguous_... S20659C6::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C6*)(S20659C5*), ABISELECT(11024,6788), "S20659C10");
    check_base_class_offset(lv, (S19566C6*)(S20659C7*)(S20659C8*)(S20659C6*)(S20659C5*), ABISELECT(8632,5312), "S20659C10");
    check_base_class_offset(lv, (S20659C7*)(S20659C8*)(S20659C6*)(S20659C5*), ABISELECT(8624,5308), "S20659C10");
    /*is_ambiguous_... S20659C8::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C8*)(S20659C6*)(S20659C5*), ABISELECT(9840,6056), "S20659C10");
    /*is_ambiguous_... S20659C8::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C8*)(S20659C6*)(S20659C5*), ABISELECT(9952,6124), "S20659C10");
    check_base_class_offset(lv, (S20659C8*)(S20659C6*)(S20659C5*), ABISELECT(8624,5308), "S20659C10");
    check_base_class_offset(lv, (S20659C6*)(S20659C5*), ABISELECT(8624,5308), "S20659C10");
    /*is_ambiguous_... S20659C5::S20659C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C7*)(S20659C5*), ABISELECT(13016,8012), "S20659C10");
    /*is_ambiguous_... S20659C5::S20659C7 */ AMB_check_base_class_offset(lv, (S20659C7*)(S20659C5*), ABISELECT(13008,8008), "S20659C10");
    /*is_ambiguous_... S20659C5::S20659C8 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C7*)(S20659C8*)(S20659C5*), ABISELECT(14232,8760), "S20659C10");
    /*is_ambiguous_... S20659C5::S20659C8 */ AMB_check_base_class_offset(lv, (S20659C7*)(S20659C8*)(S20659C5*), ABISELECT(14224,8756), "S20659C10");
    /*is_ambiguous_... S20659C5::S20659C8 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C8*)(S20659C5*), ABISELECT(15440,9504), "S20659C10");
    /*is_ambiguous_... S20659C5::S20659C8 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C8*)(S20659C5*), ABISELECT(15552,9572), "S20659C10");
    /*is_ambiguous_... S20659C5::S20659C8 */ AMB_check_base_class_offset(lv, (S20659C8*)(S20659C5*), ABISELECT(14224,8756), "S20659C10");
    /*is_ambiguous_... S20659C5::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C5*), ABISELECT(16512,10168), "S20659C10");
    check_base_class_offset(lv, (S20659C5*), ABISELECT(8624,5308), "S20659C10");
    /*is_ambiguous_... S20659C10::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(8,4), "S20659C10");
    check_base_class_offset(lv, (S19566C11*), ABISELECT(16904,10408), "S20659C10");
    check_field_offset(lv, s20659c10f0, ABISELECT(368,224), "S20659C10.s20659c10f0");
    test_class_info(&lv, &cd_S20659C10);
    dp->~S20659C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20659C10(Test_S20659C10, "S20659C10", ABISELECT(16936,10428));

#else // __cplusplus

extern void _ZN9S20659C10C1Ev();
extern void _ZN9S20659C10D2Ev();
Name_Map name_map_S20659C10[] = {
  NSPAIR(_ZN9S20659C10C1Ev),
  NSPAIR(_ZN9S20659C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S20659C8;
extern VTBL_ENTRY _ZTI8S20659C8[];
extern  VTBL_ENTRY _ZTV8S20659C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C8[];
extern Class_Descriptor cd_S20659C6;
extern VTBL_ENTRY _ZTI8S20659C6[];
extern  VTBL_ENTRY _ZTV8S20659C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C6[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S20659C8;
extern VTBL_ENTRY _ZTI8S20659C8[];
extern  VTBL_ENTRY _ZTV8S20659C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C8[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S20659C8;
extern VTBL_ENTRY _ZTI8S20659C8[];
extern  VTBL_ENTRY _ZTV8S20659C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C8[];
extern Class_Descriptor cd_S20659C6;
extern VTBL_ENTRY _ZTI8S20659C6[];
extern  VTBL_ENTRY _ZTV8S20659C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C6[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S20659C8;
extern VTBL_ENTRY _ZTI8S20659C8[];
extern  VTBL_ENTRY _ZTV8S20659C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C8[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S20659C5;
extern VTBL_ENTRY _ZTI8S20659C5[];
extern  VTBL_ENTRY _ZTV8S20659C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C5[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C11;
extern VTBL_ENTRY _ZTI9S19566C11[];
static Base_Class bases_S20659C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(5976,3676), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(4768,2932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C7,    ABISELECT(4760,2928), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(2664,1640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(2776,1708), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(384,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
    6, //immediately_derived
  0, 0},
  {&cd_S20659C7,    ABISELECT(376,228), //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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1592,976), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1704,1044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C8,    ABISELECT(376,228), //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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20659C6,    ABISELECT(376,228), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(6344,3900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C7,    ABISELECT(6336,3896), //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
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(7552,4644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 0},
  {&cd_S19566C5,    ABISELECT(7664,4712), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 0},
  {&cd_S20659C8,    ABISELECT(6336,3896), //bcp->offset
    21, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(10912,6720), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(11024,6788), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(8632,5312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C7,    ABISELECT(8624,5308), //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
    7, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(9840,6056), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(9952,6124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C8,    ABISELECT(8624,5308), //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
    8, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S20659C6,    ABISELECT(8624,5308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(13016,8012), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C7,    ABISELECT(13008,8008), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(14232,8760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S20659C7,    ABISELECT(14224,8756), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(15440,9504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(15552,9572), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C8,    ABISELECT(14224,8756), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(16512,10168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C5,    ABISELECT(8624,5308), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C5,    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_S19566C11,    ABISELECT(16904,10408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S20659C10[];
extern void _ZN9S20659C10D1Ev();
extern void _ZN9S20659C10D0Ev();
extern void _ZN9S20659C102v2Ev();
extern void ABISELECT(_ZTv0_n40_N9S20659C10D1Ev,_ZTv0_n20_N9S20659C10D1Ev)();
extern void ABISELECT(_ZThn376_N9S20659C10D1Ev,_ZThn228_N9S20659C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20659C10D0Ev,_ZTv0_n20_N9S20659C10D0Ev)();
extern void ABISELECT(_ZThn376_N9S20659C10D0Ev,_ZThn228_N9S20659C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20659C10D1Ev,_ZTv0_n16_N9S20659C10D1Ev)();
extern void ABISELECT(_ZThn6336_N9S20659C10D1Ev,_ZThn3896_N9S20659C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20659C10D0Ev,_ZTv0_n16_N9S20659C10D0Ev)();
extern void ABISELECT(_ZThn6336_N9S20659C10D0Ev,_ZThn3896_N9S20659C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20659C10D1Ev,_ZTv0_n20_N9S20659C10D1Ev)();
extern void ABISELECT(_ZThn8624_N9S20659C10D1Ev,_ZThn5308_N9S20659C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20659C10D0Ev,_ZTv0_n20_N9S20659C10D0Ev)();
extern void ABISELECT(_ZThn8624_N9S20659C10D0Ev,_ZThn5308_N9S20659C10D0Ev)() __attribute__((weak));
extern void _ZN8S20659C52v1Ev();
extern void ABISELECT(_ZTvn5600_n40_N9S20659C10D1Ev,_ZTvn3448_n20_N9S20659C10D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N9S20659C10D0Ev,_ZTvn3448_n20_N9S20659C10D0Ev)();
static  VTBL_ENTRY vtc_S20659C10[] = {
  ABISELECT(16904,10408),
  ABISELECT(8624,5308),
  ABISELECT(6336,3896),
  ABISELECT(5976,3676),
  ABISELECT(4760,2928),
  ABISELECT(376,228),
  0,
  (VTBL_ENTRY)&(_ZTI9S20659C10[0]),
  (VTBL_ENTRY)&_ZN9S20659C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20659C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20659C102v2Ev,
  ABISELECT(-376,-228),
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  ABISELECT(-376,-228),
  (VTBL_ENTRY)&(_ZTI9S20659C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20659C10D1Ev,_ZTv0_n20_N9S20659C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20659C10D0Ev,_ZTv0_n20_N9S20659C10D0Ev),
  ABISELECT(1216,748),
  ABISELECT(-4760,-2928),
  (VTBL_ENTRY)&(_ZTI9S20659C10[0]),
  ABISELECT(-6336,-3896),
  ABISELECT(-360,-220),
  ABISELECT(-6336,-3896),
  (VTBL_ENTRY)&(_ZTI9S20659C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20659C10D1Ev,_ZTv0_n16_N9S20659C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20659C10D0Ev,_ZTv0_n16_N9S20659C10D0Ev),
  0,
  ABISELECT(-8624,-5308),
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  ABISELECT(-8624,-5308),
  (VTBL_ENTRY)&(_ZTI9S20659C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20659C10D1Ev,_ZTv0_n20_N9S20659C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20659C10D0Ev,_ZTv0_n20_N9S20659C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20659C52v1Ev,
  ABISELECT(-7032,-4332),
  ABISELECT(-13008,-8008),
  (VTBL_ENTRY)&(_ZTI9S20659C10[0]),
  ABISELECT(-8248,-5080),
  ABISELECT(-14224,-8756),
  (VTBL_ENTRY)&(_ZTI9S20659C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N9S20659C10D1Ev,_ZTvn3448_n20_N9S20659C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N9S20659C10D0Ev,_ZTvn3448_n20_N9S20659C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S20659C10[];
extern void _ZN8S20659C6D1Ev();
extern void _ZN8S20659C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C6__9S20659C10[] = {
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C6[0]),
  (VTBL_ENTRY)&_ZN8S20659C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C6D0Ev,
};
extern void _ZN8S20659C8D1Ev();
extern void _ZN8S20659C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C88S20659C6__9S20659C10[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C8[0]),
  (VTBL_ENTRY)&_ZN8S20659C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20659C78S20659C88S20659C6__A1__9S20659C10[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C7__8S20659C6__9S20659C10[] = {
  ABISELECT(1216,748),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI8S20659C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C7__9S20659C10[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
extern void _ZN8S20659C8D1Ev();
extern void _ZN8S20659C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C8__A1__9S20659C10[] = {
  ABISELECT(-360,-220),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C8[0]),
  (VTBL_ENTRY)&_ZN8S20659C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20659C78S20659C8__A2__9S20659C10[] = {
  ABISELECT(-360,-220),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
extern void _ZN8S20659C5D1Ev();
extern void _ZN8S20659C5D0Ev();
extern void _ZN8S20659C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C5__9S20659C10[] = {
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C5[0]),
  (VTBL_ENTRY)&_ZN8S20659C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20659C52v1Ev,
};
extern void _ZN8S20659C6D1Ev();
extern void _ZN8S20659C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C68S20659C5__A1__9S20659C10[] = {
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C6[0]),
  (VTBL_ENTRY)&_ZN8S20659C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C6D0Ev,
};
extern void _ZN8S20659C8D1Ev();
extern void _ZN8S20659C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C88S20659C68S20659C5__A2__9S20659C10[] = {
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C8[0]),
  (VTBL_ENTRY)&_ZN8S20659C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20659C78S20659C88S20659C68S20659C5__A3__9S20659C10[] = {
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C7__8S20659C68S20659C5__A1__9S20659C10[] = {
  ABISELECT(1216,748),
  ABISELECT(3864,2380),
  (VTBL_ENTRY)&(_ZTI8S20659C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C78S20659C5__A4__9S20659C10[] = {
  ABISELECT(-7032,-4332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
extern void _ZN8S20659C8D1Ev();
extern void _ZN8S20659C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C88S20659C5__A3__9S20659C10[] = {
  ABISELECT(-8248,-5080),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C8[0]),
  (VTBL_ENTRY)&_ZN8S20659C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20659C78S20659C88S20659C5__A5__9S20659C10[] = {
  ABISELECT(-8248,-5080),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C7__8S20659C5__9S20659C10[] = {
  ABISELECT(1216,748),
  ABISELECT(3864,2380),
  (VTBL_ENTRY)&(_ZTI8S20659C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C7__A__8S20659C5__9S20659C10[] = {
  ABISELECT(-7032,-4332),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI8S20659C5[0]),
};
extern void ABISELECT(_ZThn5600_N8S20659C5D1Ev,_ZThn3448_N8S20659C5D1Ev)();
extern void ABISELECT(_ZThn5600_N8S20659C5D0Ev,_ZThn3448_N8S20659C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20659C8__A1__8S20659C5__9S20659C10[] = {
  ABISELECT(-8248,-5080),
  ABISELECT(-5600,-3448),
  (VTBL_ENTRY)&(_ZTI8S20659C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S20659C5D1Ev,_ZThn3448_N8S20659C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S20659C5D0Ev,_ZThn3448_N8S20659C5D0Ev),
};
static  VTT_ENTRY vtt_S20659C10[] = {
  {&(_ZTV9S20659C10[8]),  8,44},
  {&(_ZTV9S20659C10[16]),  16,44},
  {&(_ZTV9S20659C10[21]),  21,44},
  {&(_ZTV9S20659C10[25]),  25,44},
  {&(_ZTV9S20659C10[33]),  33,44},
  {&(_ZTV9S20659C10[39]),  39,44},
  {&(_ZTV9S20659C10[42]),  42,44},
  {&(_tg__ZTV8S20659C6__9S20659C10[4]),  4,6},
  {&(_tg__ZTV8S20659C88S20659C6__9S20659C10[3]),  3,5},
  {&(_tg__ZTV8S20659C78S20659C88S20659C6__A1__9S20659C10[3]),  3,3},
  {&(_tg__ZTV8S20659C7__8S20659C6__9S20659C10[3]),  3,3},
  {&(_tg__ZTV8S20659C7__9S20659C10[3]),  3,3},
  {&(_tg__ZTV8S20659C8__A1__9S20659C10[3]),  3,5},
  {&(_tg__ZTV8S20659C78S20659C8__A2__9S20659C10[3]),  3,3},
  {&(_tg__ZTV8S20659C5__9S20659C10[4]),  4,7},
  {&(_tg__ZTV8S20659C68S20659C5__A1__9S20659C10[4]),  4,6},
  {&(_tg__ZTV8S20659C88S20659C68S20659C5__A2__9S20659C10[3]),  3,5},
  {&(_tg__ZTV8S20659C78S20659C88S20659C68S20659C5__A3__9S20659C10[3]),  3,3},
  {&(_tg__ZTV8S20659C7__8S20659C68S20659C5__A1__9S20659C10[3]),  3,3},
  {&(_tg__ZTV8S20659C78S20659C5__A4__9S20659C10[3]),  3,3},
  {&(_tg__ZTV8S20659C88S20659C5__A3__9S20659C10[3]),  3,5},
  {&(_tg__ZTV8S20659C78S20659C88S20659C5__A5__9S20659C10[3]),  3,3},
  {&(_tg__ZTV8S20659C7__8S20659C5__9S20659C10[3]),  3,3},
  {&(_tg__ZTV8S20659C7__A__8S20659C5__9S20659C10[3]),  3,3},
  {&(_tg__ZTV8S20659C8__A1__8S20659C5__9S20659C10[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20659C10[];
extern  VTBL_ENTRY _ZTV9S20659C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20659C10[];
static VTBL_ENTRY alt_thunk_names130[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20659C10D0Ev,_ZTv0_n16_N9S20659C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6336_N9S20659C10D0Ev,_ZThn3896_N9S20659C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20659C10D1Ev,_ZTv0_n16_N9S20659C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6336_N9S20659C10D1Ev,_ZThn3896_N9S20659C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20659C10D0Ev,_ZTv0_n20_N9S20659C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8624_N9S20659C10D0Ev,_ZThn5308_N9S20659C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn376_N9S20659C10D0Ev,_ZThn228_N9S20659C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20659C10D1Ev,_ZTv0_n20_N9S20659C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8624_N9S20659C10D1Ev,_ZThn5308_N9S20659C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn376_N9S20659C10D1Ev,_ZThn228_N9S20659C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20659C10 = {  "S20659C10", // class name
  bases_S20659C10, 35,
  &(vtc_S20659C10[0]), // expected_vtbl_contents
  &(vtt_S20659C10[0]), // expected_vtt_contents
  ABISELECT(16936,10428), // object size
  NSPAIRA(_ZTI9S20659C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20659C10),44, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20659C10),25, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names130,
};
#endif // __cplusplus

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

#ifdef __cplusplus

union  S20659C12_nt  {
  long double s20659c12f0[9];
  void *s20659c12f1;
  void  mf20659c12(); // _ZN12S20659C12_nt10mf20659c12Ev
};
//SIG(1 S20659C12_nt) U1{ m FD[9] Fp}

#endif // __cplusplus
#ifdef __cplusplus

struct  S20659C1  : virtual S20659C2_nt , virtual S20659C10 {
  char s20659c1f0;
  int s20659c1f1;
  void *s20659c1f2;
  long double s20659c1f3;
  __tsi64 s20659c1f4;
  ::S20659C5 s20659c1f5;
  ::S20659C12_nt s20659c1f6;
  virtual  ~S20659C1(); // _ZN8S20659C1D2Ev
  S20659C1(); // tgen
};
//SIG(1 S20659C1) C1{ VBC2{ VBC3{ m FL Fp FC4{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC5{ BC6{ VBC7{ VBC3 BC4 FC3[3] Fi[4]} BC4 BC3 BC8{ BC7 BC4 BC3 vd FL[6] Fi FC3 Fp FC4 Fi Fp[7]} Fi FC7 Fs Fp Fi[5]} BC7 BC8 BC3 vd v1 FC9{} Fi[2] Fl Fp} BC8 Fp FC7} VBC10{ VBC6 VBC8 VBC5 BC3 VBC11{ m Fp Fc Fi:6 Fl FC9 Fi} vd v2 Fi} vd Fc Fi Fp FD FL FC5 FU12{ m FD[9] Fp}}


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

static void Test_S20659C1()
{
  extern Class_Descriptor cd_S20659C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(2448,6032)];
    init_test(&cd_S20659C1, buf);
    S20659C1 *dp, &lv = *(dp=new (buf) S20659C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(39152,24124), "sizeof(S20659C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20659C1)");
    /*is_ambiguous_... S20659C2_nt::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C2_nt*), ABISELECT(22216,13696), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C7*), ABISELECT(22216,13696), "S20659C1");
    check_base_class_offset(lv, (S19566C5*)(S20659C7*)(S20659C8*)(S20659C6*)(S20659C5*)(S20659C2_nt*), ABISELECT(22216,13696), "S20659C1");
    /*is_ambiguous_... S20659C5::S20659C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C7*)(S20659C5*)(S20659C2_nt*), ABISELECT(22216,13696), "S20659C1");
    /*is_ambiguous_... S20659C5::S20659C8 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C7*)(S20659C8*)(S20659C5*)(S20659C2_nt*), ABISELECT(22216,13696), "S20659C1");
    /*is_ambiguous_... S20659C2_nt::S20659C8 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C7*)(S20659C8*)(S20659C2_nt*), ABISELECT(22216,13696), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C6 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C7*)(S20659C8*)(S20659C6*), ABISELECT(22216,13696), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C8 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C7*)(S20659C8*), ABISELECT(22216,13696), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C7*)(S20659C8*)(S20659C6*)(S20659C5*), ABISELECT(22216,13696), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C7*)(S20659C5*), ABISELECT(22216,13696), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C7*)(S20659C8*)(S20659C5*), ABISELECT(22216,13696), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C7*), ABISELECT(22584,13920), "S20659C1");
    /*is_ambiguous_... S20659C6::S20659C7 */ AMB_check_base_class_offset(lv, (S20659C7*)(S20659C6*)(S20659C5*)(S20659C2_nt*), ABISELECT(22576,13916), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C6 */ AMB_check_base_class_offset(lv, (S20659C7*)(S20659C6*), ABISELECT(22576,13916), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C5 */ AMB_check_base_class_offset(lv, (S20659C7*)(S20659C6*)(S20659C5*), ABISELECT(22576,13916), "S20659C1");
    /*is_ambiguous_... S20659C6::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C6*)(S20659C5*)(S20659C2_nt*), ABISELECT(12352,7624), "S20659C1");
    /*is_ambiguous_... S20659C6::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C6*)(S20659C5*)(S20659C2_nt*), ABISELECT(12464,7692), "S20659C1");
    check_base_class_offset(lv, (S19566C6*)(S20659C7*)(S20659C8*)(S20659C6*)(S20659C5*)(S20659C2_nt*), ABISELECT(10072,6216), "S20659C1");
    check_base_class_offset(lv, (S20659C7*)(S20659C8*)(S20659C6*)(S20659C5*)(S20659C2_nt*), ABISELECT(10064,6212), "S20659C1");
    /*is_ambiguous_... S20659C8::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C8*)(S20659C6*)(S20659C5*)(S20659C2_nt*), ABISELECT(11280,6960), "S20659C1");
    /*is_ambiguous_... S20659C8::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C8*)(S20659C6*)(S20659C5*)(S20659C2_nt*), ABISELECT(11392,7028), "S20659C1");
    check_base_class_offset(lv, (S20659C8*)(S20659C6*)(S20659C5*)(S20659C2_nt*), ABISELECT(10064,6212), "S20659C1");
    check_base_class_offset(lv, (S20659C6*)(S20659C5*)(S20659C2_nt*), ABISELECT(10064,6212), "S20659C1");
    /*is_ambiguous_... S20659C5::S20659C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C7*)(S20659C5*)(S20659C2_nt*), ABISELECT(14456,8916), "S20659C1");
    /*is_ambiguous_... S20659C5::S20659C7 */ AMB_check_base_class_offset(lv, (S20659C7*)(S20659C5*)(S20659C2_nt*), ABISELECT(14448,8912), "S20659C1");
    /*is_ambiguous_... S20659C5::S20659C8 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C7*)(S20659C8*)(S20659C5*)(S20659C2_nt*), ABISELECT(15672,9664), "S20659C1");
    /*is_ambiguous_... S20659C5::S20659C8 */ AMB_check_base_class_offset(lv, (S20659C7*)(S20659C8*)(S20659C5*)(S20659C2_nt*), ABISELECT(15664,9660), "S20659C1");
    /*is_ambiguous_... S20659C5::S20659C8 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C8*)(S20659C5*)(S20659C2_nt*), ABISELECT(16880,10408), "S20659C1");
    /*is_ambiguous_... S20659C5::S20659C8 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C8*)(S20659C5*)(S20659C2_nt*), ABISELECT(16992,10476), "S20659C1");
    /*is_ambiguous_... S20659C5::S20659C8 */ AMB_check_base_class_offset(lv, (S20659C8*)(S20659C5*)(S20659C2_nt*), ABISELECT(15664,9660), "S20659C1");
    /*is_ambiguous_... S20659C5::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C5*)(S20659C2_nt*), ABISELECT(17952,11072), "S20659C1");
    check_base_class_offset(lv, (S20659C5*)(S20659C2_nt*), ABISELECT(10064,6212), "S20659C1");
    /*is_ambiguous_... S20659C2_nt::S20659C8 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C7*)(S20659C8*)(S20659C2_nt*), ABISELECT(18352,11316), "S20659C1");
    /*is_ambiguous_... S20659C2_nt::S20659C8 */ AMB_check_base_class_offset(lv, (S20659C7*)(S20659C8*)(S20659C2_nt*), ABISELECT(18344,11312), "S20659C1");
    /*is_ambiguous_... S20659C2_nt::S20659C8 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C8*)(S20659C2_nt*), ABISELECT(19560,12060), "S20659C1");
    /*is_ambiguous_... S20659C2_nt::S20659C8 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C8*)(S20659C2_nt*), ABISELECT(19672,12128), "S20659C1");
    /*is_ambiguous_... S20659C2_nt::S20659C8 */ AMB_check_base_class_offset(lv, (S20659C8*)(S20659C2_nt*), ABISELECT(18344,11312), "S20659C1");
    check_base_class_offset(lv, (S20659C2_nt*), ABISELECT(10064,6212), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C6*), ABISELECT(26456,16304), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C6 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C6*), ABISELECT(26568,16372), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C7*)(S20659C8*)(S20659C6*), ABISELECT(24176,14896), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C6 */ AMB_check_base_class_offset(lv, (S20659C7*)(S20659C8*)(S20659C6*), ABISELECT(24168,14892), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C8*)(S20659C6*), ABISELECT(25384,15640), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C6 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C8*)(S20659C6*), ABISELECT(25496,15708), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C6 */ AMB_check_base_class_offset(lv, (S20659C8*)(S20659C6*), ABISELECT(24168,14892), "S20659C1");
    /*is_ambiguous_... S20659C10::S20659C6 */ AMB_check_base_class_offset(lv, (S20659C6*)(S20659C10*), ABISELECT(24168,14892), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C8 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C7*)(S20659C8*), ABISELECT(28560,17596), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C8 */ AMB_check_base_class_offset(lv, (S20659C7*)(S20659C8*), ABISELECT(28552,17592), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C8 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C8*), ABISELECT(29768,18340), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C8 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C8*), ABISELECT(29880,18408), "S20659C1");
    /*is_ambiguous_... S20659C10::S20659C8 */ AMB_check_base_class_offset(lv, (S20659C8*)(S20659C10*), ABISELECT(28552,17592), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C5 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C6*)(S20659C5*), ABISELECT(33128,20416), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C6*)(S20659C5*), ABISELECT(33240,20484), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C5 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C7*)(S20659C8*)(S20659C6*)(S20659C5*), ABISELECT(30848,19008), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C5 */ AMB_check_base_class_offset(lv, (S20659C7*)(S20659C8*)(S20659C6*)(S20659C5*), ABISELECT(30840,19004), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C5 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C8*)(S20659C6*)(S20659C5*), ABISELECT(32056,19752), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C8*)(S20659C6*)(S20659C5*), ABISELECT(32168,19820), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C5 */ AMB_check_base_class_offset(lv, (S20659C8*)(S20659C6*)(S20659C5*), ABISELECT(30840,19004), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C5 */ AMB_check_base_class_offset(lv, (S20659C6*)(S20659C5*), ABISELECT(30840,19004), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C5 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C7*)(S20659C5*), ABISELECT(35232,21708), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C5 */ AMB_check_base_class_offset(lv, (S20659C7*)(S20659C5*), ABISELECT(35224,21704), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C5 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C7*)(S20659C8*)(S20659C5*), ABISELECT(36448,22456), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C5 */ AMB_check_base_class_offset(lv, (S20659C7*)(S20659C8*)(S20659C5*), ABISELECT(36440,22452), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C5 */ AMB_check_base_class_offset(lv, (S19566C6*)(S20659C8*)(S20659C5*), ABISELECT(37656,23200), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C8*)(S20659C5*), ABISELECT(37768,23268), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C5 */ AMB_check_base_class_offset(lv, (S20659C8*)(S20659C5*), ABISELECT(36440,22452), "S20659C1");
    /*is_ambiguous_... S20659C1::S20659C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C5*), ABISELECT(38728,23864), "S20659C1");
    check_base_class_offset(lv, (S20659C5*)(S20659C10*), ABISELECT(30840,19004), "S20659C1");
    /*is_ambiguous_... S20659C10::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S20659C10*), ABISELECT(23800,14668), "S20659C1");
    check_base_class_offset(lv, (S19566C11*)(S20659C10*), ABISELECT(39120,24104), "S20659C1");
    check_base_class_offset(lv, (S20659C10*), ABISELECT(23792,14664), "S20659C1");
    check_field_offset(lv, s20659c1f0, ABISELECT(8,4), "S20659C1.s20659c1f0");
    check_field_offset(lv, s20659c1f1, ABISELECT(12,8), "S20659C1.s20659c1f1");
    check_field_offset(lv, s20659c1f2, ABISELECT(16,12), "S20659C1.s20659c1f2");
    check_field_offset(lv, s20659c1f3, ABISELECT(32,16), "S20659C1.s20659c1f3");
    check_field_offset(lv, s20659c1f4, ABISELECT(48,28), "S20659C1.s20659c1f4");
    check_field_offset(lv, s20659c1f5, ABISELECT(56,36), "S20659C1.s20659c1f5");
    check_field_offset(lv, s20659c1f6, ABISELECT(9920,6104), "S20659C1.s20659c1f6");
    test_class_info(&lv, &cd_S20659C1);
    dp->~S20659C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20659C1(Test_S20659C1, "S20659C1", ABISELECT(39152,24124));

#else // __cplusplus

extern void _ZN8S20659C1C1Ev();
extern void _ZN8S20659C1D2Ev();
Name_Map name_map_S20659C1[] = {
  NSPAIR(_ZN8S20659C1C1Ev),
  NSPAIR(_ZN8S20659C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S20659C8;
extern VTBL_ENTRY _ZTI8S20659C8[];
extern  VTBL_ENTRY _ZTV8S20659C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C8[];
extern Class_Descriptor cd_S20659C6;
extern VTBL_ENTRY _ZTI8S20659C6[];
extern  VTBL_ENTRY _ZTV8S20659C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C6[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S20659C8;
extern VTBL_ENTRY _ZTI8S20659C8[];
extern  VTBL_ENTRY _ZTV8S20659C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C8[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S20659C5;
extern VTBL_ENTRY _ZTI8S20659C5[];
extern  VTBL_ENTRY _ZTV8S20659C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S20659C8;
extern VTBL_ENTRY _ZTI8S20659C8[];
extern  VTBL_ENTRY _ZTV8S20659C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C8[];
extern Class_Descriptor cd_S20659C2_nt;
extern VTBL_ENTRY _ZTI11S20659C2_nt[];
extern  VTBL_ENTRY _ZTV11S20659C2_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S20659C2_nt[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S20659C8;
extern VTBL_ENTRY _ZTI8S20659C8[];
extern  VTBL_ENTRY _ZTV8S20659C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C8[];
extern Class_Descriptor cd_S20659C6;
extern VTBL_ENTRY _ZTI8S20659C6[];
extern  VTBL_ENTRY _ZTV8S20659C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C6[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S20659C8;
extern VTBL_ENTRY _ZTI8S20659C8[];
extern  VTBL_ENTRY _ZTV8S20659C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C8[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S20659C8;
extern VTBL_ENTRY _ZTI8S20659C8[];
extern  VTBL_ENTRY _ZTV8S20659C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C8[];
extern Class_Descriptor cd_S20659C6;
extern VTBL_ENTRY _ZTI8S20659C6[];
extern  VTBL_ENTRY _ZTV8S20659C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C6[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S20659C7;
extern VTBL_ENTRY _ZTI8S20659C7[];
extern  VTBL_ENTRY _ZTV8S20659C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S20659C8;
extern VTBL_ENTRY _ZTI8S20659C8[];
extern  VTBL_ENTRY _ZTV8S20659C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C8[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S20659C5;
extern VTBL_ENTRY _ZTI8S20659C5[];
extern  VTBL_ENTRY _ZTV8S20659C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C5[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C11;
extern VTBL_ENTRY _ZTI9S19566C11[];
extern Class_Descriptor cd_S20659C10;
extern VTBL_ENTRY _ZTI9S20659C10[];
extern  VTBL_ENTRY _ZTV9S20659C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20659C10[];
static Base_Class bases_S20659C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(22216,13696), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(22584,13920), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C7,    ABISELECT(22576,13916), //bcp->offset
    34, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(12352,7624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(12464,7692), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(10072,6216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C7,    ABISELECT(10064,6212), //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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(11280,6960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(11392,7028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C8,    ABISELECT(10064,6212), //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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20659C6,    ABISELECT(10064,6212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(14456,8916), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C7,    ABISELECT(14448,8912), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(15672,9664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C7,    ABISELECT(15664,9660), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(16880,10408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(16992,10476), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C8,    ABISELECT(15664,9660), //bcp->offset
    24, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(17952,11072), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C5,    ABISELECT(10064,6212), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    25, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(18352,11316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C7,    ABISELECT(18344,11312), //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
    9, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(19560,12060), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(19672,12128), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C8,    ABISELECT(18344,11312), //bcp->offset
    29, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S20659C2_nt,    ABISELECT(10064,6212), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(26456,16304), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(26568,16372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(24176,14896), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20659C7,    ABISELECT(24168,14892), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(25384,15640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(25496,15708), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20659C8,    ABISELECT(24168,14892), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S20659C6,    ABISELECT(24168,14892), //bcp->offset
    50, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    58, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(28560,17596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S20659C7,    ABISELECT(28552,17592), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(29768,18340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(29880,18408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S20659C8,    ABISELECT(28552,17592), //bcp->offset
    57, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    58, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(33128,20416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(33240,20484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(30848,19008), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    42, //immediately_derived
  0, 0},
  {&cd_S20659C7,    ABISELECT(30840,19004), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(32056,19752), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(32168,19820), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S20659C8,    ABISELECT(30840,19004), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    46, //immediately_derived
  0, 0},
  {&cd_S20659C6,    ABISELECT(30840,19004), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    55, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(35232,21708), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S20659C7,    ABISELECT(35224,21704), //bcp->offset
    72, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    55, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(36448,22456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S20659C7,    ABISELECT(36440,22452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    52, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(37656,23200), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(37768,23268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    53, //immediately_derived
  0, 0},
  {&cd_S20659C8,    ABISELECT(36440,22452), //bcp->offset
    75, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    51, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    55, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(38728,23864), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    55, //immediately_derived
  0, 0},
  {&cd_S20659C5,    ABISELECT(30840,19004), //bcp->offset
    63, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    23, //init_seq
    58, //immediately_derived
  0, 1},
  {&cd_S19566C5,    ABISELECT(23800,14668), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    58, //immediately_derived
  0, 0},
  {&cd_S19566C11,    ABISELECT(39120,24104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    58, //immediately_derived
  0, 1},
  {&cd_S20659C10,    ABISELECT(23792,14664), //bcp->offset
    37, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20659C1[];
extern void _ZN8S20659C1D1Ev();
extern void _ZN8S20659C1D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S20659C1D1Ev,_ZTv0_n20_N8S20659C1D1Ev)();
extern void ABISELECT(_ZThn10064_N8S20659C1D1Ev,_ZThn6212_N8S20659C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20659C1D0Ev,_ZTv0_n20_N8S20659C1D0Ev)();
extern void ABISELECT(_ZThn10064_N8S20659C1D0Ev,_ZThn6212_N8S20659C1D0Ev)() __attribute__((weak));
extern void _ZN8S20659C52v1Ev();
extern void ABISELECT(_ZTvn5600_n40_N8S20659C1D1Ev,_ZTvn3448_n20_N8S20659C1D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N8S20659C1D0Ev,_ZTvn3448_n20_N8S20659C1D0Ev)();
extern void ABISELECT(_ZTvn8280_n40_N8S20659C1D1Ev,_ZTvn5100_n20_N8S20659C1D1Ev)();
extern void ABISELECT(_ZTvn8280_n40_N8S20659C1D0Ev,_ZTvn5100_n20_N8S20659C1D0Ev)();
extern void ABISELECT(_ZTv0_n72_N8S20659C1D1Ev,_ZTv0_n36_N8S20659C1D1Ev)();
extern void ABISELECT(_ZThn23792_N8S20659C1D1Ev,_ZThn14664_N8S20659C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20659C1D0Ev,_ZTv0_n36_N8S20659C1D0Ev)();
extern void ABISELECT(_ZThn23792_N8S20659C1D0Ev,_ZThn14664_N8S20659C1D0Ev)() __attribute__((weak));
extern void _ZN9S20659C102v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S20659C1D1Ev,_ZTv0_n20_N8S20659C1D1Ev)();
extern void ABISELECT(_ZThn24168_N8S20659C1D1Ev,_ZThn14892_N8S20659C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20659C1D0Ev,_ZTv0_n20_N8S20659C1D0Ev)();
extern void ABISELECT(_ZThn24168_N8S20659C1D0Ev,_ZThn14892_N8S20659C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20659C1D1Ev,_ZTv0_n16_N8S20659C1D1Ev)();
extern void ABISELECT(_ZThn28552_N8S20659C1D1Ev,_ZThn17592_N8S20659C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S20659C1D0Ev,_ZTv0_n16_N8S20659C1D0Ev)();
extern void ABISELECT(_ZThn28552_N8S20659C1D0Ev,_ZThn17592_N8S20659C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20659C1D1Ev,_ZTv0_n20_N8S20659C1D1Ev)();
extern void ABISELECT(_ZThn30840_N8S20659C1D1Ev,_ZThn19004_N8S20659C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20659C1D0Ev,_ZTv0_n20_N8S20659C1D0Ev)();
extern void ABISELECT(_ZThn30840_N8S20659C1D0Ev,_ZThn19004_N8S20659C1D0Ev)() __attribute__((weak));
extern void _ZN8S20659C52v1Ev();
extern void ABISELECT(_ZTvn5600_n40_N8S20659C1D1Ev,_ZTvn3448_n20_N8S20659C1D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N8S20659C1D0Ev,_ZTvn3448_n20_N8S20659C1D0Ev)();
static  VTBL_ENTRY vtc_S20659C1[] = {
  ABISELECT(39120,24104),
  ABISELECT(30840,19004),
  ABISELECT(28552,17592),
  ABISELECT(24168,14892),
  ABISELECT(23792,14664),
  ABISELECT(22576,13916),
  ABISELECT(22216,13696),
  ABISELECT(10064,6212),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C1[0]),
  (VTBL_ENTRY)&_ZN8S20659C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C1D0Ev,
  0,
  ABISELECT(-10064,-6212),
  ABISELECT(12512,7704),
  ABISELECT(12152,7484),
  ABISELECT(-10064,-6212),
  (VTBL_ENTRY)&(_ZTI8S20659C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20659C1D1Ev,_ZTv0_n20_N8S20659C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20659C1D0Ev,_ZTv0_n20_N8S20659C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20659C52v1Ev,
  ABISELECT(7768,4784),
  ABISELECT(-14448,-8912),
  (VTBL_ENTRY)&(_ZTI8S20659C1[0]),
  ABISELECT(6552,4036),
  ABISELECT(-15664,-9660),
  (VTBL_ENTRY)&(_ZTI8S20659C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N8S20659C1D1Ev,_ZTvn3448_n20_N8S20659C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N8S20659C1D0Ev,_ZTvn3448_n20_N8S20659C1D0Ev),
  ABISELECT(3872,2384),
  ABISELECT(-18344,-11312),
  (VTBL_ENTRY)&(_ZTI8S20659C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8280_n40_N8S20659C1D1Ev,_ZTvn5100_n20_N8S20659C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn8280_n40_N8S20659C1D0Ev,_ZTvn5100_n20_N8S20659C1D0Ev),
  ABISELECT(-360,-220),
  ABISELECT(-22576,-13916),
  (VTBL_ENTRY)&(_ZTI8S20659C1[0]),
  0,
  ABISELECT(-23792,-14664),
  ABISELECT(15328,9440),
  ABISELECT(7048,4340),
  ABISELECT(4760,2928),
  ABISELECT(-1576,-968),
  ABISELECT(-1216,-748),
  ABISELECT(376,228),
  ABISELECT(-23792,-14664),
  (VTBL_ENTRY)&(_ZTI8S20659C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20659C1D1Ev,_ZTv0_n36_N8S20659C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20659C1D0Ev,_ZTv0_n36_N8S20659C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20659C102v2Ev,
  ABISELECT(-24168,-14892),
  ABISELECT(-1592,-976),
  ABISELECT(-1952,-1196),
  ABISELECT(-24168,-14892),
  (VTBL_ENTRY)&(_ZTI8S20659C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20659C1D1Ev,_ZTv0_n20_N8S20659C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20659C1D0Ev,_ZTv0_n20_N8S20659C1D0Ev),
  ABISELECT(-28552,-17592),
  ABISELECT(-6336,-3896),
  ABISELECT(-28552,-17592),
  (VTBL_ENTRY)&(_ZTI8S20659C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20659C1D1Ev,_ZTv0_n16_N8S20659C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S20659C1D0Ev,_ZTv0_n16_N8S20659C1D0Ev),
  0,
  ABISELECT(-30840,-19004),
  ABISELECT(-8264,-5088),
  ABISELECT(-8624,-5308),
  ABISELECT(-30840,-19004),
  (VTBL_ENTRY)&(_ZTI8S20659C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20659C1D1Ev,_ZTv0_n20_N8S20659C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20659C1D0Ev,_ZTv0_n20_N8S20659C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20659C52v1Ev,
  ABISELECT(-13008,-8008),
  ABISELECT(-35224,-21704),
  (VTBL_ENTRY)&(_ZTI8S20659C1[0]),
  ABISELECT(-14224,-8756),
  ABISELECT(-36440,-22452),
  (VTBL_ENTRY)&(_ZTI8S20659C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N8S20659C1D1Ev,_ZTvn3448_n20_N8S20659C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N8S20659C1D0Ev,_ZTvn3448_n20_N8S20659C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20659C1[];
extern void _ZN11S20659C2_ntD1Ev();
extern void _ZN11S20659C2_ntD0Ev();
extern void _ZN8S20659C52v1Ev();
static  VTBL_ENTRY _tg__ZTV11S20659C2_nt__8S20659C1[] = {
  ABISELECT(12512,7704),
  ABISELECT(12152,7484),
  0,
  (VTBL_ENTRY)&(_ZTI11S20659C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S20659C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20659C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN8S20659C52v1Ev,
};
extern void _ZN8S20659C5D1Ev();
extern void _ZN8S20659C5D0Ev();
extern void _ZN8S20659C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C511S20659C2_nt__8S20659C1[] = {
  ABISELECT(12512,7704),
  ABISELECT(12152,7484),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C5[0]),
  (VTBL_ENTRY)&_ZN8S20659C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20659C52v1Ev,
};
extern void _ZN8S20659C6D1Ev();
extern void _ZN8S20659C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C68S20659C511S20659C2_nt__8S20659C1[] = {
  ABISELECT(12512,7704),
  ABISELECT(12152,7484),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C6[0]),
  (VTBL_ENTRY)&_ZN8S20659C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C6D0Ev,
};
extern void _ZN8S20659C8D1Ev();
extern void _ZN8S20659C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C88S20659C68S20659C511S20659C2_nt__8S20659C1[] = {
  ABISELECT(12152,7484),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C8[0]),
  (VTBL_ENTRY)&_ZN8S20659C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20659C78S20659C88S20659C68S20659C511S20659C2_nt__A1__8S20659C1[] = {
  ABISELECT(12152,7484),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C7__8S20659C68S20659C511S20659C2_nt__8S20659C1[] = {
  ABISELECT(-360,-220),
  ABISELECT(-12512,-7704),
  (VTBL_ENTRY)&(_ZTI8S20659C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C78S20659C511S20659C2_nt__A2__8S20659C1[] = {
  ABISELECT(7768,4784),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
extern void _ZN8S20659C8D1Ev();
extern void _ZN8S20659C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C88S20659C511S20659C2_nt__A1__8S20659C1[] = {
  ABISELECT(6552,4036),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C8[0]),
  (VTBL_ENTRY)&_ZN8S20659C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20659C78S20659C88S20659C511S20659C2_nt__A3__8S20659C1[] = {
  ABISELECT(6552,4036),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C7__8S20659C511S20659C2_nt__8S20659C1[] = {
  ABISELECT(-360,-220),
  ABISELECT(-12512,-7704),
  (VTBL_ENTRY)&(_ZTI8S20659C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C7__A__8S20659C511S20659C2_nt__8S20659C1[] = {
  ABISELECT(7768,4784),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI8S20659C5[0]),
};
extern void ABISELECT(_ZThn5600_N8S20659C5D1Ev,_ZThn3448_N8S20659C5D1Ev)();
extern void ABISELECT(_ZThn5600_N8S20659C5D0Ev,_ZThn3448_N8S20659C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20659C8__A1__8S20659C511S20659C2_nt__8S20659C1[] = {
  ABISELECT(6552,4036),
  ABISELECT(-5600,-3448),
  (VTBL_ENTRY)&(_ZTI8S20659C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S20659C5D1Ev,_ZThn3448_N8S20659C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S20659C5D0Ev,_ZThn3448_N8S20659C5D0Ev),
};
extern void _ZN8S20659C8D1Ev();
extern void _ZN8S20659C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C811S20659C2_nt__A2__8S20659C1[] = {
  ABISELECT(3872,2384),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C8[0]),
  (VTBL_ENTRY)&_ZN8S20659C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20659C78S20659C811S20659C2_nt__A4__8S20659C1[] = {
  ABISELECT(3872,2384),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C7__11S20659C2_nt__8S20659C1[] = {
  ABISELECT(-360,-220),
  ABISELECT(-12512,-7704),
  (VTBL_ENTRY)&(_ZTI11S20659C2_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C78S20659C5__A2__11S20659C2_nt__8S20659C1[] = {
  ABISELECT(7768,4784),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI11S20659C2_nt[0]),
};
extern void ABISELECT(_ZThn5600_N11S20659C2_ntD1Ev,_ZThn3448_N11S20659C2_ntD1Ev)();
extern void ABISELECT(_ZThn5600_N11S20659C2_ntD0Ev,_ZThn3448_N11S20659C2_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20659C88S20659C5__A1__11S20659C2_nt__8S20659C1[] = {
  ABISELECT(6552,4036),
  ABISELECT(-5600,-3448),
  (VTBL_ENTRY)&(_ZTI11S20659C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N11S20659C2_ntD1Ev,_ZThn3448_N11S20659C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N11S20659C2_ntD0Ev,_ZThn3448_N11S20659C2_ntD0Ev),
};
extern void ABISELECT(_ZThn8280_N11S20659C2_ntD1Ev,_ZThn5100_N11S20659C2_ntD1Ev)();
extern void ABISELECT(_ZThn8280_N11S20659C2_ntD0Ev,_ZThn5100_N11S20659C2_ntD0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20659C8__A2__11S20659C2_nt__8S20659C1[] = {
  ABISELECT(3872,2384),
  ABISELECT(-8280,-5100),
  (VTBL_ENTRY)&(_ZTI11S20659C2_nt[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8280_N11S20659C2_ntD1Ev,_ZThn5100_N11S20659C2_ntD1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8280_N11S20659C2_ntD0Ev,_ZThn5100_N11S20659C2_ntD0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20659C7__8S20659C1[] = {
  ABISELECT(-360,-220),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
extern void _ZN9S20659C10D1Ev();
extern void _ZN9S20659C10D0Ev();
extern void _ZN9S20659C102v2Ev();
static  VTBL_ENTRY _tg__ZTV9S20659C10__8S20659C1[] = {
  ABISELECT(15328,9440),
  ABISELECT(7048,4340),
  ABISELECT(4760,2928),
  ABISELECT(-1576,-968),
  ABISELECT(-1216,-748),
  ABISELECT(376,228),
  0,
  (VTBL_ENTRY)&(_ZTI9S20659C10[0]),
  (VTBL_ENTRY)&_ZN9S20659C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20659C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20659C102v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N9S20659C10D1Ev,_ZTv0_n20_N9S20659C10D1Ev)();
extern void ABISELECT(_ZThn376_N9S20659C10D1Ev,_ZThn228_N9S20659C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20659C10D0Ev,_ZTv0_n20_N9S20659C10D0Ev)();
extern void ABISELECT(_ZThn376_N9S20659C10D0Ev,_ZThn228_N9S20659C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20659C6__9S20659C10__8S20659C1[] = {
  ABISELECT(-376,-228),
  ABISELECT(-1592,-976),
  ABISELECT(-1952,-1196),
  ABISELECT(-376,-228),
  (VTBL_ENTRY)&(_ZTI9S20659C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20659C10D1Ev,_ZTv0_n20_N9S20659C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20659C10D0Ev,_ZTv0_n20_N9S20659C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20659C7__9S20659C10__8S20659C1[] = {
  ABISELECT(-360,-220),
  ABISELECT(1216,748),
  (VTBL_ENTRY)&(_ZTI9S20659C10[0]),
};
extern void ABISELECT(_ZTv0_n32_N9S20659C10D1Ev,_ZTv0_n16_N9S20659C10D1Ev)();
extern void ABISELECT(_ZThn4760_N9S20659C10D1Ev,_ZThn2928_N9S20659C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20659C10D0Ev,_ZTv0_n16_N9S20659C10D0Ev)();
extern void ABISELECT(_ZThn4760_N9S20659C10D0Ev,_ZThn2928_N9S20659C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20659C8__A1__9S20659C10__8S20659C1[] = {
  ABISELECT(-4760,-2928),
  ABISELECT(-6336,-3896),
  ABISELECT(-4760,-2928),
  (VTBL_ENTRY)&(_ZTI9S20659C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20659C10D1Ev,_ZTv0_n16_N9S20659C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20659C10D0Ev,_ZTv0_n16_N9S20659C10D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N9S20659C10D1Ev,_ZTv0_n20_N9S20659C10D1Ev)();
extern void ABISELECT(_ZThn7048_N9S20659C10D1Ev,_ZThn4340_N9S20659C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N9S20659C10D0Ev,_ZTv0_n20_N9S20659C10D0Ev)();
extern void ABISELECT(_ZThn7048_N9S20659C10D0Ev,_ZThn4340_N9S20659C10D0Ev)() __attribute__((weak));
extern void _ZN8S20659C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C5__9S20659C10__8S20659C1[] = {
  0,
  ABISELECT(-7048,-4340),
  ABISELECT(-8264,-5088),
  ABISELECT(-8624,-5308),
  ABISELECT(-7048,-4340),
  (VTBL_ENTRY)&(_ZTI9S20659C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20659C10D1Ev,_ZTv0_n20_N9S20659C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N9S20659C10D0Ev,_ZTv0_n20_N9S20659C10D0Ev),
  (VTBL_ENTRY)&_ZN8S20659C52v1Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20659C78S20659C5__A4__9S20659C10__8S20659C1[] = {
  ABISELECT(-13008,-8008),
  ABISELECT(-11432,-7040),
  (VTBL_ENTRY)&(_ZTI9S20659C10[0]),
};
extern void ABISELECT(_ZTvn5600_n40_N9S20659C10D1Ev,_ZTvn3448_n20_N9S20659C10D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N9S20659C10D0Ev,_ZTvn3448_n20_N9S20659C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20659C88S20659C5__A3__9S20659C10__8S20659C1[] = {
  ABISELECT(-14224,-8756),
  ABISELECT(-12648,-7788),
  (VTBL_ENTRY)&(_ZTI9S20659C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N9S20659C10D1Ev,_ZTvn3448_n20_N9S20659C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N9S20659C10D0Ev,_ZTvn3448_n20_N9S20659C10D0Ev),
};
extern void _ZN8S20659C6D1Ev();
extern void _ZN8S20659C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C6__A1__8S20659C1[] = {
  ABISELECT(-1592,-976),
  ABISELECT(-1952,-1196),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C6[0]),
  (VTBL_ENTRY)&_ZN8S20659C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C6D0Ev,
};
extern void _ZN8S20659C8D1Ev();
extern void _ZN8S20659C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C88S20659C6__A3__8S20659C1[] = {
  ABISELECT(-1952,-1196),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C8[0]),
  (VTBL_ENTRY)&_ZN8S20659C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20659C78S20659C88S20659C6__A5__8S20659C1[] = {
  ABISELECT(-1952,-1196),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C7__8S20659C6__A1__8S20659C1[] = {
  ABISELECT(-360,-220),
  ABISELECT(1592,976),
  (VTBL_ENTRY)&(_ZTI8S20659C6[0]),
};
extern void _ZN8S20659C8D1Ev();
extern void _ZN8S20659C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C8__A4__8S20659C1[] = {
  ABISELECT(-6336,-3896),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C8[0]),
  (VTBL_ENTRY)&_ZN8S20659C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20659C78S20659C8__A6__8S20659C1[] = {
  ABISELECT(-6336,-3896),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
extern void _ZN8S20659C5D1Ev();
extern void _ZN8S20659C5D0Ev();
extern void _ZN8S20659C52v1Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C5__A1__8S20659C1[] = {
  ABISELECT(-8264,-5088),
  ABISELECT(-8624,-5308),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C5[0]),
  (VTBL_ENTRY)&_ZN8S20659C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C5D0Ev,
  (VTBL_ENTRY)&_ZN8S20659C52v1Ev,
};
extern void _ZN8S20659C6D1Ev();
extern void _ZN8S20659C6D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C68S20659C5__A2__8S20659C1[] = {
  ABISELECT(-8264,-5088),
  ABISELECT(-8624,-5308),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C6[0]),
  (VTBL_ENTRY)&_ZN8S20659C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C6D0Ev,
};
extern void _ZN8S20659C8D1Ev();
extern void _ZN8S20659C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C88S20659C68S20659C5__A5__8S20659C1[] = {
  ABISELECT(-8624,-5308),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C8[0]),
  (VTBL_ENTRY)&_ZN8S20659C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20659C78S20659C88S20659C68S20659C5__A7__8S20659C1[] = {
  ABISELECT(-8624,-5308),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C7__8S20659C68S20659C5__A2__8S20659C1[] = {
  ABISELECT(-360,-220),
  ABISELECT(8264,5088),
  (VTBL_ENTRY)&(_ZTI8S20659C6[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C78S20659C5__A8__8S20659C1[] = {
  ABISELECT(-13008,-8008),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
extern void _ZN8S20659C8D1Ev();
extern void _ZN8S20659C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20659C88S20659C5__A6__8S20659C1[] = {
  ABISELECT(-14224,-8756),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C8[0]),
  (VTBL_ENTRY)&_ZN8S20659C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20659C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20659C78S20659C88S20659C5__A9__8S20659C1[] = {
  ABISELECT(-14224,-8756),
  0,
  (VTBL_ENTRY)&(_ZTI8S20659C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C7__8S20659C5__A1__8S20659C1[] = {
  ABISELECT(-360,-220),
  ABISELECT(8264,5088),
  (VTBL_ENTRY)&(_ZTI8S20659C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20659C7__A__8S20659C5__A1__8S20659C1[] = {
  ABISELECT(-13008,-8008),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI8S20659C5[0]),
};
extern void ABISELECT(_ZThn5600_N8S20659C5D1Ev,_ZThn3448_N8S20659C5D1Ev)();
extern void ABISELECT(_ZThn5600_N8S20659C5D0Ev,_ZThn3448_N8S20659C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20659C8__A1__8S20659C5__A1__8S20659C1[] = {
  ABISELECT(-14224,-8756),
  ABISELECT(-5600,-3448),
  (VTBL_ENTRY)&(_ZTI8S20659C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S20659C5D1Ev,_ZThn3448_N8S20659C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N8S20659C5D0Ev,_ZThn3448_N8S20659C5D0Ev),
};
static  VTT_ENTRY vtt_S20659C1[] = {
  {&(_ZTV8S20659C1[10]),  10,80},
  {&(_ZTV8S20659C1[18]),  18,80},
  {&(_ZTV8S20659C1[37]),  37,80},
  {&(_ZTV8S20659C1[24]),  24,80},
  {&(_ZTV8S20659C1[27]),  27,80},
  {&(_ZTV8S20659C1[32]),  32,80},
  {&(_ZTV8S20659C1[47]),  47,80},
  {&(_ZTV8S20659C1[55]),  55,80},
  {&(_ZTV8S20659C1[61]),  61,80},
  {&(_ZTV8S20659C1[69]),  69,80},
  {&(_ZTV8S20659C1[75]),  75,80},
  {&(_ZTV8S20659C1[78]),  78,80},
  {&(_tg__ZTV11S20659C2_nt__8S20659C1[4]),  4,7},
  {&(_tg__ZTV8S20659C511S20659C2_nt__8S20659C1[4]),  4,7},
  {&(_tg__ZTV8S20659C68S20659C511S20659C2_nt__8S20659C1[4]),  4,6},
  {&(_tg__ZTV8S20659C88S20659C68S20659C511S20659C2_nt__8S20659C1[3]),  3,5},
  {&(_tg__ZTV8S20659C78S20659C88S20659C68S20659C511S20659C2_nt__A1__8S20659C1[3]),  3,3},
  {&(_tg__ZTV8S20659C7__8S20659C68S20659C511S20659C2_nt__8S20659C1[3]),  3,3},
  {&(_tg__ZTV8S20659C78S20659C511S20659C2_nt__A2__8S20659C1[3]),  3,3},
  {&(_tg__ZTV8S20659C88S20659C511S20659C2_nt__A1__8S20659C1[3]),  3,5},
  {&(_tg__ZTV8S20659C78S20659C88S20659C511S20659C2_nt__A3__8S20659C1[3]),  3,3},
  {&(_tg__ZTV8S20659C7__8S20659C511S20659C2_nt__8S20659C1[3]),  3,3},
  {&(_tg__ZTV8S20659C7__A__8S20659C511S20659C2_nt__8S20659C1[3]),  3,3},
  {&(_tg__ZTV8S20659C8__A1__8S20659C511S20659C2_nt__8S20659C1[3]),  3,5},
  {&(_tg__ZTV8S20659C811S20659C2_nt__A2__8S20659C1[3]),  3,5},
  {&(_tg__ZTV8S20659C78S20659C811S20659C2_nt__A4__8S20659C1[3]),  3,3},
  {&(_tg__ZTV8S20659C7__11S20659C2_nt__8S20659C1[3]),  3,3},
  {&(_tg__ZTV8S20659C78S20659C5__A2__11S20659C2_nt__8S20659C1[3]),  3,3},
  {&(_tg__ZTV8S20659C88S20659C5__A1__11S20659C2_nt__8S20659C1[3]),  3,5},
  {&(_tg__ZTV8S20659C8__A2__11S20659C2_nt__8S20659C1[3]),  3,5},
  {&(_tg__ZTV8S20659C7__8S20659C1[3]),  3,3},
  {&(_tg__ZTV9S20659C10__8S20659C1[8]),  8,11},
  {&(_tg__ZTV8S20659C6__9S20659C10__8S20659C1[5]),  5,7},
  {&(_tg__ZTV8S20659C7__9S20659C10__8S20659C1[3]),  3,3},
  {&(_tg__ZTV8S20659C8__A1__9S20659C10__8S20659C1[4]),  4,6},
  {&(_tg__ZTV8S20659C5__9S20659C10__8S20659C1[6]),  6,9},
  {&(_tg__ZTV8S20659C78S20659C5__A4__9S20659C10__8S20659C1[3]),  3,3},
  {&(_tg__ZTV8S20659C88S20659C5__A3__9S20659C10__8S20659C1[3]),  3,5},
  {&(_tg__ZTV8S20659C6__A1__8S20659C1[4]),  4,6},
  {&(_tg__ZTV8S20659C88S20659C6__A3__8S20659C1[3]),  3,5},
  {&(_tg__ZTV8S20659C78S20659C88S20659C6__A5__8S20659C1[3]),  3,3},
  {&(_tg__ZTV8S20659C7__8S20659C6__A1__8S20659C1[3]),  3,3},
  {&(_tg__ZTV8S20659C8__A4__8S20659C1[3]),  3,5},
  {&(_tg__ZTV8S20659C78S20659C8__A6__8S20659C1[3]),  3,3},
  {&(_tg__ZTV8S20659C5__A1__8S20659C1[4]),  4,7},
  {&(_tg__ZTV8S20659C68S20659C5__A2__8S20659C1[4]),  4,6},
  {&(_tg__ZTV8S20659C88S20659C68S20659C5__A5__8S20659C1[3]),  3,5},
  {&(_tg__ZTV8S20659C78S20659C88S20659C68S20659C5__A7__8S20659C1[3]),  3,3},
  {&(_tg__ZTV8S20659C7__8S20659C68S20659C5__A2__8S20659C1[3]),  3,3},
  {&(_tg__ZTV8S20659C78S20659C5__A8__8S20659C1[3]),  3,3},
  {&(_tg__ZTV8S20659C88S20659C5__A6__8S20659C1[3]),  3,5},
  {&(_tg__ZTV8S20659C78S20659C88S20659C5__A9__8S20659C1[3]),  3,3},
  {&(_tg__ZTV8S20659C7__8S20659C5__A1__8S20659C1[3]),  3,3},
  {&(_tg__ZTV8S20659C7__A__8S20659C5__A1__8S20659C1[3]),  3,3},
  {&(_tg__ZTV8S20659C8__A1__8S20659C5__A1__8S20659C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20659C1[];
extern  VTBL_ENTRY _ZTV8S20659C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20659C1[];
static VTBL_ENTRY alt_thunk_names131[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20659C10D0Ev,_ZTv0_n16_N9S20659C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4760_N9S20659C10D0Ev,_ZThn2928_N9S20659C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20659C10D1Ev,_ZTv0_n16_N9S20659C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn4760_N9S20659C10D1Ev,_ZThn2928_N9S20659C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20659C10D0Ev,_ZTv0_n20_N9S20659C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7048_N9S20659C10D0Ev,_ZThn4340_N9S20659C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn376_N9S20659C10D0Ev,_ZThn228_N9S20659C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N9S20659C10D1Ev,_ZTv0_n20_N9S20659C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn7048_N9S20659C10D1Ev,_ZThn4340_N9S20659C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn376_N9S20659C10D1Ev,_ZThn228_N9S20659C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20659C1D0Ev,_ZTv0_n16_N8S20659C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn28552_N8S20659C1D0Ev,_ZThn17592_N8S20659C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S20659C1D1Ev,_ZTv0_n16_N8S20659C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn28552_N8S20659C1D1Ev,_ZThn17592_N8S20659C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20659C1D0Ev,_ZTv0_n36_N8S20659C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn23792_N8S20659C1D0Ev,_ZThn14664_N8S20659C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20659C1D1Ev,_ZTv0_n36_N8S20659C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn23792_N8S20659C1D1Ev,_ZThn14664_N8S20659C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20659C1D0Ev,_ZTv0_n20_N8S20659C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30840_N8S20659C1D0Ev,_ZThn19004_N8S20659C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24168_N8S20659C1D0Ev,_ZThn14892_N8S20659C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10064_N8S20659C1D0Ev,_ZThn6212_N8S20659C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20659C1D1Ev,_ZTv0_n20_N8S20659C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn30840_N8S20659C1D1Ev,_ZThn19004_N8S20659C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24168_N8S20659C1D1Ev,_ZThn14892_N8S20659C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn10064_N8S20659C1D1Ev,_ZThn6212_N8S20659C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20659C1 = {  "S20659C1", // class name
  bases_S20659C1, 59,
  &(vtc_S20659C1[0]), // expected_vtbl_contents
  &(vtt_S20659C1[0]), // expected_vtt_contents
  ABISELECT(39152,24124), // object size
  NSPAIRA(_ZTI8S20659C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20659C1),80, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20659C1),55, //virtual table table var
  24, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names131,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7839C5  {
  int s7839c5f0;
  virtual void  v1(); // _ZN7S7839C52v1Ev
  virtual void  v2(); // _ZN7S7839C52v2Ev
  virtual void  v3(); // _ZN7S7839C52v3Ev
  virtual void  v4(); // _ZN7S7839C52v4Ev
  virtual void  v5(); // _ZN7S7839C52v5Ev
  virtual void  v6(); // _ZN7S7839C52v6Ev
  ~S7839C5(); // tgen
  S7839C5(); // tgen
};
//SIG(-1 S7839C5) C1{ v1 v2 v3 v4 v5 v6 Fi}


void  S7839C5 ::v1(){vfunc_called(this, "_ZN7S7839C52v1Ev");}
void  S7839C5 ::v2(){vfunc_called(this, "_ZN7S7839C52v2Ev");}
void  S7839C5 ::v3(){vfunc_called(this, "_ZN7S7839C52v3Ev");}
void  S7839C5 ::v4(){vfunc_called(this, "_ZN7S7839C52v4Ev");}
void  S7839C5 ::v5(){vfunc_called(this, "_ZN7S7839C52v5Ev");}
void  S7839C5 ::v6(){vfunc_called(this, "_ZN7S7839C52v6Ev");}
S7839C5 ::~S7839C5(){ note_dtor("S7839C5", this);} // tgen
S7839C5 ::S7839C5(){ note_ctor("S7839C5", this);} // tgen

static void Test_S7839C5()
{
  extern Class_Descriptor cd_S7839C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7839C5, buf);
    S7839C5 *dp, &lv = *(dp=new (buf) S7839C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7839C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7839C5)");
    check_field_offset(lv, s7839c5f0, ABISELECT(8,4), "S7839C5.s7839c5f0");
    test_class_info(&lv, &cd_S7839C5);
    dp->~S7839C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7839C5(Test_S7839C5, "S7839C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7839C5C1Ev();
extern void _ZN7S7839C5D1Ev();
Name_Map name_map_S7839C5[] = {
  NSPAIR(_ZN7S7839C5C1Ev),
  NSPAIR(_ZN7S7839C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7839C5[];
extern void _ZN7S7839C52v1Ev();
extern void _ZN7S7839C52v2Ev();
extern void _ZN7S7839C52v3Ev();
extern void _ZN7S7839C52v4Ev();
extern void _ZN7S7839C52v5Ev();
extern void _ZN7S7839C52v6Ev();
static  VTBL_ENTRY vtc_S7839C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7839C5[0]),
  (VTBL_ENTRY)&_ZN7S7839C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v6Ev,
};
extern VTBL_ENTRY _ZTI7S7839C5[];
extern  VTBL_ENTRY _ZTV7S7839C5[];
Class_Descriptor cd_S7839C5 = {  "S7839C5", // class name
  0,0,//no base classes
  &(vtc_S7839C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7839C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7839C5),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  S7839C4  : virtual S7839C5 {
  ::S7218C9 s7839c4f0;
  virtual void  v7(); // _ZN7S7839C42v7Ev
  virtual void  v8(); // _ZN7S7839C42v8Ev
  virtual void  v9(); // _ZN7S7839C42v9Ev
  virtual void  v10(); // _ZN7S7839C43v10Ev
  virtual void  v11(); // _ZN7S7839C43v11Ev
  virtual void  v12(); // _ZN7S7839C43v12Ev
  virtual void  v13(); // _ZN7S7839C43v13Ev
  ~S7839C4(); // tgen
  S7839C4(); // tgen
};
//SIG(-1 S7839C4) C1{ VBC2{ v8 v9 v10 v11 v12 v13 Fi} v1 v2 v3 v4 v5 v6 v7 FC3{ BC4{ BC5{ VBC6{ BC7{ v18 v19 v20 v21 v22 v23 Fi} v24} vd v25 v26 v27 v28 v29 v30 v31 v32 Fi Fs} BC7 v33 v34 v35 v36} vd v14 v15 v16 v17 FC8{}}}


void  S7839C4 ::v7(){vfunc_called(this, "_ZN7S7839C42v7Ev");}
void  S7839C4 ::v8(){vfunc_called(this, "_ZN7S7839C42v8Ev");}
void  S7839C4 ::v9(){vfunc_called(this, "_ZN7S7839C42v9Ev");}
void  S7839C4 ::v10(){vfunc_called(this, "_ZN7S7839C43v10Ev");}
void  S7839C4 ::v11(){vfunc_called(this, "_ZN7S7839C43v11Ev");}
void  S7839C4 ::v12(){vfunc_called(this, "_ZN7S7839C43v12Ev");}
void  S7839C4 ::v13(){vfunc_called(this, "_ZN7S7839C43v13Ev");}
S7839C4 ::~S7839C4(){ note_dtor("S7839C4", this);} // tgen
S7839C4 ::S7839C4(){ note_ctor("S7839C4", this);} // tgen

static void Test_S7839C4()
{
  extern Class_Descriptor cd_S7839C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S7839C4, buf);
    S7839C4 *dp, &lv = *(dp=new (buf) S7839C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S7839C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7839C4)");
    check_base_class_offset(lv, (S7839C5*), ABISELECT(56,36), "S7839C4");
    check_field_offset(lv, s7839c4f0, ABISELECT(8,4), "S7839C4.s7839c4f0");
    test_class_info(&lv, &cd_S7839C4);
    dp->~S7839C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7839C4(Test_S7839C4, "S7839C4", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN7S7839C4C1Ev();
extern void _ZN7S7839C4D1Ev();
Name_Map name_map_S7839C4[] = {
  NSPAIR(_ZN7S7839C4C1Ev),
  NSPAIR(_ZN7S7839C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7839C5;
extern VTBL_ENTRY _ZTI7S7839C5[];
extern  VTBL_ENTRY _ZTV7S7839C5[];
static Base_Class bases_S7839C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7839C5,    ABISELECT(56,36), //bcp->offset
    10, //bcp->virtual_function_table_offset
    8, //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 _ZTI7S7839C4[];
extern void _ZN7S7839C42v7Ev();
extern void _ZN7S7839C42v8Ev();
extern void _ZN7S7839C42v9Ev();
extern void _ZN7S7839C43v10Ev();
extern void _ZN7S7839C43v11Ev();
extern void _ZN7S7839C43v12Ev();
extern void _ZN7S7839C43v13Ev();
extern void _ZN7S7839C52v1Ev();
extern void _ZN7S7839C52v2Ev();
extern void _ZN7S7839C52v3Ev();
extern void _ZN7S7839C52v4Ev();
extern void _ZN7S7839C52v5Ev();
extern void _ZN7S7839C52v6Ev();
static  VTBL_ENTRY vtc_S7839C4[] = {
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7839C4[0]),
  (VTBL_ENTRY)&_ZN7S7839C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7839C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7839C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v13Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI7S7839C4[0]),
  (VTBL_ENTRY)&_ZN7S7839C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v6Ev,
};
extern VTBL_ENTRY _ZTV7S7839C4[];
static  VTT_ENTRY vtt_S7839C4[] = {
  {&(_ZTV7S7839C4[3]),  3,24},
  {&(_ZTV7S7839C4[18]),  18,24},
};
extern VTBL_ENTRY _ZTI7S7839C4[];
extern  VTBL_ENTRY _ZTV7S7839C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7839C4[];
Class_Descriptor cd_S7839C4 = {  "S7839C4", // class name
  bases_S7839C4, 1,
  &(vtc_S7839C4[0]), // expected_vtbl_contents
  &(vtt_S7839C4[0]), // expected_vtt_contents
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI7S7839C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7839C4),24, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7839C4),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  S7839C3  : virtual S7839C4 {
  void *s7839c3f0;
  virtual  ~S7839C3(); // _ZN7S7839C3D2Ev
  virtual void  v14(); // _ZN7S7839C33v14Ev
  virtual void  v15(); // _ZN7S7839C33v15Ev
  virtual void  v16(); // _ZN7S7839C33v16Ev
  virtual void  v17(); // _ZN7S7839C33v17Ev
  virtual void  v18(); // _ZN7S7839C33v18Ev
  virtual void  v19(); // _ZN7S7839C33v19Ev
  virtual void  v20(); // _ZN7S7839C33v20Ev
  S7839C3(); // tgen
};
//SIG(-1 S7839C3) C1{ VBC2{ VBC3{ v8 v9 v10 v11 v12 v13 Fi} v14 v15 v16 v17 v18 v19 v20 FC4{ BC5{ BC6{ VBC7{ BC8{ v25 v26 v27 v28 v29 v30 Fi} v31} vd v32 v33 v34 v35 v36 v37 v38 v39 Fi Fs} BC8 v40 v41 v42 v43} vd v21 v22 v23 v24 FC9{}}} vd v1 v2 v3 v4 v5 v6 v7 Fp}


 S7839C3 ::~S7839C3(){ note_dtor("S7839C3", this);}
void  S7839C3 ::v14(){vfunc_called(this, "_ZN7S7839C33v14Ev");}
void  S7839C3 ::v15(){vfunc_called(this, "_ZN7S7839C33v15Ev");}
void  S7839C3 ::v16(){vfunc_called(this, "_ZN7S7839C33v16Ev");}
void  S7839C3 ::v17(){vfunc_called(this, "_ZN7S7839C33v17Ev");}
void  S7839C3 ::v18(){vfunc_called(this, "_ZN7S7839C33v18Ev");}
void  S7839C3 ::v19(){vfunc_called(this, "_ZN7S7839C33v19Ev");}
void  S7839C3 ::v20(){vfunc_called(this, "_ZN7S7839C33v20Ev");}
S7839C3 ::S7839C3(){ note_ctor("S7839C3", this);} // tgen

static void Test_S7839C3()
{
  extern Class_Descriptor cd_S7839C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S7839C3, buf);
    S7839C3 *dp, &lv = *(dp=new (buf) S7839C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S7839C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7839C3)");
    check_base_class_offset(lv, (S7839C5*)(S7839C4*), ABISELECT(72,44), "S7839C3");
    check_base_class_offset(lv, (S7839C4*), ABISELECT(16,8), "S7839C3");
    check_field_offset(lv, s7839c3f0, ABISELECT(8,4), "S7839C3.s7839c3f0");
    test_class_info(&lv, &cd_S7839C3);
    dp->~S7839C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7839C3(Test_S7839C3, "S7839C3", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN7S7839C3C1Ev();
extern void _ZN7S7839C3D2Ev();
Name_Map name_map_S7839C3[] = {
  NSPAIR(_ZN7S7839C3C1Ev),
  NSPAIR(_ZN7S7839C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7839C5;
extern VTBL_ENTRY _ZTI7S7839C5[];
extern  VTBL_ENTRY _ZTV7S7839C5[];
extern Class_Descriptor cd_S7839C4;
extern VTBL_ENTRY _ZTI7S7839C4[];
extern  VTBL_ENTRY _ZTV7S7839C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7839C4[];
static Base_Class bases_S7839C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7839C5,    ABISELECT(72,44), //bcp->offset
    30, //bcp->virtual_function_table_offset
    8, //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_S7839C4,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    10, //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 _ZTI7S7839C3[];
extern void _ZN7S7839C3D1Ev();
extern void _ZN7S7839C3D0Ev();
extern void _ZN7S7839C33v14Ev();
extern void _ZN7S7839C33v15Ev();
extern void _ZN7S7839C33v16Ev();
extern void _ZN7S7839C33v17Ev();
extern void _ZN7S7839C33v18Ev();
extern void _ZN7S7839C33v19Ev();
extern void _ZN7S7839C33v20Ev();
extern void _ZN7S7839C42v7Ev();
extern void _ZN7S7839C42v8Ev();
extern void _ZN7S7839C42v9Ev();
extern void _ZN7S7839C43v10Ev();
extern void _ZN7S7839C43v11Ev();
extern void _ZN7S7839C43v12Ev();
extern void _ZN7S7839C43v13Ev();
extern void _ZN7S7839C52v1Ev();
extern void _ZN7S7839C52v2Ev();
extern void _ZN7S7839C52v3Ev();
extern void _ZN7S7839C52v4Ev();
extern void _ZN7S7839C52v5Ev();
extern void _ZN7S7839C52v6Ev();
static  VTBL_ENTRY vtc_S7839C3[] = {
  ABISELECT(72,44),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7839C3[0]),
  (VTBL_ENTRY)&_ZN7S7839C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7839C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7839C3[0]),
  (VTBL_ENTRY)&_ZN7S7839C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7839C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7839C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v13Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI7S7839C3[0]),
  (VTBL_ENTRY)&_ZN7S7839C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v6Ev,
};
extern VTBL_ENTRY _ZTV7S7839C3[];
extern void _ZN7S7839C42v7Ev();
extern void _ZN7S7839C42v8Ev();
extern void _ZN7S7839C42v9Ev();
extern void _ZN7S7839C43v10Ev();
extern void _ZN7S7839C43v11Ev();
extern void _ZN7S7839C43v12Ev();
extern void _ZN7S7839C43v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C4__7S7839C3[] = {
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7839C4[0]),
  (VTBL_ENTRY)&_ZN7S7839C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7839C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7839C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v13Ev,
};
extern void _ZN7S7839C52v1Ev();
extern void _ZN7S7839C52v2Ev();
extern void _ZN7S7839C52v3Ev();
extern void _ZN7S7839C52v4Ev();
extern void _ZN7S7839C52v5Ev();
extern void _ZN7S7839C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C5__7S7839C4__7S7839C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI7S7839C4[0]),
  (VTBL_ENTRY)&_ZN7S7839C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v6Ev,
};
static  VTT_ENTRY vtt_S7839C3[] = {
  {&(_ZTV7S7839C3[4]),  4,44},
  {&(_ZTV7S7839C3[23]),  23,44},
  {&(_ZTV7S7839C3[38]),  38,44},
  {&(_tg__ZTV7S7839C4__7S7839C3[3]),  3,10},
  {&(_tg__ZTV7S7839C5__7S7839C4__7S7839C3[8]),  8,14},
};
extern VTBL_ENTRY _ZTI7S7839C3[];
extern  VTBL_ENTRY _ZTV7S7839C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7839C3[];
Class_Descriptor cd_S7839C3 = {  "S7839C3", // class name
  bases_S7839C3, 2,
  &(vtc_S7839C3[0]), // expected_vtbl_contents
  &(vtt_S7839C3[0]), // expected_vtt_contents
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI7S7839C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7839C3),44, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7839C3),5, //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  S7839C9  : S7839C5 {
  virtual void  v21(); // _ZN7S7839C93v21Ev
  ~S7839C9(); // tgen
  S7839C9(); // tgen
};
//SIG(-1 S7839C9) C1{ BC2{ v2 v3 v4 v5 v6 v7 Fi} v1}


void  S7839C9 ::v21(){vfunc_called(this, "_ZN7S7839C93v21Ev");}
S7839C9 ::~S7839C9(){ note_dtor("S7839C9", this);} // tgen
S7839C9 ::S7839C9(){ note_ctor("S7839C9", this);} // tgen

static void Test_S7839C9()
{
  extern Class_Descriptor cd_S7839C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7839C9, buf);
    S7839C9 *dp, &lv = *(dp=new (buf) S7839C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7839C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7839C9)");
    check_base_class_offset(lv, (S7839C5*), 0, "S7839C9");
    test_class_info(&lv, &cd_S7839C9);
    dp->~S7839C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7839C9(Test_S7839C9, "S7839C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7839C9C1Ev();
extern void _ZN7S7839C9D1Ev();
Name_Map name_map_S7839C9[] = {
  NSPAIR(_ZN7S7839C9C1Ev),
  NSPAIR(_ZN7S7839C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7839C5;
extern VTBL_ENTRY _ZTI7S7839C5[];
extern  VTBL_ENTRY _ZTV7S7839C5[];
static Base_Class bases_S7839C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7839C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S7839C9[];
extern void _ZN7S7839C52v1Ev();
extern void _ZN7S7839C52v2Ev();
extern void _ZN7S7839C52v3Ev();
extern void _ZN7S7839C52v4Ev();
extern void _ZN7S7839C52v5Ev();
extern void _ZN7S7839C52v6Ev();
extern void _ZN7S7839C93v21Ev();
static  VTBL_ENTRY vtc_S7839C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7839C9[0]),
  (VTBL_ENTRY)&_ZN7S7839C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7839C93v21Ev,
};
extern VTBL_ENTRY _ZTI7S7839C9[];
extern  VTBL_ENTRY _ZTV7S7839C9[];
Class_Descriptor cd_S7839C9 = {  "S7839C9", // class name
  bases_S7839C9, 1,
  &(vtc_S7839C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7839C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7839C9),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7839C8  : virtual S7839C9 {
  int s7839c8f0;
  short s7839c8f1;
  virtual  ~S7839C8(); // _ZN7S7839C8D2Ev
  virtual void  v22(); // _ZN7S7839C83v22Ev
  virtual void  v23(); // _ZN7S7839C83v23Ev
  virtual void  v24(); // _ZN7S7839C83v24Ev
  virtual void  v25(); // _ZN7S7839C83v25Ev
  virtual void  v26(); // _ZN7S7839C83v26Ev
  virtual void  v27(); // _ZN7S7839C83v27Ev
  virtual void  v28(); // _ZN7S7839C83v28Ev
  virtual void  v29(); // _ZN7S7839C83v29Ev
  S7839C8(); // tgen
};
//SIG(-1 S7839C8) C1{ VBC2{ BC3{ v9 v10 v11 v12 v13 v14 Fi} v15} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fs}


 S7839C8 ::~S7839C8(){ note_dtor("S7839C8", this);}
void  S7839C8 ::v22(){vfunc_called(this, "_ZN7S7839C83v22Ev");}
void  S7839C8 ::v23(){vfunc_called(this, "_ZN7S7839C83v23Ev");}
void  S7839C8 ::v24(){vfunc_called(this, "_ZN7S7839C83v24Ev");}
void  S7839C8 ::v25(){vfunc_called(this, "_ZN7S7839C83v25Ev");}
void  S7839C8 ::v26(){vfunc_called(this, "_ZN7S7839C83v26Ev");}
void  S7839C8 ::v27(){vfunc_called(this, "_ZN7S7839C83v27Ev");}
void  S7839C8 ::v28(){vfunc_called(this, "_ZN7S7839C83v28Ev");}
void  S7839C8 ::v29(){vfunc_called(this, "_ZN7S7839C83v29Ev");}
S7839C8 ::S7839C8(){ note_ctor("S7839C8", this);} // tgen

static void Test_S7839C8()
{
  extern Class_Descriptor cd_S7839C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S7839C8, buf);
    S7839C8 *dp, &lv = *(dp=new (buf) S7839C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S7839C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7839C8)");
    check_base_class_offset(lv, (S7839C5*)(S7839C9*), ABISELECT(16,12), "S7839C8");
    check_base_class_offset(lv, (S7839C9*), ABISELECT(16,12), "S7839C8");
    check_field_offset(lv, s7839c8f0, ABISELECT(8,4), "S7839C8.s7839c8f0");
    check_field_offset(lv, s7839c8f1, ABISELECT(12,8), "S7839C8.s7839c8f1");
    test_class_info(&lv, &cd_S7839C8);
    dp->~S7839C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7839C8(Test_S7839C8, "S7839C8", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S7839C8C1Ev();
extern void _ZN7S7839C8D2Ev();
Name_Map name_map_S7839C8[] = {
  NSPAIR(_ZN7S7839C8C1Ev),
  NSPAIR(_ZN7S7839C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7839C5;
extern VTBL_ENTRY _ZTI7S7839C5[];
extern  VTBL_ENTRY _ZTV7S7839C5[];
extern Class_Descriptor cd_S7839C9;
extern VTBL_ENTRY _ZTI7S7839C9[];
extern  VTBL_ENTRY _ZTV7S7839C9[];
static Base_Class bases_S7839C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7839C5,    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
  0, 0},
  {&cd_S7839C9,    ABISELECT(16,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S7839C8[];
extern void _ZN7S7839C8D1Ev();
extern void _ZN7S7839C8D0Ev();
extern void _ZN7S7839C83v22Ev();
extern void _ZN7S7839C83v23Ev();
extern void _ZN7S7839C83v24Ev();
extern void _ZN7S7839C83v25Ev();
extern void _ZN7S7839C83v26Ev();
extern void _ZN7S7839C83v27Ev();
extern void _ZN7S7839C83v28Ev();
extern void _ZN7S7839C83v29Ev();
extern void _ZN7S7839C52v1Ev();
extern void _ZN7S7839C52v2Ev();
extern void _ZN7S7839C52v3Ev();
extern void _ZN7S7839C52v4Ev();
extern void _ZN7S7839C52v5Ev();
extern void _ZN7S7839C52v6Ev();
extern void _ZN7S7839C93v21Ev();
static  VTBL_ENTRY vtc_S7839C8[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7839C8[0]),
  (VTBL_ENTRY)&_ZN7S7839C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7839C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v26Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v27Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7839C8[0]),
  (VTBL_ENTRY)&_ZN7S7839C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7839C93v21Ev,
};
extern VTBL_ENTRY _ZTV7S7839C8[];
static  VTT_ENTRY vtt_S7839C8[] = {
  {&(_ZTV7S7839C8[3]),  3,29},
  {&(_ZTV7S7839C8[22]),  22,29},
};
extern VTBL_ENTRY _ZTI7S7839C8[];
extern  VTBL_ENTRY _ZTV7S7839C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7839C8[];
Class_Descriptor cd_S7839C8 = {  "S7839C8", // class name
  bases_S7839C8, 2,
  &(vtc_S7839C8[0]), // expected_vtbl_contents
  &(vtt_S7839C8[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S7839C8),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7839C8),29, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7839C8),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  S7839C11  : virtual S7839C8 {
  void *s7839c11f0[7];
  int s7839c11f1;
  virtual void  v30(); // _ZN8S7839C113v30Ev
  virtual void  v31(); // _ZN8S7839C113v31Ev
  virtual void  v32(); // _ZN8S7839C113v32Ev
  virtual void  v33(); // _ZN8S7839C113v33Ev
  virtual void  v34(); // _ZN8S7839C113v34Ev
  ~S7839C11(); // tgen
  S7839C11(); // tgen
};
//SIG(-1 S7839C11) C1{ VBC2{ VBC3{ BC4{ v6 v7 v8 v9 v10 v11 Fi} v12} vd v13 v14 v15 v16 v17 v18 v19 v20 Fi Fs} v1 v2 v3 v4 v5 Fp[7] Fi}


void  S7839C11 ::v30(){vfunc_called(this, "_ZN8S7839C113v30Ev");}
void  S7839C11 ::v31(){vfunc_called(this, "_ZN8S7839C113v31Ev");}
void  S7839C11 ::v32(){vfunc_called(this, "_ZN8S7839C113v32Ev");}
void  S7839C11 ::v33(){vfunc_called(this, "_ZN8S7839C113v33Ev");}
void  S7839C11 ::v34(){vfunc_called(this, "_ZN8S7839C113v34Ev");}
S7839C11 ::~S7839C11(){ note_dtor("S7839C11", this);} // tgen
S7839C11 ::S7839C11(){ note_ctor("S7839C11", this);} // tgen

static void Test_S7839C11()
{
  extern Class_Descriptor cd_S7839C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,15)];
    init_test(&cd_S7839C11, buf);
    S7839C11 *dp, &lv = *(dp=new (buf) S7839C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,56), "sizeof(S7839C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7839C11)");
    check_base_class_offset(lv, (S7839C5*)(S7839C9*), ABISELECT(88,48), "S7839C11");
    check_base_class_offset(lv, (S7839C9*)(S7839C8*), ABISELECT(88,48), "S7839C11");
    check_base_class_offset(lv, (S7839C8*), ABISELECT(72,36), "S7839C11");
    check_field_offset(lv, s7839c11f0, ABISELECT(8,4), "S7839C11.s7839c11f0");
    check_field_offset(lv, s7839c11f1, ABISELECT(64,32), "S7839C11.s7839c11f1");
    test_class_info(&lv, &cd_S7839C11);
    dp->~S7839C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7839C11(Test_S7839C11, "S7839C11", ABISELECT(104,56));

#else // __cplusplus

extern void _ZN8S7839C11C1Ev();
extern void _ZN8S7839C11D1Ev();
Name_Map name_map_S7839C11[] = {
  NSPAIR(_ZN8S7839C11C1Ev),
  NSPAIR(_ZN8S7839C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7839C5;
extern VTBL_ENTRY _ZTI7S7839C5[];
extern  VTBL_ENTRY _ZTV7S7839C5[];
extern Class_Descriptor cd_S7839C9;
extern VTBL_ENTRY _ZTI7S7839C9[];
extern  VTBL_ENTRY _ZTV7S7839C9[];
extern Class_Descriptor cd_S7839C8;
extern VTBL_ENTRY _ZTI7S7839C8[];
extern  VTBL_ENTRY _ZTV7S7839C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7839C8[];
static Base_Class bases_S7839C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7839C5,    ABISELECT(88,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_S7839C9,    ABISELECT(88,48), //bcp->offset
    33, //bcp->virtual_function_table_offset
    9, //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
    2, //immediately_derived
  0, 1},
  {&cd_S7839C8,    ABISELECT(72,36), //bcp->offset
    11, //bcp->virtual_function_table_offset
    12, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S7839C11[];
extern void _ZN8S7839C113v30Ev();
extern void _ZN8S7839C113v31Ev();
extern void _ZN8S7839C113v32Ev();
extern void _ZN8S7839C113v33Ev();
extern void _ZN8S7839C113v34Ev();
extern void _ZN8S7839C11D1Ev();
extern void _ZN8S7839C11D0Ev();
extern void ABISELECT(_ZTv0_n32_N8S7839C11D1Ev,_ZTv0_n16_N8S7839C11D1Ev)();
extern void ABISELECT(_ZThn72_N8S7839C11D1Ev,_ZThn36_N8S7839C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7839C11D0Ev,_ZTv0_n16_N8S7839C11D0Ev)();
extern void ABISELECT(_ZThn72_N8S7839C11D0Ev,_ZThn36_N8S7839C11D0Ev)() __attribute__((weak));
extern void _ZN7S7839C83v22Ev();
extern void _ZN7S7839C83v23Ev();
extern void _ZN7S7839C83v24Ev();
extern void _ZN7S7839C83v25Ev();
extern void _ZN7S7839C83v26Ev();
extern void _ZN7S7839C83v27Ev();
extern void _ZN7S7839C83v28Ev();
extern void _ZN7S7839C83v29Ev();
extern void _ZN7S7839C52v1Ev();
extern void _ZN7S7839C52v2Ev();
extern void _ZN7S7839C52v3Ev();
extern void _ZN7S7839C52v4Ev();
extern void _ZN7S7839C52v5Ev();
extern void _ZN7S7839C52v6Ev();
extern void _ZN7S7839C93v21Ev();
static  VTBL_ENTRY vtc_S7839C11[] = {
  ABISELECT(88,48),
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S7839C11[0]),
  (VTBL_ENTRY)&_ZN8S7839C113v30Ev,
  (VTBL_ENTRY)&_ZN8S7839C113v31Ev,
  (VTBL_ENTRY)&_ZN8S7839C113v32Ev,
  (VTBL_ENTRY)&_ZN8S7839C113v33Ev,
  (VTBL_ENTRY)&_ZN8S7839C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7839C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7839C11D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  ABISELECT(16,12),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S7839C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7839C11D1Ev,_ZTv0_n16_N8S7839C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7839C11D0Ev,_ZTv0_n16_N8S7839C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7839C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v26Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v27Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI8S7839C11[0]),
  (VTBL_ENTRY)&_ZN7S7839C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7839C93v21Ev,
};
extern VTBL_ENTRY _ZTV8S7839C11[];
extern void _ZN7S7839C8D1Ev();
extern void _ZN7S7839C8D0Ev();
extern void _ZN7S7839C83v22Ev();
extern void _ZN7S7839C83v23Ev();
extern void _ZN7S7839C83v24Ev();
extern void _ZN7S7839C83v25Ev();
extern void _ZN7S7839C83v26Ev();
extern void _ZN7S7839C83v27Ev();
extern void _ZN7S7839C83v28Ev();
extern void _ZN7S7839C83v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C8__8S7839C11[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7839C8[0]),
  (VTBL_ENTRY)&_ZN7S7839C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7839C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v26Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v27Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v29Ev,
};
extern void _ZN7S7839C52v1Ev();
extern void _ZN7S7839C52v2Ev();
extern void _ZN7S7839C52v3Ev();
extern void _ZN7S7839C52v4Ev();
extern void _ZN7S7839C52v5Ev();
extern void _ZN7S7839C52v6Ev();
extern void _ZN7S7839C93v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C9__7S7839C8__8S7839C11[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7839C8[0]),
  (VTBL_ENTRY)&_ZN7S7839C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7839C93v21Ev,
};
static  VTT_ENTRY vtt_S7839C11[] = {
  {&(_ZTV8S7839C11[4]),  4,49},
  {&(_ZTV8S7839C11[23]),  23,49},
  {&(_ZTV8S7839C11[42]),  42,49},
  {&(_tg__ZTV7S7839C8__8S7839C11[3]),  3,13},
  {&(_tg__ZTV7S7839C9__7S7839C8__8S7839C11[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S7839C11[];
extern  VTBL_ENTRY _ZTV8S7839C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7839C11[];
static VTBL_ENTRY alt_thunk_names132[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7839C11D0Ev,_ZTv0_n16_N8S7839C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S7839C11D0Ev,_ZThn36_N8S7839C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7839C11D1Ev,_ZTv0_n16_N8S7839C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S7839C11D1Ev,_ZThn36_N8S7839C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7839C11 = {  "S7839C11", // class name
  bases_S7839C11, 3,
  &(vtc_S7839C11[0]), // expected_vtbl_contents
  &(vtt_S7839C11[0]), // expected_vtt_contents
  ABISELECT(104,56), // object size
  NSPAIRA(_ZTI8S7839C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7839C11),49, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7839C11),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names132,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7839C2  : virtual S7839C3 , S7839C11 {
  void *s7839c2f0[3];
  int s7839c2f1;
  virtual  ~S7839C2(); // _ZN7S7839C2D2Ev
  virtual void  v35(); // _ZN7S7839C23v35Ev
  virtual void  v36(); // _ZN7S7839C23v36Ev
  virtual void  v37(); // _ZN7S7839C23v37Ev
  virtual void  v38(); // _ZN7S7839C23v38Ev
  virtual void  v39(); // _ZN7S7839C23v39Ev
  virtual void  v40(); // _ZN7S7839C23v40Ev
  virtual void  v41(); // _ZN7S7839C23v41Ev
  S7839C2(); // tgen
};
//SIG(-1 S7839C2) C1{ VBC2{ VBC3{ VBC4{ v8 v9 v10 v11 v12 v13 Fi} v14 v15 v16 v17 v18 v19 v20 FC5{ BC6{ BC7{ VBC8{ BC9{ v46 v47 v48 v49 v50 v51 Fi} v52} vd v53 v54 v55 v56 v57 v58 v59 v60 Fi Fs} BC9 v61 v62 v63 v64} vd v42 v43 v44 v45 FC10{}}} vd v21 v22 v23 v24 v25 v26 v27 Fp} BC11{ VBC12{ VBC13{ BC4 v28} vd v29 v30 v31 v32 v33 v34 v35 v36 Fi Fs} v37 v38 v39 v40 v41 Fp[7] Fi} vd v1 v2 v3 v4 v5 v6 v7 Fp[3] Fi}


 S7839C2 ::~S7839C2(){ note_dtor("S7839C2", this);}
void  S7839C2 ::v35(){vfunc_called(this, "_ZN7S7839C23v35Ev");}
void  S7839C2 ::v36(){vfunc_called(this, "_ZN7S7839C23v36Ev");}
void  S7839C2 ::v37(){vfunc_called(this, "_ZN7S7839C23v37Ev");}
void  S7839C2 ::v38(){vfunc_called(this, "_ZN7S7839C23v38Ev");}
void  S7839C2 ::v39(){vfunc_called(this, "_ZN7S7839C23v39Ev");}
void  S7839C2 ::v40(){vfunc_called(this, "_ZN7S7839C23v40Ev");}
void  S7839C2 ::v41(){vfunc_called(this, "_ZN7S7839C23v41Ev");}
S7839C2 ::S7839C2(){ note_ctor("S7839C2", this);} // tgen

static void Test_S7839C2()
{
  extern Class_Descriptor cd_S7839C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(29,32)];
    init_test(&cd_S7839C2, buf);
    S7839C2 *dp, &lv = *(dp=new (buf) S7839C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(224,124), "sizeof(S7839C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7839C2)");
    check_base_class_offset(lv, (S7839C5*)(S7839C4*), ABISELECT(176,96), "S7839C2");
    check_base_class_offset(lv, (S7839C4*)(S7839C3*), ABISELECT(120,60), "S7839C2");
    check_base_class_offset(lv, (S7839C3*), ABISELECT(104,52), "S7839C2");
    check_base_class_offset(lv, (S7839C5*)(S7839C9*), ABISELECT(208,116), "S7839C2");
    check_base_class_offset(lv, (S7839C9*)(S7839C8*), ABISELECT(208,116), "S7839C2");
    check_base_class_offset(lv, (S7839C8*)(S7839C11*), ABISELECT(192,104), "S7839C2");
    check_base_class_offset(lv, (S7839C11*), 0, "S7839C2");
    check_field_offset(lv, s7839c2f0, ABISELECT(72,36), "S7839C2.s7839c2f0");
    check_field_offset(lv, s7839c2f1, ABISELECT(96,48), "S7839C2.s7839c2f1");
    test_class_info(&lv, &cd_S7839C2);
    dp->~S7839C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7839C2(Test_S7839C2, "S7839C2", ABISELECT(224,124));

#else // __cplusplus

extern void _ZN7S7839C2C1Ev();
extern void _ZN7S7839C2D2Ev();
Name_Map name_map_S7839C2[] = {
  NSPAIR(_ZN7S7839C2C1Ev),
  NSPAIR(_ZN7S7839C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7839C5;
extern VTBL_ENTRY _ZTI7S7839C5[];
extern  VTBL_ENTRY _ZTV7S7839C5[];
extern Class_Descriptor cd_S7839C4;
extern VTBL_ENTRY _ZTI7S7839C4[];
extern  VTBL_ENTRY _ZTV7S7839C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7839C4[];
extern Class_Descriptor cd_S7839C3;
extern VTBL_ENTRY _ZTI7S7839C3[];
extern  VTBL_ENTRY _ZTV7S7839C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7839C3[];
extern Class_Descriptor cd_S7839C5;
extern VTBL_ENTRY _ZTI7S7839C5[];
extern  VTBL_ENTRY _ZTV7S7839C5[];
extern Class_Descriptor cd_S7839C9;
extern VTBL_ENTRY _ZTI7S7839C9[];
extern  VTBL_ENTRY _ZTV7S7839C9[];
extern Class_Descriptor cd_S7839C8;
extern VTBL_ENTRY _ZTI7S7839C8[];
extern  VTBL_ENTRY _ZTV7S7839C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7839C8[];
extern Class_Descriptor cd_S7839C11;
extern VTBL_ENTRY _ZTI8S7839C11[];
extern  VTBL_ENTRY _ZTV8S7839C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7839C11[];
static Base_Class bases_S7839C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7839C5,    ABISELECT(176,96), //bcp->offset
    59, //bcp->virtual_function_table_offset
    8, //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_S7839C4,    ABISELECT(120,60), //bcp->offset
    42, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7839C3,    ABISELECT(104,52), //bcp->offset
    21, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7839C5,    ABISELECT(208,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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7839C9,    ABISELECT(208,116), //bcp->offset
    95, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7839C8,    ABISELECT(192,104), //bcp->offset
    73, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7839C11,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7839C2[];
extern void _ZN8S7839C113v30Ev();
extern void _ZN8S7839C113v31Ev();
extern void _ZN8S7839C113v32Ev();
extern void _ZN8S7839C113v33Ev();
extern void _ZN8S7839C113v34Ev();
extern void _ZN7S7839C2D1Ev();
extern void _ZN7S7839C2D0Ev();
extern void _ZN7S7839C23v35Ev();
extern void _ZN7S7839C23v36Ev();
extern void _ZN7S7839C23v37Ev();
extern void _ZN7S7839C23v38Ev();
extern void _ZN7S7839C23v39Ev();
extern void _ZN7S7839C23v40Ev();
extern void _ZN7S7839C23v41Ev();
extern void ABISELECT(_ZTv0_n40_N7S7839C2D1Ev,_ZTv0_n20_N7S7839C2D1Ev)();
extern void ABISELECT(_ZThn104_N7S7839C2D1Ev,_ZThn52_N7S7839C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7839C2D0Ev,_ZTv0_n20_N7S7839C2D0Ev)();
extern void ABISELECT(_ZThn104_N7S7839C2D0Ev,_ZThn52_N7S7839C2D0Ev)() __attribute__((weak));
extern void _ZN7S7839C33v14Ev();
extern void _ZN7S7839C33v15Ev();
extern void _ZN7S7839C33v16Ev();
extern void _ZN7S7839C33v17Ev();
extern void _ZN7S7839C33v18Ev();
extern void _ZN7S7839C33v19Ev();
extern void _ZN7S7839C33v20Ev();
extern void _ZN7S7839C42v7Ev();
extern void _ZN7S7839C42v8Ev();
extern void _ZN7S7839C42v9Ev();
extern void _ZN7S7839C43v10Ev();
extern void _ZN7S7839C43v11Ev();
extern void _ZN7S7839C43v12Ev();
extern void _ZN7S7839C43v13Ev();
extern void _ZN7S7839C52v1Ev();
extern void _ZN7S7839C52v2Ev();
extern void _ZN7S7839C52v3Ev();
extern void _ZN7S7839C52v4Ev();
extern void _ZN7S7839C52v5Ev();
extern void _ZN7S7839C52v6Ev();
extern void ABISELECT(_ZTv0_n32_N7S7839C2D1Ev,_ZTv0_n16_N7S7839C2D1Ev)();
extern void ABISELECT(_ZThn192_N7S7839C2D1Ev,_ZThn104_N7S7839C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7839C2D0Ev,_ZTv0_n16_N7S7839C2D0Ev)();
extern void ABISELECT(_ZThn192_N7S7839C2D0Ev,_ZThn104_N7S7839C2D0Ev)() __attribute__((weak));
extern void _ZN7S7839C83v22Ev();
extern void _ZN7S7839C83v23Ev();
extern void _ZN7S7839C83v24Ev();
extern void _ZN7S7839C83v25Ev();
extern void _ZN7S7839C83v26Ev();
extern void _ZN7S7839C83v27Ev();
extern void _ZN7S7839C83v28Ev();
extern void _ZN7S7839C83v29Ev();
extern void _ZN7S7839C52v1Ev();
extern void _ZN7S7839C52v2Ev();
extern void _ZN7S7839C52v3Ev();
extern void _ZN7S7839C52v4Ev();
extern void _ZN7S7839C52v5Ev();
extern void _ZN7S7839C52v6Ev();
extern void _ZN7S7839C93v21Ev();
static  VTBL_ENTRY vtc_S7839C2[] = {
  ABISELECT(176,96),
  ABISELECT(120,60),
  ABISELECT(104,52),
  ABISELECT(208,116),
  ABISELECT(192,104),
  0,
  (VTBL_ENTRY)&(_ZTI7S7839C2[0]),
  (VTBL_ENTRY)&_ZN8S7839C113v30Ev,
  (VTBL_ENTRY)&_ZN8S7839C113v31Ev,
  (VTBL_ENTRY)&_ZN8S7839C113v32Ev,
  (VTBL_ENTRY)&_ZN8S7839C113v33Ev,
  (VTBL_ENTRY)&_ZN8S7839C113v34Ev,
  (VTBL_ENTRY)&_ZN7S7839C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7839C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7839C23v35Ev,
  (VTBL_ENTRY)&_ZN7S7839C23v36Ev,
  (VTBL_ENTRY)&_ZN7S7839C23v37Ev,
  (VTBL_ENTRY)&_ZN7S7839C23v38Ev,
  (VTBL_ENTRY)&_ZN7S7839C23v39Ev,
  (VTBL_ENTRY)&_ZN7S7839C23v40Ev,
  (VTBL_ENTRY)&_ZN7S7839C23v41Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  ABISELECT(72,44),
  ABISELECT(16,8),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI7S7839C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7839C2D1Ev,_ZTv0_n20_N7S7839C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7839C2D0Ev,_ZTv0_n20_N7S7839C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7839C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,36),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7839C2[0]),
  (VTBL_ENTRY)&_ZN7S7839C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7839C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7839C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v13Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-176,-96),
  (VTBL_ENTRY)&(_ZTI7S7839C2[0]),
  (VTBL_ENTRY)&_ZN7S7839C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v6Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-104),
  ABISELECT(16,12),
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI7S7839C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7839C2D1Ev,_ZTv0_n16_N7S7839C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7839C2D0Ev,_ZTv0_n16_N7S7839C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7839C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v26Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v27Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-116),
  (VTBL_ENTRY)&(_ZTI7S7839C2[0]),
  (VTBL_ENTRY)&_ZN7S7839C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7839C93v21Ev,
};
extern VTBL_ENTRY _ZTV7S7839C2[];
extern void _ZN8S7839C113v30Ev();
extern void _ZN8S7839C113v31Ev();
extern void _ZN8S7839C113v32Ev();
extern void _ZN8S7839C113v33Ev();
extern void _ZN8S7839C113v34Ev();
extern void _ZN8S7839C11D1Ev();
extern void _ZN8S7839C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7839C11__7S7839C2[] = {
  ABISELECT(208,116),
  ABISELECT(192,104),
  0,
  (VTBL_ENTRY)&(_ZTI8S7839C11[0]),
  (VTBL_ENTRY)&_ZN8S7839C113v30Ev,
  (VTBL_ENTRY)&_ZN8S7839C113v31Ev,
  (VTBL_ENTRY)&_ZN8S7839C113v32Ev,
  (VTBL_ENTRY)&_ZN8S7839C113v33Ev,
  (VTBL_ENTRY)&_ZN8S7839C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7839C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7839C11D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7839C11D1Ev,_ZTv0_n16_N8S7839C11D1Ev)();
extern void ABISELECT(_ZThn192_N8S7839C11D1Ev,_ZThn104_N8S7839C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7839C11D0Ev,_ZTv0_n16_N8S7839C11D0Ev)();
extern void ABISELECT(_ZThn192_N8S7839C11D0Ev,_ZThn104_N8S7839C11D0Ev)() __attribute__((weak));
extern void _ZN7S7839C83v22Ev();
extern void _ZN7S7839C83v23Ev();
extern void _ZN7S7839C83v24Ev();
extern void _ZN7S7839C83v25Ev();
extern void _ZN7S7839C83v26Ev();
extern void _ZN7S7839C83v27Ev();
extern void _ZN7S7839C83v28Ev();
extern void _ZN7S7839C83v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C8__8S7839C11__7S7839C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-104),
  ABISELECT(16,12),
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI8S7839C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7839C11D1Ev,_ZTv0_n16_N8S7839C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7839C11D0Ev,_ZTv0_n16_N8S7839C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7839C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v26Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v27Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v29Ev,
};
extern void _ZN7S7839C52v1Ev();
extern void _ZN7S7839C52v2Ev();
extern void _ZN7S7839C52v3Ev();
extern void _ZN7S7839C52v4Ev();
extern void _ZN7S7839C52v5Ev();
extern void _ZN7S7839C52v6Ev();
extern void _ZN7S7839C93v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C9__8S7839C11__7S7839C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-116),
  (VTBL_ENTRY)&(_ZTI8S7839C11[0]),
  (VTBL_ENTRY)&_ZN7S7839C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7839C93v21Ev,
};
extern void _ZN7S7839C3D1Ev();
extern void _ZN7S7839C3D0Ev();
extern void _ZN7S7839C33v14Ev();
extern void _ZN7S7839C33v15Ev();
extern void _ZN7S7839C33v16Ev();
extern void _ZN7S7839C33v17Ev();
extern void _ZN7S7839C33v18Ev();
extern void _ZN7S7839C33v19Ev();
extern void _ZN7S7839C33v20Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C3__7S7839C2[] = {
  ABISELECT(72,44),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7839C3[0]),
  (VTBL_ENTRY)&_ZN7S7839C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7839C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v20Ev,
};
extern void _ZN7S7839C42v7Ev();
extern void _ZN7S7839C42v8Ev();
extern void _ZN7S7839C42v9Ev();
extern void _ZN7S7839C43v10Ev();
extern void _ZN7S7839C43v11Ev();
extern void _ZN7S7839C43v12Ev();
extern void _ZN7S7839C43v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C4__7S7839C3__7S7839C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7839C3[0]),
  (VTBL_ENTRY)&_ZN7S7839C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7839C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7839C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v13Ev,
};
extern void _ZN7S7839C52v1Ev();
extern void _ZN7S7839C52v2Ev();
extern void _ZN7S7839C52v3Ev();
extern void _ZN7S7839C52v4Ev();
extern void _ZN7S7839C52v5Ev();
extern void _ZN7S7839C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C5__7S7839C3__7S7839C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI7S7839C3[0]),
  (VTBL_ENTRY)&_ZN7S7839C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v6Ev,
};
extern void _ZN7S7839C42v7Ev();
extern void _ZN7S7839C42v8Ev();
extern void _ZN7S7839C42v9Ev();
extern void _ZN7S7839C43v10Ev();
extern void _ZN7S7839C43v11Ev();
extern void _ZN7S7839C43v12Ev();
extern void _ZN7S7839C43v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C4__7S7839C2[] = {
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7839C4[0]),
  (VTBL_ENTRY)&_ZN7S7839C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7839C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7839C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v13Ev,
};
extern void _ZN7S7839C52v1Ev();
extern void _ZN7S7839C52v2Ev();
extern void _ZN7S7839C52v3Ev();
extern void _ZN7S7839C52v4Ev();
extern void _ZN7S7839C52v5Ev();
extern void _ZN7S7839C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C5__7S7839C4__7S7839C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI7S7839C4[0]),
  (VTBL_ENTRY)&_ZN7S7839C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v6Ev,
};
extern void _ZN7S7839C8D1Ev();
extern void _ZN7S7839C8D0Ev();
extern void _ZN7S7839C83v22Ev();
extern void _ZN7S7839C83v23Ev();
extern void _ZN7S7839C83v24Ev();
extern void _ZN7S7839C83v25Ev();
extern void _ZN7S7839C83v26Ev();
extern void _ZN7S7839C83v27Ev();
extern void _ZN7S7839C83v28Ev();
extern void _ZN7S7839C83v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C8__7S7839C2[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7839C8[0]),
  (VTBL_ENTRY)&_ZN7S7839C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7839C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v26Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v27Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v29Ev,
};
extern void _ZN7S7839C52v1Ev();
extern void _ZN7S7839C52v2Ev();
extern void _ZN7S7839C52v3Ev();
extern void _ZN7S7839C52v4Ev();
extern void _ZN7S7839C52v5Ev();
extern void _ZN7S7839C52v6Ev();
extern void _ZN7S7839C93v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C9__7S7839C8__7S7839C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7839C8[0]),
  (VTBL_ENTRY)&_ZN7S7839C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7839C93v21Ev,
};
static  VTT_ENTRY vtt_S7839C2[] = {
  {&(_ZTV7S7839C2[7]),  7,111},
  {&(_tg__ZTV8S7839C11__7S7839C2[4]),  4,11},
  {&(_tg__ZTV7S7839C8__8S7839C11__7S7839C2[12]),  12,22},
  {&(_tg__ZTV7S7839C9__8S7839C11__7S7839C2[9]),  9,16},
  {&(_ZTV7S7839C2[33]),  33,111},
  {&(_ZTV7S7839C2[52]),  52,111},
  {&(_ZTV7S7839C2[67]),  67,111},
  {&(_ZTV7S7839C2[85]),  85,111},
  {&(_ZTV7S7839C2[104]),  104,111},
  {&(_tg__ZTV7S7839C3__7S7839C2[4]),  4,13},
  {&(_tg__ZTV7S7839C4__7S7839C3__7S7839C2[10]),  10,17},
  {&(_tg__ZTV7S7839C5__7S7839C3__7S7839C2[8]),  8,14},
  {&(_tg__ZTV7S7839C4__7S7839C2[3]),  3,10},
  {&(_tg__ZTV7S7839C5__7S7839C4__7S7839C2[8]),  8,14},
  {&(_tg__ZTV7S7839C8__7S7839C2[3]),  3,13},
  {&(_tg__ZTV7S7839C9__7S7839C8__7S7839C2[9]),  9,16},
};
extern VTBL_ENTRY _ZTI7S7839C2[];
extern  VTBL_ENTRY _ZTV7S7839C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7839C2[];
static VTBL_ENTRY alt_thunk_names133[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7839C11D0Ev,_ZTv0_n16_N8S7839C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S7839C11D0Ev,_ZThn104_N8S7839C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7839C11D1Ev,_ZTv0_n16_N8S7839C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S7839C11D1Ev,_ZThn104_N8S7839C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7839C2D0Ev,_ZTv0_n16_N7S7839C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7839C2D0Ev,_ZThn104_N7S7839C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7839C2D1Ev,_ZTv0_n16_N7S7839C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7839C2D1Ev,_ZThn104_N7S7839C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7839C2D0Ev,_ZTv0_n20_N7S7839C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7839C2D0Ev,_ZThn52_N7S7839C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7839C2D1Ev,_ZTv0_n20_N7S7839C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7839C2D1Ev,_ZThn52_N7S7839C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7839C2 = {  "S7839C2", // class name
  bases_S7839C2, 7,
  &(vtc_S7839C2[0]), // expected_vtbl_contents
  &(vtt_S7839C2[0]), // expected_vtt_contents
  ABISELECT(224,124), // object size
  NSPAIRA(_ZTI7S7839C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7839C2),111, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7839C2),16, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names133,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7839C12_nt  {
  int s7839c12f0;
  virtual void  v42(); // _ZN11S7839C12_nt3v42Ev
  virtual void  v43(); // _ZN11S7839C12_nt3v43Ev
  virtual void  v44(); // _ZN11S7839C12_nt3v44Ev
  virtual void  v45(); // _ZN11S7839C12_nt3v45Ev
  ~S7839C12_nt(); // tgen
  S7839C12_nt(); // tgen
};
//SIG(-1 S7839C12_nt) C1{ v1 v2 v3 v4 Fi}


void  S7839C12_nt ::v42(){vfunc_called(this, "_ZN11S7839C12_nt3v42Ev");}
void  S7839C12_nt ::v43(){vfunc_called(this, "_ZN11S7839C12_nt3v43Ev");}
void  S7839C12_nt ::v44(){vfunc_called(this, "_ZN11S7839C12_nt3v44Ev");}
void  S7839C12_nt ::v45(){vfunc_called(this, "_ZN11S7839C12_nt3v45Ev");}
S7839C12_nt ::~S7839C12_nt(){ note_dtor("S7839C12_nt", this);} // tgen
S7839C12_nt ::S7839C12_nt(){ note_ctor("S7839C12_nt", this);} // tgen

//skip512 S7839C12_nt

#else // __cplusplus

extern void _ZN11S7839C12_ntC1Ev();
extern void _ZN11S7839C12_ntD1Ev();
Name_Map name_map_S7839C12_nt[] = {
  NSPAIR(_ZN11S7839C12_ntC1Ev),
  NSPAIR(_ZN11S7839C12_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S7839C12_nt[];
extern void _ZN11S7839C12_nt3v42Ev();
extern void _ZN11S7839C12_nt3v43Ev();
extern void _ZN11S7839C12_nt3v44Ev();
extern void _ZN11S7839C12_nt3v45Ev();
static  VTBL_ENTRY vtc_S7839C12_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S7839C12_nt[0]),
  (VTBL_ENTRY)&_ZN11S7839C12_nt3v42Ev,
  (VTBL_ENTRY)&_ZN11S7839C12_nt3v43Ev,
  (VTBL_ENTRY)&_ZN11S7839C12_nt3v44Ev,
  (VTBL_ENTRY)&_ZN11S7839C12_nt3v45Ev,
};
extern VTBL_ENTRY _ZTI11S7839C12_nt[];
VTBL_ENTRY *P__ZTI11S7839C12_nt = _ZTI11S7839C12_nt; 
extern  VTBL_ENTRY _ZTV11S7839C12_nt[];
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7839C1  : S7839C2 {
  ::S7839C12_nt s7839c1f0;
  virtual  ~S7839C1(); // _ZN7S7839C1D2Ev
  S7839C1(); // tgen
};
//SIG(1 S7839C1) C1{ BC2{ VBC3{ VBC4{ VBC5{ v1 v2 v3 v4 v5 v6 Fi} v7 v8 v9 v10 v11 v12 v13 FC6{ BC7{ BC8{ VBC9{ BC10{ v50 v51 v52 v53 v54 v55 Fi} v56} vd v57 v58 v59 v60 v61 v62 v63 v64 Fi Fs} BC10 v65 v66 v67 v68} vd v46 v47 v48 v49 FC11{}}} vd v14 v15 v16 v17 v18 v19 v20 Fp} BC12{ VBC13{ VBC14{ BC5 v21} vd v22 v23 v24 v25 v26 v27 v28 v29 Fi Fs} v30 v31 v32 v33 v34 Fp[7] Fi} vd v35 v36 v37 v38 v39 v40 v41 Fp[3] Fi} vd FC15{ v42 v43 v44 v45 Fi}}


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

static void Test_S7839C1()
{
  extern Class_Descriptor cd_S7839C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,34)];
    init_test(&cd_S7839C1, buf);
    S7839C1 *dp, &lv = *(dp=new (buf) S7839C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,132), "sizeof(S7839C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7839C1)");
    check_base_class_offset(lv, (S7839C5*)(S7839C4*), ABISELECT(192,104), "S7839C1");
    check_base_class_offset(lv, (S7839C4*)(S7839C3*), ABISELECT(136,68), "S7839C1");
    check_base_class_offset(lv, (S7839C3*)(S7839C2*), ABISELECT(120,60), "S7839C1");
    check_base_class_offset(lv, (S7839C5*)(S7839C9*), ABISELECT(224,124), "S7839C1");
    check_base_class_offset(lv, (S7839C9*)(S7839C8*), ABISELECT(224,124), "S7839C1");
    check_base_class_offset(lv, (S7839C8*)(S7839C11*)(S7839C2*), ABISELECT(208,112), "S7839C1");
    check_base_class_offset(lv, (S7839C11*)(S7839C2*), 0, "S7839C1");
    check_base_class_offset(lv, (S7839C2*), 0, "S7839C1");
    check_field_offset(lv, s7839c1f0, ABISELECT(104,52), "S7839C1.s7839c1f0");
    test_class_info(&lv, &cd_S7839C1);
    dp->~S7839C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7839C1(Test_S7839C1, "S7839C1", ABISELECT(240,132));

#else // __cplusplus

extern void _ZN7S7839C1C1Ev();
extern void _ZN7S7839C1D2Ev();
Name_Map name_map_S7839C1[] = {
  NSPAIR(_ZN7S7839C1C1Ev),
  NSPAIR(_ZN7S7839C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7839C5;
extern VTBL_ENTRY _ZTI7S7839C5[];
extern  VTBL_ENTRY _ZTV7S7839C5[];
extern Class_Descriptor cd_S7839C4;
extern VTBL_ENTRY _ZTI7S7839C4[];
extern  VTBL_ENTRY _ZTV7S7839C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7839C4[];
extern Class_Descriptor cd_S7839C3;
extern VTBL_ENTRY _ZTI7S7839C3[];
extern  VTBL_ENTRY _ZTV7S7839C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7839C3[];
extern Class_Descriptor cd_S7839C5;
extern VTBL_ENTRY _ZTI7S7839C5[];
extern  VTBL_ENTRY _ZTV7S7839C5[];
extern Class_Descriptor cd_S7839C9;
extern VTBL_ENTRY _ZTI7S7839C9[];
extern  VTBL_ENTRY _ZTV7S7839C9[];
extern Class_Descriptor cd_S7839C8;
extern VTBL_ENTRY _ZTI7S7839C8[];
extern  VTBL_ENTRY _ZTV7S7839C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7839C8[];
extern Class_Descriptor cd_S7839C11;
extern VTBL_ENTRY _ZTI8S7839C11[];
extern  VTBL_ENTRY _ZTV8S7839C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7839C11[];
extern Class_Descriptor cd_S7839C2;
extern VTBL_ENTRY _ZTI7S7839C2[];
extern  VTBL_ENTRY _ZTV7S7839C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7839C2[];
static Base_Class bases_S7839C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7839C5,    ABISELECT(192,104), //bcp->offset
    59, //bcp->virtual_function_table_offset
    8, //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
    1, //immediately_derived
  0, 1},
  {&cd_S7839C4,    ABISELECT(136,68), //bcp->offset
    42, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7839C3,    ABISELECT(120,60), //bcp->offset
    21, //bcp->virtual_function_table_offset
    12, //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
    7, //immediately_derived
  0, 1},
  {&cd_S7839C5,    ABISELECT(224,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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7839C9,    ABISELECT(224,124), //bcp->offset
    95, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7839C8,    ABISELECT(208,112), //bcp->offset
    73, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7839C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    3, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S7839C2,    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 _ZTI7S7839C1[];
extern void _ZN8S7839C113v30Ev();
extern void _ZN8S7839C113v31Ev();
extern void _ZN8S7839C113v32Ev();
extern void _ZN8S7839C113v33Ev();
extern void _ZN8S7839C113v34Ev();
extern void _ZN7S7839C1D1Ev();
extern void _ZN7S7839C1D0Ev();
extern void _ZN7S7839C23v35Ev();
extern void _ZN7S7839C23v36Ev();
extern void _ZN7S7839C23v37Ev();
extern void _ZN7S7839C23v38Ev();
extern void _ZN7S7839C23v39Ev();
extern void _ZN7S7839C23v40Ev();
extern void _ZN7S7839C23v41Ev();
extern void ABISELECT(_ZTv0_n40_N7S7839C1D1Ev,_ZTv0_n20_N7S7839C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S7839C1D1Ev,_ZThn60_N7S7839C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7839C1D0Ev,_ZTv0_n20_N7S7839C1D0Ev)();
extern void ABISELECT(_ZThn120_N7S7839C1D0Ev,_ZThn60_N7S7839C1D0Ev)() __attribute__((weak));
extern void _ZN7S7839C33v14Ev();
extern void _ZN7S7839C33v15Ev();
extern void _ZN7S7839C33v16Ev();
extern void _ZN7S7839C33v17Ev();
extern void _ZN7S7839C33v18Ev();
extern void _ZN7S7839C33v19Ev();
extern void _ZN7S7839C33v20Ev();
extern void _ZN7S7839C42v7Ev();
extern void _ZN7S7839C42v8Ev();
extern void _ZN7S7839C42v9Ev();
extern void _ZN7S7839C43v10Ev();
extern void _ZN7S7839C43v11Ev();
extern void _ZN7S7839C43v12Ev();
extern void _ZN7S7839C43v13Ev();
extern void _ZN7S7839C52v1Ev();
extern void _ZN7S7839C52v2Ev();
extern void _ZN7S7839C52v3Ev();
extern void _ZN7S7839C52v4Ev();
extern void _ZN7S7839C52v5Ev();
extern void _ZN7S7839C52v6Ev();
extern void ABISELECT(_ZTv0_n32_N7S7839C1D1Ev,_ZTv0_n16_N7S7839C1D1Ev)();
extern void ABISELECT(_ZThn208_N7S7839C1D1Ev,_ZThn112_N7S7839C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7839C1D0Ev,_ZTv0_n16_N7S7839C1D0Ev)();
extern void ABISELECT(_ZThn208_N7S7839C1D0Ev,_ZThn112_N7S7839C1D0Ev)() __attribute__((weak));
extern void _ZN7S7839C83v22Ev();
extern void _ZN7S7839C83v23Ev();
extern void _ZN7S7839C83v24Ev();
extern void _ZN7S7839C83v25Ev();
extern void _ZN7S7839C83v26Ev();
extern void _ZN7S7839C83v27Ev();
extern void _ZN7S7839C83v28Ev();
extern void _ZN7S7839C83v29Ev();
extern void _ZN7S7839C52v1Ev();
extern void _ZN7S7839C52v2Ev();
extern void _ZN7S7839C52v3Ev();
extern void _ZN7S7839C52v4Ev();
extern void _ZN7S7839C52v5Ev();
extern void _ZN7S7839C52v6Ev();
extern void _ZN7S7839C93v21Ev();
static  VTBL_ENTRY vtc_S7839C1[] = {
  ABISELECT(192,104),
  ABISELECT(136,68),
  ABISELECT(120,60),
  ABISELECT(224,124),
  ABISELECT(208,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S7839C1[0]),
  (VTBL_ENTRY)&_ZN8S7839C113v30Ev,
  (VTBL_ENTRY)&_ZN8S7839C113v31Ev,
  (VTBL_ENTRY)&_ZN8S7839C113v32Ev,
  (VTBL_ENTRY)&_ZN8S7839C113v33Ev,
  (VTBL_ENTRY)&_ZN8S7839C113v34Ev,
  (VTBL_ENTRY)&_ZN7S7839C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7839C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7839C23v35Ev,
  (VTBL_ENTRY)&_ZN7S7839C23v36Ev,
  (VTBL_ENTRY)&_ZN7S7839C23v37Ev,
  (VTBL_ENTRY)&_ZN7S7839C23v38Ev,
  (VTBL_ENTRY)&_ZN7S7839C23v39Ev,
  (VTBL_ENTRY)&_ZN7S7839C23v40Ev,
  (VTBL_ENTRY)&_ZN7S7839C23v41Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-60),
  ABISELECT(72,44),
  ABISELECT(16,8),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7839C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7839C1D1Ev,_ZTv0_n20_N7S7839C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7839C1D0Ev,_ZTv0_n20_N7S7839C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7839C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,36),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI7S7839C1[0]),
  (VTBL_ENTRY)&_ZN7S7839C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7839C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7839C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v13Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI7S7839C1[0]),
  (VTBL_ENTRY)&_ZN7S7839C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v6Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-112),
  ABISELECT(16,12),
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI7S7839C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7839C1D1Ev,_ZTv0_n16_N7S7839C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7839C1D0Ev,_ZTv0_n16_N7S7839C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7839C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v26Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v27Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v29Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-124),
  (VTBL_ENTRY)&(_ZTI7S7839C1[0]),
  (VTBL_ENTRY)&_ZN7S7839C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7839C93v21Ev,
};
extern VTBL_ENTRY _ZTV7S7839C1[];
extern void _ZN8S7839C113v30Ev();
extern void _ZN8S7839C113v31Ev();
extern void _ZN8S7839C113v32Ev();
extern void _ZN8S7839C113v33Ev();
extern void _ZN8S7839C113v34Ev();
extern void _ZN7S7839C2D1Ev();
extern void _ZN7S7839C2D0Ev();
extern void _ZN7S7839C23v35Ev();
extern void _ZN7S7839C23v36Ev();
extern void _ZN7S7839C23v37Ev();
extern void _ZN7S7839C23v38Ev();
extern void _ZN7S7839C23v39Ev();
extern void _ZN7S7839C23v40Ev();
extern void _ZN7S7839C23v41Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C2__7S7839C1[] = {
  ABISELECT(192,104),
  ABISELECT(136,68),
  ABISELECT(120,60),
  ABISELECT(224,124),
  ABISELECT(208,112),
  0,
  (VTBL_ENTRY)&(_ZTI7S7839C2[0]),
  (VTBL_ENTRY)&_ZN8S7839C113v30Ev,
  (VTBL_ENTRY)&_ZN8S7839C113v31Ev,
  (VTBL_ENTRY)&_ZN8S7839C113v32Ev,
  (VTBL_ENTRY)&_ZN8S7839C113v33Ev,
  (VTBL_ENTRY)&_ZN8S7839C113v34Ev,
  (VTBL_ENTRY)&_ZN7S7839C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7839C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7839C23v35Ev,
  (VTBL_ENTRY)&_ZN7S7839C23v36Ev,
  (VTBL_ENTRY)&_ZN7S7839C23v37Ev,
  (VTBL_ENTRY)&_ZN7S7839C23v38Ev,
  (VTBL_ENTRY)&_ZN7S7839C23v39Ev,
  (VTBL_ENTRY)&_ZN7S7839C23v40Ev,
  (VTBL_ENTRY)&_ZN7S7839C23v41Ev,
};
extern void _ZN8S7839C113v30Ev();
extern void _ZN8S7839C113v31Ev();
extern void _ZN8S7839C113v32Ev();
extern void _ZN8S7839C113v33Ev();
extern void _ZN8S7839C113v34Ev();
extern void _ZN8S7839C11D1Ev();
extern void _ZN8S7839C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7839C117S7839C2__7S7839C1[] = {
  ABISELECT(224,124),
  ABISELECT(208,112),
  0,
  (VTBL_ENTRY)&(_ZTI8S7839C11[0]),
  (VTBL_ENTRY)&_ZN8S7839C113v30Ev,
  (VTBL_ENTRY)&_ZN8S7839C113v31Ev,
  (VTBL_ENTRY)&_ZN8S7839C113v32Ev,
  (VTBL_ENTRY)&_ZN8S7839C113v33Ev,
  (VTBL_ENTRY)&_ZN8S7839C113v34Ev,
  (VTBL_ENTRY)&_ZN8S7839C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7839C11D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N8S7839C11D1Ev,_ZTv0_n16_N8S7839C11D1Ev)();
extern void ABISELECT(_ZThn208_N8S7839C11D1Ev,_ZThn112_N8S7839C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7839C11D0Ev,_ZTv0_n16_N8S7839C11D0Ev)();
extern void ABISELECT(_ZThn208_N8S7839C11D0Ev,_ZThn112_N8S7839C11D0Ev)() __attribute__((weak));
extern void _ZN7S7839C83v22Ev();
extern void _ZN7S7839C83v23Ev();
extern void _ZN7S7839C83v24Ev();
extern void _ZN7S7839C83v25Ev();
extern void _ZN7S7839C83v26Ev();
extern void _ZN7S7839C83v27Ev();
extern void _ZN7S7839C83v28Ev();
extern void _ZN7S7839C83v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C8__8S7839C117S7839C2__7S7839C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-112),
  ABISELECT(16,12),
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI8S7839C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7839C11D1Ev,_ZTv0_n16_N8S7839C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7839C11D0Ev,_ZTv0_n16_N8S7839C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7839C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v26Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v27Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v29Ev,
};
extern void _ZN7S7839C52v1Ev();
extern void _ZN7S7839C52v2Ev();
extern void _ZN7S7839C52v3Ev();
extern void _ZN7S7839C52v4Ev();
extern void _ZN7S7839C52v5Ev();
extern void _ZN7S7839C52v6Ev();
extern void _ZN7S7839C93v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C9__8S7839C117S7839C2__7S7839C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-124),
  (VTBL_ENTRY)&(_ZTI8S7839C11[0]),
  (VTBL_ENTRY)&_ZN7S7839C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7839C93v21Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7839C2D1Ev,_ZTv0_n20_N7S7839C2D1Ev)();
extern void ABISELECT(_ZThn120_N7S7839C2D1Ev,_ZThn60_N7S7839C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7839C2D0Ev,_ZTv0_n20_N7S7839C2D0Ev)();
extern void ABISELECT(_ZThn120_N7S7839C2D0Ev,_ZThn60_N7S7839C2D0Ev)() __attribute__((weak));
extern void _ZN7S7839C33v14Ev();
extern void _ZN7S7839C33v15Ev();
extern void _ZN7S7839C33v16Ev();
extern void _ZN7S7839C33v17Ev();
extern void _ZN7S7839C33v18Ev();
extern void _ZN7S7839C33v19Ev();
extern void _ZN7S7839C33v20Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C3__7S7839C2__7S7839C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-120,-60),
  ABISELECT(72,44),
  ABISELECT(16,8),
  ABISELECT(-120,-60),
  (VTBL_ENTRY)&(_ZTI7S7839C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7839C2D1Ev,_ZTv0_n20_N7S7839C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7839C2D0Ev,_ZTv0_n20_N7S7839C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7839C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v20Ev,
};
extern void _ZN7S7839C42v7Ev();
extern void _ZN7S7839C42v8Ev();
extern void _ZN7S7839C42v9Ev();
extern void _ZN7S7839C43v10Ev();
extern void _ZN7S7839C43v11Ev();
extern void _ZN7S7839C43v12Ev();
extern void _ZN7S7839C43v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C4__7S7839C2__7S7839C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,36),
  ABISELECT(-136,-68),
  (VTBL_ENTRY)&(_ZTI7S7839C2[0]),
  (VTBL_ENTRY)&_ZN7S7839C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7839C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7839C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v13Ev,
};
extern void _ZN7S7839C52v1Ev();
extern void _ZN7S7839C52v2Ev();
extern void _ZN7S7839C52v3Ev();
extern void _ZN7S7839C52v4Ev();
extern void _ZN7S7839C52v5Ev();
extern void _ZN7S7839C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C5__7S7839C2__7S7839C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-192,-104),
  (VTBL_ENTRY)&(_ZTI7S7839C2[0]),
  (VTBL_ENTRY)&_ZN7S7839C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v6Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7839C2D1Ev,_ZTv0_n16_N7S7839C2D1Ev)();
extern void ABISELECT(_ZThn208_N7S7839C2D1Ev,_ZThn112_N7S7839C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7839C2D0Ev,_ZTv0_n16_N7S7839C2D0Ev)();
extern void ABISELECT(_ZThn208_N7S7839C2D0Ev,_ZThn112_N7S7839C2D0Ev)() __attribute__((weak));
extern void _ZN7S7839C83v22Ev();
extern void _ZN7S7839C83v23Ev();
extern void _ZN7S7839C83v24Ev();
extern void _ZN7S7839C83v25Ev();
extern void _ZN7S7839C83v26Ev();
extern void _ZN7S7839C83v27Ev();
extern void _ZN7S7839C83v28Ev();
extern void _ZN7S7839C83v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C8__7S7839C2__7S7839C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-208,-112),
  ABISELECT(16,12),
  ABISELECT(-208,-112),
  (VTBL_ENTRY)&(_ZTI7S7839C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7839C2D1Ev,_ZTv0_n16_N7S7839C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7839C2D0Ev,_ZTv0_n16_N7S7839C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7839C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v26Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v27Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v29Ev,
};
extern void _ZN7S7839C52v1Ev();
extern void _ZN7S7839C52v2Ev();
extern void _ZN7S7839C52v3Ev();
extern void _ZN7S7839C52v4Ev();
extern void _ZN7S7839C52v5Ev();
extern void _ZN7S7839C52v6Ev();
extern void _ZN7S7839C93v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C9__7S7839C2__7S7839C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-224,-124),
  (VTBL_ENTRY)&(_ZTI7S7839C2[0]),
  (VTBL_ENTRY)&_ZN7S7839C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7839C93v21Ev,
};
extern void _ZN7S7839C3D1Ev();
extern void _ZN7S7839C3D0Ev();
extern void _ZN7S7839C33v14Ev();
extern void _ZN7S7839C33v15Ev();
extern void _ZN7S7839C33v16Ev();
extern void _ZN7S7839C33v17Ev();
extern void _ZN7S7839C33v18Ev();
extern void _ZN7S7839C33v19Ev();
extern void _ZN7S7839C33v20Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C3__7S7839C1[] = {
  ABISELECT(72,44),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7839C3[0]),
  (VTBL_ENTRY)&_ZN7S7839C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7839C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v16Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v17Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v18Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v19Ev,
  (VTBL_ENTRY)&_ZN7S7839C33v20Ev,
};
extern void _ZN7S7839C42v7Ev();
extern void _ZN7S7839C42v8Ev();
extern void _ZN7S7839C42v9Ev();
extern void _ZN7S7839C43v10Ev();
extern void _ZN7S7839C43v11Ev();
extern void _ZN7S7839C43v12Ev();
extern void _ZN7S7839C43v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C4__7S7839C3__7S7839C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(56,36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7839C3[0]),
  (VTBL_ENTRY)&_ZN7S7839C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7839C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7839C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v13Ev,
};
extern void _ZN7S7839C52v1Ev();
extern void _ZN7S7839C52v2Ev();
extern void _ZN7S7839C52v3Ev();
extern void _ZN7S7839C52v4Ev();
extern void _ZN7S7839C52v5Ev();
extern void _ZN7S7839C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C5__7S7839C3__7S7839C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI7S7839C3[0]),
  (VTBL_ENTRY)&_ZN7S7839C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v6Ev,
};
extern void _ZN7S7839C42v7Ev();
extern void _ZN7S7839C42v8Ev();
extern void _ZN7S7839C42v9Ev();
extern void _ZN7S7839C43v10Ev();
extern void _ZN7S7839C43v11Ev();
extern void _ZN7S7839C43v12Ev();
extern void _ZN7S7839C43v13Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C4__7S7839C1[] = {
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7839C4[0]),
  (VTBL_ENTRY)&_ZN7S7839C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7839C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7839C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v10Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v11Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v12Ev,
  (VTBL_ENTRY)&_ZN7S7839C43v13Ev,
};
extern void _ZN7S7839C52v1Ev();
extern void _ZN7S7839C52v2Ev();
extern void _ZN7S7839C52v3Ev();
extern void _ZN7S7839C52v4Ev();
extern void _ZN7S7839C52v5Ev();
extern void _ZN7S7839C52v6Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C5__7S7839C4__7S7839C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI7S7839C4[0]),
  (VTBL_ENTRY)&_ZN7S7839C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v6Ev,
};
extern void _ZN7S7839C8D1Ev();
extern void _ZN7S7839C8D0Ev();
extern void _ZN7S7839C83v22Ev();
extern void _ZN7S7839C83v23Ev();
extern void _ZN7S7839C83v24Ev();
extern void _ZN7S7839C83v25Ev();
extern void _ZN7S7839C83v26Ev();
extern void _ZN7S7839C83v27Ev();
extern void _ZN7S7839C83v28Ev();
extern void _ZN7S7839C83v29Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C8__7S7839C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7839C8[0]),
  (VTBL_ENTRY)&_ZN7S7839C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7839C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v22Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v23Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v24Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v25Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v26Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v27Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v28Ev,
  (VTBL_ENTRY)&_ZN7S7839C83v29Ev,
};
extern void _ZN7S7839C52v1Ev();
extern void _ZN7S7839C52v2Ev();
extern void _ZN7S7839C52v3Ev();
extern void _ZN7S7839C52v4Ev();
extern void _ZN7S7839C52v5Ev();
extern void _ZN7S7839C52v6Ev();
extern void _ZN7S7839C93v21Ev();
static  VTBL_ENTRY _tg__ZTV7S7839C9__7S7839C8__7S7839C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7839C8[0]),
  (VTBL_ENTRY)&_ZN7S7839C52v1Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7839C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7839C93v21Ev,
};
static  VTT_ENTRY vtt_S7839C1[] = {
  {&(_ZTV7S7839C1[7]),  7,111},
  {&(_tg__ZTV7S7839C2__7S7839C1[7]),  7,21},
  {&(_tg__ZTV8S7839C117S7839C2__7S7839C1[4]),  4,11},
  {&(_tg__ZTV7S7839C8__8S7839C117S7839C2__7S7839C1[12]),  12,22},
  {&(_tg__ZTV7S7839C9__8S7839C117S7839C2__7S7839C1[9]),  9,16},
  {&(_tg__ZTV7S7839C3__7S7839C2__7S7839C1[12]),  12,21},
  {&(_tg__ZTV7S7839C4__7S7839C2__7S7839C1[10]),  10,17},
  {&(_tg__ZTV7S7839C5__7S7839C2__7S7839C1[8]),  8,14},
  {&(_tg__ZTV7S7839C8__7S7839C2__7S7839C1[12]),  12,22},
  {&(_tg__ZTV7S7839C9__7S7839C2__7S7839C1[9]),  9,16},
  {&(_ZTV7S7839C1[33]),  33,111},
  {&(_ZTV7S7839C1[52]),  52,111},
  {&(_ZTV7S7839C1[67]),  67,111},
  {&(_ZTV7S7839C1[85]),  85,111},
  {&(_ZTV7S7839C1[104]),  104,111},
  {&(_tg__ZTV7S7839C3__7S7839C1[4]),  4,13},
  {&(_tg__ZTV7S7839C4__7S7839C3__7S7839C1[10]),  10,17},
  {&(_tg__ZTV7S7839C5__7S7839C3__7S7839C1[8]),  8,14},
  {&(_tg__ZTV7S7839C4__7S7839C1[3]),  3,10},
  {&(_tg__ZTV7S7839C5__7S7839C4__7S7839C1[8]),  8,14},
  {&(_tg__ZTV7S7839C8__7S7839C1[3]),  3,13},
  {&(_tg__ZTV7S7839C9__7S7839C8__7S7839C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI7S7839C1[];
extern  VTBL_ENTRY _ZTV7S7839C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7839C1[];
static VTBL_ENTRY alt_thunk_names134[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7839C2D0Ev,_ZTv0_n16_N7S7839C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7839C2D0Ev,_ZThn112_N7S7839C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7839C2D1Ev,_ZTv0_n16_N7S7839C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7839C2D1Ev,_ZThn112_N7S7839C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7839C2D0Ev,_ZTv0_n20_N7S7839C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7839C2D0Ev,_ZThn60_N7S7839C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7839C2D1Ev,_ZTv0_n20_N7S7839C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7839C2D1Ev,_ZThn60_N7S7839C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7839C11D0Ev,_ZTv0_n16_N8S7839C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S7839C11D0Ev,_ZThn112_N8S7839C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7839C11D1Ev,_ZTv0_n16_N8S7839C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N8S7839C11D1Ev,_ZThn112_N8S7839C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7839C1D0Ev,_ZTv0_n16_N7S7839C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7839C1D0Ev,_ZThn112_N7S7839C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7839C1D1Ev,_ZTv0_n16_N7S7839C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn208_N7S7839C1D1Ev,_ZThn112_N7S7839C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7839C1D0Ev,_ZTv0_n20_N7S7839C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7839C1D0Ev,_ZThn60_N7S7839C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7839C1D1Ev,_ZTv0_n20_N7S7839C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7839C1D1Ev,_ZThn60_N7S7839C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7839C1 = {  "S7839C1", // class name
  bases_S7839C1, 8,
  &(vtc_S7839C1[0]), // expected_vtbl_contents
  &(vtt_S7839C1[0]), // expected_vtt_contents
  ABISELECT(240,132), // object size
  NSPAIRA(_ZTI7S7839C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7839C1),111, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7839C1),22, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names134,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2784C5  {
  short s2784c5f0[6];
  __tsi64 s2784c5f1[8];
  int s2784c5f2;
  virtual  ~S2784C5(); // _ZN7S2784C5D1Ev
  virtual void  v1(); // _ZN7S2784C52v1Ev
  S2784C5(); // tgen
};
//SIG(-1 S2784C5) C1{ vd v1 Fs[6] FL[8] Fi}


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

static void Test_S2784C5()
{
  extern Class_Descriptor cd_S2784C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,22)];
    init_test(&cd_S2784C5, buf);
    S2784C5 *dp, &lv = *(dp=new (buf) S2784C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,84), "sizeof(S2784C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2784C5)");
    check_field_offset(lv, s2784c5f0, ABISELECT(8,4), "S2784C5.s2784c5f0");
    check_field_offset(lv, s2784c5f1, ABISELECT(24,16), "S2784C5.s2784c5f1");
    check_field_offset(lv, s2784c5f2, ABISELECT(88,80), "S2784C5.s2784c5f2");
    test_class_info(&lv, &cd_S2784C5);
    dp->~S2784C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2784C5(Test_S2784C5, "S2784C5", ABISELECT(96,84));

#else // __cplusplus

extern void _ZN7S2784C5C1Ev();
extern void _ZN7S2784C5D1Ev();
Name_Map name_map_S2784C5[] = {
  NSPAIR(_ZN7S2784C5C1Ev),
  NSPAIR(_ZN7S2784C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S2784C5[];
extern void _ZN7S2784C5D1Ev();
extern void _ZN7S2784C5D0Ev();
extern void _ZN7S2784C52v1Ev();
static  VTBL_ENTRY vtc_S2784C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2784C5[0]),
  (VTBL_ENTRY)&_ZN7S2784C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2784C5D0Ev,
  (VTBL_ENTRY)&_ZN7S2784C52v1Ev,
};
extern VTBL_ENTRY _ZTI7S2784C5[];
extern  VTBL_ENTRY _ZTV7S2784C5[];
Class_Descriptor cd_S2784C5 = {  "S2784C5", // class name
  0,0,//no base classes
  &(vtc_S2784C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,84), // object size
  NSPAIRA(_ZTI7S2784C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S2784C5),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  S2784C6  : virtual S2784C5 {
  __tsi64 s2784c6f0;
  void *s2784c6f1;
  __tsi64 s2784c6f2:54;
  ~S2784C6(); // tgen
  S2784C6(); // tgen
};
//SIG(-1 S2784C6) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} FL Fp FL:54}


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

static void Test_S2784C6()
{
  extern Class_Descriptor cd_S2784C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,28)];
    init_test(&cd_S2784C6, buf);
    S2784C6 *dp, &lv = *(dp=new (buf) S2784C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,108), "sizeof(S2784C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2784C6)");
    check_base_class_offset(lv, (S2784C5*), ABISELECT(32,24), "S2784C6");
    check_field_offset(lv, s2784c6f0, ABISELECT(8,4), "S2784C6.s2784c6f0");
    check_field_offset(lv, s2784c6f1, ABISELECT(16,12), "S2784C6.s2784c6f1");
    set_bf_and_test(lv, s2784c6f2, ABISELECT(24,16), 0, 54, 1, "S2784C6");
    set_bf_and_test(lv, s2784c6f2, ABISELECT(24,16), 0, 54, hide_sll(1LL<<53), "S2784C6");
    test_class_info(&lv, &cd_S2784C6);
    dp->~S2784C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2784C6(Test_S2784C6, "S2784C6", ABISELECT(128,108));

#else // __cplusplus

extern void _ZN7S2784C6C1Ev();
extern void _ZN7S2784C6D1Ev();
Name_Map name_map_S2784C6[] = {
  NSPAIR(_ZN7S2784C6C1Ev),
  NSPAIR(_ZN7S2784C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2784C5;
extern VTBL_ENTRY _ZTI7S2784C5[];
extern  VTBL_ENTRY _ZTV7S2784C5[];
static Base_Class bases_S2784C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2784C5,    ABISELECT(32,24), //bcp->offset
    5, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S2784C6[];
extern void _ZN7S2784C6D1Ev();
extern void _ZN7S2784C6D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S2784C6D1Ev,_ZTv0_n12_N7S2784C6D1Ev)();
extern void ABISELECT(_ZThn32_N7S2784C6D1Ev,_ZThn24_N7S2784C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2784C6D0Ev,_ZTv0_n12_N7S2784C6D0Ev)();
extern void ABISELECT(_ZThn32_N7S2784C6D0Ev,_ZThn24_N7S2784C6D0Ev)() __attribute__((weak));
extern void _ZN7S2784C52v1Ev();
static  VTBL_ENTRY vtc_S2784C6[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S2784C6[0]),
  (VTBL_ENTRY)&_ZN7S2784C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2784C6D0Ev,
  0,
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S2784C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C6D1Ev,_ZTv0_n12_N7S2784C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C6D0Ev,_ZTv0_n12_N7S2784C6D0Ev),
  (VTBL_ENTRY)&_ZN7S2784C52v1Ev,
};
extern VTBL_ENTRY _ZTV7S2784C6[];
static  VTT_ENTRY vtt_S2784C6[] = {
  {&(_ZTV7S2784C6[3]),  3,12},
  {&(_ZTV7S2784C6[9]),  9,12},
};
extern VTBL_ENTRY _ZTI7S2784C6[];
extern  VTBL_ENTRY _ZTV7S2784C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2784C6[];
static VTBL_ENTRY alt_thunk_names135[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C6D0Ev,_ZTv0_n12_N7S2784C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S2784C6D0Ev,_ZThn24_N7S2784C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C6D1Ev,_ZTv0_n12_N7S2784C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S2784C6D1Ev,_ZThn24_N7S2784C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2784C6 = {  "S2784C6", // class name
  bases_S2784C6, 1,
  &(vtc_S2784C6[0]), // expected_vtbl_contents
  &(vtt_S2784C6[0]), // expected_vtt_contents
  ABISELECT(128,108), // object size
  NSPAIRA(_ZTI7S2784C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S2784C6),12, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2784C6),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names135,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2784C4  : virtual S2784C5 , S2784C6 {
  char  :0;
  void *s2784c4f1[8];
  char s2784c4f2;
  virtual void  v2(); // _ZN7S2784C42v2Ev
  virtual void  v3(); // _ZN7S2784C42v3Ev
  ~S2784C4(); // tgen
  S2784C4(); // tgen
};
//SIG(-1 S2784C4) C1{ VBC2{ vd v3 Fs[6] FL[8] Fi} BC3{ VBC2 FL Fp FL:54} v1 v2 Fc:0 Fp[8] Fc}


void  S2784C4 ::v2(){vfunc_called(this, "_ZN7S2784C42v2Ev");}
void  S2784C4 ::v3(){vfunc_called(this, "_ZN7S2784C42v3Ev");}
S2784C4 ::~S2784C4(){ note_dtor("S2784C4", this);} // tgen
S2784C4 ::S2784C4(){ note_ctor("S2784C4", this);} // tgen

static void Test_S2784C4()
{
  extern Class_Descriptor cd_S2784C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,37)];
    init_test(&cd_S2784C4, buf);
    S2784C4 *dp, &lv = *(dp=new (buf) S2784C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,144), "sizeof(S2784C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2784C4)");
    check_base_class_offset(lv, (S2784C5*), ABISELECT(104,60), "S2784C4");
    check_base_class_offset(lv, (S2784C5*)(S2784C6*), ABISELECT(104,60), "S2784C4");
    check_base_class_offset(lv, (S2784C6*), 0, "S2784C4");
    check_field_offset(lv, s2784c4f1, ABISELECT(32,24), "S2784C4.s2784c4f1");
    check_field_offset(lv, s2784c4f2, ABISELECT(96,56), "S2784C4.s2784c4f2");
    test_class_info(&lv, &cd_S2784C4);
    dp->~S2784C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2784C4(Test_S2784C4, "S2784C4", ABISELECT(200,144));

#else // __cplusplus

extern void _ZN7S2784C4C1Ev();
extern void _ZN7S2784C4D1Ev();
Name_Map name_map_S2784C4[] = {
  NSPAIR(_ZN7S2784C4C1Ev),
  NSPAIR(_ZN7S2784C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2784C5;
extern VTBL_ENTRY _ZTI7S2784C5[];
extern  VTBL_ENTRY _ZTV7S2784C5[];
extern Class_Descriptor cd_S2784C6;
extern VTBL_ENTRY _ZTI7S2784C6[];
extern  VTBL_ENTRY _ZTV7S2784C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2784C6[];
static Base_Class bases_S2784C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2784C5,    ABISELECT(104,60), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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_S2784C6,    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 _ZTI7S2784C4[];
extern void _ZN7S2784C4D1Ev();
extern void _ZN7S2784C4D0Ev();
extern void _ZN7S2784C42v2Ev();
extern void _ZN7S2784C42v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S2784C4D1Ev,_ZTv0_n12_N7S2784C4D1Ev)();
extern void ABISELECT(_ZThn104_N7S2784C4D1Ev,_ZThn60_N7S2784C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2784C4D0Ev,_ZTv0_n12_N7S2784C4D0Ev)();
extern void ABISELECT(_ZThn104_N7S2784C4D0Ev,_ZThn60_N7S2784C4D0Ev)() __attribute__((weak));
extern void _ZN7S2784C52v1Ev();
static  VTBL_ENTRY vtc_S2784C4[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S2784C4[0]),
  (VTBL_ENTRY)&_ZN7S2784C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2784C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2784C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2784C42v3Ev,
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S2784C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C4D1Ev,_ZTv0_n12_N7S2784C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C4D0Ev,_ZTv0_n12_N7S2784C4D0Ev),
  (VTBL_ENTRY)&_ZN7S2784C52v1Ev,
};
extern VTBL_ENTRY _ZTV7S2784C4[];
extern void _ZN7S2784C6D1Ev();
extern void _ZN7S2784C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2784C6__7S2784C4[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S2784C6[0]),
  (VTBL_ENTRY)&_ZN7S2784C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2784C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S2784C6D1Ev,_ZTv0_n12_N7S2784C6D1Ev)();
extern void ABISELECT(_ZThn104_N7S2784C6D1Ev,_ZThn60_N7S2784C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2784C6D0Ev,_ZTv0_n12_N7S2784C6D0Ev)();
extern void ABISELECT(_ZThn104_N7S2784C6D0Ev,_ZThn60_N7S2784C6D0Ev)() __attribute__((weak));
extern void _ZN7S2784C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2784C5__7S2784C6__7S2784C4[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S2784C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C6D1Ev,_ZTv0_n12_N7S2784C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C6D0Ev,_ZTv0_n12_N7S2784C6D0Ev),
  (VTBL_ENTRY)&_ZN7S2784C52v1Ev,
};
static  VTT_ENTRY vtt_S2784C4[] = {
  {&(_ZTV7S2784C4[3]),  3,14},
  {&(_tg__ZTV7S2784C6__7S2784C4[3]),  3,5},
  {&(_tg__ZTV7S2784C5__7S2784C6__7S2784C4[4]),  4,7},
  {&(_ZTV7S2784C4[11]),  11,14},
};
extern VTBL_ENTRY _ZTI7S2784C4[];
extern  VTBL_ENTRY _ZTV7S2784C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2784C4[];
static VTBL_ENTRY alt_thunk_names136[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C6D0Ev,_ZTv0_n12_N7S2784C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S2784C6D0Ev,_ZThn60_N7S2784C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C6D1Ev,_ZTv0_n12_N7S2784C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S2784C6D1Ev,_ZThn60_N7S2784C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C4D0Ev,_ZTv0_n12_N7S2784C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S2784C4D0Ev,_ZThn60_N7S2784C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C4D1Ev,_ZTv0_n12_N7S2784C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S2784C4D1Ev,_ZThn60_N7S2784C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2784C4 = {  "S2784C4", // class name
  bases_S2784C4, 2,
  &(vtc_S2784C4[0]), // expected_vtbl_contents
  &(vtt_S2784C4[0]), // expected_vtt_contents
  ABISELECT(200,144), // object size
  NSPAIRA(_ZTI7S2784C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2784C4),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2784C4),4, //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  S2784C2  : S3052C10 , virtual S2784C4 {
  void *s2784c2f0;
  char s2784c2f1[4];
  int s2784c2f2:11;
  void *s2784c2f3[2];
  int s2784c2f4[6];
  ::S21123C11 s2784c2f5[6];
  ~S2784C2(); // tgen
  S2784C2(); // tgen
};
//SIG(-1 S2784C2) C1{ BC2{ m Fp Fi FL Fp Fi} VBC3{ VBC4{ vd v1 Fs[6] FL[8] Fi} BC5{ VBC4 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp Fc[4] Fi:11 Fp[2] Fi[6] FC6{ VBC7{ vd v4 Fs[6] FL[8] Fi} BC8{ VBC7 BC9{ VBC7 FL Fp FL:54} v5 v6 Fc:0 Fp[8] Fc} BC10{ VBC7 BC8 Fp[3] Fc:8 Fi[2] Fc FC7 Fp[3] FL[5] Fi} BC11{ vd m FC12{ VBC13{ vd v9 Fs[6] FL[8] Fi} BC14{ VBC13 FL Fp FL:54} v7 v8 Fc:0 Fp[8] Fc}} VBC9 Fp Fl FC10 FC11 FC9 Fi[2] FU15{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]}


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

static void Test_S2784C2()
{
  extern Class_Descriptor cd_S2784C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(645,1909)];
    init_test(&cd_S2784C2, buf);
    S2784C2 *dp, &lv = *(dp=new (buf) S2784C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(10304,7632), "sizeof(S2784C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2784C2)");
    check_base_class_offset(lv, (S3052C10*), ABISELECT(8,4), "S2784C2");
    check_base_class_offset(lv, (S2784C5*)(S2784C4*), ABISELECT(10200,7548), "S2784C2");
    check_base_class_offset(lv, (S2784C5*)(S2784C6*)(S2784C4*), ABISELECT(10200,7548), "S2784C2");
    check_base_class_offset(lv, (S2784C6*)(S2784C4*), ABISELECT(10096,7488), "S2784C2");
    check_base_class_offset(lv, (S2784C4*), ABISELECT(10096,7488), "S2784C2");
    check_field_offset(lv, s2784c2f0, ABISELECT(48,28), "S2784C2.s2784c2f0");
    check_field_offset(lv, s2784c2f1, ABISELECT(56,32), "S2784C2.s2784c2f1");
    set_bf_and_test(lv, s2784c2f2, ABISELECT(60,36), 0, 11, 1, "S2784C2");
    set_bf_and_test(lv, s2784c2f2, ABISELECT(60,36), 0, 11, hide_sll(1LL<<10), "S2784C2");
    check_field_offset(lv, s2784c2f3, ABISELECT(64,40), "S2784C2.s2784c2f3");
    check_field_offset(lv, s2784c2f4, ABISELECT(80,48), "S2784C2.s2784c2f4");
    check_field_offset(lv, s2784c2f5, ABISELECT(112,72), "S2784C2.s2784c2f5");
    test_class_info(&lv, &cd_S2784C2);
    dp->~S2784C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2784C2(Test_S2784C2, "S2784C2", ABISELECT(10304,7632));

#else // __cplusplus

extern void _ZN7S2784C2C1Ev();
extern void _ZN7S2784C2D1Ev();
Name_Map name_map_S2784C2[] = {
  NSPAIR(_ZN7S2784C2C1Ev),
  NSPAIR(_ZN7S2784C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S2784C5;
extern VTBL_ENTRY _ZTI7S2784C5[];
extern  VTBL_ENTRY _ZTV7S2784C5[];
extern Class_Descriptor cd_S2784C6;
extern VTBL_ENTRY _ZTI7S2784C6[];
extern  VTBL_ENTRY _ZTV7S2784C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2784C6[];
extern Class_Descriptor cd_S2784C4;
extern VTBL_ENTRY _ZTI7S2784C4[];
extern  VTBL_ENTRY _ZTV7S2784C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2784C4[];
static Base_Class bases_S2784C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C10,    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_S2784C5,    ABISELECT(10200,7548), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //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_S2784C6,    ABISELECT(10096,7488), //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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S2784C4,    ABISELECT(10096,7488), //bcp->offset
    6, //bcp->virtual_function_table_offset
    6, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S2784C2[];
extern void _ZN7S2784C2D1Ev();
extern void _ZN7S2784C2D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S2784C2D1Ev,_ZTv0_n16_N7S2784C2D1Ev)();
extern void ABISELECT(_ZThn10096_N7S2784C2D1Ev,_ZThn7488_N7S2784C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S2784C2D0Ev,_ZTv0_n16_N7S2784C2D0Ev)();
extern void ABISELECT(_ZThn10096_N7S2784C2D0Ev,_ZThn7488_N7S2784C2D0Ev)() __attribute__((weak));
extern void _ZN7S2784C42v2Ev();
extern void _ZN7S2784C42v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S2784C2D1Ev,_ZTv0_n12_N7S2784C2D1Ev)();
extern void ABISELECT(_ZThn10200_N7S2784C2D1Ev,_ZThn7548_N7S2784C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2784C2D0Ev,_ZTv0_n12_N7S2784C2D0Ev)();
extern void ABISELECT(_ZThn10200_N7S2784C2D0Ev,_ZThn7548_N7S2784C2D0Ev)() __attribute__((weak));
extern void _ZN7S2784C52v1Ev();
static  VTBL_ENTRY vtc_S2784C2[] = {
  ABISELECT(10200,7548),
  ABISELECT(10096,7488),
  0,
  (VTBL_ENTRY)&(_ZTI7S2784C2[0]),
  (VTBL_ENTRY)&_ZN7S2784C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2784C2D0Ev,
  0,
  0,
  ABISELECT(-10096,-7488),
  ABISELECT(104,60),
  ABISELECT(-10096,-7488),
  (VTBL_ENTRY)&(_ZTI7S2784C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2784C2D1Ev,_ZTv0_n16_N7S2784C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2784C2D0Ev,_ZTv0_n16_N7S2784C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2784C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2784C42v3Ev,
  0,
  ABISELECT(-10200,-7548),
  ABISELECT(-10200,-7548),
  (VTBL_ENTRY)&(_ZTI7S2784C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C2D1Ev,_ZTv0_n12_N7S2784C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C2D0Ev,_ZTv0_n12_N7S2784C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2784C52v1Ev,
};
extern VTBL_ENTRY _ZTV7S2784C2[];
extern void _ZN7S2784C4D1Ev();
extern void _ZN7S2784C4D0Ev();
extern void _ZN7S2784C42v2Ev();
extern void _ZN7S2784C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2784C4__7S2784C2[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S2784C4[0]),
  (VTBL_ENTRY)&_ZN7S2784C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2784C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2784C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2784C42v3Ev,
};
extern void _ZN7S2784C6D1Ev();
extern void _ZN7S2784C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2784C67S2784C4__7S2784C2[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S2784C6[0]),
  (VTBL_ENTRY)&_ZN7S2784C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2784C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S2784C6D1Ev,_ZTv0_n12_N7S2784C6D1Ev)();
extern void ABISELECT(_ZThn104_N7S2784C6D1Ev,_ZThn60_N7S2784C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2784C6D0Ev,_ZTv0_n12_N7S2784C6D0Ev)();
extern void ABISELECT(_ZThn104_N7S2784C6D0Ev,_ZThn60_N7S2784C6D0Ev)() __attribute__((weak));
extern void _ZN7S2784C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2784C5__7S2784C67S2784C4__7S2784C2[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S2784C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C6D1Ev,_ZTv0_n12_N7S2784C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C6D0Ev,_ZTv0_n12_N7S2784C6D0Ev),
  (VTBL_ENTRY)&_ZN7S2784C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S2784C4D1Ev,_ZTv0_n12_N7S2784C4D1Ev)();
extern void ABISELECT(_ZThn104_N7S2784C4D1Ev,_ZThn60_N7S2784C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2784C4D0Ev,_ZTv0_n12_N7S2784C4D0Ev)();
extern void ABISELECT(_ZThn104_N7S2784C4D0Ev,_ZThn60_N7S2784C4D0Ev)() __attribute__((weak));
extern void _ZN7S2784C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2784C5__7S2784C4__7S2784C2[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S2784C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C4D1Ev,_ZTv0_n12_N7S2784C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C4D0Ev,_ZTv0_n12_N7S2784C4D0Ev),
  (VTBL_ENTRY)&_ZN7S2784C52v1Ev,
};
static  VTT_ENTRY vtt_S2784C2[] = {
  {&(_ZTV7S2784C2[4]),  4,23},
  {&(_ZTV7S2784C2[12]),  12,23},
  {&(_ZTV7S2784C2[20]),  20,23},
  {&(_tg__ZTV7S2784C4__7S2784C2[3]),  3,7},
  {&(_tg__ZTV7S2784C67S2784C4__7S2784C2[3]),  3,5},
  {&(_tg__ZTV7S2784C5__7S2784C67S2784C4__7S2784C2[4]),  4,7},
  {&(_tg__ZTV7S2784C5__7S2784C4__7S2784C2[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S2784C2[];
extern  VTBL_ENTRY _ZTV7S2784C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2784C2[];
static VTBL_ENTRY alt_thunk_names137[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C4D0Ev,_ZTv0_n12_N7S2784C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S2784C4D0Ev,_ZThn60_N7S2784C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C4D1Ev,_ZTv0_n12_N7S2784C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S2784C4D1Ev,_ZThn60_N7S2784C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C6D0Ev,_ZTv0_n12_N7S2784C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S2784C6D0Ev,_ZThn60_N7S2784C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C6D1Ev,_ZTv0_n12_N7S2784C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S2784C6D1Ev,_ZThn60_N7S2784C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C2D0Ev,_ZTv0_n12_N7S2784C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10200_N7S2784C2D0Ev,_ZThn7548_N7S2784C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C2D1Ev,_ZTv0_n12_N7S2784C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10200_N7S2784C2D1Ev,_ZThn7548_N7S2784C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S2784C2D0Ev,_ZTv0_n16_N7S2784C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10096_N7S2784C2D0Ev,_ZThn7488_N7S2784C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S2784C2D1Ev,_ZTv0_n16_N7S2784C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10096_N7S2784C2D1Ev,_ZThn7488_N7S2784C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2784C2 = {  "S2784C2", // class name
  bases_S2784C2, 4,
  &(vtc_S2784C2[0]), // expected_vtbl_contents
  &(vtt_S2784C2[0]), // expected_vtt_contents
  ABISELECT(10304,7632), // object size
  NSPAIRA(_ZTI7S2784C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2784C2),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2784C2),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names137,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2784C8  : virtual S2784C5 , S2784C4 {
  void *s2784c8f0[3];
  char s2784c8f1:8;
  int s2784c8f2[2];
  char s2784c8f3;
  ::S2784C5 s2784c8f4;
  void *s2784c8f5[3];
  __tsi64 s2784c8f6[5];
  int s2784c8f7;
  ~S2784C8(); // tgen
  S2784C8(); // tgen
};
//SIG(-1 S2784C8) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} BC3{ VBC2 BC4{ VBC2 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC2 Fp[3] FL[5] Fi}


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

static void Test_S2784C8()
{
  extern Class_Descriptor cd_S2784C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(52,79)];
    init_test(&cd_S2784C8, buf);
    S2784C8 *dp, &lv = *(dp=new (buf) S2784C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(408,312), "sizeof(S2784C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2784C8)");
    check_base_class_offset(lv, (S2784C5*), ABISELECT(312,228), "S2784C8");
    check_base_class_offset(lv, (S2784C5*)(S2784C4*), ABISELECT(312,228), "S2784C8");
    check_base_class_offset(lv, (S2784C5*)(S2784C6*)(S2784C4*), ABISELECT(312,228), "S2784C8");
    check_base_class_offset(lv, (S2784C6*)(S2784C4*), 0, "S2784C8");
    check_base_class_offset(lv, (S2784C4*), 0, "S2784C8");
    check_field_offset(lv, s2784c8f0, ABISELECT(104,60), "S2784C8.s2784c8f0");
    set_bf_and_test(lv, s2784c8f1, ABISELECT(128,72), 0, 8, 1, "S2784C8");
    set_bf_and_test(lv, s2784c8f1, ABISELECT(128,72), 0, 8, hide_sll(1LL<<7), "S2784C8");
    check_field_offset(lv, s2784c8f2, ABISELECT(132,76), "S2784C8.s2784c8f2");
    check_field_offset(lv, s2784c8f3, ABISELECT(140,84), "S2784C8.s2784c8f3");
    check_field_offset(lv, s2784c8f4, ABISELECT(144,88), "S2784C8.s2784c8f4");
    check_field_offset(lv, s2784c8f5, ABISELECT(240,172), "S2784C8.s2784c8f5");
    check_field_offset(lv, s2784c8f6, ABISELECT(264,184), "S2784C8.s2784c8f6");
    check_field_offset(lv, s2784c8f7, ABISELECT(304,224), "S2784C8.s2784c8f7");
    test_class_info(&lv, &cd_S2784C8);
    dp->~S2784C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2784C8(Test_S2784C8, "S2784C8", ABISELECT(408,312));

#else // __cplusplus

extern void _ZN7S2784C8C1Ev();
extern void _ZN7S2784C8D1Ev();
Name_Map name_map_S2784C8[] = {
  NSPAIR(_ZN7S2784C8C1Ev),
  NSPAIR(_ZN7S2784C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2784C5;
extern VTBL_ENTRY _ZTI7S2784C5[];
extern  VTBL_ENTRY _ZTV7S2784C5[];
extern Class_Descriptor cd_S2784C6;
extern VTBL_ENTRY _ZTI7S2784C6[];
extern  VTBL_ENTRY _ZTV7S2784C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2784C6[];
extern Class_Descriptor cd_S2784C4;
extern VTBL_ENTRY _ZTI7S2784C4[];
extern  VTBL_ENTRY _ZTV7S2784C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2784C4[];
static Base_Class bases_S2784C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2784C5,    ABISELECT(312,228), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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
  1, 1},
  {&cd_S2784C6,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S2784C4,    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 _ZTI7S2784C8[];
extern void _ZN7S2784C8D1Ev();
extern void _ZN7S2784C8D0Ev();
extern void _ZN7S2784C42v2Ev();
extern void _ZN7S2784C42v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S2784C8D1Ev,_ZTv0_n12_N7S2784C8D1Ev)();
extern void ABISELECT(_ZThn312_N7S2784C8D1Ev,_ZThn228_N7S2784C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2784C8D0Ev,_ZTv0_n12_N7S2784C8D0Ev)();
extern void ABISELECT(_ZThn312_N7S2784C8D0Ev,_ZThn228_N7S2784C8D0Ev)() __attribute__((weak));
extern void _ZN7S2784C52v1Ev();
static  VTBL_ENTRY vtc_S2784C8[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI7S2784C8[0]),
  (VTBL_ENTRY)&_ZN7S2784C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2784C8D0Ev,
  (VTBL_ENTRY)&_ZN7S2784C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2784C42v3Ev,
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI7S2784C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C8D1Ev,_ZTv0_n12_N7S2784C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C8D0Ev,_ZTv0_n12_N7S2784C8D0Ev),
  (VTBL_ENTRY)&_ZN7S2784C52v1Ev,
};
extern VTBL_ENTRY _ZTV7S2784C8[];
extern void _ZN7S2784C4D1Ev();
extern void _ZN7S2784C4D0Ev();
extern void _ZN7S2784C42v2Ev();
extern void _ZN7S2784C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2784C4__7S2784C8[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI7S2784C4[0]),
  (VTBL_ENTRY)&_ZN7S2784C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2784C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2784C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2784C42v3Ev,
};
extern void _ZN7S2784C6D1Ev();
extern void _ZN7S2784C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2784C67S2784C4__7S2784C8[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI7S2784C6[0]),
  (VTBL_ENTRY)&_ZN7S2784C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2784C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S2784C6D1Ev,_ZTv0_n12_N7S2784C6D1Ev)();
extern void ABISELECT(_ZThn312_N7S2784C6D1Ev,_ZThn228_N7S2784C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2784C6D0Ev,_ZTv0_n12_N7S2784C6D0Ev)();
extern void ABISELECT(_ZThn312_N7S2784C6D0Ev,_ZThn228_N7S2784C6D0Ev)() __attribute__((weak));
extern void _ZN7S2784C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2784C5__7S2784C67S2784C4__7S2784C8[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI7S2784C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C6D1Ev,_ZTv0_n12_N7S2784C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C6D0Ev,_ZTv0_n12_N7S2784C6D0Ev),
  (VTBL_ENTRY)&_ZN7S2784C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S2784C4D1Ev,_ZTv0_n12_N7S2784C4D1Ev)();
extern void ABISELECT(_ZThn312_N7S2784C4D1Ev,_ZThn228_N7S2784C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2784C4D0Ev,_ZTv0_n12_N7S2784C4D0Ev)();
extern void ABISELECT(_ZThn312_N7S2784C4D0Ev,_ZThn228_N7S2784C4D0Ev)() __attribute__((weak));
extern void _ZN7S2784C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2784C5__7S2784C4__7S2784C8[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI7S2784C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C4D1Ev,_ZTv0_n12_N7S2784C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C4D0Ev,_ZTv0_n12_N7S2784C4D0Ev),
  (VTBL_ENTRY)&_ZN7S2784C52v1Ev,
};
static  VTT_ENTRY vtt_S2784C8[] = {
  {&(_ZTV7S2784C8[3]),  3,14},
  {&(_tg__ZTV7S2784C4__7S2784C8[3]),  3,7},
  {&(_tg__ZTV7S2784C67S2784C4__7S2784C8[3]),  3,5},
  {&(_tg__ZTV7S2784C5__7S2784C67S2784C4__7S2784C8[4]),  4,7},
  {&(_tg__ZTV7S2784C5__7S2784C4__7S2784C8[4]),  4,7},
  {&(_ZTV7S2784C8[11]),  11,14},
};
extern VTBL_ENTRY _ZTI7S2784C8[];
extern  VTBL_ENTRY _ZTV7S2784C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2784C8[];
static VTBL_ENTRY alt_thunk_names138[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C4D0Ev,_ZTv0_n12_N7S2784C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S2784C4D0Ev,_ZThn228_N7S2784C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C4D1Ev,_ZTv0_n12_N7S2784C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S2784C4D1Ev,_ZThn228_N7S2784C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C6D0Ev,_ZTv0_n12_N7S2784C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S2784C6D0Ev,_ZThn228_N7S2784C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C6D1Ev,_ZTv0_n12_N7S2784C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S2784C6D1Ev,_ZThn228_N7S2784C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C8D0Ev,_ZTv0_n12_N7S2784C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S2784C8D0Ev,_ZThn228_N7S2784C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C8D1Ev,_ZTv0_n12_N7S2784C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S2784C8D1Ev,_ZThn228_N7S2784C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2784C8 = {  "S2784C8", // class name
  bases_S2784C8, 3,
  &(vtc_S2784C8[0]), // expected_vtbl_contents
  &(vtt_S2784C8[0]), // expected_vtt_contents
  ABISELECT(408,312), // object size
  NSPAIRA(_ZTI7S2784C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2784C8),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2784C8),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names138,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2784C1  : S2784C2 {
  int s2784c1f0;
  char s2784c1f1;
  int s2784c1f2;
  int s2784c1f3;
  int s2784c1f4;
  ::S2784C8 s2784c1f5;
  int s2784c1f6[7];
  __tsi64 s2784c1f7;
  virtual  ~S2784C1(); // _ZN7S2784C1D2Ev
  S2784C1(); // tgen
};
//SIG(1 S2784C1) C1{ BC2{ BC3{ m Fp Fi FL Fp Fi} VBC4{ VBC5{ vd v1 Fs[6] FL[8] Fi} BC6{ VBC5 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp Fc[4] Fi:11 Fp[2] Fi[6] FC7{ VBC8{ vd v4 Fs[6] FL[8] Fi} BC9{ VBC8 BC10{ VBC8 FL Fp FL:54} v5 v6 Fc:0 Fp[8] Fc} BC11{ VBC8 BC9 Fp[3] Fc:8 Fi[2] Fc FC8 Fp[3] FL[5] Fi} BC12{ vd m FC13{ VBC14{ vd v9 Fs[6] FL[8] Fi} BC15{ VBC14 FL Fp FL:54} v7 v8 Fc:0 Fp[8] Fc}} VBC10 Fp Fl FC11 FC12 FC10 Fi[2] FU16{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs}[9]}[6]} vd Fi Fc Fi Fi Fi FC17{ VBC5 BC4 Fp[3] Fc:8 Fi[2] Fc FC5 Fp[3] FL[5] Fi} Fi[7] FL}


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

static void Test_S2784C1()
{
  extern Class_Descriptor cd_S2784C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(674,2001)];
    init_test(&cd_S2784C1, buf);
    S2784C1 *dp, &lv = *(dp=new (buf) S2784C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(10768,8000), "sizeof(S2784C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2784C1)");
    check_base_class_offset(lv, (S3052C10*)(S2784C2*), ABISELECT(8,4), "S2784C1");
    check_base_class_offset(lv, (S2784C5*)(S2784C4*), ABISELECT(10672,7916), "S2784C1");
    check_base_class_offset(lv, (S2784C5*)(S2784C6*)(S2784C4*), ABISELECT(10672,7916), "S2784C1");
    check_base_class_offset(lv, (S2784C6*)(S2784C4*), ABISELECT(10568,7856), "S2784C1");
    check_base_class_offset(lv, (S2784C4*)(S2784C2*), ABISELECT(10568,7856), "S2784C1");
    check_base_class_offset(lv, (S2784C2*), 0, "S2784C1");
    check_field_offset(lv, s2784c1f0, ABISELECT(10096,7488), "S2784C1.s2784c1f0");
    check_field_offset(lv, s2784c1f1, ABISELECT(10100,7492), "S2784C1.s2784c1f1");
    check_field_offset(lv, s2784c1f2, ABISELECT(10104,7496), "S2784C1.s2784c1f2");
    check_field_offset(lv, s2784c1f3, ABISELECT(10108,7500), "S2784C1.s2784c1f3");
    check_field_offset(lv, s2784c1f4, ABISELECT(10112,7504), "S2784C1.s2784c1f4");
    check_field_offset(lv, s2784c1f5, ABISELECT(10120,7508), "S2784C1.s2784c1f5");
    check_field_offset(lv, s2784c1f6, ABISELECT(10528,7820), "S2784C1.s2784c1f6");
    check_field_offset(lv, s2784c1f7, ABISELECT(10560,7848), "S2784C1.s2784c1f7");
    test_class_info(&lv, &cd_S2784C1);
    dp->~S2784C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2784C1(Test_S2784C1, "S2784C1", ABISELECT(10768,8000));

#else // __cplusplus

extern void _ZN7S2784C1C1Ev();
extern void _ZN7S2784C1D2Ev();
Name_Map name_map_S2784C1[] = {
  NSPAIR(_ZN7S2784C1C1Ev),
  NSPAIR(_ZN7S2784C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3052C10;
extern VTBL_ENTRY _ZTI8S3052C10[];
extern Class_Descriptor cd_S2784C5;
extern VTBL_ENTRY _ZTI7S2784C5[];
extern  VTBL_ENTRY _ZTV7S2784C5[];
extern Class_Descriptor cd_S2784C6;
extern VTBL_ENTRY _ZTI7S2784C6[];
extern  VTBL_ENTRY _ZTV7S2784C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2784C6[];
extern Class_Descriptor cd_S2784C4;
extern VTBL_ENTRY _ZTI7S2784C4[];
extern  VTBL_ENTRY _ZTV7S2784C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2784C4[];
extern Class_Descriptor cd_S2784C2;
extern VTBL_ENTRY _ZTI7S2784C2[];
extern  VTBL_ENTRY _ZTV7S2784C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2784C2[];
static Base_Class bases_S2784C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3052C10,    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
    4, //immediately_derived
  0, 0},
  {&cd_S2784C5,    ABISELECT(10672,7916), //bcp->offset
    16, //bcp->virtual_function_table_offset
    4, //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_S2784C6,    ABISELECT(10568,7856), //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_S2784C4,    ABISELECT(10568,7856), //bcp->offset
    6, //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
    4, //immediately_derived
  0, 1},
  {&cd_S2784C2,    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},
  {0}};
extern VTBL_ENTRY _ZTI7S2784C1[];
extern void _ZN7S2784C1D1Ev();
extern void _ZN7S2784C1D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S2784C1D1Ev,_ZTv0_n16_N7S2784C1D1Ev)();
extern void ABISELECT(_ZThn10568_N7S2784C1D1Ev,_ZThn7856_N7S2784C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S2784C1D0Ev,_ZTv0_n16_N7S2784C1D0Ev)();
extern void ABISELECT(_ZThn10568_N7S2784C1D0Ev,_ZThn7856_N7S2784C1D0Ev)() __attribute__((weak));
extern void _ZN7S2784C42v2Ev();
extern void _ZN7S2784C42v3Ev();
extern void ABISELECT(_ZTv0_n24_N7S2784C1D1Ev,_ZTv0_n12_N7S2784C1D1Ev)();
extern void ABISELECT(_ZThn10672_N7S2784C1D1Ev,_ZThn7916_N7S2784C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2784C1D0Ev,_ZTv0_n12_N7S2784C1D0Ev)();
extern void ABISELECT(_ZThn10672_N7S2784C1D0Ev,_ZThn7916_N7S2784C1D0Ev)() __attribute__((weak));
extern void _ZN7S2784C52v1Ev();
static  VTBL_ENTRY vtc_S2784C1[] = {
  ABISELECT(10672,7916),
  ABISELECT(10568,7856),
  0,
  (VTBL_ENTRY)&(_ZTI7S2784C1[0]),
  (VTBL_ENTRY)&_ZN7S2784C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2784C1D0Ev,
  0,
  0,
  ABISELECT(-10568,-7856),
  ABISELECT(104,60),
  ABISELECT(-10568,-7856),
  (VTBL_ENTRY)&(_ZTI7S2784C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2784C1D1Ev,_ZTv0_n16_N7S2784C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2784C1D0Ev,_ZTv0_n16_N7S2784C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2784C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2784C42v3Ev,
  0,
  ABISELECT(-10672,-7916),
  ABISELECT(-10672,-7916),
  (VTBL_ENTRY)&(_ZTI7S2784C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C1D1Ev,_ZTv0_n12_N7S2784C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C1D0Ev,_ZTv0_n12_N7S2784C1D0Ev),
  (VTBL_ENTRY)&_ZN7S2784C52v1Ev,
};
extern VTBL_ENTRY _ZTV7S2784C1[];
extern void _ZN7S2784C2D1Ev();
extern void _ZN7S2784C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2784C2__7S2784C1[] = {
  ABISELECT(10672,7916),
  ABISELECT(10568,7856),
  0,
  (VTBL_ENTRY)&(_ZTI7S2784C2[0]),
  (VTBL_ENTRY)&_ZN7S2784C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2784C2D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S2784C2D1Ev,_ZTv0_n16_N7S2784C2D1Ev)();
extern void ABISELECT(_ZThn10568_N7S2784C2D1Ev,_ZThn7856_N7S2784C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S2784C2D0Ev,_ZTv0_n16_N7S2784C2D0Ev)();
extern void ABISELECT(_ZThn10568_N7S2784C2D0Ev,_ZThn7856_N7S2784C2D0Ev)() __attribute__((weak));
extern void _ZN7S2784C42v2Ev();
extern void _ZN7S2784C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2784C4__7S2784C2__7S2784C1[] = {
  0,
  0,
  ABISELECT(-10568,-7856),
  ABISELECT(104,60),
  ABISELECT(-10568,-7856),
  (VTBL_ENTRY)&(_ZTI7S2784C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2784C2D1Ev,_ZTv0_n16_N7S2784C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S2784C2D0Ev,_ZTv0_n16_N7S2784C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2784C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2784C42v3Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S2784C2D1Ev,_ZTv0_n12_N7S2784C2D1Ev)();
extern void ABISELECT(_ZThn10672_N7S2784C2D1Ev,_ZThn7916_N7S2784C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2784C2D0Ev,_ZTv0_n12_N7S2784C2D0Ev)();
extern void ABISELECT(_ZThn10672_N7S2784C2D0Ev,_ZThn7916_N7S2784C2D0Ev)() __attribute__((weak));
extern void _ZN7S2784C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2784C5__7S2784C2__7S2784C1[] = {
  0,
  ABISELECT(-10672,-7916),
  ABISELECT(-10672,-7916),
  (VTBL_ENTRY)&(_ZTI7S2784C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C2D1Ev,_ZTv0_n12_N7S2784C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C2D0Ev,_ZTv0_n12_N7S2784C2D0Ev),
  (VTBL_ENTRY)&_ZN7S2784C52v1Ev,
};
extern void _ZN7S2784C4D1Ev();
extern void _ZN7S2784C4D0Ev();
extern void _ZN7S2784C42v2Ev();
extern void _ZN7S2784C42v3Ev();
static  VTBL_ENTRY _tg__ZTV7S2784C4__7S2784C1[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S2784C4[0]),
  (VTBL_ENTRY)&_ZN7S2784C4D1Ev,
  (VTBL_ENTRY)&_ZN7S2784C4D0Ev,
  (VTBL_ENTRY)&_ZN7S2784C42v2Ev,
  (VTBL_ENTRY)&_ZN7S2784C42v3Ev,
};
extern void _ZN7S2784C6D1Ev();
extern void _ZN7S2784C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2784C67S2784C4__7S2784C1[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S2784C6[0]),
  (VTBL_ENTRY)&_ZN7S2784C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2784C6D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S2784C6D1Ev,_ZTv0_n12_N7S2784C6D1Ev)();
extern void ABISELECT(_ZThn104_N7S2784C6D1Ev,_ZThn60_N7S2784C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2784C6D0Ev,_ZTv0_n12_N7S2784C6D0Ev)();
extern void ABISELECT(_ZThn104_N7S2784C6D0Ev,_ZThn60_N7S2784C6D0Ev)() __attribute__((weak));
extern void _ZN7S2784C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2784C5__7S2784C67S2784C4__7S2784C1[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S2784C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C6D1Ev,_ZTv0_n12_N7S2784C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C6D0Ev,_ZTv0_n12_N7S2784C6D0Ev),
  (VTBL_ENTRY)&_ZN7S2784C52v1Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S2784C4D1Ev,_ZTv0_n12_N7S2784C4D1Ev)();
extern void ABISELECT(_ZThn104_N7S2784C4D1Ev,_ZThn60_N7S2784C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S2784C4D0Ev,_ZTv0_n12_N7S2784C4D0Ev)();
extern void ABISELECT(_ZThn104_N7S2784C4D0Ev,_ZThn60_N7S2784C4D0Ev)() __attribute__((weak));
extern void _ZN7S2784C52v1Ev();
static  VTBL_ENTRY _tg__ZTV7S2784C5__7S2784C4__7S2784C1[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S2784C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C4D1Ev,_ZTv0_n12_N7S2784C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S2784C4D0Ev,_ZTv0_n12_N7S2784C4D0Ev),
  (VTBL_ENTRY)&_ZN7S2784C52v1Ev,
};
static  VTT_ENTRY vtt_S2784C1[] = {
  {&(_ZTV7S2784C1[4]),  4,23},
  {&(_tg__ZTV7S2784C2__7S2784C1[4]),  4,6},
  {&(_tg__ZTV7S2784C4__7S2784C2__7S2784C1[6]),  6,10},
  {&(_tg__ZTV7S2784C5__7S2784C2__7S2784C1[4]),  4,7},
  {&(_ZTV7S2784C1[12]),  12,23},
  {&(_ZTV7S2784C1[20]),  20,23},
  {&(_tg__ZTV7S2784C4__7S2784C1[3]),  3,7},
  {&(_tg__ZTV7S2784C67S2784C4__7S2784C1[3]),  3,5},
  {&(_tg__ZTV7S2784C5__7S2784C67S2784C4__7S2784C1[4]),  4,7},
  {&(_tg__ZTV7S2784C5__7S2784C4__7S2784C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S2784C1[];
extern  VTBL_ENTRY _ZTV7S2784C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2784C1[];
static VTBL_ENTRY alt_thunk_names139[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C4D0Ev,_ZTv0_n12_N7S2784C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S2784C4D0Ev,_ZThn60_N7S2784C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C4D1Ev,_ZTv0_n12_N7S2784C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S2784C4D1Ev,_ZThn60_N7S2784C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C6D0Ev,_ZTv0_n12_N7S2784C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S2784C6D0Ev,_ZThn60_N7S2784C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C6D1Ev,_ZTv0_n12_N7S2784C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S2784C6D1Ev,_ZThn60_N7S2784C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C2D0Ev,_ZTv0_n12_N7S2784C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10672_N7S2784C2D0Ev,_ZThn7916_N7S2784C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C2D1Ev,_ZTv0_n12_N7S2784C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10672_N7S2784C2D1Ev,_ZThn7916_N7S2784C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S2784C2D0Ev,_ZTv0_n16_N7S2784C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10568_N7S2784C2D0Ev,_ZThn7856_N7S2784C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S2784C2D1Ev,_ZTv0_n16_N7S2784C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10568_N7S2784C2D1Ev,_ZThn7856_N7S2784C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C1D0Ev,_ZTv0_n12_N7S2784C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10672_N7S2784C1D0Ev,_ZThn7916_N7S2784C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S2784C1D1Ev,_ZTv0_n12_N7S2784C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10672_N7S2784C1D1Ev,_ZThn7916_N7S2784C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S2784C1D0Ev,_ZTv0_n16_N7S2784C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10568_N7S2784C1D0Ev,_ZThn7856_N7S2784C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S2784C1D1Ev,_ZTv0_n16_N7S2784C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn10568_N7S2784C1D1Ev,_ZThn7856_N7S2784C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2784C1 = {  "S2784C1", // class name
  bases_S2784C1, 5,
  &(vtc_S2784C1[0]), // expected_vtbl_contents
  &(vtt_S2784C1[0]), // expected_vtt_contents
  ABISELECT(10768,8000), // object size
  NSPAIRA(_ZTI7S2784C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2784C1),23, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2784C1),10, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names139,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19089C6  {
  int s19089c6f0;
  virtual void  v7(); // _ZN8S19089C62v7Ev
  virtual void  v8(); // _ZN8S19089C62v8Ev
  virtual void  v9(); // _ZN8S19089C62v9Ev
  virtual void  v10(); // _ZN8S19089C63v10Ev
  virtual void  v11(); // _ZN8S19089C63v11Ev
  virtual void  v12(); // _ZN8S19089C63v12Ev
  ~S19089C6(); // tgen
  S19089C6(); // tgen
};
//SIG(-1 S19089C6) C1{ v1 v2 v3 v4 v5 v6 Fi}


void  S19089C6 ::v7(){vfunc_called(this, "_ZN8S19089C62v7Ev");}
void  S19089C6 ::v8(){vfunc_called(this, "_ZN8S19089C62v8Ev");}
void  S19089C6 ::v9(){vfunc_called(this, "_ZN8S19089C62v9Ev");}
void  S19089C6 ::v10(){vfunc_called(this, "_ZN8S19089C63v10Ev");}
void  S19089C6 ::v11(){vfunc_called(this, "_ZN8S19089C63v11Ev");}
void  S19089C6 ::v12(){vfunc_called(this, "_ZN8S19089C63v12Ev");}
S19089C6 ::~S19089C6(){ note_dtor("S19089C6", this);} // tgen
S19089C6 ::S19089C6(){ note_ctor("S19089C6", this);} // tgen

static void Test_S19089C6()
{
  extern Class_Descriptor cd_S19089C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19089C6, buf);
    S19089C6 *dp, &lv = *(dp=new (buf) S19089C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19089C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19089C6)");
    check_field_offset(lv, s19089c6f0, ABISELECT(8,4), "S19089C6.s19089c6f0");
    test_class_info(&lv, &cd_S19089C6);
    dp->~S19089C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19089C6(Test_S19089C6, "S19089C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19089C6C1Ev();
extern void _ZN8S19089C6D1Ev();
Name_Map name_map_S19089C6[] = {
  NSPAIR(_ZN8S19089C6C1Ev),
  NSPAIR(_ZN8S19089C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19089C6[];
extern void _ZN8S19089C62v7Ev();
extern void _ZN8S19089C62v8Ev();
extern void _ZN8S19089C62v9Ev();
extern void _ZN8S19089C63v10Ev();
extern void _ZN8S19089C63v11Ev();
extern void _ZN8S19089C63v12Ev();
static  VTBL_ENTRY vtc_S19089C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19089C6[0]),
  (VTBL_ENTRY)&_ZN8S19089C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v12Ev,
};
extern VTBL_ENTRY _ZTI8S19089C6[];
extern  VTBL_ENTRY _ZTV8S19089C6[];
Class_Descriptor cd_S19089C6 = {  "S19089C6", // class name
  0,0,//no base classes
  &(vtc_S19089C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19089C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19089C6),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  S19089C5  : S19089C6 {
  virtual void  v13(); // _ZN8S19089C53v13Ev
  ~S19089C5(); // tgen
  S19089C5(); // tgen
};
//SIG(-1 S19089C5) C1{ BC2{ v2 v3 v4 v5 v6 v7 Fi} v1}


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

static void Test_S19089C5()
{
  extern Class_Descriptor cd_S19089C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19089C5, buf);
    S19089C5 *dp, &lv = *(dp=new (buf) S19089C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19089C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19089C5)");
    check_base_class_offset(lv, (S19089C6*), 0, "S19089C5");
    test_class_info(&lv, &cd_S19089C5);
    dp->~S19089C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19089C5(Test_S19089C5, "S19089C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19089C5C1Ev();
extern void _ZN8S19089C5D1Ev();
Name_Map name_map_S19089C5[] = {
  NSPAIR(_ZN8S19089C5C1Ev),
  NSPAIR(_ZN8S19089C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19089C6;
extern VTBL_ENTRY _ZTI8S19089C6[];
extern  VTBL_ENTRY _ZTV8S19089C6[];
static Base_Class bases_S19089C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19089C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19089C5[];
extern void _ZN8S19089C62v7Ev();
extern void _ZN8S19089C62v8Ev();
extern void _ZN8S19089C62v9Ev();
extern void _ZN8S19089C63v10Ev();
extern void _ZN8S19089C63v11Ev();
extern void _ZN8S19089C63v12Ev();
extern void _ZN8S19089C53v13Ev();
static  VTBL_ENTRY vtc_S19089C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19089C5[0]),
  (VTBL_ENTRY)&_ZN8S19089C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19089C53v13Ev,
};
extern VTBL_ENTRY _ZTI8S19089C5[];
extern  VTBL_ENTRY _ZTV8S19089C5[];
Class_Descriptor cd_S19089C5 = {  "S19089C5", // class name
  bases_S19089C5, 1,
  &(vtc_S19089C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19089C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19089C5),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19089C4  : virtual S19089C5 {
  int s19089c4f0;
  short s19089c4f1;
  virtual  ~S19089C4(); // _ZN8S19089C4D2Ev
  virtual void  v14(); // _ZN8S19089C43v14Ev
  virtual void  v15(); // _ZN8S19089C43v15Ev
  virtual void  v16(); // _ZN8S19089C43v16Ev
  virtual void  v17(); // _ZN8S19089C43v17Ev
  virtual void  v18(); // _ZN8S19089C43v18Ev
  virtual void  v19(); // _ZN8S19089C43v19Ev
  virtual void  v20(); // _ZN8S19089C43v20Ev
  virtual void  v21(); // _ZN8S19089C43v21Ev
  S19089C4(); // tgen
};
//SIG(-1 S19089C4) C1{ VBC2{ BC3{ v9 v10 v11 v12 v13 v14 Fi} v15} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fs}


 S19089C4 ::~S19089C4(){ note_dtor("S19089C4", this);}
void  S19089C4 ::v14(){vfunc_called(this, "_ZN8S19089C43v14Ev");}
void  S19089C4 ::v15(){vfunc_called(this, "_ZN8S19089C43v15Ev");}
void  S19089C4 ::v16(){vfunc_called(this, "_ZN8S19089C43v16Ev");}
void  S19089C4 ::v17(){vfunc_called(this, "_ZN8S19089C43v17Ev");}
void  S19089C4 ::v18(){vfunc_called(this, "_ZN8S19089C43v18Ev");}
void  S19089C4 ::v19(){vfunc_called(this, "_ZN8S19089C43v19Ev");}
void  S19089C4 ::v20(){vfunc_called(this, "_ZN8S19089C43v20Ev");}
void  S19089C4 ::v21(){vfunc_called(this, "_ZN8S19089C43v21Ev");}
S19089C4 ::S19089C4(){ note_ctor("S19089C4", this);} // tgen

static void Test_S19089C4()
{
  extern Class_Descriptor cd_S19089C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19089C4, buf);
    S19089C4 *dp, &lv = *(dp=new (buf) S19089C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19089C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19089C4)");
    check_base_class_offset(lv, (S19089C6*)(S19089C5*), ABISELECT(16,12), "S19089C4");
    check_base_class_offset(lv, (S19089C5*), ABISELECT(16,12), "S19089C4");
    check_field_offset(lv, s19089c4f0, ABISELECT(8,4), "S19089C4.s19089c4f0");
    check_field_offset(lv, s19089c4f1, ABISELECT(12,8), "S19089C4.s19089c4f1");
    test_class_info(&lv, &cd_S19089C4);
    dp->~S19089C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19089C4(Test_S19089C4, "S19089C4", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19089C4C1Ev();
extern void _ZN8S19089C4D2Ev();
Name_Map name_map_S19089C4[] = {
  NSPAIR(_ZN8S19089C4C1Ev),
  NSPAIR(_ZN8S19089C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19089C6;
extern VTBL_ENTRY _ZTI8S19089C6[];
extern  VTBL_ENTRY _ZTV8S19089C6[];
extern Class_Descriptor cd_S19089C5;
extern VTBL_ENTRY _ZTI8S19089C5[];
extern  VTBL_ENTRY _ZTV8S19089C5[];
static Base_Class bases_S19089C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19089C6,    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
  0, 0},
  {&cd_S19089C5,    ABISELECT(16,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S19089C4[];
extern void _ZN8S19089C4D1Ev();
extern void _ZN8S19089C4D0Ev();
extern void _ZN8S19089C43v14Ev();
extern void _ZN8S19089C43v15Ev();
extern void _ZN8S19089C43v16Ev();
extern void _ZN8S19089C43v17Ev();
extern void _ZN8S19089C43v18Ev();
extern void _ZN8S19089C43v19Ev();
extern void _ZN8S19089C43v20Ev();
extern void _ZN8S19089C43v21Ev();
extern void _ZN8S19089C62v7Ev();
extern void _ZN8S19089C62v8Ev();
extern void _ZN8S19089C62v9Ev();
extern void _ZN8S19089C63v10Ev();
extern void _ZN8S19089C63v11Ev();
extern void _ZN8S19089C63v12Ev();
extern void _ZN8S19089C53v13Ev();
static  VTBL_ENTRY vtc_S19089C4[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19089C4[0]),
  (VTBL_ENTRY)&_ZN8S19089C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19089C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19089C4[0]),
  (VTBL_ENTRY)&_ZN8S19089C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19089C53v13Ev,
};
extern VTBL_ENTRY _ZTV8S19089C4[];
static  VTT_ENTRY vtt_S19089C4[] = {
  {&(_ZTV8S19089C4[3]),  3,29},
  {&(_ZTV8S19089C4[22]),  22,29},
};
extern VTBL_ENTRY _ZTI8S19089C4[];
extern  VTBL_ENTRY _ZTV8S19089C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19089C4[];
Class_Descriptor cd_S19089C4 = {  "S19089C4", // class name
  bases_S19089C4, 2,
  &(vtc_S19089C4[0]), // expected_vtbl_contents
  &(vtt_S19089C4[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19089C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19089C4),29, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19089C4),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  S19089C3  : S19089C4 , S19089C6 {
  virtual void  v22(); // _ZN8S19089C33v22Ev
  virtual void  v23(); // _ZN8S19089C33v23Ev
  virtual void  v24(); // _ZN8S19089C33v24Ev
  virtual void  v25(); // _ZN8S19089C33v25Ev
  ~S19089C3(); // tgen
  S19089C3(); // tgen
};
//SIG(-1 S19089C3) C1{ BC2{ VBC3{ BC4{ v5 v6 v7 v8 v9 v10 Fi} v11} vd v12 v13 v14 v15 v16 v17 v18 v19 Fi Fs} BC4 v1 v2 v3 v4}


void  S19089C3 ::v22(){vfunc_called(this, "_ZN8S19089C33v22Ev");}
void  S19089C3 ::v23(){vfunc_called(this, "_ZN8S19089C33v23Ev");}
void  S19089C3 ::v24(){vfunc_called(this, "_ZN8S19089C33v24Ev");}
void  S19089C3 ::v25(){vfunc_called(this, "_ZN8S19089C33v25Ev");}
S19089C3 ::~S19089C3(){ note_dtor("S19089C3", this);} // tgen
S19089C3 ::S19089C3(){ note_ctor("S19089C3", this);} // tgen

static void Test_S19089C3()
{
  extern Class_Descriptor cd_S19089C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S19089C3, buf);
    S19089C3 *dp, &lv = *(dp=new (buf) S19089C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S19089C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19089C3)");
    check_base_class_offset(lv, (S19089C6*)(S19089C5*), ABISELECT(32,20), "S19089C3");
    check_base_class_offset(lv, (S19089C5*)(S19089C4*), ABISELECT(32,20), "S19089C3");
    check_base_class_offset(lv, (S19089C4*), 0, "S19089C3");
    /*is_ambiguous_... S19089C3::S19089C6 */ AMB_check_base_class_offset(lv, (S19089C6*), ABISELECT(16,12), "S19089C3");
    test_class_info(&lv, &cd_S19089C3);
    dp->~S19089C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19089C3(Test_S19089C3, "S19089C3", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S19089C3C1Ev();
extern void _ZN8S19089C3D1Ev();
Name_Map name_map_S19089C3[] = {
  NSPAIR(_ZN8S19089C3C1Ev),
  NSPAIR(_ZN8S19089C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19089C6;
extern VTBL_ENTRY _ZTI8S19089C6[];
extern  VTBL_ENTRY _ZTV8S19089C6[];
extern Class_Descriptor cd_S19089C5;
extern VTBL_ENTRY _ZTI8S19089C5[];
extern  VTBL_ENTRY _ZTV8S19089C5[];
extern Class_Descriptor cd_S19089C4;
extern VTBL_ENTRY _ZTI8S19089C4[];
extern  VTBL_ENTRY _ZTV8S19089C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19089C4[];
extern Class_Descriptor cd_S19089C6;
extern VTBL_ENTRY _ZTI8S19089C6[];
extern  VTBL_ENTRY _ZTV8S19089C6[];
static Base_Class bases_S19089C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19089C6,    ABISELECT(32,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
  0, 0},
  {&cd_S19089C5,    ABISELECT(32,20), //bcp->offset
    25, //bcp->virtual_function_table_offset
    9, //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
    2, //immediately_derived
  0, 1},
  {&cd_S19089C4,    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_S19089C6,    ABISELECT(16,12), //bcp->offset
    17, //bcp->virtual_function_table_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 _ZTI8S19089C3[];
extern void _ZN8S19089C3D1Ev();
extern void _ZN8S19089C3D0Ev();
extern void _ZN8S19089C43v14Ev();
extern void _ZN8S19089C43v15Ev();
extern void _ZN8S19089C43v16Ev();
extern void _ZN8S19089C43v17Ev();
extern void _ZN8S19089C43v18Ev();
extern void _ZN8S19089C43v19Ev();
extern void _ZN8S19089C43v20Ev();
extern void _ZN8S19089C43v21Ev();
extern void _ZN8S19089C33v22Ev();
extern void _ZN8S19089C33v23Ev();
extern void _ZN8S19089C33v24Ev();
extern void _ZN8S19089C33v25Ev();
extern void _ZN8S19089C62v7Ev();
extern void _ZN8S19089C62v8Ev();
extern void _ZN8S19089C62v9Ev();
extern void _ZN8S19089C63v10Ev();
extern void _ZN8S19089C63v11Ev();
extern void _ZN8S19089C63v12Ev();
extern void _ZN8S19089C62v7Ev();
extern void _ZN8S19089C62v8Ev();
extern void _ZN8S19089C62v9Ev();
extern void _ZN8S19089C63v10Ev();
extern void _ZN8S19089C63v11Ev();
extern void _ZN8S19089C63v12Ev();
extern void _ZN8S19089C53v13Ev();
static  VTBL_ENTRY vtc_S19089C3[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19089C3[0]),
  (VTBL_ENTRY)&_ZN8S19089C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19089C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v21Ev,
  (VTBL_ENTRY)&_ZN8S19089C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19089C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19089C33v24Ev,
  (VTBL_ENTRY)&_ZN8S19089C33v25Ev,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19089C3[0]),
  (VTBL_ENTRY)&_ZN8S19089C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v12Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19089C3[0]),
  (VTBL_ENTRY)&_ZN8S19089C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19089C53v13Ev,
};
extern VTBL_ENTRY _ZTV8S19089C3[];
extern void _ZN8S19089C4D1Ev();
extern void _ZN8S19089C4D0Ev();
extern void _ZN8S19089C43v14Ev();
extern void _ZN8S19089C43v15Ev();
extern void _ZN8S19089C43v16Ev();
extern void _ZN8S19089C43v17Ev();
extern void _ZN8S19089C43v18Ev();
extern void _ZN8S19089C43v19Ev();
extern void _ZN8S19089C43v20Ev();
extern void _ZN8S19089C43v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19089C4__8S19089C3[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19089C4[0]),
  (VTBL_ENTRY)&_ZN8S19089C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19089C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v21Ev,
};
extern void _ZN8S19089C62v7Ev();
extern void _ZN8S19089C62v8Ev();
extern void _ZN8S19089C62v9Ev();
extern void _ZN8S19089C63v10Ev();
extern void _ZN8S19089C63v11Ev();
extern void _ZN8S19089C63v12Ev();
extern void _ZN8S19089C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19089C5__8S19089C4__8S19089C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19089C4[0]),
  (VTBL_ENTRY)&_ZN8S19089C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19089C53v13Ev,
};
static  VTT_ENTRY vtt_S19089C3[] = {
  {&(_ZTV8S19089C3[3]),  3,41},
  {&(_tg__ZTV8S19089C4__8S19089C3[3]),  3,13},
  {&(_tg__ZTV8S19089C5__8S19089C4__8S19089C3[9]),  9,16},
  {&(_ZTV8S19089C3[34]),  34,41},
};
extern VTBL_ENTRY _ZTI8S19089C3[];
extern  VTBL_ENTRY _ZTV8S19089C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19089C3[];
Class_Descriptor cd_S19089C3 = {  "S19089C3", // class name
  bases_S19089C3, 4,
  &(vtc_S19089C3[0]), // expected_vtbl_contents
  &(vtt_S19089C3[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S19089C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19089C3),41, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19089C3),4, //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  S19089C2  : S19089C3 {
  ::S3052C22_nt s19089c2f0;
  virtual  ~S19089C2(); // _ZN8S19089C2D2Ev
  virtual void  v26(); // _ZN8S19089C23v26Ev
  virtual void  v27(); // _ZN8S19089C23v27Ev
  virtual void  v28(); // _ZN8S19089C23v28Ev
  virtual void  v29(); // _ZN8S19089C23v29Ev
  S19089C2(); // tgen
};
//SIG(-1 S19089C2) C1{ BC2{ BC3{ VBC4{ BC5{ v5 v6 v7 v8 v9 v10 Fi} v11} vd v12 v13 v14 v15 v16 v17 v18 v19 Fi Fs} BC5 v20 v21 v22 v23} vd v1 v2 v3 v4 FC6{}}


 S19089C2 ::~S19089C2(){ note_dtor("S19089C2", this);}
void  S19089C2 ::v26(){vfunc_called(this, "_ZN8S19089C23v26Ev");}
void  S19089C2 ::v27(){vfunc_called(this, "_ZN8S19089C23v27Ev");}
void  S19089C2 ::v28(){vfunc_called(this, "_ZN8S19089C23v28Ev");}
void  S19089C2 ::v29(){vfunc_called(this, "_ZN8S19089C23v29Ev");}
S19089C2 ::S19089C2(){ note_ctor("S19089C2", this);} // tgen

static void Test_S19089C2()
{
  extern Class_Descriptor cd_S19089C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S19089C2, buf);
    S19089C2 *dp, &lv = *(dp=new (buf) S19089C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S19089C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19089C2)");
    check_base_class_offset(lv, (S19089C6*)(S19089C5*), ABISELECT(32,24), "S19089C2");
    check_base_class_offset(lv, (S19089C5*)(S19089C4*)(S19089C3*), ABISELECT(32,24), "S19089C2");
    check_base_class_offset(lv, (S19089C4*)(S19089C3*), 0, "S19089C2");
    /*is_ambiguous_... S19089C3::S19089C6 */ AMB_check_base_class_offset(lv, (S19089C6*)(S19089C3*), ABISELECT(16,12), "S19089C2");
    check_base_class_offset(lv, (S19089C3*), 0, "S19089C2");
    check_field_offset(lv, s19089c2f0, ABISELECT(28,20), "S19089C2.s19089c2f0");
    test_class_info(&lv, &cd_S19089C2);
    dp->~S19089C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19089C2(Test_S19089C2, "S19089C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN8S19089C2C1Ev();
extern void _ZN8S19089C2D2Ev();
Name_Map name_map_S19089C2[] = {
  NSPAIR(_ZN8S19089C2C1Ev),
  NSPAIR(_ZN8S19089C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19089C6;
extern VTBL_ENTRY _ZTI8S19089C6[];
extern  VTBL_ENTRY _ZTV8S19089C6[];
extern Class_Descriptor cd_S19089C5;
extern VTBL_ENTRY _ZTI8S19089C5[];
extern  VTBL_ENTRY _ZTV8S19089C5[];
extern Class_Descriptor cd_S19089C4;
extern VTBL_ENTRY _ZTI8S19089C4[];
extern  VTBL_ENTRY _ZTV8S19089C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19089C4[];
extern Class_Descriptor cd_S19089C6;
extern VTBL_ENTRY _ZTI8S19089C6[];
extern  VTBL_ENTRY _ZTV8S19089C6[];
extern Class_Descriptor cd_S19089C3;
extern VTBL_ENTRY _ZTI8S19089C3[];
extern  VTBL_ENTRY _ZTV8S19089C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19089C3[];
static Base_Class bases_S19089C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19089C6,    ABISELECT(32,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
  0, 0},
  {&cd_S19089C5,    ABISELECT(32,24), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //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
    2, //immediately_derived
  0, 1},
  {&cd_S19089C4,    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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19089C6,    ABISELECT(16,12), //bcp->offset
    21, //bcp->virtual_function_table_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_S19089C3,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S19089C2[];
extern void _ZN8S19089C2D1Ev();
extern void _ZN8S19089C2D0Ev();
extern void _ZN8S19089C43v14Ev();
extern void _ZN8S19089C43v15Ev();
extern void _ZN8S19089C43v16Ev();
extern void _ZN8S19089C43v17Ev();
extern void _ZN8S19089C43v18Ev();
extern void _ZN8S19089C43v19Ev();
extern void _ZN8S19089C43v20Ev();
extern void _ZN8S19089C43v21Ev();
extern void _ZN8S19089C33v22Ev();
extern void _ZN8S19089C33v23Ev();
extern void _ZN8S19089C33v24Ev();
extern void _ZN8S19089C33v25Ev();
extern void _ZN8S19089C23v26Ev();
extern void _ZN8S19089C23v27Ev();
extern void _ZN8S19089C23v28Ev();
extern void _ZN8S19089C23v29Ev();
extern void _ZN8S19089C62v7Ev();
extern void _ZN8S19089C62v8Ev();
extern void _ZN8S19089C62v9Ev();
extern void _ZN8S19089C63v10Ev();
extern void _ZN8S19089C63v11Ev();
extern void _ZN8S19089C63v12Ev();
extern void _ZN8S19089C62v7Ev();
extern void _ZN8S19089C62v8Ev();
extern void _ZN8S19089C62v9Ev();
extern void _ZN8S19089C63v10Ev();
extern void _ZN8S19089C63v11Ev();
extern void _ZN8S19089C63v12Ev();
extern void _ZN8S19089C53v13Ev();
static  VTBL_ENTRY vtc_S19089C2[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19089C2[0]),
  (VTBL_ENTRY)&_ZN8S19089C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19089C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v21Ev,
  (VTBL_ENTRY)&_ZN8S19089C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19089C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19089C33v24Ev,
  (VTBL_ENTRY)&_ZN8S19089C33v25Ev,
  (VTBL_ENTRY)&_ZN8S19089C23v26Ev,
  (VTBL_ENTRY)&_ZN8S19089C23v27Ev,
  (VTBL_ENTRY)&_ZN8S19089C23v28Ev,
  (VTBL_ENTRY)&_ZN8S19089C23v29Ev,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19089C2[0]),
  (VTBL_ENTRY)&_ZN8S19089C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v12Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S19089C2[0]),
  (VTBL_ENTRY)&_ZN8S19089C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19089C53v13Ev,
};
extern VTBL_ENTRY _ZTV8S19089C2[];
extern void _ZN8S19089C3D1Ev();
extern void _ZN8S19089C3D0Ev();
extern void _ZN8S19089C43v14Ev();
extern void _ZN8S19089C43v15Ev();
extern void _ZN8S19089C43v16Ev();
extern void _ZN8S19089C43v17Ev();
extern void _ZN8S19089C43v18Ev();
extern void _ZN8S19089C43v19Ev();
extern void _ZN8S19089C43v20Ev();
extern void _ZN8S19089C43v21Ev();
extern void _ZN8S19089C33v22Ev();
extern void _ZN8S19089C33v23Ev();
extern void _ZN8S19089C33v24Ev();
extern void _ZN8S19089C33v25Ev();
static  VTBL_ENTRY _tg__ZTV8S19089C3__8S19089C2[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19089C3[0]),
  (VTBL_ENTRY)&_ZN8S19089C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19089C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v21Ev,
  (VTBL_ENTRY)&_ZN8S19089C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19089C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19089C33v24Ev,
  (VTBL_ENTRY)&_ZN8S19089C33v25Ev,
};
extern void _ZN8S19089C4D1Ev();
extern void _ZN8S19089C4D0Ev();
extern void _ZN8S19089C43v14Ev();
extern void _ZN8S19089C43v15Ev();
extern void _ZN8S19089C43v16Ev();
extern void _ZN8S19089C43v17Ev();
extern void _ZN8S19089C43v18Ev();
extern void _ZN8S19089C43v19Ev();
extern void _ZN8S19089C43v20Ev();
extern void _ZN8S19089C43v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19089C48S19089C3__8S19089C2[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19089C4[0]),
  (VTBL_ENTRY)&_ZN8S19089C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19089C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v21Ev,
};
extern void _ZN8S19089C62v7Ev();
extern void _ZN8S19089C62v8Ev();
extern void _ZN8S19089C62v9Ev();
extern void _ZN8S19089C63v10Ev();
extern void _ZN8S19089C63v11Ev();
extern void _ZN8S19089C63v12Ev();
extern void _ZN8S19089C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19089C5__8S19089C48S19089C3__8S19089C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S19089C4[0]),
  (VTBL_ENTRY)&_ZN8S19089C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19089C53v13Ev,
};
extern void _ZN8S19089C62v7Ev();
extern void _ZN8S19089C62v8Ev();
extern void _ZN8S19089C62v9Ev();
extern void _ZN8S19089C63v10Ev();
extern void _ZN8S19089C63v11Ev();
extern void _ZN8S19089C63v12Ev();
extern void _ZN8S19089C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19089C5__8S19089C3__8S19089C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S19089C3[0]),
  (VTBL_ENTRY)&_ZN8S19089C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19089C53v13Ev,
};
static  VTT_ENTRY vtt_S19089C2[] = {
  {&(_ZTV8S19089C2[3]),  3,45},
  {&(_tg__ZTV8S19089C3__8S19089C2[3]),  3,17},
  {&(_tg__ZTV8S19089C48S19089C3__8S19089C2[3]),  3,13},
  {&(_tg__ZTV8S19089C5__8S19089C48S19089C3__8S19089C2[9]),  9,16},
  {&(_tg__ZTV8S19089C5__8S19089C3__8S19089C2[9]),  9,16},
  {&(_ZTV8S19089C2[38]),  38,45},
};
extern VTBL_ENTRY _ZTI8S19089C2[];
extern  VTBL_ENTRY _ZTV8S19089C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19089C2[];
Class_Descriptor cd_S19089C2 = {  "S19089C2", // class name
  bases_S19089C2, 5,
  &(vtc_S19089C2[0]), // expected_vtbl_contents
  &(vtt_S19089C2[0]), // expected_vtt_contents
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI8S19089C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19089C2),45, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19089C2),6, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19089C10  {
  ::S7218C6 s19089c10f0;
  virtual void  v30(); // _ZN9S19089C103v30Ev
  virtual void  v31(); // _ZN9S19089C103v31Ev
  virtual void  v32(); // _ZN9S19089C103v32Ev
  ~S19089C10(); // tgen
  S19089C10(); // tgen
};
//SIG(-1 S19089C10) C1{ v1 v2 v3 FC2{ BC3{ BC4{ v11 v12 v13 v14 v15 v16 Fi} v17} v4 v5 v6 v7 v8 v9 v10}}


void  S19089C10 ::v30(){vfunc_called(this, "_ZN9S19089C103v30Ev");}
void  S19089C10 ::v31(){vfunc_called(this, "_ZN9S19089C103v31Ev");}
void  S19089C10 ::v32(){vfunc_called(this, "_ZN9S19089C103v32Ev");}
S19089C10 ::~S19089C10(){ note_dtor("S19089C10", this);} // tgen
S19089C10 ::S19089C10(){ note_ctor("S19089C10", this);} // tgen

static void Test_S19089C10()
{
  extern Class_Descriptor cd_S19089C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19089C10, buf);
    S19089C10 *dp, &lv = *(dp=new (buf) S19089C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19089C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19089C10)");
    check_field_offset(lv, s19089c10f0, ABISELECT(8,4), "S19089C10.s19089c10f0");
    test_class_info(&lv, &cd_S19089C10);
    dp->~S19089C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19089C10(Test_S19089C10, "S19089C10", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN9S19089C10C1Ev();
extern void _ZN9S19089C10D1Ev();
Name_Map name_map_S19089C10[] = {
  NSPAIR(_ZN9S19089C10C1Ev),
  NSPAIR(_ZN9S19089C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI9S19089C10[];
extern void _ZN9S19089C103v30Ev();
extern void _ZN9S19089C103v31Ev();
extern void _ZN9S19089C103v32Ev();
static  VTBL_ENTRY vtc_S19089C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19089C10[0]),
  (VTBL_ENTRY)&_ZN9S19089C103v30Ev,
  (VTBL_ENTRY)&_ZN9S19089C103v31Ev,
  (VTBL_ENTRY)&_ZN9S19089C103v32Ev,
};
extern VTBL_ENTRY _ZTI9S19089C10[];
extern  VTBL_ENTRY _ZTV9S19089C10[];
Class_Descriptor cd_S19089C10 = {  "S19089C10", // class name
  0,0,//no base classes
  &(vtc_S19089C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI9S19089C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV9S19089C10),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  S19089C9  : S19089C10 {
  void *s19089c9f0;
  char s19089c9f1;
  virtual void  v33(); // _ZN8S19089C93v33Ev
  virtual void  v34(); // _ZN8S19089C93v34Ev
  virtual void  v35(); // _ZN8S19089C93v35Ev
  virtual void  v36(); // _ZN8S19089C93v36Ev
  ~S19089C9(); // tgen
  S19089C9(); // tgen
};
//SIG(-1 S19089C9) C1{ BC2{ v5 v6 v7 FC3{ BC4{ BC5{ v15 v16 v17 v18 v19 v20 Fi} v21} v8 v9 v10 v11 v12 v13 v14}} v1 v2 v3 v4 Fp Fc}


void  S19089C9 ::v33(){vfunc_called(this, "_ZN8S19089C93v33Ev");}
void  S19089C9 ::v34(){vfunc_called(this, "_ZN8S19089C93v34Ev");}
void  S19089C9 ::v35(){vfunc_called(this, "_ZN8S19089C93v35Ev");}
void  S19089C9 ::v36(){vfunc_called(this, "_ZN8S19089C93v36Ev");}
S19089C9 ::~S19089C9(){ note_dtor("S19089C9", this);} // tgen
S19089C9 ::S19089C9(){ note_ctor("S19089C9", this);} // tgen

static void Test_S19089C9()
{
  extern Class_Descriptor cd_S19089C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19089C9, buf);
    S19089C9 *dp, &lv = *(dp=new (buf) S19089C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19089C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19089C9)");
    check_base_class_offset(lv, (S19089C10*), 0, "S19089C9");
    check_field_offset(lv, s19089c9f0, ABISELECT(24,12), "S19089C9.s19089c9f0");
    check_field_offset(lv, s19089c9f1, ABISELECT(32,16), "S19089C9.s19089c9f1");
    test_class_info(&lv, &cd_S19089C9);
    dp->~S19089C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19089C9(Test_S19089C9, "S19089C9", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19089C9C1Ev();
extern void _ZN8S19089C9D1Ev();
Name_Map name_map_S19089C9[] = {
  NSPAIR(_ZN8S19089C9C1Ev),
  NSPAIR(_ZN8S19089C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19089C10;
extern VTBL_ENTRY _ZTI9S19089C10[];
extern  VTBL_ENTRY _ZTV9S19089C10[];
static Base_Class bases_S19089C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19089C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19089C9[];
extern void _ZN9S19089C103v30Ev();
extern void _ZN9S19089C103v31Ev();
extern void _ZN9S19089C103v32Ev();
extern void _ZN8S19089C93v33Ev();
extern void _ZN8S19089C93v34Ev();
extern void _ZN8S19089C93v35Ev();
extern void _ZN8S19089C93v36Ev();
static  VTBL_ENTRY vtc_S19089C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19089C9[0]),
  (VTBL_ENTRY)&_ZN9S19089C103v30Ev,
  (VTBL_ENTRY)&_ZN9S19089C103v31Ev,
  (VTBL_ENTRY)&_ZN9S19089C103v32Ev,
  (VTBL_ENTRY)&_ZN8S19089C93v33Ev,
  (VTBL_ENTRY)&_ZN8S19089C93v34Ev,
  (VTBL_ENTRY)&_ZN8S19089C93v35Ev,
  (VTBL_ENTRY)&_ZN8S19089C93v36Ev,
};
extern VTBL_ENTRY _ZTI8S19089C9[];
extern  VTBL_ENTRY _ZTV8S19089C9[];
Class_Descriptor cd_S19089C9 = {  "S19089C9", // class name
  bases_S19089C9, 1,
  &(vtc_S19089C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19089C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19089C9),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  S19089C8  : S19089C9 , S19089C6 {
  void *s19089c8f0[2];
  virtual  ~S19089C8(); // _ZN8S19089C8D1Ev
  virtual void  v37(); // _ZN8S19089C83v37Ev
  virtual void  v38(); // _ZN8S19089C83v38Ev
  virtual void  v39(); // _ZN8S19089C83v39Ev
  virtual void  v40(); // _ZN8S19089C83v40Ev
  virtual void  v41(); // _ZN8S19089C83v41Ev
  virtual void  v42(); // _ZN8S19089C83v42Ev
  virtual void  v43(); // _ZN8S19089C83v43Ev
  virtual void  v44(); // _ZN8S19089C83v44Ev
  S19089C8(); // tgen
};
//SIG(-1 S19089C8) C1{ BC2{ BC3{ v9 v10 v11 FC4{ BC5{ BC6{ v29 v30 v31 v32 v33 v34 Fi} v35} v22 v23 v24 v25 v26 v27 v28}} v12 v13 v14 v15 Fp Fc} BC7{ v16 v17 v18 v19 v20 v21 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[2]}


 S19089C8 ::~S19089C8(){ note_dtor("S19089C8", this);}
void  S19089C8 ::v37(){vfunc_called(this, "_ZN8S19089C83v37Ev");}
void  S19089C8 ::v38(){vfunc_called(this, "_ZN8S19089C83v38Ev");}
void  S19089C8 ::v39(){vfunc_called(this, "_ZN8S19089C83v39Ev");}
void  S19089C8 ::v40(){vfunc_called(this, "_ZN8S19089C83v40Ev");}
void  S19089C8 ::v41(){vfunc_called(this, "_ZN8S19089C83v41Ev");}
void  S19089C8 ::v42(){vfunc_called(this, "_ZN8S19089C83v42Ev");}
void  S19089C8 ::v43(){vfunc_called(this, "_ZN8S19089C83v43Ev");}
void  S19089C8 ::v44(){vfunc_called(this, "_ZN8S19089C83v44Ev");}
S19089C8 ::S19089C8(){ note_ctor("S19089C8", this);} // tgen

static void Test_S19089C8()
{
  extern Class_Descriptor cd_S19089C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S19089C8, buf);
    S19089C8 *dp, &lv = *(dp=new (buf) S19089C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S19089C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19089C8)");
    check_base_class_offset(lv, (S19089C10*)(S19089C9*), 0, "S19089C8");
    check_base_class_offset(lv, (S19089C9*), 0, "S19089C8");
    check_base_class_offset(lv, (S19089C6*), ABISELECT(40,20), "S19089C8");
    check_field_offset(lv, s19089c8f0, ABISELECT(56,28), "S19089C8.s19089c8f0");
    test_class_info(&lv, &cd_S19089C8);
    dp->~S19089C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19089C8(Test_S19089C8, "S19089C8", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S19089C8C1Ev();
extern void _ZN8S19089C8D1Ev();
Name_Map name_map_S19089C8[] = {
  NSPAIR(_ZN8S19089C8C1Ev),
  NSPAIR(_ZN8S19089C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19089C10;
extern VTBL_ENTRY _ZTI9S19089C10[];
extern  VTBL_ENTRY _ZTV9S19089C10[];
extern Class_Descriptor cd_S19089C9;
extern VTBL_ENTRY _ZTI8S19089C9[];
extern  VTBL_ENTRY _ZTV8S19089C9[];
extern Class_Descriptor cd_S19089C6;
extern VTBL_ENTRY _ZTI8S19089C6[];
extern  VTBL_ENTRY _ZTV8S19089C6[];
static Base_Class bases_S19089C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19089C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19089C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S19089C6,    ABISELECT(40,20), //bcp->offset
    19, //bcp->virtual_function_table_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 _ZTI8S19089C8[];
extern void _ZN9S19089C103v30Ev();
extern void _ZN9S19089C103v31Ev();
extern void _ZN9S19089C103v32Ev();
extern void _ZN8S19089C93v33Ev();
extern void _ZN8S19089C93v34Ev();
extern void _ZN8S19089C93v35Ev();
extern void _ZN8S19089C93v36Ev();
extern void _ZN8S19089C8D1Ev();
extern void _ZN8S19089C8D0Ev();
extern void _ZN8S19089C83v37Ev();
extern void _ZN8S19089C83v38Ev();
extern void _ZN8S19089C83v39Ev();
extern void _ZN8S19089C83v40Ev();
extern void _ZN8S19089C83v41Ev();
extern void _ZN8S19089C83v42Ev();
extern void _ZN8S19089C83v43Ev();
extern void _ZN8S19089C83v44Ev();
extern void _ZN8S19089C62v7Ev();
extern void _ZN8S19089C62v8Ev();
extern void _ZN8S19089C62v9Ev();
extern void _ZN8S19089C63v10Ev();
extern void _ZN8S19089C63v11Ev();
extern void _ZN8S19089C63v12Ev();
static  VTBL_ENTRY vtc_S19089C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19089C8[0]),
  (VTBL_ENTRY)&_ZN9S19089C103v30Ev,
  (VTBL_ENTRY)&_ZN9S19089C103v31Ev,
  (VTBL_ENTRY)&_ZN9S19089C103v32Ev,
  (VTBL_ENTRY)&_ZN8S19089C93v33Ev,
  (VTBL_ENTRY)&_ZN8S19089C93v34Ev,
  (VTBL_ENTRY)&_ZN8S19089C93v35Ev,
  (VTBL_ENTRY)&_ZN8S19089C93v36Ev,
  (VTBL_ENTRY)&_ZN8S19089C8D1Ev,
  (VTBL_ENTRY)&_ZN8S19089C8D0Ev,
  (VTBL_ENTRY)&_ZN8S19089C83v37Ev,
  (VTBL_ENTRY)&_ZN8S19089C83v38Ev,
  (VTBL_ENTRY)&_ZN8S19089C83v39Ev,
  (VTBL_ENTRY)&_ZN8S19089C83v40Ev,
  (VTBL_ENTRY)&_ZN8S19089C83v41Ev,
  (VTBL_ENTRY)&_ZN8S19089C83v42Ev,
  (VTBL_ENTRY)&_ZN8S19089C83v43Ev,
  (VTBL_ENTRY)&_ZN8S19089C83v44Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19089C8[0]),
  (VTBL_ENTRY)&_ZN8S19089C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v12Ev,
};
extern VTBL_ENTRY _ZTI8S19089C8[];
extern  VTBL_ENTRY _ZTV8S19089C8[];
Class_Descriptor cd_S19089C8 = {  "S19089C8", // class name
  bases_S19089C8, 3,
  &(vtc_S19089C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S19089C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19089C8),27, //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  S19089C1  : virtual S19089C2 , virtual S19089C8 {
  ::S19089C6 s19089c1f0;
  virtual  ~S19089C1(); // _ZN8S19089C1D2Ev
  virtual void  v1(); // _ZN8S19089C12v1Ev
  virtual void  v2(); // _ZN8S19089C12v2Ev
  virtual void  v3(); // _ZN8S19089C12v3Ev
  virtual void  v4(); // _ZN8S19089C12v4Ev
  virtual void  v5(); // _ZN8S19089C12v5Ev
  virtual void  v6(); // _ZN8S19089C12v6Ev
  S19089C1(); // tgen
};
//SIG(1 S19089C1) C1{ VBC2{ BC3{ BC4{ VBC5{ BC6{ v7 v8 v9 v10 v11 v12 Fi} v13} vd v14 v15 v16 v17 v18 v19 v20 v21 Fi Fs} BC6 v22 v23 v24 v25} vd v26 v27 v28 v29 FC7{}} VBC8{ BC9{ BC10{ v30 v31 v32 FC11{ BC12{ BC13{ v52 v53 v54 v55 v56 v57 Fi} v58} v45 v46 v47 v48 v49 v50 v51}} v33 v34 v35 v36 Fp Fc} BC6 vd v37 v38 v39 v40 v41 v42 v43 v44 Fp[2]} vd v1 v2 v3 v4 v5 v6 FC6}


 S19089C1 ::~S19089C1(){ note_dtor("S19089C1", this);}
void  S19089C1 ::v1(){vfunc_called(this, "_ZN8S19089C12v1Ev");}
void  S19089C1 ::v2(){vfunc_called(this, "_ZN8S19089C12v2Ev");}
void  S19089C1 ::v3(){vfunc_called(this, "_ZN8S19089C12v3Ev");}
void  S19089C1 ::v4(){vfunc_called(this, "_ZN8S19089C12v4Ev");}
void  S19089C1 ::v5(){vfunc_called(this, "_ZN8S19089C12v5Ev");}
void  S19089C1 ::v6(){vfunc_called(this, "_ZN8S19089C12v6Ev");}
S19089C1 ::S19089C1(){ note_ctor("S19089C1", this);} // tgen

static void Test_S19089C1()
{
  extern Class_Descriptor cd_S19089C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,21)];
    init_test(&cd_S19089C1, buf);
    S19089C1 *dp, &lv = *(dp=new (buf) S19089C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,80), "sizeof(S19089C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19089C1)");
    check_base_class_offset(lv, (S19089C6*)(S19089C5*), ABISELECT(56,36), "S19089C1");
    check_base_class_offset(lv, (S19089C5*)(S19089C4*)(S19089C3*)(S19089C2*), ABISELECT(56,36), "S19089C1");
    check_base_class_offset(lv, (S19089C4*)(S19089C3*)(S19089C2*), ABISELECT(24,12), "S19089C1");
    /*is_ambiguous_... S19089C3::S19089C6 */ AMB_check_base_class_offset(lv, (S19089C6*)(S19089C3*)(S19089C2*), ABISELECT(40,24), "S19089C1");
    check_base_class_offset(lv, (S19089C3*)(S19089C2*), ABISELECT(24,12), "S19089C1");
    check_base_class_offset(lv, (S19089C2*), ABISELECT(24,12), "S19089C1");
    check_base_class_offset(lv, (S19089C10*)(S19089C9*)(S19089C8*), ABISELECT(72,44), "S19089C1");
    check_base_class_offset(lv, (S19089C9*)(S19089C8*), ABISELECT(72,44), "S19089C1");
    check_base_class_offset(lv, (S19089C6*)(S19089C8*), ABISELECT(112,64), "S19089C1");
    check_base_class_offset(lv, (S19089C8*), ABISELECT(72,44), "S19089C1");
    check_field_offset(lv, s19089c1f0, ABISELECT(8,4), "S19089C1.s19089c1f0");
    test_class_info(&lv, &cd_S19089C1);
    dp->~S19089C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19089C1(Test_S19089C1, "S19089C1", ABISELECT(144,80));

#else // __cplusplus

extern void _ZN8S19089C1C1Ev();
extern void _ZN8S19089C1D2Ev();
Name_Map name_map_S19089C1[] = {
  NSPAIR(_ZN8S19089C1C1Ev),
  NSPAIR(_ZN8S19089C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19089C6;
extern VTBL_ENTRY _ZTI8S19089C6[];
extern  VTBL_ENTRY _ZTV8S19089C6[];
extern Class_Descriptor cd_S19089C5;
extern VTBL_ENTRY _ZTI8S19089C5[];
extern  VTBL_ENTRY _ZTV8S19089C5[];
extern Class_Descriptor cd_S19089C4;
extern VTBL_ENTRY _ZTI8S19089C4[];
extern  VTBL_ENTRY _ZTV8S19089C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19089C4[];
extern Class_Descriptor cd_S19089C6;
extern VTBL_ENTRY _ZTI8S19089C6[];
extern  VTBL_ENTRY _ZTV8S19089C6[];
extern Class_Descriptor cd_S19089C3;
extern VTBL_ENTRY _ZTI8S19089C3[];
extern  VTBL_ENTRY _ZTV8S19089C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19089C3[];
extern Class_Descriptor cd_S19089C2;
extern VTBL_ENTRY _ZTI8S19089C2[];
extern  VTBL_ENTRY _ZTV8S19089C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19089C2[];
extern Class_Descriptor cd_S19089C10;
extern VTBL_ENTRY _ZTI9S19089C10[];
extern  VTBL_ENTRY _ZTV9S19089C10[];
extern Class_Descriptor cd_S19089C9;
extern VTBL_ENTRY _ZTI8S19089C9[];
extern  VTBL_ENTRY _ZTV8S19089C9[];
extern Class_Descriptor cd_S19089C6;
extern VTBL_ENTRY _ZTI8S19089C6[];
extern  VTBL_ENTRY _ZTV8S19089C6[];
extern Class_Descriptor cd_S19089C8;
extern VTBL_ENTRY _ZTI8S19089C8[];
extern  VTBL_ENTRY _ZTV8S19089C8[];
static Base_Class bases_S19089C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19089C6,    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
    1, //immediately_derived
  0, 0},
  {&cd_S19089C5,    ABISELECT(56,36), //bcp->offset
    65, //bcp->virtual_function_table_offset
    9, //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
    2, //immediately_derived
  0, 1},
  {&cd_S19089C4,    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
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19089C6,    ABISELECT(40,24), //bcp->offset
    57, //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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19089C3,    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
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19089C2,    ABISELECT(24,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    26, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19089C10,    ABISELECT(72,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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S19089C9,    ABISELECT(72,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
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19089C6,    ABISELECT(112,64), //bcp->offset
    122, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19089C8,    ABISELECT(72,44), //bcp->offset
    81, //bcp->virtual_function_table_offset
    24, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19089C1[];
extern void _ZN8S19089C1D1Ev();
extern void _ZN8S19089C1D0Ev();
extern void _ZN8S19089C12v1Ev();
extern void _ZN8S19089C12v2Ev();
extern void _ZN8S19089C12v3Ev();
extern void _ZN8S19089C12v4Ev();
extern void _ZN8S19089C12v5Ev();
extern void _ZN8S19089C12v6Ev();
extern void ABISELECT(_ZTv0_n32_N8S19089C1D1Ev,_ZTv0_n16_N8S19089C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S19089C1D1Ev,_ZThn12_N8S19089C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19089C1D0Ev,_ZTv0_n16_N8S19089C1D0Ev)();
extern void ABISELECT(_ZThn24_N8S19089C1D0Ev,_ZThn12_N8S19089C1D0Ev)() __attribute__((weak));
extern void _ZN8S19089C43v14Ev();
extern void _ZN8S19089C43v15Ev();
extern void _ZN8S19089C43v16Ev();
extern void _ZN8S19089C43v17Ev();
extern void _ZN8S19089C43v18Ev();
extern void _ZN8S19089C43v19Ev();
extern void _ZN8S19089C43v20Ev();
extern void _ZN8S19089C43v21Ev();
extern void _ZN8S19089C33v22Ev();
extern void _ZN8S19089C33v23Ev();
extern void _ZN8S19089C33v24Ev();
extern void _ZN8S19089C33v25Ev();
extern void _ZN8S19089C23v26Ev();
extern void _ZN8S19089C23v27Ev();
extern void _ZN8S19089C23v28Ev();
extern void _ZN8S19089C23v29Ev();
extern void _ZN8S19089C62v7Ev();
extern void _ZN8S19089C62v8Ev();
extern void _ZN8S19089C62v9Ev();
extern void _ZN8S19089C63v10Ev();
extern void _ZN8S19089C63v11Ev();
extern void _ZN8S19089C63v12Ev();
extern void _ZN8S19089C62v7Ev();
extern void _ZN8S19089C62v8Ev();
extern void _ZN8S19089C62v9Ev();
extern void _ZN8S19089C63v10Ev();
extern void _ZN8S19089C63v11Ev();
extern void _ZN8S19089C63v12Ev();
extern void _ZN8S19089C53v13Ev();
extern void _ZN9S19089C103v30Ev();
extern void _ZN9S19089C103v31Ev();
extern void _ZN9S19089C103v32Ev();
extern void _ZN8S19089C93v33Ev();
extern void _ZN8S19089C93v34Ev();
extern void _ZN8S19089C93v35Ev();
extern void _ZN8S19089C93v36Ev();
extern void ABISELECT(_ZTv0_n80_N8S19089C1D1Ev,_ZTv0_n40_N8S19089C1D1Ev)();
extern void ABISELECT(_ZThn72_N8S19089C1D1Ev,_ZThn44_N8S19089C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19089C1D0Ev,_ZTv0_n40_N8S19089C1D0Ev)();
extern void ABISELECT(_ZThn72_N8S19089C1D0Ev,_ZThn44_N8S19089C1D0Ev)() __attribute__((weak));
extern void _ZN8S19089C83v37Ev();
extern void _ZN8S19089C83v38Ev();
extern void _ZN8S19089C83v39Ev();
extern void _ZN8S19089C83v40Ev();
extern void _ZN8S19089C83v41Ev();
extern void _ZN8S19089C83v42Ev();
extern void _ZN8S19089C83v43Ev();
extern void _ZN8S19089C83v44Ev();
extern void _ZN8S19089C62v7Ev();
extern void _ZN8S19089C62v8Ev();
extern void _ZN8S19089C62v9Ev();
extern void _ZN8S19089C63v10Ev();
extern void _ZN8S19089C63v11Ev();
extern void _ZN8S19089C63v12Ev();
static  VTBL_ENTRY vtc_S19089C1[] = {
  ABISELECT(72,44),
  ABISELECT(56,36),
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19089C1[0]),
  (VTBL_ENTRY)&_ZN8S19089C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19089C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19089C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19089C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19089C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19089C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19089C12v5Ev,
  (VTBL_ENTRY)&_ZN8S19089C12v6Ev,
  0,
  0,
  0,
  0,
  ABISELECT(16,12),
  ABISELECT(16,12),
  ABISELECT(16,12),
  ABISELECT(16,12),
  ABISELECT(16,12),
  ABISELECT(16,12),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(32,24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19089C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19089C1D1Ev,_ZTv0_n16_N8S19089C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19089C1D0Ev,_ZTv0_n16_N8S19089C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19089C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v21Ev,
  (VTBL_ENTRY)&_ZN8S19089C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19089C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19089C33v24Ev,
  (VTBL_ENTRY)&_ZN8S19089C33v25Ev,
  (VTBL_ENTRY)&_ZN8S19089C23v26Ev,
  (VTBL_ENTRY)&_ZN8S19089C23v27Ev,
  (VTBL_ENTRY)&_ZN8S19089C23v28Ev,
  (VTBL_ENTRY)&_ZN8S19089C23v29Ev,
  ABISELECT(-40,-24),
  (VTBL_ENTRY)&(_ZTI8S19089C1[0]),
  (VTBL_ENTRY)&_ZN8S19089C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v12Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI8S19089C1[0]),
  (VTBL_ENTRY)&_ZN8S19089C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19089C53v13Ev,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI8S19089C1[0]),
  (VTBL_ENTRY)&_ZN9S19089C103v30Ev,
  (VTBL_ENTRY)&_ZN9S19089C103v31Ev,
  (VTBL_ENTRY)&_ZN9S19089C103v32Ev,
  (VTBL_ENTRY)&_ZN8S19089C93v33Ev,
  (VTBL_ENTRY)&_ZN8S19089C93v34Ev,
  (VTBL_ENTRY)&_ZN8S19089C93v35Ev,
  (VTBL_ENTRY)&_ZN8S19089C93v36Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19089C1D1Ev,_ZTv0_n40_N8S19089C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19089C1D0Ev,_ZTv0_n40_N8S19089C1D0Ev),
  (VTBL_ENTRY)&_ZN8S19089C83v37Ev,
  (VTBL_ENTRY)&_ZN8S19089C83v38Ev,
  (VTBL_ENTRY)&_ZN8S19089C83v39Ev,
  (VTBL_ENTRY)&_ZN8S19089C83v40Ev,
  (VTBL_ENTRY)&_ZN8S19089C83v41Ev,
  (VTBL_ENTRY)&_ZN8S19089C83v42Ev,
  (VTBL_ENTRY)&_ZN8S19089C83v43Ev,
  (VTBL_ENTRY)&_ZN8S19089C83v44Ev,
  ABISELECT(-112,-64),
  (VTBL_ENTRY)&(_ZTI8S19089C1[0]),
  (VTBL_ENTRY)&_ZN8S19089C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v12Ev,
};
extern VTBL_ENTRY _ZTV8S19089C1[];
extern void _ZN8S19089C2D1Ev();
extern void _ZN8S19089C2D0Ev();
extern void _ZN8S19089C43v14Ev();
extern void _ZN8S19089C43v15Ev();
extern void _ZN8S19089C43v16Ev();
extern void _ZN8S19089C43v17Ev();
extern void _ZN8S19089C43v18Ev();
extern void _ZN8S19089C43v19Ev();
extern void _ZN8S19089C43v20Ev();
extern void _ZN8S19089C43v21Ev();
extern void _ZN8S19089C33v22Ev();
extern void _ZN8S19089C33v23Ev();
extern void _ZN8S19089C33v24Ev();
extern void _ZN8S19089C33v25Ev();
extern void _ZN8S19089C23v26Ev();
extern void _ZN8S19089C23v27Ev();
extern void _ZN8S19089C23v28Ev();
extern void _ZN8S19089C23v29Ev();
static  VTBL_ENTRY _tg__ZTV8S19089C2__8S19089C1[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19089C2[0]),
  (VTBL_ENTRY)&_ZN8S19089C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19089C2D0Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v21Ev,
  (VTBL_ENTRY)&_ZN8S19089C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19089C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19089C33v24Ev,
  (VTBL_ENTRY)&_ZN8S19089C33v25Ev,
  (VTBL_ENTRY)&_ZN8S19089C23v26Ev,
  (VTBL_ENTRY)&_ZN8S19089C23v27Ev,
  (VTBL_ENTRY)&_ZN8S19089C23v28Ev,
  (VTBL_ENTRY)&_ZN8S19089C23v29Ev,
};
extern void _ZN8S19089C3D1Ev();
extern void _ZN8S19089C3D0Ev();
extern void _ZN8S19089C43v14Ev();
extern void _ZN8S19089C43v15Ev();
extern void _ZN8S19089C43v16Ev();
extern void _ZN8S19089C43v17Ev();
extern void _ZN8S19089C43v18Ev();
extern void _ZN8S19089C43v19Ev();
extern void _ZN8S19089C43v20Ev();
extern void _ZN8S19089C43v21Ev();
extern void _ZN8S19089C33v22Ev();
extern void _ZN8S19089C33v23Ev();
extern void _ZN8S19089C33v24Ev();
extern void _ZN8S19089C33v25Ev();
static  VTBL_ENTRY _tg__ZTV8S19089C38S19089C2__8S19089C1[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19089C3[0]),
  (VTBL_ENTRY)&_ZN8S19089C3D1Ev,
  (VTBL_ENTRY)&_ZN8S19089C3D0Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v21Ev,
  (VTBL_ENTRY)&_ZN8S19089C33v22Ev,
  (VTBL_ENTRY)&_ZN8S19089C33v23Ev,
  (VTBL_ENTRY)&_ZN8S19089C33v24Ev,
  (VTBL_ENTRY)&_ZN8S19089C33v25Ev,
};
extern void _ZN8S19089C4D1Ev();
extern void _ZN8S19089C4D0Ev();
extern void _ZN8S19089C43v14Ev();
extern void _ZN8S19089C43v15Ev();
extern void _ZN8S19089C43v16Ev();
extern void _ZN8S19089C43v17Ev();
extern void _ZN8S19089C43v18Ev();
extern void _ZN8S19089C43v19Ev();
extern void _ZN8S19089C43v20Ev();
extern void _ZN8S19089C43v21Ev();
static  VTBL_ENTRY _tg__ZTV8S19089C48S19089C38S19089C2__8S19089C1[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI8S19089C4[0]),
  (VTBL_ENTRY)&_ZN8S19089C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19089C4D0Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v14Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v15Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v16Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v17Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v18Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v19Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v20Ev,
  (VTBL_ENTRY)&_ZN8S19089C43v21Ev,
};
extern void _ZN8S19089C62v7Ev();
extern void _ZN8S19089C62v8Ev();
extern void _ZN8S19089C62v9Ev();
extern void _ZN8S19089C63v10Ev();
extern void _ZN8S19089C63v11Ev();
extern void _ZN8S19089C63v12Ev();
extern void _ZN8S19089C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19089C5__8S19089C48S19089C38S19089C2__8S19089C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S19089C4[0]),
  (VTBL_ENTRY)&_ZN8S19089C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19089C53v13Ev,
};
extern void _ZN8S19089C62v7Ev();
extern void _ZN8S19089C62v8Ev();
extern void _ZN8S19089C62v9Ev();
extern void _ZN8S19089C63v10Ev();
extern void _ZN8S19089C63v11Ev();
extern void _ZN8S19089C63v12Ev();
extern void _ZN8S19089C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19089C5__8S19089C38S19089C2__8S19089C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S19089C3[0]),
  (VTBL_ENTRY)&_ZN8S19089C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19089C53v13Ev,
};
extern void _ZN8S19089C62v7Ev();
extern void _ZN8S19089C62v8Ev();
extern void _ZN8S19089C62v9Ev();
extern void _ZN8S19089C63v10Ev();
extern void _ZN8S19089C63v11Ev();
extern void _ZN8S19089C63v12Ev();
extern void _ZN8S19089C53v13Ev();
static  VTBL_ENTRY _tg__ZTV8S19089C5__8S19089C2__8S19089C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S19089C2[0]),
  (VTBL_ENTRY)&_ZN8S19089C62v7Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v8Ev,
  (VTBL_ENTRY)&_ZN8S19089C62v9Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v10Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v11Ev,
  (VTBL_ENTRY)&_ZN8S19089C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19089C53v13Ev,
};
static  VTT_ENTRY vtt_S19089C1[] = {
  {&(_ZTV8S19089C1[5]),  5,130},
  {&(_ZTV8S19089C1[39]),  39,130},
  {&(_ZTV8S19089C1[74]),  74,130},
  {&(_ZTV8S19089C1[59]),  59,130},
  {&(_ZTV8S19089C1[105]),  105,130},
  {&(_ZTV8S19089C1[124]),  124,130},
  {&(_tg__ZTV8S19089C2__8S19089C1[3]),  3,21},
  {&(_tg__ZTV8S19089C38S19089C2__8S19089C1[3]),  3,17},
  {&(_tg__ZTV8S19089C48S19089C38S19089C2__8S19089C1[3]),  3,13},
  {&(_tg__ZTV8S19089C5__8S19089C48S19089C38S19089C2__8S19089C1[9]),  9,16},
  {&(_tg__ZTV8S19089C5__8S19089C38S19089C2__8S19089C1[9]),  9,16},
  {&(_tg__ZTV8S19089C5__8S19089C2__8S19089C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S19089C1[];
extern  VTBL_ENTRY _ZTV8S19089C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19089C1[];
static VTBL_ENTRY alt_thunk_names140[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19089C1D0Ev,_ZTv0_n40_N8S19089C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19089C1D0Ev,_ZThn44_N8S19089C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19089C1D1Ev,_ZTv0_n40_N8S19089C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S19089C1D1Ev,_ZThn44_N8S19089C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19089C1D0Ev,_ZTv0_n16_N8S19089C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19089C1D0Ev,_ZThn12_N8S19089C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19089C1D1Ev,_ZTv0_n16_N8S19089C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19089C1D1Ev,_ZThn12_N8S19089C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19089C1 = {  "S19089C1", // class name
  bases_S19089C1, 10,
  &(vtc_S19089C1[0]), // expected_vtbl_contents
  &(vtt_S19089C1[0]), // expected_vtt_contents
  ABISELECT(144,80), // object size
  NSPAIRA(_ZTI8S19089C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19089C1),130, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19089C1),12, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names140,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7829C4  : virtual S19566C5 , S19566C6 {
  ::S19566C5 s7829c4f0[3];
  int s7829c4f1[4];
  ~S7829C4(); // tgen
  S7829C4(); // tgen
};
//SIG(-1 S7829C4) C1{ VBC2{ m FL Fp FC3{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC3 FC2[3] Fi[4]}


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

static void Test_S7829C4()
{
  extern Class_Descriptor cd_S7829C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(198,243)];
    init_test(&cd_S7829C4, buf);
    S7829C4 *dp, &lv = *(dp=new (buf) S7829C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1576,968), "sizeof(S7829C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7829C4)");
    check_base_class_offset(lv, (S19566C5*), ABISELECT(1216,748), "S7829C4");
    check_base_class_offset(lv, (S19566C6*), ABISELECT(8,4), "S7829C4");
    check_field_offset(lv, s7829c4f0, ABISELECT(120,72), "S7829C4.s7829c4f0");
    check_field_offset(lv, s7829c4f1, ABISELECT(1200,732), "S7829C4.s7829c4f1");
    test_class_info(&lv, &cd_S7829C4);
    dp->~S7829C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7829C4(Test_S7829C4, "S7829C4", ABISELECT(1576,968));

#else // __cplusplus

extern void _ZN7S7829C4C1Ev();
extern void _ZN7S7829C4D1Ev();
Name_Map name_map_S7829C4[] = {
  NSPAIR(_ZN7S7829C4C1Ev),
  NSPAIR(_ZN7S7829C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
static Base_Class bases_S7829C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19566C6,    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 _ZTI7S7829C4[];
static  VTBL_ENTRY vtc_S7829C4[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
extern VTBL_ENTRY _ZTV7S7829C4[];
static  VTT_ENTRY vtt_S7829C4[] = {
  {&(_ZTV7S7829C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
Class_Descriptor cd_S7829C4 = {  "S7829C4", // class name
  bases_S7829C4, 2,
  &(vtc_S7829C4[0]), // expected_vtbl_contents
  &(vtt_S7829C4[0]), // expected_vtt_contents
  ABISELECT(1576,968), // object size
  NSPAIRA(_ZTI7S7829C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7829C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7829C4),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  S7829C7  : S7829C4 , S19566C6 , S19566C5 {
  __tsi64 s7829c7f0[6];
  int s7829c7f1;
  ::S19566C5 s7829c7f2;
  void *s7829c7f3;
  ::S19566C6 s7829c7f4;
  int s7829c7f5;
  void *s7829c7f6[7];
  virtual  ~S7829C7(); // _ZN7S7829C7D2Ev
  S7829C7(); // tgen
};
//SIG(-1 S7829C7) C1{ BC2{ VBC3{ m FL Fp FC4{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC4 FC3[3] Fi[4]} BC4 BC3 vd FL[6] Fi FC3 Fp FC4 Fi Fp[7]}


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

static void Test_S7829C7()
{
  extern Class_Descriptor cd_S7829C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(332,409)];
    init_test(&cd_S7829C7, buf);
    S7829C7 *dp, &lv = *(dp=new (buf) S7829C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2648,1632), "sizeof(S7829C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7829C7)");
    check_base_class_offset(lv, (S19566C5*)(S7829C4*), ABISELECT(2288,1412), "S7829C7");
    check_base_class_offset(lv, (S19566C6*)(S7829C4*), ABISELECT(8,4), "S7829C7");
    check_base_class_offset(lv, (S7829C4*), 0, "S7829C7");
    /*is_ambiguous_... S7829C7::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*), ABISELECT(1216,748), "S7829C7");
    /*is_ambiguous_... S7829C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(1328,816), "S7829C7");
    check_field_offset(lv, s7829c7f0, ABISELECT(1688,1036), "S7829C7.s7829c7f0");
    check_field_offset(lv, s7829c7f1, ABISELECT(1736,1084), "S7829C7.s7829c7f1");
    check_field_offset(lv, s7829c7f2, ABISELECT(1744,1088), "S7829C7.s7829c7f2");
    check_field_offset(lv, s7829c7f3, ABISELECT(2104,1308), "S7829C7.s7829c7f3");
    check_field_offset(lv, s7829c7f4, ABISELECT(2112,1312), "S7829C7.s7829c7f4");
    check_field_offset(lv, s7829c7f5, ABISELECT(2224,1380), "S7829C7.s7829c7f5");
    check_field_offset(lv, s7829c7f6, ABISELECT(2232,1384), "S7829C7.s7829c7f6");
    test_class_info(&lv, &cd_S7829C7);
    dp->~S7829C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7829C7(Test_S7829C7, "S7829C7", ABISELECT(2648,1632));

#else // __cplusplus

extern void _ZN7S7829C7C1Ev();
extern void _ZN7S7829C7D2Ev();
Name_Map name_map_S7829C7[] = {
  NSPAIR(_ZN7S7829C7C1Ev),
  NSPAIR(_ZN7S7829C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S7829C4;
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
static Base_Class bases_S7829C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    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_S7829C4,    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_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S7829C7[];
extern void _ZN7S7829C7D1Ev();
extern void _ZN7S7829C7D0Ev();
static  VTBL_ENTRY vtc_S7829C7[] = {
  ABISELECT(2288,1412),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C7[0]),
  (VTBL_ENTRY)&_ZN7S7829C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C7D0Ev,
};
extern VTBL_ENTRY _ZTV7S7829C7[];
static  VTBL_ENTRY _tg__ZTV7S7829C4__7S7829C7[] = {
  ABISELECT(2288,1412),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
static  VTT_ENTRY vtt_S7829C7[] = {
  {&(_ZTV7S7829C7[3]),  3,5},
  {&(_tg__ZTV7S7829C4__7S7829C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7829C7[];
extern  VTBL_ENTRY _ZTV7S7829C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C7[];
Class_Descriptor cd_S7829C7 = {  "S7829C7", // class name
  bases_S7829C7, 5,
  &(vtc_S7829C7[0]), // expected_vtbl_contents
  &(vtt_S7829C7[0]), // expected_vtt_contents
  ABISELECT(2648,1632), // object size
  NSPAIRA(_ZTI7S7829C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7829C7),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7829C7),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  S7829C3  : virtual S7829C4 , S19566C6 , S19566C5 , S7829C7 {
  int s7829c3f0;
  ::S7829C4 s7829c3f1;
  short s7829c3f2;
  void *s7829c3f3;
  int s7829c3f4[5];
  ~S7829C3(); // tgen
  S7829C3(); // tgen
};
//SIG(-1 S7829C3) C1{ VBC2{ VBC3{ m FL Fp FC4{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC4 FC3[3] Fi[4]} BC4 BC3 BC5{ BC2 BC4 BC3 vd FL[6] Fi FC3 Fp FC4 Fi Fp[7]} Fi FC2 Fs Fp Fi[5]}


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

static void Test_S7829C3()
{
  extern Class_Descriptor cd_S7829C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(746,918)];
    init_test(&cd_S7829C3, buf);
    S7829C3 *dp, &lv = *(dp=new (buf) S7829C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5960,3668), "sizeof(S7829C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7829C3)");
    /*is_ambiguous_... S7829C3::S7829C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C4*), ABISELECT(5600,3448), "S7829C3");
    check_base_class_offset(lv, (S19566C5*)(S7829C4*)(S7829C7*), ABISELECT(5600,3448), "S7829C3");
    /*is_ambiguous_... S7829C3::S7829C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C4*), ABISELECT(4392,2704), "S7829C3");
    /*is_ambiguous_... S7829C3::S7829C4 */ AMB_check_base_class_offset(lv, (S7829C4*), ABISELECT(4384,2700), "S7829C3");
    /*is_ambiguous_... S7829C3::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*), ABISELECT(2288,1412), "S7829C3");
    /*is_ambiguous_... S7829C3::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(2400,1480), "S7829C3");
    check_base_class_offset(lv, (S19566C6*)(S7829C4*)(S7829C7*), ABISELECT(8,4), "S7829C3");
    check_base_class_offset(lv, (S7829C4*)(S7829C7*), 0, "S7829C3");
    /*is_ambiguous_... S7829C7::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C7*), ABISELECT(1216,748), "S7829C3");
    /*is_ambiguous_... S7829C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C7*), ABISELECT(1328,816), "S7829C3");
    check_base_class_offset(lv, (S7829C7*), 0, "S7829C3");
    check_field_offset(lv, s7829c3f0, ABISELECT(2760,1700), "S7829C3.s7829c3f0");
    check_field_offset(lv, s7829c3f1, ABISELECT(2768,1704), "S7829C3.s7829c3f1");
    check_field_offset(lv, s7829c3f2, ABISELECT(4344,2672), "S7829C3.s7829c3f2");
    check_field_offset(lv, s7829c3f3, ABISELECT(4352,2676), "S7829C3.s7829c3f3");
    check_field_offset(lv, s7829c3f4, ABISELECT(4360,2680), "S7829C3.s7829c3f4");
    test_class_info(&lv, &cd_S7829C3);
    dp->~S7829C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7829C3(Test_S7829C3, "S7829C3", ABISELECT(5960,3668));

#else // __cplusplus

extern void _ZN7S7829C3C1Ev();
extern void _ZN7S7829C3D1Ev();
Name_Map name_map_S7829C3[] = {
  NSPAIR(_ZN7S7829C3C1Ev),
  NSPAIR(_ZN7S7829C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S7829C4;
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S7829C4;
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S7829C7;
extern VTBL_ENTRY _ZTI7S7829C7[];
extern  VTBL_ENTRY _ZTV7S7829C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C7[];
static Base_Class bases_S7829C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(5600,3448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(4392,2704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C4,    ABISELECT(4384,2700), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19566C5,    ABISELECT(2400,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
  1, 0},
  {&cd_S19566C6,    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
    6, //immediately_derived
  0, 0},
  {&cd_S7829C4,    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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C7,    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 _ZTI7S7829C3[];
extern void _ZN7S7829C3D1Ev();
extern void _ZN7S7829C3D0Ev();
static  VTBL_ENTRY vtc_S7829C3[] = {
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C3[0]),
  (VTBL_ENTRY)&_ZN7S7829C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C3D0Ev,
  ABISELECT(1216,748),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI7S7829C3[0]),
};
extern VTBL_ENTRY _ZTV7S7829C3[];
extern void _ZN7S7829C7D1Ev();
extern void _ZN7S7829C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C7__7S7829C3[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C7[0]),
  (VTBL_ENTRY)&_ZN7S7829C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7829C47S7829C7__A1__7S7829C3[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7829C4__7S7829C3[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
static  VTT_ENTRY vtt_S7829C3[] = {
  {&(_ZTV7S7829C3[4]),  4,9},
  {&(_tg__ZTV7S7829C7__7S7829C3[3]),  3,5},
  {&(_tg__ZTV7S7829C47S7829C7__A1__7S7829C3[3]),  3,3},
  {&(_ZTV7S7829C3[9]),  9,9},
  {&(_tg__ZTV7S7829C4__7S7829C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7829C3[];
extern  VTBL_ENTRY _ZTV7S7829C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C3[];
Class_Descriptor cd_S7829C3 = {  "S7829C3", // class name
  bases_S7829C3, 10,
  &(vtc_S7829C3[0]), // expected_vtbl_contents
  &(vtt_S7829C3[0]), // expected_vtt_contents
  ABISELECT(5960,3668), // object size
  NSPAIRA(_ZTI7S7829C3),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7829C3),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7829C3),5, //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  S7829C8  : S7829C3 , S7829C4 , S7829C7 , S19566C5 {
  ::S3052C22_nt s7829c8f0;
  int s7829c8f1[2];
  long s7829c8f2;
  void *s7829c8f3;
  virtual  ~S7829C8(); // _ZN7S7829C8D2Ev
  virtual void  v1(); // _ZN7S7829C82v1Ev
  S7829C8(); // tgen
};
//SIG(-1 S7829C8) C1{ BC2{ VBC3{ VBC4{ m FL Fp FC5{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC5 FC4[3] Fi[4]} BC5 BC4 BC6{ BC3 BC5 BC4 vd FL[6] Fi FC4 Fp FC5 Fi Fp[7]} Fi FC3 Fs Fp Fi[5]} BC3 BC6 BC4 vd v1 FC7{} Fi[2] Fl Fp}


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

static void Test_S7829C8()
{
  extern Class_Descriptor cd_S7829C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1233,1518)];
    init_test(&cd_S7829C8, buf);
    S7829C8 *dp, &lv = *(dp=new (buf) S7829C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9856,6068), "sizeof(S7829C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7829C8)");
    /*is_ambiguous_... S7829C8::S7829C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C4*), ABISELECT(9496,5848), "S7829C8");
    check_base_class_offset(lv, (S19566C5*)(S7829C4*)(S7829C7*)(S7829C3*), ABISELECT(9496,5848), "S7829C8");
    /*is_ambiguous_... S7829C8::S7829C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C4*), ABISELECT(9496,5848), "S7829C8");
    /*is_ambiguous_... S7829C8::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C4*)(S7829C7*), ABISELECT(9496,5848), "S7829C8");
    /*is_ambiguous_... S7829C8::S7829C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C4*), ABISELECT(8288,5104), "S7829C8");
    /*is_ambiguous_... S7829C3::S7829C4 */ AMB_check_base_class_offset(lv, (S7829C4*)(S7829C3*), ABISELECT(8280,5100), "S7829C8");
    /*is_ambiguous_... S7829C3::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C3*), ABISELECT(2288,1412), "S7829C8");
    /*is_ambiguous_... S7829C3::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C3*), ABISELECT(2400,1480), "S7829C8");
    check_base_class_offset(lv, (S19566C6*)(S7829C4*)(S7829C7*)(S7829C3*), ABISELECT(8,4), "S7829C8");
    check_base_class_offset(lv, (S7829C4*)(S7829C7*)(S7829C3*), 0, "S7829C8");
    /*is_ambiguous_... S7829C7::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C7*)(S7829C3*), ABISELECT(1216,748), "S7829C8");
    /*is_ambiguous_... S7829C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C7*)(S7829C3*), ABISELECT(1328,816), "S7829C8");
    check_base_class_offset(lv, (S7829C7*)(S7829C3*), 0, "S7829C8");
    check_base_class_offset(lv, (S7829C3*), 0, "S7829C8");
    /*is_ambiguous_... S7829C8::S7829C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C4*), ABISELECT(4392,2704), "S7829C8");
    /*is_ambiguous_... S7829C8::S7829C4 */ AMB_check_base_class_offset(lv, (S7829C4*), ABISELECT(4384,2700), "S7829C8");
    /*is_ambiguous_... S7829C8::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C4*)(S7829C7*), ABISELECT(5608,3452), "S7829C8");
    /*is_ambiguous_... S7829C8::S7829C7 */ AMB_check_base_class_offset(lv, (S7829C4*)(S7829C7*), ABISELECT(5600,3448), "S7829C8");
    /*is_ambiguous_... S7829C8::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C7*), ABISELECT(6816,4196), "S7829C8");
    /*is_ambiguous_... S7829C8::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C7*), ABISELECT(6928,4264), "S7829C8");
    /*is_ambiguous_... S7829C8::S7829C7 */ AMB_check_base_class_offset(lv, (S7829C7*), ABISELECT(5600,3448), "S7829C8");
    /*is_ambiguous_... S7829C8::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(7888,4860), "S7829C8");
    check_field_offset(lv, s7829c8f0, ABISELECT(8248,5080), "S7829C8.s7829c8f0");
    check_field_offset(lv, s7829c8f1, ABISELECT(8252,5084), "S7829C8.s7829c8f1");
    check_field_offset(lv, s7829c8f2, ABISELECT(8264,5092), "S7829C8.s7829c8f2");
    check_field_offset(lv, s7829c8f3, ABISELECT(8272,5096), "S7829C8.s7829c8f3");
    test_class_info(&lv, &cd_S7829C8);
    dp->~S7829C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7829C8(Test_S7829C8, "S7829C8", ABISELECT(9856,6068));

#else // __cplusplus

extern void _ZN7S7829C8C1Ev();
extern void _ZN7S7829C8D2Ev();
Name_Map name_map_S7829C8[] = {
  NSPAIR(_ZN7S7829C8C1Ev),
  NSPAIR(_ZN7S7829C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S7829C4;
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S7829C4;
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S7829C7;
extern VTBL_ENTRY _ZTI7S7829C7[];
extern  VTBL_ENTRY _ZTV7S7829C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C7[];
extern Class_Descriptor cd_S7829C3;
extern VTBL_ENTRY _ZTI7S7829C3[];
extern  VTBL_ENTRY _ZTV7S7829C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S7829C4;
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S7829C4;
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S7829C7;
extern VTBL_ENTRY _ZTI7S7829C7[];
extern  VTBL_ENTRY _ZTV7S7829C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C7[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
static Base_Class bases_S7829C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(9496,5848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(8288,5104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C4,    ABISELECT(8280,5100), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(2400,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
    10, //immediately_derived
  0, 0},
  {&cd_S19566C6,    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
    6, //immediately_derived
  0, 0},
  {&cd_S7829C4,    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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C7,    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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7829C3,    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_S19566C6,    ABISELECT(4392,2704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C4,    ABISELECT(4384,2700), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19566C6,    ABISELECT(5608,3452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C4,    ABISELECT(5600,3448), //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
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(6816,4196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(6928,4264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C7,    ABISELECT(5600,3448), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19566C5,    ABISELECT(7888,4860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S7829C8[];
extern void _ZN7S7829C8D1Ev();
extern void _ZN7S7829C8D0Ev();
extern void _ZN7S7829C82v1Ev();
extern void ABISELECT(_ZThn5600_N7S7829C8D1Ev,_ZThn3448_N7S7829C8D1Ev)();
extern void ABISELECT(_ZThn5600_N7S7829C8D0Ev,_ZThn3448_N7S7829C8D0Ev)();
static  VTBL_ENTRY vtc_S7829C8[] = {
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C8[0]),
  (VTBL_ENTRY)&_ZN7S7829C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7829C82v1Ev,
  ABISELECT(5112,3148),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI7S7829C8[0]),
  ABISELECT(3896,2400),
  ABISELECT(-5600,-3448),
  (VTBL_ENTRY)&(_ZTI7S7829C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N7S7829C8D1Ev,_ZThn3448_N7S7829C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N7S7829C8D0Ev,_ZThn3448_N7S7829C8D0Ev),
  ABISELECT(1216,748),
  ABISELECT(-8280,-5100),
  (VTBL_ENTRY)&(_ZTI7S7829C8[0]),
};
extern VTBL_ENTRY _ZTV7S7829C8[];
extern void _ZN7S7829C3D1Ev();
extern void _ZN7S7829C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C3__7S7829C8[] = {
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C3[0]),
  (VTBL_ENTRY)&_ZN7S7829C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C3D0Ev,
};
extern void _ZN7S7829C7D1Ev();
extern void _ZN7S7829C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C77S7829C3__7S7829C8[] = {
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C7[0]),
  (VTBL_ENTRY)&_ZN7S7829C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7829C47S7829C77S7829C3__A1__7S7829C8[] = {
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7829C4__7S7829C3__7S7829C8[] = {
  ABISELECT(1216,748),
  ABISELECT(-8280,-5100),
  (VTBL_ENTRY)&(_ZTI7S7829C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7829C4__A__7S7829C8[] = {
  ABISELECT(5112,3148),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
extern void _ZN7S7829C7D1Ev();
extern void _ZN7S7829C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C7__A1__7S7829C8[] = {
  ABISELECT(3896,2400),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C7[0]),
  (VTBL_ENTRY)&_ZN7S7829C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7829C47S7829C7__A3__7S7829C8[] = {
  ABISELECT(3896,2400),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7829C4__7S7829C8[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
static  VTT_ENTRY vtt_S7829C8[] = {
  {&(_ZTV7S7829C8[4]),  4,18},
  {&(_tg__ZTV7S7829C3__7S7829C8[4]),  4,6},
  {&(_tg__ZTV7S7829C77S7829C3__7S7829C8[3]),  3,5},
  {&(_tg__ZTV7S7829C47S7829C77S7829C3__A1__7S7829C8[3]),  3,3},
  {&(_tg__ZTV7S7829C4__7S7829C3__7S7829C8[3]),  3,3},
  {&(_tg__ZTV7S7829C4__A__7S7829C8[3]),  3,3},
  {&(_tg__ZTV7S7829C7__A1__7S7829C8[3]),  3,5},
  {&(_tg__ZTV7S7829C47S7829C7__A3__7S7829C8[3]),  3,3},
  {&(_ZTV7S7829C8[18]),  18,18},
  {&(_ZTV7S7829C8[10]),  10,18},
  {&(_ZTV7S7829C8[13]),  13,18},
  {&(_tg__ZTV7S7829C4__7S7829C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7829C8[];
extern  VTBL_ENTRY _ZTV7S7829C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C8[];
Class_Descriptor cd_S7829C8 = {  "S7829C8", // class name
  bases_S7829C8, 19,
  &(vtc_S7829C8[0]), // expected_vtbl_contents
  &(vtt_S7829C8[0]), // expected_vtt_contents
  ABISELECT(9856,6068), // object size
  NSPAIRA(_ZTI7S7829C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7829C8),18, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7829C8),12, //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  S7829C2  : virtual S7829C3 , virtual S7829C7 , virtual S7829C8 , S19566C5 , virtual S19566C11 {
  int s7829c2f0;
  virtual  ~S7829C2(); // _ZN7S7829C2D2Ev
  virtual void  v2(); // _ZN7S7829C22v2Ev
  S7829C2(); // tgen
};
//SIG(-1 S7829C2) C1{ VBC2{ VBC3{ VBC4{ m FL Fp FC5{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC5 FC4[3] Fi[4]} BC5 BC4 BC6{ BC3 BC5 BC4 vd FL[6] Fi FC4 Fp FC5 Fi Fp[7]} Fi FC3 Fs Fp Fi[5]} VBC6 VBC7{ BC2 BC3 BC6 BC4 vd v2 FC8{} Fi[2] Fl Fp} BC4 VBC9{ m Fp Fc Fi:6 Fl FC8 Fi} vd v1 Fi}


 S7829C2 ::~S7829C2(){ note_dtor("S7829C2", this);}
void  S7829C2 ::v2(){vfunc_called(this, "_ZN7S7829C22v2Ev");}
S7829C2 ::S7829C2(){ note_ctor("S7829C2", this);} // tgen

static void Test_S7829C2()
{
  extern Class_Descriptor cd_S7829C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2118,2608)];
    init_test(&cd_S7829C2, buf);
    S7829C2 *dp, &lv = *(dp=new (buf) S7829C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16936,10428), "sizeof(S7829C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7829C2)");
    /*is_ambiguous_... S7829C2::S7829C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C4*), ABISELECT(5976,3676), "S7829C2");
    /*is_ambiguous_... S7829C2::S7829C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C4*)(S7829C7*)(S7829C3*), ABISELECT(5976,3676), "S7829C2");
    /*is_ambiguous_... S7829C2::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C4*)(S7829C7*), ABISELECT(5976,3676), "S7829C2");
    check_base_class_offset(lv, (S19566C5*)(S7829C4*)(S7829C7*)(S7829C3*)(S7829C8*), ABISELECT(5976,3676), "S7829C2");
    /*is_ambiguous_... S7829C8::S7829C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C4*)(S7829C8*), ABISELECT(5976,3676), "S7829C2");
    /*is_ambiguous_... S7829C8::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C4*)(S7829C7*)(S7829C8*), ABISELECT(5976,3676), "S7829C2");
    /*is_ambiguous_... S7829C2::S7829C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C4*), ABISELECT(4768,2932), "S7829C2");
    /*is_ambiguous_... S7829C2::S7829C3 */ AMB_check_base_class_offset(lv, (S7829C4*)(S7829C3*), ABISELECT(4760,2928), "S7829C2");
    /*is_ambiguous_... S7829C3::S7829C4 */ AMB_check_base_class_offset(lv, (S7829C4*)(S7829C3*)(S7829C8*), ABISELECT(4760,2928), "S7829C2");
    /*is_ambiguous_... S7829C2::S7829C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C3*), ABISELECT(2664,1640), "S7829C2");
    /*is_ambiguous_... S7829C2::S7829C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C3*), ABISELECT(2776,1708), "S7829C2");
    /*is_ambiguous_... S7829C2::S7829C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C4*)(S7829C7*)(S7829C3*), ABISELECT(384,232), "S7829C2");
    /*is_ambiguous_... S7829C2::S7829C3 */ AMB_check_base_class_offset(lv, (S7829C4*)(S7829C7*)(S7829C3*), ABISELECT(376,228), "S7829C2");
    /*is_ambiguous_... S7829C2::S7829C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C7*)(S7829C3*), ABISELECT(1592,976), "S7829C2");
    /*is_ambiguous_... S7829C2::S7829C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C7*)(S7829C3*), ABISELECT(1704,1044), "S7829C2");
    /*is_ambiguous_... S7829C2::S7829C3 */ AMB_check_base_class_offset(lv, (S7829C7*)(S7829C3*), ABISELECT(376,228), "S7829C2");
    /*is_ambiguous_... S7829C2::S7829C3 */ AMB_check_base_class_offset(lv, (S7829C3*), ABISELECT(376,228), "S7829C2");
    /*is_ambiguous_... S7829C2::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C4*)(S7829C7*), ABISELECT(6344,3900), "S7829C2");
    /*is_ambiguous_... S7829C2::S7829C7 */ AMB_check_base_class_offset(lv, (S7829C4*)(S7829C7*), ABISELECT(6336,3896), "S7829C2");
    /*is_ambiguous_... S7829C2::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C7*), ABISELECT(7552,4644), "S7829C2");
    /*is_ambiguous_... S7829C2::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C7*), ABISELECT(7664,4712), "S7829C2");
    /*is_ambiguous_... S7829C2::S7829C7 */ AMB_check_base_class_offset(lv, (S7829C7*), ABISELECT(6336,3896), "S7829C2");
    /*is_ambiguous_... S7829C3::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C3*)(S7829C8*), ABISELECT(10912,6720), "S7829C2");
    /*is_ambiguous_... S7829C3::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C3*)(S7829C8*), ABISELECT(11024,6788), "S7829C2");
    check_base_class_offset(lv, (S19566C6*)(S7829C4*)(S7829C7*)(S7829C3*)(S7829C8*), ABISELECT(8632,5312), "S7829C2");
    check_base_class_offset(lv, (S7829C4*)(S7829C7*)(S7829C3*)(S7829C8*), ABISELECT(8624,5308), "S7829C2");
    /*is_ambiguous_... S7829C7::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C7*)(S7829C3*)(S7829C8*), ABISELECT(9840,6056), "S7829C2");
    /*is_ambiguous_... S7829C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C7*)(S7829C3*)(S7829C8*), ABISELECT(9952,6124), "S7829C2");
    check_base_class_offset(lv, (S7829C7*)(S7829C3*)(S7829C8*), ABISELECT(8624,5308), "S7829C2");
    check_base_class_offset(lv, (S7829C3*)(S7829C8*), ABISELECT(8624,5308), "S7829C2");
    /*is_ambiguous_... S7829C8::S7829C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C4*)(S7829C8*), ABISELECT(13016,8012), "S7829C2");
    /*is_ambiguous_... S7829C8::S7829C4 */ AMB_check_base_class_offset(lv, (S7829C4*)(S7829C8*), ABISELECT(13008,8008), "S7829C2");
    /*is_ambiguous_... S7829C8::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C4*)(S7829C7*)(S7829C8*), ABISELECT(14232,8760), "S7829C2");
    /*is_ambiguous_... S7829C8::S7829C7 */ AMB_check_base_class_offset(lv, (S7829C4*)(S7829C7*)(S7829C8*), ABISELECT(14224,8756), "S7829C2");
    /*is_ambiguous_... S7829C8::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C7*)(S7829C8*), ABISELECT(15440,9504), "S7829C2");
    /*is_ambiguous_... S7829C8::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C7*)(S7829C8*), ABISELECT(15552,9572), "S7829C2");
    /*is_ambiguous_... S7829C8::S7829C7 */ AMB_check_base_class_offset(lv, (S7829C7*)(S7829C8*), ABISELECT(14224,8756), "S7829C2");
    /*is_ambiguous_... S7829C8::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C8*), ABISELECT(16512,10168), "S7829C2");
    check_base_class_offset(lv, (S7829C8*), ABISELECT(8624,5308), "S7829C2");
    /*is_ambiguous_... S7829C2::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(8,4), "S7829C2");
    check_base_class_offset(lv, (S19566C11*), ABISELECT(16904,10408), "S7829C2");
    check_field_offset(lv, s7829c2f0, ABISELECT(368,224), "S7829C2.s7829c2f0");
    test_class_info(&lv, &cd_S7829C2);
    dp->~S7829C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7829C2(Test_S7829C2, "S7829C2", ABISELECT(16936,10428));

#else // __cplusplus

extern void _ZN7S7829C2C1Ev();
extern void _ZN7S7829C2D2Ev();
Name_Map name_map_S7829C2[] = {
  NSPAIR(_ZN7S7829C2C1Ev),
  NSPAIR(_ZN7S7829C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S7829C4;
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S7829C4;
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S7829C7;
extern VTBL_ENTRY _ZTI7S7829C7[];
extern  VTBL_ENTRY _ZTV7S7829C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C7[];
extern Class_Descriptor cd_S7829C3;
extern VTBL_ENTRY _ZTI7S7829C3[];
extern  VTBL_ENTRY _ZTV7S7829C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S7829C4;
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S7829C7;
extern VTBL_ENTRY _ZTI7S7829C7[];
extern  VTBL_ENTRY _ZTV7S7829C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S7829C4;
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S7829C7;
extern VTBL_ENTRY _ZTI7S7829C7[];
extern  VTBL_ENTRY _ZTV7S7829C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C7[];
extern Class_Descriptor cd_S7829C3;
extern VTBL_ENTRY _ZTI7S7829C3[];
extern  VTBL_ENTRY _ZTV7S7829C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S7829C4;
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S7829C4;
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S7829C7;
extern VTBL_ENTRY _ZTI7S7829C7[];
extern  VTBL_ENTRY _ZTV7S7829C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C7[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S7829C8;
extern VTBL_ENTRY _ZTI7S7829C8[];
extern  VTBL_ENTRY _ZTV7S7829C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C8[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C11;
extern VTBL_ENTRY _ZTI9S19566C11[];
static Base_Class bases_S7829C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(5976,3676), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(4768,2932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C4,    ABISELECT(4760,2928), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(2664,1640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(2776,1708), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(384,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
    6, //immediately_derived
  0, 0},
  {&cd_S7829C4,    ABISELECT(376,228), //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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1592,976), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1704,1044), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C7,    ABISELECT(376,228), //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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7829C3,    ABISELECT(376,228), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(6344,3900), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C4,    ABISELECT(6336,3896), //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
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(7552,4644), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 0},
  {&cd_S19566C5,    ABISELECT(7664,4712), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 0},
  {&cd_S7829C7,    ABISELECT(6336,3896), //bcp->offset
    21, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(10912,6720), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(11024,6788), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(8632,5312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C4,    ABISELECT(8624,5308), //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
    7, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(9840,6056), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(9952,6124), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C7,    ABISELECT(8624,5308), //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
    8, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7829C3,    ABISELECT(8624,5308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(13016,8012), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C4,    ABISELECT(13008,8008), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(14232,8760), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7829C4,    ABISELECT(14224,8756), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(15440,9504), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(15552,9572), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C7,    ABISELECT(14224,8756), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(16512,10168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C8,    ABISELECT(8624,5308), //bcp->offset
    27, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C5,    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_S19566C11,    ABISELECT(16904,10408), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7829C2[];
extern void _ZN7S7829C2D1Ev();
extern void _ZN7S7829C2D0Ev();
extern void _ZN7S7829C22v2Ev();
extern void ABISELECT(_ZTv0_n40_N7S7829C2D1Ev,_ZTv0_n20_N7S7829C2D1Ev)();
extern void ABISELECT(_ZThn376_N7S7829C2D1Ev,_ZThn228_N7S7829C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7829C2D0Ev,_ZTv0_n20_N7S7829C2D0Ev)();
extern void ABISELECT(_ZThn376_N7S7829C2D0Ev,_ZThn228_N7S7829C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7829C2D1Ev,_ZTv0_n16_N7S7829C2D1Ev)();
extern void ABISELECT(_ZThn6336_N7S7829C2D1Ev,_ZThn3896_N7S7829C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7829C2D0Ev,_ZTv0_n16_N7S7829C2D0Ev)();
extern void ABISELECT(_ZThn6336_N7S7829C2D0Ev,_ZThn3896_N7S7829C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7829C2D1Ev,_ZTv0_n20_N7S7829C2D1Ev)();
extern void ABISELECT(_ZThn8624_N7S7829C2D1Ev,_ZThn5308_N7S7829C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7829C2D0Ev,_ZTv0_n20_N7S7829C2D0Ev)();
extern void ABISELECT(_ZThn8624_N7S7829C2D0Ev,_ZThn5308_N7S7829C2D0Ev)() __attribute__((weak));
extern void _ZN7S7829C82v1Ev();
extern void ABISELECT(_ZTvn5600_n40_N7S7829C2D1Ev,_ZTvn3448_n20_N7S7829C2D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N7S7829C2D0Ev,_ZTvn3448_n20_N7S7829C2D0Ev)();
static  VTBL_ENTRY vtc_S7829C2[] = {
  ABISELECT(16904,10408),
  ABISELECT(8624,5308),
  ABISELECT(6336,3896),
  ABISELECT(5976,3676),
  ABISELECT(4760,2928),
  ABISELECT(376,228),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
  (VTBL_ENTRY)&_ZN7S7829C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7829C22v2Ev,
  ABISELECT(-376,-228),
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  ABISELECT(-376,-228),
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7829C2D1Ev,_ZTv0_n20_N7S7829C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7829C2D0Ev,_ZTv0_n20_N7S7829C2D0Ev),
  ABISELECT(1216,748),
  ABISELECT(-4760,-2928),
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
  ABISELECT(-6336,-3896),
  ABISELECT(-360,-220),
  ABISELECT(-6336,-3896),
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7829C2D1Ev,_ZTv0_n16_N7S7829C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7829C2D0Ev,_ZTv0_n16_N7S7829C2D0Ev),
  0,
  ABISELECT(-8624,-5308),
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  ABISELECT(-8624,-5308),
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7829C2D1Ev,_ZTv0_n20_N7S7829C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7829C2D0Ev,_ZTv0_n20_N7S7829C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7829C82v1Ev,
  ABISELECT(-7032,-4332),
  ABISELECT(-13008,-8008),
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
  ABISELECT(-8248,-5080),
  ABISELECT(-14224,-8756),
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N7S7829C2D1Ev,_ZTvn3448_n20_N7S7829C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N7S7829C2D0Ev,_ZTvn3448_n20_N7S7829C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S7829C2[];
extern void _ZN7S7829C3D1Ev();
extern void _ZN7S7829C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C3__7S7829C2[] = {
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C3[0]),
  (VTBL_ENTRY)&_ZN7S7829C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C3D0Ev,
};
extern void _ZN7S7829C7D1Ev();
extern void _ZN7S7829C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C77S7829C3__7S7829C2[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C7[0]),
  (VTBL_ENTRY)&_ZN7S7829C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7829C47S7829C77S7829C3__A1__7S7829C2[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7829C4__7S7829C3__7S7829C2[] = {
  ABISELECT(1216,748),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI7S7829C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7829C4__7S7829C2[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
extern void _ZN7S7829C7D1Ev();
extern void _ZN7S7829C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C7__A1__7S7829C2[] = {
  ABISELECT(-360,-220),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C7[0]),
  (VTBL_ENTRY)&_ZN7S7829C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7829C47S7829C7__A2__7S7829C2[] = {
  ABISELECT(-360,-220),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
extern void _ZN7S7829C8D1Ev();
extern void _ZN7S7829C8D0Ev();
extern void _ZN7S7829C82v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C8__7S7829C2[] = {
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C8[0]),
  (VTBL_ENTRY)&_ZN7S7829C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7829C82v1Ev,
};
extern void _ZN7S7829C3D1Ev();
extern void _ZN7S7829C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C37S7829C8__A1__7S7829C2[] = {
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C3[0]),
  (VTBL_ENTRY)&_ZN7S7829C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C3D0Ev,
};
extern void _ZN7S7829C7D1Ev();
extern void _ZN7S7829C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C77S7829C37S7829C8__A2__7S7829C2[] = {
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C7[0]),
  (VTBL_ENTRY)&_ZN7S7829C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7829C47S7829C77S7829C37S7829C8__A3__7S7829C2[] = {
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7829C4__7S7829C37S7829C8__A1__7S7829C2[] = {
  ABISELECT(1216,748),
  ABISELECT(3864,2380),
  (VTBL_ENTRY)&(_ZTI7S7829C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7829C47S7829C8__A4__7S7829C2[] = {
  ABISELECT(-7032,-4332),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
extern void _ZN7S7829C7D1Ev();
extern void _ZN7S7829C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C77S7829C8__A3__7S7829C2[] = {
  ABISELECT(-8248,-5080),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C7[0]),
  (VTBL_ENTRY)&_ZN7S7829C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7829C47S7829C77S7829C8__A5__7S7829C2[] = {
  ABISELECT(-8248,-5080),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7829C4__7S7829C8__7S7829C2[] = {
  ABISELECT(1216,748),
  ABISELECT(3864,2380),
  (VTBL_ENTRY)&(_ZTI7S7829C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7829C4__A__7S7829C8__7S7829C2[] = {
  ABISELECT(-7032,-4332),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI7S7829C8[0]),
};
extern void ABISELECT(_ZThn5600_N7S7829C8D1Ev,_ZThn3448_N7S7829C8D1Ev)();
extern void ABISELECT(_ZThn5600_N7S7829C8D0Ev,_ZThn3448_N7S7829C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7829C7__A1__7S7829C8__7S7829C2[] = {
  ABISELECT(-8248,-5080),
  ABISELECT(-5600,-3448),
  (VTBL_ENTRY)&(_ZTI7S7829C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N7S7829C8D1Ev,_ZThn3448_N7S7829C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N7S7829C8D0Ev,_ZThn3448_N7S7829C8D0Ev),
};
static  VTT_ENTRY vtt_S7829C2[] = {
  {&(_ZTV7S7829C2[8]),  8,44},
  {&(_ZTV7S7829C2[16]),  16,44},
  {&(_ZTV7S7829C2[21]),  21,44},
  {&(_ZTV7S7829C2[25]),  25,44},
  {&(_ZTV7S7829C2[33]),  33,44},
  {&(_ZTV7S7829C2[39]),  39,44},
  {&(_ZTV7S7829C2[42]),  42,44},
  {&(_tg__ZTV7S7829C3__7S7829C2[4]),  4,6},
  {&(_tg__ZTV7S7829C77S7829C3__7S7829C2[3]),  3,5},
  {&(_tg__ZTV7S7829C47S7829C77S7829C3__A1__7S7829C2[3]),  3,3},
  {&(_tg__ZTV7S7829C4__7S7829C3__7S7829C2[3]),  3,3},
  {&(_tg__ZTV7S7829C4__7S7829C2[3]),  3,3},
  {&(_tg__ZTV7S7829C7__A1__7S7829C2[3]),  3,5},
  {&(_tg__ZTV7S7829C47S7829C7__A2__7S7829C2[3]),  3,3},
  {&(_tg__ZTV7S7829C8__7S7829C2[4]),  4,7},
  {&(_tg__ZTV7S7829C37S7829C8__A1__7S7829C2[4]),  4,6},
  {&(_tg__ZTV7S7829C77S7829C37S7829C8__A2__7S7829C2[3]),  3,5},
  {&(_tg__ZTV7S7829C47S7829C77S7829C37S7829C8__A3__7S7829C2[3]),  3,3},
  {&(_tg__ZTV7S7829C4__7S7829C37S7829C8__A1__7S7829C2[3]),  3,3},
  {&(_tg__ZTV7S7829C47S7829C8__A4__7S7829C2[3]),  3,3},
  {&(_tg__ZTV7S7829C77S7829C8__A3__7S7829C2[3]),  3,5},
  {&(_tg__ZTV7S7829C47S7829C77S7829C8__A5__7S7829C2[3]),  3,3},
  {&(_tg__ZTV7S7829C4__7S7829C8__7S7829C2[3]),  3,3},
  {&(_tg__ZTV7S7829C4__A__7S7829C8__7S7829C2[3]),  3,3},
  {&(_tg__ZTV7S7829C7__A1__7S7829C8__7S7829C2[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7829C2[];
extern  VTBL_ENTRY _ZTV7S7829C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C2[];
static VTBL_ENTRY alt_thunk_names141[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7829C2D0Ev,_ZTv0_n16_N7S7829C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6336_N7S7829C2D0Ev,_ZThn3896_N7S7829C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7829C2D1Ev,_ZTv0_n16_N7S7829C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6336_N7S7829C2D1Ev,_ZThn3896_N7S7829C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7829C2D0Ev,_ZTv0_n20_N7S7829C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8624_N7S7829C2D0Ev,_ZThn5308_N7S7829C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn376_N7S7829C2D0Ev,_ZThn228_N7S7829C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7829C2D1Ev,_ZTv0_n20_N7S7829C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8624_N7S7829C2D1Ev,_ZThn5308_N7S7829C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn376_N7S7829C2D1Ev,_ZThn228_N7S7829C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7829C2 = {  "S7829C2", // class name
  bases_S7829C2, 35,
  &(vtc_S7829C2[0]), // expected_vtbl_contents
  &(vtt_S7829C2[0]), // expected_vtt_contents
  ABISELECT(16936,10428), // object size
  NSPAIRA(_ZTI7S7829C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7829C2),44, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7829C2),25, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names141,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7829C11  : virtual S7829C2 {
  short s7829c11f0;
  virtual void  v3(); // _ZN8S7829C112v3Ev
  ~S7829C11(); // tgen
  S7829C11(); // tgen
};
//SIG(-1 S7829C11) C1{ VBC2{ VBC3{ VBC4{ VBC5{ m FL Fp FC6{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC6 FC5[3] Fi[4]} BC6 BC5 BC7{ BC4 BC6 BC5 vd FL[6] Fi FC5 Fp FC6 Fi Fp[7]} Fi FC4 Fs Fp Fi[5]} VBC7 VBC8{ BC3 BC4 BC7 BC5 vd v2 FC9{} Fi[2] Fl Fp} BC5 VBC10{ m Fp Fc Fi:6 Fl FC9 Fi} vd v3 Fi} v1 Fs}


void  S7829C11 ::v3(){vfunc_called(this, "_ZN8S7829C112v3Ev");}
S7829C11 ::~S7829C11(){ note_dtor("S7829C11", this);} // tgen
S7829C11 ::S7829C11(){ note_ctor("S7829C11", this);} // tgen

static void Test_S7829C11()
{
  extern Class_Descriptor cd_S7829C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2120,2610)];
    init_test(&cd_S7829C11, buf);
    S7829C11 *dp, &lv = *(dp=new (buf) S7829C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16952,10436), "sizeof(S7829C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7829C11)");
    /*is_ambiguous_... S7829C11::S7829C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C4*), ABISELECT(5992,3684), "S7829C11");
    /*is_ambiguous_... S7829C11::S7829C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C4*)(S7829C7*)(S7829C3*), ABISELECT(5992,3684), "S7829C11");
    /*is_ambiguous_... S7829C11::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C4*)(S7829C7*), ABISELECT(5992,3684), "S7829C11");
    check_base_class_offset(lv, (S19566C5*)(S7829C4*)(S7829C7*)(S7829C3*)(S7829C8*), ABISELECT(5992,3684), "S7829C11");
    /*is_ambiguous_... S7829C8::S7829C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C4*)(S7829C8*), ABISELECT(5992,3684), "S7829C11");
    /*is_ambiguous_... S7829C8::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C4*)(S7829C7*)(S7829C8*), ABISELECT(5992,3684), "S7829C11");
    /*is_ambiguous_... S7829C11::S7829C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C4*), ABISELECT(4784,2940), "S7829C11");
    /*is_ambiguous_... S7829C11::S7829C3 */ AMB_check_base_class_offset(lv, (S7829C4*)(S7829C3*), ABISELECT(4776,2936), "S7829C11");
    /*is_ambiguous_... S7829C3::S7829C4 */ AMB_check_base_class_offset(lv, (S7829C4*)(S7829C3*)(S7829C8*), ABISELECT(4776,2936), "S7829C11");
    /*is_ambiguous_... S7829C11::S7829C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C3*), ABISELECT(2680,1648), "S7829C11");
    /*is_ambiguous_... S7829C11::S7829C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C3*), ABISELECT(2792,1716), "S7829C11");
    /*is_ambiguous_... S7829C11::S7829C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C4*)(S7829C7*)(S7829C3*), ABISELECT(400,240), "S7829C11");
    /*is_ambiguous_... S7829C11::S7829C3 */ AMB_check_base_class_offset(lv, (S7829C4*)(S7829C7*)(S7829C3*), ABISELECT(392,236), "S7829C11");
    /*is_ambiguous_... S7829C11::S7829C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C7*)(S7829C3*), ABISELECT(1608,984), "S7829C11");
    /*is_ambiguous_... S7829C11::S7829C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C7*)(S7829C3*), ABISELECT(1720,1052), "S7829C11");
    /*is_ambiguous_... S7829C11::S7829C3 */ AMB_check_base_class_offset(lv, (S7829C7*)(S7829C3*), ABISELECT(392,236), "S7829C11");
    /*is_ambiguous_... S7829C2::S7829C3 */ AMB_check_base_class_offset(lv, (S7829C3*)(S7829C2*), ABISELECT(392,236), "S7829C11");
    /*is_ambiguous_... S7829C11::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C4*)(S7829C7*), ABISELECT(6360,3908), "S7829C11");
    /*is_ambiguous_... S7829C11::S7829C7 */ AMB_check_base_class_offset(lv, (S7829C4*)(S7829C7*), ABISELECT(6352,3904), "S7829C11");
    /*is_ambiguous_... S7829C11::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C7*), ABISELECT(7568,4652), "S7829C11");
    /*is_ambiguous_... S7829C11::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C7*), ABISELECT(7680,4720), "S7829C11");
    /*is_ambiguous_... S7829C2::S7829C7 */ AMB_check_base_class_offset(lv, (S7829C7*)(S7829C2*), ABISELECT(6352,3904), "S7829C11");
    /*is_ambiguous_... S7829C3::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C3*)(S7829C8*), ABISELECT(10928,6728), "S7829C11");
    /*is_ambiguous_... S7829C3::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C3*)(S7829C8*), ABISELECT(11040,6796), "S7829C11");
    check_base_class_offset(lv, (S19566C6*)(S7829C4*)(S7829C7*)(S7829C3*)(S7829C8*), ABISELECT(8648,5320), "S7829C11");
    check_base_class_offset(lv, (S7829C4*)(S7829C7*)(S7829C3*)(S7829C8*), ABISELECT(8640,5316), "S7829C11");
    /*is_ambiguous_... S7829C7::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C7*)(S7829C3*)(S7829C8*), ABISELECT(9856,6064), "S7829C11");
    /*is_ambiguous_... S7829C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C7*)(S7829C3*)(S7829C8*), ABISELECT(9968,6132), "S7829C11");
    check_base_class_offset(lv, (S7829C7*)(S7829C3*)(S7829C8*), ABISELECT(8640,5316), "S7829C11");
    check_base_class_offset(lv, (S7829C3*)(S7829C8*), ABISELECT(8640,5316), "S7829C11");
    /*is_ambiguous_... S7829C8::S7829C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C4*)(S7829C8*), ABISELECT(13032,8020), "S7829C11");
    /*is_ambiguous_... S7829C8::S7829C4 */ AMB_check_base_class_offset(lv, (S7829C4*)(S7829C8*), ABISELECT(13024,8016), "S7829C11");
    /*is_ambiguous_... S7829C8::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C4*)(S7829C7*)(S7829C8*), ABISELECT(14248,8768), "S7829C11");
    /*is_ambiguous_... S7829C8::S7829C7 */ AMB_check_base_class_offset(lv, (S7829C4*)(S7829C7*)(S7829C8*), ABISELECT(14240,8764), "S7829C11");
    /*is_ambiguous_... S7829C8::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C7*)(S7829C8*), ABISELECT(15456,9512), "S7829C11");
    /*is_ambiguous_... S7829C8::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C7*)(S7829C8*), ABISELECT(15568,9580), "S7829C11");
    /*is_ambiguous_... S7829C8::S7829C7 */ AMB_check_base_class_offset(lv, (S7829C7*)(S7829C8*), ABISELECT(14240,8764), "S7829C11");
    /*is_ambiguous_... S7829C8::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C8*), ABISELECT(16528,10176), "S7829C11");
    check_base_class_offset(lv, (S7829C8*)(S7829C2*), ABISELECT(8640,5316), "S7829C11");
    /*is_ambiguous_... S7829C2::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C2*), ABISELECT(24,12), "S7829C11");
    check_base_class_offset(lv, (S19566C11*)(S7829C2*), ABISELECT(16920,10416), "S7829C11");
    check_base_class_offset(lv, (S7829C2*), ABISELECT(16,8), "S7829C11");
    check_field_offset(lv, s7829c11f0, ABISELECT(8,4), "S7829C11.s7829c11f0");
    test_class_info(&lv, &cd_S7829C11);
    dp->~S7829C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7829C11(Test_S7829C11, "S7829C11", ABISELECT(16952,10436));

#else // __cplusplus

extern void _ZN8S7829C11C1Ev();
extern void _ZN8S7829C11D1Ev();
Name_Map name_map_S7829C11[] = {
  NSPAIR(_ZN8S7829C11C1Ev),
  NSPAIR(_ZN8S7829C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S7829C4;
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S7829C4;
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S7829C7;
extern VTBL_ENTRY _ZTI7S7829C7[];
extern  VTBL_ENTRY _ZTV7S7829C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C7[];
extern Class_Descriptor cd_S7829C3;
extern VTBL_ENTRY _ZTI7S7829C3[];
extern  VTBL_ENTRY _ZTV7S7829C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S7829C4;
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S7829C7;
extern VTBL_ENTRY _ZTI7S7829C7[];
extern  VTBL_ENTRY _ZTV7S7829C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S7829C4;
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S7829C7;
extern VTBL_ENTRY _ZTI7S7829C7[];
extern  VTBL_ENTRY _ZTV7S7829C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C7[];
extern Class_Descriptor cd_S7829C3;
extern VTBL_ENTRY _ZTI7S7829C3[];
extern  VTBL_ENTRY _ZTV7S7829C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S7829C4;
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S7829C4;
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S7829C7;
extern VTBL_ENTRY _ZTI7S7829C7[];
extern  VTBL_ENTRY _ZTV7S7829C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C7[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S7829C8;
extern VTBL_ENTRY _ZTI7S7829C8[];
extern  VTBL_ENTRY _ZTV7S7829C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C8[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C11;
extern VTBL_ENTRY _ZTI9S19566C11[];
extern Class_Descriptor cd_S7829C2;
extern VTBL_ENTRY _ZTI7S7829C2[];
extern  VTBL_ENTRY _ZTV7S7829C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C2[];
static Base_Class bases_S7829C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(5992,3684), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(4784,2940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C4,    ABISELECT(4776,2936), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(2680,1648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(2792,1716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(400,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C4,    ABISELECT(392,236), //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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1608,984), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1720,1052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C7,    ABISELECT(392,236), //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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7829C3,    ABISELECT(392,236), //bcp->offset
    25, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(6360,3908), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C4,    ABISELECT(6352,3904), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(7568,4652), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 0},
  {&cd_S19566C5,    ABISELECT(7680,4720), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 0},
  {&cd_S7829C7,    ABISELECT(6352,3904), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(10928,6728), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(11040,6796), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(8648,5320), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C4,    ABISELECT(8640,5316), //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
    7, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(9856,6064), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(9968,6132), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C7,    ABISELECT(8640,5316), //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
    8, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7829C3,    ABISELECT(8640,5316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(13032,8020), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C4,    ABISELECT(13024,8016), //bcp->offset
    50, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(14248,8768), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7829C4,    ABISELECT(14240,8764), //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
    11, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(15456,9512), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(15568,9580), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C7,    ABISELECT(14240,8764), //bcp->offset
    53, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(16528,10176), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C8,    ABISELECT(8640,5316), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S19566C5,    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
    35, //immediately_derived
  0, 0},
  {&cd_S19566C11,    ABISELECT(16920,10416), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S7829C2,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7829C11[];
extern void _ZN8S7829C112v3Ev();
extern void _ZN8S7829C11D1Ev();
extern void _ZN8S7829C11D0Ev();
extern void ABISELECT(_ZTv0_n72_N8S7829C11D1Ev,_ZTv0_n36_N8S7829C11D1Ev)();
extern void ABISELECT(_ZThn16_N8S7829C11D1Ev,_ZThn8_N8S7829C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S7829C11D0Ev,_ZTv0_n36_N8S7829C11D0Ev)();
extern void ABISELECT(_ZThn16_N8S7829C11D0Ev,_ZThn8_N8S7829C11D0Ev)() __attribute__((weak));
extern void _ZN7S7829C22v2Ev();
extern void ABISELECT(_ZTv0_n40_N8S7829C11D1Ev,_ZTv0_n20_N8S7829C11D1Ev)();
extern void ABISELECT(_ZThn392_N8S7829C11D1Ev,_ZThn236_N8S7829C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7829C11D0Ev,_ZTv0_n20_N8S7829C11D0Ev)();
extern void ABISELECT(_ZThn392_N8S7829C11D0Ev,_ZThn236_N8S7829C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7829C11D1Ev,_ZTv0_n16_N8S7829C11D1Ev)();
extern void ABISELECT(_ZThn6352_N8S7829C11D1Ev,_ZThn3904_N8S7829C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7829C11D0Ev,_ZTv0_n16_N8S7829C11D0Ev)();
extern void ABISELECT(_ZThn6352_N8S7829C11D0Ev,_ZThn3904_N8S7829C11D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7829C11D1Ev,_ZTv0_n20_N8S7829C11D1Ev)();
extern void ABISELECT(_ZThn8640_N8S7829C11D1Ev,_ZThn5316_N8S7829C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7829C11D0Ev,_ZTv0_n20_N8S7829C11D0Ev)();
extern void ABISELECT(_ZThn8640_N8S7829C11D0Ev,_ZThn5316_N8S7829C11D0Ev)() __attribute__((weak));
extern void _ZN7S7829C82v1Ev();
extern void ABISELECT(_ZTvn5600_n40_N8S7829C11D1Ev,_ZTvn3448_n20_N8S7829C11D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N8S7829C11D0Ev,_ZTvn3448_n20_N8S7829C11D0Ev)();
static  VTBL_ENTRY vtc_S7829C11[] = {
  ABISELECT(16920,10416),
  ABISELECT(8640,5316),
  ABISELECT(6352,3904),
  ABISELECT(5992,3684),
  ABISELECT(4776,2936),
  ABISELECT(392,236),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7829C11[0]),
  (VTBL_ENTRY)&_ZN8S7829C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7829C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7829C11D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(16904,10408),
  ABISELECT(8624,5308),
  ABISELECT(6336,3896),
  ABISELECT(5976,3676),
  ABISELECT(4760,2928),
  ABISELECT(376,228),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7829C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7829C11D1Ev,_ZTv0_n36_N8S7829C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7829C11D0Ev,_ZTv0_n36_N8S7829C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7829C22v2Ev,
  ABISELECT(-392,-236),
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  ABISELECT(-392,-236),
  (VTBL_ENTRY)&(_ZTI8S7829C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7829C11D1Ev,_ZTv0_n20_N8S7829C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7829C11D0Ev,_ZTv0_n20_N8S7829C11D0Ev),
  ABISELECT(1216,748),
  ABISELECT(-4776,-2936),
  (VTBL_ENTRY)&(_ZTI8S7829C11[0]),
  ABISELECT(-6352,-3904),
  ABISELECT(-360,-220),
  ABISELECT(-6352,-3904),
  (VTBL_ENTRY)&(_ZTI8S7829C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7829C11D1Ev,_ZTv0_n16_N8S7829C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7829C11D0Ev,_ZTv0_n16_N8S7829C11D0Ev),
  0,
  ABISELECT(-8640,-5316),
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  ABISELECT(-8640,-5316),
  (VTBL_ENTRY)&(_ZTI8S7829C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7829C11D1Ev,_ZTv0_n20_N8S7829C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7829C11D0Ev,_ZTv0_n20_N8S7829C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7829C82v1Ev,
  ABISELECT(-7032,-4332),
  ABISELECT(-13024,-8016),
  (VTBL_ENTRY)&(_ZTI8S7829C11[0]),
  ABISELECT(-8248,-5080),
  ABISELECT(-14240,-8764),
  (VTBL_ENTRY)&(_ZTI8S7829C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N8S7829C11D1Ev,_ZTvn3448_n20_N8S7829C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N8S7829C11D0Ev,_ZTvn3448_n20_N8S7829C11D0Ev),
};
extern VTBL_ENTRY _ZTV8S7829C11[];
extern void _ZN7S7829C2D1Ev();
extern void _ZN7S7829C2D0Ev();
extern void _ZN7S7829C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C2__8S7829C11[] = {
  ABISELECT(16904,10408),
  ABISELECT(8624,5308),
  ABISELECT(6336,3896),
  ABISELECT(5976,3676),
  ABISELECT(4760,2928),
  ABISELECT(376,228),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
  (VTBL_ENTRY)&_ZN7S7829C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7829C22v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7829C2D1Ev,_ZTv0_n20_N7S7829C2D1Ev)();
extern void ABISELECT(_ZThn376_N7S7829C2D1Ev,_ZThn228_N7S7829C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7829C2D0Ev,_ZTv0_n20_N7S7829C2D0Ev)();
extern void ABISELECT(_ZThn376_N7S7829C2D0Ev,_ZThn228_N7S7829C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7829C3__7S7829C2__8S7829C11[] = {
  ABISELECT(-376,-228),
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  ABISELECT(-376,-228),
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7829C2D1Ev,_ZTv0_n20_N7S7829C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7829C2D0Ev,_ZTv0_n20_N7S7829C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7829C4__7S7829C2__8S7829C11[] = {
  ABISELECT(1216,748),
  ABISELECT(-4760,-2928),
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7829C2D1Ev,_ZTv0_n16_N7S7829C2D1Ev)();
extern void ABISELECT(_ZThn6336_N7S7829C2D1Ev,_ZThn3896_N7S7829C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7829C2D0Ev,_ZTv0_n16_N7S7829C2D0Ev)();
extern void ABISELECT(_ZThn6336_N7S7829C2D0Ev,_ZThn3896_N7S7829C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7829C7__A1__7S7829C2__8S7829C11[] = {
  ABISELECT(-6336,-3896),
  ABISELECT(-360,-220),
  ABISELECT(-6336,-3896),
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7829C2D1Ev,_ZTv0_n16_N7S7829C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7829C2D0Ev,_ZTv0_n16_N7S7829C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7829C2D1Ev,_ZTv0_n20_N7S7829C2D1Ev)();
extern void ABISELECT(_ZThn8624_N7S7829C2D1Ev,_ZThn5308_N7S7829C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7829C2D0Ev,_ZTv0_n20_N7S7829C2D0Ev)();
extern void ABISELECT(_ZThn8624_N7S7829C2D0Ev,_ZThn5308_N7S7829C2D0Ev)() __attribute__((weak));
extern void _ZN7S7829C82v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C8__7S7829C2__8S7829C11[] = {
  0,
  ABISELECT(-8624,-5308),
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  ABISELECT(-8624,-5308),
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7829C2D1Ev,_ZTv0_n20_N7S7829C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7829C2D0Ev,_ZTv0_n20_N7S7829C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7829C82v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7829C47S7829C8__A4__7S7829C2__8S7829C11[] = {
  ABISELECT(-7032,-4332),
  ABISELECT(-13008,-8008),
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
};
extern void ABISELECT(_ZTvn5600_n40_N7S7829C2D1Ev,_ZTvn3448_n20_N7S7829C2D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N7S7829C2D0Ev,_ZTvn3448_n20_N7S7829C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7829C77S7829C8__A3__7S7829C2__8S7829C11[] = {
  ABISELECT(-8248,-5080),
  ABISELECT(-14224,-8756),
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N7S7829C2D1Ev,_ZTvn3448_n20_N7S7829C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N7S7829C2D0Ev,_ZTvn3448_n20_N7S7829C2D0Ev),
};
extern void _ZN7S7829C3D1Ev();
extern void _ZN7S7829C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C3__8S7829C11[] = {
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C3[0]),
  (VTBL_ENTRY)&_ZN7S7829C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C3D0Ev,
};
extern void _ZN7S7829C7D1Ev();
extern void _ZN7S7829C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C77S7829C3__8S7829C11[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C7[0]),
  (VTBL_ENTRY)&_ZN7S7829C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7829C47S7829C77S7829C3__A1__8S7829C11[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7829C4__7S7829C3__8S7829C11[] = {
  ABISELECT(1216,748),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI7S7829C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7829C4__8S7829C11[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
extern void _ZN7S7829C7D1Ev();
extern void _ZN7S7829C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C7__A1__8S7829C11[] = {
  ABISELECT(-360,-220),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C7[0]),
  (VTBL_ENTRY)&_ZN7S7829C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7829C47S7829C7__A2__8S7829C11[] = {
  ABISELECT(-360,-220),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
extern void _ZN7S7829C8D1Ev();
extern void _ZN7S7829C8D0Ev();
extern void _ZN7S7829C82v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C8__8S7829C11[] = {
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C8[0]),
  (VTBL_ENTRY)&_ZN7S7829C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7829C82v1Ev,
};
extern void _ZN7S7829C3D1Ev();
extern void _ZN7S7829C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C37S7829C8__A1__8S7829C11[] = {
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C3[0]),
  (VTBL_ENTRY)&_ZN7S7829C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C3D0Ev,
};
extern void _ZN7S7829C7D1Ev();
extern void _ZN7S7829C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C77S7829C37S7829C8__A2__8S7829C11[] = {
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C7[0]),
  (VTBL_ENTRY)&_ZN7S7829C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7829C47S7829C77S7829C37S7829C8__A3__8S7829C11[] = {
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7829C4__7S7829C37S7829C8__A1__8S7829C11[] = {
  ABISELECT(1216,748),
  ABISELECT(3864,2380),
  (VTBL_ENTRY)&(_ZTI7S7829C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7829C47S7829C8__A4__8S7829C11[] = {
  ABISELECT(-7032,-4332),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
extern void _ZN7S7829C7D1Ev();
extern void _ZN7S7829C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C77S7829C8__A3__8S7829C11[] = {
  ABISELECT(-8248,-5080),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C7[0]),
  (VTBL_ENTRY)&_ZN7S7829C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7829C47S7829C77S7829C8__A5__8S7829C11[] = {
  ABISELECT(-8248,-5080),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7829C4__7S7829C8__8S7829C11[] = {
  ABISELECT(1216,748),
  ABISELECT(3864,2380),
  (VTBL_ENTRY)&(_ZTI7S7829C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7829C4__A__7S7829C8__8S7829C11[] = {
  ABISELECT(-7032,-4332),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI7S7829C8[0]),
};
extern void ABISELECT(_ZThn5600_N7S7829C8D1Ev,_ZThn3448_N7S7829C8D1Ev)();
extern void ABISELECT(_ZThn5600_N7S7829C8D0Ev,_ZThn3448_N7S7829C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7829C7__A1__7S7829C8__8S7829C11[] = {
  ABISELECT(-8248,-5080),
  ABISELECT(-5600,-3448),
  (VTBL_ENTRY)&(_ZTI7S7829C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N7S7829C8D1Ev,_ZThn3448_N7S7829C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N7S7829C8D0Ev,_ZThn3448_N7S7829C8D0Ev),
};
static  VTT_ENTRY vtt_S7829C11[] = {
  {&(_ZTV8S7829C11[9]),  9,58},
  {&(_ZTV8S7829C11[22]),  22,58},
  {&(_ZTV8S7829C11[30]),  30,58},
  {&(_ZTV8S7829C11[35]),  35,58},
  {&(_ZTV8S7829C11[39]),  39,58},
  {&(_ZTV8S7829C11[47]),  47,58},
  {&(_ZTV8S7829C11[53]),  53,58},
  {&(_ZTV8S7829C11[56]),  56,58},
  {&(_tg__ZTV7S7829C2__8S7829C11[8]),  8,11},
  {&(_tg__ZTV7S7829C3__7S7829C2__8S7829C11[5]),  5,7},
  {&(_tg__ZTV7S7829C4__7S7829C2__8S7829C11[3]),  3,3},
  {&(_tg__ZTV7S7829C7__A1__7S7829C2__8S7829C11[4]),  4,6},
  {&(_tg__ZTV7S7829C8__7S7829C2__8S7829C11[6]),  6,9},
  {&(_tg__ZTV7S7829C47S7829C8__A4__7S7829C2__8S7829C11[3]),  3,3},
  {&(_tg__ZTV7S7829C77S7829C8__A3__7S7829C2__8S7829C11[3]),  3,5},
  {&(_tg__ZTV7S7829C3__8S7829C11[4]),  4,6},
  {&(_tg__ZTV7S7829C77S7829C3__8S7829C11[3]),  3,5},
  {&(_tg__ZTV7S7829C47S7829C77S7829C3__A1__8S7829C11[3]),  3,3},
  {&(_tg__ZTV7S7829C4__7S7829C3__8S7829C11[3]),  3,3},
  {&(_tg__ZTV7S7829C4__8S7829C11[3]),  3,3},
  {&(_tg__ZTV7S7829C7__A1__8S7829C11[3]),  3,5},
  {&(_tg__ZTV7S7829C47S7829C7__A2__8S7829C11[3]),  3,3},
  {&(_tg__ZTV7S7829C8__8S7829C11[4]),  4,7},
  {&(_tg__ZTV7S7829C37S7829C8__A1__8S7829C11[4]),  4,6},
  {&(_tg__ZTV7S7829C77S7829C37S7829C8__A2__8S7829C11[3]),  3,5},
  {&(_tg__ZTV7S7829C47S7829C77S7829C37S7829C8__A3__8S7829C11[3]),  3,3},
  {&(_tg__ZTV7S7829C4__7S7829C37S7829C8__A1__8S7829C11[3]),  3,3},
  {&(_tg__ZTV7S7829C47S7829C8__A4__8S7829C11[3]),  3,3},
  {&(_tg__ZTV7S7829C77S7829C8__A3__8S7829C11[3]),  3,5},
  {&(_tg__ZTV7S7829C47S7829C77S7829C8__A5__8S7829C11[3]),  3,3},
  {&(_tg__ZTV7S7829C4__7S7829C8__8S7829C11[3]),  3,3},
  {&(_tg__ZTV7S7829C4__A__7S7829C8__8S7829C11[3]),  3,3},
  {&(_tg__ZTV7S7829C7__A1__7S7829C8__8S7829C11[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S7829C11[];
extern  VTBL_ENTRY _ZTV8S7829C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7829C11[];
static VTBL_ENTRY alt_thunk_names142[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7829C2D0Ev,_ZTv0_n16_N7S7829C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6336_N7S7829C2D0Ev,_ZThn3896_N7S7829C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7829C2D1Ev,_ZTv0_n16_N7S7829C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6336_N7S7829C2D1Ev,_ZThn3896_N7S7829C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7829C2D0Ev,_ZTv0_n20_N7S7829C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8624_N7S7829C2D0Ev,_ZThn5308_N7S7829C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn376_N7S7829C2D0Ev,_ZThn228_N7S7829C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7829C2D1Ev,_ZTv0_n20_N7S7829C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8624_N7S7829C2D1Ev,_ZThn5308_N7S7829C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn376_N7S7829C2D1Ev,_ZThn228_N7S7829C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7829C11D0Ev,_ZTv0_n16_N8S7829C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N8S7829C11D0Ev,_ZThn3904_N8S7829C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7829C11D1Ev,_ZTv0_n16_N8S7829C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn6352_N8S7829C11D1Ev,_ZThn3904_N8S7829C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7829C11D0Ev,_ZTv0_n20_N8S7829C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8640_N8S7829C11D0Ev,_ZThn5316_N8S7829C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn392_N8S7829C11D0Ev,_ZThn236_N8S7829C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7829C11D1Ev,_ZTv0_n20_N8S7829C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8640_N8S7829C11D1Ev,_ZThn5316_N8S7829C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn392_N8S7829C11D1Ev,_ZThn236_N8S7829C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7829C11D0Ev,_ZTv0_n36_N8S7829C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7829C11D0Ev,_ZThn8_N8S7829C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7829C11D1Ev,_ZTv0_n36_N8S7829C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S7829C11D1Ev,_ZThn8_N8S7829C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7829C11 = {  "S7829C11", // class name
  bases_S7829C11, 36,
  &(vtc_S7829C11[0]), // expected_vtbl_contents
  &(vtt_S7829C11[0]), // expected_vtt_contents
  ABISELECT(16952,10436), // object size
  NSPAIRA(_ZTI8S7829C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7829C11),58, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7829C11),33, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names142,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7829C1  : S7829C2 , S19566C5 , S7829C11 {
  ::S7829C2 s7829c1f0;
  int s7829c1f1[2];
  virtual  ~S7829C1(); // _ZN7S7829C1D2Ev
  S7829C1(); // tgen
};
//SIG(1 S7829C1) C1{ BC2{ VBC3{ VBC4{ VBC5{ m FL Fp FC6{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC6 FC5[3] Fi[4]} BC6 BC5 BC7{ BC4 BC6 BC5 vd FL[6] Fi FC5 Fp FC6 Fi Fp[7]} Fi FC4 Fs Fp Fi[5]} VBC7 VBC8{ BC3 BC4 BC7 BC5 vd v1 FC9{} Fi[2] Fl Fp} BC5 VBC10{ m Fp Fc Fi:6 Fl FC9 Fi} vd v2 Fi} BC5 BC11{ VBC2 v3 Fs} vd FC2 Fi[2]}


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

static void Test_S7829C1()
{
  extern Class_Descriptor cd_S7829C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4330,5331)];
    init_test(&cd_S7829C1, buf);
    S7829C1 *dp, &lv = *(dp=new (buf) S7829C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(34632,21320), "sizeof(S7829C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7829C1)");
    /*is_ambiguous_... S7829C1::S7829C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C4*), ABISELECT(23296,14340), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C4*)(S7829C7*)(S7829C3*), ABISELECT(23296,14340), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C4*)(S7829C7*), ABISELECT(23296,14340), "S7829C1");
    check_base_class_offset(lv, (S19566C5*)(S7829C4*)(S7829C7*)(S7829C3*)(S7829C8*), ABISELECT(23296,14340), "S7829C1");
    /*is_ambiguous_... S7829C8::S7829C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C4*)(S7829C8*), ABISELECT(23296,14340), "S7829C1");
    /*is_ambiguous_... S7829C8::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C4*)(S7829C7*)(S7829C8*), ABISELECT(23296,14340), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C4*), ABISELECT(22088,13596), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C3 */ AMB_check_base_class_offset(lv, (S7829C4*)(S7829C3*), ABISELECT(22080,13592), "S7829C1");
    /*is_ambiguous_... S7829C3::S7829C4 */ AMB_check_base_class_offset(lv, (S7829C4*)(S7829C3*)(S7829C8*), ABISELECT(22080,13592), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C3*), ABISELECT(19984,12304), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C3*), ABISELECT(20096,12372), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C4*)(S7829C7*)(S7829C3*), ABISELECT(17704,10896), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C3 */ AMB_check_base_class_offset(lv, (S7829C4*)(S7829C7*)(S7829C3*), ABISELECT(17696,10892), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C3 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C7*)(S7829C3*), ABISELECT(18912,11640), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C3 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C7*)(S7829C3*), ABISELECT(19024,11708), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C3 */ AMB_check_base_class_offset(lv, (S7829C7*)(S7829C3*), ABISELECT(17696,10892), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C2 */ AMB_check_base_class_offset(lv, (S7829C3*)(S7829C2*), ABISELECT(17696,10892), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C2 */ AMB_check_base_class_offset(lv, (S7829C3*)(S7829C2*), ABISELECT(17696,10892), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C4*)(S7829C7*), ABISELECT(23664,14564), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C7 */ AMB_check_base_class_offset(lv, (S7829C4*)(S7829C7*), ABISELECT(23656,14560), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C7*), ABISELECT(24872,15308), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C7*), ABISELECT(24984,15376), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C2 */ AMB_check_base_class_offset(lv, (S7829C7*)(S7829C2*), ABISELECT(23656,14560), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C2 */ AMB_check_base_class_offset(lv, (S7829C7*)(S7829C2*), ABISELECT(23656,14560), "S7829C1");
    /*is_ambiguous_... S7829C3::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C3*)(S7829C8*), ABISELECT(28232,17384), "S7829C1");
    /*is_ambiguous_... S7829C3::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C3*)(S7829C8*), ABISELECT(28344,17452), "S7829C1");
    check_base_class_offset(lv, (S19566C6*)(S7829C4*)(S7829C7*)(S7829C3*)(S7829C8*), ABISELECT(25952,15976), "S7829C1");
    check_base_class_offset(lv, (S7829C4*)(S7829C7*)(S7829C3*)(S7829C8*), ABISELECT(25944,15972), "S7829C1");
    /*is_ambiguous_... S7829C7::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C7*)(S7829C3*)(S7829C8*), ABISELECT(27160,16720), "S7829C1");
    /*is_ambiguous_... S7829C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C7*)(S7829C3*)(S7829C8*), ABISELECT(27272,16788), "S7829C1");
    check_base_class_offset(lv, (S7829C7*)(S7829C3*)(S7829C8*), ABISELECT(25944,15972), "S7829C1");
    check_base_class_offset(lv, (S7829C3*)(S7829C8*), ABISELECT(25944,15972), "S7829C1");
    /*is_ambiguous_... S7829C8::S7829C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C4*)(S7829C8*), ABISELECT(30336,18676), "S7829C1");
    /*is_ambiguous_... S7829C8::S7829C4 */ AMB_check_base_class_offset(lv, (S7829C4*)(S7829C8*), ABISELECT(30328,18672), "S7829C1");
    /*is_ambiguous_... S7829C8::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C4*)(S7829C7*)(S7829C8*), ABISELECT(31552,19424), "S7829C1");
    /*is_ambiguous_... S7829C8::S7829C7 */ AMB_check_base_class_offset(lv, (S7829C4*)(S7829C7*)(S7829C8*), ABISELECT(31544,19420), "S7829C1");
    /*is_ambiguous_... S7829C8::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C6*)(S7829C7*)(S7829C8*), ABISELECT(32760,20168), "S7829C1");
    /*is_ambiguous_... S7829C8::S7829C7 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C7*)(S7829C8*), ABISELECT(32872,20236), "S7829C1");
    /*is_ambiguous_... S7829C8::S7829C7 */ AMB_check_base_class_offset(lv, (S7829C7*)(S7829C8*), ABISELECT(31544,19420), "S7829C1");
    /*is_ambiguous_... S7829C8::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C8*), ABISELECT(33832,20832), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C2 */ AMB_check_base_class_offset(lv, (S7829C8*)(S7829C2*), ABISELECT(25944,15972), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C2 */ AMB_check_base_class_offset(lv, (S7829C8*)(S7829C2*), ABISELECT(25944,15972), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C2 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C2*), ABISELECT(8,4), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C2 */ AMB_check_base_class_offset(lv, (S19566C11*)(S7829C2*), ABISELECT(34224,21072), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C2 */ AMB_check_base_class_offset(lv, (S19566C11*)(S7829C2*), ABISELECT(34224,21072), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C2 */ AMB_check_base_class_offset(lv, (S7829C2*), 0, "S7829C1");
    /*is_ambiguous_... S7829C1::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(376,228), "S7829C1");
    /*is_ambiguous_... S7829C1::S7829C2 */ AMB_check_base_class_offset(lv, (S19566C5*)(S7829C2*), ABISELECT(34264,21096), "S7829C1");
    check_base_class_offset(lv, (S7829C2*)(S7829C11*), ABISELECT(34256,21092), "S7829C1");
    check_base_class_offset(lv, (S7829C11*), ABISELECT(736,448), "S7829C1");
    check_field_offset(lv, s7829c1f0, ABISELECT(752,456), "S7829C1.s7829c1f0");
    check_field_offset(lv, s7829c1f1, ABISELECT(17688,10884), "S7829C1.s7829c1f1");
    test_class_info(&lv, &cd_S7829C1);
    dp->~S7829C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7829C1(Test_S7829C1, "S7829C1", ABISELECT(34632,21320));

#else // __cplusplus

extern void _ZN7S7829C1C1Ev();
extern void _ZN7S7829C1D2Ev();
Name_Map name_map_S7829C1[] = {
  NSPAIR(_ZN7S7829C1C1Ev),
  NSPAIR(_ZN7S7829C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S7829C4;
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S7829C4;
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S7829C7;
extern VTBL_ENTRY _ZTI7S7829C7[];
extern  VTBL_ENTRY _ZTV7S7829C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C7[];
extern Class_Descriptor cd_S7829C3;
extern VTBL_ENTRY _ZTI7S7829C3[];
extern  VTBL_ENTRY _ZTV7S7829C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S7829C4;
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S7829C7;
extern VTBL_ENTRY _ZTI7S7829C7[];
extern  VTBL_ENTRY _ZTV7S7829C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C7[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S7829C4;
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S7829C7;
extern VTBL_ENTRY _ZTI7S7829C7[];
extern  VTBL_ENTRY _ZTV7S7829C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C7[];
extern Class_Descriptor cd_S7829C3;
extern VTBL_ENTRY _ZTI7S7829C3[];
extern  VTBL_ENTRY _ZTV7S7829C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C3[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S7829C4;
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S7829C4;
extern VTBL_ENTRY _ZTI7S7829C4[];
extern  VTBL_ENTRY _ZTV7S7829C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S7829C7;
extern VTBL_ENTRY _ZTI7S7829C7[];
extern  VTBL_ENTRY _ZTV7S7829C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C7[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S7829C8;
extern VTBL_ENTRY _ZTI7S7829C8[];
extern  VTBL_ENTRY _ZTV7S7829C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C8[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C11;
extern VTBL_ENTRY _ZTI9S19566C11[];
extern Class_Descriptor cd_S7829C2;
extern VTBL_ENTRY _ZTI7S7829C2[];
extern  VTBL_ENTRY _ZTV7S7829C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C2[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S7829C2;
extern VTBL_ENTRY _ZTI7S7829C2[];
extern  VTBL_ENTRY _ZTV7S7829C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C2[];
extern Class_Descriptor cd_S7829C11;
extern VTBL_ENTRY _ZTI8S7829C11[];
extern  VTBL_ENTRY _ZTV8S7829C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7829C11[];
static Base_Class bases_S7829C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(23296,14340), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(22088,13596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C4,    ABISELECT(22080,13592), //bcp->offset
    31, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(19984,12304), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(20096,12372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(17704,10896), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C4,    ABISELECT(17696,10892), //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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(18912,11640), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(19024,11708), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C7,    ABISELECT(17696,10892), //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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7829C3,    ABISELECT(17696,10892), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(23664,14564), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C4,    ABISELECT(23656,14560), //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
    15, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(24872,15308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 0},
  {&cd_S19566C5,    ABISELECT(24984,15376), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 0},
  {&cd_S7829C7,    ABISELECT(23656,14560), //bcp->offset
    34, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(28232,17384), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(28344,17452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(25952,15976), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C4,    ABISELECT(25944,15972), //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
    7, //init_seq
    22, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(27160,16720), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(27272,16788), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C7,    ABISELECT(25944,15972), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S7829C3,    ABISELECT(25944,15972), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(30336,18676), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C4,    ABISELECT(30328,18672), //bcp->offset
    49, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(31552,19424), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S7829C4,    ABISELECT(31544,19420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(32760,20168), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(32872,20236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C7,    ABISELECT(31544,19420), //bcp->offset
    52, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    32, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(33832,20832), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7829C8,    ABISELECT(25944,15972), //bcp->offset
    40, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S19566C5,    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
    35, //immediately_derived
  0, 0},
  {&cd_S19566C11,    ABISELECT(34224,21072), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    35, //immediately_derived
  0, 1},
  {&cd_S7829C2,    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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19566C5,    ABISELECT(376,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19566C5,    ABISELECT(34264,21096), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S7829C2,    ABISELECT(34256,21092), //bcp->offset
    57, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    39, //immediately_derived
  0, 1},
  {&cd_S7829C11,    ABISELECT(736,448), //bcp->offset
    12, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7829C1[];
extern void _ZN7S7829C1D1Ev();
extern void _ZN7S7829C1D0Ev();
extern void _ZN7S7829C22v2Ev();
extern void _ZN8S7829C112v3Ev();
extern void ABISELECT(_ZThn736_N7S7829C1D1Ev,_ZThn448_N7S7829C1D1Ev)();
extern void ABISELECT(_ZThn736_N7S7829C1D0Ev,_ZThn448_N7S7829C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7829C1D1Ev,_ZTv0_n20_N7S7829C1D1Ev)();
extern void ABISELECT(_ZThn17696_N7S7829C1D1Ev,_ZThn10892_N7S7829C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7829C1D0Ev,_ZTv0_n20_N7S7829C1D0Ev)();
extern void ABISELECT(_ZThn17696_N7S7829C1D0Ev,_ZThn10892_N7S7829C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7829C1D1Ev,_ZTv0_n16_N7S7829C1D1Ev)();
extern void ABISELECT(_ZThn23656_N7S7829C1D1Ev,_ZThn14560_N7S7829C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7829C1D0Ev,_ZTv0_n16_N7S7829C1D0Ev)();
extern void ABISELECT(_ZThn23656_N7S7829C1D0Ev,_ZThn14560_N7S7829C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7829C1D1Ev,_ZTv0_n20_N7S7829C1D1Ev)();
extern void ABISELECT(_ZThn25944_N7S7829C1D1Ev,_ZThn15972_N7S7829C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7829C1D0Ev,_ZTv0_n20_N7S7829C1D0Ev)();
extern void ABISELECT(_ZThn25944_N7S7829C1D0Ev,_ZThn15972_N7S7829C1D0Ev)() __attribute__((weak));
extern void _ZN7S7829C82v1Ev();
extern void ABISELECT(_ZTvn5600_n40_N7S7829C1D1Ev,_ZTvn3448_n20_N7S7829C1D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N7S7829C1D0Ev,_ZTvn3448_n20_N7S7829C1D0Ev)();
extern void ABISELECT(_ZTv0_n72_N7S7829C1D1Ev,_ZTv0_n36_N7S7829C1D1Ev)();
extern void ABISELECT(_ZThn34256_N7S7829C1D1Ev,_ZThn21092_N7S7829C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N7S7829C1D0Ev,_ZTv0_n36_N7S7829C1D0Ev)();
extern void ABISELECT(_ZThn34256_N7S7829C1D0Ev,_ZThn21092_N7S7829C1D0Ev)() __attribute__((weak));
extern void _ZN7S7829C22v2Ev();
static  VTBL_ENTRY vtc_S7829C1[] = {
  ABISELECT(34256,21092),
  ABISELECT(34224,21072),
  ABISELECT(25944,15972),
  ABISELECT(23656,14560),
  ABISELECT(23296,14340),
  ABISELECT(22080,13592),
  ABISELECT(17696,10892),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C1[0]),
  (VTBL_ENTRY)&_ZN7S7829C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7829C22v2Ev,
  ABISELECT(33488,20624),
  ABISELECT(25208,15524),
  ABISELECT(22920,14112),
  ABISELECT(22560,13892),
  ABISELECT(21344,13144),
  ABISELECT(16960,10444),
  ABISELECT(33520,20644),
  ABISELECT(-736,-448),
  (VTBL_ENTRY)&(_ZTI7S7829C1[0]),
  (VTBL_ENTRY)&_ZN8S7829C112v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn736_N7S7829C1D1Ev,_ZThn448_N7S7829C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn736_N7S7829C1D0Ev,_ZThn448_N7S7829C1D0Ev),
  ABISELECT(-17696,-10892),
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  ABISELECT(-17696,-10892),
  (VTBL_ENTRY)&(_ZTI7S7829C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7829C1D1Ev,_ZTv0_n20_N7S7829C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7829C1D0Ev,_ZTv0_n20_N7S7829C1D0Ev),
  ABISELECT(1216,748),
  ABISELECT(-22080,-13592),
  (VTBL_ENTRY)&(_ZTI7S7829C1[0]),
  ABISELECT(-23656,-14560),
  ABISELECT(-360,-220),
  ABISELECT(-23656,-14560),
  (VTBL_ENTRY)&(_ZTI7S7829C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7829C1D1Ev,_ZTv0_n16_N7S7829C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7829C1D0Ev,_ZTv0_n16_N7S7829C1D0Ev),
  0,
  ABISELECT(-25944,-15972),
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  ABISELECT(-25944,-15972),
  (VTBL_ENTRY)&(_ZTI7S7829C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7829C1D1Ev,_ZTv0_n20_N7S7829C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7829C1D0Ev,_ZTv0_n20_N7S7829C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7829C82v1Ev,
  ABISELECT(-7032,-4332),
  ABISELECT(-30328,-18672),
  (VTBL_ENTRY)&(_ZTI7S7829C1[0]),
  ABISELECT(-8248,-5080),
  ABISELECT(-31544,-19420),
  (VTBL_ENTRY)&(_ZTI7S7829C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N7S7829C1D1Ev,_ZTvn3448_n20_N7S7829C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N7S7829C1D0Ev,_ZTvn3448_n20_N7S7829C1D0Ev),
  0,
  ABISELECT(-34256,-21092),
  ABISELECT(-32,-20),
  ABISELECT(-8312,-5120),
  ABISELECT(-10600,-6532),
  ABISELECT(-10960,-6752),
  ABISELECT(-12176,-7500),
  ABISELECT(-16560,-10200),
  ABISELECT(-34256,-21092),
  (VTBL_ENTRY)&(_ZTI7S7829C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7829C1D1Ev,_ZTv0_n36_N7S7829C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N7S7829C1D0Ev,_ZTv0_n36_N7S7829C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7829C22v2Ev,
};
extern VTBL_ENTRY _ZTV7S7829C1[];
extern void _ZN7S7829C2D1Ev();
extern void _ZN7S7829C2D0Ev();
extern void _ZN7S7829C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C2__A__7S7829C1[] = {
  ABISELECT(34224,21072),
  ABISELECT(25944,15972),
  ABISELECT(23656,14560),
  ABISELECT(23296,14340),
  ABISELECT(22080,13592),
  ABISELECT(17696,10892),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
  (VTBL_ENTRY)&_ZN7S7829C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7829C22v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7829C2D1Ev,_ZTv0_n20_N7S7829C2D1Ev)();
extern void ABISELECT(_ZThn17696_N7S7829C2D1Ev,_ZThn10892_N7S7829C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7829C2D0Ev,_ZTv0_n20_N7S7829C2D0Ev)();
extern void ABISELECT(_ZThn17696_N7S7829C2D0Ev,_ZThn10892_N7S7829C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7829C3__7S7829C2__A__7S7829C1[] = {
  ABISELECT(-17696,-10892),
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  ABISELECT(-17696,-10892),
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7829C2D1Ev,_ZTv0_n20_N7S7829C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7829C2D0Ev,_ZTv0_n20_N7S7829C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7829C4__7S7829C2__A__7S7829C1[] = {
  ABISELECT(1216,748),
  ABISELECT(-22080,-13592),
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7829C2D1Ev,_ZTv0_n16_N7S7829C2D1Ev)();
extern void ABISELECT(_ZThn23656_N7S7829C2D1Ev,_ZThn14560_N7S7829C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7829C2D0Ev,_ZTv0_n16_N7S7829C2D0Ev)();
extern void ABISELECT(_ZThn23656_N7S7829C2D0Ev,_ZThn14560_N7S7829C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7829C7__A1__7S7829C2__A__7S7829C1[] = {
  ABISELECT(-23656,-14560),
  ABISELECT(-360,-220),
  ABISELECT(-23656,-14560),
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7829C2D1Ev,_ZTv0_n16_N7S7829C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7829C2D0Ev,_ZTv0_n16_N7S7829C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7829C2D1Ev,_ZTv0_n20_N7S7829C2D1Ev)();
extern void ABISELECT(_ZThn25944_N7S7829C2D1Ev,_ZThn15972_N7S7829C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7829C2D0Ev,_ZTv0_n20_N7S7829C2D0Ev)();
extern void ABISELECT(_ZThn25944_N7S7829C2D0Ev,_ZThn15972_N7S7829C2D0Ev)() __attribute__((weak));
extern void _ZN7S7829C82v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C8__7S7829C2__A__7S7829C1[] = {
  0,
  ABISELECT(-25944,-15972),
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  ABISELECT(-25944,-15972),
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7829C2D1Ev,_ZTv0_n20_N7S7829C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7829C2D0Ev,_ZTv0_n20_N7S7829C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7829C82v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7829C47S7829C8__A4__7S7829C2__A__7S7829C1[] = {
  ABISELECT(-7032,-4332),
  ABISELECT(-30328,-18672),
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
};
extern void ABISELECT(_ZTvn5600_n40_N7S7829C2D1Ev,_ZTvn3448_n20_N7S7829C2D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N7S7829C2D0Ev,_ZTvn3448_n20_N7S7829C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7829C77S7829C8__A3__7S7829C2__A__7S7829C1[] = {
  ABISELECT(-8248,-5080),
  ABISELECT(-31544,-19420),
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N7S7829C2D1Ev,_ZTvn3448_n20_N7S7829C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N7S7829C2D0Ev,_ZTvn3448_n20_N7S7829C2D0Ev),
};
extern void _ZN8S7829C112v3Ev();
extern void _ZN8S7829C11D1Ev();
extern void _ZN8S7829C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7829C11__7S7829C1[] = {
  ABISELECT(33488,20624),
  ABISELECT(25208,15524),
  ABISELECT(22920,14112),
  ABISELECT(22560,13892),
  ABISELECT(21344,13144),
  ABISELECT(16960,10444),
  ABISELECT(33520,20644),
  0,
  (VTBL_ENTRY)&(_ZTI8S7829C11[0]),
  (VTBL_ENTRY)&_ZN8S7829C112v3Ev,
  (VTBL_ENTRY)&_ZN8S7829C11D1Ev,
  (VTBL_ENTRY)&_ZN8S7829C11D0Ev,
};
extern void ABISELECT(_ZTv0_n72_N8S7829C11D1Ev,_ZTv0_n36_N8S7829C11D1Ev)();
extern void ABISELECT(_ZThn33520_N8S7829C11D1Ev,_ZThn20644_N8S7829C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S7829C11D0Ev,_ZTv0_n36_N8S7829C11D0Ev)();
extern void ABISELECT(_ZThn33520_N8S7829C11D0Ev,_ZThn20644_N8S7829C11D0Ev)() __attribute__((weak));
extern void _ZN7S7829C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C2__8S7829C11__7S7829C1[] = {
  0,
  ABISELECT(-33520,-20644),
  ABISELECT(-32,-20),
  ABISELECT(-8312,-5120),
  ABISELECT(-10600,-6532),
  ABISELECT(-10960,-6752),
  ABISELECT(-12176,-7500),
  ABISELECT(-16560,-10200),
  ABISELECT(-33520,-20644),
  (VTBL_ENTRY)&(_ZTI8S7829C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7829C11D1Ev,_ZTv0_n36_N8S7829C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S7829C11D0Ev,_ZTv0_n36_N8S7829C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7829C22v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N8S7829C11D1Ev,_ZTv0_n20_N8S7829C11D1Ev)();
extern void ABISELECT(_ZThn16960_N8S7829C11D1Ev,_ZThn10444_N8S7829C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7829C11D0Ev,_ZTv0_n20_N8S7829C11D0Ev)();
extern void ABISELECT(_ZThn16960_N8S7829C11D0Ev,_ZThn10444_N8S7829C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7829C3__8S7829C11__7S7829C1[] = {
  ABISELECT(-16960,-10444),
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  ABISELECT(-16960,-10444),
  (VTBL_ENTRY)&(_ZTI8S7829C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7829C11D1Ev,_ZTv0_n20_N8S7829C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7829C11D0Ev,_ZTv0_n20_N8S7829C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7829C4__8S7829C11__7S7829C1[] = {
  ABISELECT(1216,748),
  ABISELECT(-21344,-13144),
  (VTBL_ENTRY)&(_ZTI8S7829C11[0]),
};
extern void ABISELECT(_ZTv0_n32_N8S7829C11D1Ev,_ZTv0_n16_N8S7829C11D1Ev)();
extern void ABISELECT(_ZThn22920_N8S7829C11D1Ev,_ZThn14112_N8S7829C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S7829C11D0Ev,_ZTv0_n16_N8S7829C11D0Ev)();
extern void ABISELECT(_ZThn22920_N8S7829C11D0Ev,_ZThn14112_N8S7829C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7829C7__A1__8S7829C11__7S7829C1[] = {
  ABISELECT(-22920,-14112),
  ABISELECT(-360,-220),
  ABISELECT(-22920,-14112),
  (VTBL_ENTRY)&(_ZTI8S7829C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7829C11D1Ev,_ZTv0_n16_N8S7829C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S7829C11D0Ev,_ZTv0_n16_N8S7829C11D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S7829C11D1Ev,_ZTv0_n20_N8S7829C11D1Ev)();
extern void ABISELECT(_ZThn25208_N8S7829C11D1Ev,_ZThn15524_N8S7829C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S7829C11D0Ev,_ZTv0_n20_N8S7829C11D0Ev)();
extern void ABISELECT(_ZThn25208_N8S7829C11D0Ev,_ZThn15524_N8S7829C11D0Ev)() __attribute__((weak));
extern void _ZN7S7829C82v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C8__8S7829C11__7S7829C1[] = {
  0,
  ABISELECT(-25208,-15524),
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  ABISELECT(-25208,-15524),
  (VTBL_ENTRY)&(_ZTI8S7829C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7829C11D1Ev,_ZTv0_n20_N8S7829C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S7829C11D0Ev,_ZTv0_n20_N8S7829C11D0Ev),
  (VTBL_ENTRY)&_ZN7S7829C82v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7829C47S7829C8__A4__8S7829C11__7S7829C1[] = {
  ABISELECT(-7032,-4332),
  ABISELECT(-29592,-18224),
  (VTBL_ENTRY)&(_ZTI8S7829C11[0]),
};
extern void ABISELECT(_ZTvn5600_n40_N8S7829C11D1Ev,_ZTvn3448_n20_N8S7829C11D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N8S7829C11D0Ev,_ZTvn3448_n20_N8S7829C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7829C77S7829C8__A3__8S7829C11__7S7829C1[] = {
  ABISELECT(-8248,-5080),
  ABISELECT(-30808,-18972),
  (VTBL_ENTRY)&(_ZTI8S7829C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N8S7829C11D1Ev,_ZTvn3448_n20_N8S7829C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N8S7829C11D0Ev,_ZTvn3448_n20_N8S7829C11D0Ev),
};
extern void _ZN7S7829C3D1Ev();
extern void _ZN7S7829C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C3__7S7829C1[] = {
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C3[0]),
  (VTBL_ENTRY)&_ZN7S7829C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C3D0Ev,
};
extern void _ZN7S7829C7D1Ev();
extern void _ZN7S7829C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C77S7829C3__7S7829C1[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C7[0]),
  (VTBL_ENTRY)&_ZN7S7829C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7829C47S7829C77S7829C3__A1__7S7829C1[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7829C4__7S7829C3__7S7829C1[] = {
  ABISELECT(1216,748),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI7S7829C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7829C4__7S7829C1[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
extern void _ZN7S7829C7D1Ev();
extern void _ZN7S7829C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C7__A1__7S7829C1[] = {
  ABISELECT(-360,-220),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C7[0]),
  (VTBL_ENTRY)&_ZN7S7829C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7829C47S7829C7__A2__7S7829C1[] = {
  ABISELECT(-360,-220),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
extern void _ZN7S7829C8D1Ev();
extern void _ZN7S7829C8D0Ev();
extern void _ZN7S7829C82v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C8__7S7829C1[] = {
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C8[0]),
  (VTBL_ENTRY)&_ZN7S7829C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7829C82v1Ev,
};
extern void _ZN7S7829C3D1Ev();
extern void _ZN7S7829C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C37S7829C8__A1__7S7829C1[] = {
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C3[0]),
  (VTBL_ENTRY)&_ZN7S7829C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C3D0Ev,
};
extern void _ZN7S7829C7D1Ev();
extern void _ZN7S7829C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C77S7829C37S7829C8__A2__7S7829C1[] = {
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C7[0]),
  (VTBL_ENTRY)&_ZN7S7829C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7829C47S7829C77S7829C37S7829C8__A3__7S7829C1[] = {
  ABISELECT(-2648,-1632),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7829C4__7S7829C37S7829C8__A1__7S7829C1[] = {
  ABISELECT(1216,748),
  ABISELECT(3864,2380),
  (VTBL_ENTRY)&(_ZTI7S7829C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7829C47S7829C8__A4__7S7829C1[] = {
  ABISELECT(-7032,-4332),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
extern void _ZN7S7829C7D1Ev();
extern void _ZN7S7829C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C77S7829C8__A3__7S7829C1[] = {
  ABISELECT(-8248,-5080),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C7[0]),
  (VTBL_ENTRY)&_ZN7S7829C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7829C47S7829C77S7829C8__A5__7S7829C1[] = {
  ABISELECT(-8248,-5080),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7829C4__7S7829C8__7S7829C1[] = {
  ABISELECT(1216,748),
  ABISELECT(3864,2380),
  (VTBL_ENTRY)&(_ZTI7S7829C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7829C4__A__7S7829C8__7S7829C1[] = {
  ABISELECT(-7032,-4332),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI7S7829C8[0]),
};
extern void ABISELECT(_ZThn5600_N7S7829C8D1Ev,_ZThn3448_N7S7829C8D1Ev)();
extern void ABISELECT(_ZThn5600_N7S7829C8D0Ev,_ZThn3448_N7S7829C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7829C7__A1__7S7829C8__7S7829C1[] = {
  ABISELECT(-8248,-5080),
  ABISELECT(-5600,-3448),
  (VTBL_ENTRY)&(_ZTI7S7829C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N7S7829C8D1Ev,_ZThn3448_N7S7829C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N7S7829C8D0Ev,_ZThn3448_N7S7829C8D0Ev),
};
extern void _ZN7S7829C2D1Ev();
extern void _ZN7S7829C2D0Ev();
extern void _ZN7S7829C22v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C2__A1__7S7829C1[] = {
  ABISELECT(-32,-20),
  ABISELECT(-8312,-5120),
  ABISELECT(-10600,-6532),
  ABISELECT(-10960,-6752),
  ABISELECT(-12176,-7500),
  ABISELECT(-16560,-10200),
  0,
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
  (VTBL_ENTRY)&_ZN7S7829C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7829C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7829C22v2Ev,
};
extern void ABISELECT(_ZTv0_n40_N7S7829C2D1Ev,_ZTv0_n20_N7S7829C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7829C2D0Ev,_ZTv0_n20_N7S7829C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7829C3__7S7829C2__A1__7S7829C1[] = {
  ABISELECT(16560,10200),
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  ABISELECT(16560,10200),
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7829C2D1Ev,_ZTv0_n20_N7S7829C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7829C2D0Ev,_ZTv0_n20_N7S7829C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7829C4__7S7829C2__A1__7S7829C1[] = {
  ABISELECT(1216,748),
  ABISELECT(12176,7500),
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
};
extern void ABISELECT(_ZTv0_n32_N7S7829C2D1Ev,_ZTv0_n16_N7S7829C2D1Ev)();
extern void ABISELECT(_ZTv0_n32_N7S7829C2D0Ev,_ZTv0_n16_N7S7829C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7829C7__A1__7S7829C2__A1__7S7829C1[] = {
  ABISELECT(10600,6532),
  ABISELECT(-360,-220),
  ABISELECT(10600,6532),
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7829C2D1Ev,_ZTv0_n16_N7S7829C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7829C2D0Ev,_ZTv0_n16_N7S7829C2D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7829C2D1Ev,_ZTv0_n20_N7S7829C2D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7829C2D0Ev,_ZTv0_n20_N7S7829C2D0Ev)();
extern void _ZN7S7829C82v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7829C8__7S7829C2__A1__7S7829C1[] = {
  0,
  ABISELECT(8312,5120),
  ABISELECT(-3864,-2380),
  ABISELECT(-2648,-1632),
  ABISELECT(8312,5120),
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7829C2D1Ev,_ZTv0_n20_N7S7829C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7829C2D0Ev,_ZTv0_n20_N7S7829C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7829C82v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7829C47S7829C8__A4__7S7829C2__A1__7S7829C1[] = {
  ABISELECT(-7032,-4332),
  ABISELECT(3928,2420),
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
};
extern void ABISELECT(_ZTvn5600_n40_N7S7829C2D1Ev,_ZTvn3448_n20_N7S7829C2D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N7S7829C2D0Ev,_ZTvn3448_n20_N7S7829C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7829C77S7829C8__A3__7S7829C2__A1__7S7829C1[] = {
  ABISELECT(-8248,-5080),
  ABISELECT(2712,1672),
  (VTBL_ENTRY)&(_ZTI7S7829C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N7S7829C2D1Ev,_ZTvn3448_n20_N7S7829C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N7S7829C2D0Ev,_ZTvn3448_n20_N7S7829C2D0Ev),
};
static  VTT_ENTRY vtt_S7829C1[] = {
  {&(_ZTV7S7829C1[9]),  9,70},
  {&(_tg__ZTV7S7829C2__A__7S7829C1[8]),  8,11},
  {&(_tg__ZTV7S7829C3__7S7829C2__A__7S7829C1[5]),  5,7},
  {&(_tg__ZTV7S7829C4__7S7829C2__A__7S7829C1[3]),  3,3},
  {&(_tg__ZTV7S7829C7__A1__7S7829C2__A__7S7829C1[4]),  4,6},
  {&(_tg__ZTV7S7829C8__7S7829C2__A__7S7829C1[6]),  6,9},
  {&(_tg__ZTV7S7829C47S7829C8__A4__7S7829C2__A__7S7829C1[3]),  3,3},
  {&(_tg__ZTV7S7829C77S7829C8__A3__7S7829C2__A__7S7829C1[3]),  3,5},
  {&(_tg__ZTV8S7829C11__7S7829C1[9]),  9,12},
  {&(_tg__ZTV7S7829C2__8S7829C11__7S7829C1[10]),  10,13},
  {&(_tg__ZTV7S7829C3__8S7829C11__7S7829C1[5]),  5,7},
  {&(_tg__ZTV7S7829C4__8S7829C11__7S7829C1[3]),  3,3},
  {&(_tg__ZTV7S7829C7__A1__8S7829C11__7S7829C1[4]),  4,6},
  {&(_tg__ZTV7S7829C8__8S7829C11__7S7829C1[6]),  6,9},
  {&(_tg__ZTV7S7829C47S7829C8__A4__8S7829C11__7S7829C1[3]),  3,3},
  {&(_tg__ZTV7S7829C77S7829C8__A3__8S7829C11__7S7829C1[3]),  3,5},
  {&(_ZTV7S7829C1[29]),  29,70},
  {&(_ZTV7S7829C1[34]),  34,70},
  {&(_ZTV7S7829C1[38]),  38,70},
  {&(_ZTV7S7829C1[46]),  46,70},
  {&(_ZTV7S7829C1[52]),  52,70},
  {&(_ZTV7S7829C1[55]),  55,70},
  {&(_ZTV7S7829C1[21]),  21,70},
  {&(_ZTV7S7829C1[67]),  67,70},
  {&(_tg__ZTV7S7829C3__7S7829C1[4]),  4,6},
  {&(_tg__ZTV7S7829C77S7829C3__7S7829C1[3]),  3,5},
  {&(_tg__ZTV7S7829C47S7829C77S7829C3__A1__7S7829C1[3]),  3,3},
  {&(_tg__ZTV7S7829C4__7S7829C3__7S7829C1[3]),  3,3},
  {&(_tg__ZTV7S7829C4__7S7829C1[3]),  3,3},
  {&(_tg__ZTV7S7829C7__A1__7S7829C1[3]),  3,5},
  {&(_tg__ZTV7S7829C47S7829C7__A2__7S7829C1[3]),  3,3},
  {&(_tg__ZTV7S7829C8__7S7829C1[4]),  4,7},
  {&(_tg__ZTV7S7829C37S7829C8__A1__7S7829C1[4]),  4,6},
  {&(_tg__ZTV7S7829C77S7829C37S7829C8__A2__7S7829C1[3]),  3,5},
  {&(_tg__ZTV7S7829C47S7829C77S7829C37S7829C8__A3__7S7829C1[3]),  3,3},
  {&(_tg__ZTV7S7829C4__7S7829C37S7829C8__A1__7S7829C1[3]),  3,3},
  {&(_tg__ZTV7S7829C47S7829C8__A4__7S7829C1[3]),  3,3},
  {&(_tg__ZTV7S7829C77S7829C8__A3__7S7829C1[3]),  3,5},
  {&(_tg__ZTV7S7829C47S7829C77S7829C8__A5__7S7829C1[3]),  3,3},
  {&(_tg__ZTV7S7829C4__7S7829C8__7S7829C1[3]),  3,3},
  {&(_tg__ZTV7S7829C4__A__7S7829C8__7S7829C1[3]),  3,3},
  {&(_tg__ZTV7S7829C7__A1__7S7829C8__7S7829C1[3]),  3,5},
  {&(_tg__ZTV7S7829C2__A1__7S7829C1[8]),  8,11},
  {&(_tg__ZTV7S7829C3__7S7829C2__A1__7S7829C1[5]),  5,7},
  {&(_tg__ZTV7S7829C4__7S7829C2__A1__7S7829C1[3]),  3,3},
  {&(_tg__ZTV7S7829C7__A1__7S7829C2__A1__7S7829C1[4]),  4,6},
  {&(_tg__ZTV7S7829C8__7S7829C2__A1__7S7829C1[6]),  6,9},
  {&(_tg__ZTV7S7829C47S7829C8__A4__7S7829C2__A1__7S7829C1[3]),  3,3},
  {&(_tg__ZTV7S7829C77S7829C8__A3__7S7829C2__A1__7S7829C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S7829C1[];
extern  VTBL_ENTRY _ZTV7S7829C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7829C1[];
static VTBL_ENTRY alt_thunk_names143[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7829C11D0Ev,_ZTv0_n16_N8S7829C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22920_N8S7829C11D0Ev,_ZThn14112_N8S7829C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S7829C11D1Ev,_ZTv0_n16_N8S7829C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn22920_N8S7829C11D1Ev,_ZThn14112_N8S7829C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7829C11D0Ev,_ZTv0_n20_N8S7829C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25208_N8S7829C11D0Ev,_ZThn15524_N8S7829C11D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16960_N8S7829C11D0Ev,_ZThn10444_N8S7829C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S7829C11D1Ev,_ZTv0_n20_N8S7829C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25208_N8S7829C11D1Ev,_ZThn15524_N8S7829C11D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn16960_N8S7829C11D1Ev,_ZThn10444_N8S7829C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7829C11D0Ev,_ZTv0_n36_N8S7829C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33520_N8S7829C11D0Ev,_ZThn20644_N8S7829C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S7829C11D1Ev,_ZTv0_n36_N8S7829C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn33520_N8S7829C11D1Ev,_ZThn20644_N8S7829C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7829C2D0Ev,_ZTv0_n16_N7S7829C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn23656_N7S7829C2D0Ev,_ZThn14560_N7S7829C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7829C2D1Ev,_ZTv0_n16_N7S7829C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn23656_N7S7829C2D1Ev,_ZThn14560_N7S7829C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7829C2D0Ev,_ZTv0_n20_N7S7829C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25944_N7S7829C2D0Ev,_ZThn15972_N7S7829C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17696_N7S7829C2D0Ev,_ZThn10892_N7S7829C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7829C2D1Ev,_ZTv0_n20_N7S7829C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25944_N7S7829C2D1Ev,_ZThn15972_N7S7829C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17696_N7S7829C2D1Ev,_ZThn10892_N7S7829C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7829C1D0Ev,_ZTv0_n36_N7S7829C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn34256_N7S7829C1D0Ev,_ZThn21092_N7S7829C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N7S7829C1D1Ev,_ZTv0_n36_N7S7829C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn34256_N7S7829C1D1Ev,_ZThn21092_N7S7829C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7829C1D0Ev,_ZTv0_n16_N7S7829C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn23656_N7S7829C1D0Ev,_ZThn14560_N7S7829C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7829C1D1Ev,_ZTv0_n16_N7S7829C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn23656_N7S7829C1D1Ev,_ZThn14560_N7S7829C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7829C1D0Ev,_ZTv0_n20_N7S7829C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25944_N7S7829C1D0Ev,_ZThn15972_N7S7829C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17696_N7S7829C1D0Ev,_ZThn10892_N7S7829C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7829C1D1Ev,_ZTv0_n20_N7S7829C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn25944_N7S7829C1D1Ev,_ZThn15972_N7S7829C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn17696_N7S7829C1D1Ev,_ZThn10892_N7S7829C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7829C1 = {  "S7829C1", // class name
  bases_S7829C1, 40,
  &(vtc_S7829C1[0]), // expected_vtbl_contents
  &(vtt_S7829C1[0]), // expected_vtt_contents
  ABISELECT(34632,21320), // object size
  NSPAIRA(_ZTI7S7829C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7829C1),70, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7829C1),49, //virtual table table var
  16, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names143,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7202C4  : S20955C5 , S2264C38 {
};
//SIG(-1 S7202C4) C1{ BC2{ m FL Fc:0} BC3{ m}}



static void Test_S7202C4()
{
  extern Class_Descriptor cd_S7202C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2,3)];
    init_test(&cd_S7202C4, buf);
    S7202C4 &lv = *(new (buf) S7202C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S7202C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7202C4)");
    check_base_class_offset(lv, (S20955C5*), 0, "S7202C4");
    check_base_class_offset(lv, (S2264C38*), 0, "S7202C4");
    test_class_info(&lv, &cd_S7202C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7202C4(Test_S7202C4, "S7202C4", 8);

#else // __cplusplus

extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
static Base_Class bases_S7202C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S7202C4[];
Class_Descriptor cd_S7202C4 = {  "S7202C4", // class name
  bases_S7202C4, 2,
  0, // no vftv
  0, //no vtt
  8, // object size
  NSPAIRA(_ZTI7S7202C4),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  S7202C7  : virtual S2264C38 , S20955C5 {
  ~S7202C7(); // tgen
  S7202C7(); // tgen
};
//SIG(-1 S7202C7) C1{ VBC2{ m} BC3{ m FL Fc:0}}


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

static void Test_S7202C7()
{
  extern Class_Descriptor cd_S7202C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S7202C7, buf);
    S7202C7 *dp, &lv = *(dp=new (buf) S7202C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S7202C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7202C7)");
    check_base_class_offset(lv, (S2264C38*), 0, "S7202C7");
    check_base_class_offset(lv, (S20955C5*), ABISELECT(8,4), "S7202C7");
    test_class_info(&lv, &cd_S7202C7);
    dp->~S7202C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7202C7(Test_S7202C7, "S7202C7", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S7202C7C1Ev();
extern void _ZN7S7202C7D1Ev();
Name_Map name_map_S7202C7[] = {
  NSPAIR(_ZN7S7202C7C1Ev),
  NSPAIR(_ZN7S7202C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
static Base_Class bases_S7202C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20955C5,    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 _ZTI7S7202C7[];
static  VTBL_ENTRY vtc_S7202C7[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C7[0]),
};
extern VTBL_ENTRY _ZTV7S7202C7[];
static  VTT_ENTRY vtt_S7202C7[] = {
  {&(_ZTV7S7202C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7202C7[];
extern  VTBL_ENTRY _ZTV7S7202C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C7[];
Class_Descriptor cd_S7202C7 = {  "S7202C7", // class name
  bases_S7202C7, 2,
  &(vtc_S7202C7[0]), // expected_vtbl_contents
  &(vtt_S7202C7[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S7202C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7202C7),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7202C7),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  S7202C8  : virtual S2264C28 , S7202C4 , virtual S2264C38 {
  int s7202c8f0;
  ~S7202C8(); // tgen
  S7202C8(); // tgen
};
//SIG(-1 S7202C8) C1{ VBC2{ m} BC3{ BC4{ m FL Fc:0} BC5{ m}} VBC5 Fi}


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

static void Test_S7202C8()
{
  extern Class_Descriptor cd_S7202C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S7202C8, buf);
    S7202C8 *dp, &lv = *(dp=new (buf) S7202C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7202C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7202C8)");
    check_base_class_offset(lv, (S2264C28*), 0, "S7202C8");
    check_base_class_offset(lv, (S20955C5*)(S7202C4*), ABISELECT(8,4), "S7202C8");
    check_base_class_offset(lv, (S2264C38*)(S7202C4*), ABISELECT(8,4), "S7202C8");
    check_base_class_offset(lv, (S7202C4*), ABISELECT(8,4), "S7202C8");
    /*is_ambiguous_... S7202C8::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), 0, "S7202C8");
    check_field_offset(lv, s7202c8f0, ABISELECT(16,12), "S7202C8.s7202c8f0");
    test_class_info(&lv, &cd_S7202C8);
    dp->~S7202C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7202C8(Test_S7202C8, "S7202C8", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S7202C8C1Ev();
extern void _ZN7S7202C8D1Ev();
Name_Map name_map_S7202C8[] = {
  NSPAIR(_ZN7S7202C8C1Ev),
  NSPAIR(_ZN7S7202C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
static Base_Class bases_S7202C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20955C5,    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_S2264C38,    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_S7202C4,    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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7202C8[];
static  VTBL_ENTRY vtc_S7202C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C8[0]),
};
extern VTBL_ENTRY _ZTV7S7202C8[];
static  VTT_ENTRY vtt_S7202C8[] = {
  {&(_ZTV7S7202C8[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7202C8[];
extern  VTBL_ENTRY _ZTV7S7202C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C8[];
Class_Descriptor cd_S7202C8 = {  "S7202C8", // class name
  bases_S7202C8, 5,
  &(vtc_S7202C8[0]), // expected_vtbl_contents
  &(vtt_S7202C8[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S7202C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7202C8),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7202C8),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  S7202C3  : S7202C4 , S7202C7 , virtual S7202C8 {
  void *s7202c3f0;
  ~S7202C3(); // tgen
  S7202C3(); // tgen
};
//SIG(-1 S7202C3) C1{ BC2{ BC3{ m FL Fc:0} BC4{ m}} BC5{ VBC4 BC3} VBC6{ VBC7{ m} BC2 VBC4 Fi} Fp}


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

static void Test_S7202C3()
{
  extern Class_Descriptor cd_S7202C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S7202C3, buf);
    S7202C3 *dp, &lv = *(dp=new (buf) S7202C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S7202C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7202C3)");
    /*is_ambiguous_... S7202C3::S7202C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C4*), ABISELECT(16,12), "S7202C3");
    /*is_ambiguous_... S7202C3::S7202C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C4*), ABISELECT(16,12), "S7202C3");
    /*is_ambiguous_... S7202C3::S7202C4 */ AMB_check_base_class_offset(lv, (S7202C4*), ABISELECT(16,12), "S7202C3");
    check_base_class_offset(lv, (S2264C38*)(S7202C7*), 0, "S7202C3");
    /*is_ambiguous_... S7202C8::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C8*), 0, "S7202C3");
    check_base_class_offset(lv, (S20955C5*)(S7202C7*), ABISELECT(8,4), "S7202C3");
    check_base_class_offset(lv, (S7202C7*), 0, "S7202C3");
    check_base_class_offset(lv, (S2264C28*)(S7202C8*), 0, "S7202C3");
    check_base_class_offset(lv, (S20955C5*)(S7202C4*)(S7202C8*), ABISELECT(40,28), "S7202C3");
    check_base_class_offset(lv, (S2264C38*)(S7202C4*)(S7202C8*), ABISELECT(40,28), "S7202C3");
    check_base_class_offset(lv, (S7202C4*)(S7202C8*), ABISELECT(40,28), "S7202C3");
    check_base_class_offset(lv, (S7202C8*), ABISELECT(32,24), "S7202C3");
    check_field_offset(lv, s7202c3f0, ABISELECT(24,20), "S7202C3.s7202c3f0");
    test_class_info(&lv, &cd_S7202C3);
    dp->~S7202C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7202C3(Test_S7202C3, "S7202C3", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN7S7202C3C1Ev();
extern void _ZN7S7202C3D1Ev();
Name_Map name_map_S7202C3[] = {
  NSPAIR(_ZN7S7202C3C1Ev),
  NSPAIR(_ZN7S7202C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S7202C7;
extern VTBL_ENTRY _ZTI7S7202C7[];
extern  VTBL_ENTRY _ZTV7S7202C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S7202C8;
extern VTBL_ENTRY _ZTI7S7202C8[];
extern  VTBL_ENTRY _ZTV7S7202C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C8[];
static Base_Class bases_S7202C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    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_S2264C38,    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_S7202C4,    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, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    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
    5, //immediately_derived
  0, 0},
  {&cd_S7202C7,    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},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    ABISELECT(40,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, 0},
  {&cd_S2264C38,    ABISELECT(40,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, 0},
  {&cd_S7202C4,    ABISELECT(40,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
    10, //immediately_derived
  0, 0},
  {&cd_S7202C8,    ABISELECT(32,24), //bcp->offset
    5, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7202C3[];
static  VTBL_ENTRY vtc_S7202C3[] = {
  0,
  ABISELECT(32,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C3[0]),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S7202C3[0]),
};
extern VTBL_ENTRY _ZTV7S7202C3[];
static  VTBL_ENTRY _tg__ZTV7S7202C7__7S7202C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C8__7S7202C3[] = {
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C8[0]),
};
static  VTT_ENTRY vtt_S7202C3[] = {
  {&(_ZTV7S7202C3[5]),  5,9},
  {&(_tg__ZTV7S7202C7__7S7202C3[3]),  3,3},
  {&(_ZTV7S7202C3[9]),  9,9},
  {&(_tg__ZTV7S7202C8__7S7202C3[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7202C3[];
extern  VTBL_ENTRY _ZTV7S7202C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C3[];
Class_Descriptor cd_S7202C3 = {  "S7202C3", // class name
  bases_S7202C3, 11,
  &(vtc_S7202C3[0]), // expected_vtbl_contents
  &(vtt_S7202C3[0]), // expected_vtt_contents
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI7S7202C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7202C3),9, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7202C3),4, //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  S7202C11  : virtual S20955C5 {
  ~S7202C11(); // tgen
  S7202C11(); // tgen
};
//SIG(-1 S7202C11) C1{ VBC2{ m FL Fc:0}}


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

static void Test_S7202C11()
{
  extern Class_Descriptor cd_S7202C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S7202C11, buf);
    S7202C11 *dp, &lv = *(dp=new (buf) S7202C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S7202C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7202C11)");
    check_base_class_offset(lv, (S20955C5*), ABISELECT(8,4), "S7202C11");
    test_class_info(&lv, &cd_S7202C11);
    dp->~S7202C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7202C11(Test_S7202C11, "S7202C11", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S7202C11C1Ev();
extern void _ZN8S7202C11D1Ev();
Name_Map name_map_S7202C11[] = {
  NSPAIR(_ZN8S7202C11C1Ev),
  NSPAIR(_ZN8S7202C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
static Base_Class bases_S7202C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S7202C11[];
static  VTBL_ENTRY vtc_S7202C11[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C11[0]),
};
extern VTBL_ENTRY _ZTV8S7202C11[];
static  VTT_ENTRY vtt_S7202C11[] = {
  {&(_ZTV8S7202C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7202C11[];
extern  VTBL_ENTRY _ZTV8S7202C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C11[];
Class_Descriptor cd_S7202C11 = {  "S7202C11", // class name
  bases_S7202C11, 1,
  &(vtc_S7202C11[0]), // expected_vtbl_contents
  &(vtt_S7202C11[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S7202C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7202C11),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7202C11),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  S7202C10  : virtual S7202C11 {
  unsigned int s7202c10f0:1;
  ~S7202C10(); // tgen
  S7202C10(); // tgen
};
//SIG(-1 S7202C10) C1{ VBC2{ VBC3{ m FL Fc:0}} Fi:1}


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

static void Test_S7202C10()
{
  extern Class_Descriptor cd_S7202C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S7202C10, buf);
    S7202C10 *dp, &lv = *(dp=new (buf) S7202C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7202C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7202C10)");
    check_base_class_offset(lv, (S20955C5*)(S7202C11*), ABISELECT(16,8), "S7202C10");
    check_base_class_offset(lv, (S7202C11*), 0, "S7202C10");
    set_bf_and_test(lv, s7202c10f0, ABISELECT(8,4), 0, 1, 1, "S7202C10");
    test_class_info(&lv, &cd_S7202C10);
    dp->~S7202C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7202C10(Test_S7202C10, "S7202C10", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S7202C10C1Ev();
extern void _ZN8S7202C10D1Ev();
Name_Map name_map_S7202C10[] = {
  NSPAIR(_ZN8S7202C10C1Ev),
  NSPAIR(_ZN8S7202C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S7202C11;
extern VTBL_ENTRY _ZTI8S7202C11[];
extern  VTBL_ENTRY _ZTV8S7202C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C11[];
static Base_Class bases_S7202C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    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_S7202C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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 _ZTI8S7202C10[];
static  VTBL_ENTRY vtc_S7202C10[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C10[0]),
};
extern VTBL_ENTRY _ZTV8S7202C10[];
static  VTBL_ENTRY _tg__ZTV8S7202C11__8S7202C10[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C11[0]),
};
static  VTT_ENTRY vtt_S7202C10[] = {
  {&(_ZTV8S7202C10[4]),  4,4},
  {&(_ZTV8S7202C10[4]),  4,4},
  {&(_tg__ZTV8S7202C11__8S7202C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7202C10[];
extern  VTBL_ENTRY _ZTV8S7202C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C10[];
Class_Descriptor cd_S7202C10 = {  "S7202C10", // class name
  bases_S7202C10, 2,
  &(vtc_S7202C10[0]), // expected_vtbl_contents
  &(vtt_S7202C10[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S7202C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7202C10),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7202C10),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  S7202C16  : virtual S7202C4 , virtual S20955C5 , S2264C38 {
  ~S7202C16(); // tgen
  S7202C16(); // tgen
};
//SIG(-1 S7202C16) C1{ VBC2{ BC3{ m FL Fc:0} BC4{ m}} VBC3 BC4}


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

static void Test_S7202C16()
{
  extern Class_Descriptor cd_S7202C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S7202C16, buf);
    S7202C16 *dp, &lv = *(dp=new (buf) S7202C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S7202C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7202C16)");
    check_base_class_offset(lv, (S20955C5*)(S7202C4*), ABISELECT(8,4), "S7202C16");
    check_base_class_offset(lv, (S2264C38*)(S7202C4*), ABISELECT(8,4), "S7202C16");
    check_base_class_offset(lv, (S7202C4*), ABISELECT(8,4), "S7202C16");
    /*is_ambiguous_... S7202C16::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*), ABISELECT(16,12), "S7202C16");
    /*is_ambiguous_... S7202C16::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), 0, "S7202C16");
    test_class_info(&lv, &cd_S7202C16);
    dp->~S7202C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7202C16(Test_S7202C16, "S7202C16", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN8S7202C16C1Ev();
extern void _ZN8S7202C16D1Ev();
Name_Map name_map_S7202C16[] = {
  NSPAIR(_ZN8S7202C16C1Ev),
  NSPAIR(_ZN8S7202C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
static Base_Class bases_S7202C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    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_S2264C38,    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_S7202C4,    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_S20955C5,    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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S7202C16[];
static  VTBL_ENTRY vtc_S7202C16[] = {
  ABISELECT(16,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C16[0]),
};
extern VTBL_ENTRY _ZTV8S7202C16[];
static  VTT_ENTRY vtt_S7202C16[] = {
  {&(_ZTV8S7202C16[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7202C16[];
extern  VTBL_ENTRY _ZTV8S7202C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C16[];
Class_Descriptor cd_S7202C16 = {  "S7202C16", // class name
  bases_S7202C16, 5,
  &(vtc_S7202C16[0]), // expected_vtbl_contents
  &(vtt_S7202C16[0]), // expected_vtt_contents
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI8S7202C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7202C16),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7202C16),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  S7202C17  : S2264C38 , S7202C4 {
  ::S3052C22_nt s7202c17f0;
  virtual  ~S7202C17(); // _ZN8S7202C17D1Ev
  S7202C17(); // tgen
};
//SIG(-1 S7202C17) C1{ BC2{ m} BC3{ BC4{ m FL Fc:0} BC2} vd FC5{}}


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

static void Test_S7202C17()
{
  extern Class_Descriptor cd_S7202C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S7202C17, buf);
    S7202C17 *dp, &lv = *(dp=new (buf) S7202C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7202C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7202C17)");
    /*is_ambiguous_... S7202C17::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), 0, "S7202C17");
    check_base_class_offset(lv, (S20955C5*)(S7202C4*), ABISELECT(8,4), "S7202C17");
    check_base_class_offset(lv, (S2264C38*)(S7202C4*), ABISELECT(8,4), "S7202C17");
    check_base_class_offset(lv, (S7202C4*), ABISELECT(8,4), "S7202C17");
    check_field_offset(lv, s7202c17f0, ABISELECT(16,12), "S7202C17.s7202c17f0");
    test_class_info(&lv, &cd_S7202C17);
    dp->~S7202C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7202C17(Test_S7202C17, "S7202C17", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S7202C17C1Ev();
extern void _ZN8S7202C17D1Ev();
Name_Map name_map_S7202C17[] = {
  NSPAIR(_ZN8S7202C17C1Ev),
  NSPAIR(_ZN8S7202C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
static Base_Class bases_S7202C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20955C5,    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_S2264C38,    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_S7202C4,    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 _ZTI8S7202C17[];
extern void _ZN8S7202C17D1Ev();
extern void _ZN8S7202C17D0Ev();
static  VTBL_ENTRY vtc_S7202C17[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C17[0]),
  (VTBL_ENTRY)&_ZN8S7202C17D1Ev,
  (VTBL_ENTRY)&_ZN8S7202C17D0Ev,
};
extern VTBL_ENTRY _ZTI8S7202C17[];
extern  VTBL_ENTRY _ZTV8S7202C17[];
Class_Descriptor cd_S7202C17 = {  "S7202C17", // class name
  bases_S7202C17, 4,
  &(vtc_S7202C17[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S7202C17),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7202C17),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  S7202C15  : virtual S7202C16 , S7202C17 {
  int s7202c15f0[8];
  ~S7202C15(); // tgen
  S7202C15(); // tgen
};
//SIG(-1 S7202C15) C1{ VBC2{ VBC3{ BC4{ m FL Fc:0} BC5{ m}} VBC4 BC5} BC6{ BC5 BC3 vd FC7{}} Fi[8]}


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

static void Test_S7202C15()
{
  extern Class_Descriptor cd_S7202C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,18)];
    init_test(&cd_S7202C15, buf);
    S7202C15 *dp, &lv = *(dp=new (buf) S7202C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,68), "sizeof(S7202C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7202C15)");
    /*is_ambiguous_... S7202C15::S7202C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C4*), ABISELECT(64,52), "S7202C15");
    /*is_ambiguous_... S7202C15::S7202C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C4*), ABISELECT(64,52), "S7202C15");
    check_base_class_offset(lv, (S7202C4*)(S7202C16*), ABISELECT(64,52), "S7202C15");
    /*is_ambiguous_... S7202C16::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C16*), ABISELECT(72,60), "S7202C15");
    /*is_ambiguous_... S7202C16::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C16*), ABISELECT(56,48), "S7202C15");
    check_base_class_offset(lv, (S7202C16*), ABISELECT(56,48), "S7202C15");
    /*is_ambiguous_... S7202C17::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C17*), 0, "S7202C15");
    check_base_class_offset(lv, (S20955C5*)(S7202C4*)(S7202C17*), ABISELECT(8,4), "S7202C15");
    check_base_class_offset(lv, (S2264C38*)(S7202C4*)(S7202C17*), ABISELECT(8,4), "S7202C15");
    check_base_class_offset(lv, (S7202C4*)(S7202C17*), ABISELECT(8,4), "S7202C15");
    check_base_class_offset(lv, (S7202C17*), 0, "S7202C15");
    check_field_offset(lv, s7202c15f0, ABISELECT(20,16), "S7202C15.s7202c15f0");
    test_class_info(&lv, &cd_S7202C15);
    dp->~S7202C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7202C15(Test_S7202C15, "S7202C15", ABISELECT(80,68));

#else // __cplusplus

extern void _ZN8S7202C15C1Ev();
extern void _ZN8S7202C15D1Ev();
Name_Map name_map_S7202C15[] = {
  NSPAIR(_ZN8S7202C15C1Ev),
  NSPAIR(_ZN8S7202C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C16;
extern VTBL_ENTRY _ZTI8S7202C16[];
extern  VTBL_ENTRY _ZTV8S7202C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C16[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S7202C17;
extern VTBL_ENTRY _ZTI8S7202C17[];
extern  VTBL_ENTRY _ZTV8S7202C17[];
static Base_Class bases_S7202C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(64,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(64,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
    2, //immediately_derived
  0, 0},
  {&cd_S7202C4,    ABISELECT(64,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
    5, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(72,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
    5, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(56,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
    5, //immediately_derived
  0, 0},
  {&cd_S7202C16,    ABISELECT(56,48), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    9, //immediately_derived
  0, 0},
  {&cd_S7202C4,    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
    10, //immediately_derived
  0, 0},
  {&cd_S7202C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S7202C15[];
extern void _ZN8S7202C15D1Ev();
extern void _ZN8S7202C15D0Ev();
static  VTBL_ENTRY vtc_S7202C15[] = {
  ABISELECT(72,60),
  ABISELECT(64,52),
  ABISELECT(56,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C15[0]),
  (VTBL_ENTRY)&_ZN8S7202C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7202C15D0Ev,
  ABISELECT(16,12),
  ABISELECT(8,4),
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI8S7202C15[0]),
};
extern VTBL_ENTRY _ZTV8S7202C15[];
static  VTBL_ENTRY _tg__ZTV8S7202C16__8S7202C15[] = {
  ABISELECT(16,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C16[0]),
};
static  VTT_ENTRY vtt_S7202C15[] = {
  {&(_ZTV8S7202C15[5]),  5,11},
  {&(_ZTV8S7202C15[11]),  11,11},
  {&(_tg__ZTV8S7202C16__8S7202C15[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7202C15[];
extern  VTBL_ENTRY _ZTV8S7202C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C15[];
Class_Descriptor cd_S7202C15 = {  "S7202C15", // class name
  bases_S7202C15, 11,
  &(vtc_S7202C15[0]), // expected_vtbl_contents
  &(vtt_S7202C15[0]), // expected_vtt_contents
  ABISELECT(80,68), // object size
  NSPAIRA(_ZTI8S7202C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7202C15),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7202C15),3, //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  S7202C14  : virtual S7202C15 {
  virtual  ~S7202C14(); // _ZN8S7202C14D2Ev
  S7202C14(); // tgen
};
//SIG(-1 S7202C14) C1{ VBC2{ VBC3{ VBC4{ BC5{ m FL Fc:0} BC6{ m}} VBC5 BC6} BC7{ BC6 BC4 vd FC8{}} Fi[8]} vd}


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

static void Test_S7202C14()
{
  extern Class_Descriptor cd_S7202C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,18)];
    init_test(&cd_S7202C14, buf);
    S7202C14 *dp, &lv = *(dp=new (buf) S7202C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,68), "sizeof(S7202C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7202C14)");
    /*is_ambiguous_... S7202C14::S7202C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C4*), ABISELECT(64,52), "S7202C14");
    /*is_ambiguous_... S7202C14::S7202C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C4*), ABISELECT(64,52), "S7202C14");
    check_base_class_offset(lv, (S7202C4*)(S7202C16*), ABISELECT(64,52), "S7202C14");
    /*is_ambiguous_... S7202C16::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C16*), ABISELECT(72,60), "S7202C14");
    /*is_ambiguous_... S7202C16::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C16*), 0, "S7202C14");
    check_base_class_offset(lv, (S7202C16*)(S7202C15*), 0, "S7202C14");
    /*is_ambiguous_... S7202C17::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C17*)(S7202C15*), ABISELECT(8,4), "S7202C14");
    check_base_class_offset(lv, (S20955C5*)(S7202C4*)(S7202C17*)(S7202C15*), ABISELECT(16,8), "S7202C14");
    check_base_class_offset(lv, (S2264C38*)(S7202C4*)(S7202C17*)(S7202C15*), ABISELECT(16,8), "S7202C14");
    check_base_class_offset(lv, (S7202C4*)(S7202C17*)(S7202C15*), ABISELECT(16,8), "S7202C14");
    check_base_class_offset(lv, (S7202C17*)(S7202C15*), ABISELECT(8,4), "S7202C14");
    check_base_class_offset(lv, (S7202C15*), ABISELECT(8,4), "S7202C14");
    test_class_info(&lv, &cd_S7202C14);
    dp->~S7202C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7202C14(Test_S7202C14, "S7202C14", ABISELECT(80,68));

#else // __cplusplus

extern void _ZN8S7202C14C1Ev();
extern void _ZN8S7202C14D2Ev();
Name_Map name_map_S7202C14[] = {
  NSPAIR(_ZN8S7202C14C1Ev),
  NSPAIR(_ZN8S7202C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C16;
extern VTBL_ENTRY _ZTI8S7202C16[];
extern  VTBL_ENTRY _ZTV8S7202C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C16[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S7202C17;
extern VTBL_ENTRY _ZTI8S7202C17[];
extern  VTBL_ENTRY _ZTV8S7202C17[];
extern Class_Descriptor cd_S7202C15;
extern VTBL_ENTRY _ZTI8S7202C15[];
extern  VTBL_ENTRY _ZTV8S7202C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C15[];
static Base_Class bases_S7202C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(64,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(64,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
    2, //immediately_derived
  0, 0},
  {&cd_S7202C4,    ABISELECT(64,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
    5, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(72,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
    5, //immediately_derived
  0, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7202C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    11, //immediately_derived
  0, 1},
  {&cd_S2264C38,    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
    10, //immediately_derived
  0, 0},
  {&cd_S20955C5,    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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    9, //immediately_derived
  0, 0},
  {&cd_S7202C4,    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
    10, //immediately_derived
  0, 0},
  {&cd_S7202C17,    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
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7202C15,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S7202C14[];
extern void _ZN8S7202C14D1Ev();
extern void _ZN8S7202C14D0Ev();
extern void ABISELECT(_ZTv0_n48_N8S7202C14D1Ev,_ZTv0_n24_N8S7202C14D1Ev)();
extern void ABISELECT(_ZThn8_N8S7202C14D1Ev,_ZThn4_N8S7202C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7202C14D0Ev,_ZTv0_n24_N8S7202C14D0Ev)();
extern void ABISELECT(_ZThn8_N8S7202C14D0Ev,_ZThn4_N8S7202C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7202C14[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(72,60),
  ABISELECT(64,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C14[0]),
  (VTBL_ENTRY)&_ZN8S7202C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7202C14D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S7202C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7202C14D1Ev,_ZTv0_n24_N8S7202C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7202C14D0Ev,_ZTv0_n24_N8S7202C14D0Ev),
};
extern VTBL_ENTRY _ZTV8S7202C14[];
extern void _ZN8S7202C15D1Ev();
extern void _ZN8S7202C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7202C15__8S7202C14[] = {
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C15[0]),
  (VTBL_ENTRY)&_ZN8S7202C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7202C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7202C16__8S7202C15__8S7202C14[] = {
  ABISELECT(72,60),
  ABISELECT(64,52),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S7202C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7202C16__8S7202C14[] = {
  ABISELECT(72,60),
  ABISELECT(64,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C16[0]),
};
static  VTT_ENTRY vtt_S7202C14[] = {
  {&(_ZTV8S7202C14[6]),  6,16},
  {&(_ZTV8S7202C14[14]),  14,16},
  {&(_ZTV8S7202C14[6]),  6,16},
  {&(_tg__ZTV8S7202C15__8S7202C14[5]),  5,7},
  {&(_tg__ZTV8S7202C16__8S7202C15__8S7202C14[4]),  4,4},
  {&(_tg__ZTV8S7202C16__8S7202C14[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7202C14[];
extern  VTBL_ENTRY _ZTV8S7202C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C14[];
static VTBL_ENTRY alt_thunk_names144[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7202C14D0Ev,_ZTv0_n24_N8S7202C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7202C14D0Ev,_ZThn4_N8S7202C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7202C14D1Ev,_ZTv0_n24_N8S7202C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S7202C14D1Ev,_ZThn4_N8S7202C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7202C14 = {  "S7202C14", // class name
  bases_S7202C14, 12,
  &(vtc_S7202C14[0]), // expected_vtbl_contents
  &(vtt_S7202C14[0]), // expected_vtt_contents
  ABISELECT(80,68), // object size
  NSPAIRA(_ZTI8S7202C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S7202C14),16, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7202C14),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names144,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7202C13  : virtual S7202C4 , S7202C14 {
  ::S7202C15 s7202c13f0[2];
  virtual  ~S7202C13(); // _ZN8S7202C13D2Ev
  S7202C13(); // tgen
};
//SIG(-1 S7202C13) C1{ VBC2{ BC3{ m FL Fc:0} BC4{ m}} BC5{ VBC6{ VBC7{ VBC2 VBC3 BC4} BC8{ BC4 BC2 vd FC9{}} Fi[8]} vd} vd FC6[2]}


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

static void Test_S7202C13()
{
  extern Class_Descriptor cd_S7202C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,52)];
    init_test(&cd_S7202C13, buf);
    S7202C13 *dp, &lv = *(dp=new (buf) S7202C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,204), "sizeof(S7202C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7202C13)");
    /*is_ambiguous_... S7202C13::S7202C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C4*), ABISELECT(168,140), "S7202C13");
    /*is_ambiguous_... S7202C13::S7202C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C4*), ABISELECT(168,140), "S7202C13");
    /*is_ambiguous_... S7202C13::S7202C4 */ AMB_check_base_class_offset(lv, (S7202C4*), ABISELECT(168,140), "S7202C13");
    check_base_class_offset(lv, (S7202C4*)(S7202C16*), ABISELECT(168,140), "S7202C13");
    /*is_ambiguous_... S7202C16::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C16*), ABISELECT(232,196), "S7202C13");
    /*is_ambiguous_... S7202C16::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C16*), 0, "S7202C13");
    check_base_class_offset(lv, (S7202C16*)(S7202C15*), 0, "S7202C13");
    /*is_ambiguous_... S7202C17::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C17*)(S7202C15*), ABISELECT(176,148), "S7202C13");
    check_base_class_offset(lv, (S20955C5*)(S7202C4*)(S7202C17*)(S7202C15*), ABISELECT(184,152), "S7202C13");
    check_base_class_offset(lv, (S2264C38*)(S7202C4*)(S7202C17*)(S7202C15*), ABISELECT(184,152), "S7202C13");
    check_base_class_offset(lv, (S7202C4*)(S7202C17*)(S7202C15*), ABISELECT(184,152), "S7202C13");
    check_base_class_offset(lv, (S7202C17*)(S7202C15*), ABISELECT(176,148), "S7202C13");
    check_base_class_offset(lv, (S7202C15*)(S7202C14*), ABISELECT(176,148), "S7202C13");
    check_base_class_offset(lv, (S7202C14*), 0, "S7202C13");
    check_field_offset(lv, s7202c13f0, ABISELECT(8,4), "S7202C13.s7202c13f0");
    test_class_info(&lv, &cd_S7202C13);
    dp->~S7202C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7202C13(Test_S7202C13, "S7202C13", ABISELECT(240,204));

#else // __cplusplus

extern void _ZN8S7202C13C1Ev();
extern void _ZN8S7202C13D2Ev();
Name_Map name_map_S7202C13[] = {
  NSPAIR(_ZN8S7202C13C1Ev),
  NSPAIR(_ZN8S7202C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C16;
extern VTBL_ENTRY _ZTI8S7202C16[];
extern  VTBL_ENTRY _ZTV8S7202C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C16[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S7202C17;
extern VTBL_ENTRY _ZTI8S7202C17[];
extern  VTBL_ENTRY _ZTV8S7202C17[];
extern Class_Descriptor cd_S7202C15;
extern VTBL_ENTRY _ZTI8S7202C15[];
extern  VTBL_ENTRY _ZTV8S7202C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C15[];
extern Class_Descriptor cd_S7202C14;
extern VTBL_ENTRY _ZTI8S7202C14[];
extern  VTBL_ENTRY _ZTV8S7202C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C14[];
static Base_Class bases_S7202C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(168,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(168,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
    2, //immediately_derived
  0, 0},
  {&cd_S7202C4,    ABISELECT(168,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20955C5,    ABISELECT(232,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7202C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    11, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(176,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
    10, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(184,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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(184,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
    9, //immediately_derived
  0, 0},
  {&cd_S7202C4,    ABISELECT(184,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
    10, //immediately_derived
  0, 0},
  {&cd_S7202C17,    ABISELECT(176,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
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7202C15,    ABISELECT(176,148), //bcp->offset
    8, //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
    12, //immediately_derived
  0, 1},
  {&cd_S7202C14,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7202C13[];
extern void _ZN8S7202C13D1Ev();
extern void _ZN8S7202C13D0Ev();
extern void ABISELECT(_ZTv0_n48_N8S7202C13D1Ev,_ZTv0_n24_N8S7202C13D1Ev)();
extern void ABISELECT(_ZThn176_N8S7202C13D1Ev,_ZThn148_N8S7202C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7202C13D0Ev,_ZTv0_n24_N8S7202C13D0Ev)();
extern void ABISELECT(_ZThn176_N8S7202C13D0Ev,_ZThn148_N8S7202C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7202C13[] = {
  0,
  ABISELECT(176,148),
  ABISELECT(232,196),
  ABISELECT(168,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C13[0]),
  (VTBL_ENTRY)&_ZN8S7202C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7202C13D0Ev,
  ABISELECT(-176,-148),
  ABISELECT(56,48),
  -8,
  ABISELECT(-176,-148),
  ABISELECT(-176,-148),
  (VTBL_ENTRY)&(_ZTI8S7202C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7202C13D1Ev,_ZTv0_n24_N8S7202C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7202C13D0Ev,_ZTv0_n24_N8S7202C13D0Ev),
};
extern VTBL_ENTRY _ZTV8S7202C13[];
extern void _ZN8S7202C14D1Ev();
extern void _ZN8S7202C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7202C14__8S7202C13[] = {
  0,
  ABISELECT(176,148),
  ABISELECT(232,196),
  ABISELECT(168,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C14[0]),
  (VTBL_ENTRY)&_ZN8S7202C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7202C14D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7202C14D1Ev,_ZTv0_n24_N8S7202C14D1Ev)();
extern void ABISELECT(_ZThn176_N8S7202C14D1Ev,_ZThn148_N8S7202C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7202C14D0Ev,_ZTv0_n24_N8S7202C14D0Ev)();
extern void ABISELECT(_ZThn176_N8S7202C14D0Ev,_ZThn148_N8S7202C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7202C15__8S7202C14__8S7202C13[] = {
  ABISELECT(-176,-148),
  ABISELECT(56,48),
  -8,
  ABISELECT(-176,-148),
  ABISELECT(-176,-148),
  (VTBL_ENTRY)&(_ZTI8S7202C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7202C14D1Ev,_ZTv0_n24_N8S7202C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7202C14D0Ev,_ZTv0_n24_N8S7202C14D0Ev),
};
extern void _ZN8S7202C15D1Ev();
extern void _ZN8S7202C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7202C15__8S7202C13[] = {
  ABISELECT(56,48),
  -8,
  ABISELECT(-176,-148),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C15[0]),
  (VTBL_ENTRY)&_ZN8S7202C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7202C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7202C16__8S7202C15__8S7202C13[] = {
  ABISELECT(232,196),
  ABISELECT(168,140),
  ABISELECT(176,148),
  (VTBL_ENTRY)&(_ZTI8S7202C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7202C16__8S7202C13[] = {
  ABISELECT(232,196),
  ABISELECT(168,140),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C16[0]),
};
static  VTT_ENTRY vtt_S7202C13[] = {
  {&(_ZTV8S7202C13[6]),  6,16},
  {&(_tg__ZTV8S7202C14__8S7202C13[6]),  6,8},
  {&(_tg__ZTV8S7202C15__8S7202C14__8S7202C13[6]),  6,8},
  {&(_tg__ZTV8S7202C14__8S7202C13[6]),  6,8},
  {&(_ZTV8S7202C13[14]),  14,16},
  {&(_ZTV8S7202C13[6]),  6,16},
  {&(_tg__ZTV8S7202C15__8S7202C13[5]),  5,7},
  {&(_tg__ZTV8S7202C16__8S7202C15__8S7202C13[4]),  4,4},
  {&(_tg__ZTV8S7202C16__8S7202C13[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7202C13[];
extern  VTBL_ENTRY _ZTV8S7202C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C13[];
static VTBL_ENTRY alt_thunk_names145[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7202C14D0Ev,_ZTv0_n24_N8S7202C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S7202C14D0Ev,_ZThn148_N8S7202C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7202C14D1Ev,_ZTv0_n24_N8S7202C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S7202C14D1Ev,_ZThn148_N8S7202C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7202C13D0Ev,_ZTv0_n24_N8S7202C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S7202C13D0Ev,_ZThn148_N8S7202C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7202C13D1Ev,_ZTv0_n24_N8S7202C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S7202C13D1Ev,_ZThn148_N8S7202C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7202C13 = {  "S7202C13", // class name
  bases_S7202C13, 13,
  &(vtc_S7202C13[0]), // expected_vtbl_contents
  &(vtt_S7202C13[0]), // expected_vtt_contents
  ABISELECT(240,204), // object size
  NSPAIRA(_ZTI8S7202C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7202C13),16, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7202C13),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names145,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7202C12  : S7202C13 , S7202C3 , S7202C7 {
  ~S7202C12(); // tgen
  S7202C12(); // tgen
};
//SIG(-1 S7202C12) C1{ BC2{ VBC3{ BC4{ m FL Fc:0} BC5{ m}} BC6{ VBC7{ VBC8{ VBC3 VBC4 BC5} BC9{ BC5 BC3 vd FC10{}} Fi[8]} vd} vd FC7[2]} BC11{ BC3 BC12{ VBC5 BC4} VBC13{ VBC14{ m} BC3 VBC5 Fi} Fp} BC12}


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

static void Test_S7202C12()
{
  extern Class_Descriptor cd_S7202C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,65)];
    init_test(&cd_S7202C12, buf);
    S7202C12 *dp, &lv = *(dp=new (buf) S7202C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,256), "sizeof(S7202C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7202C12)");
    /*is_ambiguous_... S7202C12::S7202C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C4*), ABISELECT(216,176), "S7202C12");
    /*is_ambiguous_... S7202C12::S7202C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C4*), ABISELECT(216,176), "S7202C12");
    /*is_ambiguous_... S7202C13::S7202C4 */ AMB_check_base_class_offset(lv, (S7202C4*)(S7202C13*), ABISELECT(216,176), "S7202C12");
    check_base_class_offset(lv, (S7202C4*)(S7202C16*), ABISELECT(216,176), "S7202C12");
    /*is_ambiguous_... S7202C16::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C16*), ABISELECT(280,232), "S7202C12");
    /*is_ambiguous_... S7202C16::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C16*), 0, "S7202C12");
    check_base_class_offset(lv, (S7202C16*)(S7202C15*), 0, "S7202C12");
    /*is_ambiguous_... S7202C17::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C17*)(S7202C15*), ABISELECT(224,184), "S7202C12");
    check_base_class_offset(lv, (S20955C5*)(S7202C4*)(S7202C17*)(S7202C15*), ABISELECT(232,188), "S7202C12");
    check_base_class_offset(lv, (S2264C38*)(S7202C4*)(S7202C17*)(S7202C15*), ABISELECT(232,188), "S7202C12");
    check_base_class_offset(lv, (S7202C4*)(S7202C17*)(S7202C15*), ABISELECT(232,188), "S7202C12");
    check_base_class_offset(lv, (S7202C17*)(S7202C15*), ABISELECT(224,184), "S7202C12");
    check_base_class_offset(lv, (S7202C15*)(S7202C14*)(S7202C13*), ABISELECT(224,184), "S7202C12");
    check_base_class_offset(lv, (S7202C14*)(S7202C13*), 0, "S7202C12");
    check_base_class_offset(lv, (S7202C13*), 0, "S7202C12");
    /*is_ambiguous_... S7202C3::S7202C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C4*)(S7202C3*), ABISELECT(184,152), "S7202C12");
    /*is_ambiguous_... S7202C3::S7202C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C4*)(S7202C3*), ABISELECT(184,152), "S7202C12");
    /*is_ambiguous_... S7202C3::S7202C4 */ AMB_check_base_class_offset(lv, (S7202C4*)(S7202C3*), ABISELECT(184,152), "S7202C12");
    check_base_class_offset(lv, (S2264C38*)(S7202C7*)(S7202C3*), ABISELECT(288,240), "S7202C12");
    /*is_ambiguous_... S7202C8::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C8*), ABISELECT(288,240), "S7202C12");
    /*is_ambiguous_... S7202C12::S7202C7 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C7*), ABISELECT(288,240), "S7202C12");
    check_base_class_offset(lv, (S20955C5*)(S7202C7*)(S7202C3*), ABISELECT(176,144), "S7202C12");
    check_base_class_offset(lv, (S7202C7*)(S7202C3*), ABISELECT(168,140), "S7202C12");
    check_base_class_offset(lv, (S2264C28*)(S7202C8*), 0, "S7202C12");
    check_base_class_offset(lv, (S20955C5*)(S7202C4*)(S7202C8*), ABISELECT(296,244), "S7202C12");
    check_base_class_offset(lv, (S2264C38*)(S7202C4*)(S7202C8*), ABISELECT(296,244), "S7202C12");
    check_base_class_offset(lv, (S7202C4*)(S7202C8*), ABISELECT(296,244), "S7202C12");
    check_base_class_offset(lv, (S7202C8*)(S7202C3*), ABISELECT(288,240), "S7202C12");
    check_base_class_offset(lv, (S7202C3*), ABISELECT(168,140), "S7202C12");
    /*is_ambiguous_... S7202C12::S7202C7 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C7*), ABISELECT(208,168), "S7202C12");
    /*is_ambiguous_... S7202C12::S7202C7 */ AMB_check_base_class_offset(lv, (S7202C7*), ABISELECT(200,164), "S7202C12");
    test_class_info(&lv, &cd_S7202C12);
    dp->~S7202C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7202C12(Test_S7202C12, "S7202C12", ABISELECT(312,256));

#else // __cplusplus

extern void _ZN8S7202C12C1Ev();
extern void _ZN8S7202C12D1Ev();
Name_Map name_map_S7202C12[] = {
  NSPAIR(_ZN8S7202C12C1Ev),
  NSPAIR(_ZN8S7202C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C16;
extern VTBL_ENTRY _ZTI8S7202C16[];
extern  VTBL_ENTRY _ZTV8S7202C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C16[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S7202C17;
extern VTBL_ENTRY _ZTI8S7202C17[];
extern  VTBL_ENTRY _ZTV8S7202C17[];
extern Class_Descriptor cd_S7202C15;
extern VTBL_ENTRY _ZTI8S7202C15[];
extern  VTBL_ENTRY _ZTV8S7202C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C15[];
extern Class_Descriptor cd_S7202C14;
extern VTBL_ENTRY _ZTI8S7202C14[];
extern  VTBL_ENTRY _ZTV8S7202C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C14[];
extern Class_Descriptor cd_S7202C13;
extern VTBL_ENTRY _ZTI8S7202C13[];
extern  VTBL_ENTRY _ZTV8S7202C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C13[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S7202C7;
extern VTBL_ENTRY _ZTI7S7202C7[];
extern  VTBL_ENTRY _ZTV7S7202C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S7202C8;
extern VTBL_ENTRY _ZTI7S7202C8[];
extern  VTBL_ENTRY _ZTV7S7202C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C8[];
extern Class_Descriptor cd_S7202C3;
extern VTBL_ENTRY _ZTI7S7202C3[];
extern  VTBL_ENTRY _ZTV7S7202C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C3[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S7202C7;
extern VTBL_ENTRY _ZTI7S7202C7[];
extern  VTBL_ENTRY _ZTV7S7202C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C7[];
static Base_Class bases_S7202C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(216,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(216,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
    2, //immediately_derived
  0, 0},
  {&cd_S7202C4,    ABISELECT(216,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
    5, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(280,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
    5, //immediately_derived
  0, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7202C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(224,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
    10, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(232,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, 0},
  {&cd_S2264C38,    ABISELECT(232,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, 0},
  {&cd_S7202C4,    ABISELECT(232,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
    10, //immediately_derived
  0, 0},
  {&cd_S7202C17,    ABISELECT(224,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
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7202C15,    ABISELECT(224,184), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S7202C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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
    13, //immediately_derived
  0, 0},
  {&cd_S7202C13,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20955C5,    ABISELECT(184,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
    16, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(184,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
    16, //immediately_derived
  0, 0},
  {&cd_S7202C4,    ABISELECT(184,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
    25, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(288,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    ABISELECT(176,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
    19, //immediately_derived
  0, 0},
  {&cd_S7202C7,    ABISELECT(168,140), //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
    7, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20955C5,    ABISELECT(296,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(296,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7202C4,    ABISELECT(296,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7202C8,    ABISELECT(288,240), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //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
    25, //immediately_derived
  0, 1},
  {&cd_S7202C3,    ABISELECT(168,140), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20955C5,    ABISELECT(208,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
    27, //immediately_derived
  0, 0},
  {&cd_S7202C7,    ABISELECT(200,164), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7202C12[];
extern void _ZN8S7202C12D1Ev();
extern void _ZN8S7202C12D0Ev();
extern void ABISELECT(_ZTv0_n48_N8S7202C12D1Ev,_ZTv0_n24_N8S7202C12D1Ev)();
extern void ABISELECT(_ZThn224_N8S7202C12D1Ev,_ZThn184_N8S7202C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7202C12D0Ev,_ZTv0_n24_N8S7202C12D0Ev)();
extern void ABISELECT(_ZThn224_N8S7202C12D0Ev,_ZThn184_N8S7202C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7202C12[] = {
  0,
  ABISELECT(288,240),
  ABISELECT(288,240),
  0,
  ABISELECT(224,184),
  ABISELECT(280,232),
  ABISELECT(216,176),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C12[0]),
  (VTBL_ENTRY)&_ZN8S7202C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7202C12D0Ev,
  ABISELECT(-168,-140),
  ABISELECT(120,100),
  ABISELECT(120,100),
  ABISELECT(-168,-140),
  (VTBL_ENTRY)&(_ZTI8S7202C12[0]),
  ABISELECT(88,76),
  ABISELECT(-200,-164),
  (VTBL_ENTRY)&(_ZTI8S7202C12[0]),
  ABISELECT(-224,-184),
  ABISELECT(56,48),
  -8,
  ABISELECT(-224,-184),
  ABISELECT(-224,-184),
  (VTBL_ENTRY)&(_ZTI8S7202C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7202C12D1Ev,_ZTv0_n24_N8S7202C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7202C12D0Ev,_ZTv0_n24_N8S7202C12D0Ev),
  0,
  ABISELECT(-288,-240),
  ABISELECT(-288,-240),
  (VTBL_ENTRY)&(_ZTI8S7202C12[0]),
};
extern VTBL_ENTRY _ZTV8S7202C12[];
extern void _ZN8S7202C13D1Ev();
extern void _ZN8S7202C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7202C13__8S7202C12[] = {
  0,
  ABISELECT(224,184),
  ABISELECT(280,232),
  ABISELECT(216,176),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C13[0]),
  (VTBL_ENTRY)&_ZN8S7202C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7202C13D0Ev,
};
extern void _ZN8S7202C14D1Ev();
extern void _ZN8S7202C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7202C148S7202C13__8S7202C12[] = {
  0,
  ABISELECT(224,184),
  ABISELECT(280,232),
  ABISELECT(216,176),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C14[0]),
  (VTBL_ENTRY)&_ZN8S7202C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7202C14D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7202C14D1Ev,_ZTv0_n24_N8S7202C14D1Ev)();
extern void ABISELECT(_ZThn224_N8S7202C14D1Ev,_ZThn184_N8S7202C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7202C14D0Ev,_ZTv0_n24_N8S7202C14D0Ev)();
extern void ABISELECT(_ZThn224_N8S7202C14D0Ev,_ZThn184_N8S7202C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7202C15__8S7202C148S7202C13__8S7202C12[] = {
  ABISELECT(-224,-184),
  ABISELECT(56,48),
  -8,
  ABISELECT(-224,-184),
  ABISELECT(-224,-184),
  (VTBL_ENTRY)&(_ZTI8S7202C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7202C14D1Ev,_ZTv0_n24_N8S7202C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7202C14D0Ev,_ZTv0_n24_N8S7202C14D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7202C13D1Ev,_ZTv0_n24_N8S7202C13D1Ev)();
extern void ABISELECT(_ZThn224_N8S7202C13D1Ev,_ZThn184_N8S7202C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7202C13D0Ev,_ZTv0_n24_N8S7202C13D0Ev)();
extern void ABISELECT(_ZThn224_N8S7202C13D0Ev,_ZThn184_N8S7202C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7202C15__8S7202C13__8S7202C12[] = {
  ABISELECT(-224,-184),
  ABISELECT(56,48),
  -8,
  ABISELECT(-224,-184),
  ABISELECT(-224,-184),
  (VTBL_ENTRY)&(_ZTI8S7202C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7202C13D1Ev,_ZTv0_n24_N8S7202C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7202C13D0Ev,_ZTv0_n24_N8S7202C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7202C3__8S7202C12[] = {
  ABISELECT(-168,-140),
  ABISELECT(120,100),
  ABISELECT(120,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C77S7202C3__8S7202C12[] = {
  ABISELECT(120,100),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C8__7S7202C3__8S7202C12[] = {
  0,
  ABISELECT(-288,-240),
  ABISELECT(-120,-100),
  (VTBL_ENTRY)&(_ZTI7S7202C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C7__A1__8S7202C12[] = {
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C7[0]),
};
extern void _ZN8S7202C15D1Ev();
extern void _ZN8S7202C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7202C15__8S7202C12[] = {
  ABISELECT(56,48),
  -8,
  ABISELECT(-224,-184),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C15[0]),
  (VTBL_ENTRY)&_ZN8S7202C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7202C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7202C16__8S7202C15__8S7202C12[] = {
  ABISELECT(280,232),
  ABISELECT(216,176),
  ABISELECT(224,184),
  (VTBL_ENTRY)&(_ZTI8S7202C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7202C16__8S7202C12[] = {
  ABISELECT(280,232),
  ABISELECT(216,176),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C16[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C8__8S7202C12[] = {
  0,
  ABISELECT(-288,-240),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C8[0]),
};
static  VTT_ENTRY vtt_S7202C12[] = {
  {&(_ZTV8S7202C12[9]),  9,31},
  {&(_tg__ZTV8S7202C13__8S7202C12[6]),  6,8},
  {&(_tg__ZTV8S7202C148S7202C13__8S7202C12[6]),  6,8},
  {&(_tg__ZTV8S7202C15__8S7202C148S7202C13__8S7202C12[6]),  6,8},
  {&(_tg__ZTV8S7202C148S7202C13__8S7202C12[6]),  6,8},
  {&(_tg__ZTV8S7202C15__8S7202C13__8S7202C12[6]),  6,8},
  {&(_tg__ZTV8S7202C13__8S7202C12[6]),  6,8},
  {&(_tg__ZTV7S7202C3__8S7202C12[5]),  5,5},
  {&(_tg__ZTV7S7202C77S7202C3__8S7202C12[3]),  3,3},
  {&(_tg__ZTV7S7202C8__7S7202C3__8S7202C12[4]),  4,4},
  {&(_tg__ZTV7S7202C7__A1__8S7202C12[3]),  3,3},
  {&(_ZTV8S7202C12[25]),  25,31},
  {&(_ZTV8S7202C12[9]),  9,31},
  {&(_ZTV8S7202C12[16]),  16,31},
  {&(_ZTV8S7202C12[31]),  31,31},
  {&(_ZTV8S7202C12[19]),  19,31},
  {&(_tg__ZTV8S7202C15__8S7202C12[5]),  5,7},
  {&(_tg__ZTV8S7202C16__8S7202C15__8S7202C12[4]),  4,4},
  {&(_tg__ZTV8S7202C16__8S7202C12[4]),  4,4},
  {&(_tg__ZTV7S7202C8__8S7202C12[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7202C12[];
extern  VTBL_ENTRY _ZTV8S7202C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C12[];
static VTBL_ENTRY alt_thunk_names146[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7202C13D0Ev,_ZTv0_n24_N8S7202C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7202C13D0Ev,_ZThn184_N8S7202C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7202C13D1Ev,_ZTv0_n24_N8S7202C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7202C13D1Ev,_ZThn184_N8S7202C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7202C14D0Ev,_ZTv0_n24_N8S7202C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7202C14D0Ev,_ZThn184_N8S7202C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7202C14D1Ev,_ZTv0_n24_N8S7202C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7202C14D1Ev,_ZThn184_N8S7202C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7202C12D0Ev,_ZTv0_n24_N8S7202C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7202C12D0Ev,_ZThn184_N8S7202C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7202C12D1Ev,_ZTv0_n24_N8S7202C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S7202C12D1Ev,_ZThn184_N8S7202C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7202C12 = {  "S7202C12", // class name
  bases_S7202C12, 28,
  &(vtc_S7202C12[0]), // expected_vtbl_contents
  &(vtt_S7202C12[0]), // expected_vtt_contents
  ABISELECT(312,256), // object size
  NSPAIRA(_ZTI8S7202C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7202C12),31, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7202C12),20, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names146,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7202C2  : virtual S7202C3 , virtual S7202C4 , virtual S7202C10 , S2264C28 , virtual S7202C12 {
  int s7202c2f0;
  virtual  ~S7202C2(); // _ZN7S7202C2D2Ev
  S7202C2(); // tgen
};
//SIG(-1 S7202C2) C1{ VBC2{ BC3{ BC4{ m FL Fc:0} BC5{ m}} BC6{ VBC5 BC4} VBC7{ VBC8{ m} BC3 VBC5 Fi} Fp} VBC3 VBC9{ VBC10{ VBC4} Fi:1} BC8 VBC11{ BC12{ VBC3 BC13{ VBC14{ VBC15{ VBC3 VBC4 BC5} BC16{ BC5 BC3 vd FC17{}} Fi[8]} vd} vd FC14[2]} BC2 BC6} vd Fi}


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

static void Test_S7202C2()
{
  extern Class_Descriptor cd_S7202C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(48,75)];
    init_test(&cd_S7202C2, buf);
    S7202C2 *dp, &lv = *(dp=new (buf) S7202C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(376,296), "sizeof(S7202C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7202C2)");
    /*is_ambiguous_... S7202C2::S7202C3 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C4*)(S7202C3*), ABISELECT(32,20), "S7202C2");
    /*is_ambiguous_... S7202C2::S7202C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C4*)(S7202C3*), ABISELECT(32,20), "S7202C2");
    /*is_ambiguous_... S7202C2::S7202C3 */ AMB_check_base_class_offset(lv, (S7202C4*)(S7202C3*), ABISELECT(32,20), "S7202C2");
    /*is_ambiguous_... S7202C2::S7202C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C7*)(S7202C3*), 0, "S7202C2");
    /*is_ambiguous_... S7202C8::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C8*), 0, "S7202C2");
    check_base_class_offset(lv, (S2264C38*)(S7202C7*)(S7202C3*)(S7202C12*), 0, "S7202C2");
    /*is_ambiguous_... S7202C12::S7202C7 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C7*)(S7202C12*), 0, "S7202C2");
    /*is_ambiguous_... S7202C2::S7202C3 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C7*)(S7202C3*), ABISELECT(24,12), "S7202C2");
    /*is_ambiguous_... S7202C2::S7202C3 */ AMB_check_base_class_offset(lv, (S7202C7*)(S7202C3*), ABISELECT(16,8), "S7202C2");
    check_base_class_offset(lv, (S2264C28*)(S7202C8*), ABISELECT(68,48), "S7202C2");
    check_base_class_offset(lv, (S20955C5*)(S7202C4*)(S7202C8*), ABISELECT(56,36), "S7202C2");
    check_base_class_offset(lv, (S2264C38*)(S7202C4*)(S7202C8*), ABISELECT(56,36), "S7202C2");
    check_base_class_offset(lv, (S7202C4*)(S7202C8*), ABISELECT(56,36), "S7202C2");
    /*is_ambiguous_... S7202C2::S7202C3 */ AMB_check_base_class_offset(lv, (S7202C8*)(S7202C3*), ABISELECT(48,32), "S7202C2");
    check_base_class_offset(lv, (S7202C8*)(S7202C3*)(S7202C12*), ABISELECT(48,32), "S7202C2");
    /*is_ambiguous_... S7202C2::S7202C3 */ AMB_check_base_class_offset(lv, (S7202C3*), ABISELECT(16,8), "S7202C2");
    /*is_ambiguous_... S7202C2::S7202C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C4*), ABISELECT(72,48), "S7202C2");
    /*is_ambiguous_... S7202C2::S7202C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C4*), ABISELECT(72,48), "S7202C2");
    /*is_ambiguous_... S7202C2::S7202C4 */ AMB_check_base_class_offset(lv, (S7202C4*), ABISELECT(72,48), "S7202C2");
    /*is_ambiguous_... S7202C13::S7202C4 */ AMB_check_base_class_offset(lv, (S7202C4*)(S7202C13*)(S7202C12*), ABISELECT(72,48), "S7202C2");
    check_base_class_offset(lv, (S7202C4*)(S7202C16*), ABISELECT(72,48), "S7202C2");
    check_base_class_offset(lv, (S20955C5*)(S7202C11*), ABISELECT(96,64), "S7202C2");
    /*is_ambiguous_... S7202C16::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C16*), ABISELECT(96,64), "S7202C2");
    check_base_class_offset(lv, (S7202C11*)(S7202C10*), 0, "S7202C2");
    check_base_class_offset(lv, (S7202C10*), ABISELECT(80,56), "S7202C2");
    /*is_ambiguous_... S7202C2::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), 0, "S7202C2");
    /*is_ambiguous_... S7202C16::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C16*), ABISELECT(104,72), "S7202C2");
    check_base_class_offset(lv, (S7202C16*)(S7202C15*), ABISELECT(104,72), "S7202C2");
    /*is_ambiguous_... S7202C17::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C17*)(S7202C15*), ABISELECT(320,248), "S7202C2");
    check_base_class_offset(lv, (S20955C5*)(S7202C4*)(S7202C17*)(S7202C15*), ABISELECT(328,252), "S7202C2");
    check_base_class_offset(lv, (S2264C38*)(S7202C4*)(S7202C17*)(S7202C15*), ABISELECT(328,252), "S7202C2");
    check_base_class_offset(lv, (S7202C4*)(S7202C17*)(S7202C15*), ABISELECT(328,252), "S7202C2");
    check_base_class_offset(lv, (S7202C17*)(S7202C15*), ABISELECT(320,248), "S7202C2");
    check_base_class_offset(lv, (S7202C15*)(S7202C14*)(S7202C13*)(S7202C12*), ABISELECT(320,248), "S7202C2");
    check_base_class_offset(lv, (S7202C14*)(S7202C13*)(S7202C12*), ABISELECT(104,72), "S7202C2");
    check_base_class_offset(lv, (S7202C13*)(S7202C12*), ABISELECT(104,72), "S7202C2");
    /*is_ambiguous_... S7202C3::S7202C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C4*)(S7202C3*)(S7202C12*), ABISELECT(288,224), "S7202C2");
    /*is_ambiguous_... S7202C3::S7202C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C4*)(S7202C3*)(S7202C12*), ABISELECT(288,224), "S7202C2");
    /*is_ambiguous_... S7202C3::S7202C4 */ AMB_check_base_class_offset(lv, (S7202C4*)(S7202C3*)(S7202C12*), ABISELECT(288,224), "S7202C2");
    check_base_class_offset(lv, (S20955C5*)(S7202C7*)(S7202C3*)(S7202C12*), ABISELECT(280,216), "S7202C2");
    check_base_class_offset(lv, (S7202C7*)(S7202C3*)(S7202C12*), ABISELECT(272,212), "S7202C2");
    check_base_class_offset(lv, (S7202C3*)(S7202C12*), ABISELECT(272,212), "S7202C2");
    /*is_ambiguous_... S7202C12::S7202C7 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C7*)(S7202C12*), ABISELECT(312,240), "S7202C2");
    /*is_ambiguous_... S7202C12::S7202C7 */ AMB_check_base_class_offset(lv, (S7202C7*)(S7202C12*), ABISELECT(304,236), "S7202C2");
    check_base_class_offset(lv, (S7202C12*), ABISELECT(104,72), "S7202C2");
    check_field_offset(lv, s7202c2f0, ABISELECT(8,4), "S7202C2.s7202c2f0");
    test_class_info(&lv, &cd_S7202C2);
    dp->~S7202C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7202C2(Test_S7202C2, "S7202C2", ABISELECT(376,296));

#else // __cplusplus

extern void _ZN7S7202C2C1Ev();
extern void _ZN7S7202C2D2Ev();
Name_Map name_map_S7202C2[] = {
  NSPAIR(_ZN7S7202C2C1Ev),
  NSPAIR(_ZN7S7202C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S7202C7;
extern VTBL_ENTRY _ZTI7S7202C7[];
extern  VTBL_ENTRY _ZTV7S7202C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S7202C8;
extern VTBL_ENTRY _ZTI7S7202C8[];
extern  VTBL_ENTRY _ZTV7S7202C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C8[];
extern Class_Descriptor cd_S7202C3;
extern VTBL_ENTRY _ZTI7S7202C3[];
extern  VTBL_ENTRY _ZTV7S7202C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C3[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S7202C11;
extern VTBL_ENTRY _ZTI8S7202C11[];
extern  VTBL_ENTRY _ZTV8S7202C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C11[];
extern Class_Descriptor cd_S7202C10;
extern VTBL_ENTRY _ZTI8S7202C10[];
extern  VTBL_ENTRY _ZTV8S7202C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C10[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C16;
extern VTBL_ENTRY _ZTI8S7202C16[];
extern  VTBL_ENTRY _ZTV8S7202C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C16[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S7202C17;
extern VTBL_ENTRY _ZTI8S7202C17[];
extern  VTBL_ENTRY _ZTV8S7202C17[];
extern Class_Descriptor cd_S7202C15;
extern VTBL_ENTRY _ZTI8S7202C15[];
extern  VTBL_ENTRY _ZTV8S7202C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C15[];
extern Class_Descriptor cd_S7202C14;
extern VTBL_ENTRY _ZTI8S7202C14[];
extern  VTBL_ENTRY _ZTV8S7202C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C14[];
extern Class_Descriptor cd_S7202C13;
extern VTBL_ENTRY _ZTI8S7202C13[];
extern  VTBL_ENTRY _ZTV8S7202C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C13[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S7202C7;
extern VTBL_ENTRY _ZTI7S7202C7[];
extern  VTBL_ENTRY _ZTV7S7202C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C7[];
extern Class_Descriptor cd_S7202C3;
extern VTBL_ENTRY _ZTI7S7202C3[];
extern  VTBL_ENTRY _ZTV7S7202C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C3[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S7202C7;
extern VTBL_ENTRY _ZTI7S7202C7[];
extern  VTBL_ENTRY _ZTV7S7202C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C7[];
extern Class_Descriptor cd_S7202C12;
extern VTBL_ENTRY _ZTI8S7202C12[];
extern  VTBL_ENTRY _ZTV8S7202C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C12[];
static Base_Class bases_S7202C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(32,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(32,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
    2, //immediately_derived
  0, 0},
  {&cd_S7202C4,    ABISELECT(32,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
    11, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    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_S7202C7,    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
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(68,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
    10, //immediately_derived
  0, 1},
  {&cd_S20955C5,    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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    9, //immediately_derived
  0, 0},
  {&cd_S7202C4,    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
    10, //immediately_derived
  0, 0},
  {&cd_S7202C8,    ABISELECT(48,32), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7202C3,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //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_S20955C5,    ABISELECT(72,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
    14, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(72,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
    14, //immediately_derived
  0, 0},
  {&cd_S7202C4,    ABISELECT(72,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
  1, 1},
  {&cd_S20955C5,    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
    16, //immediately_derived
  0, 1},
  {&cd_S7202C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7202C10,    ABISELECT(80,56), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C38,    ABISELECT(104,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
    20, //immediately_derived
  0, 0},
  {&cd_S7202C16,    ABISELECT(104,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(320,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    ABISELECT(328,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(328,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7202C4,    ABISELECT(328,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7202C17,    ABISELECT(320,248), //bcp->offset
    -1, //bcp->virtual_function_table_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
    26, //immediately_derived
  0, 0},
  {&cd_S7202C15,    ABISELECT(320,248), //bcp->offset
    48, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S7202C14,    ABISELECT(104,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7202C13,    ABISELECT(104,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(288,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(288,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7202C4,    ABISELECT(288,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(280,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7202C7,    ABISELECT(272,212), //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
    11, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7202C3,    ABISELECT(272,212), //bcp->offset
    40, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(312,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S7202C7,    ABISELECT(304,236), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S7202C12,    ABISELECT(104,72), //bcp->offset
    28, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7202C2[];
extern void _ZN7S7202C2D1Ev();
extern void _ZN7S7202C2D0Ev();
extern void ABISELECT(_ZTv0_n80_N7S7202C2D1Ev,_ZTv0_n40_N7S7202C2D1Ev)();
extern void ABISELECT(_ZThn104_N7S7202C2D1Ev,_ZThn72_N7S7202C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7202C2D0Ev,_ZTv0_n40_N7S7202C2D0Ev)();
extern void ABISELECT(_ZThn104_N7S7202C2D0Ev,_ZThn72_N7S7202C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7202C2D1Ev,_ZTv0_n24_N7S7202C2D1Ev)();
extern void ABISELECT(_ZThn320_N7S7202C2D1Ev,_ZThn248_N7S7202C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7202C2D0Ev,_ZTv0_n24_N7S7202C2D0Ev)();
extern void ABISELECT(_ZThn320_N7S7202C2D0Ev,_ZThn248_N7S7202C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7202C2[] = {
  ABISELECT(104,72),
  ABISELECT(320,248),
  ABISELECT(104,72),
  0,
  ABISELECT(80,56),
  ABISELECT(72,48),
  ABISELECT(68,48),
  ABISELECT(48,32),
  0,
  ABISELECT(16,8),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C2[0]),
  (VTBL_ENTRY)&_ZN7S7202C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7202C2D0Ev,
  ABISELECT(52,40),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7202C2[0]),
  ABISELECT(-48,-32),
  ABISELECT(20,16),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S7202C2[0]),
  ABISELECT(-80,-56),
  ABISELECT(16,8),
  ABISELECT(-80,-56),
  (VTBL_ENTRY)&(_ZTI7S7202C2[0]),
  ABISELECT(-104,-72),
  ABISELECT(-36,-24),
  ABISELECT(-56,-40),
  ABISELECT(-104,-72),
  0,
  ABISELECT(216,176),
  -8,
  ABISELECT(-32,-24),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI7S7202C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7202C2D1Ev,_ZTv0_n40_N7S7202C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7202C2D0Ev,_ZTv0_n40_N7S7202C2D0Ev),
  ABISELECT(-204,-164),
  ABISELECT(-224,-180),
  ABISELECT(-272,-212),
  ABISELECT(-272,-212),
  (VTBL_ENTRY)&(_ZTI7S7202C2[0]),
  ABISELECT(-304,-236),
  ABISELECT(-304,-236),
  (VTBL_ENTRY)&(_ZTI7S7202C2[0]),
  ABISELECT(-320,-248),
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  ABISELECT(-320,-248),
  (VTBL_ENTRY)&(_ZTI7S7202C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7202C2D1Ev,_ZTv0_n24_N7S7202C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7202C2D0Ev,_ZTv0_n24_N7S7202C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S7202C2[];
static  VTBL_ENTRY _tg__ZTV7S7202C3__7S7202C2[] = {
  ABISELECT(52,40),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C77S7202C3__7S7202C2[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C8__7S7202C3__7S7202C2[] = {
  ABISELECT(-48,-32),
  ABISELECT(20,16),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S7202C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C8__7S7202C2[] = {
  ABISELECT(-48,-32),
  ABISELECT(20,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7202C10__7S7202C2[] = {
  ABISELECT(-80,-56),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7202C11__8S7202C10__7S7202C2[] = {
  ABISELECT(96,64),
  ABISELECT(80,56),
  (VTBL_ENTRY)&(_ZTI8S7202C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7202C11__7S7202C2[] = {
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C11[0]),
};
extern void _ZN8S7202C12D1Ev();
extern void _ZN8S7202C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7202C12__7S7202C2[] = {
  ABISELECT(-36,-24),
  ABISELECT(-56,-40),
  ABISELECT(-104,-72),
  0,
  ABISELECT(216,176),
  -8,
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C12[0]),
  (VTBL_ENTRY)&_ZN8S7202C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7202C12D0Ev,
};
extern void _ZN8S7202C13D1Ev();
extern void _ZN8S7202C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7202C138S7202C12__7S7202C2[] = {
  0,
  ABISELECT(216,176),
  -8,
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C13[0]),
  (VTBL_ENTRY)&_ZN8S7202C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7202C13D0Ev,
};
extern void _ZN8S7202C14D1Ev();
extern void _ZN8S7202C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7202C148S7202C138S7202C12__7S7202C2[] = {
  0,
  ABISELECT(216,176),
  -8,
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C14[0]),
  (VTBL_ENTRY)&_ZN8S7202C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7202C14D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7202C14D1Ev,_ZTv0_n24_N8S7202C14D1Ev)();
extern void ABISELECT(_ZThn216_N8S7202C14D1Ev,_ZThn176_N8S7202C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7202C14D0Ev,_ZTv0_n24_N8S7202C14D0Ev)();
extern void ABISELECT(_ZThn216_N8S7202C14D0Ev,_ZThn176_N8S7202C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7202C15__8S7202C148S7202C138S7202C12__7S7202C2[] = {
  ABISELECT(-216,-176),
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  ABISELECT(-216,-176),
  (VTBL_ENTRY)&(_ZTI8S7202C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7202C14D1Ev,_ZTv0_n24_N8S7202C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7202C14D0Ev,_ZTv0_n24_N8S7202C14D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7202C13D1Ev,_ZTv0_n24_N8S7202C13D1Ev)();
extern void ABISELECT(_ZThn216_N8S7202C13D1Ev,_ZThn176_N8S7202C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7202C13D0Ev,_ZTv0_n24_N8S7202C13D0Ev)();
extern void ABISELECT(_ZThn216_N8S7202C13D0Ev,_ZThn176_N8S7202C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7202C15__8S7202C138S7202C12__7S7202C2[] = {
  ABISELECT(-216,-176),
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  ABISELECT(-216,-176),
  (VTBL_ENTRY)&(_ZTI8S7202C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7202C13D1Ev,_ZTv0_n24_N8S7202C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7202C13D0Ev,_ZTv0_n24_N8S7202C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7202C38S7202C12__A1__7S7202C2[] = {
  ABISELECT(-204,-164),
  ABISELECT(-224,-180),
  ABISELECT(-272,-212),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C77S7202C38S7202C12__A1__7S7202C2[] = {
  ABISELECT(-272,-212),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C8__7S7202C38S7202C12__A1__7S7202C2[] = {
  ABISELECT(-48,-32),
  ABISELECT(20,16),
  ABISELECT(224,180),
  (VTBL_ENTRY)&(_ZTI7S7202C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C78S7202C12__A2__7S7202C2[] = {
  ABISELECT(-304,-236),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S7202C12D1Ev,_ZTv0_n24_N8S7202C12D1Ev)();
extern void ABISELECT(_ZThn216_N8S7202C12D1Ev,_ZThn176_N8S7202C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7202C12D0Ev,_ZTv0_n24_N8S7202C12D0Ev)();
extern void ABISELECT(_ZThn216_N8S7202C12D0Ev,_ZThn176_N8S7202C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7202C15__8S7202C12__7S7202C2[] = {
  ABISELECT(-216,-176),
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  ABISELECT(-216,-176),
  (VTBL_ENTRY)&(_ZTI8S7202C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7202C12D1Ev,_ZTv0_n24_N8S7202C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7202C12D0Ev,_ZTv0_n24_N8S7202C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7202C3__8S7202C12__7S7202C2[] = {
  ABISELECT(-204,-164),
  ABISELECT(-224,-180),
  ABISELECT(-272,-212),
  ABISELECT(-168,-140),
  (VTBL_ENTRY)&(_ZTI8S7202C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C8__8S7202C12__7S7202C2[] = {
  ABISELECT(-48,-32),
  ABISELECT(20,16),
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI8S7202C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C7__A1__8S7202C12__7S7202C2[] = {
  ABISELECT(-304,-236),
  ABISELECT(-200,-164),
  (VTBL_ENTRY)&(_ZTI8S7202C12[0]),
};
extern void _ZN8S7202C15D1Ev();
extern void _ZN8S7202C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7202C15__7S7202C2[] = {
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C15[0]),
  (VTBL_ENTRY)&_ZN8S7202C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7202C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7202C16__8S7202C15__7S7202C2[] = {
  -8,
  ABISELECT(-32,-24),
  ABISELECT(216,176),
  (VTBL_ENTRY)&(_ZTI8S7202C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7202C16__7S7202C2[] = {
  -8,
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C16[0]),
};
static  VTT_ENTRY vtt_S7202C2[] = {
  {&(_ZTV7S7202C2[13]),  13,56},
  {&(_ZTV7S7202C2[20]),  20,56},
  {&(_ZTV7S7202C2[24]),  24,56},
  {&(_ZTV7S7202C2[28]),  28,56},
  {&(_ZTV7S7202C2[13]),  13,56},
  {&(_ZTV7S7202C2[38]),  38,56},
  {&(_ZTV7S7202C2[54]),  54,56},
  {&(_ZTV7S7202C2[38]),  38,56},
  {&(_ZTV7S7202C2[45]),  45,56},
  {&(_ZTV7S7202C2[48]),  48,56},
  {&(_tg__ZTV7S7202C3__7S7202C2[5]),  5,5},
  {&(_tg__ZTV7S7202C77S7202C3__7S7202C2[3]),  3,3},
  {&(_tg__ZTV7S7202C8__7S7202C3__7S7202C2[4]),  4,4},
  {&(_tg__ZTV7S7202C8__7S7202C2[4]),  4,4},
  {&(_tg__ZTV8S7202C10__7S7202C2[4]),  4,4},
  {&(_tg__ZTV8S7202C11__8S7202C10__7S7202C2[3]),  3,3},
  {&(_tg__ZTV8S7202C11__7S7202C2[3]),  3,3},
  {&(_tg__ZTV8S7202C12__7S7202C2[9]),  9,11},
  {&(_tg__ZTV8S7202C138S7202C12__7S7202C2[6]),  6,8},
  {&(_tg__ZTV8S7202C148S7202C138S7202C12__7S7202C2[6]),  6,8},
  {&(_tg__ZTV8S7202C15__8S7202C148S7202C138S7202C12__7S7202C2[6]),  6,8},
  {&(_tg__ZTV8S7202C148S7202C138S7202C12__7S7202C2[6]),  6,8},
  {&(_tg__ZTV8S7202C15__8S7202C138S7202C12__7S7202C2[6]),  6,8},
  {&(_tg__ZTV8S7202C138S7202C12__7S7202C2[6]),  6,8},
  {&(_tg__ZTV7S7202C38S7202C12__A1__7S7202C2[5]),  5,5},
  {&(_tg__ZTV7S7202C77S7202C38S7202C12__A1__7S7202C2[3]),  3,3},
  {&(_tg__ZTV7S7202C8__7S7202C38S7202C12__A1__7S7202C2[4]),  4,4},
  {&(_tg__ZTV7S7202C78S7202C12__A2__7S7202C2[3]),  3,3},
  {&(_tg__ZTV8S7202C15__8S7202C12__7S7202C2[6]),  6,8},
  {&(_tg__ZTV8S7202C12__7S7202C2[9]),  9,11},
  {&(_tg__ZTV7S7202C3__8S7202C12__7S7202C2[5]),  5,5},
  {&(_tg__ZTV7S7202C8__8S7202C12__7S7202C2[4]),  4,4},
  {&(_tg__ZTV7S7202C7__A1__8S7202C12__7S7202C2[3]),  3,3},
  {&(_tg__ZTV8S7202C15__7S7202C2[5]),  5,7},
  {&(_tg__ZTV8S7202C16__8S7202C15__7S7202C2[4]),  4,4},
  {&(_tg__ZTV8S7202C16__7S7202C2[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7202C2[];
extern  VTBL_ENTRY _ZTV7S7202C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C2[];
static VTBL_ENTRY alt_thunk_names147[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7202C12D0Ev,_ZTv0_n24_N8S7202C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S7202C12D0Ev,_ZThn176_N8S7202C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7202C12D1Ev,_ZTv0_n24_N8S7202C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S7202C12D1Ev,_ZThn176_N8S7202C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7202C13D0Ev,_ZTv0_n24_N8S7202C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S7202C13D0Ev,_ZThn176_N8S7202C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7202C13D1Ev,_ZTv0_n24_N8S7202C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S7202C13D1Ev,_ZThn176_N8S7202C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7202C14D0Ev,_ZTv0_n24_N8S7202C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S7202C14D0Ev,_ZThn176_N8S7202C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7202C14D1Ev,_ZTv0_n24_N8S7202C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S7202C14D1Ev,_ZThn176_N8S7202C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7202C2D0Ev,_ZTv0_n24_N7S7202C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S7202C2D0Ev,_ZThn248_N7S7202C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7202C2D1Ev,_ZTv0_n24_N7S7202C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N7S7202C2D1Ev,_ZThn248_N7S7202C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7202C2D0Ev,_ZTv0_n40_N7S7202C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7202C2D0Ev,_ZThn72_N7S7202C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7202C2D1Ev,_ZTv0_n40_N7S7202C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7202C2D1Ev,_ZThn72_N7S7202C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7202C2 = {  "S7202C2", // class name
  bases_S7202C2, 38,
  &(vtc_S7202C2[0]), // expected_vtbl_contents
  &(vtt_S7202C2[0]), // expected_vtt_contents
  ABISELECT(376,296), // object size
  NSPAIRA(_ZTI7S7202C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7202C2),56, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7202C2),36, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names147,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7202C21  : S7202C8 {
  ~S7202C21(); // tgen
  S7202C21(); // tgen
};
//SIG(-1 S7202C21) C1{ BC2{ VBC3{ m} BC4{ BC5{ m FL Fc:0} BC6{ m}} VBC6 Fi}}


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

static void Test_S7202C21()
{
  extern Class_Descriptor cd_S7202C21;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S7202C21, buf);
    S7202C21 *dp, &lv = *(dp=new (buf) S7202C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7202C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7202C21)");
    check_base_class_offset(lv, (S2264C28*)(S7202C8*), 0, "S7202C21");
    check_base_class_offset(lv, (S20955C5*)(S7202C4*)(S7202C8*), ABISELECT(8,4), "S7202C21");
    check_base_class_offset(lv, (S2264C38*)(S7202C4*)(S7202C8*), ABISELECT(8,4), "S7202C21");
    check_base_class_offset(lv, (S7202C4*)(S7202C8*), ABISELECT(8,4), "S7202C21");
    /*is_ambiguous_... S7202C8::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C8*), 0, "S7202C21");
    check_base_class_offset(lv, (S7202C8*), 0, "S7202C21");
    test_class_info(&lv, &cd_S7202C21);
    dp->~S7202C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7202C21(Test_S7202C21, "S7202C21", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S7202C21C1Ev();
extern void _ZN8S7202C21D1Ev();
Name_Map name_map_S7202C21[] = {
  NSPAIR(_ZN8S7202C21C1Ev),
  NSPAIR(_ZN8S7202C21D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C8;
extern VTBL_ENTRY _ZTI7S7202C8[];
extern  VTBL_ENTRY _ZTV7S7202C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C8[];
static Base_Class bases_S7202C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    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_S2264C38,    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_S7202C4,    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
    5, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7202C8,    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
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S7202C21[];
static  VTBL_ENTRY vtc_S7202C21[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C21[0]),
};
extern VTBL_ENTRY _ZTV8S7202C21[];
static  VTBL_ENTRY _tg__ZTV7S7202C8__8S7202C21[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C8[0]),
};
static  VTT_ENTRY vtt_S7202C21[] = {
  {&(_ZTV8S7202C21[4]),  4,4},
  {&(_tg__ZTV7S7202C8__8S7202C21[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7202C21[];
extern  VTBL_ENTRY _ZTV8S7202C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C21[];
Class_Descriptor cd_S7202C21 = {  "S7202C21", // class name
  bases_S7202C21, 6,
  &(vtc_S7202C21[0]), // expected_vtbl_contents
  &(vtt_S7202C21[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S7202C21),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S7202C21),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7202C21),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  S7202C19  : virtual S7202C4 , S7202C3 , virtual S2264C24 , S7202C21 {
  ::S20955C25 s7202c19f0[6];
  void *s7202c19f1;
  ~S7202C19(); // tgen
  S7202C19(); // tgen
};
//SIG(-1 S7202C19) C1{ VBC2{ BC3{ m FL Fc:0} BC4{ m}} BC5{ BC2 BC6{ VBC4 BC3} VBC7{ VBC8{ m} BC2 VBC4 Fi} Fp} VBC9{ m} BC10{ BC7} FC11{ VBC12{ BC4 BC13{ BC3 BC4} vd FC14{}} vd}[6] Fp}


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

static void Test_S7202C19()
{
  extern Class_Descriptor cd_S7202C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(37,48)];
    init_test(&cd_S7202C19, buf);
    S7202C19 *dp, &lv = *(dp=new (buf) S7202C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(288,188), "sizeof(S7202C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7202C19)");
    /*is_ambiguous_... S7202C19::S7202C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C4*), ABISELECT(256,164), "S7202C19");
    /*is_ambiguous_... S7202C19::S7202C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C4*), ABISELECT(256,164), "S7202C19");
    /*is_ambiguous_... S7202C19::S7202C4 */ AMB_check_base_class_offset(lv, (S7202C4*), ABISELECT(256,164), "S7202C19");
    /*is_ambiguous_... S7202C3::S7202C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C4*)(S7202C3*), ABISELECT(16,12), "S7202C19");
    /*is_ambiguous_... S7202C3::S7202C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C4*)(S7202C3*), ABISELECT(16,12), "S7202C19");
    /*is_ambiguous_... S7202C3::S7202C4 */ AMB_check_base_class_offset(lv, (S7202C4*)(S7202C3*), ABISELECT(16,12), "S7202C19");
    check_base_class_offset(lv, (S2264C38*)(S7202C7*)(S7202C3*), 0, "S7202C19");
    /*is_ambiguous_... S7202C19::S7202C8 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C8*), 0, "S7202C19");
    /*is_ambiguous_... S7202C8::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C8*)(S7202C21*), 0, "S7202C19");
    check_base_class_offset(lv, (S20955C5*)(S7202C7*)(S7202C3*), ABISELECT(8,4), "S7202C19");
    check_base_class_offset(lv, (S7202C7*)(S7202C3*), 0, "S7202C19");
    /*is_ambiguous_... S7202C19::S7202C8 */ AMB_check_base_class_offset(lv, (S2264C28*)(S7202C8*), 0, "S7202C19");
    check_base_class_offset(lv, (S2264C28*)(S7202C8*)(S7202C21*), 0, "S7202C19");
    /*is_ambiguous_... S7202C19::S7202C8 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C4*)(S7202C8*), ABISELECT(272,176), "S7202C19");
    /*is_ambiguous_... S7202C19::S7202C8 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C4*)(S7202C8*), ABISELECT(272,176), "S7202C19");
    /*is_ambiguous_... S7202C19::S7202C8 */ AMB_check_base_class_offset(lv, (S7202C4*)(S7202C8*), ABISELECT(272,176), "S7202C19");
    check_base_class_offset(lv, (S7202C8*)(S7202C3*), ABISELECT(264,172), "S7202C19");
    check_base_class_offset(lv, (S7202C3*), 0, "S7202C19");
    check_base_class_offset(lv, (S2264C24*), 0, "S7202C19");
    check_base_class_offset(lv, (S20955C5*)(S7202C4*)(S7202C8*)(S7202C21*), ABISELECT(40,28), "S7202C19");
    check_base_class_offset(lv, (S2264C38*)(S7202C4*)(S7202C8*)(S7202C21*), ABISELECT(40,28), "S7202C19");
    check_base_class_offset(lv, (S7202C4*)(S7202C8*)(S7202C21*), ABISELECT(40,28), "S7202C19");
    check_base_class_offset(lv, (S7202C8*)(S7202C21*), ABISELECT(32,24), "S7202C19");
    check_base_class_offset(lv, (S7202C21*), ABISELECT(32,24), "S7202C19");
    check_field_offset(lv, s7202c19f0, ABISELECT(56,40), "S7202C19.s7202c19f0");
    check_field_offset(lv, s7202c19f1, ABISELECT(248,160), "S7202C19.s7202c19f1");
    test_class_info(&lv, &cd_S7202C19);
    dp->~S7202C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7202C19(Test_S7202C19, "S7202C19", ABISELECT(288,188));

#else // __cplusplus

extern void _ZN8S7202C19C1Ev();
extern void _ZN8S7202C19D1Ev();
Name_Map name_map_S7202C19[] = {
  NSPAIR(_ZN8S7202C19C1Ev),
  NSPAIR(_ZN8S7202C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S7202C7;
extern VTBL_ENTRY _ZTI7S7202C7[];
extern  VTBL_ENTRY _ZTV7S7202C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S7202C8;
extern VTBL_ENTRY _ZTI7S7202C8[];
extern  VTBL_ENTRY _ZTV7S7202C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C8[];
extern Class_Descriptor cd_S7202C3;
extern VTBL_ENTRY _ZTI7S7202C3[];
extern  VTBL_ENTRY _ZTV7S7202C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C3[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S7202C8;
extern VTBL_ENTRY _ZTI7S7202C8[];
extern  VTBL_ENTRY _ZTV7S7202C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C8[];
extern Class_Descriptor cd_S7202C21;
extern VTBL_ENTRY _ZTI8S7202C21[];
extern  VTBL_ENTRY _ZTV8S7202C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C21[];
static Base_Class bases_S7202C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(256,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(256,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
    2, //immediately_derived
  0, 0},
  {&cd_S7202C4,    ABISELECT(256,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20955C5,    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
    5, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    5, //immediately_derived
  0, 0},
  {&cd_S7202C4,    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
    14, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    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_S7202C7,    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
    2, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    ABISELECT(272,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
    12, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(272,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
    12, //immediately_derived
  0, 0},
  {&cd_S7202C4,    ABISELECT(272,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
    13, //immediately_derived
  0, 0},
  {&cd_S7202C8,    ABISELECT(264,172), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S7202C3,    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_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20955C5,    ABISELECT(40,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
    18, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(40,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
    18, //immediately_derived
  0, 0},
  {&cd_S7202C4,    ABISELECT(40,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
    19, //immediately_derived
  0, 0},
  {&cd_S7202C8,    ABISELECT(32,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    20, //immediately_derived
  0, 0},
  {&cd_S7202C21,    ABISELECT(32,24), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //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 _ZTI8S7202C19[];
static  VTBL_ENTRY vtc_S7202C19[] = {
  0,
  ABISELECT(256,164),
  0,
  ABISELECT(264,172),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C19[0]),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S7202C19[0]),
  ABISELECT(-264,-172),
  ABISELECT(-264,-172),
  ABISELECT(-264,-172),
  (VTBL_ENTRY)&(_ZTI8S7202C19[0]),
};
extern VTBL_ENTRY _ZTV8S7202C19[];
static  VTBL_ENTRY _tg__ZTV7S7202C3__8S7202C19[] = {
  0,
  ABISELECT(264,172),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C77S7202C3__8S7202C19[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C8__7S7202C3__8S7202C19[] = {
  ABISELECT(-264,-172),
  ABISELECT(-264,-172),
  ABISELECT(-264,-172),
  (VTBL_ENTRY)&(_ZTI7S7202C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7202C21__8S7202C19[] = {
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C21[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C88S7202C21__A1__8S7202C19[] = {
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C8__8S7202C19[] = {
  ABISELECT(-264,-172),
  ABISELECT(-264,-172),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C8[0]),
};
static  VTT_ENTRY vtt_S7202C19[] = {
  {&(_ZTV8S7202C19[7]),  7,15},
  {&(_tg__ZTV7S7202C3__8S7202C19[5]),  5,5},
  {&(_tg__ZTV7S7202C77S7202C3__8S7202C19[3]),  3,3},
  {&(_tg__ZTV7S7202C8__7S7202C3__8S7202C19[4]),  4,4},
  {&(_tg__ZTV8S7202C21__8S7202C19[4]),  4,4},
  {&(_tg__ZTV7S7202C88S7202C21__A1__8S7202C19[4]),  4,4},
  {&(_ZTV8S7202C19[15]),  15,15},
  {&(_ZTV8S7202C19[11]),  11,15},
  {&(_tg__ZTV7S7202C8__8S7202C19[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S7202C19[];
extern  VTBL_ENTRY _ZTV8S7202C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C19[];
Class_Descriptor cd_S7202C19 = {  "S7202C19", // class name
  bases_S7202C19, 21,
  &(vtc_S7202C19[0]), // expected_vtbl_contents
  &(vtt_S7202C19[0]), // expected_vtt_contents
  ABISELECT(288,188), // object size
  NSPAIRA(_ZTI8S7202C19),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S7202C19),15, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7202C19),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7202C1  : S7202C2 , S2264C28 , S7202C3 , virtual S7202C19 , S7202C15 {
  virtual  ~S7202C1(); // _ZN7S7202C1D2Ev
  S7202C1(); // tgen
};
//SIG(1 S7202C1) C1{ BC2{ VBC3{ BC4{ BC5{ m FL Fc:0} BC6{ m}} BC7{ VBC6 BC5} VBC8{ VBC9{ m} BC4 VBC6 Fi} Fp} VBC4 VBC10{ VBC11{ VBC5} Fi:1} BC9 VBC12{ BC13{ VBC4 BC14{ VBC15{ VBC16{ VBC4 VBC5 BC6} BC17{ BC6 BC4 vd FC18{}} Fi[8]} vd} vd FC15[2]} BC3 BC7} vd Fi} BC9 BC3 VBC19{ VBC4 BC3 VBC20{ m} BC21{ BC8} FC22{ VBC23{ BC6 BC24{ BC5 BC6} vd FC18} vd}[6] Fp} BC15 vd}


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

static void Test_S7202C1()
{
  extern Class_Descriptor cd_S7202C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(91,134)];
    init_test(&cd_S7202C1, buf);
    S7202C1 *dp, &lv = *(dp=new (buf) S7202C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(720,532), "sizeof(S7202C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7202C1)");
    /*is_ambiguous_... S7202C1::S7202C3 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C4*)(S7202C3*), ABISELECT(120,92), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C4*)(S7202C3*), ABISELECT(120,92), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C3 */ AMB_check_base_class_offset(lv, (S7202C4*)(S7202C3*), ABISELECT(120,92), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C7*)(S7202C3*), 0, "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C8 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C8*), 0, "S7202C1");
    check_base_class_offset(lv, (S2264C38*)(S7202C7*)(S7202C3*)(S7202C12*), 0, "S7202C1");
    /*is_ambiguous_... S7202C12::S7202C7 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C7*)(S7202C12*), 0, "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C7*)(S7202C3*), 0, "S7202C1");
    check_base_class_offset(lv, (S2264C38*)(S7202C7*)(S7202C3*)(S7202C19*), 0, "S7202C1");
    /*is_ambiguous_... S7202C8::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C8*)(S7202C21*)(S7202C19*), 0, "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C3 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C7*)(S7202C3*), ABISELECT(112,84), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C3 */ AMB_check_base_class_offset(lv, (S7202C7*)(S7202C3*), ABISELECT(104,80), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C8 */ AMB_check_base_class_offset(lv, (S2264C28*)(S7202C8*), ABISELECT(156,120), "S7202C1");
    check_base_class_offset(lv, (S2264C28*)(S7202C8*)(S7202C21*)(S7202C19*), ABISELECT(156,120), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C8 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C4*)(S7202C8*), ABISELECT(144,108), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C8 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C4*)(S7202C8*), ABISELECT(144,108), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C8 */ AMB_check_base_class_offset(lv, (S7202C4*)(S7202C8*), ABISELECT(144,108), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C3 */ AMB_check_base_class_offset(lv, (S7202C8*)(S7202C3*), ABISELECT(136,104), "S7202C1");
    check_base_class_offset(lv, (S7202C8*)(S7202C3*)(S7202C12*), ABISELECT(136,104), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C3 */ AMB_check_base_class_offset(lv, (S7202C8*)(S7202C3*), ABISELECT(136,104), "S7202C1");
    check_base_class_offset(lv, (S7202C8*)(S7202C3*)(S7202C19*), ABISELECT(136,104), "S7202C1");
    /*is_ambiguous_... S7202C2::S7202C3 */ AMB_check_base_class_offset(lv, (S7202C3*)(S7202C2*), ABISELECT(104,80), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C4*), ABISELECT(160,120), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C4*), ABISELECT(160,120), "S7202C1");
    /*is_ambiguous_... S7202C2::S7202C4 */ AMB_check_base_class_offset(lv, (S7202C4*)(S7202C2*), ABISELECT(160,120), "S7202C1");
    /*is_ambiguous_... S7202C13::S7202C4 */ AMB_check_base_class_offset(lv, (S7202C4*)(S7202C13*)(S7202C12*), ABISELECT(160,120), "S7202C1");
    check_base_class_offset(lv, (S7202C4*)(S7202C16*), ABISELECT(160,120), "S7202C1");
    /*is_ambiguous_... S7202C19::S7202C4 */ AMB_check_base_class_offset(lv, (S7202C4*)(S7202C19*), ABISELECT(160,120), "S7202C1");
    check_base_class_offset(lv, (S20955C5*)(S7202C11*), ABISELECT(184,136), "S7202C1");
    /*is_ambiguous_... S7202C16::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C16*), ABISELECT(184,136), "S7202C1");
    check_base_class_offset(lv, (S7202C11*)(S7202C10*), 0, "S7202C1");
    check_base_class_offset(lv, (S7202C10*)(S7202C2*), ABISELECT(168,128), "S7202C1");
    /*is_ambiguous_... S7202C2::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S7202C2*), 0, "S7202C1");
    /*is_ambiguous_... S7202C16::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C16*), ABISELECT(192,144), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C15 */ AMB_check_base_class_offset(lv, (S7202C16*)(S7202C15*), ABISELECT(192,144), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C15 */ AMB_check_base_class_offset(lv, (S7202C16*)(S7202C15*), ABISELECT(192,144), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C15 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C17*)(S7202C15*), ABISELECT(408,320), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C15 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C4*)(S7202C17*)(S7202C15*), ABISELECT(416,324), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C15 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C4*)(S7202C17*)(S7202C15*), ABISELECT(416,324), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C15 */ AMB_check_base_class_offset(lv, (S7202C4*)(S7202C17*)(S7202C15*), ABISELECT(416,324), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C15 */ AMB_check_base_class_offset(lv, (S7202C17*)(S7202C15*), ABISELECT(408,320), "S7202C1");
    check_base_class_offset(lv, (S7202C15*)(S7202C14*)(S7202C13*)(S7202C12*), ABISELECT(408,320), "S7202C1");
    check_base_class_offset(lv, (S7202C14*)(S7202C13*)(S7202C12*), ABISELECT(192,144), "S7202C1");
    check_base_class_offset(lv, (S7202C13*)(S7202C12*), ABISELECT(192,144), "S7202C1");
    /*is_ambiguous_... S7202C3::S7202C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C4*)(S7202C3*)(S7202C12*), ABISELECT(376,296), "S7202C1");
    /*is_ambiguous_... S7202C3::S7202C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C4*)(S7202C3*)(S7202C12*), ABISELECT(376,296), "S7202C1");
    /*is_ambiguous_... S7202C3::S7202C4 */ AMB_check_base_class_offset(lv, (S7202C4*)(S7202C3*)(S7202C12*), ABISELECT(376,296), "S7202C1");
    check_base_class_offset(lv, (S20955C5*)(S7202C7*)(S7202C3*)(S7202C12*), ABISELECT(368,288), "S7202C1");
    check_base_class_offset(lv, (S7202C7*)(S7202C3*)(S7202C12*), ABISELECT(360,284), "S7202C1");
    check_base_class_offset(lv, (S7202C3*)(S7202C12*), ABISELECT(360,284), "S7202C1");
    /*is_ambiguous_... S7202C12::S7202C7 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C7*)(S7202C12*), ABISELECT(400,312), "S7202C1");
    /*is_ambiguous_... S7202C12::S7202C7 */ AMB_check_base_class_offset(lv, (S7202C7*)(S7202C12*), ABISELECT(392,308), "S7202C1");
    check_base_class_offset(lv, (S7202C12*)(S7202C2*), ABISELECT(192,144), "S7202C1");
    check_base_class_offset(lv, (S7202C2*), 0, "S7202C1");
    /*is_ambiguous_... S7202C1::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), ABISELECT(12,8), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C3 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C4*)(S7202C3*), ABISELECT(32,20), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C4*)(S7202C3*), ABISELECT(32,20), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C3 */ AMB_check_base_class_offset(lv, (S7202C4*)(S7202C3*), ABISELECT(32,20), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C3 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C7*)(S7202C3*), ABISELECT(24,12), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C3 */ AMB_check_base_class_offset(lv, (S7202C7*)(S7202C3*), ABISELECT(16,8), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C3 */ AMB_check_base_class_offset(lv, (S7202C3*), ABISELECT(16,8), "S7202C1");
    /*is_ambiguous_... S7202C3::S7202C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C4*)(S7202C3*)(S7202C19*), ABISELECT(480,380), "S7202C1");
    /*is_ambiguous_... S7202C3::S7202C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C4*)(S7202C3*)(S7202C19*), ABISELECT(480,380), "S7202C1");
    /*is_ambiguous_... S7202C3::S7202C4 */ AMB_check_base_class_offset(lv, (S7202C4*)(S7202C3*)(S7202C19*), ABISELECT(480,380), "S7202C1");
    check_base_class_offset(lv, (S20955C5*)(S7202C7*)(S7202C3*)(S7202C19*), ABISELECT(472,372), "S7202C1");
    check_base_class_offset(lv, (S7202C7*)(S7202C3*)(S7202C19*), ABISELECT(464,368), "S7202C1");
    check_base_class_offset(lv, (S7202C3*)(S7202C19*), ABISELECT(464,368), "S7202C1");
    check_base_class_offset(lv, (S2264C24*)(S7202C19*), 0, "S7202C1");
    check_base_class_offset(lv, (S20955C5*)(S7202C4*)(S7202C8*)(S7202C21*)(S7202C19*), ABISELECT(504,396), "S7202C1");
    check_base_class_offset(lv, (S2264C38*)(S7202C4*)(S7202C8*)(S7202C21*)(S7202C19*), ABISELECT(504,396), "S7202C1");
    check_base_class_offset(lv, (S7202C4*)(S7202C8*)(S7202C21*)(S7202C19*), ABISELECT(504,396), "S7202C1");
    check_base_class_offset(lv, (S7202C8*)(S7202C21*)(S7202C19*), ABISELECT(496,392), "S7202C1");
    check_base_class_offset(lv, (S7202C21*)(S7202C19*), ABISELECT(496,392), "S7202C1");
    check_base_class_offset(lv, (S7202C19*), ABISELECT(464,368), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C15 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C17*)(S7202C15*), ABISELECT(48,32), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C15 */ AMB_check_base_class_offset(lv, (S20955C5*)(S7202C4*)(S7202C17*)(S7202C15*), ABISELECT(56,36), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C15 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7202C4*)(S7202C17*)(S7202C15*), ABISELECT(56,36), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C15 */ AMB_check_base_class_offset(lv, (S7202C4*)(S7202C17*)(S7202C15*), ABISELECT(56,36), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C15 */ AMB_check_base_class_offset(lv, (S7202C17*)(S7202C15*), ABISELECT(48,32), "S7202C1");
    /*is_ambiguous_... S7202C1::S7202C15 */ AMB_check_base_class_offset(lv, (S7202C15*), ABISELECT(48,32), "S7202C1");
    test_class_info(&lv, &cd_S7202C1);
    dp->~S7202C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7202C1(Test_S7202C1, "S7202C1", ABISELECT(720,532));

#else // __cplusplus

extern void _ZN7S7202C1C1Ev();
extern void _ZN7S7202C1D2Ev();
Name_Map name_map_S7202C1[] = {
  NSPAIR(_ZN7S7202C1C1Ev),
  NSPAIR(_ZN7S7202C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S7202C7;
extern VTBL_ENTRY _ZTI7S7202C7[];
extern  VTBL_ENTRY _ZTV7S7202C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S7202C8;
extern VTBL_ENTRY _ZTI7S7202C8[];
extern  VTBL_ENTRY _ZTV7S7202C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C8[];
extern Class_Descriptor cd_S7202C3;
extern VTBL_ENTRY _ZTI7S7202C3[];
extern  VTBL_ENTRY _ZTV7S7202C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C3[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S7202C11;
extern VTBL_ENTRY _ZTI8S7202C11[];
extern  VTBL_ENTRY _ZTV8S7202C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C11[];
extern Class_Descriptor cd_S7202C10;
extern VTBL_ENTRY _ZTI8S7202C10[];
extern  VTBL_ENTRY _ZTV8S7202C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C10[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C16;
extern VTBL_ENTRY _ZTI8S7202C16[];
extern  VTBL_ENTRY _ZTV8S7202C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C16[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S7202C17;
extern VTBL_ENTRY _ZTI8S7202C17[];
extern  VTBL_ENTRY _ZTV8S7202C17[];
extern Class_Descriptor cd_S7202C15;
extern VTBL_ENTRY _ZTI8S7202C15[];
extern  VTBL_ENTRY _ZTV8S7202C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C15[];
extern Class_Descriptor cd_S7202C14;
extern VTBL_ENTRY _ZTI8S7202C14[];
extern  VTBL_ENTRY _ZTV8S7202C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C14[];
extern Class_Descriptor cd_S7202C13;
extern VTBL_ENTRY _ZTI8S7202C13[];
extern  VTBL_ENTRY _ZTV8S7202C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C13[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S7202C7;
extern VTBL_ENTRY _ZTI7S7202C7[];
extern  VTBL_ENTRY _ZTV7S7202C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C7[];
extern Class_Descriptor cd_S7202C3;
extern VTBL_ENTRY _ZTI7S7202C3[];
extern  VTBL_ENTRY _ZTV7S7202C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C3[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S7202C7;
extern VTBL_ENTRY _ZTI7S7202C7[];
extern  VTBL_ENTRY _ZTV7S7202C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C7[];
extern Class_Descriptor cd_S7202C12;
extern VTBL_ENTRY _ZTI8S7202C12[];
extern  VTBL_ENTRY _ZTV8S7202C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C12[];
extern Class_Descriptor cd_S7202C2;
extern VTBL_ENTRY _ZTI7S7202C2[];
extern  VTBL_ENTRY _ZTV7S7202C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C2[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S7202C7;
extern VTBL_ENTRY _ZTI7S7202C7[];
extern  VTBL_ENTRY _ZTV7S7202C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C7[];
extern Class_Descriptor cd_S7202C3;
extern VTBL_ENTRY _ZTI7S7202C3[];
extern  VTBL_ENTRY _ZTV7S7202C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C3[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S7202C7;
extern VTBL_ENTRY _ZTI7S7202C7[];
extern  VTBL_ENTRY _ZTV7S7202C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C7[];
extern Class_Descriptor cd_S7202C3;
extern VTBL_ENTRY _ZTI7S7202C3[];
extern  VTBL_ENTRY _ZTV7S7202C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C3[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S7202C8;
extern VTBL_ENTRY _ZTI7S7202C8[];
extern  VTBL_ENTRY _ZTV7S7202C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C8[];
extern Class_Descriptor cd_S7202C21;
extern VTBL_ENTRY _ZTI8S7202C21[];
extern  VTBL_ENTRY _ZTV8S7202C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C21[];
extern Class_Descriptor cd_S7202C19;
extern VTBL_ENTRY _ZTI8S7202C19[];
extern  VTBL_ENTRY _ZTV8S7202C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C19[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7202C4;
extern VTBL_ENTRY _ZTI7S7202C4[];
extern Class_Descriptor cd_S7202C17;
extern VTBL_ENTRY _ZTI8S7202C17[];
extern  VTBL_ENTRY _ZTV8S7202C17[];
extern Class_Descriptor cd_S7202C15;
extern VTBL_ENTRY _ZTI8S7202C15[];
extern  VTBL_ENTRY _ZTV8S7202C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7202C15[];
static Base_Class bases_S7202C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(120,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(120,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
    2, //immediately_derived
  0, 0},
  {&cd_S7202C4,    ABISELECT(120,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, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    ABISELECT(112,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_S7202C7,    ABISELECT(104,80), //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
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(156,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
    10, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(144,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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(144,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
    9, //immediately_derived
  0, 0},
  {&cd_S7202C4,    ABISELECT(144,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
    10, //immediately_derived
  0, 0},
  {&cd_S7202C8,    ABISELECT(136,104), //bcp->offset
    34, //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
    1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7202C3,    ABISELECT(104,80), //bcp->offset
    29, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    38, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(160,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
    14, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(160,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
    14, //immediately_derived
  0, 0},
  {&cd_S7202C4,    ABISELECT(160,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
    20, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(184,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, 1},
  {&cd_S7202C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S7202C10,    ABISELECT(168,128), //bcp->offset
    38, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    38, //immediately_derived
  0, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(192,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
    20, //immediately_derived
  0, 0},
  {&cd_S7202C16,    ABISELECT(192,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    55, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(408,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
    25, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(416,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(416,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7202C4,    ABISELECT(416,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7202C17,    ABISELECT(408,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
    7, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S7202C15,    ABISELECT(408,320), //bcp->offset
    62, //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
    8, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S7202C14,    ABISELECT(192,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S7202C13,    ABISELECT(192,144), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(376,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
    31, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(376,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
    31, //immediately_derived
  0, 0},
  {&cd_S7202C4,    ABISELECT(376,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
    34, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(368,288), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7202C7,    ABISELECT(360,284), //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
    11, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S7202C3,    ABISELECT(360,284), //bcp->offset
    54, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(400,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S7202C7,    ABISELECT(392,308), //bcp->offset
    59, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S7202C12,    ABISELECT(192,144), //bcp->offset
    42, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    38, //immediately_derived
  0, 1},
  {&cd_S7202C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C28,    ABISELECT(12,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},
  {&cd_S20955C5,    ABISELECT(32,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
    42, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(32,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
    42, //immediately_derived
  0, 0},
  {&cd_S7202C4,    ABISELECT(32,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
    45, //immediately_derived
  0, 0},
  {&cd_S20955C5,    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
    44, //immediately_derived
  0, 0},
  {&cd_S7202C7,    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
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S7202C3,    ABISELECT(16,8), //bcp->offset
    17, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    22, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20955C5,    ABISELECT(480,380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(480,380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    48, //immediately_derived
  0, 0},
  {&cd_S7202C4,    ABISELECT(480,380), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(472,372), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    50, //immediately_derived
  0, 0},
  {&cd_S7202C7,    ABISELECT(464,368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    58, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    51, //immediately_derived
  0, 0},
  {&cd_S7202C3,    ABISELECT(464,368), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    57, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    58, //immediately_derived
  0, 0},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    58, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(504,396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    55, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(504,396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    55, //immediately_derived
  0, 0},
  {&cd_S7202C4,    ABISELECT(504,396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    56, //immediately_derived
  0, 0},
  {&cd_S7202C8,    ABISELECT(496,392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    57, //immediately_derived
  0, 0},
  {&cd_S7202C21,    ABISELECT(496,392), //bcp->offset
    77, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    58, //immediately_derived
  0, 0},
  {&cd_S7202C19,    ABISELECT(464,368), //bcp->offset
    70, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    56, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C38,    ABISELECT(48,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
    63, //immediately_derived
  0, 0},
  {&cd_S20955C5,    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
    62, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    62, //immediately_derived
  0, 0},
  {&cd_S7202C4,    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
    63, //immediately_derived
  0, 0},
  {&cd_S7202C17,    ABISELECT(48,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
    23, //init_seq
    64, //immediately_derived
  0, 0},
  {&cd_S7202C15,    ABISELECT(48,32), //bcp->offset
    22, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    24, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7202C1[];
extern void _ZN7S7202C1D1Ev();
extern void _ZN7S7202C1D0Ev();
extern void ABISELECT(_ZThn48_N7S7202C1D1Ev,_ZThn32_N7S7202C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7202C1D0Ev,_ZThn32_N7S7202C1D0Ev)();
extern void ABISELECT(_ZTv0_n80_N7S7202C1D1Ev,_ZTv0_n40_N7S7202C1D1Ev)();
extern void ABISELECT(_ZThn192_N7S7202C1D1Ev,_ZThn144_N7S7202C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7202C1D0Ev,_ZTv0_n40_N7S7202C1D0Ev)();
extern void ABISELECT(_ZThn192_N7S7202C1D0Ev,_ZThn144_N7S7202C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7202C1D1Ev,_ZTv0_n24_N7S7202C1D1Ev)();
extern void ABISELECT(_ZThn408_N7S7202C1D1Ev,_ZThn320_N7S7202C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7202C1D0Ev,_ZTv0_n24_N7S7202C1D0Ev)();
extern void ABISELECT(_ZThn408_N7S7202C1D0Ev,_ZThn320_N7S7202C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7202C1[] = {
  0,
  ABISELECT(464,368),
  ABISELECT(192,144),
  ABISELECT(408,320),
  ABISELECT(192,144),
  0,
  ABISELECT(168,128),
  ABISELECT(160,120),
  ABISELECT(156,120),
  ABISELECT(136,104),
  0,
  ABISELECT(104,80),
  ABISELECT(184,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C1[0]),
  (VTBL_ENTRY)&_ZN7S7202C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7202C1D0Ev,
  ABISELECT(140,112),
  ABISELECT(120,96),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7202C1[0]),
  ABISELECT(136,104),
  ABISELECT(112,88),
  ABISELECT(144,112),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI7S7202C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7202C1D1Ev,_ZThn32_N7S7202C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7202C1D0Ev,_ZThn32_N7S7202C1D0Ev),
  ABISELECT(52,40),
  ABISELECT(32,24),
  ABISELECT(-104,-80),
  ABISELECT(-104,-80),
  (VTBL_ENTRY)&(_ZTI7S7202C1[0]),
  ABISELECT(-136,-104),
  ABISELECT(20,16),
  ABISELECT(-136,-104),
  (VTBL_ENTRY)&(_ZTI7S7202C1[0]),
  ABISELECT(-168,-128),
  ABISELECT(16,8),
  ABISELECT(-168,-128),
  (VTBL_ENTRY)&(_ZTI7S7202C1[0]),
  ABISELECT(-192,-144),
  ABISELECT(-36,-24),
  ABISELECT(-56,-40),
  ABISELECT(-192,-144),
  0,
  ABISELECT(216,176),
  -8,
  ABISELECT(-32,-24),
  ABISELECT(-192,-144),
  (VTBL_ENTRY)&(_ZTI7S7202C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7202C1D1Ev,_ZTv0_n40_N7S7202C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7202C1D0Ev,_ZTv0_n40_N7S7202C1D0Ev),
  ABISELECT(-204,-164),
  ABISELECT(-224,-180),
  ABISELECT(-360,-284),
  ABISELECT(-360,-284),
  (VTBL_ENTRY)&(_ZTI7S7202C1[0]),
  ABISELECT(-392,-308),
  ABISELECT(-392,-308),
  (VTBL_ENTRY)&(_ZTI7S7202C1[0]),
  ABISELECT(-408,-320),
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  ABISELECT(-408,-320),
  (VTBL_ENTRY)&(_ZTI7S7202C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7202C1D1Ev,_ZTv0_n24_N7S7202C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7202C1D0Ev,_ZTv0_n24_N7S7202C1D0Ev),
  ABISELECT(-464,-368),
  ABISELECT(-304,-248),
  ABISELECT(-308,-248),
  ABISELECT(-328,-264),
  ABISELECT(-464,-368),
  ABISELECT(-464,-368),
  (VTBL_ENTRY)&(_ZTI7S7202C1[0]),
  ABISELECT(-496,-392),
  ABISELECT(-340,-272),
  ABISELECT(-496,-392),
  (VTBL_ENTRY)&(_ZTI7S7202C1[0]),
};
extern VTBL_ENTRY _ZTV7S7202C1[];
extern void _ZN7S7202C2D1Ev();
extern void _ZN7S7202C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7202C2__7S7202C1[] = {
  ABISELECT(192,144),
  ABISELECT(408,320),
  ABISELECT(192,144),
  0,
  ABISELECT(168,128),
  ABISELECT(160,120),
  ABISELECT(156,120),
  ABISELECT(136,104),
  0,
  ABISELECT(104,80),
  ABISELECT(184,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C2[0]),
  (VTBL_ENTRY)&_ZN7S7202C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7202C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7202C3__7S7202C2__7S7202C1[] = {
  ABISELECT(52,40),
  ABISELECT(32,24),
  ABISELECT(-104,-80),
  ABISELECT(-104,-80),
  (VTBL_ENTRY)&(_ZTI7S7202C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C8__7S7202C2__7S7202C1[] = {
  ABISELECT(-136,-104),
  ABISELECT(20,16),
  ABISELECT(-136,-104),
  (VTBL_ENTRY)&(_ZTI7S7202C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7202C10__7S7202C2__7S7202C1[] = {
  ABISELECT(-168,-128),
  ABISELECT(16,8),
  ABISELECT(-168,-128),
  (VTBL_ENTRY)&(_ZTI7S7202C2[0]),
};
extern void ABISELECT(_ZTv0_n80_N7S7202C2D1Ev,_ZTv0_n40_N7S7202C2D1Ev)();
extern void ABISELECT(_ZThn192_N7S7202C2D1Ev,_ZThn144_N7S7202C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N7S7202C2D0Ev,_ZTv0_n40_N7S7202C2D0Ev)();
extern void ABISELECT(_ZThn192_N7S7202C2D0Ev,_ZThn144_N7S7202C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7202C12__7S7202C2__7S7202C1[] = {
  ABISELECT(-192,-144),
  ABISELECT(-36,-24),
  ABISELECT(-56,-40),
  ABISELECT(-192,-144),
  0,
  ABISELECT(216,176),
  -8,
  ABISELECT(-32,-24),
  ABISELECT(-192,-144),
  (VTBL_ENTRY)&(_ZTI7S7202C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7202C2D1Ev,_ZTv0_n40_N7S7202C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N7S7202C2D0Ev,_ZTv0_n40_N7S7202C2D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S7202C2D1Ev,_ZTv0_n24_N7S7202C2D1Ev)();
extern void ABISELECT(_ZThn408_N7S7202C2D1Ev,_ZThn320_N7S7202C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7202C2D0Ev,_ZTv0_n24_N7S7202C2D0Ev)();
extern void ABISELECT(_ZThn408_N7S7202C2D0Ev,_ZThn320_N7S7202C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7202C15__7S7202C2__7S7202C1[] = {
  ABISELECT(-408,-320),
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  ABISELECT(-408,-320),
  (VTBL_ENTRY)&(_ZTI7S7202C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7202C2D1Ev,_ZTv0_n24_N7S7202C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7202C2D0Ev,_ZTv0_n24_N7S7202C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7202C38S7202C12__A1__7S7202C2__7S7202C1[] = {
  ABISELECT(-204,-164),
  ABISELECT(-224,-180),
  ABISELECT(-360,-284),
  ABISELECT(-360,-284),
  (VTBL_ENTRY)&(_ZTI7S7202C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C78S7202C12__A2__7S7202C2__7S7202C1[] = {
  ABISELECT(-392,-308),
  ABISELECT(-392,-308),
  (VTBL_ENTRY)&(_ZTI7S7202C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C3__A__7S7202C1[] = {
  ABISELECT(140,112),
  ABISELECT(120,96),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C77S7202C3__A3__7S7202C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C8__7S7202C3__A__7S7202C1[] = {
  ABISELECT(-136,-104),
  ABISELECT(20,16),
  ABISELECT(-120,-96),
  (VTBL_ENTRY)&(_ZTI7S7202C3[0]),
};
extern void _ZN8S7202C15D1Ev();
extern void _ZN8S7202C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7202C15__A__7S7202C1[] = {
  ABISELECT(136,104),
  ABISELECT(112,88),
  ABISELECT(144,112),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C15[0]),
  (VTBL_ENTRY)&_ZN8S7202C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7202C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7202C16__8S7202C15__A__7S7202C1[] = {
  -8,
  ABISELECT(-32,-24),
  ABISELECT(-144,-112),
  (VTBL_ENTRY)&(_ZTI8S7202C15[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C3__7S7202C1[] = {
  ABISELECT(52,40),
  ABISELECT(32,24),
  ABISELECT(-104,-80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C77S7202C3__7S7202C1[] = {
  ABISELECT(-104,-80),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C8__7S7202C3__7S7202C1[] = {
  ABISELECT(-136,-104),
  ABISELECT(20,16),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S7202C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C8__7S7202C1[] = {
  ABISELECT(-136,-104),
  ABISELECT(20,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7202C10__7S7202C1[] = {
  ABISELECT(-168,-128),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7202C11__8S7202C10__7S7202C1[] = {
  ABISELECT(184,136),
  ABISELECT(168,128),
  (VTBL_ENTRY)&(_ZTI8S7202C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7202C11__7S7202C1[] = {
  ABISELECT(184,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C11[0]),
};
extern void _ZN8S7202C12D1Ev();
extern void _ZN8S7202C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7202C12__7S7202C1[] = {
  ABISELECT(-36,-24),
  ABISELECT(-56,-40),
  ABISELECT(-192,-144),
  0,
  ABISELECT(216,176),
  -8,
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C12[0]),
  (VTBL_ENTRY)&_ZN8S7202C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7202C12D0Ev,
};
extern void _ZN8S7202C13D1Ev();
extern void _ZN8S7202C13D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7202C138S7202C12__7S7202C1[] = {
  0,
  ABISELECT(216,176),
  -8,
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C13[0]),
  (VTBL_ENTRY)&_ZN8S7202C13D1Ev,
  (VTBL_ENTRY)&_ZN8S7202C13D0Ev,
};
extern void _ZN8S7202C14D1Ev();
extern void _ZN8S7202C14D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7202C148S7202C138S7202C12__7S7202C1[] = {
  0,
  ABISELECT(216,176),
  -8,
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C14[0]),
  (VTBL_ENTRY)&_ZN8S7202C14D1Ev,
  (VTBL_ENTRY)&_ZN8S7202C14D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S7202C14D1Ev,_ZTv0_n24_N8S7202C14D1Ev)();
extern void ABISELECT(_ZThn216_N8S7202C14D1Ev,_ZThn176_N8S7202C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7202C14D0Ev,_ZTv0_n24_N8S7202C14D0Ev)();
extern void ABISELECT(_ZThn216_N8S7202C14D0Ev,_ZThn176_N8S7202C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7202C15__8S7202C148S7202C138S7202C12__7S7202C1[] = {
  ABISELECT(-216,-176),
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  ABISELECT(-216,-176),
  (VTBL_ENTRY)&(_ZTI8S7202C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7202C14D1Ev,_ZTv0_n24_N8S7202C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7202C14D0Ev,_ZTv0_n24_N8S7202C14D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S7202C13D1Ev,_ZTv0_n24_N8S7202C13D1Ev)();
extern void ABISELECT(_ZThn216_N8S7202C13D1Ev,_ZThn176_N8S7202C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7202C13D0Ev,_ZTv0_n24_N8S7202C13D0Ev)();
extern void ABISELECT(_ZThn216_N8S7202C13D0Ev,_ZThn176_N8S7202C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7202C15__8S7202C138S7202C12__7S7202C1[] = {
  ABISELECT(-216,-176),
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  ABISELECT(-216,-176),
  (VTBL_ENTRY)&(_ZTI8S7202C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7202C13D1Ev,_ZTv0_n24_N8S7202C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7202C13D0Ev,_ZTv0_n24_N8S7202C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7202C38S7202C12__A1__7S7202C1[] = {
  ABISELECT(-204,-164),
  ABISELECT(-224,-180),
  ABISELECT(-360,-284),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C77S7202C38S7202C12__A1__7S7202C1[] = {
  ABISELECT(-360,-284),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C8__7S7202C38S7202C12__A1__7S7202C1[] = {
  ABISELECT(-136,-104),
  ABISELECT(20,16),
  ABISELECT(224,180),
  (VTBL_ENTRY)&(_ZTI7S7202C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C78S7202C12__A2__7S7202C1[] = {
  ABISELECT(-392,-308),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S7202C12D1Ev,_ZTv0_n24_N8S7202C12D1Ev)();
extern void ABISELECT(_ZThn216_N8S7202C12D1Ev,_ZThn176_N8S7202C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S7202C12D0Ev,_ZTv0_n24_N8S7202C12D0Ev)();
extern void ABISELECT(_ZThn216_N8S7202C12D0Ev,_ZThn176_N8S7202C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7202C15__8S7202C12__7S7202C1[] = {
  ABISELECT(-216,-176),
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  ABISELECT(-216,-176),
  (VTBL_ENTRY)&(_ZTI8S7202C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7202C12D1Ev,_ZTv0_n24_N8S7202C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S7202C12D0Ev,_ZTv0_n24_N8S7202C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7202C3__8S7202C12__7S7202C1[] = {
  ABISELECT(-204,-164),
  ABISELECT(-224,-180),
  ABISELECT(-360,-284),
  ABISELECT(-168,-140),
  (VTBL_ENTRY)&(_ZTI8S7202C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C8__8S7202C12__7S7202C1[] = {
  ABISELECT(-136,-104),
  ABISELECT(20,16),
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI8S7202C12[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C7__A1__8S7202C12__7S7202C1[] = {
  ABISELECT(-392,-308),
  ABISELECT(-200,-164),
  (VTBL_ENTRY)&(_ZTI8S7202C12[0]),
};
extern void _ZN8S7202C15D1Ev();
extern void _ZN8S7202C15D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7202C15__7S7202C1[] = {
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C15[0]),
  (VTBL_ENTRY)&_ZN8S7202C15D1Ev,
  (VTBL_ENTRY)&_ZN8S7202C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S7202C16__8S7202C15__7S7202C1[] = {
  -8,
  ABISELECT(-32,-24),
  ABISELECT(216,176),
  (VTBL_ENTRY)&(_ZTI8S7202C15[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7202C16__7S7202C1[] = {
  -8,
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7202C19__7S7202C1[] = {
  ABISELECT(-464,-368),
  ABISELECT(-304,-248),
  ABISELECT(-308,-248),
  ABISELECT(-328,-264),
  ABISELECT(-464,-368),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C19[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C38S7202C19__A3__7S7202C1[] = {
  ABISELECT(-308,-248),
  ABISELECT(-328,-264),
  ABISELECT(-464,-368),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C3[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C77S7202C38S7202C19__A4__7S7202C1[] = {
  ABISELECT(-464,-368),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C8__7S7202C38S7202C19__A3__7S7202C1[] = {
  ABISELECT(-136,-104),
  ABISELECT(20,16),
  ABISELECT(328,264),
  (VTBL_ENTRY)&(_ZTI7S7202C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7202C218S7202C19__7S7202C1[] = {
  ABISELECT(-496,-392),
  ABISELECT(-340,-272),
  0,
  (VTBL_ENTRY)&(_ZTI8S7202C21[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C88S7202C218S7202C19__A1__7S7202C1[] = {
  ABISELECT(-496,-392),
  ABISELECT(-340,-272),
  0,
  (VTBL_ENTRY)&(_ZTI7S7202C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7202C8__8S7202C19__7S7202C1[] = {
  ABISELECT(-136,-104),
  ABISELECT(20,16),
  ABISELECT(328,264),
  (VTBL_ENTRY)&(_ZTI8S7202C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7202C21__8S7202C19__7S7202C1[] = {
  ABISELECT(-496,-392),
  ABISELECT(-340,-272),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S7202C19[0]),
};
static  VTT_ENTRY vtt_S7202C1[] = {
  {&(_ZTV7S7202C1[15]),  15,81},
  {&(_tg__ZTV7S7202C2__7S7202C1[13]),  13,15},
  {&(_tg__ZTV7S7202C3__7S7202C2__7S7202C1[5]),  5,5},
  {&(_tg__ZTV7S7202C8__7S7202C2__7S7202C1[4]),  4,4},
  {&(_tg__ZTV8S7202C10__7S7202C2__7S7202C1[4]),  4,4},
  {&(_tg__ZTV7S7202C2__7S7202C1[13]),  13,15},
  {&(_tg__ZTV8S7202C12__7S7202C2__7S7202C1[10]),  10,12},
  {&(_tg__ZTV8S7202C15__7S7202C2__7S7202C1[6]),  6,8},
  {&(_tg__ZTV8S7202C12__7S7202C2__7S7202C1[10]),  10,12},
  {&(_tg__ZTV7S7202C38S7202C12__A1__7S7202C2__7S7202C1[5]),  5,5},
  {&(_tg__ZTV7S7202C78S7202C12__A2__7S7202C2__7S7202C1[3]),  3,3},
  {&(_tg__ZTV7S7202C3__A__7S7202C1[5]),  5,5},
  {&(_tg__ZTV7S7202C77S7202C3__A3__7S7202C1[3]),  3,3},
  {&(_tg__ZTV7S7202C8__7S7202C3__A__7S7202C1[4]),  4,4},
  {&(_tg__ZTV8S7202C15__A__7S7202C1[5]),  5,7},
  {&(_tg__ZTV8S7202C16__8S7202C15__A__7S7202C1[4]),  4,4},
  {&(_ZTV7S7202C1[34]),  34,81},
  {&(_ZTV7S7202C1[38]),  38,81},
  {&(_ZTV7S7202C1[42]),  42,81},
  {&(_ZTV7S7202C1[15]),  15,81},
  {&(_ZTV7S7202C1[52]),  52,81},
  {&(_ZTV7S7202C1[68]),  68,81},
  {&(_ZTV7S7202C1[52]),  52,81},
  {&(_ZTV7S7202C1[59]),  59,81},
  {&(_ZTV7S7202C1[62]),  62,81},
  {&(_ZTV7S7202C1[22]),  22,81},
  {&(_ZTV7S7202C1[77]),  77,81},
  {&(_ZTV7S7202C1[81]),  81,81},
  {&(_ZTV7S7202C1[27]),  27,81},
  {&(_tg__ZTV7S7202C3__7S7202C1[5]),  5,5},
  {&(_tg__ZTV7S7202C77S7202C3__7S7202C1[3]),  3,3},
  {&(_tg__ZTV7S7202C8__7S7202C3__7S7202C1[4]),  4,4},
  {&(_tg__ZTV7S7202C8__7S7202C1[4]),  4,4},
  {&(_tg__ZTV8S7202C10__7S7202C1[4]),  4,4},
  {&(_tg__ZTV8S7202C11__8S7202C10__7S7202C1[3]),  3,3},
  {&(_tg__ZTV8S7202C11__7S7202C1[3]),  3,3},
  {&(_tg__ZTV8S7202C12__7S7202C1[9]),  9,11},
  {&(_tg__ZTV8S7202C138S7202C12__7S7202C1[6]),  6,8},
  {&(_tg__ZTV8S7202C148S7202C138S7202C12__7S7202C1[6]),  6,8},
  {&(_tg__ZTV8S7202C15__8S7202C148S7202C138S7202C12__7S7202C1[6]),  6,8},
  {&(_tg__ZTV8S7202C148S7202C138S7202C12__7S7202C1[6]),  6,8},
  {&(_tg__ZTV8S7202C15__8S7202C138S7202C12__7S7202C1[6]),  6,8},
  {&(_tg__ZTV8S7202C138S7202C12__7S7202C1[6]),  6,8},
  {&(_tg__ZTV7S7202C38S7202C12__A1__7S7202C1[5]),  5,5},
  {&(_tg__ZTV7S7202C77S7202C38S7202C12__A1__7S7202C1[3]),  3,3},
  {&(_tg__ZTV7S7202C8__7S7202C38S7202C12__A1__7S7202C1[4]),  4,4},
  {&(_tg__ZTV7S7202C78S7202C12__A2__7S7202C1[3]),  3,3},
  {&(_tg__ZTV8S7202C15__8S7202C12__7S7202C1[6]),  6,8},
  {&(_tg__ZTV8S7202C12__7S7202C1[9]),  9,11},
  {&(_tg__ZTV7S7202C3__8S7202C12__7S7202C1[5]),  5,5},
  {&(_tg__ZTV7S7202C8__8S7202C12__7S7202C1[4]),  4,4},
  {&(_tg__ZTV7S7202C7__A1__8S7202C12__7S7202C1[3]),  3,3},
  {&(_tg__ZTV8S7202C15__7S7202C1[5]),  5,7},
  {&(_tg__ZTV8S7202C16__8S7202C15__7S7202C1[4]),  4,4},
  {&(_tg__ZTV8S7202C16__7S7202C1[4]),  4,4},
  {&(_tg__ZTV8S7202C19__7S7202C1[7]),  7,7},
  {&(_tg__ZTV7S7202C38S7202C19__A3__7S7202C1[5]),  5,5},
  {&(_tg__ZTV7S7202C77S7202C38S7202C19__A4__7S7202C1[3]),  3,3},
  {&(_tg__ZTV7S7202C8__7S7202C38S7202C19__A3__7S7202C1[4]),  4,4},
  {&(_tg__ZTV8S7202C218S7202C19__7S7202C1[4]),  4,4},
  {&(_tg__ZTV7S7202C88S7202C218S7202C19__A1__7S7202C1[4]),  4,4},
  {&(_tg__ZTV7S7202C8__8S7202C19__7S7202C1[4]),  4,4},
  {&(_tg__ZTV8S7202C21__8S7202C19__7S7202C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7202C1[];
extern  VTBL_ENTRY _ZTV7S7202C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7202C1[];
static VTBL_ENTRY alt_thunk_names148[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7202C12D0Ev,_ZTv0_n24_N8S7202C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S7202C12D0Ev,_ZThn176_N8S7202C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7202C12D1Ev,_ZTv0_n24_N8S7202C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S7202C12D1Ev,_ZThn176_N8S7202C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7202C13D0Ev,_ZTv0_n24_N8S7202C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S7202C13D0Ev,_ZThn176_N8S7202C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7202C13D1Ev,_ZTv0_n24_N8S7202C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S7202C13D1Ev,_ZThn176_N8S7202C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7202C14D0Ev,_ZTv0_n24_N8S7202C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S7202C14D0Ev,_ZThn176_N8S7202C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S7202C14D1Ev,_ZTv0_n24_N8S7202C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N8S7202C14D1Ev,_ZThn176_N8S7202C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7202C2D0Ev,_ZTv0_n24_N7S7202C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N7S7202C2D0Ev,_ZThn320_N7S7202C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7202C2D1Ev,_ZTv0_n24_N7S7202C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N7S7202C2D1Ev,_ZThn320_N7S7202C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7202C2D0Ev,_ZTv0_n40_N7S7202C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7202C2D0Ev,_ZThn144_N7S7202C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7202C2D1Ev,_ZTv0_n40_N7S7202C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7202C2D1Ev,_ZThn144_N7S7202C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7202C1D0Ev,_ZTv0_n24_N7S7202C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N7S7202C1D0Ev,_ZThn320_N7S7202C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7202C1D1Ev,_ZTv0_n24_N7S7202C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N7S7202C1D1Ev,_ZThn320_N7S7202C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7202C1D0Ev,_ZTv0_n40_N7S7202C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7202C1D0Ev,_ZThn144_N7S7202C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N7S7202C1D1Ev,_ZTv0_n40_N7S7202C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N7S7202C1D1Ev,_ZThn144_N7S7202C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7202C1 = {  "S7202C1", // class name
  bases_S7202C1, 65,
  &(vtc_S7202C1[0]), // expected_vtbl_contents
  &(vtt_S7202C1[0]), // expected_vtt_contents
  ABISELECT(720,532), // object size
  NSPAIRA(_ZTI7S7202C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7202C1),81, //virtual function table var
  15, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7202C1),63, //virtual table table var
  24, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names148,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20996C7  : S20955C5 , S2264C28 {
};
//SIG(-1 S20996C7) C1{ BC2{ m FL Fc:0} BC3{ m}}



static void Test_S20996C7()
{
  extern Class_Descriptor cd_S20996C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2,3)];
    init_test(&cd_S20996C7, buf);
    S20996C7 &lv = *(new (buf) S20996C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S20996C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20996C7)");
    check_base_class_offset(lv, (S20955C5*), 0, "S20996C7");
    check_base_class_offset(lv, (S2264C28*), 0, "S20996C7");
    test_class_info(&lv, &cd_S20996C7);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20996C7(Test_S20996C7, "S20996C7", 8);

#else // __cplusplus

extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S20996C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S20996C7[];
Class_Descriptor cd_S20996C7 = {  "S20996C7", // class name
  bases_S20996C7, 2,
  0, // no vftv
  0, //no vtt
  8, // object size
  NSPAIRA(_ZTI8S20996C7),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  S20996C5  : virtual S2264C38 , S20996C7 , virtual S2264C28 {
  int s20996c5f0;
  ~S20996C5(); // tgen
  S20996C5(); // tgen
};
//SIG(-1 S20996C5) C1{ VBC2{ m} BC3{ BC4{ m FL Fc:0} BC5{ m}} VBC5 Fi}


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

static void Test_S20996C5()
{
  extern Class_Descriptor cd_S20996C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20996C5, buf);
    S20996C5 *dp, &lv = *(dp=new (buf) S20996C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20996C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20996C5)");
    check_base_class_offset(lv, (S2264C38*), 0, "S20996C5");
    check_base_class_offset(lv, (S20955C5*)(S20996C7*), ABISELECT(8,4), "S20996C5");
    check_base_class_offset(lv, (S2264C28*)(S20996C7*), ABISELECT(8,4), "S20996C5");
    check_base_class_offset(lv, (S20996C7*), ABISELECT(8,4), "S20996C5");
    /*is_ambiguous_... S20996C5::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), 0, "S20996C5");
    check_field_offset(lv, s20996c5f0, ABISELECT(16,12), "S20996C5.s20996c5f0");
    test_class_info(&lv, &cd_S20996C5);
    dp->~S20996C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20996C5(Test_S20996C5, "S20996C5", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S20996C5C1Ev();
extern void _ZN8S20996C5D1Ev();
Name_Map name_map_S20996C5[] = {
  NSPAIR(_ZN8S20996C5C1Ev),
  NSPAIR(_ZN8S20996C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S20996C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20955C5,    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_S2264C28,    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_S20996C7,    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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20996C5[];
static  VTBL_ENTRY vtc_S20996C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20996C5[0]),
};
extern VTBL_ENTRY _ZTV8S20996C5[];
static  VTT_ENTRY vtt_S20996C5[] = {
  {&(_ZTV8S20996C5[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20996C5[];
extern  VTBL_ENTRY _ZTV8S20996C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20996C5[];
Class_Descriptor cd_S20996C5 = {  "S20996C5", // class name
  bases_S20996C5, 5,
  &(vtc_S20996C5[0]), // expected_vtbl_contents
  &(vtt_S20996C5[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S20996C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20996C5),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20996C5),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  S20996C3  : virtual S20955C5 , S20996C5 {
  __tsu64 s20996c3f0:1;
  ~S20996C3(); // tgen
  S20996C3(); // tgen
};
//SIG(-1 S20996C3) C1{ VBC2{ m FL Fc:0} BC3{ VBC4{ m} BC5{ BC2 BC6{ m}} VBC6 Fi} FL:1}


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

static void Test_S20996C3()
{
  extern Class_Descriptor cd_S20996C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,8)];
    init_test(&cd_S20996C3, buf);
    S20996C3 *dp, &lv = *(dp=new (buf) S20996C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,28), "sizeof(S20996C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20996C3)");
    /*is_ambiguous_... S20996C3::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*), ABISELECT(24,20), "S20996C3");
    check_base_class_offset(lv, (S2264C38*)(S20996C5*), 0, "S20996C3");
    check_base_class_offset(lv, (S20955C5*)(S20996C7*)(S20996C5*), ABISELECT(8,4), "S20996C3");
    check_base_class_offset(lv, (S2264C28*)(S20996C7*)(S20996C5*), ABISELECT(8,4), "S20996C3");
    check_base_class_offset(lv, (S20996C7*)(S20996C5*), ABISELECT(8,4), "S20996C3");
    /*is_ambiguous_... S20996C5::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C5*), 0, "S20996C3");
    check_base_class_offset(lv, (S20996C5*), 0, "S20996C3");
    set_bf_and_test(lv, s20996c3f0, ABISELECT(20,16), 0, 1, 1, "S20996C3");
    test_class_info(&lv, &cd_S20996C3);
    dp->~S20996C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20996C3(Test_S20996C3, "S20996C3", ABISELECT(32,28));

#else // __cplusplus

extern void _ZN8S20996C3C1Ev();
extern void _ZN8S20996C3D1Ev();
Name_Map name_map_S20996C3[] = {
  NSPAIR(_ZN8S20996C3C1Ev),
  NSPAIR(_ZN8S20996C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C5;
extern VTBL_ENTRY _ZTI8S20996C5[];
extern  VTBL_ENTRY _ZTV8S20996C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20996C5[];
static Base_Class bases_S20996C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(24,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, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20955C5,    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
    4, //immediately_derived
  0, 0},
  {&cd_S2264C28,    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
    4, //immediately_derived
  0, 0},
  {&cd_S20996C7,    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
    6, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20996C5,    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
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20996C3[];
static  VTBL_ENTRY vtc_S20996C3[] = {
  ABISELECT(24,20),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20996C3[0]),
};
extern VTBL_ENTRY _ZTV8S20996C3[];
static  VTBL_ENTRY _tg__ZTV8S20996C5__8S20996C3[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20996C5[0]),
};
static  VTT_ENTRY vtt_S20996C3[] = {
  {&(_ZTV8S20996C3[5]),  5,5},
  {&(_tg__ZTV8S20996C5__8S20996C3[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20996C3[];
extern  VTBL_ENTRY _ZTV8S20996C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20996C3[];
Class_Descriptor cd_S20996C3 = {  "S20996C3", // class name
  bases_S20996C3, 7,
  &(vtc_S20996C3[0]), // expected_vtbl_contents
  &(vtt_S20996C3[0]), // expected_vtt_contents
  ABISELECT(32,28), // object size
  NSPAIRA(_ZTI8S20996C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20996C3),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20996C3),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  S20996C2  : virtual S20996C3 {
  virtual  ~S20996C2(); // _ZN8S20996C2D2Ev
  S20996C2(); // tgen
};
//SIG(-1 S20996C2) C1{ VBC2{ VBC3{ m FL Fc:0} BC4{ VBC5{ m} BC6{ BC3 BC7{ m}} VBC7 Fi} FL:1} vd}


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

static void Test_S20996C2()
{
  extern Class_Descriptor cd_S20996C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,9)];
    init_test(&cd_S20996C2, buf);
    S20996C2 *dp, &lv = *(dp=new (buf) S20996C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S20996C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20996C2)");
    /*is_ambiguous_... S20996C3::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C3*), ABISELECT(32,24), "S20996C2");
    check_base_class_offset(lv, (S2264C38*)(S20996C5*)(S20996C3*), 0, "S20996C2");
    check_base_class_offset(lv, (S20955C5*)(S20996C7*)(S20996C5*)(S20996C3*), ABISELECT(16,8), "S20996C2");
    check_base_class_offset(lv, (S2264C28*)(S20996C7*)(S20996C5*)(S20996C3*), ABISELECT(16,8), "S20996C2");
    check_base_class_offset(lv, (S20996C7*)(S20996C5*)(S20996C3*), ABISELECT(16,8), "S20996C2");
    /*is_ambiguous_... S20996C5::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C5*)(S20996C3*), 0, "S20996C2");
    check_base_class_offset(lv, (S20996C5*)(S20996C3*), ABISELECT(8,4), "S20996C2");
    check_base_class_offset(lv, (S20996C3*), ABISELECT(8,4), "S20996C2");
    test_class_info(&lv, &cd_S20996C2);
    dp->~S20996C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20996C2(Test_S20996C2, "S20996C2", ABISELECT(40,32));

#else // __cplusplus

extern void _ZN8S20996C2C1Ev();
extern void _ZN8S20996C2D2Ev();
Name_Map name_map_S20996C2[] = {
  NSPAIR(_ZN8S20996C2C1Ev),
  NSPAIR(_ZN8S20996C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C5;
extern VTBL_ENTRY _ZTI8S20996C5[];
extern  VTBL_ENTRY _ZTV8S20996C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20996C5[];
extern Class_Descriptor cd_S20996C3;
extern VTBL_ENTRY _ZTI8S20996C3[];
extern  VTBL_ENTRY _ZTV8S20996C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20996C3[];
static Base_Class bases_S20996C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(32,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, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20955C5,    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, 0},
  {&cd_S2264C28,    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, 0},
  {&cd_S20996C7,    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
    6, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20996C5,    ABISELECT(8,4), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    7, //immediately_derived
  0, 0},
  {&cd_S20996C3,    ABISELECT(8,4), //bcp->offset
    8, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20996C2[];
extern void _ZN8S20996C2D1Ev();
extern void _ZN8S20996C2D0Ev();
static  VTBL_ENTRY vtc_S20996C2[] = {
  0,
  0,
  ABISELECT(32,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20996C2[0]),
  (VTBL_ENTRY)&_ZN8S20996C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20996C2D0Ev,
  ABISELECT(24,20),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20996C2[0]),
};
extern VTBL_ENTRY _ZTV8S20996C2[];
static  VTBL_ENTRY _tg__ZTV8S20996C3__8S20996C2[] = {
  ABISELECT(24,20),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20996C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20996C58S20996C3__8S20996C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20996C5[0]),
};
static  VTT_ENTRY vtt_S20996C2[] = {
  {&(_ZTV8S20996C2[6]),  6,13},
  {&(_ZTV8S20996C2[13]),  13,13},
  {&(_tg__ZTV8S20996C3__8S20996C2[5]),  5,5},
  {&(_tg__ZTV8S20996C58S20996C3__8S20996C2[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20996C2[];
extern  VTBL_ENTRY _ZTV8S20996C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20996C2[];
Class_Descriptor cd_S20996C2 = {  "S20996C2", // class name
  bases_S20996C2, 8,
  &(vtc_S20996C2[0]), // expected_vtbl_contents
  &(vtt_S20996C2[0]), // expected_vtt_contents
  ABISELECT(40,32), // object size
  NSPAIRA(_ZTI8S20996C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20996C2),13, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20996C2),4, //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  S20996C10  : virtual S20996C7 , virtual S20955C5 , S2264C28 {
  ~S20996C10(); // tgen
  S20996C10(); // tgen
};
//SIG(-1 S20996C10) C1{ VBC2{ BC3{ m FL Fc:0} BC4{ m}} VBC3 BC4}


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

static void Test_S20996C10()
{
  extern Class_Descriptor cd_S20996C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S20996C10, buf);
    S20996C10 *dp, &lv = *(dp=new (buf) S20996C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S20996C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20996C10)");
    check_base_class_offset(lv, (S20955C5*)(S20996C7*), ABISELECT(8,4), "S20996C10");
    check_base_class_offset(lv, (S2264C28*)(S20996C7*), ABISELECT(8,4), "S20996C10");
    check_base_class_offset(lv, (S20996C7*), ABISELECT(8,4), "S20996C10");
    /*is_ambiguous_... S20996C10::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*), ABISELECT(16,12), "S20996C10");
    /*is_ambiguous_... S20996C10::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), 0, "S20996C10");
    test_class_info(&lv, &cd_S20996C10);
    dp->~S20996C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20996C10(Test_S20996C10, "S20996C10", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN9S20996C10C1Ev();
extern void _ZN9S20996C10D1Ev();
Name_Map name_map_S20996C10[] = {
  NSPAIR(_ZN9S20996C10C1Ev),
  NSPAIR(_ZN9S20996C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S20996C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    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_S2264C28,    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_S20996C7,    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_S20955C5,    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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI9S20996C10[];
static  VTBL_ENTRY vtc_S20996C10[] = {
  ABISELECT(16,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C10[0]),
};
extern VTBL_ENTRY _ZTV9S20996C10[];
static  VTT_ENTRY vtt_S20996C10[] = {
  {&(_ZTV9S20996C10[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20996C10[];
extern  VTBL_ENTRY _ZTV9S20996C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C10[];
Class_Descriptor cd_S20996C10 = {  "S20996C10", // class name
  bases_S20996C10, 5,
  &(vtc_S20996C10[0]), // expected_vtbl_contents
  &(vtt_S20996C10[0]), // expected_vtt_contents
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI9S20996C10),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20996C10),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20996C10),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  S20996C13  : S2264C28 , S20996C7 {
  ::S3052C22_nt s20996c13f0;
  virtual  ~S20996C13(); // _ZN9S20996C13D1Ev
  S20996C13(); // tgen
};
//SIG(-1 S20996C13) C1{ BC2{ m} BC3{ BC4{ m FL Fc:0} BC2} vd FC5{}}


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

static void Test_S20996C13()
{
  extern Class_Descriptor cd_S20996C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20996C13, buf);
    S20996C13 *dp, &lv = *(dp=new (buf) S20996C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20996C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20996C13)");
    /*is_ambiguous_... S20996C13::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), 0, "S20996C13");
    check_base_class_offset(lv, (S20955C5*)(S20996C7*), ABISELECT(8,4), "S20996C13");
    check_base_class_offset(lv, (S2264C28*)(S20996C7*), ABISELECT(8,4), "S20996C13");
    check_base_class_offset(lv, (S20996C7*), ABISELECT(8,4), "S20996C13");
    check_field_offset(lv, s20996c13f0, ABISELECT(16,12), "S20996C13.s20996c13f0");
    test_class_info(&lv, &cd_S20996C13);
    dp->~S20996C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20996C13(Test_S20996C13, "S20996C13", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN9S20996C13C1Ev();
extern void _ZN9S20996C13D1Ev();
Name_Map name_map_S20996C13[] = {
  NSPAIR(_ZN9S20996C13C1Ev),
  NSPAIR(_ZN9S20996C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
static Base_Class bases_S20996C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20955C5,    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_S2264C28,    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_S20996C7,    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 _ZTI9S20996C13[];
extern void _ZN9S20996C13D1Ev();
extern void _ZN9S20996C13D0Ev();
static  VTBL_ENTRY vtc_S20996C13[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C13[0]),
  (VTBL_ENTRY)&_ZN9S20996C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20996C13D0Ev,
};
extern VTBL_ENTRY _ZTI9S20996C13[];
extern  VTBL_ENTRY _ZTV9S20996C13[];
Class_Descriptor cd_S20996C13 = {  "S20996C13", // class name
  bases_S20996C13, 4,
  &(vtc_S20996C13[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI9S20996C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20996C13),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  S20996C12  : virtual S20996C10 , S20996C13 {
  int s20996c12f0[8];
  ~S20996C12(); // tgen
  S20996C12(); // tgen
};
//SIG(-1 S20996C12) C1{ VBC2{ VBC3{ BC4{ m FL Fc:0} BC5{ m}} VBC4 BC5} BC6{ BC5 BC3 vd FC7{}} Fi[8]}


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

static void Test_S20996C12()
{
  extern Class_Descriptor cd_S20996C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,18)];
    init_test(&cd_S20996C12, buf);
    S20996C12 *dp, &lv = *(dp=new (buf) S20996C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,68), "sizeof(S20996C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20996C12)");
    /*is_ambiguous_... S20996C12::S20996C7 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C7*), ABISELECT(64,52), "S20996C12");
    /*is_ambiguous_... S20996C12::S20996C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C7*), ABISELECT(64,52), "S20996C12");
    check_base_class_offset(lv, (S20996C7*)(S20996C10*), ABISELECT(64,52), "S20996C12");
    /*is_ambiguous_... S20996C10::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C10*), ABISELECT(72,60), "S20996C12");
    /*is_ambiguous_... S20996C10::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C10*), ABISELECT(56,48), "S20996C12");
    check_base_class_offset(lv, (S20996C10*), ABISELECT(56,48), "S20996C12");
    /*is_ambiguous_... S20996C13::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C13*), 0, "S20996C12");
    check_base_class_offset(lv, (S20955C5*)(S20996C7*)(S20996C13*), ABISELECT(8,4), "S20996C12");
    check_base_class_offset(lv, (S2264C28*)(S20996C7*)(S20996C13*), ABISELECT(8,4), "S20996C12");
    check_base_class_offset(lv, (S20996C7*)(S20996C13*), ABISELECT(8,4), "S20996C12");
    check_base_class_offset(lv, (S20996C13*), 0, "S20996C12");
    check_field_offset(lv, s20996c12f0, ABISELECT(20,16), "S20996C12.s20996c12f0");
    test_class_info(&lv, &cd_S20996C12);
    dp->~S20996C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20996C12(Test_S20996C12, "S20996C12", ABISELECT(80,68));

#else // __cplusplus

extern void _ZN9S20996C12C1Ev();
extern void _ZN9S20996C12D1Ev();
Name_Map name_map_S20996C12[] = {
  NSPAIR(_ZN9S20996C12C1Ev),
  NSPAIR(_ZN9S20996C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C10;
extern VTBL_ENTRY _ZTI9S20996C10[];
extern  VTBL_ENTRY _ZTV9S20996C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C10[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S20996C13;
extern VTBL_ENTRY _ZTI9S20996C13[];
extern  VTBL_ENTRY _ZTV9S20996C13[];
static Base_Class bases_S20996C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(64,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(64,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
    2, //immediately_derived
  0, 0},
  {&cd_S20996C7,    ABISELECT(64,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
    5, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(72,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
    5, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(56,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
    5, //immediately_derived
  0, 0},
  {&cd_S20996C10,    ABISELECT(56,48), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C28,    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
    9, //immediately_derived
  0, 0},
  {&cd_S20996C7,    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
    10, //immediately_derived
  0, 0},
  {&cd_S20996C13,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S20996C12[];
extern void _ZN9S20996C12D1Ev();
extern void _ZN9S20996C12D0Ev();
static  VTBL_ENTRY vtc_S20996C12[] = {
  ABISELECT(72,60),
  ABISELECT(64,52),
  ABISELECT(56,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C12[0]),
  (VTBL_ENTRY)&_ZN9S20996C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20996C12D0Ev,
  ABISELECT(16,12),
  ABISELECT(8,4),
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI9S20996C12[0]),
};
extern VTBL_ENTRY _ZTV9S20996C12[];
static  VTBL_ENTRY _tg__ZTV9S20996C10__9S20996C12[] = {
  ABISELECT(16,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C10[0]),
};
static  VTT_ENTRY vtt_S20996C12[] = {
  {&(_ZTV9S20996C12[5]),  5,11},
  {&(_ZTV9S20996C12[11]),  11,11},
  {&(_tg__ZTV9S20996C10__9S20996C12[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20996C12[];
extern  VTBL_ENTRY _ZTV9S20996C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C12[];
Class_Descriptor cd_S20996C12 = {  "S20996C12", // class name
  bases_S20996C12, 11,
  &(vtc_S20996C12[0]), // expected_vtbl_contents
  &(vtt_S20996C12[0]), // expected_vtt_contents
  ABISELECT(80,68), // object size
  NSPAIRA(_ZTI9S20996C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20996C12),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20996C12),3, //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  S20996C11  : virtual S20996C12 {
  virtual  ~S20996C11(); // _ZN9S20996C11D2Ev
  S20996C11(); // tgen
};
//SIG(-1 S20996C11) C1{ VBC2{ VBC3{ VBC4{ BC5{ m FL Fc:0} BC6{ m}} VBC5 BC6} BC7{ BC6 BC4 vd FC8{}} Fi[8]} vd}


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

static void Test_S20996C11()
{
  extern Class_Descriptor cd_S20996C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,18)];
    init_test(&cd_S20996C11, buf);
    S20996C11 *dp, &lv = *(dp=new (buf) S20996C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,68), "sizeof(S20996C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20996C11)");
    /*is_ambiguous_... S20996C11::S20996C7 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C7*), ABISELECT(64,52), "S20996C11");
    /*is_ambiguous_... S20996C11::S20996C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C7*), ABISELECT(64,52), "S20996C11");
    check_base_class_offset(lv, (S20996C7*)(S20996C10*), ABISELECT(64,52), "S20996C11");
    /*is_ambiguous_... S20996C10::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C10*), ABISELECT(72,60), "S20996C11");
    /*is_ambiguous_... S20996C10::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C10*), 0, "S20996C11");
    check_base_class_offset(lv, (S20996C10*)(S20996C12*), 0, "S20996C11");
    /*is_ambiguous_... S20996C13::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C13*)(S20996C12*), ABISELECT(8,4), "S20996C11");
    check_base_class_offset(lv, (S20955C5*)(S20996C7*)(S20996C13*)(S20996C12*), ABISELECT(16,8), "S20996C11");
    check_base_class_offset(lv, (S2264C28*)(S20996C7*)(S20996C13*)(S20996C12*), ABISELECT(16,8), "S20996C11");
    check_base_class_offset(lv, (S20996C7*)(S20996C13*)(S20996C12*), ABISELECT(16,8), "S20996C11");
    check_base_class_offset(lv, (S20996C13*)(S20996C12*), ABISELECT(8,4), "S20996C11");
    check_base_class_offset(lv, (S20996C12*), ABISELECT(8,4), "S20996C11");
    test_class_info(&lv, &cd_S20996C11);
    dp->~S20996C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20996C11(Test_S20996C11, "S20996C11", ABISELECT(80,68));

#else // __cplusplus

extern void _ZN9S20996C11C1Ev();
extern void _ZN9S20996C11D2Ev();
Name_Map name_map_S20996C11[] = {
  NSPAIR(_ZN9S20996C11C1Ev),
  NSPAIR(_ZN9S20996C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C10;
extern VTBL_ENTRY _ZTI9S20996C10[];
extern  VTBL_ENTRY _ZTV9S20996C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C10[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S20996C13;
extern VTBL_ENTRY _ZTI9S20996C13[];
extern  VTBL_ENTRY _ZTV9S20996C13[];
extern Class_Descriptor cd_S20996C12;
extern VTBL_ENTRY _ZTI9S20996C12[];
extern  VTBL_ENTRY _ZTV9S20996C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C12[];
static Base_Class bases_S20996C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(64,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(64,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
    2, //immediately_derived
  0, 0},
  {&cd_S20996C7,    ABISELECT(64,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
    5, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(72,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
    5, //immediately_derived
  0, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20996C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    11, //immediately_derived
  0, 1},
  {&cd_S2264C28,    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
    10, //immediately_derived
  0, 0},
  {&cd_S20955C5,    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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C28,    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
    9, //immediately_derived
  0, 0},
  {&cd_S20996C7,    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
    10, //immediately_derived
  0, 0},
  {&cd_S20996C13,    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
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20996C12,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //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},
  {0}};
extern VTBL_ENTRY _ZTI9S20996C11[];
extern void _ZN9S20996C11D1Ev();
extern void _ZN9S20996C11D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S20996C11D1Ev,_ZTv0_n24_N9S20996C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S20996C11D1Ev,_ZThn4_N9S20996C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20996C11D0Ev,_ZTv0_n24_N9S20996C11D0Ev)();
extern void ABISELECT(_ZThn8_N9S20996C11D0Ev,_ZThn4_N9S20996C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20996C11[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(72,60),
  ABISELECT(64,52),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C11[0]),
  (VTBL_ENTRY)&_ZN9S20996C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20996C11D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20996C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20996C11D1Ev,_ZTv0_n24_N9S20996C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20996C11D0Ev,_ZTv0_n24_N9S20996C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S20996C11[];
extern void _ZN9S20996C12D1Ev();
extern void _ZN9S20996C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20996C12__9S20996C11[] = {
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C12[0]),
  (VTBL_ENTRY)&_ZN9S20996C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20996C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20996C10__9S20996C12__9S20996C11[] = {
  ABISELECT(72,60),
  ABISELECT(64,52),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20996C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20996C10__9S20996C11[] = {
  ABISELECT(72,60),
  ABISELECT(64,52),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C10[0]),
};
static  VTT_ENTRY vtt_S20996C11[] = {
  {&(_ZTV9S20996C11[6]),  6,16},
  {&(_ZTV9S20996C11[14]),  14,16},
  {&(_ZTV9S20996C11[6]),  6,16},
  {&(_tg__ZTV9S20996C12__9S20996C11[5]),  5,7},
  {&(_tg__ZTV9S20996C10__9S20996C12__9S20996C11[4]),  4,4},
  {&(_tg__ZTV9S20996C10__9S20996C11[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20996C11[];
extern  VTBL_ENTRY _ZTV9S20996C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C11[];
static VTBL_ENTRY alt_thunk_names149[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20996C11D0Ev,_ZTv0_n24_N9S20996C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20996C11D0Ev,_ZThn4_N9S20996C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20996C11D1Ev,_ZTv0_n24_N9S20996C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20996C11D1Ev,_ZThn4_N9S20996C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20996C11 = {  "S20996C11", // class name
  bases_S20996C11, 12,
  &(vtc_S20996C11[0]), // expected_vtbl_contents
  &(vtt_S20996C11[0]), // expected_vtt_contents
  ABISELECT(80,68), // object size
  NSPAIRA(_ZTI9S20996C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20996C11),16, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20996C11),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names149,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20996C9  : virtual S20996C10 , virtual S20996C11 , virtual S20996C3 , S20996C5 {
  virtual  ~S20996C9(); // _ZN8S20996C9D2Ev
  S20996C9(); // tgen
};
//SIG(-1 S20996C9) C1{ VBC2{ VBC3{ BC4{ m FL Fc:0} BC5{ m}} VBC4 BC5} VBC6{ VBC7{ VBC2 BC8{ BC5 BC3 vd FC9{}} Fi[8]} vd} VBC10{ VBC4 BC11{ VBC12{ m} BC3 VBC5 Fi} FL:1} BC11 vd}


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

static void Test_S20996C9()
{
  extern Class_Descriptor cd_S20996C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,27)];
    init_test(&cd_S20996C9, buf);
    S20996C9 *dp, &lv = *(dp=new (buf) S20996C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,104), "sizeof(S20996C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20996C9)");
    /*is_ambiguous_... S20996C9::S20996C7 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C7*), ABISELECT(24,16), "S20996C9");
    /*is_ambiguous_... S20996C9::S20996C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C7*), ABISELECT(24,16), "S20996C9");
    check_base_class_offset(lv, (S20996C7*)(S20996C10*), ABISELECT(24,16), "S20996C9");
    /*is_ambiguous_... S20996C10::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C10*), ABISELECT(32,24), "S20996C9");
    /*is_ambiguous_... S20996C3::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C3*), ABISELECT(32,24), "S20996C9");
    /*is_ambiguous_... S20996C10::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C10*), ABISELECT(40,32), "S20996C9");
    check_base_class_offset(lv, (S20996C10*), ABISELECT(40,32), "S20996C9");
    check_base_class_offset(lv, (S20996C10*)(S20996C12*), ABISELECT(40,32), "S20996C9");
    /*is_ambiguous_... S20996C13::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C13*)(S20996C12*), ABISELECT(48,36), "S20996C9");
    check_base_class_offset(lv, (S20955C5*)(S20996C7*)(S20996C13*)(S20996C12*), ABISELECT(56,40), "S20996C9");
    check_base_class_offset(lv, (S2264C28*)(S20996C7*)(S20996C13*)(S20996C12*), ABISELECT(56,40), "S20996C9");
    check_base_class_offset(lv, (S20996C7*)(S20996C13*)(S20996C12*), ABISELECT(56,40), "S20996C9");
    check_base_class_offset(lv, (S20996C13*)(S20996C12*), ABISELECT(48,36), "S20996C9");
    check_base_class_offset(lv, (S20996C12*)(S20996C11*), ABISELECT(48,36), "S20996C9");
    check_base_class_offset(lv, (S20996C11*), ABISELECT(40,32), "S20996C9");
    check_base_class_offset(lv, (S2264C38*)(S20996C5*)(S20996C3*), 0, "S20996C9");
    /*is_ambiguous_... S20996C9::S20996C5 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20996C5*), 0, "S20996C9");
    check_base_class_offset(lv, (S20955C5*)(S20996C7*)(S20996C5*)(S20996C3*), ABISELECT(112,88), "S20996C9");
    check_base_class_offset(lv, (S2264C28*)(S20996C7*)(S20996C5*)(S20996C3*), ABISELECT(112,88), "S20996C9");
    check_base_class_offset(lv, (S20996C7*)(S20996C5*)(S20996C3*), ABISELECT(112,88), "S20996C9");
    /*is_ambiguous_... S20996C5::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C5*)(S20996C3*), 0, "S20996C9");
    /*is_ambiguous_... S20996C9::S20996C5 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C5*), 0, "S20996C9");
    check_base_class_offset(lv, (S20996C5*)(S20996C3*), ABISELECT(104,84), "S20996C9");
    check_base_class_offset(lv, (S20996C3*), ABISELECT(104,84), "S20996C9");
    /*is_ambiguous_... S20996C9::S20996C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C7*)(S20996C5*), ABISELECT(8,4), "S20996C9");
    /*is_ambiguous_... S20996C9::S20996C5 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C7*)(S20996C5*), ABISELECT(8,4), "S20996C9");
    /*is_ambiguous_... S20996C9::S20996C5 */ AMB_check_base_class_offset(lv, (S20996C7*)(S20996C5*), ABISELECT(8,4), "S20996C9");
    /*is_ambiguous_... S20996C9::S20996C5 */ AMB_check_base_class_offset(lv, (S20996C5*), 0, "S20996C9");
    test_class_info(&lv, &cd_S20996C9);
    dp->~S20996C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20996C9(Test_S20996C9, "S20996C9", ABISELECT(128,104));

#else // __cplusplus

extern void _ZN8S20996C9C1Ev();
extern void _ZN8S20996C9D2Ev();
Name_Map name_map_S20996C9[] = {
  NSPAIR(_ZN8S20996C9C1Ev),
  NSPAIR(_ZN8S20996C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C10;
extern VTBL_ENTRY _ZTI9S20996C10[];
extern  VTBL_ENTRY _ZTV9S20996C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C10[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S20996C13;
extern VTBL_ENTRY _ZTI9S20996C13[];
extern  VTBL_ENTRY _ZTV9S20996C13[];
extern Class_Descriptor cd_S20996C12;
extern VTBL_ENTRY _ZTI9S20996C12[];
extern  VTBL_ENTRY _ZTV9S20996C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C12[];
extern Class_Descriptor cd_S20996C11;
extern VTBL_ENTRY _ZTI9S20996C11[];
extern  VTBL_ENTRY _ZTV9S20996C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C11[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C5;
extern VTBL_ENTRY _ZTI8S20996C5[];
extern  VTBL_ENTRY _ZTV8S20996C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20996C5[];
extern Class_Descriptor cd_S20996C3;
extern VTBL_ENTRY _ZTI8S20996C3[];
extern  VTBL_ENTRY _ZTV8S20996C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20996C3[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S20996C5;
extern VTBL_ENTRY _ZTI8S20996C5[];
extern  VTBL_ENTRY _ZTV8S20996C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20996C5[];
static Base_Class bases_S20996C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    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_S2264C28,    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_S20996C7,    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
    5, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(32,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
    5, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(40,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_S20996C10,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    ABISELECT(48,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
    10, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(56,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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(56,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
    9, //immediately_derived
  0, 0},
  {&cd_S20996C7,    ABISELECT(56,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
    10, //immediately_derived
  0, 0},
  {&cd_S20996C13,    ABISELECT(48,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
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20996C12,    ABISELECT(48,36), //bcp->offset
    21, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20996C11,    ABISELECT(40,32), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20955C5,    ABISELECT(112,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
    16, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(112,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
    16, //immediately_derived
  0, 0},
  {&cd_S20996C7,    ABISELECT(112,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
    18, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20996C5,    ABISELECT(104,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20996C3,    ABISELECT(104,84), //bcp->offset
    29, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20955C5,    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
    22, //immediately_derived
  0, 0},
  {&cd_S2264C28,    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
    22, //immediately_derived
  0, 0},
  {&cd_S20996C7,    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
    23, //immediately_derived
  0, 0},
  {&cd_S20996C5,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20996C9[];
extern void _ZN8S20996C9D1Ev();
extern void _ZN8S20996C9D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S20996C9D1Ev,_ZTv0_n28_N8S20996C9D1Ev)();
extern void ABISELECT(_ZThn40_N8S20996C9D1Ev,_ZThn32_N8S20996C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20996C9D0Ev,_ZTv0_n28_N8S20996C9D0Ev)();
extern void ABISELECT(_ZThn40_N8S20996C9D0Ev,_ZThn32_N8S20996C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20996C9D1Ev,_ZTv0_n24_N8S20996C9D1Ev)();
extern void ABISELECT(_ZThn48_N8S20996C9D1Ev,_ZThn36_N8S20996C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20996C9D0Ev,_ZTv0_n24_N8S20996C9D0Ev)();
extern void ABISELECT(_ZThn48_N8S20996C9D0Ev,_ZThn36_N8S20996C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20996C9[] = {
  ABISELECT(104,84),
  ABISELECT(48,36),
  ABISELECT(40,32),
  ABISELECT(32,24),
  ABISELECT(24,16),
  ABISELECT(40,32),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20996C9[0]),
  (VTBL_ENTRY)&_ZN8S20996C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20996C9D0Ev,
  ABISELECT(-40,-32),
  0,
  ABISELECT(8,4),
  -8,
  -16,
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S20996C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20996C9D1Ev,_ZTv0_n28_N8S20996C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20996C9D0Ev,_ZTv0_n28_N8S20996C9D0Ev),
  ABISELECT(-48,-36),
  ABISELECT(-16,-12),
  ABISELECT(-24,-20),
  ABISELECT(-8,-4),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S20996C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20996C9D1Ev,_ZTv0_n24_N8S20996C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20996C9D0Ev,_ZTv0_n24_N8S20996C9D0Ev),
  ABISELECT(-72,-60),
  ABISELECT(-104,-84),
  ABISELECT(-104,-84),
  ABISELECT(-104,-84),
  (VTBL_ENTRY)&(_ZTI8S20996C9[0]),
};
extern VTBL_ENTRY _ZTV8S20996C9[];
static  VTBL_ENTRY _tg__ZTV8S20996C5__A1__8S20996C9[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20996C5[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20996C10__8S20996C9[] = {
  -8,
  -16,
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C10[0]),
};
extern void _ZN9S20996C11D1Ev();
extern void _ZN9S20996C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20996C11__8S20996C9[] = {
  0,
  ABISELECT(8,4),
  -8,
  -16,
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C11[0]),
  (VTBL_ENTRY)&_ZN9S20996C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20996C11D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20996C11D1Ev,_ZTv0_n24_N9S20996C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S20996C11D1Ev,_ZThn4_N9S20996C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20996C11D0Ev,_ZTv0_n24_N9S20996C11D0Ev)();
extern void ABISELECT(_ZThn8_N9S20996C11D0Ev,_ZThn4_N9S20996C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20996C12__9S20996C11__8S20996C9[] = {
  ABISELECT(-8,-4),
  ABISELECT(-16,-12),
  ABISELECT(-24,-20),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20996C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20996C11D1Ev,_ZTv0_n24_N9S20996C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20996C11D0Ev,_ZTv0_n24_N9S20996C11D0Ev),
};
extern void _ZN9S20996C12D1Ev();
extern void _ZN9S20996C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20996C12__8S20996C9[] = {
  ABISELECT(-16,-12),
  ABISELECT(-24,-20),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C12[0]),
  (VTBL_ENTRY)&_ZN9S20996C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20996C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20996C10__9S20996C12__8S20996C9[] = {
  -8,
  -16,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20996C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20996C3__8S20996C9[] = {
  ABISELECT(-72,-60),
  ABISELECT(-104,-84),
  ABISELECT(-104,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20996C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20996C58S20996C3__8S20996C9[] = {
  ABISELECT(-104,-84),
  ABISELECT(-104,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20996C5[0]),
};
static  VTT_ENTRY vtt_S20996C9[] = {
  {&(_ZTV8S20996C9[10]),  10,34},
  {&(_tg__ZTV8S20996C5__A1__8S20996C9[4]),  4,4},
  {&(_ZTV8S20996C9[19]),  19,34},
  {&(_ZTV8S20996C9[19]),  19,34},
  {&(_ZTV8S20996C9[27]),  27,34},
  {&(_ZTV8S20996C9[34]),  34,34},
  {&(_tg__ZTV9S20996C10__8S20996C9[4]),  4,4},
  {&(_tg__ZTV9S20996C11__8S20996C9[6]),  6,8},
  {&(_tg__ZTV9S20996C12__9S20996C11__8S20996C9[6]),  6,8},
  {&(_tg__ZTV9S20996C11__8S20996C9[6]),  6,8},
  {&(_tg__ZTV9S20996C12__8S20996C9[5]),  5,7},
  {&(_tg__ZTV9S20996C10__9S20996C12__8S20996C9[4]),  4,4},
  {&(_tg__ZTV8S20996C3__8S20996C9[5]),  5,5},
  {&(_tg__ZTV8S20996C58S20996C3__8S20996C9[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20996C9[];
extern  VTBL_ENTRY _ZTV8S20996C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20996C9[];
static VTBL_ENTRY alt_thunk_names150[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20996C11D0Ev,_ZTv0_n24_N9S20996C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20996C11D0Ev,_ZThn4_N9S20996C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20996C11D1Ev,_ZTv0_n24_N9S20996C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20996C11D1Ev,_ZThn4_N9S20996C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20996C9D0Ev,_ZTv0_n24_N8S20996C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20996C9D0Ev,_ZThn36_N8S20996C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20996C9D1Ev,_ZTv0_n24_N8S20996C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20996C9D1Ev,_ZThn36_N8S20996C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20996C9D0Ev,_ZTv0_n28_N8S20996C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20996C9D0Ev,_ZThn32_N8S20996C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20996C9D1Ev,_ZTv0_n28_N8S20996C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20996C9D1Ev,_ZThn32_N8S20996C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20996C9 = {  "S20996C9", // class name
  bases_S20996C9, 24,
  &(vtc_S20996C9[0]), // expected_vtbl_contents
  &(vtt_S20996C9[0]), // expected_vtt_contents
  ABISELECT(128,104), // object size
  NSPAIRA(_ZTI8S20996C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20996C9),34, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20996C9),14, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names150,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20996C17  : virtual S20996C7 , S20996C11 {
  ::S20996C12 s20996c17f0[2];
  virtual  ~S20996C17(); // _ZN9S20996C17D2Ev
  S20996C17(); // tgen
};
//SIG(-1 S20996C17) C1{ VBC2{ BC3{ m FL Fc:0} BC4{ m}} BC5{ VBC6{ VBC7{ VBC2 VBC3 BC4} BC8{ BC4 BC2 vd FC9{}} Fi[8]} vd} vd FC6[2]}


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

static void Test_S20996C17()
{
  extern Class_Descriptor cd_S20996C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,52)];
    init_test(&cd_S20996C17, buf);
    S20996C17 *dp, &lv = *(dp=new (buf) S20996C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,204), "sizeof(S20996C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20996C17)");
    /*is_ambiguous_... S20996C17::S20996C7 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C7*), ABISELECT(168,140), "S20996C17");
    /*is_ambiguous_... S20996C17::S20996C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C7*), ABISELECT(168,140), "S20996C17");
    /*is_ambiguous_... S20996C17::S20996C7 */ AMB_check_base_class_offset(lv, (S20996C7*), ABISELECT(168,140), "S20996C17");
    check_base_class_offset(lv, (S20996C7*)(S20996C10*), ABISELECT(168,140), "S20996C17");
    /*is_ambiguous_... S20996C10::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C10*), ABISELECT(232,196), "S20996C17");
    /*is_ambiguous_... S20996C10::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C10*), 0, "S20996C17");
    check_base_class_offset(lv, (S20996C10*)(S20996C12*), 0, "S20996C17");
    /*is_ambiguous_... S20996C13::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C13*)(S20996C12*), ABISELECT(176,148), "S20996C17");
    check_base_class_offset(lv, (S20955C5*)(S20996C7*)(S20996C13*)(S20996C12*), ABISELECT(184,152), "S20996C17");
    check_base_class_offset(lv, (S2264C28*)(S20996C7*)(S20996C13*)(S20996C12*), ABISELECT(184,152), "S20996C17");
    check_base_class_offset(lv, (S20996C7*)(S20996C13*)(S20996C12*), ABISELECT(184,152), "S20996C17");
    check_base_class_offset(lv, (S20996C13*)(S20996C12*), ABISELECT(176,148), "S20996C17");
    check_base_class_offset(lv, (S20996C12*)(S20996C11*), ABISELECT(176,148), "S20996C17");
    check_base_class_offset(lv, (S20996C11*), 0, "S20996C17");
    check_field_offset(lv, s20996c17f0, ABISELECT(8,4), "S20996C17.s20996c17f0");
    test_class_info(&lv, &cd_S20996C17);
    dp->~S20996C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20996C17(Test_S20996C17, "S20996C17", ABISELECT(240,204));

#else // __cplusplus

extern void _ZN9S20996C17C1Ev();
extern void _ZN9S20996C17D2Ev();
Name_Map name_map_S20996C17[] = {
  NSPAIR(_ZN9S20996C17C1Ev),
  NSPAIR(_ZN9S20996C17D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C10;
extern VTBL_ENTRY _ZTI9S20996C10[];
extern  VTBL_ENTRY _ZTV9S20996C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C10[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S20996C13;
extern VTBL_ENTRY _ZTI9S20996C13[];
extern  VTBL_ENTRY _ZTV9S20996C13[];
extern Class_Descriptor cd_S20996C12;
extern VTBL_ENTRY _ZTI9S20996C12[];
extern  VTBL_ENTRY _ZTV9S20996C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C12[];
extern Class_Descriptor cd_S20996C11;
extern VTBL_ENTRY _ZTI9S20996C11[];
extern  VTBL_ENTRY _ZTV9S20996C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C11[];
static Base_Class bases_S20996C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(168,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(168,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
    2, //immediately_derived
  0, 0},
  {&cd_S20996C7,    ABISELECT(168,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20955C5,    ABISELECT(232,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20996C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    11, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(176,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
    10, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(184,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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(184,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
    9, //immediately_derived
  0, 0},
  {&cd_S20996C7,    ABISELECT(184,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
    10, //immediately_derived
  0, 0},
  {&cd_S20996C13,    ABISELECT(176,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
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20996C12,    ABISELECT(176,148), //bcp->offset
    8, //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
    12, //immediately_derived
  0, 1},
  {&cd_S20996C11,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20996C17[];
extern void _ZN9S20996C17D1Ev();
extern void _ZN9S20996C17D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S20996C17D1Ev,_ZTv0_n24_N9S20996C17D1Ev)();
extern void ABISELECT(_ZThn176_N9S20996C17D1Ev,_ZThn148_N9S20996C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20996C17D0Ev,_ZTv0_n24_N9S20996C17D0Ev)();
extern void ABISELECT(_ZThn176_N9S20996C17D0Ev,_ZThn148_N9S20996C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20996C17[] = {
  0,
  ABISELECT(176,148),
  ABISELECT(232,196),
  ABISELECT(168,140),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C17[0]),
  (VTBL_ENTRY)&_ZN9S20996C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20996C17D0Ev,
  ABISELECT(-176,-148),
  ABISELECT(56,48),
  -8,
  ABISELECT(-176,-148),
  ABISELECT(-176,-148),
  (VTBL_ENTRY)&(_ZTI9S20996C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20996C17D1Ev,_ZTv0_n24_N9S20996C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20996C17D0Ev,_ZTv0_n24_N9S20996C17D0Ev),
};
extern VTBL_ENTRY _ZTV9S20996C17[];
extern void _ZN9S20996C11D1Ev();
extern void _ZN9S20996C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20996C11__9S20996C17[] = {
  0,
  ABISELECT(176,148),
  ABISELECT(232,196),
  ABISELECT(168,140),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C11[0]),
  (VTBL_ENTRY)&_ZN9S20996C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20996C11D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20996C11D1Ev,_ZTv0_n24_N9S20996C11D1Ev)();
extern void ABISELECT(_ZThn176_N9S20996C11D1Ev,_ZThn148_N9S20996C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20996C11D0Ev,_ZTv0_n24_N9S20996C11D0Ev)();
extern void ABISELECT(_ZThn176_N9S20996C11D0Ev,_ZThn148_N9S20996C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20996C12__9S20996C11__9S20996C17[] = {
  ABISELECT(-176,-148),
  ABISELECT(56,48),
  -8,
  ABISELECT(-176,-148),
  ABISELECT(-176,-148),
  (VTBL_ENTRY)&(_ZTI9S20996C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20996C11D1Ev,_ZTv0_n24_N9S20996C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20996C11D0Ev,_ZTv0_n24_N9S20996C11D0Ev),
};
extern void _ZN9S20996C12D1Ev();
extern void _ZN9S20996C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20996C12__9S20996C17[] = {
  ABISELECT(56,48),
  -8,
  ABISELECT(-176,-148),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C12[0]),
  (VTBL_ENTRY)&_ZN9S20996C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20996C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20996C10__9S20996C12__9S20996C17[] = {
  ABISELECT(232,196),
  ABISELECT(168,140),
  ABISELECT(176,148),
  (VTBL_ENTRY)&(_ZTI9S20996C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20996C10__9S20996C17[] = {
  ABISELECT(232,196),
  ABISELECT(168,140),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C10[0]),
};
static  VTT_ENTRY vtt_S20996C17[] = {
  {&(_ZTV9S20996C17[6]),  6,16},
  {&(_tg__ZTV9S20996C11__9S20996C17[6]),  6,8},
  {&(_tg__ZTV9S20996C12__9S20996C11__9S20996C17[6]),  6,8},
  {&(_tg__ZTV9S20996C11__9S20996C17[6]),  6,8},
  {&(_ZTV9S20996C17[14]),  14,16},
  {&(_ZTV9S20996C17[6]),  6,16},
  {&(_tg__ZTV9S20996C12__9S20996C17[5]),  5,7},
  {&(_tg__ZTV9S20996C10__9S20996C12__9S20996C17[4]),  4,4},
  {&(_tg__ZTV9S20996C10__9S20996C17[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20996C17[];
extern  VTBL_ENTRY _ZTV9S20996C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C17[];
static VTBL_ENTRY alt_thunk_names151[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20996C11D0Ev,_ZTv0_n24_N9S20996C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20996C11D0Ev,_ZThn148_N9S20996C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20996C11D1Ev,_ZTv0_n24_N9S20996C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20996C11D1Ev,_ZThn148_N9S20996C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20996C17D0Ev,_ZTv0_n24_N9S20996C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20996C17D0Ev,_ZThn148_N9S20996C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20996C17D1Ev,_ZTv0_n24_N9S20996C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20996C17D1Ev,_ZThn148_N9S20996C17D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20996C17 = {  "S20996C17", // class name
  bases_S20996C17, 13,
  &(vtc_S20996C17[0]), // expected_vtbl_contents
  &(vtt_S20996C17[0]), // expected_vtt_contents
  ABISELECT(240,204), // object size
  NSPAIRA(_ZTI9S20996C17),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20996C17),16, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20996C17),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names151,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20996C19  : virtual S2264C28 , S20955C5 {
  ~S20996C19(); // tgen
  S20996C19(); // tgen
};
//SIG(-1 S20996C19) C1{ VBC2{ m} BC3{ m FL Fc:0}}


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

static void Test_S20996C19()
{
  extern Class_Descriptor cd_S20996C19;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20996C19, buf);
    S20996C19 *dp, &lv = *(dp=new (buf) S20996C19());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20996C19)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20996C19)");
    check_base_class_offset(lv, (S2264C28*), 0, "S20996C19");
    check_base_class_offset(lv, (S20955C5*), ABISELECT(8,4), "S20996C19");
    test_class_info(&lv, &cd_S20996C19);
    dp->~S20996C19();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20996C19(Test_S20996C19, "S20996C19", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN9S20996C19C1Ev();
extern void _ZN9S20996C19D1Ev();
Name_Map name_map_S20996C19[] = {
  NSPAIR(_ZN9S20996C19C1Ev),
  NSPAIR(_ZN9S20996C19D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
static Base_Class bases_S20996C19[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20955C5,    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 _ZTI9S20996C19[];
static  VTBL_ENTRY vtc_S20996C19[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C19[0]),
};
extern VTBL_ENTRY _ZTV9S20996C19[];
static  VTT_ENTRY vtt_S20996C19[] = {
  {&(_ZTV9S20996C19[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20996C19[];
extern  VTBL_ENTRY _ZTV9S20996C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C19[];
Class_Descriptor cd_S20996C19 = {  "S20996C19", // class name
  bases_S20996C19, 2,
  &(vtc_S20996C19[0]), // expected_vtbl_contents
  &(vtt_S20996C19[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI9S20996C19),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20996C19),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20996C19),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  S20996C18  : S20996C7 , S20996C19 , virtual S20996C5 {
  void *s20996c18f0;
  ~S20996C18(); // tgen
  S20996C18(); // tgen
};
//SIG(-1 S20996C18) C1{ BC2{ BC3{ m FL Fc:0} BC4{ m}} BC5{ VBC4 BC3} VBC6{ VBC7{ m} BC2 VBC4 Fi} Fp}


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

static void Test_S20996C18()
{
  extern Class_Descriptor cd_S20996C18;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S20996C18, buf);
    S20996C18 *dp, &lv = *(dp=new (buf) S20996C18());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S20996C18)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20996C18)");
    /*is_ambiguous_... S20996C18::S20996C7 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C7*), ABISELECT(16,12), "S20996C18");
    /*is_ambiguous_... S20996C18::S20996C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C7*), ABISELECT(16,12), "S20996C18");
    /*is_ambiguous_... S20996C18::S20996C7 */ AMB_check_base_class_offset(lv, (S20996C7*), ABISELECT(16,12), "S20996C18");
    check_base_class_offset(lv, (S2264C28*)(S20996C19*), 0, "S20996C18");
    /*is_ambiguous_... S20996C5::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C5*), 0, "S20996C18");
    check_base_class_offset(lv, (S20955C5*)(S20996C19*), ABISELECT(8,4), "S20996C18");
    check_base_class_offset(lv, (S20996C19*), 0, "S20996C18");
    check_base_class_offset(lv, (S2264C38*)(S20996C5*), 0, "S20996C18");
    check_base_class_offset(lv, (S20955C5*)(S20996C7*)(S20996C5*), ABISELECT(40,28), "S20996C18");
    check_base_class_offset(lv, (S2264C28*)(S20996C7*)(S20996C5*), ABISELECT(40,28), "S20996C18");
    check_base_class_offset(lv, (S20996C7*)(S20996C5*), ABISELECT(40,28), "S20996C18");
    check_base_class_offset(lv, (S20996C5*), ABISELECT(32,24), "S20996C18");
    check_field_offset(lv, s20996c18f0, ABISELECT(24,20), "S20996C18.s20996c18f0");
    test_class_info(&lv, &cd_S20996C18);
    dp->~S20996C18();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20996C18(Test_S20996C18, "S20996C18", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN9S20996C18C1Ev();
extern void _ZN9S20996C18D1Ev();
Name_Map name_map_S20996C18[] = {
  NSPAIR(_ZN9S20996C18C1Ev),
  NSPAIR(_ZN9S20996C18D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20996C19;
extern VTBL_ENTRY _ZTI9S20996C19[];
extern  VTBL_ENTRY _ZTV9S20996C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C19[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S20996C5;
extern VTBL_ENTRY _ZTI8S20996C5[];
extern  VTBL_ENTRY _ZTV8S20996C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20996C5[];
static Base_Class bases_S20996C18[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    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_S2264C28,    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_S20996C7,    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, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    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
    5, //immediately_derived
  0, 0},
  {&cd_S20996C19,    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},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    ABISELECT(40,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, 0},
  {&cd_S2264C28,    ABISELECT(40,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, 0},
  {&cd_S20996C7,    ABISELECT(40,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
    10, //immediately_derived
  0, 0},
  {&cd_S20996C5,    ABISELECT(32,24), //bcp->offset
    5, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20996C18[];
static  VTBL_ENTRY vtc_S20996C18[] = {
  0,
  ABISELECT(32,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C18[0]),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI9S20996C18[0]),
};
extern VTBL_ENTRY _ZTV9S20996C18[];
static  VTBL_ENTRY _tg__ZTV9S20996C19__9S20996C18[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20996C5__9S20996C18[] = {
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20996C5[0]),
};
static  VTT_ENTRY vtt_S20996C18[] = {
  {&(_ZTV9S20996C18[5]),  5,9},
  {&(_tg__ZTV9S20996C19__9S20996C18[3]),  3,3},
  {&(_ZTV9S20996C18[9]),  9,9},
  {&(_tg__ZTV8S20996C5__9S20996C18[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20996C18[];
extern  VTBL_ENTRY _ZTV9S20996C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C18[];
Class_Descriptor cd_S20996C18 = {  "S20996C18", // class name
  bases_S20996C18, 11,
  &(vtc_S20996C18[0]), // expected_vtbl_contents
  &(vtt_S20996C18[0]), // expected_vtt_contents
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI9S20996C18),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20996C18),9, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20996C18),4, //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  S20996C16  : S20996C17 , S20996C18 , S20996C19 {
  ~S20996C16(); // tgen
  S20996C16(); // tgen
};
//SIG(-1 S20996C16) C1{ BC2{ VBC3{ BC4{ m FL Fc:0} BC5{ m}} BC6{ VBC7{ VBC8{ VBC3 VBC4 BC5} BC9{ BC5 BC3 vd FC10{}} Fi[8]} vd} vd FC7[2]} BC11{ BC3 BC12{ VBC5 BC4} VBC13{ VBC14{ m} BC3 VBC5 Fi} Fp} BC12}


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

static void Test_S20996C16()
{
  extern Class_Descriptor cd_S20996C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,65)];
    init_test(&cd_S20996C16, buf);
    S20996C16 *dp, &lv = *(dp=new (buf) S20996C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,256), "sizeof(S20996C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20996C16)");
    /*is_ambiguous_... S20996C16::S20996C7 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C7*), ABISELECT(216,176), "S20996C16");
    /*is_ambiguous_... S20996C16::S20996C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C7*), ABISELECT(216,176), "S20996C16");
    /*is_ambiguous_... S20996C17::S20996C7 */ AMB_check_base_class_offset(lv, (S20996C7*)(S20996C17*), ABISELECT(216,176), "S20996C16");
    check_base_class_offset(lv, (S20996C7*)(S20996C10*), ABISELECT(216,176), "S20996C16");
    /*is_ambiguous_... S20996C10::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C10*), ABISELECT(280,232), "S20996C16");
    /*is_ambiguous_... S20996C10::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C10*), 0, "S20996C16");
    check_base_class_offset(lv, (S20996C10*)(S20996C12*), 0, "S20996C16");
    /*is_ambiguous_... S20996C13::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C13*)(S20996C12*), ABISELECT(224,184), "S20996C16");
    check_base_class_offset(lv, (S20955C5*)(S20996C7*)(S20996C13*)(S20996C12*), ABISELECT(232,188), "S20996C16");
    check_base_class_offset(lv, (S2264C28*)(S20996C7*)(S20996C13*)(S20996C12*), ABISELECT(232,188), "S20996C16");
    check_base_class_offset(lv, (S20996C7*)(S20996C13*)(S20996C12*), ABISELECT(232,188), "S20996C16");
    check_base_class_offset(lv, (S20996C13*)(S20996C12*), ABISELECT(224,184), "S20996C16");
    check_base_class_offset(lv, (S20996C12*)(S20996C11*)(S20996C17*), ABISELECT(224,184), "S20996C16");
    check_base_class_offset(lv, (S20996C11*)(S20996C17*), 0, "S20996C16");
    check_base_class_offset(lv, (S20996C17*), 0, "S20996C16");
    /*is_ambiguous_... S20996C18::S20996C7 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C7*)(S20996C18*), ABISELECT(184,152), "S20996C16");
    /*is_ambiguous_... S20996C18::S20996C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C7*)(S20996C18*), ABISELECT(184,152), "S20996C16");
    /*is_ambiguous_... S20996C18::S20996C7 */ AMB_check_base_class_offset(lv, (S20996C7*)(S20996C18*), ABISELECT(184,152), "S20996C16");
    check_base_class_offset(lv, (S2264C28*)(S20996C19*)(S20996C18*), ABISELECT(288,240), "S20996C16");
    /*is_ambiguous_... S20996C5::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C5*), ABISELECT(288,240), "S20996C16");
    /*is_ambiguous_... S20996C16::S20996C19 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C19*), ABISELECT(288,240), "S20996C16");
    check_base_class_offset(lv, (S20955C5*)(S20996C19*)(S20996C18*), ABISELECT(176,144), "S20996C16");
    check_base_class_offset(lv, (S20996C19*)(S20996C18*), ABISELECT(168,140), "S20996C16");
    check_base_class_offset(lv, (S2264C38*)(S20996C5*), 0, "S20996C16");
    check_base_class_offset(lv, (S20955C5*)(S20996C7*)(S20996C5*), ABISELECT(296,244), "S20996C16");
    check_base_class_offset(lv, (S2264C28*)(S20996C7*)(S20996C5*), ABISELECT(296,244), "S20996C16");
    check_base_class_offset(lv, (S20996C7*)(S20996C5*), ABISELECT(296,244), "S20996C16");
    check_base_class_offset(lv, (S20996C5*)(S20996C18*), ABISELECT(288,240), "S20996C16");
    check_base_class_offset(lv, (S20996C18*), ABISELECT(168,140), "S20996C16");
    /*is_ambiguous_... S20996C16::S20996C19 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C19*), ABISELECT(208,168), "S20996C16");
    /*is_ambiguous_... S20996C16::S20996C19 */ AMB_check_base_class_offset(lv, (S20996C19*), ABISELECT(200,164), "S20996C16");
    test_class_info(&lv, &cd_S20996C16);
    dp->~S20996C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20996C16(Test_S20996C16, "S20996C16", ABISELECT(312,256));

#else // __cplusplus

extern void _ZN9S20996C16C1Ev();
extern void _ZN9S20996C16D1Ev();
Name_Map name_map_S20996C16[] = {
  NSPAIR(_ZN9S20996C16C1Ev),
  NSPAIR(_ZN9S20996C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C10;
extern VTBL_ENTRY _ZTI9S20996C10[];
extern  VTBL_ENTRY _ZTV9S20996C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C10[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S20996C13;
extern VTBL_ENTRY _ZTI9S20996C13[];
extern  VTBL_ENTRY _ZTV9S20996C13[];
extern Class_Descriptor cd_S20996C12;
extern VTBL_ENTRY _ZTI9S20996C12[];
extern  VTBL_ENTRY _ZTV9S20996C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C12[];
extern Class_Descriptor cd_S20996C11;
extern VTBL_ENTRY _ZTI9S20996C11[];
extern  VTBL_ENTRY _ZTV9S20996C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C11[];
extern Class_Descriptor cd_S20996C17;
extern VTBL_ENTRY _ZTI9S20996C17[];
extern  VTBL_ENTRY _ZTV9S20996C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C17[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20996C19;
extern VTBL_ENTRY _ZTI9S20996C19[];
extern  VTBL_ENTRY _ZTV9S20996C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C19[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S20996C5;
extern VTBL_ENTRY _ZTI8S20996C5[];
extern  VTBL_ENTRY _ZTV8S20996C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20996C5[];
extern Class_Descriptor cd_S20996C18;
extern VTBL_ENTRY _ZTI9S20996C18[];
extern  VTBL_ENTRY _ZTV9S20996C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C18[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20996C19;
extern VTBL_ENTRY _ZTI9S20996C19[];
extern  VTBL_ENTRY _ZTV9S20996C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C19[];
static Base_Class bases_S20996C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(216,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(216,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
    2, //immediately_derived
  0, 0},
  {&cd_S20996C7,    ABISELECT(216,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
    5, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(280,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
    5, //immediately_derived
  0, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20996C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(224,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
    10, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(232,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, 0},
  {&cd_S2264C28,    ABISELECT(232,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, 0},
  {&cd_S20996C7,    ABISELECT(232,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
    10, //immediately_derived
  0, 0},
  {&cd_S20996C13,    ABISELECT(224,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
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20996C12,    ABISELECT(224,184), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20996C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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
    13, //immediately_derived
  0, 0},
  {&cd_S20996C17,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20955C5,    ABISELECT(184,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
    16, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(184,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
    16, //immediately_derived
  0, 0},
  {&cd_S20996C7,    ABISELECT(184,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
    25, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(288,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    ABISELECT(176,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
    19, //immediately_derived
  0, 0},
  {&cd_S20996C19,    ABISELECT(168,140), //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
    7, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20955C5,    ABISELECT(296,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    ABISELECT(296,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20996C7,    ABISELECT(296,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20996C5,    ABISELECT(288,240), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //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
    25, //immediately_derived
  0, 1},
  {&cd_S20996C18,    ABISELECT(168,140), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20955C5,    ABISELECT(208,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
    27, //immediately_derived
  0, 0},
  {&cd_S20996C19,    ABISELECT(200,164), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20996C16[];
extern void _ZN9S20996C16D1Ev();
extern void _ZN9S20996C16D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S20996C16D1Ev,_ZTv0_n24_N9S20996C16D1Ev)();
extern void ABISELECT(_ZThn224_N9S20996C16D1Ev,_ZThn184_N9S20996C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20996C16D0Ev,_ZTv0_n24_N9S20996C16D0Ev)();
extern void ABISELECT(_ZThn224_N9S20996C16D0Ev,_ZThn184_N9S20996C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20996C16[] = {
  0,
  ABISELECT(288,240),
  ABISELECT(288,240),
  0,
  ABISELECT(224,184),
  ABISELECT(280,232),
  ABISELECT(216,176),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C16[0]),
  (VTBL_ENTRY)&_ZN9S20996C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20996C16D0Ev,
  ABISELECT(-168,-140),
  ABISELECT(120,100),
  ABISELECT(120,100),
  ABISELECT(-168,-140),
  (VTBL_ENTRY)&(_ZTI9S20996C16[0]),
  ABISELECT(88,76),
  ABISELECT(-200,-164),
  (VTBL_ENTRY)&(_ZTI9S20996C16[0]),
  ABISELECT(-224,-184),
  ABISELECT(56,48),
  -8,
  ABISELECT(-224,-184),
  ABISELECT(-224,-184),
  (VTBL_ENTRY)&(_ZTI9S20996C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20996C16D1Ev,_ZTv0_n24_N9S20996C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20996C16D0Ev,_ZTv0_n24_N9S20996C16D0Ev),
  0,
  ABISELECT(-288,-240),
  ABISELECT(-288,-240),
  (VTBL_ENTRY)&(_ZTI9S20996C16[0]),
};
extern VTBL_ENTRY _ZTV9S20996C16[];
extern void _ZN9S20996C17D1Ev();
extern void _ZN9S20996C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20996C17__9S20996C16[] = {
  0,
  ABISELECT(224,184),
  ABISELECT(280,232),
  ABISELECT(216,176),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C17[0]),
  (VTBL_ENTRY)&_ZN9S20996C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20996C17D0Ev,
};
extern void _ZN9S20996C11D1Ev();
extern void _ZN9S20996C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20996C119S20996C17__9S20996C16[] = {
  0,
  ABISELECT(224,184),
  ABISELECT(280,232),
  ABISELECT(216,176),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C11[0]),
  (VTBL_ENTRY)&_ZN9S20996C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20996C11D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20996C11D1Ev,_ZTv0_n24_N9S20996C11D1Ev)();
extern void ABISELECT(_ZThn224_N9S20996C11D1Ev,_ZThn184_N9S20996C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20996C11D0Ev,_ZTv0_n24_N9S20996C11D0Ev)();
extern void ABISELECT(_ZThn224_N9S20996C11D0Ev,_ZThn184_N9S20996C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20996C12__9S20996C119S20996C17__9S20996C16[] = {
  ABISELECT(-224,-184),
  ABISELECT(56,48),
  -8,
  ABISELECT(-224,-184),
  ABISELECT(-224,-184),
  (VTBL_ENTRY)&(_ZTI9S20996C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20996C11D1Ev,_ZTv0_n24_N9S20996C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20996C11D0Ev,_ZTv0_n24_N9S20996C11D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20996C17D1Ev,_ZTv0_n24_N9S20996C17D1Ev)();
extern void ABISELECT(_ZThn224_N9S20996C17D1Ev,_ZThn184_N9S20996C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20996C17D0Ev,_ZTv0_n24_N9S20996C17D0Ev)();
extern void ABISELECT(_ZThn224_N9S20996C17D0Ev,_ZThn184_N9S20996C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20996C12__9S20996C17__9S20996C16[] = {
  ABISELECT(-224,-184),
  ABISELECT(56,48),
  -8,
  ABISELECT(-224,-184),
  ABISELECT(-224,-184),
  (VTBL_ENTRY)&(_ZTI9S20996C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20996C17D1Ev,_ZTv0_n24_N9S20996C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20996C17D0Ev,_ZTv0_n24_N9S20996C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20996C18__9S20996C16[] = {
  ABISELECT(-168,-140),
  ABISELECT(120,100),
  ABISELECT(120,100),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C18[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20996C199S20996C18__9S20996C16[] = {
  ABISELECT(120,100),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20996C5__9S20996C18__9S20996C16[] = {
  0,
  ABISELECT(-288,-240),
  ABISELECT(-120,-100),
  (VTBL_ENTRY)&(_ZTI9S20996C18[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20996C19__A1__9S20996C16[] = {
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C19[0]),
};
extern void _ZN9S20996C12D1Ev();
extern void _ZN9S20996C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20996C12__9S20996C16[] = {
  ABISELECT(56,48),
  -8,
  ABISELECT(-224,-184),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C12[0]),
  (VTBL_ENTRY)&_ZN9S20996C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20996C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20996C10__9S20996C12__9S20996C16[] = {
  ABISELECT(280,232),
  ABISELECT(216,176),
  ABISELECT(224,184),
  (VTBL_ENTRY)&(_ZTI9S20996C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20996C10__9S20996C16[] = {
  ABISELECT(280,232),
  ABISELECT(216,176),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20996C5__9S20996C16[] = {
  0,
  ABISELECT(-288,-240),
  0,
  (VTBL_ENTRY)&(_ZTI8S20996C5[0]),
};
static  VTT_ENTRY vtt_S20996C16[] = {
  {&(_ZTV9S20996C16[9]),  9,31},
  {&(_tg__ZTV9S20996C17__9S20996C16[6]),  6,8},
  {&(_tg__ZTV9S20996C119S20996C17__9S20996C16[6]),  6,8},
  {&(_tg__ZTV9S20996C12__9S20996C119S20996C17__9S20996C16[6]),  6,8},
  {&(_tg__ZTV9S20996C119S20996C17__9S20996C16[6]),  6,8},
  {&(_tg__ZTV9S20996C12__9S20996C17__9S20996C16[6]),  6,8},
  {&(_tg__ZTV9S20996C17__9S20996C16[6]),  6,8},
  {&(_tg__ZTV9S20996C18__9S20996C16[5]),  5,5},
  {&(_tg__ZTV9S20996C199S20996C18__9S20996C16[3]),  3,3},
  {&(_tg__ZTV8S20996C5__9S20996C18__9S20996C16[4]),  4,4},
  {&(_tg__ZTV9S20996C19__A1__9S20996C16[3]),  3,3},
  {&(_ZTV9S20996C16[25]),  25,31},
  {&(_ZTV9S20996C16[9]),  9,31},
  {&(_ZTV9S20996C16[16]),  16,31},
  {&(_ZTV9S20996C16[31]),  31,31},
  {&(_ZTV9S20996C16[19]),  19,31},
  {&(_tg__ZTV9S20996C12__9S20996C16[5]),  5,7},
  {&(_tg__ZTV9S20996C10__9S20996C12__9S20996C16[4]),  4,4},
  {&(_tg__ZTV9S20996C10__9S20996C16[4]),  4,4},
  {&(_tg__ZTV8S20996C5__9S20996C16[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20996C16[];
extern  VTBL_ENTRY _ZTV9S20996C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C16[];
static VTBL_ENTRY alt_thunk_names152[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20996C17D0Ev,_ZTv0_n24_N9S20996C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20996C17D0Ev,_ZThn184_N9S20996C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20996C17D1Ev,_ZTv0_n24_N9S20996C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20996C17D1Ev,_ZThn184_N9S20996C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20996C11D0Ev,_ZTv0_n24_N9S20996C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20996C11D0Ev,_ZThn184_N9S20996C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20996C11D1Ev,_ZTv0_n24_N9S20996C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20996C11D1Ev,_ZThn184_N9S20996C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20996C16D0Ev,_ZTv0_n24_N9S20996C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20996C16D0Ev,_ZThn184_N9S20996C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20996C16D1Ev,_ZTv0_n24_N9S20996C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20996C16D1Ev,_ZThn184_N9S20996C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20996C16 = {  "S20996C16", // class name
  bases_S20996C16, 28,
  &(vtc_S20996C16[0]), // expected_vtbl_contents
  &(vtt_S20996C16[0]), // expected_vtt_contents
  ABISELECT(312,256), // object size
  NSPAIRA(_ZTI9S20996C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20996C16),31, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20996C16),20, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names152,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20996C20  : virtual S20955C5 {
  ~S20996C20(); // tgen
  S20996C20(); // tgen
};
//SIG(-1 S20996C20) C1{ VBC2{ m FL Fc:0}}


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

static void Test_S20996C20()
{
  extern Class_Descriptor cd_S20996C20;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20996C20, buf);
    S20996C20 *dp, &lv = *(dp=new (buf) S20996C20());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20996C20)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20996C20)");
    check_base_class_offset(lv, (S20955C5*), ABISELECT(8,4), "S20996C20");
    test_class_info(&lv, &cd_S20996C20);
    dp->~S20996C20();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20996C20(Test_S20996C20, "S20996C20", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN9S20996C20C1Ev();
extern void _ZN9S20996C20D1Ev();
Name_Map name_map_S20996C20[] = {
  NSPAIR(_ZN9S20996C20C1Ev),
  NSPAIR(_ZN9S20996C20D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
static Base_Class bases_S20996C20[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    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},
  {0}};
extern VTBL_ENTRY _ZTI9S20996C20[];
static  VTBL_ENTRY vtc_S20996C20[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C20[0]),
};
extern VTBL_ENTRY _ZTV9S20996C20[];
static  VTT_ENTRY vtt_S20996C20[] = {
  {&(_ZTV9S20996C20[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20996C20[];
extern  VTBL_ENTRY _ZTV9S20996C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C20[];
Class_Descriptor cd_S20996C20 = {  "S20996C20", // class name
  bases_S20996C20, 1,
  &(vtc_S20996C20[0]), // expected_vtbl_contents
  &(vtt_S20996C20[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI9S20996C20),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20996C20),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20996C20),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  S20996C21  : virtual S20996C13 {
  virtual  ~S20996C21(); // _ZN9S20996C21D2Ev
  S20996C21(); // tgen
};
//SIG(-1 S20996C21) C1{ VBC2{ BC3{ m} BC4{ BC5{ m FL Fc:0} BC3} vd FC6{}} vd}


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

static void Test_S20996C21()
{
  extern Class_Descriptor cd_S20996C21;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S20996C21, buf);
    S20996C21 *dp, &lv = *(dp=new (buf) S20996C21());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S20996C21)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20996C21)");
    /*is_ambiguous_... S20996C13::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C13*), ABISELECT(8,4), "S20996C21");
    check_base_class_offset(lv, (S20955C5*)(S20996C7*)(S20996C13*), ABISELECT(16,8), "S20996C21");
    check_base_class_offset(lv, (S2264C28*)(S20996C7*)(S20996C13*), ABISELECT(16,8), "S20996C21");
    check_base_class_offset(lv, (S20996C7*)(S20996C13*), ABISELECT(16,8), "S20996C21");
    check_base_class_offset(lv, (S20996C13*), ABISELECT(8,4), "S20996C21");
    test_class_info(&lv, &cd_S20996C21);
    dp->~S20996C21();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20996C21(Test_S20996C21, "S20996C21", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN9S20996C21C1Ev();
extern void _ZN9S20996C21D2Ev();
Name_Map name_map_S20996C21[] = {
  NSPAIR(_ZN9S20996C21C1Ev),
  NSPAIR(_ZN9S20996C21D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S20996C13;
extern VTBL_ENTRY _ZTI9S20996C13[];
extern  VTBL_ENTRY _ZTV9S20996C13[];
static Base_Class bases_S20996C21[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    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
    4, //immediately_derived
  0, 0},
  {&cd_S20955C5,    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_S2264C28,    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_S20996C7,    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, 0},
  {&cd_S20996C13,    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 _ZTI9S20996C21[];
extern void _ZN9S20996C21D1Ev();
extern void _ZN9S20996C21D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S20996C21D1Ev,_ZTv0_n12_N9S20996C21D1Ev)();
extern void ABISELECT(_ZThn8_N9S20996C21D1Ev,_ZThn4_N9S20996C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20996C21D0Ev,_ZTv0_n12_N9S20996C21D0Ev)();
extern void ABISELECT(_ZThn8_N9S20996C21D0Ev,_ZThn4_N9S20996C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20996C21[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C21[0]),
  (VTBL_ENTRY)&_ZN9S20996C21D1Ev,
  (VTBL_ENTRY)&_ZN9S20996C21D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20996C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20996C21D1Ev,_ZTv0_n12_N9S20996C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20996C21D0Ev,_ZTv0_n12_N9S20996C21D0Ev),
};
extern VTBL_ENTRY _ZTV9S20996C21[];
static  VTT_ENTRY vtt_S20996C21[] = {
  {&(_ZTV9S20996C21[3]),  3,10},
  {&(_ZTV9S20996C21[8]),  8,10},
};
extern VTBL_ENTRY _ZTI9S20996C21[];
extern  VTBL_ENTRY _ZTV9S20996C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C21[];
static VTBL_ENTRY alt_thunk_names153[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20996C21D0Ev,_ZTv0_n12_N9S20996C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20996C21D0Ev,_ZThn4_N9S20996C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20996C21D1Ev,_ZTv0_n12_N9S20996C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20996C21D1Ev,_ZThn4_N9S20996C21D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20996C21 = {  "S20996C21", // class name
  bases_S20996C21, 5,
  &(vtc_S20996C21[0]), // expected_vtbl_contents
  &(vtt_S20996C21[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI9S20996C21),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20996C21),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20996C21),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names153,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20996C15  : S20996C16 , S20996C20 , S20996C12 , S20996C3 , virtual S20996C21 {
  ::S3052C22_nt s20996c15f0;
  virtual  ~S20996C15(); // _ZN9S20996C15D2Ev
  S20996C15(); // tgen
};
//SIG(-1 S20996C15) C1{ BC2{ BC3{ VBC4{ BC5{ m FL Fc:0} BC6{ m}} BC7{ VBC8{ VBC9{ VBC4 VBC5 BC6} BC10{ BC6 BC4 vd FC11{}} Fi[8]} vd} vd FC8[2]} BC12{ BC4 BC13{ VBC6 BC5} VBC14{ VBC15{ m} BC4 VBC6 Fi} Fp} BC13} BC16{ VBC5} BC8 BC17{ VBC5 BC14 FL:1} VBC18{ VBC10 vd} vd FC11}


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

static void Test_S20996C15()
{
  extern Class_Descriptor cd_S20996C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(55,88)];
    init_test(&cd_S20996C15, buf);
    S20996C15 *dp, &lv = *(dp=new (buf) S20996C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(432,348), "sizeof(S20996C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20996C15)");
    /*is_ambiguous_... S20996C15::S20996C7 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C7*), ABISELECT(304,248), "S20996C15");
    /*is_ambiguous_... S20996C15::S20996C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C7*), ABISELECT(304,248), "S20996C15");
    /*is_ambiguous_... S20996C17::S20996C7 */ AMB_check_base_class_offset(lv, (S20996C7*)(S20996C17*)(S20996C16*), ABISELECT(304,248), "S20996C15");
    check_base_class_offset(lv, (S20996C7*)(S20996C10*), ABISELECT(304,248), "S20996C15");
    /*is_ambiguous_... S20996C10::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C10*), ABISELECT(368,304), "S20996C15");
    check_base_class_offset(lv, (S20955C5*)(S20996C20*), ABISELECT(368,304), "S20996C15");
    /*is_ambiguous_... S20996C3::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C3*), ABISELECT(368,304), "S20996C15");
    /*is_ambiguous_... S20996C10::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C10*), 0, "S20996C15");
    /*is_ambiguous_... S20996C15::S20996C12 */ AMB_check_base_class_offset(lv, (S20996C10*)(S20996C12*), 0, "S20996C15");
    /*is_ambiguous_... S20996C15::S20996C12 */ AMB_check_base_class_offset(lv, (S20996C10*)(S20996C12*), 0, "S20996C15");
    /*is_ambiguous_... S20996C15::S20996C12 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C13*)(S20996C12*), ABISELECT(312,256), "S20996C15");
    /*is_ambiguous_... S20996C15::S20996C12 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C7*)(S20996C13*)(S20996C12*), ABISELECT(320,260), "S20996C15");
    /*is_ambiguous_... S20996C15::S20996C12 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C7*)(S20996C13*)(S20996C12*), ABISELECT(320,260), "S20996C15");
    /*is_ambiguous_... S20996C15::S20996C12 */ AMB_check_base_class_offset(lv, (S20996C7*)(S20996C13*)(S20996C12*), ABISELECT(320,260), "S20996C15");
    /*is_ambiguous_... S20996C15::S20996C12 */ AMB_check_base_class_offset(lv, (S20996C13*)(S20996C12*), ABISELECT(312,256), "S20996C15");
    check_base_class_offset(lv, (S20996C12*)(S20996C11*)(S20996C17*)(S20996C16*), ABISELECT(312,256), "S20996C15");
    check_base_class_offset(lv, (S20996C11*)(S20996C17*)(S20996C16*), 0, "S20996C15");
    check_base_class_offset(lv, (S20996C17*)(S20996C16*), 0, "S20996C15");
    /*is_ambiguous_... S20996C18::S20996C7 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C7*)(S20996C18*)(S20996C16*), ABISELECT(184,152), "S20996C15");
    /*is_ambiguous_... S20996C18::S20996C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C7*)(S20996C18*)(S20996C16*), ABISELECT(184,152), "S20996C15");
    /*is_ambiguous_... S20996C18::S20996C7 */ AMB_check_base_class_offset(lv, (S20996C7*)(S20996C18*)(S20996C16*), ABISELECT(184,152), "S20996C15");
    check_base_class_offset(lv, (S2264C28*)(S20996C19*)(S20996C18*)(S20996C16*), ABISELECT(376,312), "S20996C15");
    /*is_ambiguous_... S20996C15::S20996C5 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C5*), ABISELECT(376,312), "S20996C15");
    /*is_ambiguous_... S20996C16::S20996C19 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C19*)(S20996C16*), ABISELECT(376,312), "S20996C15");
    /*is_ambiguous_... S20996C5::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C5*)(S20996C3*), ABISELECT(376,312), "S20996C15");
    check_base_class_offset(lv, (S20955C5*)(S20996C19*)(S20996C18*)(S20996C16*), ABISELECT(176,144), "S20996C15");
    check_base_class_offset(lv, (S20996C19*)(S20996C18*)(S20996C16*), ABISELECT(168,140), "S20996C15");
    /*is_ambiguous_... S20996C15::S20996C5 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20996C5*), 0, "S20996C15");
    check_base_class_offset(lv, (S2264C38*)(S20996C5*)(S20996C3*), 0, "S20996C15");
    /*is_ambiguous_... S20996C15::S20996C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C7*)(S20996C5*), ABISELECT(384,316), "S20996C15");
    /*is_ambiguous_... S20996C15::S20996C5 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C7*)(S20996C5*), ABISELECT(384,316), "S20996C15");
    /*is_ambiguous_... S20996C15::S20996C5 */ AMB_check_base_class_offset(lv, (S20996C7*)(S20996C5*), ABISELECT(384,316), "S20996C15");
    check_base_class_offset(lv, (S20996C5*)(S20996C18*)(S20996C16*), ABISELECT(376,312), "S20996C15");
    check_base_class_offset(lv, (S20996C18*)(S20996C16*), ABISELECT(168,140), "S20996C15");
    /*is_ambiguous_... S20996C16::S20996C19 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C19*)(S20996C16*), ABISELECT(208,168), "S20996C15");
    /*is_ambiguous_... S20996C16::S20996C19 */ AMB_check_base_class_offset(lv, (S20996C19*)(S20996C16*), ABISELECT(200,164), "S20996C15");
    check_base_class_offset(lv, (S20996C16*), 0, "S20996C15");
    check_base_class_offset(lv, (S20996C20*), ABISELECT(216,176), "S20996C15");
    /*is_ambiguous_... S20996C15::S20996C12 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C13*)(S20996C12*), ABISELECT(224,180), "S20996C15");
    /*is_ambiguous_... S20996C15::S20996C12 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C7*)(S20996C13*)(S20996C12*), ABISELECT(232,184), "S20996C15");
    /*is_ambiguous_... S20996C15::S20996C12 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C7*)(S20996C13*)(S20996C12*), ABISELECT(232,184), "S20996C15");
    /*is_ambiguous_... S20996C15::S20996C12 */ AMB_check_base_class_offset(lv, (S20996C7*)(S20996C13*)(S20996C12*), ABISELECT(232,184), "S20996C15");
    /*is_ambiguous_... S20996C15::S20996C12 */ AMB_check_base_class_offset(lv, (S20996C13*)(S20996C12*), ABISELECT(224,180), "S20996C15");
    /*is_ambiguous_... S20996C15::S20996C12 */ AMB_check_base_class_offset(lv, (S20996C12*), ABISELECT(224,180), "S20996C15");
    check_base_class_offset(lv, (S20955C5*)(S20996C7*)(S20996C5*)(S20996C3*), ABISELECT(288,232), "S20996C15");
    check_base_class_offset(lv, (S2264C28*)(S20996C7*)(S20996C5*)(S20996C3*), ABISELECT(288,232), "S20996C15");
    check_base_class_offset(lv, (S20996C7*)(S20996C5*)(S20996C3*), ABISELECT(288,232), "S20996C15");
    check_base_class_offset(lv, (S20996C5*)(S20996C3*), ABISELECT(280,228), "S20996C15");
    check_base_class_offset(lv, (S20996C3*), ABISELECT(280,228), "S20996C15");
    /*is_ambiguous_... S20996C15::S20996C13 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C13*), ABISELECT(408,332), "S20996C15");
    /*is_ambiguous_... S20996C15::S20996C13 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C7*)(S20996C13*), ABISELECT(416,336), "S20996C15");
    /*is_ambiguous_... S20996C15::S20996C13 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C7*)(S20996C13*), ABISELECT(416,336), "S20996C15");
    /*is_ambiguous_... S20996C15::S20996C13 */ AMB_check_base_class_offset(lv, (S20996C7*)(S20996C13*), ABISELECT(416,336), "S20996C15");
    check_base_class_offset(lv, (S20996C13*)(S20996C21*), ABISELECT(408,332), "S20996C15");
    check_base_class_offset(lv, (S20996C21*), ABISELECT(400,328), "S20996C15");
    check_field_offset(lv, s20996c15f0, ABISELECT(301,245), "S20996C15.s20996c15f0");
    test_class_info(&lv, &cd_S20996C15);
    dp->~S20996C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20996C15(Test_S20996C15, "S20996C15", ABISELECT(432,348));

#else // __cplusplus

extern void _ZN9S20996C15C1Ev();
extern void _ZN9S20996C15D2Ev();
Name_Map name_map_S20996C15[] = {
  NSPAIR(_ZN9S20996C15C1Ev),
  NSPAIR(_ZN9S20996C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C10;
extern VTBL_ENTRY _ZTI9S20996C10[];
extern  VTBL_ENTRY _ZTV9S20996C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C10[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S20996C13;
extern VTBL_ENTRY _ZTI9S20996C13[];
extern  VTBL_ENTRY _ZTV9S20996C13[];
extern Class_Descriptor cd_S20996C12;
extern VTBL_ENTRY _ZTI9S20996C12[];
extern  VTBL_ENTRY _ZTV9S20996C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C12[];
extern Class_Descriptor cd_S20996C11;
extern VTBL_ENTRY _ZTI9S20996C11[];
extern  VTBL_ENTRY _ZTV9S20996C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C11[];
extern Class_Descriptor cd_S20996C17;
extern VTBL_ENTRY _ZTI9S20996C17[];
extern  VTBL_ENTRY _ZTV9S20996C17[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C17[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20996C19;
extern VTBL_ENTRY _ZTI9S20996C19[];
extern  VTBL_ENTRY _ZTV9S20996C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C19[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S20996C5;
extern VTBL_ENTRY _ZTI8S20996C5[];
extern  VTBL_ENTRY _ZTV8S20996C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20996C5[];
extern Class_Descriptor cd_S20996C18;
extern VTBL_ENTRY _ZTI9S20996C18[];
extern  VTBL_ENTRY _ZTV9S20996C18[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C18[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20996C19;
extern VTBL_ENTRY _ZTI9S20996C19[];
extern  VTBL_ENTRY _ZTV9S20996C19[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C19[];
extern Class_Descriptor cd_S20996C16;
extern VTBL_ENTRY _ZTI9S20996C16[];
extern  VTBL_ENTRY _ZTV9S20996C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C16[];
extern Class_Descriptor cd_S20996C20;
extern VTBL_ENTRY _ZTI9S20996C20[];
extern  VTBL_ENTRY _ZTV9S20996C20[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C20[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S20996C13;
extern VTBL_ENTRY _ZTI9S20996C13[];
extern  VTBL_ENTRY _ZTV9S20996C13[];
extern Class_Descriptor cd_S20996C12;
extern VTBL_ENTRY _ZTI9S20996C12[];
extern  VTBL_ENTRY _ZTV9S20996C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C12[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S20996C5;
extern VTBL_ENTRY _ZTI8S20996C5[];
extern  VTBL_ENTRY _ZTV8S20996C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20996C5[];
extern Class_Descriptor cd_S20996C3;
extern VTBL_ENTRY _ZTI8S20996C3[];
extern  VTBL_ENTRY _ZTV8S20996C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20996C3[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S20996C13;
extern VTBL_ENTRY _ZTI9S20996C13[];
extern  VTBL_ENTRY _ZTV9S20996C13[];
extern Class_Descriptor cd_S20996C21;
extern VTBL_ENTRY _ZTI9S20996C21[];
extern  VTBL_ENTRY _ZTV9S20996C21[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C21[];
static Base_Class bases_S20996C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(304,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    ABISELECT(304,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20996C7,    ABISELECT(304,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    ABISELECT(368,304), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20996C10,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(312,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    ABISELECT(320,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    ABISELECT(320,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20996C7,    ABISELECT(320,260), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20996C13,    ABISELECT(312,256), //bcp->offset
    -1, //bcp->virtual_function_table_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
    11, //immediately_derived
  0, 0},
  {&cd_S20996C12,    ABISELECT(312,256), //bcp->offset
    36, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20996C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20996C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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
    28, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(184,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
    16, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(184,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
    16, //immediately_derived
  0, 0},
  {&cd_S20996C7,    ABISELECT(184,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
    25, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(376,312), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    ABISELECT(176,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
    19, //immediately_derived
  0, 0},
  {&cd_S20996C19,    ABISELECT(168,140), //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
    9, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20955C5,    ABISELECT(384,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    ABISELECT(384,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20996C7,    ABISELECT(384,316), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20996C5,    ABISELECT(376,312), //bcp->offset
    44, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S20996C18,    ABISELECT(168,140), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(208,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
    27, //immediately_derived
  0, 0},
  {&cd_S20996C19,    ABISELECT(200,164), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20996C16,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20996C20,    ABISELECT(216,176), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C28,    ABISELECT(224,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
    34, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(232,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
    33, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(232,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
    33, //immediately_derived
  0, 0},
  {&cd_S20996C7,    ABISELECT(232,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
    34, //immediately_derived
  0, 0},
  {&cd_S20996C13,    ABISELECT(224,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
    14, //init_seq
    35, //immediately_derived
  0, 0},
  {&cd_S20996C12,    ABISELECT(224,180), //bcp->offset
    24, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20955C5,    ABISELECT(288,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
    38, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(288,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
    38, //immediately_derived
  0, 0},
  {&cd_S20996C7,    ABISELECT(288,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
    39, //immediately_derived
  0, 0},
  {&cd_S20996C5,    ABISELECT(280,228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    40, //immediately_derived
  0, 0},
  {&cd_S20996C3,    ABISELECT(280,228), //bcp->offset
    31, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C28,    ABISELECT(408,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
    45, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(416,336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(416,336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S20996C7,    ABISELECT(416,336), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    45, //immediately_derived
  0, 0},
  {&cd_S20996C13,    ABISELECT(408,332), //bcp->offset
    54, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    46, //immediately_derived
  0, 1},
  {&cd_S20996C21,    ABISELECT(400,328), //bcp->offset
    48, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20996C15[];
extern void _ZN9S20996C15D1Ev();
extern void _ZN9S20996C15D0Ev();
extern void ABISELECT(_ZThn224_N9S20996C15D1Ev,_ZThn180_N9S20996C15D1Ev)();
extern void ABISELECT(_ZThn224_N9S20996C15D0Ev,_ZThn180_N9S20996C15D0Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20996C15D1Ev,_ZTv0_n24_N9S20996C15D1Ev)();
extern void ABISELECT(_ZThn312_N9S20996C15D1Ev,_ZThn256_N9S20996C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20996C15D0Ev,_ZTv0_n24_N9S20996C15D0Ev)();
extern void ABISELECT(_ZThn312_N9S20996C15D0Ev,_ZThn256_N9S20996C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20996C15D1Ev,_ZTv0_n16_N9S20996C15D1Ev)();
extern void ABISELECT(_ZThn400_N9S20996C15D1Ev,_ZThn328_N9S20996C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N9S20996C15D0Ev,_ZTv0_n16_N9S20996C15D0Ev)();
extern void ABISELECT(_ZThn400_N9S20996C15D0Ev,_ZThn328_N9S20996C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20996C15D1Ev,_ZTv0_n12_N9S20996C15D1Ev)();
extern void ABISELECT(_ZThn408_N9S20996C15D1Ev,_ZThn332_N9S20996C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20996C15D0Ev,_ZTv0_n12_N9S20996C15D0Ev)();
extern void ABISELECT(_ZThn408_N9S20996C15D0Ev,_ZThn332_N9S20996C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20996C15[] = {
  ABISELECT(408,332),
  ABISELECT(400,328),
  0,
  ABISELECT(376,312),
  ABISELECT(376,312),
  0,
  ABISELECT(312,256),
  ABISELECT(368,304),
  ABISELECT(304,248),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C15[0]),
  (VTBL_ENTRY)&_ZN9S20996C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20996C15D0Ev,
  ABISELECT(-168,-140),
  ABISELECT(208,172),
  ABISELECT(208,172),
  ABISELECT(-168,-140),
  (VTBL_ENTRY)&(_ZTI9S20996C15[0]),
  ABISELECT(176,148),
  ABISELECT(-200,-164),
  (VTBL_ENTRY)&(_ZTI9S20996C15[0]),
  ABISELECT(152,128),
  ABISELECT(-216,-176),
  (VTBL_ENTRY)&(_ZTI9S20996C15[0]),
  ABISELECT(144,124),
  ABISELECT(80,68),
  ABISELECT(-224,-180),
  ABISELECT(-224,-180),
  (VTBL_ENTRY)&(_ZTI9S20996C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N9S20996C15D1Ev,_ZThn180_N9S20996C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn224_N9S20996C15D0Ev,_ZThn180_N9S20996C15D0Ev),
  ABISELECT(88,76),
  ABISELECT(96,84),
  ABISELECT(-280,-228),
  ABISELECT(-280,-228),
  (VTBL_ENTRY)&(_ZTI9S20996C15[0]),
  ABISELECT(-312,-256),
  ABISELECT(56,48),
  -8,
  ABISELECT(-312,-256),
  ABISELECT(-312,-256),
  (VTBL_ENTRY)&(_ZTI9S20996C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20996C15D1Ev,_ZTv0_n24_N9S20996C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20996C15D0Ev,_ZTv0_n24_N9S20996C15D0Ev),
  0,
  ABISELECT(-376,-312),
  ABISELECT(-376,-312),
  (VTBL_ENTRY)&(_ZTI9S20996C15[0]),
  ABISELECT(-400,-328),
  ABISELECT(8,4),
  ABISELECT(-400,-328),
  (VTBL_ENTRY)&(_ZTI9S20996C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20996C15D1Ev,_ZTv0_n16_N9S20996C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N9S20996C15D0Ev,_ZTv0_n16_N9S20996C15D0Ev),
  ABISELECT(-408,-332),
  ABISELECT(-408,-332),
  (VTBL_ENTRY)&(_ZTI9S20996C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20996C15D1Ev,_ZTv0_n12_N9S20996C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20996C15D0Ev,_ZTv0_n12_N9S20996C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S20996C15[];
extern void _ZN9S20996C16D1Ev();
extern void _ZN9S20996C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20996C16__9S20996C15[] = {
  0,
  ABISELECT(376,312),
  ABISELECT(376,312),
  0,
  ABISELECT(312,256),
  ABISELECT(368,304),
  ABISELECT(304,248),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C16[0]),
  (VTBL_ENTRY)&_ZN9S20996C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20996C16D0Ev,
};
extern void _ZN9S20996C17D1Ev();
extern void _ZN9S20996C17D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20996C179S20996C16__9S20996C15[] = {
  0,
  ABISELECT(312,256),
  ABISELECT(368,304),
  ABISELECT(304,248),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C17[0]),
  (VTBL_ENTRY)&_ZN9S20996C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20996C17D0Ev,
};
extern void _ZN9S20996C11D1Ev();
extern void _ZN9S20996C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20996C119S20996C179S20996C16__9S20996C15[] = {
  0,
  ABISELECT(312,256),
  ABISELECT(368,304),
  ABISELECT(304,248),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C11[0]),
  (VTBL_ENTRY)&_ZN9S20996C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20996C11D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20996C11D1Ev,_ZTv0_n24_N9S20996C11D1Ev)();
extern void ABISELECT(_ZThn312_N9S20996C11D1Ev,_ZThn256_N9S20996C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20996C11D0Ev,_ZTv0_n24_N9S20996C11D0Ev)();
extern void ABISELECT(_ZThn312_N9S20996C11D0Ev,_ZThn256_N9S20996C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20996C12__9S20996C119S20996C179S20996C16__9S20996C15[] = {
  ABISELECT(-312,-256),
  ABISELECT(56,48),
  -8,
  ABISELECT(-312,-256),
  ABISELECT(-312,-256),
  (VTBL_ENTRY)&(_ZTI9S20996C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20996C11D1Ev,_ZTv0_n24_N9S20996C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20996C11D0Ev,_ZTv0_n24_N9S20996C11D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20996C17D1Ev,_ZTv0_n24_N9S20996C17D1Ev)();
extern void ABISELECT(_ZThn312_N9S20996C17D1Ev,_ZThn256_N9S20996C17D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20996C17D0Ev,_ZTv0_n24_N9S20996C17D0Ev)();
extern void ABISELECT(_ZThn312_N9S20996C17D0Ev,_ZThn256_N9S20996C17D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20996C12__9S20996C179S20996C16__9S20996C15[] = {
  ABISELECT(-312,-256),
  ABISELECT(56,48),
  -8,
  ABISELECT(-312,-256),
  ABISELECT(-312,-256),
  (VTBL_ENTRY)&(_ZTI9S20996C17[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20996C17D1Ev,_ZTv0_n24_N9S20996C17D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20996C17D0Ev,_ZTv0_n24_N9S20996C17D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20996C189S20996C16__9S20996C15[] = {
  ABISELECT(-168,-140),
  ABISELECT(208,172),
  ABISELECT(208,172),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C18[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20996C199S20996C189S20996C16__9S20996C15[] = {
  ABISELECT(208,172),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C19[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20996C5__9S20996C189S20996C16__9S20996C15[] = {
  0,
  ABISELECT(-376,-312),
  ABISELECT(-208,-172),
  (VTBL_ENTRY)&(_ZTI9S20996C18[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20996C199S20996C16__A1__9S20996C15[] = {
  ABISELECT(176,148),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C19[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20996C16D1Ev,_ZTv0_n24_N9S20996C16D1Ev)();
extern void ABISELECT(_ZThn312_N9S20996C16D1Ev,_ZThn256_N9S20996C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20996C16D0Ev,_ZTv0_n24_N9S20996C16D0Ev)();
extern void ABISELECT(_ZThn312_N9S20996C16D0Ev,_ZThn256_N9S20996C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20996C12__9S20996C16__9S20996C15[] = {
  ABISELECT(-312,-256),
  ABISELECT(56,48),
  -8,
  ABISELECT(-312,-256),
  ABISELECT(-312,-256),
  (VTBL_ENTRY)&(_ZTI9S20996C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20996C16D1Ev,_ZTv0_n24_N9S20996C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20996C16D0Ev,_ZTv0_n24_N9S20996C16D0Ev),
};
static  VTBL_ENTRY _tg__ZTV9S20996C18__9S20996C16__9S20996C15[] = {
  ABISELECT(-168,-140),
  ABISELECT(208,172),
  ABISELECT(208,172),
  ABISELECT(-168,-140),
  (VTBL_ENTRY)&(_ZTI9S20996C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20996C5__9S20996C16__9S20996C15[] = {
  0,
  ABISELECT(-376,-312),
  ABISELECT(-376,-312),
  (VTBL_ENTRY)&(_ZTI9S20996C16[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20996C19__A1__9S20996C16__9S20996C15[] = {
  ABISELECT(176,148),
  ABISELECT(-200,-164),
  (VTBL_ENTRY)&(_ZTI9S20996C16[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20996C20__9S20996C15[] = {
  ABISELECT(152,128),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C20[0]),
};
extern void _ZN9S20996C12D1Ev();
extern void _ZN9S20996C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20996C12__A__9S20996C15[] = {
  ABISELECT(144,124),
  ABISELECT(80,68),
  ABISELECT(-224,-180),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C12[0]),
  (VTBL_ENTRY)&_ZN9S20996C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20996C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20996C10__9S20996C12__A__9S20996C15[] = {
  ABISELECT(368,304),
  ABISELECT(304,248),
  ABISELECT(224,180),
  (VTBL_ENTRY)&(_ZTI9S20996C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20996C3__9S20996C15[] = {
  ABISELECT(88,76),
  ABISELECT(96,84),
  ABISELECT(-280,-228),
  0,
  (VTBL_ENTRY)&(_ZTI8S20996C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20996C58S20996C3__A1__9S20996C15[] = {
  ABISELECT(96,84),
  ABISELECT(-280,-228),
  0,
  (VTBL_ENTRY)&(_ZTI8S20996C5[0]),
};
extern void _ZN9S20996C12D1Ev();
extern void _ZN9S20996C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20996C12__9S20996C15[] = {
  ABISELECT(56,48),
  -8,
  ABISELECT(-312,-256),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C12[0]),
  (VTBL_ENTRY)&_ZN9S20996C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20996C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20996C10__9S20996C12__9S20996C15[] = {
  ABISELECT(368,304),
  ABISELECT(304,248),
  ABISELECT(312,256),
  (VTBL_ENTRY)&(_ZTI9S20996C12[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20996C10__9S20996C15[] = {
  ABISELECT(368,304),
  ABISELECT(304,248),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20996C5__9S20996C15[] = {
  0,
  ABISELECT(-376,-312),
  0,
  (VTBL_ENTRY)&(_ZTI8S20996C5[0]),
};
extern void _ZN9S20996C21D1Ev();
extern void _ZN9S20996C21D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20996C21__9S20996C15[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C21[0]),
  (VTBL_ENTRY)&_ZN9S20996C21D1Ev,
  (VTBL_ENTRY)&_ZN9S20996C21D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20996C21D1Ev,_ZTv0_n12_N9S20996C21D1Ev)();
extern void ABISELECT(_ZThn8_N9S20996C21D1Ev,_ZThn4_N9S20996C21D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20996C21D0Ev,_ZTv0_n12_N9S20996C21D0Ev)();
extern void ABISELECT(_ZThn8_N9S20996C21D0Ev,_ZThn4_N9S20996C21D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20996C13__9S20996C21__9S20996C15[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20996C21[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20996C21D1Ev,_ZTv0_n12_N9S20996C21D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20996C21D0Ev,_ZTv0_n12_N9S20996C21D0Ev),
};
static  VTT_ENTRY vtt_S20996C15[] = {
  {&(_ZTV9S20996C15[11]),  11,59},
  {&(_tg__ZTV9S20996C16__9S20996C15[9]),  9,11},
  {&(_tg__ZTV9S20996C179S20996C16__9S20996C15[6]),  6,8},
  {&(_tg__ZTV9S20996C119S20996C179S20996C16__9S20996C15[6]),  6,8},
  {&(_tg__ZTV9S20996C12__9S20996C119S20996C179S20996C16__9S20996C15[6]),  6,8},
  {&(_tg__ZTV9S20996C119S20996C179S20996C16__9S20996C15[6]),  6,8},
  {&(_tg__ZTV9S20996C12__9S20996C179S20996C16__9S20996C15[6]),  6,8},
  {&(_tg__ZTV9S20996C179S20996C16__9S20996C15[6]),  6,8},
  {&(_tg__ZTV9S20996C189S20996C16__9S20996C15[5]),  5,5},
  {&(_tg__ZTV9S20996C199S20996C189S20996C16__9S20996C15[3]),  3,3},
  {&(_tg__ZTV8S20996C5__9S20996C189S20996C16__9S20996C15[4]),  4,4},
  {&(_tg__ZTV9S20996C199S20996C16__A1__9S20996C15[3]),  3,3},
  {&(_tg__ZTV9S20996C12__9S20996C16__9S20996C15[6]),  6,8},
  {&(_tg__ZTV9S20996C16__9S20996C15[9]),  9,11},
  {&(_tg__ZTV9S20996C18__9S20996C16__9S20996C15[5]),  5,5},
  {&(_tg__ZTV8S20996C5__9S20996C16__9S20996C15[4]),  4,4},
  {&(_tg__ZTV9S20996C19__A1__9S20996C16__9S20996C15[3]),  3,3},
  {&(_tg__ZTV9S20996C20__9S20996C15[3]),  3,3},
  {&(_tg__ZTV9S20996C12__A__9S20996C15[5]),  5,7},
  {&(_tg__ZTV9S20996C10__9S20996C12__A__9S20996C15[4]),  4,4},
  {&(_tg__ZTV8S20996C3__9S20996C15[5]),  5,5},
  {&(_tg__ZTV8S20996C58S20996C3__A1__9S20996C15[4]),  4,4},
  {&(_ZTV9S20996C15[42]),  42,59},
  {&(_ZTV9S20996C15[11]),  11,59},
  {&(_ZTV9S20996C15[18]),  18,59},
  {&(_ZTV9S20996C15[48]),  48,59},
  {&(_ZTV9S20996C15[21]),  21,59},
  {&(_ZTV9S20996C15[24]),  24,59},
  {&(_ZTV9S20996C15[29]),  29,59},
  {&(_ZTV9S20996C15[36]),  36,59},
  {&(_ZTV9S20996C15[52]),  52,59},
  {&(_ZTV9S20996C15[57]),  57,59},
  {&(_tg__ZTV9S20996C12__9S20996C15[5]),  5,7},
  {&(_tg__ZTV9S20996C10__9S20996C12__9S20996C15[4]),  4,4},
  {&(_tg__ZTV9S20996C10__9S20996C15[4]),  4,4},
  {&(_tg__ZTV8S20996C5__9S20996C15[4]),  4,4},
  {&(_tg__ZTV9S20996C21__9S20996C15[3]),  3,5},
  {&(_tg__ZTV9S20996C13__9S20996C21__9S20996C15[3]),  3,5},
};
extern VTBL_ENTRY _ZTI9S20996C15[];
extern  VTBL_ENTRY _ZTV9S20996C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C15[];
static VTBL_ENTRY alt_thunk_names154[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20996C21D0Ev,_ZTv0_n12_N9S20996C21D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20996C21D0Ev,_ZThn4_N9S20996C21D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20996C21D1Ev,_ZTv0_n12_N9S20996C21D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20996C21D1Ev,_ZThn4_N9S20996C21D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20996C16D0Ev,_ZTv0_n24_N9S20996C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N9S20996C16D0Ev,_ZThn256_N9S20996C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20996C16D1Ev,_ZTv0_n24_N9S20996C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N9S20996C16D1Ev,_ZThn256_N9S20996C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20996C17D0Ev,_ZTv0_n24_N9S20996C17D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N9S20996C17D0Ev,_ZThn256_N9S20996C17D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20996C17D1Ev,_ZTv0_n24_N9S20996C17D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N9S20996C17D1Ev,_ZThn256_N9S20996C17D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20996C11D0Ev,_ZTv0_n24_N9S20996C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N9S20996C11D0Ev,_ZThn256_N9S20996C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20996C11D1Ev,_ZTv0_n24_N9S20996C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N9S20996C11D1Ev,_ZThn256_N9S20996C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20996C15D0Ev,_ZTv0_n12_N9S20996C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N9S20996C15D0Ev,_ZThn332_N9S20996C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20996C15D1Ev,_ZTv0_n12_N9S20996C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn408_N9S20996C15D1Ev,_ZThn332_N9S20996C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20996C15D0Ev,_ZTv0_n16_N9S20996C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N9S20996C15D0Ev,_ZThn328_N9S20996C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N9S20996C15D1Ev,_ZTv0_n16_N9S20996C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N9S20996C15D1Ev,_ZThn328_N9S20996C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20996C15D0Ev,_ZTv0_n24_N9S20996C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N9S20996C15D0Ev,_ZThn256_N9S20996C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20996C15D1Ev,_ZTv0_n24_N9S20996C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N9S20996C15D1Ev,_ZThn256_N9S20996C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20996C15 = {  "S20996C15", // class name
  bases_S20996C15, 47,
  &(vtc_S20996C15[0]), // expected_vtbl_contents
  &(vtt_S20996C15[0]), // expected_vtt_contents
  ABISELECT(432,348), // object size
  NSPAIRA(_ZTI9S20996C15),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20996C15),59, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20996C15),38, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names154,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20996C1  : virtual S20996C2 , S20996C3 , S20996C9 {
  ::S20996C15 s20996c1f0;
  ::S3052C22_nt s20996c1f1;
  ~S20996C1(); // tgen
  S20996C1(); // tgen
};
//SIG(1 S20996C1) C1{ VBC2{ VBC3{ VBC4{ m FL Fc:0} BC5{ VBC6{ m} BC7{ BC4 BC8{ m}} VBC8 Fi} FL:1} vd} BC3 BC9{ VBC10{ VBC7 VBC4 BC8} VBC11{ VBC12{ VBC10 BC13{ BC8 BC7 vd FC14{}} Fi[8]} vd} VBC3 BC5 vd} FC15{ BC16{ BC17{ VBC7 BC11 vd FC12[2]} BC18{ BC7 BC19{ VBC8 BC4} VBC5 Fp} BC19} BC20{ VBC4} BC12 BC3 VBC21{ VBC13 vd} vd FC14} FC14}


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

static void Test_S20996C1()
{
  extern Class_Descriptor cd_S20996C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(76,121)];
    init_test(&cd_S20996C1, buf);
    S20996C1 *dp, &lv = *(dp=new (buf) S20996C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(600,480), "sizeof(S20996C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20996C1)");
    /*is_ambiguous_... S20996C1::S20996C3 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C3*), ABISELECT(520,412), "S20996C1");
    /*is_ambiguous_... S20996C1::S20996C3 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C3*), ABISELECT(520,412), "S20996C1");
    /*is_ambiguous_... S20996C10::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C10*), ABISELECT(520,412), "S20996C1");
    /*is_ambiguous_... S20996C1::S20996C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20996C5*)(S20996C3*), 0, "S20996C1");
    /*is_ambiguous_... S20996C1::S20996C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20996C5*)(S20996C3*), 0, "S20996C1");
    /*is_ambiguous_... S20996C9::S20996C5 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20996C5*)(S20996C9*), 0, "S20996C1");
    /*is_ambiguous_... S20996C1::S20996C3 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C7*)(S20996C5*)(S20996C3*), ABISELECT(504,396), "S20996C1");
    /*is_ambiguous_... S20996C1::S20996C3 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C7*)(S20996C5*)(S20996C3*), ABISELECT(504,396), "S20996C1");
    /*is_ambiguous_... S20996C1::S20996C3 */ AMB_check_base_class_offset(lv, (S20996C7*)(S20996C5*)(S20996C3*), ABISELECT(504,396), "S20996C1");
    /*is_ambiguous_... S20996C1::S20996C3 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C5*)(S20996C3*), 0, "S20996C1");
    /*is_ambiguous_... S20996C1::S20996C3 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C5*)(S20996C3*), 0, "S20996C1");
    /*is_ambiguous_... S20996C9::S20996C5 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C5*)(S20996C9*), 0, "S20996C1");
    /*is_ambiguous_... S20996C1::S20996C3 */ AMB_check_base_class_offset(lv, (S20996C5*)(S20996C3*), ABISELECT(496,392), "S20996C1");
    check_base_class_offset(lv, (S20996C3*)(S20996C2*), ABISELECT(496,392), "S20996C1");
    check_base_class_offset(lv, (S20996C3*)(S20996C9*), ABISELECT(496,392), "S20996C1");
    check_base_class_offset(lv, (S20996C2*), ABISELECT(488,388), "S20996C1");
    /*is_ambiguous_... S20996C1::S20996C3 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C7*)(S20996C5*)(S20996C3*), ABISELECT(8,4), "S20996C1");
    /*is_ambiguous_... S20996C1::S20996C3 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C7*)(S20996C5*)(S20996C3*), ABISELECT(8,4), "S20996C1");
    /*is_ambiguous_... S20996C1::S20996C3 */ AMB_check_base_class_offset(lv, (S20996C7*)(S20996C5*)(S20996C3*), ABISELECT(8,4), "S20996C1");
    /*is_ambiguous_... S20996C1::S20996C3 */ AMB_check_base_class_offset(lv, (S20996C5*)(S20996C3*), 0, "S20996C1");
    /*is_ambiguous_... S20996C1::S20996C3 */ AMB_check_base_class_offset(lv, (S20996C3*), 0, "S20996C1");
    /*is_ambiguous_... S20996C1::S20996C7 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C7*), ABISELECT(528,420), "S20996C1");
    /*is_ambiguous_... S20996C1::S20996C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C7*), ABISELECT(528,420), "S20996C1");
    check_base_class_offset(lv, (S20996C7*)(S20996C10*), ABISELECT(528,420), "S20996C1");
    /*is_ambiguous_... S20996C10::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C10*), ABISELECT(536,428), "S20996C1");
    check_base_class_offset(lv, (S20996C10*)(S20996C9*), ABISELECT(536,428), "S20996C1");
    check_base_class_offset(lv, (S20996C10*)(S20996C12*), ABISELECT(536,428), "S20996C1");
    /*is_ambiguous_... S20996C13::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C13*)(S20996C12*), ABISELECT(544,432), "S20996C1");
    check_base_class_offset(lv, (S20955C5*)(S20996C7*)(S20996C13*)(S20996C12*), ABISELECT(552,436), "S20996C1");
    check_base_class_offset(lv, (S2264C28*)(S20996C7*)(S20996C13*)(S20996C12*), ABISELECT(552,436), "S20996C1");
    check_base_class_offset(lv, (S20996C7*)(S20996C13*)(S20996C12*), ABISELECT(552,436), "S20996C1");
    check_base_class_offset(lv, (S20996C13*)(S20996C12*), ABISELECT(544,432), "S20996C1");
    check_base_class_offset(lv, (S20996C12*)(S20996C11*), ABISELECT(544,432), "S20996C1");
    check_base_class_offset(lv, (S20996C11*)(S20996C9*), ABISELECT(536,428), "S20996C1");
    /*is_ambiguous_... S20996C9::S20996C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20996C7*)(S20996C5*)(S20996C9*), ABISELECT(32,24), "S20996C1");
    /*is_ambiguous_... S20996C9::S20996C5 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20996C7*)(S20996C5*)(S20996C9*), ABISELECT(32,24), "S20996C1");
    /*is_ambiguous_... S20996C9::S20996C5 */ AMB_check_base_class_offset(lv, (S20996C7*)(S20996C5*)(S20996C9*), ABISELECT(32,24), "S20996C1");
    /*is_ambiguous_... S20996C9::S20996C5 */ AMB_check_base_class_offset(lv, (S20996C5*)(S20996C9*), ABISELECT(24,20), "S20996C1");
    check_base_class_offset(lv, (S20996C9*), ABISELECT(24,20), "S20996C1");
    check_field_offset(lv, s20996c1f0, ABISELECT(48,36), "S20996C1.s20996c1f0");
    check_field_offset(lv, s20996c1f1, ABISELECT(480,384), "S20996C1.s20996c1f1");
    test_class_info(&lv, &cd_S20996C1);
    dp->~S20996C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20996C1(Test_S20996C1, "S20996C1", ABISELECT(600,480));

#else // __cplusplus

extern void _ZN8S20996C1C1Ev();
extern void _ZN8S20996C1D1Ev();
Name_Map name_map_S20996C1[] = {
  NSPAIR(_ZN8S20996C1C1Ev),
  NSPAIR(_ZN8S20996C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C5;
extern VTBL_ENTRY _ZTI8S20996C5[];
extern  VTBL_ENTRY _ZTV8S20996C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20996C5[];
extern Class_Descriptor cd_S20996C3;
extern VTBL_ENTRY _ZTI8S20996C3[];
extern  VTBL_ENTRY _ZTV8S20996C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20996C3[];
extern Class_Descriptor cd_S20996C2;
extern VTBL_ENTRY _ZTI8S20996C2[];
extern  VTBL_ENTRY _ZTV8S20996C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20996C2[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S20996C5;
extern VTBL_ENTRY _ZTI8S20996C5[];
extern  VTBL_ENTRY _ZTV8S20996C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20996C5[];
extern Class_Descriptor cd_S20996C3;
extern VTBL_ENTRY _ZTI8S20996C3[];
extern  VTBL_ENTRY _ZTV8S20996C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20996C3[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C10;
extern VTBL_ENTRY _ZTI9S20996C10[];
extern  VTBL_ENTRY _ZTV9S20996C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C10[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S20996C13;
extern VTBL_ENTRY _ZTI9S20996C13[];
extern  VTBL_ENTRY _ZTV9S20996C13[];
extern Class_Descriptor cd_S20996C12;
extern VTBL_ENTRY _ZTI9S20996C12[];
extern  VTBL_ENTRY _ZTV9S20996C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C12[];
extern Class_Descriptor cd_S20996C11;
extern VTBL_ENTRY _ZTI9S20996C11[];
extern  VTBL_ENTRY _ZTV9S20996C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20996C11[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20996C7;
extern VTBL_ENTRY _ZTI8S20996C7[];
extern Class_Descriptor cd_S20996C5;
extern VTBL_ENTRY _ZTI8S20996C5[];
extern  VTBL_ENTRY _ZTV8S20996C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20996C5[];
extern Class_Descriptor cd_S20996C9;
extern VTBL_ENTRY _ZTI8S20996C9[];
extern  VTBL_ENTRY _ZTV8S20996C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20996C9[];
static Base_Class bases_S20996C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(520,412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20955C5,    ABISELECT(504,396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    ABISELECT(504,396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20996C7,    ABISELECT(504,396), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20996C5,    ABISELECT(496,392), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20996C3,    ABISELECT(496,392), //bcp->offset
    34, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    8, //immediately_derived
  0, 1},
  {&cd_S20996C2,    ABISELECT(488,388), //bcp->offset
    25, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20955C5,    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_S2264C28,    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_S20996C7,    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
    12, //immediately_derived
  0, 0},
  {&cd_S20996C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    13, //immediately_derived
  0, 0},
  {&cd_S20996C3,    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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20955C5,    ABISELECT(528,420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    ABISELECT(528,420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20996C7,    ABISELECT(528,420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S2264C28,    ABISELECT(536,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20996C10,    ABISELECT(536,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(544,432), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    ABISELECT(552,436), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    ABISELECT(552,436), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20996C7,    ABISELECT(552,436), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20996C13,    ABISELECT(544,432), //bcp->offset
    -1, //bcp->virtual_function_table_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
    24, //immediately_derived
  0, 0},
  {&cd_S20996C12,    ABISELECT(544,432), //bcp->offset
    48, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    25, //immediately_derived
  0, 1},
  {&cd_S20996C11,    ABISELECT(536,428), //bcp->offset
    39, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    30, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(32,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
    28, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(32,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
    28, //immediately_derived
  0, 0},
  {&cd_S20996C7,    ABISELECT(32,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
    29, //immediately_derived
  0, 0},
  {&cd_S20996C5,    ABISELECT(24,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S20996C9,    ABISELECT(24,20), //bcp->offset
    13, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20996C1[];
extern void _ZN8S20996C1D1Ev();
extern void _ZN8S20996C1D0Ev();
extern void ABISELECT(_ZThn24_N8S20996C1D1Ev,_ZThn20_N8S20996C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S20996C1D0Ev,_ZThn20_N8S20996C1D0Ev)();
extern void ABISELECT(_ZTv0_n56_N8S20996C1D1Ev,_ZTv0_n28_N8S20996C1D1Ev)();
extern void ABISELECT(_ZThn488_N8S20996C1D1Ev,_ZThn388_N8S20996C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20996C1D0Ev,_ZTv0_n28_N8S20996C1D0Ev)();
extern void ABISELECT(_ZThn488_N8S20996C1D0Ev,_ZThn388_N8S20996C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20996C1D1Ev,_ZTv0_n28_N8S20996C1D1Ev)();
extern void ABISELECT(_ZThn536_N8S20996C1D1Ev,_ZThn428_N8S20996C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20996C1D0Ev,_ZTv0_n28_N8S20996C1D0Ev)();
extern void ABISELECT(_ZThn536_N8S20996C1D0Ev,_ZThn428_N8S20996C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20996C1D1Ev,_ZTv0_n24_N8S20996C1D1Ev)();
extern void ABISELECT(_ZThn544_N8S20996C1D1Ev,_ZThn432_N8S20996C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20996C1D0Ev,_ZTv0_n24_N8S20996C1D0Ev)();
extern void ABISELECT(_ZThn544_N8S20996C1D0Ev,_ZThn432_N8S20996C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20996C1[] = {
  ABISELECT(544,432),
  ABISELECT(536,428),
  ABISELECT(528,420),
  ABISELECT(536,428),
  ABISELECT(496,392),
  ABISELECT(488,388),
  ABISELECT(520,412),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20996C1[0]),
  (VTBL_ENTRY)&_ZN8S20996C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20996C1D0Ev,
  ABISELECT(472,372),
  ABISELECT(520,412),
  ABISELECT(512,408),
  ABISELECT(496,392),
  ABISELECT(504,400),
  ABISELECT(512,408),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  (VTBL_ENTRY)&(_ZTI8S20996C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S20996C1D1Ev,_ZThn20_N8S20996C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S20996C1D0Ev,_ZThn20_N8S20996C1D0Ev),
  ABISELECT(-488,-388),
  ABISELECT(-488,-388),
  ABISELECT(-488,-388),
  ABISELECT(32,24),
  ABISELECT(8,4),
  ABISELECT(-488,-388),
  (VTBL_ENTRY)&(_ZTI8S20996C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20996C1D1Ev,_ZTv0_n28_N8S20996C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20996C1D0Ev,_ZTv0_n28_N8S20996C1D0Ev),
  ABISELECT(24,20),
  ABISELECT(-496,-392),
  ABISELECT(-496,-392),
  ABISELECT(-496,-392),
  (VTBL_ENTRY)&(_ZTI8S20996C1[0]),
  ABISELECT(-536,-428),
  0,
  ABISELECT(8,4),
  -16,
  -8,
  ABISELECT(-536,-428),
  (VTBL_ENTRY)&(_ZTI8S20996C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20996C1D1Ev,_ZTv0_n28_N8S20996C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20996C1D0Ev,_ZTv0_n28_N8S20996C1D0Ev),
  ABISELECT(-544,-432),
  ABISELECT(-24,-20),
  ABISELECT(-16,-12),
  ABISELECT(-8,-4),
  ABISELECT(-544,-432),
  (VTBL_ENTRY)&(_ZTI8S20996C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20996C1D1Ev,_ZTv0_n24_N8S20996C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20996C1D0Ev,_ZTv0_n24_N8S20996C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20996C1[];
static  VTBL_ENTRY _tg__ZTV8S20996C3__A__8S20996C1[] = {
  ABISELECT(520,412),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20996C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20996C58S20996C3__A1__8S20996C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20996C5[0]),
};
extern void _ZN8S20996C9D1Ev();
extern void _ZN8S20996C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20996C9__8S20996C1[] = {
  ABISELECT(472,372),
  ABISELECT(520,412),
  ABISELECT(512,408),
  ABISELECT(496,392),
  ABISELECT(504,400),
  ABISELECT(512,408),
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20996C9[0]),
  (VTBL_ENTRY)&_ZN8S20996C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20996C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20996C58S20996C9__A2__8S20996C1[] = {
  ABISELECT(-24,-20),
  ABISELECT(-24,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20996C5[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S20996C9D1Ev,_ZTv0_n28_N8S20996C9D1Ev)();
extern void ABISELECT(_ZThn512_N8S20996C9D1Ev,_ZThn408_N8S20996C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20996C9D0Ev,_ZTv0_n28_N8S20996C9D0Ev)();
extern void ABISELECT(_ZThn512_N8S20996C9D0Ev,_ZThn408_N8S20996C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20996C11__8S20996C9__8S20996C1[] = {
  ABISELECT(-512,-408),
  0,
  ABISELECT(8,4),
  -16,
  -8,
  ABISELECT(-512,-408),
  (VTBL_ENTRY)&(_ZTI8S20996C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20996C9D1Ev,_ZTv0_n28_N8S20996C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20996C9D0Ev,_ZTv0_n28_N8S20996C9D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20996C9D1Ev,_ZTv0_n24_N8S20996C9D1Ev)();
extern void ABISELECT(_ZThn520_N8S20996C9D1Ev,_ZThn412_N8S20996C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20996C9D0Ev,_ZTv0_n24_N8S20996C9D0Ev)();
extern void ABISELECT(_ZThn520_N8S20996C9D0Ev,_ZThn412_N8S20996C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20996C12__8S20996C9__8S20996C1[] = {
  ABISELECT(-520,-412),
  ABISELECT(-24,-20),
  ABISELECT(-16,-12),
  ABISELECT(-8,-4),
  ABISELECT(-520,-412),
  (VTBL_ENTRY)&(_ZTI8S20996C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20996C9D1Ev,_ZTv0_n24_N8S20996C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20996C9D0Ev,_ZTv0_n24_N8S20996C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20996C3__8S20996C9__8S20996C1[] = {
  ABISELECT(24,20),
  ABISELECT(-496,-392),
  ABISELECT(-496,-392),
  ABISELECT(-472,-372),
  (VTBL_ENTRY)&(_ZTI8S20996C9[0]),
};
extern void _ZN8S20996C2D1Ev();
extern void _ZN8S20996C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20996C2__8S20996C1[] = {
  ABISELECT(-488,-388),
  ABISELECT(-488,-388),
  ABISELECT(32,24),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20996C2[0]),
  (VTBL_ENTRY)&_ZN8S20996C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20996C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20996C3__8S20996C2__8S20996C1[] = {
  ABISELECT(24,20),
  ABISELECT(-496,-392),
  ABISELECT(-496,-392),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20996C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20996C3__8S20996C1[] = {
  ABISELECT(24,20),
  ABISELECT(-496,-392),
  ABISELECT(-496,-392),
  0,
  (VTBL_ENTRY)&(_ZTI8S20996C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20996C58S20996C3__8S20996C1[] = {
  ABISELECT(-496,-392),
  ABISELECT(-496,-392),
  0,
  (VTBL_ENTRY)&(_ZTI8S20996C5[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20996C10__8S20996C1[] = {
  -16,
  -8,
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C10[0]),
};
extern void _ZN9S20996C11D1Ev();
extern void _ZN9S20996C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20996C11__8S20996C1[] = {
  0,
  ABISELECT(8,4),
  -16,
  -8,
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C11[0]),
  (VTBL_ENTRY)&_ZN9S20996C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20996C11D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20996C11D1Ev,_ZTv0_n24_N9S20996C11D1Ev)();
extern void ABISELECT(_ZThn8_N9S20996C11D1Ev,_ZThn4_N9S20996C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20996C11D0Ev,_ZTv0_n24_N9S20996C11D0Ev)();
extern void ABISELECT(_ZThn8_N9S20996C11D0Ev,_ZThn4_N9S20996C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20996C12__9S20996C11__8S20996C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-24,-20),
  ABISELECT(-16,-12),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20996C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20996C11D1Ev,_ZTv0_n24_N9S20996C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20996C11D0Ev,_ZTv0_n24_N9S20996C11D0Ev),
};
extern void _ZN9S20996C12D1Ev();
extern void _ZN9S20996C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20996C12__8S20996C1[] = {
  ABISELECT(-24,-20),
  ABISELECT(-16,-12),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20996C12[0]),
  (VTBL_ENTRY)&_ZN9S20996C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20996C12D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20996C10__9S20996C12__8S20996C1[] = {
  -16,
  -8,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20996C12[0]),
};
static  VTT_ENTRY vtt_S20996C1[] = {
  {&(_ZTV8S20996C1[11]),  11,56},
  {&(_tg__ZTV8S20996C3__A__8S20996C1[5]),  5,5},
  {&(_tg__ZTV8S20996C58S20996C3__A1__8S20996C1[4]),  4,4},
  {&(_tg__ZTV8S20996C9__8S20996C1[10]),  10,12},
  {&(_tg__ZTV8S20996C58S20996C9__A2__8S20996C1[4]),  4,4},
  {&(_tg__ZTV9S20996C11__8S20996C9__8S20996C1[7]),  7,9},
  {&(_tg__ZTV9S20996C11__8S20996C9__8S20996C1[7]),  7,9},
  {&(_tg__ZTV9S20996C12__8S20996C9__8S20996C1[6]),  6,8},
  {&(_tg__ZTV8S20996C3__8S20996C9__8S20996C1[5]),  5,5},
  {&(_ZTV8S20996C1[32]),  32,56},
  {&(_ZTV8S20996C1[39]),  39,56},
  {&(_ZTV8S20996C1[23]),  23,56},
  {&(_ZTV8S20996C1[46]),  46,56},
  {&(_ZTV8S20996C1[46]),  46,56},
  {&(_ZTV8S20996C1[54]),  54,56},
  {&(_tg__ZTV8S20996C2__8S20996C1[6]),  6,8},
  {&(_tg__ZTV8S20996C3__8S20996C2__8S20996C1[5]),  5,5},
  {&(_tg__ZTV8S20996C3__8S20996C1[5]),  5,5},
  {&(_tg__ZTV8S20996C58S20996C3__8S20996C1[4]),  4,4},
  {&(_tg__ZTV9S20996C10__8S20996C1[4]),  4,4},
  {&(_tg__ZTV9S20996C11__8S20996C1[6]),  6,8},
  {&(_tg__ZTV9S20996C12__9S20996C11__8S20996C1[6]),  6,8},
  {&(_tg__ZTV9S20996C11__8S20996C1[6]),  6,8},
  {&(_tg__ZTV9S20996C12__8S20996C1[5]),  5,7},
  {&(_tg__ZTV9S20996C10__9S20996C12__8S20996C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20996C1[];
extern  VTBL_ENTRY _ZTV8S20996C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20996C1[];
static VTBL_ENTRY alt_thunk_names155[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20996C11D0Ev,_ZTv0_n24_N9S20996C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20996C11D0Ev,_ZThn4_N9S20996C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20996C11D1Ev,_ZTv0_n24_N9S20996C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20996C11D1Ev,_ZThn4_N9S20996C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20996C9D0Ev,_ZTv0_n24_N8S20996C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N8S20996C9D0Ev,_ZThn412_N8S20996C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20996C9D1Ev,_ZTv0_n24_N8S20996C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn520_N8S20996C9D1Ev,_ZThn412_N8S20996C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20996C9D0Ev,_ZTv0_n28_N8S20996C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn512_N8S20996C9D0Ev,_ZThn408_N8S20996C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20996C9D1Ev,_ZTv0_n28_N8S20996C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn512_N8S20996C9D1Ev,_ZThn408_N8S20996C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20996C1D0Ev,_ZTv0_n24_N8S20996C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N8S20996C1D0Ev,_ZThn432_N8S20996C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20996C1D1Ev,_ZTv0_n24_N8S20996C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn544_N8S20996C1D1Ev,_ZThn432_N8S20996C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20996C1D0Ev,_ZTv0_n28_N8S20996C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn536_N8S20996C1D0Ev,_ZThn428_N8S20996C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S20996C1D0Ev,_ZThn388_N8S20996C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20996C1D1Ev,_ZTv0_n28_N8S20996C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn536_N8S20996C1D1Ev,_ZThn428_N8S20996C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn488_N8S20996C1D1Ev,_ZThn388_N8S20996C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20996C1 = {  "S20996C1", // class name
  bases_S20996C1, 31,
  &(vtc_S20996C1[0]), // expected_vtbl_contents
  &(vtt_S20996C1[0]), // expected_vtt_contents
  ABISELECT(600,480), // object size
  NSPAIRA(_ZTI8S20996C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20996C1),56, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20996C1),25, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names155,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2791C3  {
  void *s2791c3f0;
  __tsi64 s2791c3f1;
  int s2791c3f2;
  ::S2398C28_nt s2791c3f3;
  ::S2398C28_nt s2791c3f4;
  int s2791c3f5;
  void  mf2791c3(); // _ZN7S2791C38mf2791c3Ev
};
//SIG(-1 S2791C3) C1{ m Fp FL Fi FC2{ m Fc[2]} FC2 Fi}


void  S2791C3 ::mf2791c3(){}

static void Test_S2791C3()
{
  {
    init_simple_test("S2791C3");
    S2791C3 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S2791C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2791C3)");
    check_field_offset(lv, s2791c3f0, 0, "S2791C3.s2791c3f0");
    check_field_offset(lv, s2791c3f1, ABISELECT(8,4), "S2791C3.s2791c3f1");
    check_field_offset(lv, s2791c3f2, ABISELECT(16,12), "S2791C3.s2791c3f2");
    check_field_offset(lv, s2791c3f3, ABISELECT(20,16), "S2791C3.s2791c3f3");
    check_field_offset(lv, s2791c3f4, ABISELECT(22,18), "S2791C3.s2791c3f4");
    check_field_offset(lv, s2791c3f5, ABISELECT(24,20), "S2791C3.s2791c3f5");
  }
}
static Arrange_To_Call_Me vS2791C3(Test_S2791C3, "S2791C3", ABISELECT(32,24));

#else // __cplusplus

extern VTBL_ENTRY _ZTI7S2791C3[];
VTBL_ENTRY *P__ZTI7S2791C3 = _ZTI7S2791C3; 
Class_Descriptor cd_S2791C3 = {  "S2791C3", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI7S2791C3),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2791C6  : S2398C28_nt , S2791C3 {
  long double s2791c6f0;
  int s2791c6f1;
  virtual void  v2(); // _ZN7S2791C62v2Ev
  ~S2791C6(); // tgen
  S2791C6(); // tgen
};
//SIG(-1 S2791C6) C1{ BC2{ m Fc[2]} BC3{ m Fp FL Fi FC2 FC2 Fi} v1 FD Fi}


void  S2791C6 ::v2(){vfunc_called(this, "_ZN7S2791C62v2Ev");}
S2791C6 ::~S2791C6(){ note_dtor("S2791C6", this);} // tgen
S2791C6 ::S2791C6(){ note_ctor("S2791C6", this);} // tgen

static void Test_S2791C6()
{
  extern Class_Descriptor cd_S2791C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,13)];
    init_test(&cd_S2791C6, buf);
    S2791C6 *dp, &lv = *(dp=new (buf) S2791C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S2791C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2791C6)");
    check_base_class_offset(lv, (S2398C28_nt*), ABISELECT(8,4), "S2791C6");
    check_base_class_offset(lv, (S2791C3*), ABISELECT(16,8), "S2791C6");
    check_field_offset(lv, s2791c6f0, ABISELECT(48,32), "S2791C6.s2791c6f0");
    check_field_offset(lv, s2791c6f1, ABISELECT(64,44), "S2791C6.s2791c6f1");
    test_class_info(&lv, &cd_S2791C6);
    dp->~S2791C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2791C6(Test_S2791C6, "S2791C6", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S2791C6C1Ev();
extern void _ZN7S2791C6D1Ev();
Name_Map name_map_S2791C6[] = {
  NSPAIR(_ZN7S2791C6C1Ev),
  NSPAIR(_ZN7S2791C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
static Base_Class bases_S2791C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C28_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},
  {&cd_S2791C3,    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 _ZTI7S2791C6[];
extern void _ZN7S2791C62v2Ev();
static  VTBL_ENTRY vtc_S2791C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2791C6[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
};
extern VTBL_ENTRY _ZTI7S2791C6[];
extern  VTBL_ENTRY _ZTV7S2791C6[];
Class_Descriptor cd_S2791C6 = {  "S2791C6", // class name
  bases_S2791C6, 2,
  &(vtc_S2791C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S2791C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2791C6),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2791C5  : virtual S2791C6 {
  void *s2791c5f0;
  long double s2791c5f1;
  void *s2791c5f2;
  short s2791c5f3;
  char s2791c5f4;
  ~S2791C5(); // tgen
  S2791C5(); // tgen
};
//SIG(-1 S2791C5) C1{ VBC2{ BC3{ m Fc[2]} BC4{ m Fp FL Fi FC3 FC3 Fi} v1 FD Fi} Fp FD Fp Fs Fc}


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

static void Test_S2791C5()
{
  extern Class_Descriptor cd_S2791C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,20)];
    init_test(&cd_S2791C5, buf);
    S2791C5 *dp, &lv = *(dp=new (buf) S2791C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,76), "sizeof(S2791C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2791C5)");
    check_base_class_offset(lv, (S2398C28_nt*)(S2791C6*), ABISELECT(56,32), "S2791C5");
    check_base_class_offset(lv, (S2791C3*)(S2791C6*), ABISELECT(64,36), "S2791C5");
    check_base_class_offset(lv, (S2791C6*), ABISELECT(48,28), "S2791C5");
    check_field_offset(lv, s2791c5f0, ABISELECT(8,4), "S2791C5.s2791c5f0");
    check_field_offset(lv, s2791c5f1, ABISELECT(16,8), "S2791C5.s2791c5f1");
    check_field_offset(lv, s2791c5f2, ABISELECT(32,20), "S2791C5.s2791c5f2");
    check_field_offset(lv, s2791c5f3, ABISELECT(40,24), "S2791C5.s2791c5f3");
    check_field_offset(lv, s2791c5f4, ABISELECT(42,26), "S2791C5.s2791c5f4");
    test_class_info(&lv, &cd_S2791C5);
    dp->~S2791C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2791C5(Test_S2791C5, "S2791C5", ABISELECT(128,76));

#else // __cplusplus

extern void _ZN7S2791C5C1Ev();
extern void _ZN7S2791C5D1Ev();
Name_Map name_map_S2791C5[] = {
  NSPAIR(_ZN7S2791C5C1Ev),
  NSPAIR(_ZN7S2791C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2791C6;
extern VTBL_ENTRY _ZTI7S2791C6[];
extern  VTBL_ENTRY _ZTV7S2791C6[];
static Base_Class bases_S2791C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C28_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
    2, //immediately_derived
  0, 0},
  {&cd_S2791C3,    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
    2, //immediately_derived
  0, 0},
  {&cd_S2791C6,    ABISELECT(48,28), //bcp->offset
    3, //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 _ZTI7S2791C5[];
extern void _ZN7S2791C62v2Ev();
static  VTBL_ENTRY vtc_S2791C5[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S2791C5[0]),
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S2791C5[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S2791C5[];
static  VTT_ENTRY vtt_S2791C5[] = {
  {&(_ZTV7S2791C5[3]),  3,7},
  {&(_ZTV7S2791C5[6]),  6,7},
};
extern VTBL_ENTRY _ZTI7S2791C5[];
extern  VTBL_ENTRY _ZTV7S2791C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2791C5[];
Class_Descriptor cd_S2791C5 = {  "S2791C5", // class name
  bases_S2791C5, 3,
  &(vtc_S2791C5[0]), // expected_vtbl_contents
  &(vtt_S2791C5[0]), // expected_vtt_contents
  ABISELECT(128,76), // object size
  NSPAIRA(_ZTI7S2791C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S2791C5),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2791C5),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  S2791C2  : S2791C3 , virtual S2791C5 , S2398C28_nt , S2791C6 {
  __tsi64 s2791c2f0[8];
  int s2791c2f1;
  long s2791c2f2;
  ::S2791C3 s2791c2f3;
  short s2791c2f4;
  ::S2791C6 s2791c2f5[2];
  virtual  ~S2791C2(); // _ZN7S2791C2D2Ev
  S2791C2(); // tgen
};
//SIG(-1 S2791C2) C1{ BC2{ m Fp FL Fi FC3{ m Fc[2]} FC3 Fi} VBC4{ VBC5{ BC3 BC2 v1 FD Fi} Fp FD Fp Fs Fc} BC3 BC5 vd FL[8] Fi Fl FC2 Fs FC5[2]}


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

static void Test_S2791C2()
{
  extern Class_Descriptor cd_S2791C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(34,88)];
    init_test(&cd_S2791C2, buf);
    S2791C2 *dp, &lv = *(dp=new (buf) S2791C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,348), "sizeof(S2791C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2791C2)");
    /*is_ambiguous_... S2791C2::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*), ABISELECT(72,48), "S2791C2");
    /*is_ambiguous_... S2791C2::S2791C6 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S2791C6*), ABISELECT(456,304), "S2791C2");
    /*is_ambiguous_... S2791C2::S2791C6 */ AMB_check_base_class_offset(lv, (S2791C3*)(S2791C6*), ABISELECT(464,308), "S2791C2");
    check_base_class_offset(lv, (S2791C6*)(S2791C5*), ABISELECT(448,300), "S2791C2");
    check_base_class_offset(lv, (S2791C5*), ABISELECT(400,272), "S2791C2");
    /*is_ambiguous_... S2791C2::S2398C28_nt */ AMB_check_base_class_offset(lv, (S2398C28_nt*), ABISELECT(104,72), "S2791C2");
    /*is_ambiguous_... S2791C2::S2791C6 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S2791C6*), ABISELECT(8,4), "S2791C2");
    /*is_ambiguous_... S2791C2::S2791C6 */ AMB_check_base_class_offset(lv, (S2791C3*)(S2791C6*), ABISELECT(16,8), "S2791C2");
    /*is_ambiguous_... S2791C2::S2791C6 */ AMB_check_base_class_offset(lv, (S2791C6*), 0, "S2791C2");
    check_field_offset(lv, s2791c2f0, ABISELECT(112,76), "S2791C2.s2791c2f0");
    check_field_offset(lv, s2791c2f1, ABISELECT(176,140), "S2791C2.s2791c2f1");
    check_field_offset(lv, s2791c2f2, ABISELECT(184,144), "S2791C2.s2791c2f2");
    check_field_offset(lv, s2791c2f3, ABISELECT(192,148), "S2791C2.s2791c2f3");
    check_field_offset(lv, s2791c2f4, ABISELECT(224,172), "S2791C2.s2791c2f4");
    check_field_offset(lv, s2791c2f5, ABISELECT(240,176), "S2791C2.s2791c2f5");
    test_class_info(&lv, &cd_S2791C2);
    dp->~S2791C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2791C2(Test_S2791C2, "S2791C2", ABISELECT(528,348));

#else // __cplusplus

extern void _ZN7S2791C2C1Ev();
extern void _ZN7S2791C2D2Ev();
Name_Map name_map_S2791C2[] = {
  NSPAIR(_ZN7S2791C2C1Ev),
  NSPAIR(_ZN7S2791C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2791C6;
extern VTBL_ENTRY _ZTI7S2791C6[];
extern  VTBL_ENTRY _ZTV7S2791C6[];
extern Class_Descriptor cd_S2791C5;
extern VTBL_ENTRY _ZTI7S2791C5[];
extern  VTBL_ENTRY _ZTV7S2791C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2791C5[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2791C6;
extern VTBL_ENTRY _ZTI7S2791C6[];
extern  VTBL_ENTRY _ZTV7S2791C6[];
static Base_Class bases_S2791C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2791C3,    ABISELECT(72,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
  1, 0},
  {&cd_S2398C28_nt,    ABISELECT(456,304), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2791C3,    ABISELECT(464,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2791C6,    ABISELECT(448,300), //bcp->offset
    10, //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
    4, //immediately_derived
  0, 1},
  {&cd_S2791C5,    ABISELECT(400,272), //bcp->offset
    7, //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_S2398C28_nt,    ABISELECT(104,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
    -1, //immediately_derived
  1, 0},
  {&cd_S2398C28_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
    8, //immediately_derived
  0, 0},
  {&cd_S2791C3,    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
    8, //immediately_derived
  0, 0},
  {&cd_S2791C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S2791C2[];
extern void _ZN7S2791C62v2Ev();
extern void _ZN7S2791C2D1Ev();
extern void _ZN7S2791C2D0Ev();
extern void _ZN7S2791C62v2Ev();
static  VTBL_ENTRY vtc_S2791C2[] = {
  ABISELECT(448,300),
  ABISELECT(400,272),
  0,
  (VTBL_ENTRY)&(_ZTI7S2791C2[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2791C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2791C2D0Ev,
  ABISELECT(48,28),
  ABISELECT(-400,-272),
  (VTBL_ENTRY)&(_ZTI7S2791C2[0]),
  0,
  ABISELECT(-448,-300),
  (VTBL_ENTRY)&(_ZTI7S2791C2[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S2791C2[];
static  VTBL_ENTRY _tg__ZTV7S2791C5__7S2791C2[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S2791C5[0]),
};
extern void _ZN7S2791C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2791C6__7S2791C5__7S2791C2[] = {
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S2791C5[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
};
static  VTT_ENTRY vtt_S2791C2[] = {
  {&(_ZTV7S2791C2[4]),  4,14},
  {&(_ZTV7S2791C2[10]),  10,14},
  {&(_ZTV7S2791C2[13]),  13,14},
  {&(_tg__ZTV7S2791C5__7S2791C2[3]),  3,3},
  {&(_tg__ZTV7S2791C6__7S2791C5__7S2791C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S2791C2[];
extern  VTBL_ENTRY _ZTV7S2791C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2791C2[];
Class_Descriptor cd_S2791C2 = {  "S2791C2", // class name
  bases_S2791C2, 9,
  &(vtc_S2791C2[0]), // expected_vtbl_contents
  &(vtt_S2791C2[0]), // expected_vtt_contents
  ABISELECT(528,348), // object size
  NSPAIRA(_ZTI7S2791C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S2791C2),14, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2791C2),5, //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  S2791C8  : virtual S2791C5 , S2791C6 , virtual S2791C2 , S2791C3 {
  int s2791c8f0;
  void *s2791c8f1[2];
  int s2791c8f2;
  void *s2791c8f3;
  virtual void  v3(); // _ZN7S2791C82v3Ev
  ~S2791C8(); // tgen
  S2791C8(); // tgen
};
//SIG(-1 S2791C8) C1{ VBC2{ VBC3{ BC4{ m Fc[2]} BC5{ m Fp FL Fi FC4 FC4 Fi} v2 FD Fi} Fp FD Fp Fs Fc} BC3 VBC6{ BC5 VBC2 BC4 BC3 vd FL[8] Fi Fl FC5 Fs FC3[2]} BC5 v1 Fi Fp[2] Fi Fp}


void  S2791C8 ::v3(){vfunc_called(this, "_ZN7S2791C82v3Ev");}
S2791C8 ::~S2791C8(){ note_dtor("S2791C8", this);} // tgen
S2791C8 ::S2791C8(){ note_ctor("S2791C8", this);} // tgen

static void Test_S2791C8()
{
  extern Class_Descriptor cd_S2791C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(43,111)];
    init_test(&cd_S2791C8, buf);
    S2791C8 *dp, &lv = *(dp=new (buf) S2791C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(672,440), "sizeof(S2791C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2791C8)");
    /*is_ambiguous_... S2791C8::S2791C6 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S2791C6*), ABISELECT(200,124), "S2791C8");
    /*is_ambiguous_... S2791C8::S2791C6 */ AMB_check_base_class_offset(lv, (S2791C3*)(S2791C6*), ABISELECT(208,128), "S2791C8");
    check_base_class_offset(lv, (S2791C6*)(S2791C5*), ABISELECT(192,120), "S2791C8");
    check_base_class_offset(lv, (S2791C5*), ABISELECT(144,92), "S2791C8");
    check_base_class_offset(lv, (S2791C5*)(S2791C2*), ABISELECT(144,92), "S2791C8");
    /*is_ambiguous_... S2791C8::S2791C6 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S2791C6*), ABISELECT(8,4), "S2791C8");
    /*is_ambiguous_... S2791C8::S2791C6 */ AMB_check_base_class_offset(lv, (S2791C3*)(S2791C6*), ABISELECT(16,8), "S2791C8");
    /*is_ambiguous_... S2791C8::S2791C6 */ AMB_check_base_class_offset(lv, (S2791C6*), 0, "S2791C8");
    /*is_ambiguous_... S2791C2::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S2791C2*), ABISELECT(344,216), "S2791C8");
    /*is_ambiguous_... S2791C2::S2398C28_nt */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S2791C2*), ABISELECT(376,240), "S2791C8");
    /*is_ambiguous_... S2791C2::S2791C6 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S2791C6*)(S2791C2*), ABISELECT(280,172), "S2791C8");
    /*is_ambiguous_... S2791C2::S2791C6 */ AMB_check_base_class_offset(lv, (S2791C3*)(S2791C6*)(S2791C2*), ABISELECT(288,176), "S2791C8");
    /*is_ambiguous_... S2791C2::S2791C6 */ AMB_check_base_class_offset(lv, (S2791C6*)(S2791C2*), ABISELECT(272,168), "S2791C8");
    check_base_class_offset(lv, (S2791C2*), ABISELECT(272,168), "S2791C8");
    /*is_ambiguous_... S2791C8::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*), ABISELECT(72,48), "S2791C8");
    check_field_offset(lv, s2791c8f0, ABISELECT(104,72), "S2791C8.s2791c8f0");
    check_field_offset(lv, s2791c8f1, ABISELECT(112,76), "S2791C8.s2791c8f1");
    check_field_offset(lv, s2791c8f2, ABISELECT(128,84), "S2791C8.s2791c8f2");
    check_field_offset(lv, s2791c8f3, ABISELECT(136,88), "S2791C8.s2791c8f3");
    test_class_info(&lv, &cd_S2791C8);
    dp->~S2791C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2791C8(Test_S2791C8, "S2791C8", ABISELECT(672,440));

#else // __cplusplus

extern void _ZN7S2791C8C1Ev();
extern void _ZN7S2791C8D1Ev();
Name_Map name_map_S2791C8[] = {
  NSPAIR(_ZN7S2791C8C1Ev),
  NSPAIR(_ZN7S2791C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2791C6;
extern VTBL_ENTRY _ZTI7S2791C6[];
extern  VTBL_ENTRY _ZTV7S2791C6[];
extern Class_Descriptor cd_S2791C5;
extern VTBL_ENTRY _ZTI7S2791C5[];
extern  VTBL_ENTRY _ZTV7S2791C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2791C5[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2791C6;
extern VTBL_ENTRY _ZTI7S2791C6[];
extern  VTBL_ENTRY _ZTV7S2791C6[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2791C6;
extern VTBL_ENTRY _ZTI7S2791C6[];
extern  VTBL_ENTRY _ZTV7S2791C6[];
extern Class_Descriptor cd_S2791C2;
extern VTBL_ENTRY _ZTI7S2791C2[];
extern  VTBL_ENTRY _ZTV7S2791C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2791C2[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
static Base_Class bases_S2791C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C28_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
    2, //immediately_derived
  0, 0},
  {&cd_S2791C3,    ABISELECT(208,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
    2, //immediately_derived
  0, 0},
  {&cd_S2791C6,    ABISELECT(192,120), //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
    3, //immediately_derived
  0, 1},
  {&cd_S2791C5,    ABISELECT(144,92), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2398C28_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
    6, //immediately_derived
  0, 0},
  {&cd_S2791C3,    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
    6, //immediately_derived
  0, 0},
  {&cd_S2791C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S2791C3,    ABISELECT(344,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2398C28_nt,    ABISELECT(376,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2398C28_nt,    ABISELECT(280,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
    11, //immediately_derived
  0, 0},
  {&cd_S2791C3,    ABISELECT(288,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
    11, //immediately_derived
  0, 0},
  {&cd_S2791C6,    ABISELECT(272,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
    3, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2791C2,    ABISELECT(272,168), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2791C3,    ABISELECT(72,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
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2791C8[];
extern void _ZN7S2791C62v2Ev();
extern void _ZN7S2791C82v3Ev();
extern void _ZN7S2791C8D1Ev();
extern void _ZN7S2791C8D0Ev();
extern void _ZN7S2791C62v2Ev();
extern void _ZN7S2791C62v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S2791C8D1Ev,_ZTv0_n24_N7S2791C8D1Ev)();
extern void ABISELECT(_ZThn272_N7S2791C8D1Ev,_ZThn168_N7S2791C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S2791C8D0Ev,_ZTv0_n24_N7S2791C8D0Ev)();
extern void ABISELECT(_ZThn272_N7S2791C8D0Ev,_ZThn168_N7S2791C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2791C8[] = {
  ABISELECT(272,168),
  ABISELECT(192,120),
  ABISELECT(144,92),
  0,
  (VTBL_ENTRY)&(_ZTI7S2791C8[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2791C82v3Ev,
  (VTBL_ENTRY)&_ZN7S2791C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2791C8D0Ev,
  ABISELECT(48,28),
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI7S2791C8[0]),
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI7S2791C8[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
  ABISELECT(-272,-168),
  0,
  ABISELECT(-80,-48),
  ABISELECT(-128,-76),
  ABISELECT(-272,-168),
  (VTBL_ENTRY)&(_ZTI7S2791C8[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S2791C8D1Ev,_ZTv0_n24_N7S2791C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S2791C8D0Ev,_ZTv0_n24_N7S2791C8D0Ev),
};
extern VTBL_ENTRY _ZTV7S2791C8[];
static  VTBL_ENTRY _tg__ZTV7S2791C5__7S2791C8[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S2791C5[0]),
};
extern void _ZN7S2791C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2791C6__7S2791C5__7S2791C8[] = {
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S2791C5[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
};
extern void _ZN7S2791C62v2Ev();
extern void _ZN7S2791C2D1Ev();
extern void _ZN7S2791C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2791C2__7S2791C8[] = {
  ABISELECT(-80,-48),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S2791C2[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2791C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2791C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2791C5__7S2791C2__7S2791C8[] = {
  ABISELECT(48,28),
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S2791C2[0]),
};
extern void _ZN7S2791C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2791C6__7S2791C2__7S2791C8[] = {
  0,
  ABISELECT(80,48),
  (VTBL_ENTRY)&(_ZTI7S2791C2[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
};
static  VTT_ENTRY vtt_S2791C8[] = {
  {&(_ZTV7S2791C8[5]),  5,25},
  {&(_ZTV7S2791C8[12]),  12,25},
  {&(_ZTV7S2791C8[15]),  15,25},
  {&(_ZTV7S2791C8[22]),  22,25},
  {&(_tg__ZTV7S2791C5__7S2791C8[3]),  3,3},
  {&(_tg__ZTV7S2791C6__7S2791C5__7S2791C8[3]),  3,4},
  {&(_tg__ZTV7S2791C2__7S2791C8[4]),  4,7},
  {&(_tg__ZTV7S2791C5__7S2791C2__7S2791C8[3]),  3,3},
  {&(_tg__ZTV7S2791C6__7S2791C2__7S2791C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S2791C8[];
extern  VTBL_ENTRY _ZTV7S2791C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2791C8[];
static VTBL_ENTRY alt_thunk_names156[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S2791C8D0Ev,_ZTv0_n24_N7S2791C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S2791C8D0Ev,_ZThn168_N7S2791C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S2791C8D1Ev,_ZTv0_n24_N7S2791C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S2791C8D1Ev,_ZThn168_N7S2791C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2791C8 = {  "S2791C8", // class name
  bases_S2791C8, 14,
  &(vtc_S2791C8[0]), // expected_vtbl_contents
  &(vtt_S2791C8[0]), // expected_vtt_contents
  ABISELECT(672,440), // object size
  NSPAIRA(_ZTI7S2791C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S2791C8),25, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2791C8),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names156,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2791C10  {
  void *s2791c10f0[2];
  int s2791c10f1[2];
  ::S2791C2 s2791c10f2;
  virtual void  v4(); // _ZN8S2791C102v4Ev
  ~S2791C10(); // tgen
  S2791C10(); // tgen
};
//SIG(-1 S2791C10) C1{ v1 Fp[2] Fi[2] FC2{ BC3{ m Fp FL Fi FC4{ m Fc[2]} FC4 Fi} VBC5{ VBC6{ BC4 BC3 v2 FD Fi} Fp FD Fp Fs Fc} BC4 BC6 vd FL[8] Fi Fl FC3 Fs FC6[2]}}


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

static void Test_S2791C10()
{
  extern Class_Descriptor cd_S2791C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,93)];
    init_test(&cd_S2791C10, buf);
    S2791C10 *dp, &lv = *(dp=new (buf) S2791C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,368), "sizeof(S2791C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2791C10)");
    check_field_offset(lv, s2791c10f0, ABISELECT(8,4), "S2791C10.s2791c10f0");
    check_field_offset(lv, s2791c10f1, ABISELECT(24,12), "S2791C10.s2791c10f1");
    check_field_offset(lv, s2791c10f2, ABISELECT(32,20), "S2791C10.s2791c10f2");
    test_class_info(&lv, &cd_S2791C10);
    dp->~S2791C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2791C10(Test_S2791C10, "S2791C10", ABISELECT(560,368));

#else // __cplusplus

extern void _ZN8S2791C10C1Ev();
extern void _ZN8S2791C10D1Ev();
Name_Map name_map_S2791C10[] = {
  NSPAIR(_ZN8S2791C10C1Ev),
  NSPAIR(_ZN8S2791C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S2791C10[];
extern void _ZN8S2791C102v4Ev();
static  VTBL_ENTRY vtc_S2791C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S2791C10[0]),
  (VTBL_ENTRY)&_ZN8S2791C102v4Ev,
};
extern VTBL_ENTRY _ZTI8S2791C10[];
extern  VTBL_ENTRY _ZTV8S2791C10[];
Class_Descriptor cd_S2791C10 = {  "S2791C10", // class name
  0,0,//no base classes
  &(vtc_S2791C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(560,368), // object size
  NSPAIRA(_ZTI8S2791C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S2791C10),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2791C9  : S2398C28_nt , virtual S2791C6 , virtual S2791C2 , virtual S2791C10 , virtual S2791C3 {
  int s2791c9f0[2];
  void *s2791c9f1[3];
  int s2791c9f2;
  ::S2791C2 s2791c9f3;
  void *s2791c9f4[4];
  virtual void  v5(); // _ZN7S2791C92v5Ev
  ~S2791C9(); // tgen
  S2791C9(); // tgen
};
//SIG(-1 S2791C9) C1{ BC2{ m Fc[2]} VBC3{ BC2 BC4{ m Fp FL Fi FC2 FC2 Fi} v2 FD Fi} VBC5{ BC4 VBC6{ VBC3 Fp FD Fp Fs Fc} BC2 BC3 vd FL[8] Fi Fl FC4 Fs FC3[2]} VBC7{ v3 Fp[2] Fi[2] FC5} VBC4 v1 Fi[2] Fp[3] Fi FC5 Fp[4]}


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

static void Test_S2791C9()
{
  extern Class_Descriptor cd_S2791C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(110,285)];
    init_test(&cd_S2791C9, buf);
    S2791C9 *dp, &lv = *(dp=new (buf) S2791C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1744,1136), "sizeof(S2791C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2791C9)");
    /*is_ambiguous_... S2791C9::S2398C28_nt */ AMB_check_base_class_offset(lv, (S2398C28_nt*), ABISELECT(8,4), "S2791C9");
    /*is_ambiguous_... S2791C9::S2791C6 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S2791C6*), ABISELECT(632,400), "S2791C9");
    /*is_ambiguous_... S2791C9::S2791C6 */ AMB_check_base_class_offset(lv, (S2791C3*)(S2791C6*), ABISELECT(640,404), "S2791C9");
    /*is_ambiguous_... S2791C9::S2791C6 */ AMB_check_base_class_offset(lv, (S2791C6*), ABISELECT(624,396), "S2791C9");
    check_base_class_offset(lv, (S2791C6*)(S2791C5*), ABISELECT(624,396), "S2791C9");
    /*is_ambiguous_... S2791C2::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S2791C2*), ABISELECT(776,492), "S2791C9");
    check_base_class_offset(lv, (S2791C5*)(S2791C2*), ABISELECT(1104,716), "S2791C9");
    /*is_ambiguous_... S2791C2::S2398C28_nt */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S2791C2*), ABISELECT(808,516), "S2791C9");
    /*is_ambiguous_... S2791C2::S2791C6 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S2791C6*)(S2791C2*), ABISELECT(712,448), "S2791C9");
    /*is_ambiguous_... S2791C2::S2791C6 */ AMB_check_base_class_offset(lv, (S2791C3*)(S2791C6*)(S2791C2*), ABISELECT(720,452), "S2791C9");
    /*is_ambiguous_... S2791C2::S2791C6 */ AMB_check_base_class_offset(lv, (S2791C6*)(S2791C2*), ABISELECT(704,444), "S2791C9");
    check_base_class_offset(lv, (S2791C2*), ABISELECT(704,444), "S2791C9");
    check_base_class_offset(lv, (S2791C10*), ABISELECT(1152,744), "S2791C9");
    /*is_ambiguous_... S2791C9::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*), ABISELECT(1712,1112), "S2791C9");
    check_field_offset(lv, s2791c9f0, ABISELECT(12,8), "S2791C9.s2791c9f0");
    check_field_offset(lv, s2791c9f1, ABISELECT(24,16), "S2791C9.s2791c9f1");
    check_field_offset(lv, s2791c9f2, ABISELECT(48,28), "S2791C9.s2791c9f2");
    check_field_offset(lv, s2791c9f3, ABISELECT(64,32), "S2791C9.s2791c9f3");
    check_field_offset(lv, s2791c9f4, ABISELECT(592,380), "S2791C9.s2791c9f4");
    test_class_info(&lv, &cd_S2791C9);
    dp->~S2791C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2791C9(Test_S2791C9, "S2791C9", ABISELECT(1744,1136));

#else // __cplusplus

extern void _ZN7S2791C9C1Ev();
extern void _ZN7S2791C9D1Ev();
Name_Map name_map_S2791C9[] = {
  NSPAIR(_ZN7S2791C9C1Ev),
  NSPAIR(_ZN7S2791C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2791C6;
extern VTBL_ENTRY _ZTI7S2791C6[];
extern  VTBL_ENTRY _ZTV7S2791C6[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2791C5;
extern VTBL_ENTRY _ZTI7S2791C5[];
extern  VTBL_ENTRY _ZTV7S2791C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2791C5[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2791C6;
extern VTBL_ENTRY _ZTI7S2791C6[];
extern  VTBL_ENTRY _ZTV7S2791C6[];
extern Class_Descriptor cd_S2791C2;
extern VTBL_ENTRY _ZTI7S2791C2[];
extern  VTBL_ENTRY _ZTV7S2791C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2791C2[];
extern Class_Descriptor cd_S2791C10;
extern VTBL_ENTRY _ZTI8S2791C10[];
extern  VTBL_ENTRY _ZTV8S2791C10[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
static Base_Class bases_S2791C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C28_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},
  {&cd_S2398C28_nt,    ABISELECT(632,400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2791C3,    ABISELECT(640,404), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2791C6,    ABISELECT(624,396), //bcp->offset
    10, //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_S2791C3,    ABISELECT(776,492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2791C5,    ABISELECT(1104,716), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S2398C28_nt,    ABISELECT(808,516), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2398C28_nt,    ABISELECT(712,448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2791C3,    ABISELECT(720,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2791C6,    ABISELECT(704,444), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S2791C2,    ABISELECT(704,444), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2791C10,    ABISELECT(1152,744), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2791C3,    ABISELECT(1712,1112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S2791C9[];
extern void _ZN7S2791C92v5Ev();
extern void _ZN7S2791C9D1Ev();
extern void _ZN7S2791C9D0Ev();
extern void _ZN7S2791C62v2Ev();
extern void _ZN7S2791C62v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S2791C9D1Ev,_ZTv0_n24_N7S2791C9D1Ev)();
extern void ABISELECT(_ZThn704_N7S2791C9D1Ev,_ZThn444_N7S2791C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S2791C9D0Ev,_ZTv0_n24_N7S2791C9D0Ev)();
extern void ABISELECT(_ZThn704_N7S2791C9D0Ev,_ZThn444_N7S2791C9D0Ev)() __attribute__((weak));
extern void _ZN8S2791C102v4Ev();
static  VTBL_ENTRY vtc_S2791C9[] = {
  ABISELECT(1712,1112),
  ABISELECT(1152,744),
  ABISELECT(1104,716),
  ABISELECT(704,444),
  ABISELECT(624,396),
  0,
  (VTBL_ENTRY)&(_ZTI7S2791C9[0]),
  (VTBL_ENTRY)&_ZN7S2791C92v5Ev,
  (VTBL_ENTRY)&_ZN7S2791C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2791C9D0Ev,
  0,
  ABISELECT(-624,-396),
  (VTBL_ENTRY)&(_ZTI7S2791C9[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
  ABISELECT(-704,-444),
  0,
  ABISELECT(-80,-48),
  ABISELECT(400,272),
  ABISELECT(-704,-444),
  (VTBL_ENTRY)&(_ZTI7S2791C9[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S2791C9D1Ev,_ZTv0_n24_N7S2791C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S2791C9D0Ev,_ZTv0_n24_N7S2791C9D0Ev),
  ABISELECT(-480,-320),
  ABISELECT(-1104,-716),
  (VTBL_ENTRY)&(_ZTI7S2791C9[0]),
  0,
  ABISELECT(-1152,-744),
  (VTBL_ENTRY)&(_ZTI7S2791C9[0]),
  (VTBL_ENTRY)&_ZN8S2791C102v4Ev,
};
extern VTBL_ENTRY _ZTV7S2791C9[];
extern void _ZN7S2791C62v2Ev();
extern void _ZN7S2791C2D1Ev();
extern void _ZN7S2791C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2791C2__7S2791C9[] = {
  ABISELECT(-80,-48),
  ABISELECT(400,272),
  0,
  (VTBL_ENTRY)&(_ZTI7S2791C2[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2791C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2791C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2791C5__7S2791C2__7S2791C9[] = {
  ABISELECT(-480,-320),
  ABISELECT(-400,-272),
  (VTBL_ENTRY)&(_ZTI7S2791C2[0]),
};
extern void _ZN7S2791C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2791C6__7S2791C2__7S2791C9[] = {
  0,
  ABISELECT(80,48),
  (VTBL_ENTRY)&(_ZTI7S2791C2[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2791C5__7S2791C9[] = {
  ABISELECT(-480,-320),
  0,
  (VTBL_ENTRY)&(_ZTI7S2791C5[0]),
};
extern void _ZN7S2791C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2791C6__7S2791C5__7S2791C9[] = {
  0,
  ABISELECT(480,320),
  (VTBL_ENTRY)&(_ZTI7S2791C5[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
};
static  VTT_ENTRY vtt_S2791C9[] = {
  {&(_ZTV7S2791C9[7]),  7,30},
  {&(_ZTV7S2791C9[13]),  13,30},
  {&(_ZTV7S2791C9[20]),  20,30},
  {&(_ZTV7S2791C9[26]),  26,30},
  {&(_ZTV7S2791C9[29]),  29,30},
  {&(_tg__ZTV7S2791C2__7S2791C9[4]),  4,7},
  {&(_tg__ZTV7S2791C5__7S2791C2__7S2791C9[3]),  3,3},
  {&(_tg__ZTV7S2791C6__7S2791C2__7S2791C9[3]),  3,4},
  {&(_tg__ZTV7S2791C5__7S2791C9[3]),  3,3},
  {&(_tg__ZTV7S2791C6__7S2791C5__7S2791C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S2791C9[];
extern  VTBL_ENTRY _ZTV7S2791C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2791C9[];
static VTBL_ENTRY alt_thunk_names157[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S2791C9D0Ev,_ZTv0_n24_N7S2791C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N7S2791C9D0Ev,_ZThn444_N7S2791C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S2791C9D1Ev,_ZTv0_n24_N7S2791C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N7S2791C9D1Ev,_ZThn444_N7S2791C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2791C9 = {  "S2791C9", // class name
  bases_S2791C9, 13,
  &(vtc_S2791C9[0]), // expected_vtbl_contents
  &(vtt_S2791C9[0]), // expected_vtt_contents
  ABISELECT(1744,1136), // object size
  NSPAIRA(_ZTI7S2791C9),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S2791C9),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2791C9),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names157,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2791C7  : S2791C8 , S2791C9 {
  ::S2791C3 s2791c7f0;
  ~S2791C7(); // tgen
  S2791C7(); // tgen
};
//SIG(-1 S2791C7) C1{ BC2{ VBC3{ VBC4{ BC5{ m Fc[2]} BC6{ m Fp FL Fi FC5 FC5 Fi} v1 FD Fi} Fp FD Fp Fs Fc} BC4 VBC7{ BC6 VBC3 BC5 BC4 vd FL[8] Fi Fl FC6 Fs FC4[2]} BC6 v2 Fi Fp[2] Fi Fp} BC8{ BC5 VBC4 VBC7 VBC9{ v3 Fp[2] Fi[2] FC7} VBC6 v4 Fi[2] Fp[3] Fi FC7 Fp[4]} FC6}


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

static void Test_S2791C7()
{
  extern Class_Descriptor cd_S2791C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(121,314)];
    init_test(&cd_S2791C7, buf);
    S2791C7 *dp, &lv = *(dp=new (buf) S2791C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1920,1252), "sizeof(S2791C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2791C7)");
    /*is_ambiguous_... S2791C7::S2791C6 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S2791C6*), ABISELECT(856,544), "S2791C7");
    /*is_ambiguous_... S2791C7::S2791C6 */ AMB_check_base_class_offset(lv, (S2791C3*)(S2791C6*), ABISELECT(864,548), "S2791C7");
    check_base_class_offset(lv, (S2791C6*)(S2791C5*), ABISELECT(848,540), "S2791C7");
    /*is_ambiguous_... S2791C9::S2791C6 */ AMB_check_base_class_offset(lv, (S2791C6*)(S2791C9*), ABISELECT(848,540), "S2791C7");
    check_base_class_offset(lv, (S2791C5*)(S2791C8*), ABISELECT(800,512), "S2791C7");
    check_base_class_offset(lv, (S2791C5*)(S2791C2*), ABISELECT(800,512), "S2791C7");
    /*is_ambiguous_... S2791C8::S2791C6 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S2791C6*)(S2791C8*), ABISELECT(8,4), "S2791C7");
    /*is_ambiguous_... S2791C8::S2791C6 */ AMB_check_base_class_offset(lv, (S2791C3*)(S2791C6*)(S2791C8*), ABISELECT(16,8), "S2791C7");
    /*is_ambiguous_... S2791C8::S2791C6 */ AMB_check_base_class_offset(lv, (S2791C6*)(S2791C8*), 0, "S2791C7");
    /*is_ambiguous_... S2791C2::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S2791C2*), ABISELECT(1000,636), "S2791C7");
    /*is_ambiguous_... S2791C2::S2398C28_nt */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S2791C2*), ABISELECT(1032,660), "S2791C7");
    /*is_ambiguous_... S2791C2::S2791C6 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S2791C6*)(S2791C2*), ABISELECT(936,592), "S2791C7");
    /*is_ambiguous_... S2791C2::S2791C6 */ AMB_check_base_class_offset(lv, (S2791C3*)(S2791C6*)(S2791C2*), ABISELECT(944,596), "S2791C7");
    /*is_ambiguous_... S2791C2::S2791C6 */ AMB_check_base_class_offset(lv, (S2791C6*)(S2791C2*), ABISELECT(928,588), "S2791C7");
    check_base_class_offset(lv, (S2791C2*)(S2791C8*), ABISELECT(928,588), "S2791C7");
    check_base_class_offset(lv, (S2791C2*)(S2791C9*), ABISELECT(928,588), "S2791C7");
    /*is_ambiguous_... S2791C8::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S2791C8*), ABISELECT(72,48), "S2791C7");
    check_base_class_offset(lv, (S2791C8*), 0, "S2791C7");
    /*is_ambiguous_... S2791C9::S2398C28_nt */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S2791C9*), ABISELECT(152,96), "S2791C7");
    check_base_class_offset(lv, (S2791C10*)(S2791C9*), ABISELECT(1328,860), "S2791C7");
    /*is_ambiguous_... S2791C9::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S2791C9*), ABISELECT(1888,1228), "S2791C7");
    check_base_class_offset(lv, (S2791C9*), ABISELECT(144,92), "S2791C7");
    check_field_offset(lv, s2791c7f0, ABISELECT(768,488), "S2791C7.s2791c7f0");
    test_class_info(&lv, &cd_S2791C7);
    dp->~S2791C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2791C7(Test_S2791C7, "S2791C7", ABISELECT(1920,1252));

#else // __cplusplus

extern void _ZN7S2791C7C1Ev();
extern void _ZN7S2791C7D1Ev();
Name_Map name_map_S2791C7[] = {
  NSPAIR(_ZN7S2791C7C1Ev),
  NSPAIR(_ZN7S2791C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2791C6;
extern VTBL_ENTRY _ZTI7S2791C6[];
extern  VTBL_ENTRY _ZTV7S2791C6[];
extern Class_Descriptor cd_S2791C5;
extern VTBL_ENTRY _ZTI7S2791C5[];
extern  VTBL_ENTRY _ZTV7S2791C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2791C5[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2791C6;
extern VTBL_ENTRY _ZTI7S2791C6[];
extern  VTBL_ENTRY _ZTV7S2791C6[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2791C6;
extern VTBL_ENTRY _ZTI7S2791C6[];
extern  VTBL_ENTRY _ZTV7S2791C6[];
extern Class_Descriptor cd_S2791C2;
extern VTBL_ENTRY _ZTI7S2791C2[];
extern  VTBL_ENTRY _ZTV7S2791C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2791C2[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2791C8;
extern VTBL_ENTRY _ZTI7S2791C8[];
extern  VTBL_ENTRY _ZTV7S2791C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2791C8[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C10;
extern VTBL_ENTRY _ZTI8S2791C10[];
extern  VTBL_ENTRY _ZTV8S2791C10[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2791C9;
extern VTBL_ENTRY _ZTI7S2791C9[];
extern  VTBL_ENTRY _ZTV7S2791C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2791C9[];
static Base_Class bases_S2791C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C28_nt,    ABISELECT(856,544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2791C3,    ABISELECT(864,548), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2791C6,    ABISELECT(848,540), //bcp->offset
    24, //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
    3, //immediately_derived
  0, 1},
  {&cd_S2791C5,    ABISELECT(800,512), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S2398C28_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
    6, //immediately_derived
  0, 0},
  {&cd_S2791C3,    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
    6, //immediately_derived
  0, 0},
  {&cd_S2791C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S2791C3,    ABISELECT(1000,636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2398C28_nt,    ABISELECT(1032,660), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2398C28_nt,    ABISELECT(936,592), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2791C3,    ABISELECT(944,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2791C6,    ABISELECT(928,588), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S2791C2,    ABISELECT(928,588), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2791C3,    ABISELECT(72,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
    14, //immediately_derived
  0, 0},
  {&cd_S2791C8,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2398C28_nt,    ABISELECT(152,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
    18, //immediately_derived
  0, 0},
  {&cd_S2791C10,    ABISELECT(1328,860), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S2791C3,    ABISELECT(1888,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
    18, //immediately_derived
  0, 1},
  {&cd_S2791C9,    ABISELECT(144,92), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2791C7[];
extern void _ZN7S2791C62v2Ev();
extern void _ZN7S2791C82v3Ev();
extern void _ZN7S2791C7D1Ev();
extern void _ZN7S2791C7D0Ev();
extern void _ZN7S2791C92v5Ev();
extern void ABISELECT(_ZThn144_N7S2791C7D1Ev,_ZThn92_N7S2791C7D1Ev)();
extern void ABISELECT(_ZThn144_N7S2791C7D0Ev,_ZThn92_N7S2791C7D0Ev)();
extern void _ZN7S2791C62v2Ev();
extern void _ZN7S2791C62v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S2791C7D1Ev,_ZTv0_n24_N7S2791C7D1Ev)();
extern void ABISELECT(_ZThn928_N7S2791C7D1Ev,_ZThn588_N7S2791C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S2791C7D0Ev,_ZTv0_n24_N7S2791C7D0Ev)();
extern void ABISELECT(_ZThn928_N7S2791C7D0Ev,_ZThn588_N7S2791C7D0Ev)() __attribute__((weak));
extern void _ZN8S2791C102v4Ev();
static  VTBL_ENTRY vtc_S2791C7[] = {
  ABISELECT(1888,1228),
  ABISELECT(1328,860),
  ABISELECT(928,588),
  ABISELECT(848,540),
  ABISELECT(800,512),
  0,
  (VTBL_ENTRY)&(_ZTI7S2791C7[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2791C82v3Ev,
  (VTBL_ENTRY)&_ZN7S2791C7D1Ev,
  (VTBL_ENTRY)&_ZN7S2791C7D0Ev,
  ABISELECT(1744,1136),
  ABISELECT(1184,768),
  ABISELECT(656,420),
  ABISELECT(784,496),
  ABISELECT(704,448),
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI7S2791C7[0]),
  (VTBL_ENTRY)&_ZN7S2791C92v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S2791C7D1Ev,_ZThn92_N7S2791C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S2791C7D0Ev,_ZThn92_N7S2791C7D0Ev),
  ABISELECT(48,28),
  ABISELECT(-800,-512),
  (VTBL_ENTRY)&(_ZTI7S2791C7[0]),
  0,
  ABISELECT(-848,-540),
  (VTBL_ENTRY)&(_ZTI7S2791C7[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
  ABISELECT(-928,-588),
  0,
  ABISELECT(-80,-48),
  ABISELECT(-128,-76),
  ABISELECT(-928,-588),
  (VTBL_ENTRY)&(_ZTI7S2791C7[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S2791C7D1Ev,_ZTv0_n24_N7S2791C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S2791C7D0Ev,_ZTv0_n24_N7S2791C7D0Ev),
  0,
  ABISELECT(-1328,-860),
  (VTBL_ENTRY)&(_ZTI7S2791C7[0]),
  (VTBL_ENTRY)&_ZN8S2791C102v4Ev,
};
extern VTBL_ENTRY _ZTV7S2791C7[];
extern void _ZN7S2791C62v2Ev();
extern void _ZN7S2791C82v3Ev();
extern void _ZN7S2791C8D1Ev();
extern void _ZN7S2791C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2791C8__7S2791C7[] = {
  ABISELECT(928,588),
  ABISELECT(848,540),
  ABISELECT(800,512),
  0,
  (VTBL_ENTRY)&(_ZTI7S2791C8[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2791C82v3Ev,
  (VTBL_ENTRY)&_ZN7S2791C8D1Ev,
  (VTBL_ENTRY)&_ZN7S2791C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2791C5__7S2791C8__7S2791C7[] = {
  ABISELECT(48,28),
  ABISELECT(-800,-512),
  (VTBL_ENTRY)&(_ZTI7S2791C8[0]),
};
extern void _ZN7S2791C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2791C6__7S2791C8__7S2791C7[] = {
  0,
  ABISELECT(-848,-540),
  (VTBL_ENTRY)&(_ZTI7S2791C8[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
};
extern void _ZN7S2791C62v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S2791C8D1Ev,_ZTv0_n24_N7S2791C8D1Ev)();
extern void ABISELECT(_ZThn928_N7S2791C8D1Ev,_ZThn588_N7S2791C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S2791C8D0Ev,_ZTv0_n24_N7S2791C8D0Ev)();
extern void ABISELECT(_ZThn928_N7S2791C8D0Ev,_ZThn588_N7S2791C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2791C2__7S2791C8__7S2791C7[] = {
  ABISELECT(-928,-588),
  0,
  ABISELECT(-80,-48),
  ABISELECT(-128,-76),
  ABISELECT(-928,-588),
  (VTBL_ENTRY)&(_ZTI7S2791C8[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S2791C8D1Ev,_ZTv0_n24_N7S2791C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S2791C8D0Ev,_ZTv0_n24_N7S2791C8D0Ev),
};
extern void _ZN7S2791C92v5Ev();
extern void _ZN7S2791C9D1Ev();
extern void _ZN7S2791C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2791C9__7S2791C7[] = {
  ABISELECT(1744,1136),
  ABISELECT(1184,768),
  ABISELECT(656,420),
  ABISELECT(784,496),
  ABISELECT(704,448),
  0,
  (VTBL_ENTRY)&(_ZTI7S2791C9[0]),
  (VTBL_ENTRY)&_ZN7S2791C92v5Ev,
  (VTBL_ENTRY)&_ZN7S2791C9D1Ev,
  (VTBL_ENTRY)&_ZN7S2791C9D0Ev,
};
extern void _ZN7S2791C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2791C6__7S2791C9__7S2791C7[] = {
  0,
  ABISELECT(-704,-448),
  (VTBL_ENTRY)&(_ZTI7S2791C9[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
};
extern void _ZN7S2791C62v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S2791C9D1Ev,_ZTv0_n24_N7S2791C9D1Ev)();
extern void ABISELECT(_ZThn784_N7S2791C9D1Ev,_ZThn496_N7S2791C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S2791C9D0Ev,_ZTv0_n24_N7S2791C9D0Ev)();
extern void ABISELECT(_ZThn784_N7S2791C9D0Ev,_ZThn496_N7S2791C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2791C2__7S2791C9__7S2791C7[] = {
  ABISELECT(-784,-496),
  0,
  ABISELECT(-80,-48),
  ABISELECT(-128,-76),
  ABISELECT(-784,-496),
  (VTBL_ENTRY)&(_ZTI7S2791C9[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S2791C9D1Ev,_ZTv0_n24_N7S2791C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S2791C9D0Ev,_ZTv0_n24_N7S2791C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2791C5__7S2791C9__7S2791C7[] = {
  ABISELECT(48,28),
  ABISELECT(-656,-420),
  (VTBL_ENTRY)&(_ZTI7S2791C9[0]),
};
extern void _ZN8S2791C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S2791C10__7S2791C9__7S2791C7[] = {
  0,
  ABISELECT(-1184,-768),
  (VTBL_ENTRY)&(_ZTI7S2791C9[0]),
  (VTBL_ENTRY)&_ZN8S2791C102v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2791C5__7S2791C7[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S2791C5[0]),
};
extern void _ZN7S2791C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2791C6__7S2791C5__7S2791C7[] = {
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S2791C5[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
};
extern void _ZN7S2791C62v2Ev();
extern void _ZN7S2791C2D1Ev();
extern void _ZN7S2791C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2791C2__7S2791C7[] = {
  ABISELECT(-80,-48),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S2791C2[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2791C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2791C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2791C5__7S2791C2__7S2791C7[] = {
  ABISELECT(48,28),
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S2791C2[0]),
};
extern void _ZN7S2791C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2791C6__7S2791C2__7S2791C7[] = {
  0,
  ABISELECT(80,48),
  (VTBL_ENTRY)&(_ZTI7S2791C2[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
};
static  VTT_ENTRY vtt_S2791C7[] = {
  {&(_ZTV7S2791C7[7]),  7,41},
  {&(_tg__ZTV7S2791C8__7S2791C7[5]),  5,9},
  {&(_tg__ZTV7S2791C5__7S2791C8__7S2791C7[3]),  3,3},
  {&(_tg__ZTV7S2791C6__7S2791C8__7S2791C7[3]),  3,4},
  {&(_tg__ZTV7S2791C2__7S2791C8__7S2791C7[6]),  6,9},
  {&(_tg__ZTV7S2791C9__7S2791C7[7]),  7,10},
  {&(_tg__ZTV7S2791C6__7S2791C9__7S2791C7[3]),  3,4},
  {&(_tg__ZTV7S2791C2__7S2791C9__7S2791C7[6]),  6,9},
  {&(_tg__ZTV7S2791C5__7S2791C9__7S2791C7[3]),  3,3},
  {&(_tg__ZTV8S2791C10__7S2791C9__7S2791C7[3]),  3,4},
  {&(_ZTV7S2791C7[24]),  24,41},
  {&(_ZTV7S2791C7[27]),  27,41},
  {&(_ZTV7S2791C7[34]),  34,41},
  {&(_ZTV7S2791C7[18]),  18,41},
  {&(_ZTV7S2791C7[40]),  40,41},
  {&(_tg__ZTV7S2791C5__7S2791C7[3]),  3,3},
  {&(_tg__ZTV7S2791C6__7S2791C5__7S2791C7[3]),  3,4},
  {&(_tg__ZTV7S2791C2__7S2791C7[4]),  4,7},
  {&(_tg__ZTV7S2791C5__7S2791C2__7S2791C7[3]),  3,3},
  {&(_tg__ZTV7S2791C6__7S2791C2__7S2791C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S2791C7[];
extern  VTBL_ENTRY _ZTV7S2791C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2791C7[];
static VTBL_ENTRY alt_thunk_names158[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S2791C9D0Ev,_ZTv0_n24_N7S2791C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N7S2791C9D0Ev,_ZThn496_N7S2791C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S2791C9D1Ev,_ZTv0_n24_N7S2791C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N7S2791C9D1Ev,_ZThn496_N7S2791C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S2791C8D0Ev,_ZTv0_n24_N7S2791C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn928_N7S2791C8D0Ev,_ZThn588_N7S2791C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S2791C8D1Ev,_ZTv0_n24_N7S2791C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn928_N7S2791C8D1Ev,_ZThn588_N7S2791C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S2791C7D0Ev,_ZTv0_n24_N7S2791C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn928_N7S2791C7D0Ev,_ZThn588_N7S2791C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S2791C7D1Ev,_ZTv0_n24_N7S2791C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn928_N7S2791C7D1Ev,_ZThn588_N7S2791C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2791C7 = {  "S2791C7", // class name
  bases_S2791C7, 19,
  &(vtc_S2791C7[0]), // expected_vtbl_contents
  &(vtt_S2791C7[0]), // expected_vtt_contents
  ABISELECT(1920,1252), // object size
  NSPAIRA(_ZTI7S2791C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2791C7),41, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2791C7),20, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names158,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2791C1  : S2791C2 , S2791C5 {
  void *s2791c1f0;
  ::S2791C7 s2791c1f1;
  void *s2791c1f2;
  int s2791c1f3[2];
  void *s2791c1f4;
  virtual void  v1(); // _ZN7S2791C12v1Ev
  ~S2791C1(); // tgen
  S2791C1(); // tgen
};
//SIG(1 S2791C1) C1{ BC2{ BC3{ m Fp FL Fi FC4{ m Fc[2]} FC4 Fi} VBC5{ VBC6{ BC4 BC3 v2 FD Fi} Fp FD Fp Fs Fc} BC4 BC6 vd FL[8] Fi Fl FC3 Fs FC6[2]} BC5 v1 Fp FC7{ BC8{ VBC5 BC6 VBC2 BC3 v3 Fi Fp[2] Fi Fp} BC9{ BC4 VBC6 VBC2 VBC10{ v4 Fp[2] Fi[2] FC2} VBC3 v5 Fi[2] Fp[3] Fi FC2 Fp[4]} FC3} Fp Fi[2] Fp}


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

static void Test_S2791C1()
{
  extern Class_Descriptor cd_S2791C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(160,413)];
    init_test(&cd_S2791C1, buf);
    S2791C1 *dp, &lv = *(dp=new (buf) S2791C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2544,1648), "sizeof(S2791C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S2791C1)");
    /*is_ambiguous_... S2791C2::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S2791C2*), ABISELECT(72,48), "S2791C1");
    /*is_ambiguous_... S2791C1::S2791C6 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S2791C6*), ABISELECT(2472,1604), "S2791C1");
    /*is_ambiguous_... S2791C1::S2791C6 */ AMB_check_base_class_offset(lv, (S2791C3*)(S2791C6*), ABISELECT(2480,1608), "S2791C1");
    /*is_ambiguous_... S2791C1::S2791C5 */ AMB_check_base_class_offset(lv, (S2791C6*)(S2791C5*), ABISELECT(2464,1600), "S2791C1");
    /*is_ambiguous_... S2791C1::S2791C5 */ AMB_check_base_class_offset(lv, (S2791C6*)(S2791C5*), ABISELECT(2464,1600), "S2791C1");
    check_base_class_offset(lv, (S2791C5*)(S2791C2*), ABISELECT(2416,1572), "S2791C1");
    /*is_ambiguous_... S2791C2::S2398C28_nt */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S2791C2*), ABISELECT(104,72), "S2791C1");
    /*is_ambiguous_... S2791C2::S2791C6 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S2791C6*)(S2791C2*), ABISELECT(8,4), "S2791C1");
    /*is_ambiguous_... S2791C2::S2791C6 */ AMB_check_base_class_offset(lv, (S2791C3*)(S2791C6*)(S2791C2*), ABISELECT(16,8), "S2791C1");
    /*is_ambiguous_... S2791C2::S2791C6 */ AMB_check_base_class_offset(lv, (S2791C6*)(S2791C2*), 0, "S2791C1");
    check_base_class_offset(lv, (S2791C2*), 0, "S2791C1");
    /*is_ambiguous_... S2791C1::S2791C5 */ AMB_check_base_class_offset(lv, (S2791C5*), ABISELECT(400,272), "S2791C1");
    check_field_offset(lv, s2791c1f0, ABISELECT(448,300), "S2791C1.s2791c1f0");
    check_field_offset(lv, s2791c1f1, ABISELECT(464,304), "S2791C1.s2791c1f1");
    check_field_offset(lv, s2791c1f2, ABISELECT(2384,1556), "S2791C1.s2791c1f2");
    check_field_offset(lv, s2791c1f3, ABISELECT(2392,1560), "S2791C1.s2791c1f3");
    check_field_offset(lv, s2791c1f4, ABISELECT(2400,1568), "S2791C1.s2791c1f4");
    test_class_info(&lv, &cd_S2791C1);
    dp->~S2791C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2791C1(Test_S2791C1, "S2791C1", ABISELECT(2544,1648));

#else // __cplusplus

extern void _ZN7S2791C1C1Ev();
extern void _ZN7S2791C1D1Ev();
Name_Map name_map_S2791C1[] = {
  NSPAIR(_ZN7S2791C1C1Ev),
  NSPAIR(_ZN7S2791C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2791C6;
extern VTBL_ENTRY _ZTI7S2791C6[];
extern  VTBL_ENTRY _ZTV7S2791C6[];
extern Class_Descriptor cd_S2791C5;
extern VTBL_ENTRY _ZTI7S2791C5[];
extern  VTBL_ENTRY _ZTV7S2791C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2791C5[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2791C6;
extern VTBL_ENTRY _ZTI7S2791C6[];
extern  VTBL_ENTRY _ZTV7S2791C6[];
extern Class_Descriptor cd_S2791C2;
extern VTBL_ENTRY _ZTI7S2791C2[];
extern  VTBL_ENTRY _ZTV7S2791C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2791C2[];
extern Class_Descriptor cd_S2791C5;
extern VTBL_ENTRY _ZTI7S2791C5[];
extern  VTBL_ENTRY _ZTV7S2791C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2791C5[];
static Base_Class bases_S2791C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2791C3,    ABISELECT(72,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
    9, //immediately_derived
  0, 0},
  {&cd_S2398C28_nt,    ABISELECT(2472,1604), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2791C3,    ABISELECT(2480,1608), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2791C6,    ABISELECT(2464,1600), //bcp->offset
    14, //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
    4, //immediately_derived
  0, 1},
  {&cd_S2791C5,    ABISELECT(2416,1572), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S2398C28_nt,    ABISELECT(104,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
    9, //immediately_derived
  0, 0},
  {&cd_S2398C28_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
    8, //immediately_derived
  0, 0},
  {&cd_S2791C3,    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
    8, //immediately_derived
  0, 0},
  {&cd_S2791C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S2791C2,    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_S2791C5,    ABISELECT(400,272), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //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 _ZTI7S2791C1[];
extern void _ZN7S2791C62v2Ev();
extern void _ZN7S2791C1D1Ev();
extern void _ZN7S2791C1D0Ev();
extern void _ZN7S2791C12v1Ev();
extern void _ZN7S2791C62v2Ev();
static  VTBL_ENTRY vtc_S2791C1[] = {
  ABISELECT(2464,1600),
  ABISELECT(2416,1572),
  0,
  (VTBL_ENTRY)&(_ZTI7S2791C1[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2791C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2791C1D0Ev,
  (VTBL_ENTRY)&_ZN7S2791C12v1Ev,
  ABISELECT(2064,1328),
  ABISELECT(-400,-272),
  (VTBL_ENTRY)&(_ZTI7S2791C1[0]),
  ABISELECT(48,28),
  ABISELECT(-2416,-1572),
  (VTBL_ENTRY)&(_ZTI7S2791C1[0]),
  0,
  ABISELECT(-2464,-1600),
  (VTBL_ENTRY)&(_ZTI7S2791C1[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
};
extern VTBL_ENTRY _ZTV7S2791C1[];
extern void _ZN7S2791C62v2Ev();
extern void _ZN7S2791C2D1Ev();
extern void _ZN7S2791C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2791C2__7S2791C1[] = {
  ABISELECT(2464,1600),
  ABISELECT(2416,1572),
  0,
  (VTBL_ENTRY)&(_ZTI7S2791C2[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
  (VTBL_ENTRY)&_ZN7S2791C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2791C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2791C5__7S2791C2__7S2791C1[] = {
  ABISELECT(48,28),
  ABISELECT(-2416,-1572),
  (VTBL_ENTRY)&(_ZTI7S2791C2[0]),
};
extern void _ZN7S2791C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2791C6__7S2791C2__7S2791C1[] = {
  0,
  ABISELECT(-2464,-1600),
  (VTBL_ENTRY)&(_ZTI7S2791C2[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2791C5__A__7S2791C1[] = {
  ABISELECT(2064,1328),
  0,
  (VTBL_ENTRY)&(_ZTI7S2791C5[0]),
};
extern void _ZN7S2791C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2791C6__7S2791C5__A__7S2791C1[] = {
  0,
  ABISELECT(-2064,-1328),
  (VTBL_ENTRY)&(_ZTI7S2791C5[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2791C5__7S2791C1[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S2791C5[0]),
};
extern void _ZN7S2791C62v2Ev();
static  VTBL_ENTRY _tg__ZTV7S2791C6__7S2791C5__7S2791C1[] = {
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S2791C5[0]),
  (VTBL_ENTRY)&_ZN7S2791C62v2Ev,
};
static  VTT_ENTRY vtt_S2791C1[] = {
  {&(_ZTV7S2791C1[4]),  4,18},
  {&(_tg__ZTV7S2791C2__7S2791C1[4]),  4,7},
  {&(_tg__ZTV7S2791C5__7S2791C2__7S2791C1[3]),  3,3},
  {&(_tg__ZTV7S2791C6__7S2791C2__7S2791C1[3]),  3,4},
  {&(_tg__ZTV7S2791C5__A__7S2791C1[3]),  3,3},
  {&(_tg__ZTV7S2791C6__7S2791C5__A__7S2791C1[3]),  3,4},
  {&(_ZTV7S2791C1[14]),  14,18},
  {&(_ZTV7S2791C1[17]),  17,18},
  {&(_ZTV7S2791C1[11]),  11,18},
  {&(_tg__ZTV7S2791C5__7S2791C1[3]),  3,3},
  {&(_tg__ZTV7S2791C6__7S2791C5__7S2791C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S2791C1[];
extern  VTBL_ENTRY _ZTV7S2791C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2791C1[];
Class_Descriptor cd_S2791C1 = {  "S2791C1", // class name
  bases_S2791C1, 11,
  &(vtc_S2791C1[0]), // expected_vtbl_contents
  &(vtt_S2791C1[0]), // expected_vtt_contents
  ABISELECT(2544,1648), // object size
  NSPAIRA(_ZTI7S2791C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2791C1),18, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2791C1),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7698C4  : S2398C28_nt , S2791C3 {
  long double s7698c4f0;
  int s7698c4f1;
  virtual void  v2(); // _ZN7S7698C42v2Ev
  ~S7698C4(); // tgen
  S7698C4(); // tgen
};
//SIG(-1 S7698C4) C1{ BC2{ m Fc[2]} BC3{ m Fp FL Fi FC2 FC2 Fi} v1 FD Fi}


void  S7698C4 ::v2(){vfunc_called(this, "_ZN7S7698C42v2Ev");}
S7698C4 ::~S7698C4(){ note_dtor("S7698C4", this);} // tgen
S7698C4 ::S7698C4(){ note_ctor("S7698C4", this);} // tgen

static void Test_S7698C4()
{
  extern Class_Descriptor cd_S7698C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,13)];
    init_test(&cd_S7698C4, buf);
    S7698C4 *dp, &lv = *(dp=new (buf) S7698C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S7698C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7698C4)");
    check_base_class_offset(lv, (S2398C28_nt*), ABISELECT(8,4), "S7698C4");
    check_base_class_offset(lv, (S2791C3*), ABISELECT(16,8), "S7698C4");
    check_field_offset(lv, s7698c4f0, ABISELECT(48,32), "S7698C4.s7698c4f0");
    check_field_offset(lv, s7698c4f1, ABISELECT(64,44), "S7698C4.s7698c4f1");
    test_class_info(&lv, &cd_S7698C4);
    dp->~S7698C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7698C4(Test_S7698C4, "S7698C4", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S7698C4C1Ev();
extern void _ZN7S7698C4D1Ev();
Name_Map name_map_S7698C4[] = {
  NSPAIR(_ZN7S7698C4C1Ev),
  NSPAIR(_ZN7S7698C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
static Base_Class bases_S7698C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C28_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},
  {&cd_S2791C3,    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 _ZTI7S7698C4[];
extern void _ZN7S7698C42v2Ev();
static  VTBL_ENTRY vtc_S7698C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7698C4[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
};
extern VTBL_ENTRY _ZTI7S7698C4[];
extern  VTBL_ENTRY _ZTV7S7698C4[];
Class_Descriptor cd_S7698C4 = {  "S7698C4", // class name
  bases_S7698C4, 2,
  &(vtc_S7698C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S7698C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7698C4),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7698C3  : virtual S7698C4 {
  void *s7698c3f0;
  long double s7698c3f1;
  void *s7698c3f2;
  short s7698c3f3;
  char s7698c3f4;
  ~S7698C3(); // tgen
  S7698C3(); // tgen
};
//SIG(-1 S7698C3) C1{ VBC2{ BC3{ m Fc[2]} BC4{ m Fp FL Fi FC3 FC3 Fi} v1 FD Fi} Fp FD Fp Fs Fc}


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

static void Test_S7698C3()
{
  extern Class_Descriptor cd_S7698C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,20)];
    init_test(&cd_S7698C3, buf);
    S7698C3 *dp, &lv = *(dp=new (buf) S7698C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,76), "sizeof(S7698C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7698C3)");
    check_base_class_offset(lv, (S2398C28_nt*)(S7698C4*), ABISELECT(56,32), "S7698C3");
    check_base_class_offset(lv, (S2791C3*)(S7698C4*), ABISELECT(64,36), "S7698C3");
    check_base_class_offset(lv, (S7698C4*), ABISELECT(48,28), "S7698C3");
    check_field_offset(lv, s7698c3f0, ABISELECT(8,4), "S7698C3.s7698c3f0");
    check_field_offset(lv, s7698c3f1, ABISELECT(16,8), "S7698C3.s7698c3f1");
    check_field_offset(lv, s7698c3f2, ABISELECT(32,20), "S7698C3.s7698c3f2");
    check_field_offset(lv, s7698c3f3, ABISELECT(40,24), "S7698C3.s7698c3f3");
    check_field_offset(lv, s7698c3f4, ABISELECT(42,26), "S7698C3.s7698c3f4");
    test_class_info(&lv, &cd_S7698C3);
    dp->~S7698C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7698C3(Test_S7698C3, "S7698C3", ABISELECT(128,76));

#else // __cplusplus

extern void _ZN7S7698C3C1Ev();
extern void _ZN7S7698C3D1Ev();
Name_Map name_map_S7698C3[] = {
  NSPAIR(_ZN7S7698C3C1Ev),
  NSPAIR(_ZN7S7698C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7698C4;
extern VTBL_ENTRY _ZTI7S7698C4[];
extern  VTBL_ENTRY _ZTV7S7698C4[];
static Base_Class bases_S7698C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C28_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
    2, //immediately_derived
  0, 0},
  {&cd_S2791C3,    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
    2, //immediately_derived
  0, 0},
  {&cd_S7698C4,    ABISELECT(48,28), //bcp->offset
    3, //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 _ZTI7S7698C3[];
extern void _ZN7S7698C42v2Ev();
static  VTBL_ENTRY vtc_S7698C3[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7698C3[0]),
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7698C3[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
};
extern VTBL_ENTRY _ZTV7S7698C3[];
static  VTT_ENTRY vtt_S7698C3[] = {
  {&(_ZTV7S7698C3[3]),  3,7},
  {&(_ZTV7S7698C3[6]),  6,7},
};
extern VTBL_ENTRY _ZTI7S7698C3[];
extern  VTBL_ENTRY _ZTV7S7698C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7698C3[];
Class_Descriptor cd_S7698C3 = {  "S7698C3", // class name
  bases_S7698C3, 3,
  &(vtc_S7698C3[0]), // expected_vtbl_contents
  &(vtt_S7698C3[0]), // expected_vtt_contents
  ABISELECT(128,76), // object size
  NSPAIRA(_ZTI7S7698C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7698C3),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7698C3),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  S7698C7  : S2791C3 , virtual S7698C3 , S2398C28_nt , S7698C4 {
  __tsi64 s7698c7f0[8];
  int s7698c7f1;
  long s7698c7f2;
  ::S2791C3 s7698c7f3;
  short s7698c7f4;
  ::S7698C4 s7698c7f5[2];
  virtual  ~S7698C7(); // _ZN7S7698C7D2Ev
  S7698C7(); // tgen
};
//SIG(-1 S7698C7) C1{ BC2{ m Fp FL Fi FC3{ m Fc[2]} FC3 Fi} VBC4{ VBC5{ BC3 BC2 v1 FD Fi} Fp FD Fp Fs Fc} BC3 BC5 vd FL[8] Fi Fl FC2 Fs FC5[2]}


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

static void Test_S7698C7()
{
  extern Class_Descriptor cd_S7698C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(34,88)];
    init_test(&cd_S7698C7, buf);
    S7698C7 *dp, &lv = *(dp=new (buf) S7698C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,348), "sizeof(S7698C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7698C7)");
    /*is_ambiguous_... S7698C7::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*), ABISELECT(72,48), "S7698C7");
    /*is_ambiguous_... S7698C7::S7698C4 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7698C4*), ABISELECT(456,304), "S7698C7");
    /*is_ambiguous_... S7698C7::S7698C4 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7698C4*), ABISELECT(464,308), "S7698C7");
    check_base_class_offset(lv, (S7698C4*)(S7698C3*), ABISELECT(448,300), "S7698C7");
    check_base_class_offset(lv, (S7698C3*), ABISELECT(400,272), "S7698C7");
    /*is_ambiguous_... S7698C7::S2398C28_nt */ AMB_check_base_class_offset(lv, (S2398C28_nt*), ABISELECT(104,72), "S7698C7");
    /*is_ambiguous_... S7698C7::S7698C4 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7698C4*), ABISELECT(8,4), "S7698C7");
    /*is_ambiguous_... S7698C7::S7698C4 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7698C4*), ABISELECT(16,8), "S7698C7");
    /*is_ambiguous_... S7698C7::S7698C4 */ AMB_check_base_class_offset(lv, (S7698C4*), 0, "S7698C7");
    check_field_offset(lv, s7698c7f0, ABISELECT(112,76), "S7698C7.s7698c7f0");
    check_field_offset(lv, s7698c7f1, ABISELECT(176,140), "S7698C7.s7698c7f1");
    check_field_offset(lv, s7698c7f2, ABISELECT(184,144), "S7698C7.s7698c7f2");
    check_field_offset(lv, s7698c7f3, ABISELECT(192,148), "S7698C7.s7698c7f3");
    check_field_offset(lv, s7698c7f4, ABISELECT(224,172), "S7698C7.s7698c7f4");
    check_field_offset(lv, s7698c7f5, ABISELECT(240,176), "S7698C7.s7698c7f5");
    test_class_info(&lv, &cd_S7698C7);
    dp->~S7698C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7698C7(Test_S7698C7, "S7698C7", ABISELECT(528,348));

#else // __cplusplus

extern void _ZN7S7698C7C1Ev();
extern void _ZN7S7698C7D2Ev();
Name_Map name_map_S7698C7[] = {
  NSPAIR(_ZN7S7698C7C1Ev),
  NSPAIR(_ZN7S7698C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7698C4;
extern VTBL_ENTRY _ZTI7S7698C4[];
extern  VTBL_ENTRY _ZTV7S7698C4[];
extern Class_Descriptor cd_S7698C3;
extern VTBL_ENTRY _ZTI7S7698C3[];
extern  VTBL_ENTRY _ZTV7S7698C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7698C3[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7698C4;
extern VTBL_ENTRY _ZTI7S7698C4[];
extern  VTBL_ENTRY _ZTV7S7698C4[];
static Base_Class bases_S7698C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2791C3,    ABISELECT(72,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
  1, 0},
  {&cd_S2398C28_nt,    ABISELECT(456,304), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2791C3,    ABISELECT(464,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7698C4,    ABISELECT(448,300), //bcp->offset
    10, //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
    4, //immediately_derived
  0, 1},
  {&cd_S7698C3,    ABISELECT(400,272), //bcp->offset
    7, //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_S2398C28_nt,    ABISELECT(104,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
    -1, //immediately_derived
  1, 0},
  {&cd_S2398C28_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
    8, //immediately_derived
  0, 0},
  {&cd_S2791C3,    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
    8, //immediately_derived
  0, 0},
  {&cd_S7698C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7698C7[];
extern void _ZN7S7698C42v2Ev();
extern void _ZN7S7698C7D1Ev();
extern void _ZN7S7698C7D0Ev();
extern void _ZN7S7698C42v2Ev();
static  VTBL_ENTRY vtc_S7698C7[] = {
  ABISELECT(448,300),
  ABISELECT(400,272),
  0,
  (VTBL_ENTRY)&(_ZTI7S7698C7[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7698C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7698C7D0Ev,
  ABISELECT(48,28),
  ABISELECT(-400,-272),
  (VTBL_ENTRY)&(_ZTI7S7698C7[0]),
  0,
  ABISELECT(-448,-300),
  (VTBL_ENTRY)&(_ZTI7S7698C7[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
};
extern VTBL_ENTRY _ZTV7S7698C7[];
static  VTBL_ENTRY _tg__ZTV7S7698C3__7S7698C7[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7698C3[0]),
};
extern void _ZN7S7698C42v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7698C4__7S7698C3__7S7698C7[] = {
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7698C3[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
};
static  VTT_ENTRY vtt_S7698C7[] = {
  {&(_ZTV7S7698C7[4]),  4,14},
  {&(_ZTV7S7698C7[10]),  10,14},
  {&(_ZTV7S7698C7[13]),  13,14},
  {&(_tg__ZTV7S7698C3__7S7698C7[3]),  3,3},
  {&(_tg__ZTV7S7698C4__7S7698C3__7S7698C7[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7698C7[];
extern  VTBL_ENTRY _ZTV7S7698C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7698C7[];
Class_Descriptor cd_S7698C7 = {  "S7698C7", // class name
  bases_S7698C7, 9,
  &(vtc_S7698C7[0]), // expected_vtbl_contents
  &(vtt_S7698C7[0]), // expected_vtt_contents
  ABISELECT(528,348), // object size
  NSPAIRA(_ZTI7S7698C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7698C7),14, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7698C7),5, //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  S7698C2  : virtual S7698C3 , S7698C4 , virtual S7698C7 , S2791C3 {
  int s7698c2f0;
  void *s7698c2f1[2];
  int s7698c2f2;
  void *s7698c2f3;
  virtual void  v3(); // _ZN7S7698C22v3Ev
  ~S7698C2(); // tgen
  S7698C2(); // tgen
};
//SIG(-1 S7698C2) C1{ VBC2{ VBC3{ BC4{ m Fc[2]} BC5{ m Fp FL Fi FC4 FC4 Fi} v2 FD Fi} Fp FD Fp Fs Fc} BC3 VBC6{ BC5 VBC2 BC4 BC3 vd FL[8] Fi Fl FC5 Fs FC3[2]} BC5 v1 Fi Fp[2] Fi Fp}


void  S7698C2 ::v3(){vfunc_called(this, "_ZN7S7698C22v3Ev");}
S7698C2 ::~S7698C2(){ note_dtor("S7698C2", this);} // tgen
S7698C2 ::S7698C2(){ note_ctor("S7698C2", this);} // tgen

static void Test_S7698C2()
{
  extern Class_Descriptor cd_S7698C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(43,111)];
    init_test(&cd_S7698C2, buf);
    S7698C2 *dp, &lv = *(dp=new (buf) S7698C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(672,440), "sizeof(S7698C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7698C2)");
    /*is_ambiguous_... S7698C2::S7698C4 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7698C4*), ABISELECT(200,124), "S7698C2");
    /*is_ambiguous_... S7698C2::S7698C4 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7698C4*), ABISELECT(208,128), "S7698C2");
    check_base_class_offset(lv, (S7698C4*)(S7698C3*), ABISELECT(192,120), "S7698C2");
    check_base_class_offset(lv, (S7698C3*), ABISELECT(144,92), "S7698C2");
    check_base_class_offset(lv, (S7698C3*)(S7698C7*), ABISELECT(144,92), "S7698C2");
    /*is_ambiguous_... S7698C2::S7698C4 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7698C4*), ABISELECT(8,4), "S7698C2");
    /*is_ambiguous_... S7698C2::S7698C4 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7698C4*), ABISELECT(16,8), "S7698C2");
    /*is_ambiguous_... S7698C2::S7698C4 */ AMB_check_base_class_offset(lv, (S7698C4*), 0, "S7698C2");
    /*is_ambiguous_... S7698C7::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7698C7*), ABISELECT(344,216), "S7698C2");
    /*is_ambiguous_... S7698C7::S2398C28_nt */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7698C7*), ABISELECT(376,240), "S7698C2");
    /*is_ambiguous_... S7698C7::S7698C4 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7698C4*)(S7698C7*), ABISELECT(280,172), "S7698C2");
    /*is_ambiguous_... S7698C7::S7698C4 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7698C4*)(S7698C7*), ABISELECT(288,176), "S7698C2");
    /*is_ambiguous_... S7698C7::S7698C4 */ AMB_check_base_class_offset(lv, (S7698C4*)(S7698C7*), ABISELECT(272,168), "S7698C2");
    check_base_class_offset(lv, (S7698C7*), ABISELECT(272,168), "S7698C2");
    /*is_ambiguous_... S7698C2::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*), ABISELECT(72,48), "S7698C2");
    check_field_offset(lv, s7698c2f0, ABISELECT(104,72), "S7698C2.s7698c2f0");
    check_field_offset(lv, s7698c2f1, ABISELECT(112,76), "S7698C2.s7698c2f1");
    check_field_offset(lv, s7698c2f2, ABISELECT(128,84), "S7698C2.s7698c2f2");
    check_field_offset(lv, s7698c2f3, ABISELECT(136,88), "S7698C2.s7698c2f3");
    test_class_info(&lv, &cd_S7698C2);
    dp->~S7698C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7698C2(Test_S7698C2, "S7698C2", ABISELECT(672,440));

#else // __cplusplus

extern void _ZN7S7698C2C1Ev();
extern void _ZN7S7698C2D1Ev();
Name_Map name_map_S7698C2[] = {
  NSPAIR(_ZN7S7698C2C1Ev),
  NSPAIR(_ZN7S7698C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7698C4;
extern VTBL_ENTRY _ZTI7S7698C4[];
extern  VTBL_ENTRY _ZTV7S7698C4[];
extern Class_Descriptor cd_S7698C3;
extern VTBL_ENTRY _ZTI7S7698C3[];
extern  VTBL_ENTRY _ZTV7S7698C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7698C3[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7698C4;
extern VTBL_ENTRY _ZTI7S7698C4[];
extern  VTBL_ENTRY _ZTV7S7698C4[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7698C4;
extern VTBL_ENTRY _ZTI7S7698C4[];
extern  VTBL_ENTRY _ZTV7S7698C4[];
extern Class_Descriptor cd_S7698C7;
extern VTBL_ENTRY _ZTI7S7698C7[];
extern  VTBL_ENTRY _ZTV7S7698C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7698C7[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
static Base_Class bases_S7698C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C28_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
    2, //immediately_derived
  0, 0},
  {&cd_S2791C3,    ABISELECT(208,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
    2, //immediately_derived
  0, 0},
  {&cd_S7698C4,    ABISELECT(192,120), //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
    3, //immediately_derived
  0, 1},
  {&cd_S7698C3,    ABISELECT(144,92), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2398C28_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
    6, //immediately_derived
  0, 0},
  {&cd_S2791C3,    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
    6, //immediately_derived
  0, 0},
  {&cd_S7698C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S2791C3,    ABISELECT(344,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2398C28_nt,    ABISELECT(376,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2398C28_nt,    ABISELECT(280,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
    11, //immediately_derived
  0, 0},
  {&cd_S2791C3,    ABISELECT(288,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
    11, //immediately_derived
  0, 0},
  {&cd_S7698C4,    ABISELECT(272,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
    3, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7698C7,    ABISELECT(272,168), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2791C3,    ABISELECT(72,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
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7698C2[];
extern void _ZN7S7698C42v2Ev();
extern void _ZN7S7698C22v3Ev();
extern void _ZN7S7698C2D1Ev();
extern void _ZN7S7698C2D0Ev();
extern void _ZN7S7698C42v2Ev();
extern void _ZN7S7698C42v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S7698C2D1Ev,_ZTv0_n24_N7S7698C2D1Ev)();
extern void ABISELECT(_ZThn272_N7S7698C2D1Ev,_ZThn168_N7S7698C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7698C2D0Ev,_ZTv0_n24_N7S7698C2D0Ev)();
extern void ABISELECT(_ZThn272_N7S7698C2D0Ev,_ZThn168_N7S7698C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7698C2[] = {
  ABISELECT(272,168),
  ABISELECT(192,120),
  ABISELECT(144,92),
  0,
  (VTBL_ENTRY)&(_ZTI7S7698C2[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7698C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7698C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7698C2D0Ev,
  ABISELECT(48,28),
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI7S7698C2[0]),
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI7S7698C2[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  ABISELECT(-272,-168),
  0,
  ABISELECT(-80,-48),
  ABISELECT(-128,-76),
  ABISELECT(-272,-168),
  (VTBL_ENTRY)&(_ZTI7S7698C2[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7698C2D1Ev,_ZTv0_n24_N7S7698C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7698C2D0Ev,_ZTv0_n24_N7S7698C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S7698C2[];
static  VTBL_ENTRY _tg__ZTV7S7698C3__7S7698C2[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7698C3[0]),
};
extern void _ZN7S7698C42v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7698C4__7S7698C3__7S7698C2[] = {
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7698C3[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
};
extern void _ZN7S7698C42v2Ev();
extern void _ZN7S7698C7D1Ev();
extern void _ZN7S7698C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7698C7__7S7698C2[] = {
  ABISELECT(-80,-48),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7698C7[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7698C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7698C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7698C3__7S7698C7__7S7698C2[] = {
  ABISELECT(48,28),
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S7698C7[0]),
};
extern void _ZN7S7698C42v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7698C4__7S7698C7__7S7698C2[] = {
  0,
  ABISELECT(80,48),
  (VTBL_ENTRY)&(_ZTI7S7698C7[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
};
static  VTT_ENTRY vtt_S7698C2[] = {
  {&(_ZTV7S7698C2[5]),  5,25},
  {&(_ZTV7S7698C2[12]),  12,25},
  {&(_ZTV7S7698C2[15]),  15,25},
  {&(_ZTV7S7698C2[22]),  22,25},
  {&(_tg__ZTV7S7698C3__7S7698C2[3]),  3,3},
  {&(_tg__ZTV7S7698C4__7S7698C3__7S7698C2[3]),  3,4},
  {&(_tg__ZTV7S7698C7__7S7698C2[4]),  4,7},
  {&(_tg__ZTV7S7698C3__7S7698C7__7S7698C2[3]),  3,3},
  {&(_tg__ZTV7S7698C4__7S7698C7__7S7698C2[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7698C2[];
extern  VTBL_ENTRY _ZTV7S7698C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7698C2[];
static VTBL_ENTRY alt_thunk_names159[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7698C2D0Ev,_ZTv0_n24_N7S7698C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S7698C2D0Ev,_ZThn168_N7S7698C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7698C2D1Ev,_ZTv0_n24_N7S7698C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S7698C2D1Ev,_ZThn168_N7S7698C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7698C2 = {  "S7698C2", // class name
  bases_S7698C2, 14,
  &(vtc_S7698C2[0]), // expected_vtbl_contents
  &(vtt_S7698C2[0]), // expected_vtt_contents
  ABISELECT(672,440), // object size
  NSPAIRA(_ZTI7S7698C2),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7698C2),25, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7698C2),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names159,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7698C10  {
  void *s7698c10f0[2];
  int s7698c10f1[2];
  ::S7698C7 s7698c10f2;
  virtual void  v4(); // _ZN8S7698C102v4Ev
  ~S7698C10(); // tgen
  S7698C10(); // tgen
};
//SIG(-1 S7698C10) C1{ v1 Fp[2] Fi[2] FC2{ BC3{ m Fp FL Fi FC4{ m Fc[2]} FC4 Fi} VBC5{ VBC6{ BC4 BC3 v2 FD Fi} Fp FD Fp Fs Fc} BC4 BC6 vd FL[8] Fi Fl FC3 Fs FC6[2]}}


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

static void Test_S7698C10()
{
  extern Class_Descriptor cd_S7698C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,93)];
    init_test(&cd_S7698C10, buf);
    S7698C10 *dp, &lv = *(dp=new (buf) S7698C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,368), "sizeof(S7698C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7698C10)");
    check_field_offset(lv, s7698c10f0, ABISELECT(8,4), "S7698C10.s7698c10f0");
    check_field_offset(lv, s7698c10f1, ABISELECT(24,12), "S7698C10.s7698c10f1");
    check_field_offset(lv, s7698c10f2, ABISELECT(32,20), "S7698C10.s7698c10f2");
    test_class_info(&lv, &cd_S7698C10);
    dp->~S7698C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7698C10(Test_S7698C10, "S7698C10", ABISELECT(560,368));

#else // __cplusplus

extern void _ZN8S7698C10C1Ev();
extern void _ZN8S7698C10D1Ev();
Name_Map name_map_S7698C10[] = {
  NSPAIR(_ZN8S7698C10C1Ev),
  NSPAIR(_ZN8S7698C10D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S7698C10[];
extern void _ZN8S7698C102v4Ev();
static  VTBL_ENTRY vtc_S7698C10[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S7698C10[0]),
  (VTBL_ENTRY)&_ZN8S7698C102v4Ev,
};
extern VTBL_ENTRY _ZTI8S7698C10[];
extern  VTBL_ENTRY _ZTV8S7698C10[];
Class_Descriptor cd_S7698C10 = {  "S7698C10", // class name
  0,0,//no base classes
  &(vtc_S7698C10[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(560,368), // object size
  NSPAIRA(_ZTI8S7698C10),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S7698C10),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7698C9  : S2398C28_nt , virtual S7698C4 , virtual S7698C7 , virtual S7698C10 , virtual S2791C3 {
  int s7698c9f0[2];
  void *s7698c9f1[3];
  int s7698c9f2;
  ::S7698C7 s7698c9f3;
  void *s7698c9f4[4];
  virtual void  v5(); // _ZN7S7698C92v5Ev
  ~S7698C9(); // tgen
  S7698C9(); // tgen
};
//SIG(-1 S7698C9) C1{ BC2{ m Fc[2]} VBC3{ BC2 BC4{ m Fp FL Fi FC2 FC2 Fi} v2 FD Fi} VBC5{ BC4 VBC6{ VBC3 Fp FD Fp Fs Fc} BC2 BC3 vd FL[8] Fi Fl FC4 Fs FC3[2]} VBC7{ v3 Fp[2] Fi[2] FC5} VBC4 v1 Fi[2] Fp[3] Fi FC5 Fp[4]}


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

static void Test_S7698C9()
{
  extern Class_Descriptor cd_S7698C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(110,285)];
    init_test(&cd_S7698C9, buf);
    S7698C9 *dp, &lv = *(dp=new (buf) S7698C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1744,1136), "sizeof(S7698C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7698C9)");
    /*is_ambiguous_... S7698C9::S2398C28_nt */ AMB_check_base_class_offset(lv, (S2398C28_nt*), ABISELECT(8,4), "S7698C9");
    /*is_ambiguous_... S7698C9::S7698C4 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7698C4*), ABISELECT(632,400), "S7698C9");
    /*is_ambiguous_... S7698C9::S7698C4 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7698C4*), ABISELECT(640,404), "S7698C9");
    /*is_ambiguous_... S7698C9::S7698C4 */ AMB_check_base_class_offset(lv, (S7698C4*), ABISELECT(624,396), "S7698C9");
    check_base_class_offset(lv, (S7698C4*)(S7698C3*), ABISELECT(624,396), "S7698C9");
    /*is_ambiguous_... S7698C7::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7698C7*), ABISELECT(776,492), "S7698C9");
    check_base_class_offset(lv, (S7698C3*)(S7698C7*), ABISELECT(1104,716), "S7698C9");
    /*is_ambiguous_... S7698C7::S2398C28_nt */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7698C7*), ABISELECT(808,516), "S7698C9");
    /*is_ambiguous_... S7698C7::S7698C4 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7698C4*)(S7698C7*), ABISELECT(712,448), "S7698C9");
    /*is_ambiguous_... S7698C7::S7698C4 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7698C4*)(S7698C7*), ABISELECT(720,452), "S7698C9");
    /*is_ambiguous_... S7698C7::S7698C4 */ AMB_check_base_class_offset(lv, (S7698C4*)(S7698C7*), ABISELECT(704,444), "S7698C9");
    check_base_class_offset(lv, (S7698C7*), ABISELECT(704,444), "S7698C9");
    check_base_class_offset(lv, (S7698C10*), ABISELECT(1152,744), "S7698C9");
    /*is_ambiguous_... S7698C9::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*), ABISELECT(1712,1112), "S7698C9");
    check_field_offset(lv, s7698c9f0, ABISELECT(12,8), "S7698C9.s7698c9f0");
    check_field_offset(lv, s7698c9f1, ABISELECT(24,16), "S7698C9.s7698c9f1");
    check_field_offset(lv, s7698c9f2, ABISELECT(48,28), "S7698C9.s7698c9f2");
    check_field_offset(lv, s7698c9f3, ABISELECT(64,32), "S7698C9.s7698c9f3");
    check_field_offset(lv, s7698c9f4, ABISELECT(592,380), "S7698C9.s7698c9f4");
    test_class_info(&lv, &cd_S7698C9);
    dp->~S7698C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7698C9(Test_S7698C9, "S7698C9", ABISELECT(1744,1136));

#else // __cplusplus

extern void _ZN7S7698C9C1Ev();
extern void _ZN7S7698C9D1Ev();
Name_Map name_map_S7698C9[] = {
  NSPAIR(_ZN7S7698C9C1Ev),
  NSPAIR(_ZN7S7698C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7698C4;
extern VTBL_ENTRY _ZTI7S7698C4[];
extern  VTBL_ENTRY _ZTV7S7698C4[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7698C3;
extern VTBL_ENTRY _ZTI7S7698C3[];
extern  VTBL_ENTRY _ZTV7S7698C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7698C3[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7698C4;
extern VTBL_ENTRY _ZTI7S7698C4[];
extern  VTBL_ENTRY _ZTV7S7698C4[];
extern Class_Descriptor cd_S7698C7;
extern VTBL_ENTRY _ZTI7S7698C7[];
extern  VTBL_ENTRY _ZTV7S7698C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7698C7[];
extern Class_Descriptor cd_S7698C10;
extern VTBL_ENTRY _ZTI8S7698C10[];
extern  VTBL_ENTRY _ZTV8S7698C10[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
static Base_Class bases_S7698C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C28_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},
  {&cd_S2398C28_nt,    ABISELECT(632,400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2791C3,    ABISELECT(640,404), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7698C4,    ABISELECT(624,396), //bcp->offset
    10, //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_S2791C3,    ABISELECT(776,492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7698C3,    ABISELECT(1104,716), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S2398C28_nt,    ABISELECT(808,516), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2398C28_nt,    ABISELECT(712,448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2791C3,    ABISELECT(720,452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7698C4,    ABISELECT(704,444), //bcp->offset
    -1, //bcp->virtual_function_table_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
    10, //immediately_derived
  0, 0},
  {&cd_S7698C7,    ABISELECT(704,444), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7698C10,    ABISELECT(1152,744), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2791C3,    ABISELECT(1712,1112), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7698C9[];
extern void _ZN7S7698C92v5Ev();
extern void _ZN7S7698C9D1Ev();
extern void _ZN7S7698C9D0Ev();
extern void _ZN7S7698C42v2Ev();
extern void _ZN7S7698C42v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S7698C9D1Ev,_ZTv0_n24_N7S7698C9D1Ev)();
extern void ABISELECT(_ZThn704_N7S7698C9D1Ev,_ZThn444_N7S7698C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7698C9D0Ev,_ZTv0_n24_N7S7698C9D0Ev)();
extern void ABISELECT(_ZThn704_N7S7698C9D0Ev,_ZThn444_N7S7698C9D0Ev)() __attribute__((weak));
extern void _ZN8S7698C102v4Ev();
static  VTBL_ENTRY vtc_S7698C9[] = {
  ABISELECT(1712,1112),
  ABISELECT(1152,744),
  ABISELECT(1104,716),
  ABISELECT(704,444),
  ABISELECT(624,396),
  0,
  (VTBL_ENTRY)&(_ZTI7S7698C9[0]),
  (VTBL_ENTRY)&_ZN7S7698C92v5Ev,
  (VTBL_ENTRY)&_ZN7S7698C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7698C9D0Ev,
  0,
  ABISELECT(-624,-396),
  (VTBL_ENTRY)&(_ZTI7S7698C9[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  ABISELECT(-704,-444),
  0,
  ABISELECT(-80,-48),
  ABISELECT(400,272),
  ABISELECT(-704,-444),
  (VTBL_ENTRY)&(_ZTI7S7698C9[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7698C9D1Ev,_ZTv0_n24_N7S7698C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7698C9D0Ev,_ZTv0_n24_N7S7698C9D0Ev),
  ABISELECT(-480,-320),
  ABISELECT(-1104,-716),
  (VTBL_ENTRY)&(_ZTI7S7698C9[0]),
  0,
  ABISELECT(-1152,-744),
  (VTBL_ENTRY)&(_ZTI7S7698C9[0]),
  (VTBL_ENTRY)&_ZN8S7698C102v4Ev,
};
extern VTBL_ENTRY _ZTV7S7698C9[];
extern void _ZN7S7698C42v2Ev();
extern void _ZN7S7698C7D1Ev();
extern void _ZN7S7698C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7698C7__7S7698C9[] = {
  ABISELECT(-80,-48),
  ABISELECT(400,272),
  0,
  (VTBL_ENTRY)&(_ZTI7S7698C7[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7698C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7698C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7698C3__7S7698C7__7S7698C9[] = {
  ABISELECT(-480,-320),
  ABISELECT(-400,-272),
  (VTBL_ENTRY)&(_ZTI7S7698C7[0]),
};
extern void _ZN7S7698C42v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7698C4__7S7698C7__7S7698C9[] = {
  0,
  ABISELECT(80,48),
  (VTBL_ENTRY)&(_ZTI7S7698C7[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7698C3__7S7698C9[] = {
  ABISELECT(-480,-320),
  0,
  (VTBL_ENTRY)&(_ZTI7S7698C3[0]),
};
extern void _ZN7S7698C42v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7698C4__7S7698C3__7S7698C9[] = {
  0,
  ABISELECT(480,320),
  (VTBL_ENTRY)&(_ZTI7S7698C3[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
};
static  VTT_ENTRY vtt_S7698C9[] = {
  {&(_ZTV7S7698C9[7]),  7,30},
  {&(_ZTV7S7698C9[13]),  13,30},
  {&(_ZTV7S7698C9[20]),  20,30},
  {&(_ZTV7S7698C9[26]),  26,30},
  {&(_ZTV7S7698C9[29]),  29,30},
  {&(_tg__ZTV7S7698C7__7S7698C9[4]),  4,7},
  {&(_tg__ZTV7S7698C3__7S7698C7__7S7698C9[3]),  3,3},
  {&(_tg__ZTV7S7698C4__7S7698C7__7S7698C9[3]),  3,4},
  {&(_tg__ZTV7S7698C3__7S7698C9[3]),  3,3},
  {&(_tg__ZTV7S7698C4__7S7698C3__7S7698C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7698C9[];
extern  VTBL_ENTRY _ZTV7S7698C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7698C9[];
static VTBL_ENTRY alt_thunk_names160[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7698C9D0Ev,_ZTv0_n24_N7S7698C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N7S7698C9D0Ev,_ZThn444_N7S7698C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7698C9D1Ev,_ZTv0_n24_N7S7698C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn704_N7S7698C9D1Ev,_ZThn444_N7S7698C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7698C9 = {  "S7698C9", // class name
  bases_S7698C9, 13,
  &(vtc_S7698C9[0]), // expected_vtbl_contents
  &(vtt_S7698C9[0]), // expected_vtt_contents
  ABISELECT(1744,1136), // object size
  NSPAIRA(_ZTI7S7698C9),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7698C9),30, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7698C9),10, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names160,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7698C8  : S7698C2 , S7698C9 {
  ::S2791C3 s7698c8f0;
  ~S7698C8(); // tgen
  S7698C8(); // tgen
};
//SIG(-1 S7698C8) C1{ BC2{ VBC3{ VBC4{ BC5{ m Fc[2]} BC6{ m Fp FL Fi FC5 FC5 Fi} v1 FD Fi} Fp FD Fp Fs Fc} BC4 VBC7{ BC6 VBC3 BC5 BC4 vd FL[8] Fi Fl FC6 Fs FC4[2]} BC6 v2 Fi Fp[2] Fi Fp} BC8{ BC5 VBC4 VBC7 VBC9{ v3 Fp[2] Fi[2] FC7} VBC6 v4 Fi[2] Fp[3] Fi FC7 Fp[4]} FC6}


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

static void Test_S7698C8()
{
  extern Class_Descriptor cd_S7698C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(121,314)];
    init_test(&cd_S7698C8, buf);
    S7698C8 *dp, &lv = *(dp=new (buf) S7698C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1920,1252), "sizeof(S7698C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7698C8)");
    /*is_ambiguous_... S7698C8::S7698C4 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7698C4*), ABISELECT(856,544), "S7698C8");
    /*is_ambiguous_... S7698C8::S7698C4 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7698C4*), ABISELECT(864,548), "S7698C8");
    check_base_class_offset(lv, (S7698C4*)(S7698C3*), ABISELECT(848,540), "S7698C8");
    /*is_ambiguous_... S7698C9::S7698C4 */ AMB_check_base_class_offset(lv, (S7698C4*)(S7698C9*), ABISELECT(848,540), "S7698C8");
    check_base_class_offset(lv, (S7698C3*)(S7698C2*), ABISELECT(800,512), "S7698C8");
    check_base_class_offset(lv, (S7698C3*)(S7698C7*), ABISELECT(800,512), "S7698C8");
    /*is_ambiguous_... S7698C2::S7698C4 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7698C4*)(S7698C2*), ABISELECT(8,4), "S7698C8");
    /*is_ambiguous_... S7698C2::S7698C4 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7698C4*)(S7698C2*), ABISELECT(16,8), "S7698C8");
    /*is_ambiguous_... S7698C2::S7698C4 */ AMB_check_base_class_offset(lv, (S7698C4*)(S7698C2*), 0, "S7698C8");
    /*is_ambiguous_... S7698C7::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7698C7*), ABISELECT(1000,636), "S7698C8");
    /*is_ambiguous_... S7698C7::S2398C28_nt */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7698C7*), ABISELECT(1032,660), "S7698C8");
    /*is_ambiguous_... S7698C7::S7698C4 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7698C4*)(S7698C7*), ABISELECT(936,592), "S7698C8");
    /*is_ambiguous_... S7698C7::S7698C4 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7698C4*)(S7698C7*), ABISELECT(944,596), "S7698C8");
    /*is_ambiguous_... S7698C7::S7698C4 */ AMB_check_base_class_offset(lv, (S7698C4*)(S7698C7*), ABISELECT(928,588), "S7698C8");
    check_base_class_offset(lv, (S7698C7*)(S7698C2*), ABISELECT(928,588), "S7698C8");
    check_base_class_offset(lv, (S7698C7*)(S7698C9*), ABISELECT(928,588), "S7698C8");
    /*is_ambiguous_... S7698C2::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7698C2*), ABISELECT(72,48), "S7698C8");
    check_base_class_offset(lv, (S7698C2*), 0, "S7698C8");
    /*is_ambiguous_... S7698C9::S2398C28_nt */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7698C9*), ABISELECT(152,96), "S7698C8");
    check_base_class_offset(lv, (S7698C10*)(S7698C9*), ABISELECT(1328,860), "S7698C8");
    /*is_ambiguous_... S7698C9::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7698C9*), ABISELECT(1888,1228), "S7698C8");
    check_base_class_offset(lv, (S7698C9*), ABISELECT(144,92), "S7698C8");
    check_field_offset(lv, s7698c8f0, ABISELECT(768,488), "S7698C8.s7698c8f0");
    test_class_info(&lv, &cd_S7698C8);
    dp->~S7698C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7698C8(Test_S7698C8, "S7698C8", ABISELECT(1920,1252));

#else // __cplusplus

extern void _ZN7S7698C8C1Ev();
extern void _ZN7S7698C8D1Ev();
Name_Map name_map_S7698C8[] = {
  NSPAIR(_ZN7S7698C8C1Ev),
  NSPAIR(_ZN7S7698C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7698C4;
extern VTBL_ENTRY _ZTI7S7698C4[];
extern  VTBL_ENTRY _ZTV7S7698C4[];
extern Class_Descriptor cd_S7698C3;
extern VTBL_ENTRY _ZTI7S7698C3[];
extern  VTBL_ENTRY _ZTV7S7698C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7698C3[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7698C4;
extern VTBL_ENTRY _ZTI7S7698C4[];
extern  VTBL_ENTRY _ZTV7S7698C4[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7698C4;
extern VTBL_ENTRY _ZTI7S7698C4[];
extern  VTBL_ENTRY _ZTV7S7698C4[];
extern Class_Descriptor cd_S7698C7;
extern VTBL_ENTRY _ZTI7S7698C7[];
extern  VTBL_ENTRY _ZTV7S7698C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7698C7[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7698C2;
extern VTBL_ENTRY _ZTI7S7698C2[];
extern  VTBL_ENTRY _ZTV7S7698C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7698C2[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S7698C10;
extern VTBL_ENTRY _ZTI8S7698C10[];
extern  VTBL_ENTRY _ZTV8S7698C10[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7698C9;
extern VTBL_ENTRY _ZTI7S7698C9[];
extern  VTBL_ENTRY _ZTV7S7698C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7698C9[];
static Base_Class bases_S7698C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C28_nt,    ABISELECT(856,544), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2791C3,    ABISELECT(864,548), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7698C4,    ABISELECT(848,540), //bcp->offset
    24, //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
    3, //immediately_derived
  0, 1},
  {&cd_S7698C3,    ABISELECT(800,512), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S2398C28_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
    6, //immediately_derived
  0, 0},
  {&cd_S2791C3,    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
    6, //immediately_derived
  0, 0},
  {&cd_S7698C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S2791C3,    ABISELECT(1000,636), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2398C28_nt,    ABISELECT(1032,660), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2398C28_nt,    ABISELECT(936,592), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2791C3,    ABISELECT(944,596), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7698C4,    ABISELECT(928,588), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S7698C7,    ABISELECT(928,588), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2791C3,    ABISELECT(72,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
    14, //immediately_derived
  0, 0},
  {&cd_S7698C2,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2398C28_nt,    ABISELECT(152,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
    18, //immediately_derived
  0, 0},
  {&cd_S7698C10,    ABISELECT(1328,860), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S2791C3,    ABISELECT(1888,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
    18, //immediately_derived
  0, 1},
  {&cd_S7698C9,    ABISELECT(144,92), //bcp->offset
    11, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7698C8[];
extern void _ZN7S7698C42v2Ev();
extern void _ZN7S7698C22v3Ev();
extern void _ZN7S7698C8D1Ev();
extern void _ZN7S7698C8D0Ev();
extern void _ZN7S7698C92v5Ev();
extern void ABISELECT(_ZThn144_N7S7698C8D1Ev,_ZThn92_N7S7698C8D1Ev)();
extern void ABISELECT(_ZThn144_N7S7698C8D0Ev,_ZThn92_N7S7698C8D0Ev)();
extern void _ZN7S7698C42v2Ev();
extern void _ZN7S7698C42v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S7698C8D1Ev,_ZTv0_n24_N7S7698C8D1Ev)();
extern void ABISELECT(_ZThn928_N7S7698C8D1Ev,_ZThn588_N7S7698C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7698C8D0Ev,_ZTv0_n24_N7S7698C8D0Ev)();
extern void ABISELECT(_ZThn928_N7S7698C8D0Ev,_ZThn588_N7S7698C8D0Ev)() __attribute__((weak));
extern void _ZN8S7698C102v4Ev();
static  VTBL_ENTRY vtc_S7698C8[] = {
  ABISELECT(1888,1228),
  ABISELECT(1328,860),
  ABISELECT(928,588),
  ABISELECT(848,540),
  ABISELECT(800,512),
  0,
  (VTBL_ENTRY)&(_ZTI7S7698C8[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7698C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7698C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7698C8D0Ev,
  ABISELECT(1744,1136),
  ABISELECT(1184,768),
  ABISELECT(656,420),
  ABISELECT(784,496),
  ABISELECT(704,448),
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI7S7698C8[0]),
  (VTBL_ENTRY)&_ZN7S7698C92v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S7698C8D1Ev,_ZThn92_N7S7698C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S7698C8D0Ev,_ZThn92_N7S7698C8D0Ev),
  ABISELECT(48,28),
  ABISELECT(-800,-512),
  (VTBL_ENTRY)&(_ZTI7S7698C8[0]),
  0,
  ABISELECT(-848,-540),
  (VTBL_ENTRY)&(_ZTI7S7698C8[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  ABISELECT(-928,-588),
  0,
  ABISELECT(-80,-48),
  ABISELECT(-128,-76),
  ABISELECT(-928,-588),
  (VTBL_ENTRY)&(_ZTI7S7698C8[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7698C8D1Ev,_ZTv0_n24_N7S7698C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7698C8D0Ev,_ZTv0_n24_N7S7698C8D0Ev),
  0,
  ABISELECT(-1328,-860),
  (VTBL_ENTRY)&(_ZTI7S7698C8[0]),
  (VTBL_ENTRY)&_ZN8S7698C102v4Ev,
};
extern VTBL_ENTRY _ZTV7S7698C8[];
extern void _ZN7S7698C42v2Ev();
extern void _ZN7S7698C22v3Ev();
extern void _ZN7S7698C2D1Ev();
extern void _ZN7S7698C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7698C2__7S7698C8[] = {
  ABISELECT(928,588),
  ABISELECT(848,540),
  ABISELECT(800,512),
  0,
  (VTBL_ENTRY)&(_ZTI7S7698C2[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7698C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7698C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7698C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7698C3__7S7698C2__7S7698C8[] = {
  ABISELECT(48,28),
  ABISELECT(-800,-512),
  (VTBL_ENTRY)&(_ZTI7S7698C2[0]),
};
extern void _ZN7S7698C42v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7698C4__7S7698C2__7S7698C8[] = {
  0,
  ABISELECT(-848,-540),
  (VTBL_ENTRY)&(_ZTI7S7698C2[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
};
extern void _ZN7S7698C42v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S7698C2D1Ev,_ZTv0_n24_N7S7698C2D1Ev)();
extern void ABISELECT(_ZThn928_N7S7698C2D1Ev,_ZThn588_N7S7698C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7698C2D0Ev,_ZTv0_n24_N7S7698C2D0Ev)();
extern void ABISELECT(_ZThn928_N7S7698C2D0Ev,_ZThn588_N7S7698C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7698C7__7S7698C2__7S7698C8[] = {
  ABISELECT(-928,-588),
  0,
  ABISELECT(-80,-48),
  ABISELECT(-128,-76),
  ABISELECT(-928,-588),
  (VTBL_ENTRY)&(_ZTI7S7698C2[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7698C2D1Ev,_ZTv0_n24_N7S7698C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7698C2D0Ev,_ZTv0_n24_N7S7698C2D0Ev),
};
extern void _ZN7S7698C92v5Ev();
extern void _ZN7S7698C9D1Ev();
extern void _ZN7S7698C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7698C9__7S7698C8[] = {
  ABISELECT(1744,1136),
  ABISELECT(1184,768),
  ABISELECT(656,420),
  ABISELECT(784,496),
  ABISELECT(704,448),
  0,
  (VTBL_ENTRY)&(_ZTI7S7698C9[0]),
  (VTBL_ENTRY)&_ZN7S7698C92v5Ev,
  (VTBL_ENTRY)&_ZN7S7698C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7698C9D0Ev,
};
extern void _ZN7S7698C42v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7698C4__7S7698C9__7S7698C8[] = {
  0,
  ABISELECT(-704,-448),
  (VTBL_ENTRY)&(_ZTI7S7698C9[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
};
extern void _ZN7S7698C42v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S7698C9D1Ev,_ZTv0_n24_N7S7698C9D1Ev)();
extern void ABISELECT(_ZThn784_N7S7698C9D1Ev,_ZThn496_N7S7698C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7698C9D0Ev,_ZTv0_n24_N7S7698C9D0Ev)();
extern void ABISELECT(_ZThn784_N7S7698C9D0Ev,_ZThn496_N7S7698C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7698C7__7S7698C9__7S7698C8[] = {
  ABISELECT(-784,-496),
  0,
  ABISELECT(-80,-48),
  ABISELECT(-128,-76),
  ABISELECT(-784,-496),
  (VTBL_ENTRY)&(_ZTI7S7698C9[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7698C9D1Ev,_ZTv0_n24_N7S7698C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7698C9D0Ev,_ZTv0_n24_N7S7698C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7698C3__7S7698C9__7S7698C8[] = {
  ABISELECT(48,28),
  ABISELECT(-656,-420),
  (VTBL_ENTRY)&(_ZTI7S7698C9[0]),
};
extern void _ZN8S7698C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7698C10__7S7698C9__7S7698C8[] = {
  0,
  ABISELECT(-1184,-768),
  (VTBL_ENTRY)&(_ZTI7S7698C9[0]),
  (VTBL_ENTRY)&_ZN8S7698C102v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7698C3__7S7698C8[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7698C3[0]),
};
extern void _ZN7S7698C42v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7698C4__7S7698C3__7S7698C8[] = {
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7698C3[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
};
extern void _ZN7S7698C42v2Ev();
extern void _ZN7S7698C7D1Ev();
extern void _ZN7S7698C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7698C7__7S7698C8[] = {
  ABISELECT(-80,-48),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7698C7[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7698C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7698C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7698C3__7S7698C7__7S7698C8[] = {
  ABISELECT(48,28),
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S7698C7[0]),
};
extern void _ZN7S7698C42v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7698C4__7S7698C7__7S7698C8[] = {
  0,
  ABISELECT(80,48),
  (VTBL_ENTRY)&(_ZTI7S7698C7[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
};
static  VTT_ENTRY vtt_S7698C8[] = {
  {&(_ZTV7S7698C8[7]),  7,41},
  {&(_tg__ZTV7S7698C2__7S7698C8[5]),  5,9},
  {&(_tg__ZTV7S7698C3__7S7698C2__7S7698C8[3]),  3,3},
  {&(_tg__ZTV7S7698C4__7S7698C2__7S7698C8[3]),  3,4},
  {&(_tg__ZTV7S7698C7__7S7698C2__7S7698C8[6]),  6,9},
  {&(_tg__ZTV7S7698C9__7S7698C8[7]),  7,10},
  {&(_tg__ZTV7S7698C4__7S7698C9__7S7698C8[3]),  3,4},
  {&(_tg__ZTV7S7698C7__7S7698C9__7S7698C8[6]),  6,9},
  {&(_tg__ZTV7S7698C3__7S7698C9__7S7698C8[3]),  3,3},
  {&(_tg__ZTV8S7698C10__7S7698C9__7S7698C8[3]),  3,4},
  {&(_ZTV7S7698C8[24]),  24,41},
  {&(_ZTV7S7698C8[27]),  27,41},
  {&(_ZTV7S7698C8[34]),  34,41},
  {&(_ZTV7S7698C8[18]),  18,41},
  {&(_ZTV7S7698C8[40]),  40,41},
  {&(_tg__ZTV7S7698C3__7S7698C8[3]),  3,3},
  {&(_tg__ZTV7S7698C4__7S7698C3__7S7698C8[3]),  3,4},
  {&(_tg__ZTV7S7698C7__7S7698C8[4]),  4,7},
  {&(_tg__ZTV7S7698C3__7S7698C7__7S7698C8[3]),  3,3},
  {&(_tg__ZTV7S7698C4__7S7698C7__7S7698C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7698C8[];
extern  VTBL_ENTRY _ZTV7S7698C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7698C8[];
static VTBL_ENTRY alt_thunk_names161[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7698C9D0Ev,_ZTv0_n24_N7S7698C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N7S7698C9D0Ev,_ZThn496_N7S7698C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7698C9D1Ev,_ZTv0_n24_N7S7698C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn784_N7S7698C9D1Ev,_ZThn496_N7S7698C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7698C2D0Ev,_ZTv0_n24_N7S7698C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn928_N7S7698C2D0Ev,_ZThn588_N7S7698C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7698C2D1Ev,_ZTv0_n24_N7S7698C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn928_N7S7698C2D1Ev,_ZThn588_N7S7698C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7698C8D0Ev,_ZTv0_n24_N7S7698C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn928_N7S7698C8D0Ev,_ZThn588_N7S7698C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7698C8D1Ev,_ZTv0_n24_N7S7698C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn928_N7S7698C8D1Ev,_ZThn588_N7S7698C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7698C8 = {  "S7698C8", // class name
  bases_S7698C8, 19,
  &(vtc_S7698C8[0]), // expected_vtbl_contents
  &(vtt_S7698C8[0]), // expected_vtt_contents
  ABISELECT(1920,1252), // object size
  NSPAIRA(_ZTI7S7698C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7698C8),41, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7698C8),20, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names161,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7698C1  : S7698C2 , S7698C8 , S7698C10 {
  void *s7698c1f0;
  int s7698c1f1;
  __tsi64 s7698c1f2;
  int s7698c1f3;
  virtual void  v1(); // _ZN7S7698C12v1Ev
  ~S7698C1(); // tgen
  S7698C1(); // tgen
};
//SIG(1 S7698C1) C1{ BC2{ VBC3{ VBC4{ BC5{ m Fc[2]} BC6{ m Fp FL Fi FC5 FC5 Fi} v2 FD Fi} Fp FD Fp Fs Fc} BC4 VBC7{ BC6 VBC3 BC5 BC4 vd FL[8] Fi Fl FC6 Fs FC4[2]} BC6 v3 Fi Fp[2] Fi Fp} BC8{ BC2 BC9{ BC5 VBC4 VBC7 VBC10{ v4 Fp[2] Fi[2] FC7} VBC6 v5 Fi[2] Fp[3] Fi FC7 Fp[4]} FC6} BC10 v1 Fp Fi FL Fi}


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

static void Test_S7698C1()
{
  extern Class_Descriptor cd_S7698C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(167,434)];
    init_test(&cd_S7698C1, buf);
    S7698C1 *dp, &lv = *(dp=new (buf) S7698C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2656,1732), "sizeof(S7698C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7698C1)");
    /*is_ambiguous_... S7698C1::S7698C4 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7698C4*), ABISELECT(1592,1024), "S7698C1");
    /*is_ambiguous_... S7698C1::S7698C4 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7698C4*), ABISELECT(1600,1028), "S7698C1");
    check_base_class_offset(lv, (S7698C4*)(S7698C3*), ABISELECT(1584,1020), "S7698C1");
    /*is_ambiguous_... S7698C9::S7698C4 */ AMB_check_base_class_offset(lv, (S7698C4*)(S7698C9*)(S7698C8*), ABISELECT(1584,1020), "S7698C1");
    /*is_ambiguous_... S7698C1::S7698C2 */ AMB_check_base_class_offset(lv, (S7698C3*)(S7698C2*), ABISELECT(1536,992), "S7698C1");
    check_base_class_offset(lv, (S7698C3*)(S7698C7*), ABISELECT(1536,992), "S7698C1");
    check_base_class_offset(lv, (S7698C3*)(S7698C2*)(S7698C8*), ABISELECT(1536,992), "S7698C1");
    /*is_ambiguous_... S7698C1::S7698C2 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7698C4*)(S7698C2*), ABISELECT(8,4), "S7698C1");
    /*is_ambiguous_... S7698C1::S7698C2 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7698C4*)(S7698C2*), ABISELECT(16,8), "S7698C1");
    /*is_ambiguous_... S7698C1::S7698C2 */ AMB_check_base_class_offset(lv, (S7698C4*)(S7698C2*), 0, "S7698C1");
    /*is_ambiguous_... S7698C7::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7698C7*), ABISELECT(1736,1116), "S7698C1");
    /*is_ambiguous_... S7698C7::S2398C28_nt */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7698C7*), ABISELECT(1768,1140), "S7698C1");
    /*is_ambiguous_... S7698C7::S7698C4 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7698C4*)(S7698C7*), ABISELECT(1672,1072), "S7698C1");
    /*is_ambiguous_... S7698C7::S7698C4 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7698C4*)(S7698C7*), ABISELECT(1680,1076), "S7698C1");
    /*is_ambiguous_... S7698C7::S7698C4 */ AMB_check_base_class_offset(lv, (S7698C4*)(S7698C7*), ABISELECT(1664,1068), "S7698C1");
    /*is_ambiguous_... S7698C1::S7698C2 */ AMB_check_base_class_offset(lv, (S7698C7*)(S7698C2*), ABISELECT(1664,1068), "S7698C1");
    check_base_class_offset(lv, (S7698C7*)(S7698C2*)(S7698C8*), ABISELECT(1664,1068), "S7698C1");
    check_base_class_offset(lv, (S7698C7*)(S7698C9*)(S7698C8*), ABISELECT(1664,1068), "S7698C1");
    /*is_ambiguous_... S7698C1::S7698C2 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7698C2*), ABISELECT(72,48), "S7698C1");
    /*is_ambiguous_... S7698C1::S7698C2 */ AMB_check_base_class_offset(lv, (S7698C2*), 0, "S7698C1");
    /*is_ambiguous_... S7698C2::S7698C4 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7698C4*)(S7698C2*)(S7698C8*), ABISELECT(152,96), "S7698C1");
    /*is_ambiguous_... S7698C2::S7698C4 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7698C4*)(S7698C2*)(S7698C8*), ABISELECT(160,100), "S7698C1");
    /*is_ambiguous_... S7698C2::S7698C4 */ AMB_check_base_class_offset(lv, (S7698C4*)(S7698C2*)(S7698C8*), ABISELECT(144,92), "S7698C1");
    /*is_ambiguous_... S7698C2::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7698C2*)(S7698C8*), ABISELECT(216,140), "S7698C1");
    check_base_class_offset(lv, (S7698C2*)(S7698C8*), ABISELECT(144,92), "S7698C1");
    /*is_ambiguous_... S7698C9::S2398C28_nt */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7698C9*)(S7698C8*), ABISELECT(296,188), "S7698C1");
    check_base_class_offset(lv, (S7698C10*)(S7698C9*)(S7698C8*), ABISELECT(2064,1340), "S7698C1");
    /*is_ambiguous_... S7698C9::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7698C9*)(S7698C8*), ABISELECT(2624,1708), "S7698C1");
    check_base_class_offset(lv, (S7698C9*)(S7698C8*), ABISELECT(288,184), "S7698C1");
    check_base_class_offset(lv, (S7698C8*), ABISELECT(144,92), "S7698C1");
    /*is_ambiguous_... S7698C1::S7698C10 */ AMB_check_base_class_offset(lv, (S7698C10*), ABISELECT(944,604), "S7698C1");
    check_field_offset(lv, s7698c1f0, ABISELECT(1504,972), "S7698C1.s7698c1f0");
    check_field_offset(lv, s7698c1f1, ABISELECT(1512,976), "S7698C1.s7698c1f1");
    check_field_offset(lv, s7698c1f2, ABISELECT(1520,980), "S7698C1.s7698c1f2");
    check_field_offset(lv, s7698c1f3, ABISELECT(1528,988), "S7698C1.s7698c1f3");
    test_class_info(&lv, &cd_S7698C1);
    dp->~S7698C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7698C1(Test_S7698C1, "S7698C1", ABISELECT(2656,1732));

#else // __cplusplus

extern void _ZN7S7698C1C1Ev();
extern void _ZN7S7698C1D1Ev();
Name_Map name_map_S7698C1[] = {
  NSPAIR(_ZN7S7698C1C1Ev),
  NSPAIR(_ZN7S7698C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7698C4;
extern VTBL_ENTRY _ZTI7S7698C4[];
extern  VTBL_ENTRY _ZTV7S7698C4[];
extern Class_Descriptor cd_S7698C3;
extern VTBL_ENTRY _ZTI7S7698C3[];
extern  VTBL_ENTRY _ZTV7S7698C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7698C3[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7698C4;
extern VTBL_ENTRY _ZTI7S7698C4[];
extern  VTBL_ENTRY _ZTV7S7698C4[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7698C4;
extern VTBL_ENTRY _ZTI7S7698C4[];
extern  VTBL_ENTRY _ZTV7S7698C4[];
extern Class_Descriptor cd_S7698C7;
extern VTBL_ENTRY _ZTI7S7698C7[];
extern  VTBL_ENTRY _ZTV7S7698C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7698C7[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7698C2;
extern VTBL_ENTRY _ZTI7S7698C2[];
extern  VTBL_ENTRY _ZTV7S7698C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7698C2[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7698C4;
extern VTBL_ENTRY _ZTI7S7698C4[];
extern  VTBL_ENTRY _ZTV7S7698C4[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7698C2;
extern VTBL_ENTRY _ZTI7S7698C2[];
extern  VTBL_ENTRY _ZTV7S7698C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7698C2[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S7698C10;
extern VTBL_ENTRY _ZTI8S7698C10[];
extern  VTBL_ENTRY _ZTV8S7698C10[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7698C9;
extern VTBL_ENTRY _ZTI7S7698C9[];
extern  VTBL_ENTRY _ZTV7S7698C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7698C9[];
extern Class_Descriptor cd_S7698C8;
extern VTBL_ENTRY _ZTI7S7698C8[];
extern  VTBL_ENTRY _ZTV7S7698C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7698C8[];
extern Class_Descriptor cd_S7698C10;
extern VTBL_ENTRY _ZTI8S7698C10[];
extern  VTBL_ENTRY _ZTV8S7698C10[];
static Base_Class bases_S7698C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C28_nt,    ABISELECT(1592,1024), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2791C3,    ABISELECT(1600,1028), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7698C4,    ABISELECT(1584,1020), //bcp->offset
    39, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7698C3,    ABISELECT(1536,992), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S2398C28_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
    6, //immediately_derived
  0, 0},
  {&cd_S2791C3,    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
    6, //immediately_derived
  0, 0},
  {&cd_S7698C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    14, //immediately_derived
  0, 0},
  {&cd_S2791C3,    ABISELECT(1736,1116), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2398C28_nt,    ABISELECT(1768,1140), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2398C28_nt,    ABISELECT(1672,1072), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2791C3,    ABISELECT(1680,1076), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7698C4,    ABISELECT(1664,1068), //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S7698C7,    ABISELECT(1664,1068), //bcp->offset
    43, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2791C3,    ABISELECT(72,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
    14, //immediately_derived
  0, 0},
  {&cd_S7698C2,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2398C28_nt,    ABISELECT(152,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
    17, //immediately_derived
  0, 0},
  {&cd_S2791C3,    ABISELECT(160,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
    17, //immediately_derived
  0, 0},
  {&cd_S7698C4,    ABISELECT(144,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
    8, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S2791C3,    ABISELECT(216,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
    19, //immediately_derived
  0, 0},
  {&cd_S7698C2,    ABISELECT(144,92), //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
    9, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2398C28_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
    23, //immediately_derived
  0, 0},
  {&cd_S7698C10,    ABISELECT(2064,1340), //bcp->offset
    52, //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
    5, //init_seq
    23, //immediately_derived
  0, 1},
  {&cd_S2791C3,    ABISELECT(2624,1708), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S7698C9,    ABISELECT(288,184), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S7698C8,    ABISELECT(144,92), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7698C10,    ABISELECT(944,604), //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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7698C1[];
extern void _ZN7S7698C42v2Ev();
extern void _ZN7S7698C22v3Ev();
extern void _ZN7S7698C1D1Ev();
extern void _ZN7S7698C1D0Ev();
extern void _ZN7S7698C12v1Ev();
extern void _ZN7S7698C42v2Ev();
extern void _ZN7S7698C22v3Ev();
extern void ABISELECT(_ZThn144_N7S7698C1D1Ev,_ZThn92_N7S7698C1D1Ev)();
extern void ABISELECT(_ZThn144_N7S7698C1D0Ev,_ZThn92_N7S7698C1D0Ev)();
extern void _ZN7S7698C92v5Ev();
extern void ABISELECT(_ZThn288_N7S7698C1D1Ev,_ZThn184_N7S7698C1D1Ev)();
extern void ABISELECT(_ZThn288_N7S7698C1D0Ev,_ZThn184_N7S7698C1D0Ev)();
extern void _ZN8S7698C102v4Ev();
extern void _ZN7S7698C42v2Ev();
extern void _ZN7S7698C42v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S7698C1D1Ev,_ZTv0_n24_N7S7698C1D1Ev)();
extern void ABISELECT(_ZThn1664_N7S7698C1D1Ev,_ZThn1068_N7S7698C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7698C1D0Ev,_ZTv0_n24_N7S7698C1D0Ev)();
extern void ABISELECT(_ZThn1664_N7S7698C1D0Ev,_ZThn1068_N7S7698C1D0Ev)() __attribute__((weak));
extern void _ZN8S7698C102v4Ev();
static  VTBL_ENTRY vtc_S7698C1[] = {
  ABISELECT(2624,1708),
  ABISELECT(2064,1340),
  ABISELECT(1664,1068),
  ABISELECT(1584,1020),
  ABISELECT(1536,992),
  0,
  (VTBL_ENTRY)&(_ZTI7S7698C1[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7698C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7698C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7698C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7698C12v1Ev,
  ABISELECT(2480,1616),
  ABISELECT(1920,1248),
  ABISELECT(1520,976),
  ABISELECT(1440,928),
  ABISELECT(1392,900),
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI7S7698C1[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7698C22v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S7698C1D1Ev,_ZThn92_N7S7698C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S7698C1D0Ev,_ZThn92_N7S7698C1D0Ev),
  ABISELECT(2336,1524),
  ABISELECT(1776,1156),
  ABISELECT(1248,808),
  ABISELECT(1376,884),
  ABISELECT(1296,836),
  ABISELECT(-288,-184),
  (VTBL_ENTRY)&(_ZTI7S7698C1[0]),
  (VTBL_ENTRY)&_ZN7S7698C92v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N7S7698C1D1Ev,_ZThn184_N7S7698C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn288_N7S7698C1D0Ev,_ZThn184_N7S7698C1D0Ev),
  ABISELECT(-944,-604),
  (VTBL_ENTRY)&(_ZTI7S7698C1[0]),
  (VTBL_ENTRY)&_ZN8S7698C102v4Ev,
  ABISELECT(48,28),
  ABISELECT(-1536,-992),
  (VTBL_ENTRY)&(_ZTI7S7698C1[0]),
  0,
  ABISELECT(-1584,-1020),
  (VTBL_ENTRY)&(_ZTI7S7698C1[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  ABISELECT(-1664,-1068),
  0,
  ABISELECT(-80,-48),
  ABISELECT(-128,-76),
  ABISELECT(-1664,-1068),
  (VTBL_ENTRY)&(_ZTI7S7698C1[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7698C1D1Ev,_ZTv0_n24_N7S7698C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7698C1D0Ev,_ZTv0_n24_N7S7698C1D0Ev),
  0,
  ABISELECT(-2064,-1340),
  (VTBL_ENTRY)&(_ZTI7S7698C1[0]),
  (VTBL_ENTRY)&_ZN8S7698C102v4Ev,
};
extern VTBL_ENTRY _ZTV7S7698C1[];
extern void _ZN7S7698C42v2Ev();
extern void _ZN7S7698C22v3Ev();
extern void _ZN7S7698C2D1Ev();
extern void _ZN7S7698C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7698C2__7S7698C1[] = {
  ABISELECT(1664,1068),
  ABISELECT(1584,1020),
  ABISELECT(1536,992),
  0,
  (VTBL_ENTRY)&(_ZTI7S7698C2[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7698C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7698C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7698C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7698C3__7S7698C2__7S7698C1[] = {
  ABISELECT(48,28),
  ABISELECT(-1536,-992),
  (VTBL_ENTRY)&(_ZTI7S7698C2[0]),
};
extern void _ZN7S7698C42v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7698C4__7S7698C2__7S7698C1[] = {
  0,
  ABISELECT(-1584,-1020),
  (VTBL_ENTRY)&(_ZTI7S7698C2[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
};
extern void _ZN7S7698C42v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S7698C2D1Ev,_ZTv0_n24_N7S7698C2D1Ev)();
extern void ABISELECT(_ZThn1664_N7S7698C2D1Ev,_ZThn1068_N7S7698C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7698C2D0Ev,_ZTv0_n24_N7S7698C2D0Ev)();
extern void ABISELECT(_ZThn1664_N7S7698C2D0Ev,_ZThn1068_N7S7698C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7698C7__7S7698C2__7S7698C1[] = {
  ABISELECT(-1664,-1068),
  0,
  ABISELECT(-80,-48),
  ABISELECT(-128,-76),
  ABISELECT(-1664,-1068),
  (VTBL_ENTRY)&(_ZTI7S7698C2[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7698C2D1Ev,_ZTv0_n24_N7S7698C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7698C2D0Ev,_ZTv0_n24_N7S7698C2D0Ev),
};
extern void _ZN7S7698C42v2Ev();
extern void _ZN7S7698C22v3Ev();
extern void _ZN7S7698C8D1Ev();
extern void _ZN7S7698C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7698C8__7S7698C1[] = {
  ABISELECT(2480,1616),
  ABISELECT(1920,1248),
  ABISELECT(1520,976),
  ABISELECT(1440,928),
  ABISELECT(1392,900),
  0,
  (VTBL_ENTRY)&(_ZTI7S7698C8[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7698C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7698C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7698C8D0Ev,
};
extern void _ZN7S7698C42v2Ev();
extern void _ZN7S7698C22v3Ev();
extern void _ZN7S7698C2D1Ev();
extern void _ZN7S7698C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7698C27S7698C8__A1__7S7698C1[] = {
  ABISELECT(1520,976),
  ABISELECT(1440,928),
  ABISELECT(1392,900),
  0,
  (VTBL_ENTRY)&(_ZTI7S7698C2[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7698C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7698C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7698C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7698C3__7S7698C27S7698C8__A1__7S7698C1[] = {
  ABISELECT(48,28),
  ABISELECT(-1392,-900),
  (VTBL_ENTRY)&(_ZTI7S7698C2[0]),
};
extern void _ZN7S7698C42v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7698C4__7S7698C27S7698C8__A1__7S7698C1[] = {
  0,
  ABISELECT(-1440,-928),
  (VTBL_ENTRY)&(_ZTI7S7698C2[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
};
extern void _ZN7S7698C42v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S7698C2D1Ev,_ZTv0_n24_N7S7698C2D1Ev)();
extern void ABISELECT(_ZThn1520_N7S7698C2D1Ev,_ZThn976_N7S7698C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7698C2D0Ev,_ZTv0_n24_N7S7698C2D0Ev)();
extern void ABISELECT(_ZThn1520_N7S7698C2D0Ev,_ZThn976_N7S7698C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7698C7__7S7698C27S7698C8__A1__7S7698C1[] = {
  ABISELECT(-1520,-976),
  0,
  ABISELECT(-80,-48),
  ABISELECT(-128,-76),
  ABISELECT(-1520,-976),
  (VTBL_ENTRY)&(_ZTI7S7698C2[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7698C2D1Ev,_ZTv0_n24_N7S7698C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7698C2D0Ev,_ZTv0_n24_N7S7698C2D0Ev),
};
extern void _ZN7S7698C92v5Ev();
extern void _ZN7S7698C9D1Ev();
extern void _ZN7S7698C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7698C97S7698C8__7S7698C1[] = {
  ABISELECT(2336,1524),
  ABISELECT(1776,1156),
  ABISELECT(1248,808),
  ABISELECT(1376,884),
  ABISELECT(1296,836),
  0,
  (VTBL_ENTRY)&(_ZTI7S7698C9[0]),
  (VTBL_ENTRY)&_ZN7S7698C92v5Ev,
  (VTBL_ENTRY)&_ZN7S7698C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7698C9D0Ev,
};
extern void _ZN7S7698C42v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7698C4__7S7698C97S7698C8__7S7698C1[] = {
  0,
  ABISELECT(-1296,-836),
  (VTBL_ENTRY)&(_ZTI7S7698C9[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
};
extern void _ZN7S7698C42v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S7698C9D1Ev,_ZTv0_n24_N7S7698C9D1Ev)();
extern void ABISELECT(_ZThn1376_N7S7698C9D1Ev,_ZThn884_N7S7698C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7698C9D0Ev,_ZTv0_n24_N7S7698C9D0Ev)();
extern void ABISELECT(_ZThn1376_N7S7698C9D0Ev,_ZThn884_N7S7698C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7698C7__7S7698C97S7698C8__7S7698C1[] = {
  ABISELECT(-1376,-884),
  0,
  ABISELECT(-80,-48),
  ABISELECT(-128,-76),
  ABISELECT(-1376,-884),
  (VTBL_ENTRY)&(_ZTI7S7698C9[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7698C9D1Ev,_ZTv0_n24_N7S7698C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7698C9D0Ev,_ZTv0_n24_N7S7698C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7698C3__7S7698C97S7698C8__7S7698C1[] = {
  ABISELECT(48,28),
  ABISELECT(-1248,-808),
  (VTBL_ENTRY)&(_ZTI7S7698C9[0]),
};
extern void _ZN8S7698C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7698C10__7S7698C97S7698C8__7S7698C1[] = {
  0,
  ABISELECT(-1776,-1156),
  (VTBL_ENTRY)&(_ZTI7S7698C9[0]),
  (VTBL_ENTRY)&_ZN8S7698C102v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7698C3__7S7698C8__7S7698C1[] = {
  ABISELECT(48,28),
  ABISELECT(-1392,-900),
  (VTBL_ENTRY)&(_ZTI7S7698C8[0]),
};
extern void _ZN7S7698C42v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7698C4__7S7698C8__7S7698C1[] = {
  0,
  ABISELECT(-1440,-928),
  (VTBL_ENTRY)&(_ZTI7S7698C8[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
};
extern void _ZN7S7698C42v2Ev();
extern void ABISELECT(_ZTv0_n48_N7S7698C8D1Ev,_ZTv0_n24_N7S7698C8D1Ev)();
extern void ABISELECT(_ZThn1520_N7S7698C8D1Ev,_ZThn976_N7S7698C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7698C8D0Ev,_ZTv0_n24_N7S7698C8D0Ev)();
extern void ABISELECT(_ZThn1520_N7S7698C8D0Ev,_ZThn976_N7S7698C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7698C7__7S7698C8__7S7698C1[] = {
  ABISELECT(-1520,-976),
  0,
  ABISELECT(-80,-48),
  ABISELECT(-128,-76),
  ABISELECT(-1520,-976),
  (VTBL_ENTRY)&(_ZTI7S7698C8[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7698C8D1Ev,_ZTv0_n24_N7S7698C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7698C8D0Ev,_ZTv0_n24_N7S7698C8D0Ev),
};
extern void _ZN7S7698C92v5Ev();
extern void ABISELECT(_ZThn144_N7S7698C8D1Ev,_ZThn92_N7S7698C8D1Ev)();
extern void ABISELECT(_ZThn144_N7S7698C8D0Ev,_ZThn92_N7S7698C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7698C9__7S7698C8__7S7698C1[] = {
  ABISELECT(2336,1524),
  ABISELECT(1776,1156),
  ABISELECT(1248,808),
  ABISELECT(1376,884),
  ABISELECT(1296,836),
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI7S7698C8[0]),
  (VTBL_ENTRY)&_ZN7S7698C92v5Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S7698C8D1Ev,_ZThn92_N7S7698C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn144_N7S7698C8D0Ev,_ZThn92_N7S7698C8D0Ev),
};
extern void _ZN8S7698C102v4Ev();
static  VTBL_ENTRY _tg__ZTV8S7698C10__7S7698C8__7S7698C1[] = {
  0,
  ABISELECT(-1920,-1248),
  (VTBL_ENTRY)&(_ZTI7S7698C8[0]),
  (VTBL_ENTRY)&_ZN8S7698C102v4Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7698C3__7S7698C1[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7698C3[0]),
};
extern void _ZN7S7698C42v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7698C4__7S7698C3__7S7698C1[] = {
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7698C3[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
};
extern void _ZN7S7698C42v2Ev();
extern void _ZN7S7698C7D1Ev();
extern void _ZN7S7698C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7698C7__7S7698C1[] = {
  ABISELECT(-80,-48),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7698C7[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
  (VTBL_ENTRY)&_ZN7S7698C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7698C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7698C3__7S7698C7__7S7698C1[] = {
  ABISELECT(48,28),
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S7698C7[0]),
};
extern void _ZN7S7698C42v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7698C4__7S7698C7__7S7698C1[] = {
  0,
  ABISELECT(80,48),
  (VTBL_ENTRY)&(_ZTI7S7698C7[0]),
  (VTBL_ENTRY)&_ZN7S7698C42v2Ev,
};
static  VTT_ENTRY vtt_S7698C1[] = {
  {&(_ZTV7S7698C1[7]),  7,56},
  {&(_tg__ZTV7S7698C2__7S7698C1[5]),  5,9},
  {&(_tg__ZTV7S7698C3__7S7698C2__7S7698C1[3]),  3,3},
  {&(_tg__ZTV7S7698C4__7S7698C2__7S7698C1[3]),  3,4},
  {&(_tg__ZTV7S7698C7__7S7698C2__7S7698C1[6]),  6,9},
  {&(_tg__ZTV7S7698C8__7S7698C1[7]),  7,11},
  {&(_tg__ZTV7S7698C27S7698C8__A1__7S7698C1[5]),  5,9},
  {&(_tg__ZTV7S7698C3__7S7698C27S7698C8__A1__7S7698C1[3]),  3,3},
  {&(_tg__ZTV7S7698C4__7S7698C27S7698C8__A1__7S7698C1[3]),  3,4},
  {&(_tg__ZTV7S7698C7__7S7698C27S7698C8__A1__7S7698C1[6]),  6,9},
  {&(_tg__ZTV7S7698C97S7698C8__7S7698C1[7]),  7,10},
  {&(_tg__ZTV7S7698C4__7S7698C97S7698C8__7S7698C1[3]),  3,4},
  {&(_tg__ZTV7S7698C7__7S7698C97S7698C8__7S7698C1[6]),  6,9},
  {&(_tg__ZTV7S7698C3__7S7698C97S7698C8__7S7698C1[3]),  3,3},
  {&(_tg__ZTV8S7698C10__7S7698C97S7698C8__7S7698C1[3]),  3,4},
  {&(_tg__ZTV7S7698C3__7S7698C8__7S7698C1[3]),  3,3},
  {&(_tg__ZTV7S7698C4__7S7698C8__7S7698C1[3]),  3,4},
  {&(_tg__ZTV7S7698C7__7S7698C8__7S7698C1[6]),  6,9},
  {&(_tg__ZTV7S7698C9__7S7698C8__7S7698C1[7]),  7,10},
  {&(_tg__ZTV8S7698C10__7S7698C8__7S7698C1[3]),  3,4},
  {&(_ZTV7S7698C1[39]),  39,56},
  {&(_ZTV7S7698C1[42]),  42,56},
  {&(_ZTV7S7698C1[49]),  49,56},
  {&(_ZTV7S7698C1[19]),  19,56},
  {&(_ZTV7S7698C1[30]),  30,56},
  {&(_ZTV7S7698C1[55]),  55,56},
  {&(_tg__ZTV7S7698C3__7S7698C1[3]),  3,3},
  {&(_tg__ZTV7S7698C4__7S7698C3__7S7698C1[3]),  3,4},
  {&(_tg__ZTV7S7698C7__7S7698C1[4]),  4,7},
  {&(_tg__ZTV7S7698C3__7S7698C7__7S7698C1[3]),  3,3},
  {&(_tg__ZTV7S7698C4__7S7698C7__7S7698C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7698C1[];
extern  VTBL_ENTRY _ZTV7S7698C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7698C1[];
static VTBL_ENTRY alt_thunk_names162[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7698C8D0Ev,_ZTv0_n24_N7S7698C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1520_N7S7698C8D0Ev,_ZThn976_N7S7698C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7698C8D1Ev,_ZTv0_n24_N7S7698C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1520_N7S7698C8D1Ev,_ZThn976_N7S7698C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7698C9D0Ev,_ZTv0_n24_N7S7698C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1376_N7S7698C9D0Ev,_ZThn884_N7S7698C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7698C9D1Ev,_ZTv0_n24_N7S7698C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1376_N7S7698C9D1Ev,_ZThn884_N7S7698C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7698C2D0Ev,_ZTv0_n24_N7S7698C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1520_N7S7698C2D0Ev,_ZThn976_N7S7698C2D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1664_N7S7698C2D0Ev,_ZThn1068_N7S7698C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7698C2D1Ev,_ZTv0_n24_N7S7698C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1520_N7S7698C2D1Ev,_ZThn976_N7S7698C2D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn1664_N7S7698C2D1Ev,_ZThn1068_N7S7698C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7698C1D0Ev,_ZTv0_n24_N7S7698C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1664_N7S7698C1D0Ev,_ZThn1068_N7S7698C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7698C1D1Ev,_ZTv0_n24_N7S7698C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1664_N7S7698C1D1Ev,_ZThn1068_N7S7698C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7698C1 = {  "S7698C1", // class name
  bases_S7698C1, 26,
  &(vtc_S7698C1[0]), // expected_vtbl_contents
  &(vtt_S7698C1[0]), // expected_vtt_contents
  ABISELECT(2656,1732), // object size
  NSPAIRA(_ZTI7S7698C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7698C1),56, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7698C1),31, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names162,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21073C4  {
  int s21073c4f0;
  virtual void  v3(); // _ZN8S21073C42v3Ev
  virtual void  v4(); // _ZN8S21073C42v4Ev
  virtual void  v5(); // _ZN8S21073C42v5Ev
  virtual void  v6(); // _ZN8S21073C42v6Ev
  virtual void  v7(); // _ZN8S21073C42v7Ev
  virtual void  v8(); // _ZN8S21073C42v8Ev
  ~S21073C4(); // tgen
  S21073C4(); // tgen
};
//SIG(-1 S21073C4) C1{ v1 v2 v3 v4 v5 v6 Fi}


void  S21073C4 ::v3(){vfunc_called(this, "_ZN8S21073C42v3Ev");}
void  S21073C4 ::v4(){vfunc_called(this, "_ZN8S21073C42v4Ev");}
void  S21073C4 ::v5(){vfunc_called(this, "_ZN8S21073C42v5Ev");}
void  S21073C4 ::v6(){vfunc_called(this, "_ZN8S21073C42v6Ev");}
void  S21073C4 ::v7(){vfunc_called(this, "_ZN8S21073C42v7Ev");}
void  S21073C4 ::v8(){vfunc_called(this, "_ZN8S21073C42v8Ev");}
S21073C4 ::~S21073C4(){ note_dtor("S21073C4", this);} // tgen
S21073C4 ::S21073C4(){ note_ctor("S21073C4", this);} // tgen

static void Test_S21073C4()
{
  extern Class_Descriptor cd_S21073C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S21073C4, buf);
    S21073C4 *dp, &lv = *(dp=new (buf) S21073C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S21073C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21073C4)");
    check_field_offset(lv, s21073c4f0, ABISELECT(8,4), "S21073C4.s21073c4f0");
    test_class_info(&lv, &cd_S21073C4);
    dp->~S21073C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21073C4(Test_S21073C4, "S21073C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S21073C4C1Ev();
extern void _ZN8S21073C4D1Ev();
Name_Map name_map_S21073C4[] = {
  NSPAIR(_ZN8S21073C4C1Ev),
  NSPAIR(_ZN8S21073C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21073C4[];
extern void _ZN8S21073C42v3Ev();
extern void _ZN8S21073C42v4Ev();
extern void _ZN8S21073C42v5Ev();
extern void _ZN8S21073C42v6Ev();
extern void _ZN8S21073C42v7Ev();
extern void _ZN8S21073C42v8Ev();
static  VTBL_ENTRY vtc_S21073C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21073C4[0]),
  (VTBL_ENTRY)&_ZN8S21073C42v3Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v8Ev,
};
extern VTBL_ENTRY _ZTI8S21073C4[];
extern  VTBL_ENTRY _ZTV8S21073C4[];
Class_Descriptor cd_S21073C4 = {  "S21073C4", // class name
  0,0,//no base classes
  &(vtc_S21073C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S21073C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21073C4),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  S21073C5  {
  long s21073c5f0;
  int s21073c5f1;
  virtual void  v28(); // _ZN8S21073C53v28Ev
  virtual void  v29(); // _ZN8S21073C53v29Ev
  virtual void  v30(); // _ZN8S21073C53v30Ev
  virtual void  v31(); // _ZN8S21073C53v31Ev
  virtual void  v32(); // _ZN8S21073C53v32Ev
  virtual void  v33(); // _ZN8S21073C53v33Ev
  ~S21073C5(); // tgen
  S21073C5(); // tgen
};
//SIG(-1 S21073C5) C1{ v1 v2 v3 v4 v5 v6 Fl Fi}


void  S21073C5 ::v28(){vfunc_called(this, "_ZN8S21073C53v28Ev");}
void  S21073C5 ::v29(){vfunc_called(this, "_ZN8S21073C53v29Ev");}
void  S21073C5 ::v30(){vfunc_called(this, "_ZN8S21073C53v30Ev");}
void  S21073C5 ::v31(){vfunc_called(this, "_ZN8S21073C53v31Ev");}
void  S21073C5 ::v32(){vfunc_called(this, "_ZN8S21073C53v32Ev");}
void  S21073C5 ::v33(){vfunc_called(this, "_ZN8S21073C53v33Ev");}
S21073C5 ::~S21073C5(){ note_dtor("S21073C5", this);} // tgen
S21073C5 ::S21073C5(){ note_ctor("S21073C5", this);} // tgen

static void Test_S21073C5()
{
  extern Class_Descriptor cd_S21073C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S21073C5, buf);
    S21073C5 *dp, &lv = *(dp=new (buf) S21073C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S21073C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21073C5)");
    check_field_offset(lv, s21073c5f0, ABISELECT(8,4), "S21073C5.s21073c5f0");
    check_field_offset(lv, s21073c5f1, ABISELECT(16,8), "S21073C5.s21073c5f1");
    test_class_info(&lv, &cd_S21073C5);
    dp->~S21073C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21073C5(Test_S21073C5, "S21073C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S21073C5C1Ev();
extern void _ZN8S21073C5D1Ev();
Name_Map name_map_S21073C5[] = {
  NSPAIR(_ZN8S21073C5C1Ev),
  NSPAIR(_ZN8S21073C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21073C5[];
extern void _ZN8S21073C53v28Ev();
extern void _ZN8S21073C53v29Ev();
extern void _ZN8S21073C53v30Ev();
extern void _ZN8S21073C53v31Ev();
extern void _ZN8S21073C53v32Ev();
extern void _ZN8S21073C53v33Ev();
static  VTBL_ENTRY vtc_S21073C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21073C5[0]),
  (VTBL_ENTRY)&_ZN8S21073C53v28Ev,
  (VTBL_ENTRY)&_ZN8S21073C53v29Ev,
  (VTBL_ENTRY)&_ZN8S21073C53v30Ev,
  (VTBL_ENTRY)&_ZN8S21073C53v31Ev,
  (VTBL_ENTRY)&_ZN8S21073C53v32Ev,
  (VTBL_ENTRY)&_ZN8S21073C53v33Ev,
};
extern VTBL_ENTRY _ZTI8S21073C5[];
extern  VTBL_ENTRY _ZTV8S21073C5[];
Class_Descriptor cd_S21073C5 = {  "S21073C5", // class name
  0,0,//no base classes
  &(vtc_S21073C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S21073C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21073C5),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  S21073C3  : virtual S21073C4 {
  ::S21073C5 s21073c3f0;
  int s21073c3f1;
  virtual void  v9(); // _ZN8S21073C32v9Ev
  virtual void  v10(); // _ZN8S21073C33v10Ev
  virtual void  v11(); // _ZN8S21073C33v11Ev
  ~S21073C3(); // tgen
  S21073C3(); // tgen
};
//SIG(-1 S21073C3) C1{ VBC2{ v4 v5 v6 v7 v8 v9 Fi} v1 v2 v3 FC3{ v10 v11 v12 v13 v14 v15 Fl Fi} Fi}


void  S21073C3 ::v9(){vfunc_called(this, "_ZN8S21073C32v9Ev");}
void  S21073C3 ::v10(){vfunc_called(this, "_ZN8S21073C33v10Ev");}
void  S21073C3 ::v11(){vfunc_called(this, "_ZN8S21073C33v11Ev");}
S21073C3 ::~S21073C3(){ note_dtor("S21073C3", this);} // tgen
S21073C3 ::S21073C3(){ note_ctor("S21073C3", this);} // tgen

static void Test_S21073C3()
{
  extern Class_Descriptor cd_S21073C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S21073C3, buf);
    S21073C3 *dp, &lv = *(dp=new (buf) S21073C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S21073C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21073C3)");
    check_base_class_offset(lv, (S21073C4*), ABISELECT(40,20), "S21073C3");
    check_field_offset(lv, s21073c3f0, ABISELECT(8,4), "S21073C3.s21073c3f0");
    check_field_offset(lv, s21073c3f1, ABISELECT(32,16), "S21073C3.s21073c3f1");
    test_class_info(&lv, &cd_S21073C3);
    dp->~S21073C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21073C3(Test_S21073C3, "S21073C3", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S21073C3C1Ev();
extern void _ZN8S21073C3D1Ev();
Name_Map name_map_S21073C3[] = {
  NSPAIR(_ZN8S21073C3C1Ev),
  NSPAIR(_ZN8S21073C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21073C4;
extern VTBL_ENTRY _ZTI8S21073C4[];
extern  VTBL_ENTRY _ZTV8S21073C4[];
static Base_Class bases_S21073C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21073C4,    ABISELECT(40,20), //bcp->offset
    6, //bcp->virtual_function_table_offset
    8, //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 _ZTI8S21073C3[];
extern void _ZN8S21073C32v9Ev();
extern void _ZN8S21073C33v10Ev();
extern void _ZN8S21073C33v11Ev();
extern void _ZN8S21073C42v3Ev();
extern void _ZN8S21073C42v4Ev();
extern void _ZN8S21073C42v5Ev();
extern void _ZN8S21073C42v6Ev();
extern void _ZN8S21073C42v7Ev();
extern void _ZN8S21073C42v8Ev();
static  VTBL_ENTRY vtc_S21073C3[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S21073C3[0]),
  (VTBL_ENTRY)&_ZN8S21073C32v9Ev,
  (VTBL_ENTRY)&_ZN8S21073C33v10Ev,
  (VTBL_ENTRY)&_ZN8S21073C33v11Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S21073C3[0]),
  (VTBL_ENTRY)&_ZN8S21073C42v3Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v8Ev,
};
extern VTBL_ENTRY _ZTV8S21073C3[];
static  VTT_ENTRY vtt_S21073C3[] = {
  {&(_ZTV8S21073C3[3]),  3,20},
  {&(_ZTV8S21073C3[14]),  14,20},
};
extern VTBL_ENTRY _ZTI8S21073C3[];
extern  VTBL_ENTRY _ZTV8S21073C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21073C3[];
Class_Descriptor cd_S21073C3 = {  "S21073C3", // class name
  bases_S21073C3, 1,
  &(vtc_S21073C3[0]), // expected_vtbl_contents
  &(vtt_S21073C3[0]), // expected_vtt_contents
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S21073C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21073C3),20, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21073C3),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  S21073C2  : virtual S21073C3 {
  short s21073c2f0;
  virtual  ~S21073C2(); // _ZN8S21073C2D2Ev
  virtual void  v12(); // _ZN8S21073C23v12Ev
  virtual void  v13(); // _ZN8S21073C23v13Ev
  S21073C2(); // tgen
};
//SIG(-1 S21073C2) C1{ VBC2{ VBC3{ v3 v4 v5 v6 v7 v8 Fi} v9 v10 v11 FC4{ v12 v13 v14 v15 v16 v17 Fl Fi} Fi} vd v1 v2 Fs}


 S21073C2 ::~S21073C2(){ note_dtor("S21073C2", this);}
void  S21073C2 ::v12(){vfunc_called(this, "_ZN8S21073C23v12Ev");}
void  S21073C2 ::v13(){vfunc_called(this, "_ZN8S21073C23v13Ev");}
S21073C2 ::S21073C2(){ note_ctor("S21073C2", this);} // tgen

static void Test_S21073C2()
{
  extern Class_Descriptor cd_S21073C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S21073C2, buf);
    S21073C2 *dp, &lv = *(dp=new (buf) S21073C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S21073C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21073C2)");
    check_base_class_offset(lv, (S21073C4*)(S21073C3*), ABISELECT(56,28), "S21073C2");
    check_base_class_offset(lv, (S21073C3*), ABISELECT(16,8), "S21073C2");
    check_field_offset(lv, s21073c2f0, ABISELECT(8,4), "S21073C2.s21073c2f0");
    test_class_info(&lv, &cd_S21073C2);
    dp->~S21073C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21073C2(Test_S21073C2, "S21073C2", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S21073C2C1Ev();
extern void _ZN8S21073C2D2Ev();
Name_Map name_map_S21073C2[] = {
  NSPAIR(_ZN8S21073C2C1Ev),
  NSPAIR(_ZN8S21073C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21073C4;
extern VTBL_ENTRY _ZTI8S21073C4[];
extern  VTBL_ENTRY _ZTV8S21073C4[];
extern Class_Descriptor cd_S21073C3;
extern VTBL_ENTRY _ZTI8S21073C3[];
extern  VTBL_ENTRY _ZTV8S21073C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21073C3[];
static Base_Class bases_S21073C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21073C4,    ABISELECT(56,28), //bcp->offset
    17, //bcp->virtual_function_table_offset
    8, //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_S21073C3,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //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 _ZTI8S21073C2[];
extern void _ZN8S21073C2D1Ev();
extern void _ZN8S21073C2D0Ev();
extern void _ZN8S21073C23v12Ev();
extern void _ZN8S21073C23v13Ev();
extern void _ZN8S21073C32v9Ev();
extern void _ZN8S21073C33v10Ev();
extern void _ZN8S21073C33v11Ev();
extern void _ZN8S21073C42v3Ev();
extern void _ZN8S21073C42v4Ev();
extern void _ZN8S21073C42v5Ev();
extern void _ZN8S21073C42v6Ev();
extern void _ZN8S21073C42v7Ev();
extern void _ZN8S21073C42v8Ev();
static  VTBL_ENTRY vtc_S21073C2[] = {
  ABISELECT(56,28),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21073C2[0]),
  (VTBL_ENTRY)&_ZN8S21073C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21073C2D0Ev,
  (VTBL_ENTRY)&_ZN8S21073C23v12Ev,
  (VTBL_ENTRY)&_ZN8S21073C23v13Ev,
  0,
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21073C2[0]),
  (VTBL_ENTRY)&_ZN8S21073C32v9Ev,
  (VTBL_ENTRY)&_ZN8S21073C33v10Ev,
  (VTBL_ENTRY)&_ZN8S21073C33v11Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S21073C2[0]),
  (VTBL_ENTRY)&_ZN8S21073C42v3Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v8Ev,
};
extern VTBL_ENTRY _ZTV8S21073C2[];
extern void _ZN8S21073C32v9Ev();
extern void _ZN8S21073C33v10Ev();
extern void _ZN8S21073C33v11Ev();
static  VTBL_ENTRY _tg__ZTV8S21073C3__8S21073C2[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S21073C3[0]),
  (VTBL_ENTRY)&_ZN8S21073C32v9Ev,
  (VTBL_ENTRY)&_ZN8S21073C33v10Ev,
  (VTBL_ENTRY)&_ZN8S21073C33v11Ev,
};
extern void _ZN8S21073C42v3Ev();
extern void _ZN8S21073C42v4Ev();
extern void _ZN8S21073C42v5Ev();
extern void _ZN8S21073C42v6Ev();
extern void _ZN8S21073C42v7Ev();
extern void _ZN8S21073C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S21073C4__8S21073C3__8S21073C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S21073C3[0]),
  (VTBL_ENTRY)&_ZN8S21073C42v3Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v8Ev,
};
static  VTT_ENTRY vtt_S21073C2[] = {
  {&(_ZTV8S21073C2[4]),  4,31},
  {&(_ZTV8S21073C2[14]),  14,31},
  {&(_ZTV8S21073C2[25]),  25,31},
  {&(_tg__ZTV8S21073C3__8S21073C2[3]),  3,6},
  {&(_tg__ZTV8S21073C4__8S21073C3__8S21073C2[8]),  8,14},
};
extern VTBL_ENTRY _ZTI8S21073C2[];
extern  VTBL_ENTRY _ZTV8S21073C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21073C2[];
Class_Descriptor cd_S21073C2 = {  "S21073C2", // class name
  bases_S21073C2, 2,
  &(vtc_S21073C2[0]), // expected_vtbl_contents
  &(vtt_S21073C2[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S21073C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21073C2),31, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21073C2),5, //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  S21073C8_nt  {
  virtual void  v14(); // _ZN11S21073C8_nt3v14Ev
  virtual void  v15(); // _ZN11S21073C8_nt3v15Ev
  ~S21073C8_nt(); // tgen
  S21073C8_nt(); // tgen
};
//SIG(-1 S21073C8_nt) C1{ v1 v2}


void  S21073C8_nt ::v14(){vfunc_called(this, "_ZN11S21073C8_nt3v14Ev");}
void  S21073C8_nt ::v15(){vfunc_called(this, "_ZN11S21073C8_nt3v15Ev");}
S21073C8_nt ::~S21073C8_nt(){ note_dtor("S21073C8_nt", this);} // tgen
S21073C8_nt ::S21073C8_nt(){ note_ctor("S21073C8_nt", this);} // tgen

//skip512 S21073C8_nt

#else // __cplusplus

extern void _ZN11S21073C8_ntC1Ev();
extern void _ZN11S21073C8_ntD1Ev();
Name_Map name_map_S21073C8_nt[] = {
  NSPAIR(_ZN11S21073C8_ntC1Ev),
  NSPAIR(_ZN11S21073C8_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S21073C8_nt[];
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
static  VTBL_ENTRY vtc_S21073C8_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S21073C8_nt[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
};
extern VTBL_ENTRY _ZTI11S21073C8_nt[];
VTBL_ENTRY *P__ZTI11S21073C8_nt = _ZTI11S21073C8_nt; 
extern  VTBL_ENTRY _ZTV11S21073C8_nt[];
Class_Descriptor cd_S21073C8_nt = {  "S21073C8_nt", // class name
  0,0,//no base classes
  &(vtc_S21073C8_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S21073C8_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S21073C8_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  S21073C9  : virtual S21073C8_nt {
  void *s21073c9f0;
  virtual void  v16(); // _ZN8S21073C93v16Ev
  ~S21073C9(); // tgen
  S21073C9(); // tgen
};
//SIG(-1 S21073C9) C1{ VBC2{ v2 v3} v1 Fp}


void  S21073C9 ::v16(){vfunc_called(this, "_ZN8S21073C93v16Ev");}
S21073C9 ::~S21073C9(){ note_dtor("S21073C9", this);} // tgen
S21073C9 ::S21073C9(){ note_ctor("S21073C9", this);} // tgen

static void Test_S21073C9()
{
  extern Class_Descriptor cd_S21073C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S21073C9, buf);
    S21073C9 *dp, &lv = *(dp=new (buf) S21073C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S21073C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21073C9)");
    check_base_class_offset(lv, (S21073C8_nt*), 0, "S21073C9");
    check_field_offset(lv, s21073c9f0, ABISELECT(8,4), "S21073C9.s21073c9f0");
    test_class_info(&lv, &cd_S21073C9);
    dp->~S21073C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21073C9(Test_S21073C9, "S21073C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S21073C9C1Ev();
extern void _ZN8S21073C9D1Ev();
Name_Map name_map_S21073C9[] = {
  NSPAIR(_ZN8S21073C9C1Ev),
  NSPAIR(_ZN8S21073C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21073C8_nt;
extern VTBL_ENTRY _ZTI11S21073C8_nt[];
extern  VTBL_ENTRY _ZTV11S21073C8_nt[];
static Base_Class bases_S21073C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21073C8_nt,    0, //bcp->offset
    -1, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S21073C9[];
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
extern void _ZN8S21073C93v16Ev();
static  VTBL_ENTRY vtc_S21073C9[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21073C9[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S21073C93v16Ev,
};
extern VTBL_ENTRY _ZTV8S21073C9[];
static  VTT_ENTRY vtt_S21073C9[] = {
  {&(_ZTV8S21073C9[5]),  5,8},
  {&(_ZTV8S21073C9[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S21073C9[];
extern  VTBL_ENTRY _ZTV8S21073C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21073C9[];
Class_Descriptor cd_S21073C9 = {  "S21073C9", // class name
  bases_S21073C9, 1,
  &(vtc_S21073C9[0]), // expected_vtbl_contents
  &(vtt_S21073C9[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S21073C9),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21073C9),8, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21073C9),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  S21073C7  : S21073C8_nt , virtual S21073C9 {
  int s21073c7f0;
  ::S3052C22_nt s21073c7f1;
  ::S21073C9 s21073c7f2;
  virtual void  v17(); // _ZN8S21073C73v17Ev
  virtual void  v18(); // _ZN8S21073C73v18Ev
  virtual void  v19(); // _ZN8S21073C73v19Ev
  virtual void  v20(); // _ZN8S21073C73v20Ev
  virtual void  v21(); // _ZN8S21073C73v21Ev
  ~S21073C7(); // tgen
  S21073C7(); // tgen
};
//SIG(-1 S21073C7) C1{ BC2{ v6 v7} VBC3{ VBC2 v8 Fp} v1 v2 v3 v4 v5 Fi FC4{} FC3}


void  S21073C7 ::v17(){vfunc_called(this, "_ZN8S21073C73v17Ev");}
void  S21073C7 ::v18(){vfunc_called(this, "_ZN8S21073C73v18Ev");}
void  S21073C7 ::v19(){vfunc_called(this, "_ZN8S21073C73v19Ev");}
void  S21073C7 ::v20(){vfunc_called(this, "_ZN8S21073C73v20Ev");}
void  S21073C7 ::v21(){vfunc_called(this, "_ZN8S21073C73v21Ev");}
S21073C7 ::~S21073C7(){ note_dtor("S21073C7", this);} // tgen
S21073C7 ::S21073C7(){ note_ctor("S21073C7", this);} // tgen

static void Test_S21073C7()
{
  extern Class_Descriptor cd_S21073C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S21073C7, buf);
    S21073C7 *dp, &lv = *(dp=new (buf) S21073C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S21073C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21073C7)");
    /*is_ambiguous_... S21073C7::S21073C8_nt */ AMB_check_base_class_offset(lv, (S21073C8_nt*), 0, "S21073C7");
    check_base_class_offset(lv, (S21073C8_nt*)(S21073C9*), ABISELECT(32,20), "S21073C7");
    check_base_class_offset(lv, (S21073C9*), ABISELECT(32,20), "S21073C7");
    check_field_offset(lv, s21073c7f0, ABISELECT(8,4), "S21073C7.s21073c7f0");
    check_field_offset(lv, s21073c7f1, ABISELECT(12,8), "S21073C7.s21073c7f1");
    check_field_offset(lv, s21073c7f2, ABISELECT(16,12), "S21073C7.s21073c7f2");
    test_class_info(&lv, &cd_S21073C7);
    dp->~S21073C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21073C7(Test_S21073C7, "S21073C7", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S21073C7C1Ev();
extern void _ZN8S21073C7D1Ev();
Name_Map name_map_S21073C7[] = {
  NSPAIR(_ZN8S21073C7C1Ev),
  NSPAIR(_ZN8S21073C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21073C8_nt;
extern VTBL_ENTRY _ZTI11S21073C8_nt[];
extern  VTBL_ENTRY _ZTV11S21073C8_nt[];
extern Class_Descriptor cd_S21073C8_nt;
extern VTBL_ENTRY _ZTI11S21073C8_nt[];
extern  VTBL_ENTRY _ZTV11S21073C8_nt[];
extern Class_Descriptor cd_S21073C9;
extern VTBL_ENTRY _ZTI8S21073C9[];
extern  VTBL_ENTRY _ZTV8S21073C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21073C9[];
static Base_Class bases_S21073C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21073C8_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_S21073C8_nt,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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_S21073C9,    ABISELECT(32,20), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //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 _ZTI8S21073C7[];
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
extern void _ZN8S21073C73v17Ev();
extern void _ZN8S21073C73v18Ev();
extern void _ZN8S21073C73v19Ev();
extern void _ZN8S21073C73v20Ev();
extern void _ZN8S21073C73v21Ev();
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
extern void _ZN8S21073C93v16Ev();
static  VTBL_ENTRY vtc_S21073C7[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S21073C7[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v17Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v18Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v19Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v20Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v21Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S21073C7[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S21073C93v16Ev,
};
extern VTBL_ENTRY _ZTV8S21073C7[];
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
extern void _ZN8S21073C93v16Ev();
static  VTBL_ENTRY _tg__ZTV8S21073C9__8S21073C7[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21073C9[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S21073C93v16Ev,
};
static  VTT_ENTRY vtt_S21073C7[] = {
  {&(_ZTV8S21073C7[4]),  4,20},
  {&(_ZTV8S21073C7[17]),  17,20},
  {&(_ZTV8S21073C7[17]),  17,20},
  {&(_tg__ZTV8S21073C9__8S21073C7[5]),  5,8},
  {&(_tg__ZTV8S21073C9__8S21073C7[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S21073C7[];
extern  VTBL_ENTRY _ZTV8S21073C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21073C7[];
Class_Descriptor cd_S21073C7 = {  "S21073C7", // class name
  bases_S21073C7, 3,
  &(vtc_S21073C7[0]), // expected_vtbl_contents
  &(vtt_S21073C7[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S21073C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21073C7),20, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21073C7),5, //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  S21073C6  : virtual S21073C7 {
  void *s21073c6f0[2];
  virtual  ~S21073C6(); // _ZN8S21073C6D2Ev
  virtual void  v22(); // _ZN8S21073C63v22Ev
  virtual void  v23(); // _ZN8S21073C63v23Ev
  virtual void  v24(); // _ZN8S21073C63v24Ev
  virtual void  v25(); // _ZN8S21073C63v25Ev
  virtual void  v26(); // _ZN8S21073C63v26Ev
  virtual void  v27(); // _ZN8S21073C63v27Ev
  S21073C6(); // tgen
};
//SIG(-1 S21073C6) C1{ VBC2{ BC3{ v7 v8} VBC4{ VBC3 v9 Fp} v10 v11 v12 v13 v14 Fi FC5{} FC4} vd v1 v2 v3 v4 v5 v6 Fp[2]}


 S21073C6 ::~S21073C6(){ note_dtor("S21073C6", this);}
void  S21073C6 ::v22(){vfunc_called(this, "_ZN8S21073C63v22Ev");}
void  S21073C6 ::v23(){vfunc_called(this, "_ZN8S21073C63v23Ev");}
void  S21073C6 ::v24(){vfunc_called(this, "_ZN8S21073C63v24Ev");}
void  S21073C6 ::v25(){vfunc_called(this, "_ZN8S21073C63v25Ev");}
void  S21073C6 ::v26(){vfunc_called(this, "_ZN8S21073C63v26Ev");}
void  S21073C6 ::v27(){vfunc_called(this, "_ZN8S21073C63v27Ev");}
S21073C6 ::S21073C6(){ note_ctor("S21073C6", this);} // tgen

static void Test_S21073C6()
{
  extern Class_Descriptor cd_S21073C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S21073C6, buf);
    S21073C6 *dp, &lv = *(dp=new (buf) S21073C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S21073C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21073C6)");
    /*is_ambiguous_... S21073C7::S21073C8_nt */ AMB_check_base_class_offset(lv, (S21073C8_nt*)(S21073C7*), ABISELECT(24,12), "S21073C6");
    check_base_class_offset(lv, (S21073C8_nt*)(S21073C9*), 0, "S21073C6");
    check_base_class_offset(lv, (S21073C9*)(S21073C7*), ABISELECT(56,32), "S21073C6");
    check_base_class_offset(lv, (S21073C7*), ABISELECT(24,12), "S21073C6");
    check_field_offset(lv, s21073c6f0, ABISELECT(8,4), "S21073C6.s21073c6f0");
    test_class_info(&lv, &cd_S21073C6);
    dp->~S21073C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21073C6(Test_S21073C6, "S21073C6", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN8S21073C6C1Ev();
extern void _ZN8S21073C6D2Ev();
Name_Map name_map_S21073C6[] = {
  NSPAIR(_ZN8S21073C6C1Ev),
  NSPAIR(_ZN8S21073C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S21073C8_nt;
extern VTBL_ENTRY _ZTI11S21073C8_nt[];
extern  VTBL_ENTRY _ZTV11S21073C8_nt[];
extern Class_Descriptor cd_S21073C8_nt;
extern VTBL_ENTRY _ZTI11S21073C8_nt[];
extern  VTBL_ENTRY _ZTV11S21073C8_nt[];
extern Class_Descriptor cd_S21073C9;
extern VTBL_ENTRY _ZTI8S21073C9[];
extern  VTBL_ENTRY _ZTV8S21073C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21073C9[];
extern Class_Descriptor cd_S21073C7;
extern VTBL_ENTRY _ZTI8S21073C7[];
extern  VTBL_ENTRY _ZTV8S21073C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21073C7[];
static Base_Class bases_S21073C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21073C8_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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S21073C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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_S21073C9,    ABISELECT(56,32), //bcp->offset
    35, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S21073C7,    ABISELECT(24,12), //bcp->offset
    17, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21073C6[];
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
extern void _ZN8S21073C6D1Ev();
extern void _ZN8S21073C6D0Ev();
extern void _ZN8S21073C63v22Ev();
extern void _ZN8S21073C63v23Ev();
extern void _ZN8S21073C63v24Ev();
extern void _ZN8S21073C63v25Ev();
extern void _ZN8S21073C63v26Ev();
extern void _ZN8S21073C63v27Ev();
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
extern void _ZN8S21073C73v17Ev();
extern void _ZN8S21073C73v18Ev();
extern void _ZN8S21073C73v19Ev();
extern void _ZN8S21073C73v20Ev();
extern void _ZN8S21073C73v21Ev();
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
extern void _ZN8S21073C93v16Ev();
static  VTBL_ENTRY vtc_S21073C6[] = {
  0,
  ABISELECT(56,32),
  ABISELECT(24,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21073C6[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S21073C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21073C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21073C63v22Ev,
  (VTBL_ENTRY)&_ZN8S21073C63v23Ev,
  (VTBL_ENTRY)&_ZN8S21073C63v24Ev,
  (VTBL_ENTRY)&_ZN8S21073C63v25Ev,
  (VTBL_ENTRY)&_ZN8S21073C63v26Ev,
  (VTBL_ENTRY)&_ZN8S21073C63v27Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S21073C6[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v17Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v18Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v19Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v20Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v21Ev,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S21073C6[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S21073C93v16Ev,
};
extern VTBL_ENTRY _ZTV8S21073C6[];
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
extern void _ZN8S21073C73v17Ev();
extern void _ZN8S21073C73v18Ev();
extern void _ZN8S21073C73v19Ev();
extern void _ZN8S21073C73v20Ev();
extern void _ZN8S21073C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S21073C7__8S21073C6[] = {
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S21073C7[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v17Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v18Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v19Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v20Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v21Ev,
};
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
extern void _ZN8S21073C93v16Ev();
static  VTBL_ENTRY _tg__ZTV8S21073C9__8S21073C7__8S21073C6[] = {
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S21073C7[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S21073C93v16Ev,
};
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
static  VTBL_ENTRY _tg__ZTV11S21073C8_nt__A1__8S21073C7__8S21073C6[] = {
  0,
  0,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S21073C7[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
};
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
extern void _ZN8S21073C93v16Ev();
static  VTBL_ENTRY _tg__ZTV8S21073C9__8S21073C6[] = {
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S21073C9[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S21073C93v16Ev,
};
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
static  VTBL_ENTRY _tg__ZTV11S21073C8_nt__8S21073C9__8S21073C6[] = {
  0,
  0,
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI8S21073C9[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
};
static  VTT_ENTRY vtt_S21073C6[] = {
  {&(_ZTV8S21073C6[7]),  7,44},
  {&(_ZTV8S21073C6[28]),  28,44},
  {&(_ZTV8S21073C6[41]),  41,44},
  {&(_ZTV8S21073C6[7]),  7,44},
  {&(_tg__ZTV8S21073C7__8S21073C6[4]),  4,11},
  {&(_tg__ZTV8S21073C9__8S21073C7__8S21073C6[6]),  6,9},
  {&(_tg__ZTV11S21073C8_nt__A1__8S21073C7__8S21073C6[4]),  4,6},
  {&(_tg__ZTV8S21073C9__8S21073C6[5]),  5,8},
  {&(_tg__ZTV11S21073C8_nt__8S21073C9__8S21073C6[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21073C6[];
extern  VTBL_ENTRY _ZTV8S21073C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21073C6[];
Class_Descriptor cd_S21073C6 = {  "S21073C6", // class name
  bases_S21073C6, 4,
  &(vtc_S21073C6[0]), // expected_vtbl_contents
  &(vtt_S21073C6[0]), // expected_vtt_contents
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI8S21073C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S21073C6),44, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21073C6),9, //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  S21073C12  : S21073C9 {
  virtual void  v36(); // _ZN9S21073C123v36Ev
  ~S21073C12(); // tgen
  S21073C12(); // tgen
};
//SIG(-1 S21073C12) C1{ BC2{ VBC3{ v2 v3} v4 Fp} v1}


void  S21073C12 ::v36(){vfunc_called(this, "_ZN9S21073C123v36Ev");}
S21073C12 ::~S21073C12(){ note_dtor("S21073C12", this);} // tgen
S21073C12 ::S21073C12(){ note_ctor("S21073C12", this);} // tgen

static void Test_S21073C12()
{
  extern Class_Descriptor cd_S21073C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S21073C12, buf);
    S21073C12 *dp, &lv = *(dp=new (buf) S21073C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S21073C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21073C12)");
    check_base_class_offset(lv, (S21073C8_nt*)(S21073C9*), 0, "S21073C12");
    check_base_class_offset(lv, (S21073C9*), 0, "S21073C12");
    test_class_info(&lv, &cd_S21073C12);
    dp->~S21073C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21073C12(Test_S21073C12, "S21073C12", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN9S21073C12C1Ev();
extern void _ZN9S21073C12D1Ev();
Name_Map name_map_S21073C12[] = {
  NSPAIR(_ZN9S21073C12C1Ev),
  NSPAIR(_ZN9S21073C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21073C8_nt;
extern VTBL_ENTRY _ZTI11S21073C8_nt[];
extern  VTBL_ENTRY _ZTV11S21073C8_nt[];
extern Class_Descriptor cd_S21073C9;
extern VTBL_ENTRY _ZTI8S21073C9[];
extern  VTBL_ENTRY _ZTV8S21073C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21073C9[];
static Base_Class bases_S21073C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21073C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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_S21073C9,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S21073C12[];
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
extern void _ZN8S21073C93v16Ev();
extern void _ZN9S21073C123v36Ev();
static  VTBL_ENTRY vtc_S21073C12[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S21073C12[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S21073C93v16Ev,
  (VTBL_ENTRY)&_ZN9S21073C123v36Ev,
};
extern VTBL_ENTRY _ZTV9S21073C12[];
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
extern void _ZN8S21073C93v16Ev();
static  VTBL_ENTRY _tg__ZTV8S21073C9__9S21073C12[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21073C9[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S21073C93v16Ev,
};
static  VTT_ENTRY vtt_S21073C12[] = {
  {&(_ZTV9S21073C12[5]),  5,9},
  {&(_tg__ZTV8S21073C9__9S21073C12[5]),  5,8},
  {&(_tg__ZTV8S21073C9__9S21073C12[5]),  5,8},
  {&(_ZTV9S21073C12[5]),  5,9},
};
extern VTBL_ENTRY _ZTI9S21073C12[];
extern  VTBL_ENTRY _ZTV9S21073C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21073C12[];
Class_Descriptor cd_S21073C12 = {  "S21073C12", // class name
  bases_S21073C12, 2,
  &(vtc_S21073C12[0]), // expected_vtbl_contents
  &(vtt_S21073C12[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI9S21073C12),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S21073C12),9, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21073C12),4, //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  S21073C11  : S21073C12 {
  void *s21073c11f0[7];
  virtual void  v34(); // _ZN9S21073C113v34Ev
  virtual void  v35(); // _ZN9S21073C113v35Ev
  ~S21073C11(); // tgen
  S21073C11(); // tgen
};
//SIG(1 S21073C11) C1{ BC2{ BC3{ VBC4{ v3 v4} v5 Fp} v6} v1 v2 Fp[7]}


void  S21073C11 ::v34(){vfunc_called(this, "_ZN9S21073C113v34Ev");}
void  S21073C11 ::v35(){vfunc_called(this, "_ZN9S21073C113v35Ev");}
S21073C11 ::~S21073C11(){ note_dtor("S21073C11", this);} // tgen
S21073C11 ::S21073C11(){ note_ctor("S21073C11", this);} // tgen

static void Test_S21073C11()
{
  extern Class_Descriptor cd_S21073C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S21073C11, buf);
    S21073C11 *dp, &lv = *(dp=new (buf) S21073C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S21073C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21073C11)");
    check_base_class_offset(lv, (S21073C8_nt*)(S21073C9*)(S21073C12*), 0, "S21073C11");
    check_base_class_offset(lv, (S21073C9*)(S21073C12*), 0, "S21073C11");
    check_base_class_offset(lv, (S21073C12*), 0, "S21073C11");
    check_field_offset(lv, s21073c11f0, ABISELECT(16,8), "S21073C11.s21073c11f0");
    test_class_info(&lv, &cd_S21073C11);
    dp->~S21073C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21073C11(Test_S21073C11, "S21073C11", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN9S21073C11C1Ev();
extern void _ZN9S21073C11D1Ev();
Name_Map name_map_S21073C11[] = {
  NSPAIR(_ZN9S21073C11C1Ev),
  NSPAIR(_ZN9S21073C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21073C8_nt;
extern VTBL_ENTRY _ZTI11S21073C8_nt[];
extern  VTBL_ENTRY _ZTV11S21073C8_nt[];
extern Class_Descriptor cd_S21073C9;
extern VTBL_ENTRY _ZTI8S21073C9[];
extern  VTBL_ENTRY _ZTV8S21073C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21073C9[];
extern Class_Descriptor cd_S21073C12;
extern VTBL_ENTRY _ZTI9S21073C12[];
extern  VTBL_ENTRY _ZTV9S21073C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21073C12[];
static Base_Class bases_S21073C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21073C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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_S21073C9,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S21073C12,    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 _ZTI9S21073C11[];
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
extern void _ZN8S21073C93v16Ev();
extern void _ZN9S21073C123v36Ev();
extern void _ZN9S21073C113v34Ev();
extern void _ZN9S21073C113v35Ev();
static  VTBL_ENTRY vtc_S21073C11[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S21073C11[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S21073C93v16Ev,
  (VTBL_ENTRY)&_ZN9S21073C123v36Ev,
  (VTBL_ENTRY)&_ZN9S21073C113v34Ev,
  (VTBL_ENTRY)&_ZN9S21073C113v35Ev,
};
extern VTBL_ENTRY _ZTV9S21073C11[];
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
extern void _ZN8S21073C93v16Ev();
extern void _ZN9S21073C123v36Ev();
static  VTBL_ENTRY _tg__ZTV9S21073C12__9S21073C11[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S21073C12[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S21073C93v16Ev,
  (VTBL_ENTRY)&_ZN9S21073C123v36Ev,
};
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
extern void _ZN8S21073C93v16Ev();
static  VTBL_ENTRY _tg__ZTV8S21073C99S21073C12__9S21073C11[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21073C9[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S21073C93v16Ev,
};
static  VTT_ENTRY vtt_S21073C11[] = {
  {&(_ZTV9S21073C11[5]),  5,11},
  {&(_tg__ZTV9S21073C12__9S21073C11[5]),  5,9},
  {&(_tg__ZTV8S21073C99S21073C12__9S21073C11[5]),  5,8},
  {&(_tg__ZTV8S21073C99S21073C12__9S21073C11[5]),  5,8},
  {&(_tg__ZTV9S21073C12__9S21073C11[5]),  5,9},
  {&(_ZTV9S21073C11[5]),  5,11},
};
extern VTBL_ENTRY _ZTI9S21073C11[];
extern  VTBL_ENTRY _ZTV9S21073C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S21073C11[];
Class_Descriptor cd_S21073C11 = {  "S21073C11", // class name
  bases_S21073C11, 3,
  &(vtc_S21073C11[0]), // expected_vtbl_contents
  &(vtt_S21073C11[0]), // expected_vtt_contents
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI9S21073C11),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV9S21073C11),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S21073C11),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21073C1  : virtual S21073C2 , virtual S21073C6 {
  ::S21073C8_nt s21073c1f0;
  ::S21073C3 s21073c1f1;
  char s21073c1f2;
  ::S21073C11 s21073c1f3[9];
  virtual void  v1(); // _ZN8S21073C12v1Ev
  virtual void  v2(); // _ZN8S21073C12v2Ev
  ~S21073C1(); // tgen
  S21073C1(); // tgen
};
//SIG(1 S21073C1) C1{ VBC2{ VBC3{ VBC4{ v3 v4 v5 v6 v7 v8 Fi} v9 v10 v11 FC5{ v28 v29 v30 v31 v32 v33 Fl Fi} Fi} vd v12 v13 Fs} VBC6{ VBC7{ BC8{ v14 v15} VBC9{ VBC8 v16 Fp} v17 v18 v19 v20 v21 Fi FC10{} FC9} vd v22 v23 v24 v25 v26 v27 Fp[2]} v1 v2 FC8 FC3 Fc FC11{ BC12{ BC9 v36} v34 v35 Fp[7]}[9]}


void  S21073C1 ::v1(){vfunc_called(this, "_ZN8S21073C12v1Ev");}
void  S21073C1 ::v2(){vfunc_called(this, "_ZN8S21073C12v2Ev");}
S21073C1 ::~S21073C1(){ note_dtor("S21073C1", this);} // tgen
S21073C1 ::S21073C1(){ note_ctor("S21073C1", this);} // tgen

static void Test_S21073C1()
{
  extern Class_Descriptor cd_S21073C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(110,111)];
    init_test(&cd_S21073C1, buf);
    S21073C1 *dp, &lv = *(dp=new (buf) S21073C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(872,440), "sizeof(S21073C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21073C1)");
    check_base_class_offset(lv, (S21073C4*)(S21073C3*), ABISELECT(784,392), "S21073C1");
    check_base_class_offset(lv, (S21073C3*)(S21073C2*), ABISELECT(744,372), "S21073C1");
    check_base_class_offset(lv, (S21073C2*), ABISELECT(728,364), "S21073C1");
    /*is_ambiguous_... S21073C7::S21073C8_nt */ AMB_check_base_class_offset(lv, (S21073C8_nt*)(S21073C7*), ABISELECT(824,412), "S21073C1");
    check_base_class_offset(lv, (S21073C8_nt*)(S21073C9*), 0, "S21073C1");
    check_base_class_offset(lv, (S21073C9*)(S21073C7*), ABISELECT(856,432), "S21073C1");
    check_base_class_offset(lv, (S21073C7*)(S21073C6*), ABISELECT(824,412), "S21073C1");
    check_base_class_offset(lv, (S21073C6*), ABISELECT(800,400), "S21073C1");
    check_field_offset(lv, s21073c1f0, ABISELECT(8,4), "S21073C1.s21073c1f0");
    check_field_offset(lv, s21073c1f1, ABISELECT(16,8), "S21073C1.s21073c1f1");
    check_field_offset(lv, s21073c1f2, ABISELECT(72,36), "S21073C1.s21073c1f2");
    check_field_offset(lv, s21073c1f3, ABISELECT(80,40), "S21073C1.s21073c1f3");
    test_class_info(&lv, &cd_S21073C1);
    dp->~S21073C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21073C1(Test_S21073C1, "S21073C1", ABISELECT(872,440));

#else // __cplusplus

extern void _ZN8S21073C1C1Ev();
extern void _ZN8S21073C1D1Ev();
Name_Map name_map_S21073C1[] = {
  NSPAIR(_ZN8S21073C1C1Ev),
  NSPAIR(_ZN8S21073C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S21073C4;
extern VTBL_ENTRY _ZTI8S21073C4[];
extern  VTBL_ENTRY _ZTV8S21073C4[];
extern Class_Descriptor cd_S21073C3;
extern VTBL_ENTRY _ZTI8S21073C3[];
extern  VTBL_ENTRY _ZTV8S21073C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21073C3[];
extern Class_Descriptor cd_S21073C2;
extern VTBL_ENTRY _ZTI8S21073C2[];
extern  VTBL_ENTRY _ZTV8S21073C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21073C2[];
extern Class_Descriptor cd_S21073C8_nt;
extern VTBL_ENTRY _ZTI11S21073C8_nt[];
extern  VTBL_ENTRY _ZTV11S21073C8_nt[];
extern Class_Descriptor cd_S21073C8_nt;
extern VTBL_ENTRY _ZTI11S21073C8_nt[];
extern  VTBL_ENTRY _ZTV11S21073C8_nt[];
extern Class_Descriptor cd_S21073C9;
extern VTBL_ENTRY _ZTI8S21073C9[];
extern  VTBL_ENTRY _ZTV8S21073C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21073C9[];
extern Class_Descriptor cd_S21073C7;
extern VTBL_ENTRY _ZTI8S21073C7[];
extern  VTBL_ENTRY _ZTV8S21073C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21073C7[];
extern Class_Descriptor cd_S21073C6;
extern VTBL_ENTRY _ZTI8S21073C6[];
extern  VTBL_ENTRY _ZTV8S21073C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21073C6[];
static Base_Class bases_S21073C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S21073C4,    ABISELECT(784,392), //bcp->offset
    37, //bcp->virtual_function_table_offset
    8, //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_S21073C3,    ABISELECT(744,372), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S21073C2,    ABISELECT(728,364), //bcp->offset
    17, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S21073C8_nt,    ABISELECT(824,412), //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S21073C8_nt,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    5, //immediately_derived
  0, 1},
  {&cd_S21073C9,    ABISELECT(856,432), //bcp->offset
    93, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S21073C7,    ABISELECT(824,412), //bcp->offset
    75, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S21073C6,    ABISELECT(800,400), //bcp->offset
    51, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S21073C1[];
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
extern void _ZN8S21073C12v1Ev();
extern void _ZN8S21073C12v2Ev();
extern void _ZN8S21073C1D1Ev();
extern void _ZN8S21073C1D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S21073C1D1Ev,_ZTv0_n20_N8S21073C1D1Ev)();
extern void ABISELECT(_ZThn728_N8S21073C1D1Ev,_ZThn364_N8S21073C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S21073C1D0Ev,_ZTv0_n20_N8S21073C1D0Ev)();
extern void ABISELECT(_ZThn728_N8S21073C1D0Ev,_ZThn364_N8S21073C1D0Ev)() __attribute__((weak));
extern void _ZN8S21073C23v12Ev();
extern void _ZN8S21073C23v13Ev();
extern void _ZN8S21073C32v9Ev();
extern void _ZN8S21073C33v10Ev();
extern void _ZN8S21073C33v11Ev();
extern void _ZN8S21073C42v3Ev();
extern void _ZN8S21073C42v4Ev();
extern void _ZN8S21073C42v5Ev();
extern void _ZN8S21073C42v6Ev();
extern void _ZN8S21073C42v7Ev();
extern void _ZN8S21073C42v8Ev();
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
extern void ABISELECT(_ZTv0_n64_N8S21073C1D1Ev,_ZTv0_n32_N8S21073C1D1Ev)();
extern void ABISELECT(_ZThn800_N8S21073C1D1Ev,_ZThn400_N8S21073C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S21073C1D0Ev,_ZTv0_n32_N8S21073C1D0Ev)();
extern void ABISELECT(_ZThn800_N8S21073C1D0Ev,_ZThn400_N8S21073C1D0Ev)() __attribute__((weak));
extern void _ZN8S21073C63v22Ev();
extern void _ZN8S21073C63v23Ev();
extern void _ZN8S21073C63v24Ev();
extern void _ZN8S21073C63v25Ev();
extern void _ZN8S21073C63v26Ev();
extern void _ZN8S21073C63v27Ev();
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
extern void _ZN8S21073C73v17Ev();
extern void _ZN8S21073C73v18Ev();
extern void _ZN8S21073C73v19Ev();
extern void _ZN8S21073C73v20Ev();
extern void _ZN8S21073C73v21Ev();
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
extern void _ZN8S21073C93v16Ev();
static  VTBL_ENTRY vtc_S21073C1[] = {
  0,
  ABISELECT(856,432),
  ABISELECT(824,412),
  ABISELECT(800,400),
  ABISELECT(784,392),
  ABISELECT(744,372),
  ABISELECT(728,364),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S21073C1[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S21073C12v1Ev,
  (VTBL_ENTRY)&_ZN8S21073C12v2Ev,
  (VTBL_ENTRY)&_ZN8S21073C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21073C1D0Ev,
  0,
  0,
  ABISELECT(-728,-364),
  ABISELECT(56,28),
  ABISELECT(16,8),
  ABISELECT(-728,-364),
  (VTBL_ENTRY)&(_ZTI8S21073C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21073C1D1Ev,_ZTv0_n20_N8S21073C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S21073C1D0Ev,_ZTv0_n20_N8S21073C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21073C23v12Ev,
  (VTBL_ENTRY)&_ZN8S21073C23v13Ev,
  0,
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(-744,-372),
  (VTBL_ENTRY)&(_ZTI8S21073C1[0]),
  (VTBL_ENTRY)&_ZN8S21073C32v9Ev,
  (VTBL_ENTRY)&_ZN8S21073C33v10Ev,
  (VTBL_ENTRY)&_ZN8S21073C33v11Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-784,-392),
  (VTBL_ENTRY)&(_ZTI8S21073C1[0]),
  (VTBL_ENTRY)&_ZN8S21073C42v3Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-800,-400),
  ABISELECT(-800,-400),
  ABISELECT(56,32),
  ABISELECT(24,12),
  ABISELECT(-800,-400),
  ABISELECT(-800,-400),
  ABISELECT(-800,-400),
  (VTBL_ENTRY)&(_ZTI8S21073C1[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S21073C1D1Ev,_ZTv0_n32_N8S21073C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S21073C1D0Ev,_ZTv0_n32_N8S21073C1D0Ev),
  (VTBL_ENTRY)&_ZN8S21073C63v22Ev,
  (VTBL_ENTRY)&_ZN8S21073C63v23Ev,
  (VTBL_ENTRY)&_ZN8S21073C63v24Ev,
  (VTBL_ENTRY)&_ZN8S21073C63v25Ev,
  (VTBL_ENTRY)&_ZN8S21073C63v26Ev,
  (VTBL_ENTRY)&_ZN8S21073C63v27Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-824,-412),
  ABISELECT(32,20),
  ABISELECT(-824,-412),
  (VTBL_ENTRY)&(_ZTI8S21073C1[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v17Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v18Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v19Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v20Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v21Ev,
  0,
  ABISELECT(-856,-432),
  ABISELECT(-856,-432),
  ABISELECT(-856,-432),
  ABISELECT(-856,-432),
  (VTBL_ENTRY)&(_ZTI8S21073C1[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S21073C93v16Ev,
};
extern VTBL_ENTRY _ZTV8S21073C1[];
extern void _ZN8S21073C2D1Ev();
extern void _ZN8S21073C2D0Ev();
extern void _ZN8S21073C23v12Ev();
extern void _ZN8S21073C23v13Ev();
static  VTBL_ENTRY _tg__ZTV8S21073C2__8S21073C1[] = {
  ABISELECT(56,28),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S21073C2[0]),
  (VTBL_ENTRY)&_ZN8S21073C2D1Ev,
  (VTBL_ENTRY)&_ZN8S21073C2D0Ev,
  (VTBL_ENTRY)&_ZN8S21073C23v12Ev,
  (VTBL_ENTRY)&_ZN8S21073C23v13Ev,
};
extern void _ZN8S21073C32v9Ev();
extern void _ZN8S21073C33v10Ev();
extern void _ZN8S21073C33v11Ev();
static  VTBL_ENTRY _tg__ZTV8S21073C3__8S21073C2__8S21073C1[] = {
  0,
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S21073C2[0]),
  (VTBL_ENTRY)&_ZN8S21073C32v9Ev,
  (VTBL_ENTRY)&_ZN8S21073C33v10Ev,
  (VTBL_ENTRY)&_ZN8S21073C33v11Ev,
};
extern void _ZN8S21073C42v3Ev();
extern void _ZN8S21073C42v4Ev();
extern void _ZN8S21073C42v5Ev();
extern void _ZN8S21073C42v6Ev();
extern void _ZN8S21073C42v7Ev();
extern void _ZN8S21073C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S21073C4__8S21073C2__8S21073C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S21073C2[0]),
  (VTBL_ENTRY)&_ZN8S21073C42v3Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v8Ev,
};
extern void _ZN8S21073C32v9Ev();
extern void _ZN8S21073C33v10Ev();
extern void _ZN8S21073C33v11Ev();
static  VTBL_ENTRY _tg__ZTV8S21073C3__8S21073C1[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S21073C3[0]),
  (VTBL_ENTRY)&_ZN8S21073C32v9Ev,
  (VTBL_ENTRY)&_ZN8S21073C33v10Ev,
  (VTBL_ENTRY)&_ZN8S21073C33v11Ev,
};
extern void _ZN8S21073C42v3Ev();
extern void _ZN8S21073C42v4Ev();
extern void _ZN8S21073C42v5Ev();
extern void _ZN8S21073C42v6Ev();
extern void _ZN8S21073C42v7Ev();
extern void _ZN8S21073C42v8Ev();
static  VTBL_ENTRY _tg__ZTV8S21073C4__8S21073C3__8S21073C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S21073C3[0]),
  (VTBL_ENTRY)&_ZN8S21073C42v3Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v4Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v5Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v6Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v7Ev,
  (VTBL_ENTRY)&_ZN8S21073C42v8Ev,
};
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
extern void _ZN8S21073C6D1Ev();
extern void _ZN8S21073C6D0Ev();
extern void _ZN8S21073C63v22Ev();
extern void _ZN8S21073C63v23Ev();
extern void _ZN8S21073C63v24Ev();
extern void _ZN8S21073C63v25Ev();
extern void _ZN8S21073C63v26Ev();
extern void _ZN8S21073C63v27Ev();
static  VTBL_ENTRY _tg__ZTV8S21073C6__8S21073C1[] = {
  ABISELECT(-800,-400),
  ABISELECT(56,32),
  ABISELECT(24,12),
  ABISELECT(-800,-400),
  ABISELECT(-800,-400),
  0,
  (VTBL_ENTRY)&(_ZTI8S21073C6[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S21073C6D1Ev,
  (VTBL_ENTRY)&_ZN8S21073C6D0Ev,
  (VTBL_ENTRY)&_ZN8S21073C63v22Ev,
  (VTBL_ENTRY)&_ZN8S21073C63v23Ev,
  (VTBL_ENTRY)&_ZN8S21073C63v24Ev,
  (VTBL_ENTRY)&_ZN8S21073C63v25Ev,
  (VTBL_ENTRY)&_ZN8S21073C63v26Ev,
  (VTBL_ENTRY)&_ZN8S21073C63v27Ev,
};
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
extern void _ZN8S21073C73v17Ev();
extern void _ZN8S21073C73v18Ev();
extern void _ZN8S21073C73v19Ev();
extern void _ZN8S21073C73v20Ev();
extern void _ZN8S21073C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S21073C7__8S21073C6__8S21073C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-824,-412),
  ABISELECT(32,20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S21073C6[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v17Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v18Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v19Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v20Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v21Ev,
};
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
extern void _ZN8S21073C93v16Ev();
static  VTBL_ENTRY _tg__ZTV8S21073C9__8S21073C6__8S21073C1[] = {
  0,
  ABISELECT(-856,-432),
  ABISELECT(-856,-432),
  ABISELECT(-856,-432),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S21073C6[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S21073C93v16Ev,
};
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
static  VTBL_ENTRY _tg__ZTV11S21073C8_nt__A1__8S21073C6__8S21073C1[] = {
  0,
  0,
  ABISELECT(800,400),
  (VTBL_ENTRY)&(_ZTI8S21073C6[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
};
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
extern void _ZN8S21073C73v17Ev();
extern void _ZN8S21073C73v18Ev();
extern void _ZN8S21073C73v19Ev();
extern void _ZN8S21073C73v20Ev();
extern void _ZN8S21073C73v21Ev();
static  VTBL_ENTRY _tg__ZTV8S21073C7__8S21073C1[] = {
  ABISELECT(-824,-412),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S21073C7[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v17Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v18Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v19Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v20Ev,
  (VTBL_ENTRY)&_ZN8S21073C73v21Ev,
};
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
extern void _ZN8S21073C93v16Ev();
static  VTBL_ENTRY _tg__ZTV8S21073C9__8S21073C7__8S21073C1[] = {
  0,
  ABISELECT(-856,-432),
  ABISELECT(-856,-432),
  ABISELECT(-856,-432),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S21073C7[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S21073C93v16Ev,
};
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
static  VTBL_ENTRY _tg__ZTV11S21073C8_nt__A1__8S21073C7__8S21073C1[] = {
  0,
  0,
  ABISELECT(824,412),
  (VTBL_ENTRY)&(_ZTI8S21073C7[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
};
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
extern void _ZN8S21073C93v16Ev();
static  VTBL_ENTRY _tg__ZTV8S21073C9__8S21073C1[] = {
  ABISELECT(-856,-432),
  ABISELECT(-856,-432),
  ABISELECT(-856,-432),
  0,
  (VTBL_ENTRY)&(_ZTI8S21073C9[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
  (VTBL_ENTRY)&_ZN8S21073C93v16Ev,
};
extern void _ZN11S21073C8_nt3v14Ev();
extern void _ZN11S21073C8_nt3v15Ev();
static  VTBL_ENTRY _tg__ZTV11S21073C8_nt__8S21073C9__8S21073C1[] = {
  0,
  0,
  ABISELECT(856,432),
  (VTBL_ENTRY)&(_ZTI8S21073C9[0]),
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v14Ev,
  (VTBL_ENTRY)&_ZN11S21073C8_nt3v15Ev,
};
static  VTT_ENTRY vtt_S21073C1[] = {
  {&(_ZTV8S21073C1[11]),  11,102},
  {&(_ZTV8S21073C1[24]),  24,102},
  {&(_ZTV8S21073C1[34]),  34,102},
  {&(_ZTV8S21073C1[45]),  45,102},
  {&(_ZTV8S21073C1[65]),  65,102},
  {&(_ZTV8S21073C1[86]),  86,102},
  {&(_ZTV8S21073C1[99]),  99,102},
  {&(_ZTV8S21073C1[11]),  11,102},
  {&(_tg__ZTV8S21073C2__8S21073C1[4]),  4,8},
  {&(_tg__ZTV8S21073C3__8S21073C2__8S21073C1[6]),  6,9},
  {&(_tg__ZTV8S21073C4__8S21073C2__8S21073C1[8]),  8,14},
  {&(_tg__ZTV8S21073C3__8S21073C1[3]),  3,6},
  {&(_tg__ZTV8S21073C4__8S21073C3__8S21073C1[8]),  8,14},
  {&(_tg__ZTV8S21073C6__8S21073C1[7]),  7,17},
  {&(_tg__ZTV8S21073C7__8S21073C6__8S21073C1[11]),  11,18},
  {&(_tg__ZTV8S21073C9__8S21073C6__8S21073C1[6]),  6,9},
  {&(_tg__ZTV11S21073C8_nt__A1__8S21073C6__8S21073C1[4]),  4,6},
  {&(_tg__ZTV8S21073C7__8S21073C1[4]),  4,11},
  {&(_tg__ZTV8S21073C9__8S21073C7__8S21073C1[6]),  6,9},
  {&(_tg__ZTV11S21073C8_nt__A1__8S21073C7__8S21073C1[4]),  4,6},
  {&(_tg__ZTV8S21073C9__8S21073C1[5]),  5,8},
  {&(_tg__ZTV11S21073C8_nt__8S21073C9__8S21073C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S21073C1[];
extern  VTBL_ENTRY _ZTV8S21073C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S21073C1[];
static VTBL_ENTRY alt_thunk_names163[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S21073C1D0Ev,_ZTv0_n32_N8S21073C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N8S21073C1D0Ev,_ZThn400_N8S21073C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S21073C1D1Ev,_ZTv0_n32_N8S21073C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn800_N8S21073C1D1Ev,_ZThn400_N8S21073C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21073C1D0Ev,_ZTv0_n20_N8S21073C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn728_N8S21073C1D0Ev,_ZThn364_N8S21073C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S21073C1D1Ev,_ZTv0_n20_N8S21073C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn728_N8S21073C1D1Ev,_ZThn364_N8S21073C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S21073C1 = {  "S21073C1", // class name
  bases_S21073C1, 8,
  &(vtc_S21073C1[0]), // expected_vtbl_contents
  &(vtt_S21073C1[0]), // expected_vtt_contents
  ABISELECT(872,440), // object size
  NSPAIRA(_ZTI8S21073C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S21073C1),102, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S21073C1),22, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names163,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20620C3_nt  {
  long double s20620c3f0;
  void  mf20620c3(); // _ZN11S20620C3_nt9mf20620c3Ev
};
//SIG(-1 S20620C3_nt) C1{ m FD}


void  S20620C3_nt ::mf20620c3(){}

//skip512 S20620C3_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S20620C3_nt[];
VTBL_ENTRY *P__ZTI11S20620C3_nt = _ZTI11S20620C3_nt; 
Class_Descriptor cd_S20620C3_nt = {  "S20620C3_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI11S20620C3_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  S20620C2  : virtual S20620C3_nt {
  void *s20620c2f0;
  int s20620c2f1[4];
  ::S20620C3_nt s20620c2f2;
  ::S20620C3_nt s20620c2f3;
  ~S20620C2(); // tgen
  S20620C2(); // tgen
};
//SIG(-1 S20620C2) C1{ VBC2{ m FD} Fp Fi[4] FC2 FC2}


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

static void Test_S20620C2()
{
  extern Class_Descriptor cd_S20620C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,16)];
    init_test(&cd_S20620C2, buf);
    S20620C2 *dp, &lv = *(dp=new (buf) S20620C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S20620C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20620C2)");
    check_base_class_offset(lv, (S20620C3_nt*), ABISELECT(64,48), "S20620C2");
    check_field_offset(lv, s20620c2f0, ABISELECT(8,4), "S20620C2.s20620c2f0");
    check_field_offset(lv, s20620c2f1, ABISELECT(16,8), "S20620C2.s20620c2f1");
    check_field_offset(lv, s20620c2f2, ABISELECT(32,24), "S20620C2.s20620c2f2");
    check_field_offset(lv, s20620c2f3, ABISELECT(48,36), "S20620C2.s20620c2f3");
    test_class_info(&lv, &cd_S20620C2);
    dp->~S20620C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20620C2(Test_S20620C2, "S20620C2", ABISELECT(80,60));

#else // __cplusplus

extern void _ZN8S20620C2C1Ev();
extern void _ZN8S20620C2D1Ev();
Name_Map name_map_S20620C2[] = {
  NSPAIR(_ZN8S20620C2C1Ev),
  NSPAIR(_ZN8S20620C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20620C3_nt;
extern VTBL_ENTRY _ZTI11S20620C3_nt[];
static Base_Class bases_S20620C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20620C3_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
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20620C2[];
static  VTBL_ENTRY vtc_S20620C2[] = {
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C2[0]),
};
extern VTBL_ENTRY _ZTV8S20620C2[];
static  VTT_ENTRY vtt_S20620C2[] = {
  {&(_ZTV8S20620C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20620C2[];
extern  VTBL_ENTRY _ZTV8S20620C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C2[];
Class_Descriptor cd_S20620C2 = {  "S20620C2", // class name
  bases_S20620C2, 1,
  &(vtc_S20620C2[0]), // expected_vtbl_contents
  &(vtt_S20620C2[0]), // expected_vtt_contents
  ABISELECT(80,60), // object size
  NSPAIRA(_ZTI8S20620C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20620C2),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20620C2),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  S20620C5  : virtual S20620C3_nt , virtual S20620C2 {
  void *s20620c5f0;
  __tsi64 s20620c5f1;
  void *s20620c5f2;
  long double s20620c5f3;
  short s20620c5f4;
  virtual  ~S20620C5(); // _ZN8S20620C5D2Ev
  S20620C5(); // tgen
};
//SIG(-1 S20620C5) C1{ VBC2{ m FD} VBC3{ VBC2 Fp Fi[4] FC2 FC2} vd Fp FL Fp FD Fs}


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

static void Test_S20620C5()
{
  extern Class_Descriptor cd_S20620C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,25)];
    init_test(&cd_S20620C5, buf);
    S20620C5 *dp, &lv = *(dp=new (buf) S20620C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,96), "sizeof(S20620C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20620C5)");
    check_base_class_offset(lv, (S20620C3_nt*), ABISELECT(64,36), "S20620C5");
    check_base_class_offset(lv, (S20620C3_nt*)(S20620C2*), ABISELECT(64,36), "S20620C5");
    check_base_class_offset(lv, (S20620C2*), ABISELECT(80,48), "S20620C5");
    check_field_offset(lv, s20620c5f0, ABISELECT(8,4), "S20620C5.s20620c5f0");
    check_field_offset(lv, s20620c5f1, ABISELECT(16,8), "S20620C5.s20620c5f1");
    check_field_offset(lv, s20620c5f2, ABISELECT(24,16), "S20620C5.s20620c5f2");
    check_field_offset(lv, s20620c5f3, ABISELECT(32,20), "S20620C5.s20620c5f3");
    check_field_offset(lv, s20620c5f4, ABISELECT(48,32), "S20620C5.s20620c5f4");
    test_class_info(&lv, &cd_S20620C5);
    dp->~S20620C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20620C5(Test_S20620C5, "S20620C5", ABISELECT(144,96));

#else // __cplusplus

extern void _ZN8S20620C5C1Ev();
extern void _ZN8S20620C5D2Ev();
Name_Map name_map_S20620C5[] = {
  NSPAIR(_ZN8S20620C5C1Ev),
  NSPAIR(_ZN8S20620C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20620C3_nt;
extern VTBL_ENTRY _ZTI11S20620C3_nt[];
extern Class_Descriptor cd_S20620C2;
extern VTBL_ENTRY _ZTI8S20620C2[];
extern  VTBL_ENTRY _ZTV8S20620C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C2[];
static Base_Class bases_S20620C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20620C3_nt,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S20620C2,    ABISELECT(80,48), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //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 _ZTI8S20620C5[];
extern void _ZN8S20620C5D1Ev();
extern void _ZN8S20620C5D0Ev();
static  VTBL_ENTRY vtc_S20620C5[] = {
  ABISELECT(80,48),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
  (VTBL_ENTRY)&_ZN8S20620C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C5D0Ev,
  ABISELECT(-16,-12),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
};
extern VTBL_ENTRY _ZTV8S20620C5[];
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C5[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C2[0]),
};
static  VTT_ENTRY vtt_S20620C5[] = {
  {&(_ZTV8S20620C5[4]),  4,9},
  {&(_ZTV8S20620C5[9]),  9,9},
  {&(_tg__ZTV8S20620C2__8S20620C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20620C5[];
extern  VTBL_ENTRY _ZTV8S20620C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C5[];
Class_Descriptor cd_S20620C5 = {  "S20620C5", // class name
  bases_S20620C5, 2,
  &(vtc_S20620C5[0]), // expected_vtbl_contents
  &(vtt_S20620C5[0]), // expected_vtt_contents
  ABISELECT(144,96), // object size
  NSPAIRA(_ZTI8S20620C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20620C5),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20620C5),3, //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  S20620C4  : virtual S20620C3_nt , virtual S20620C5 , S20620C2 {
  virtual  ~S20620C4(); // _ZN8S20620C4D2Ev
  S20620C4(); // tgen
};
//SIG(-1 S20620C4) C1{ VBC2{ m FD} VBC3{ VBC2 VBC4{ VBC2 Fp Fi[4] FC2 FC2} vd Fp FL Fp FD Fs} BC4 vd}


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

static void Test_S20620C4()
{
  extern Class_Descriptor cd_S20620C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,37)];
    init_test(&cd_S20620C4, buf);
    S20620C4 *dp, &lv = *(dp=new (buf) S20620C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,144), "sizeof(S20620C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20620C4)");
    check_base_class_offset(lv, (S20620C3_nt*), ABISELECT(64,48), "S20620C4");
    check_base_class_offset(lv, (S20620C3_nt*)(S20620C5*), ABISELECT(64,48), "S20620C4");
    /*is_ambiguous_... S20620C4::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C2*), ABISELECT(64,48), "S20620C4");
    /*is_ambiguous_... S20620C4::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C2*), ABISELECT(64,48), "S20620C4");
    check_base_class_offset(lv, (S20620C2*)(S20620C5*), ABISELECT(144,96), "S20620C4");
    check_base_class_offset(lv, (S20620C5*), ABISELECT(80,60), "S20620C4");
    /*is_ambiguous_... S20620C4::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C2*), 0, "S20620C4");
    test_class_info(&lv, &cd_S20620C4);
    dp->~S20620C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20620C4(Test_S20620C4, "S20620C4", ABISELECT(208,144));

#else // __cplusplus

extern void _ZN8S20620C4C1Ev();
extern void _ZN8S20620C4D2Ev();
Name_Map name_map_S20620C4[] = {
  NSPAIR(_ZN8S20620C4C1Ev),
  NSPAIR(_ZN8S20620C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20620C3_nt;
extern VTBL_ENTRY _ZTI11S20620C3_nt[];
extern Class_Descriptor cd_S20620C2;
extern VTBL_ENTRY _ZTI8S20620C2[];
extern  VTBL_ENTRY _ZTV8S20620C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C2[];
extern Class_Descriptor cd_S20620C5;
extern VTBL_ENTRY _ZTI8S20620C5[];
extern  VTBL_ENTRY _ZTV8S20620C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C5[];
extern Class_Descriptor cd_S20620C2;
extern VTBL_ENTRY _ZTI8S20620C2[];
extern  VTBL_ENTRY _ZTV8S20620C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C2[];
static Base_Class bases_S20620C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20620C3_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
  1, 1},
  {&cd_S20620C2,    ABISELECT(144,96), //bcp->offset
    14, //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
    2, //immediately_derived
  0, 1},
  {&cd_S20620C5,    ABISELECT(80,60), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //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},
  {&cd_S20620C2,    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 _ZTI8S20620C4[];
extern void _ZN8S20620C4D1Ev();
extern void _ZN8S20620C4D0Ev();
extern void ABISELECT(_ZTv0_n40_N8S20620C4D1Ev,_ZTv0_n20_N8S20620C4D1Ev)();
extern void ABISELECT(_ZThn80_N8S20620C4D1Ev,_ZThn60_N8S20620C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20620C4D0Ev,_ZTv0_n20_N8S20620C4D0Ev)();
extern void ABISELECT(_ZThn80_N8S20620C4D0Ev,_ZThn60_N8S20620C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20620C4[] = {
  ABISELECT(144,96),
  ABISELECT(80,60),
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C4[0]),
  (VTBL_ENTRY)&_ZN8S20620C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C4D0Ev,
  ABISELECT(-80,-60),
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI8S20620C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C4D1Ev,_ZTv0_n20_N8S20620C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C4D0Ev,_ZTv0_n20_N8S20620C4D0Ev),
  ABISELECT(-80,-48),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI8S20620C4[0]),
};
extern VTBL_ENTRY _ZTV8S20620C4[];
static  VTBL_ENTRY _tg__ZTV8S20620C2__A__8S20620C4[] = {
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C2[0]),
};
extern void _ZN8S20620C5D1Ev();
extern void _ZN8S20620C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C5__8S20620C4[] = {
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
  (VTBL_ENTRY)&_ZN8S20620C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C5__8S20620C4[] = {
  ABISELECT(-80,-48),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C4[] = {
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C2[0]),
};
static  VTT_ENTRY vtt_S20620C4[] = {
  {&(_ZTV8S20620C4[5]),  5,17},
  {&(_tg__ZTV8S20620C2__A__8S20620C4[3]),  3,3},
  {&(_ZTV8S20620C4[12]),  12,17},
  {&(_ZTV8S20620C4[17]),  17,17},
  {&(_tg__ZTV8S20620C5__8S20620C4[4]),  4,6},
  {&(_tg__ZTV8S20620C2__8S20620C5__8S20620C4[3]),  3,3},
  {&(_tg__ZTV8S20620C2__8S20620C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20620C4[];
extern  VTBL_ENTRY _ZTV8S20620C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C4[];
static VTBL_ENTRY alt_thunk_names164[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C4D0Ev,_ZTv0_n20_N8S20620C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20620C4D0Ev,_ZThn60_N8S20620C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C4D1Ev,_ZTv0_n20_N8S20620C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20620C4D1Ev,_ZThn60_N8S20620C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20620C4 = {  "S20620C4", // class name
  bases_S20620C4, 4,
  &(vtc_S20620C4[0]), // expected_vtbl_contents
  &(vtt_S20620C4[0]), // expected_vtt_contents
  ABISELECT(208,144), // object size
  NSPAIRA(_ZTI8S20620C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20620C4),17, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20620C4),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names164,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20620C10  : S20620C2 , S20620C5 {
  ::S3052C22_nt s20620c10f0;
  virtual  ~S20620C10(); // _ZN9S20620C10D2Ev
  virtual void  v3(); // _ZN9S20620C102v3Ev
  S20620C10(); // tgen
};
//SIG(-1 S20620C10) C1{ BC2{ VBC3{ m FD} Fp Fi[4] FC3 FC3} BC4{ VBC3 VBC2 vd Fp FL Fp FD Fs} vd v1 FC5{}}


 S20620C10 ::~S20620C10(){ note_dtor("S20620C10", this);}
void  S20620C10 ::v3(){vfunc_called(this, "_ZN9S20620C102v3Ev");}
S20620C10 ::S20620C10(){ note_ctor("S20620C10", this);} // tgen

static void Test_S20620C10()
{
  extern Class_Descriptor cd_S20620C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,37)];
    init_test(&cd_S20620C10, buf);
    S20620C10 *dp, &lv = *(dp=new (buf) S20620C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,144), "sizeof(S20620C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20620C10)");
    /*is_ambiguous_... S20620C10::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C2*), ABISELECT(128,84), "S20620C10");
    check_base_class_offset(lv, (S20620C3_nt*)(S20620C5*), ABISELECT(128,84), "S20620C10");
    /*is_ambiguous_... S20620C10::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C2*), ABISELECT(128,84), "S20620C10");
    /*is_ambiguous_... S20620C10::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C2*), 0, "S20620C10");
    check_base_class_offset(lv, (S20620C2*)(S20620C5*), ABISELECT(144,96), "S20620C10");
    check_base_class_offset(lv, (S20620C5*), ABISELECT(64,48), "S20620C10");
    check_field_offset(lv, s20620c10f0, ABISELECT(114,82), "S20620C10.s20620c10f0");
    test_class_info(&lv, &cd_S20620C10);
    dp->~S20620C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20620C10(Test_S20620C10, "S20620C10", ABISELECT(208,144));

#else // __cplusplus

extern void _ZN9S20620C10C1Ev();
extern void _ZN9S20620C10D2Ev();
Name_Map name_map_S20620C10[] = {
  NSPAIR(_ZN9S20620C10C1Ev),
  NSPAIR(_ZN9S20620C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20620C3_nt;
extern VTBL_ENTRY _ZTI11S20620C3_nt[];
extern Class_Descriptor cd_S20620C2;
extern VTBL_ENTRY _ZTI8S20620C2[];
extern  VTBL_ENTRY _ZTV8S20620C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C2[];
extern Class_Descriptor cd_S20620C2;
extern VTBL_ENTRY _ZTI8S20620C2[];
extern  VTBL_ENTRY _ZTV8S20620C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C2[];
extern Class_Descriptor cd_S20620C5;
extern VTBL_ENTRY _ZTI8S20620C5[];
extern  VTBL_ENTRY _ZTV8S20620C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C5[];
static Base_Class bases_S20620C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20620C3_nt,    ABISELECT(128,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, 1},
  {&cd_S20620C2,    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},
  {&cd_S20620C2,    ABISELECT(144,96), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20620C5,    ABISELECT(64,48), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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},
  {0}};
extern VTBL_ENTRY _ZTI9S20620C10[];
extern void _ZN9S20620C10D1Ev();
extern void _ZN9S20620C10D0Ev();
extern void _ZN9S20620C102v3Ev();
extern void ABISELECT(_ZThn64_N9S20620C10D1Ev,_ZThn48_N9S20620C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S20620C10D0Ev,_ZThn48_N9S20620C10D0Ev)();
static  VTBL_ENTRY vtc_S20620C10[] = {
  ABISELECT(144,96),
  ABISELECT(128,84),
  0,
  (VTBL_ENTRY)&(_ZTI9S20620C10[0]),
  (VTBL_ENTRY)&_ZN9S20620C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20620C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20620C102v3Ev,
  ABISELECT(80,48),
  ABISELECT(64,36),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI9S20620C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S20620C10D1Ev,_ZThn48_N9S20620C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S20620C10D0Ev,_ZThn48_N9S20620C10D0Ev),
  ABISELECT(-16,-12),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI9S20620C10[0]),
};
extern VTBL_ENTRY _ZTV9S20620C10[];
static  VTBL_ENTRY _tg__ZTV8S20620C2__A__9S20620C10[] = {
  ABISELECT(128,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C2[0]),
};
extern void _ZN8S20620C5D1Ev();
extern void _ZN8S20620C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C5__9S20620C10[] = {
  ABISELECT(80,48),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
  (VTBL_ENTRY)&_ZN8S20620C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C5__9S20620C10[] = {
  ABISELECT(-16,-12),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__A1__9S20620C10[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C2[0]),
};
static  VTT_ENTRY vtt_S20620C10[] = {
  {&(_ZTV9S20620C10[4]),  4,16},
  {&(_tg__ZTV8S20620C2__A__9S20620C10[3]),  3,3},
  {&(_tg__ZTV8S20620C5__9S20620C10[4]),  4,6},
  {&(_tg__ZTV8S20620C2__8S20620C5__9S20620C10[3]),  3,3},
  {&(_ZTV9S20620C10[11]),  11,16},
  {&(_ZTV9S20620C10[16]),  16,16},
  {&(_tg__ZTV8S20620C2__A1__9S20620C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20620C10[];
extern  VTBL_ENTRY _ZTV9S20620C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20620C10[];
Class_Descriptor cd_S20620C10 = {  "S20620C10", // class name
  bases_S20620C10, 4,
  &(vtc_S20620C10[0]), // expected_vtbl_contents
  &(vtt_S20620C10[0]), // expected_vtt_contents
  ABISELECT(208,144), // object size
  NSPAIRA(_ZTI9S20620C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20620C10),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20620C10),7, //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  S20620C9  : virtual S20620C3_nt , virtual S20620C4 {
  ::S20620C5 s20620c9f0;
  short s20620c9f1;
  ::S20620C10 s20620c9f2;
  virtual  ~S20620C9(); // _ZN8S20620C9D2Ev
  S20620C9(); // tgen
};
//SIG(-1 S20620C9) C1{ VBC2{ m FD} VBC3{ VBC2 VBC4{ VBC2 VBC5{ VBC2 Fp Fi[4] FC2 FC2} vd Fp FL Fp FD Fs} BC5 vd} vd FC4 Fs FC6{ BC5 BC4 vd v1 FC7{}}}


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

static void Test_S20620C9()
{
  extern Class_Descriptor cd_S20620C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(38,99)];
    init_test(&cd_S20620C9, buf);
    S20620C9 *dp, &lv = *(dp=new (buf) S20620C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(592,392), "sizeof(S20620C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20620C9)");
    check_base_class_offset(lv, (S20620C3_nt*), ABISELECT(384,248), "S20620C9");
    check_base_class_offset(lv, (S20620C3_nt*)(S20620C4*), ABISELECT(384,248), "S20620C9");
    check_base_class_offset(lv, (S20620C3_nt*)(S20620C5*), ABISELECT(384,248), "S20620C9");
    /*is_ambiguous_... S20620C9::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C2*), ABISELECT(384,248), "S20620C9");
    /*is_ambiguous_... S20620C4::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C2*)(S20620C4*), ABISELECT(384,248), "S20620C9");
    check_base_class_offset(lv, (S20620C2*)(S20620C5*), ABISELECT(528,344), "S20620C9");
    check_base_class_offset(lv, (S20620C5*)(S20620C4*), ABISELECT(464,308), "S20620C9");
    /*is_ambiguous_... S20620C4::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C2*)(S20620C4*), ABISELECT(400,260), "S20620C9");
    check_base_class_offset(lv, (S20620C4*), ABISELECT(400,260), "S20620C9");
    check_field_offset(lv, s20620c9f0, ABISELECT(16,4), "S20620C9.s20620c9f0");
    check_field_offset(lv, s20620c9f1, ABISELECT(160,100), "S20620C9.s20620c9f1");
    check_field_offset(lv, s20620c9f2, ABISELECT(176,104), "S20620C9.s20620c9f2");
    test_class_info(&lv, &cd_S20620C9);
    dp->~S20620C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20620C9(Test_S20620C9, "S20620C9", ABISELECT(592,392));

#else // __cplusplus

extern void _ZN8S20620C9C1Ev();
extern void _ZN8S20620C9D2Ev();
Name_Map name_map_S20620C9[] = {
  NSPAIR(_ZN8S20620C9C1Ev),
  NSPAIR(_ZN8S20620C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20620C3_nt;
extern VTBL_ENTRY _ZTI11S20620C3_nt[];
extern Class_Descriptor cd_S20620C2;
extern VTBL_ENTRY _ZTI8S20620C2[];
extern  VTBL_ENTRY _ZTV8S20620C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C2[];
extern Class_Descriptor cd_S20620C5;
extern VTBL_ENTRY _ZTI8S20620C5[];
extern  VTBL_ENTRY _ZTV8S20620C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C5[];
extern Class_Descriptor cd_S20620C2;
extern VTBL_ENTRY _ZTI8S20620C2[];
extern  VTBL_ENTRY _ZTV8S20620C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C2[];
extern Class_Descriptor cd_S20620C4;
extern VTBL_ENTRY _ZTI8S20620C4[];
extern  VTBL_ENTRY _ZTV8S20620C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C4[];
static Base_Class bases_S20620C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20620C3_nt,    ABISELECT(384,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20620C2,    ABISELECT(528,344), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20620C5,    ABISELECT(464,308), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20620C2,    ABISELECT(400,260), //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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20620C4,    ABISELECT(400,260), //bcp->offset
    8, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20620C9[];
extern void _ZN8S20620C9D1Ev();
extern void _ZN8S20620C9D0Ev();
extern void ABISELECT(_ZTv0_n48_N8S20620C9D1Ev,_ZTv0_n24_N8S20620C9D1Ev)();
extern void ABISELECT(_ZThn400_N8S20620C9D1Ev,_ZThn260_N8S20620C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20620C9D0Ev,_ZTv0_n24_N8S20620C9D0Ev)();
extern void ABISELECT(_ZThn400_N8S20620C9D0Ev,_ZThn260_N8S20620C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20620C9D1Ev,_ZTv0_n20_N8S20620C9D1Ev)();
extern void ABISELECT(_ZThn464_N8S20620C9D1Ev,_ZThn308_N8S20620C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20620C9D0Ev,_ZTv0_n20_N8S20620C9D0Ev)();
extern void ABISELECT(_ZThn464_N8S20620C9D0Ev,_ZThn308_N8S20620C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20620C9[] = {
  ABISELECT(528,344),
  ABISELECT(464,308),
  ABISELECT(400,260),
  ABISELECT(384,248),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C9[0]),
  (VTBL_ENTRY)&_ZN8S20620C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C9D0Ev,
  ABISELECT(-400,-260),
  ABISELECT(128,84),
  ABISELECT(64,48),
  ABISELECT(-16,-12),
  ABISELECT(-400,-260),
  (VTBL_ENTRY)&(_ZTI8S20620C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C9D1Ev,_ZTv0_n24_N8S20620C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C9D0Ev,_ZTv0_n24_N8S20620C9D0Ev),
  ABISELECT(-464,-308),
  ABISELECT(64,36),
  ABISELECT(-80,-60),
  ABISELECT(-464,-308),
  (VTBL_ENTRY)&(_ZTI8S20620C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C9D1Ev,_ZTv0_n20_N8S20620C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C9D0Ev,_ZTv0_n20_N8S20620C9D0Ev),
  ABISELECT(-144,-96),
  ABISELECT(-528,-344),
  (VTBL_ENTRY)&(_ZTI8S20620C9[0]),
};
extern VTBL_ENTRY _ZTV8S20620C9[];
extern void _ZN8S20620C4D1Ev();
extern void _ZN8S20620C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C4__8S20620C9[] = {
  ABISELECT(128,84),
  ABISELECT(64,48),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C4[0]),
  (VTBL_ENTRY)&_ZN8S20620C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20620C28S20620C4__A1__8S20620C9[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C2[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S20620C4D1Ev,_ZTv0_n20_N8S20620C4D1Ev)();
extern void ABISELECT(_ZThn64_N8S20620C4D1Ev,_ZThn48_N8S20620C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20620C4D0Ev,_ZTv0_n20_N8S20620C4D0Ev)();
extern void ABISELECT(_ZThn64_N8S20620C4D0Ev,_ZThn48_N8S20620C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20620C5__8S20620C4__8S20620C9[] = {
  ABISELECT(-64,-48),
  ABISELECT(64,36),
  ABISELECT(-80,-60),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI8S20620C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C4D1Ev,_ZTv0_n20_N8S20620C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C4D0Ev,_ZTv0_n20_N8S20620C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C4__8S20620C9[] = {
  ABISELECT(-144,-96),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S20620C4[0]),
};
extern void _ZN8S20620C5D1Ev();
extern void _ZN8S20620C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C5__8S20620C9[] = {
  ABISELECT(64,36),
  ABISELECT(-80,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
  (VTBL_ENTRY)&_ZN8S20620C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C5__8S20620C9[] = {
  ABISELECT(-144,-96),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C9[] = {
  ABISELECT(-144,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C2[0]),
};
static  VTT_ENTRY vtt_S20620C9[] = {
  {&(_ZTV8S20620C9[6]),  6,26},
  {&(_ZTV8S20620C9[14]),  14,26},
  {&(_ZTV8S20620C9[21]),  21,26},
  {&(_ZTV8S20620C9[26]),  26,26},
  {&(_tg__ZTV8S20620C4__8S20620C9[5]),  5,7},
  {&(_tg__ZTV8S20620C28S20620C4__A1__8S20620C9[3]),  3,3},
  {&(_tg__ZTV8S20620C5__8S20620C4__8S20620C9[5]),  5,7},
  {&(_tg__ZTV8S20620C2__8S20620C4__8S20620C9[3]),  3,3},
  {&(_tg__ZTV8S20620C5__8S20620C9[4]),  4,6},
  {&(_tg__ZTV8S20620C2__8S20620C5__8S20620C9[3]),  3,3},
  {&(_tg__ZTV8S20620C2__8S20620C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20620C9[];
extern  VTBL_ENTRY _ZTV8S20620C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C9[];
static VTBL_ENTRY alt_thunk_names165[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C4D0Ev,_ZTv0_n20_N8S20620C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20620C4D0Ev,_ZThn48_N8S20620C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C4D1Ev,_ZTv0_n20_N8S20620C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20620C4D1Ev,_ZThn48_N8S20620C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C9D0Ev,_ZTv0_n20_N8S20620C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N8S20620C9D0Ev,_ZThn308_N8S20620C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C9D1Ev,_ZTv0_n20_N8S20620C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N8S20620C9D1Ev,_ZThn308_N8S20620C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20620C9D0Ev,_ZTv0_n24_N8S20620C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S20620C9D0Ev,_ZThn260_N8S20620C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20620C9D1Ev,_ZTv0_n24_N8S20620C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N8S20620C9D1Ev,_ZThn260_N8S20620C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20620C9 = {  "S20620C9", // class name
  bases_S20620C9, 5,
  &(vtc_S20620C9[0]), // expected_vtbl_contents
  &(vtt_S20620C9[0]), // expected_vtt_contents
  ABISELECT(592,392), // object size
  NSPAIRA(_ZTI8S20620C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20620C9),26, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20620C9),11, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names165,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20620C8  : virtual S20620C3_nt , virtual S20620C2 , virtual S20620C5 , S20620C9 , S20620C10 {
  virtual  ~S20620C8(); // _ZN8S20620C8D2Ev
  virtual void  v4(); // _ZN8S20620C82v4Ev
  virtual void  v5(); // _ZN8S20620C82v5Ev
  S20620C8(); // tgen
};
//SIG(-1 S20620C8) C1{ VBC2{ m FD} VBC3{ VBC2 Fp Fi[4] FC2 FC2} VBC4{ VBC2 VBC3 vd Fp FL Fp FD Fs} BC5{ VBC2 VBC6{ VBC2 VBC4 BC3 vd} vd FC4 Fs FC7{ BC3 BC4 vd v3 FC8{}}} BC7 vd v1 v2}


 S20620C8 ::~S20620C8(){ note_dtor("S20620C8", this);}
void  S20620C8 ::v4(){vfunc_called(this, "_ZN8S20620C82v4Ev");}
void  S20620C8 ::v5(){vfunc_called(this, "_ZN8S20620C82v5Ev");}
S20620C8 ::S20620C8(){ note_ctor("S20620C8", this);} // tgen

static void Test_S20620C8()
{
  extern Class_Descriptor cd_S20620C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(46,120)];
    init_test(&cd_S20620C8, buf);
    S20620C8 *dp, &lv = *(dp=new (buf) S20620C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(720,476), "sizeof(S20620C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20620C8)");
    check_base_class_offset(lv, (S20620C3_nt*), ABISELECT(512,332), "S20620C8");
    /*is_ambiguous_... S20620C8::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C2*), ABISELECT(512,332), "S20620C8");
    /*is_ambiguous_... S20620C8::S20620C5 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C5*), ABISELECT(512,332), "S20620C8");
    check_base_class_offset(lv, (S20620C3_nt*)(S20620C9*), ABISELECT(512,332), "S20620C8");
    check_base_class_offset(lv, (S20620C3_nt*)(S20620C4*), ABISELECT(512,332), "S20620C8");
    /*is_ambiguous_... S20620C4::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C2*)(S20620C4*), ABISELECT(512,332), "S20620C8");
    /*is_ambiguous_... S20620C10::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C2*)(S20620C10*), ABISELECT(512,332), "S20620C8");
    check_base_class_offset(lv, (S20620C3_nt*)(S20620C5*)(S20620C10*), ABISELECT(512,332), "S20620C8");
    /*is_ambiguous_... S20620C8::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C2*), ABISELECT(528,344), "S20620C8");
    /*is_ambiguous_... S20620C8::S20620C5 */ AMB_check_base_class_offset(lv, (S20620C2*)(S20620C5*), ABISELECT(528,344), "S20620C8");
    check_base_class_offset(lv, (S20620C2*)(S20620C5*)(S20620C10*), ABISELECT(528,344), "S20620C8");
    /*is_ambiguous_... S20620C8::S20620C5 */ AMB_check_base_class_offset(lv, (S20620C5*), ABISELECT(592,392), "S20620C8");
    check_base_class_offset(lv, (S20620C5*)(S20620C4*), ABISELECT(592,392), "S20620C8");
    /*is_ambiguous_... S20620C4::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C2*)(S20620C4*), ABISELECT(656,428), "S20620C8");
    check_base_class_offset(lv, (S20620C4*)(S20620C9*), ABISELECT(656,428), "S20620C8");
    check_base_class_offset(lv, (S20620C9*), 0, "S20620C8");
    /*is_ambiguous_... S20620C10::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C2*)(S20620C10*), ABISELECT(384,248), "S20620C8");
    check_base_class_offset(lv, (S20620C5*)(S20620C10*), ABISELECT(448,296), "S20620C8");
    check_base_class_offset(lv, (S20620C10*), ABISELECT(384,248), "S20620C8");
    test_class_info(&lv, &cd_S20620C8);
    dp->~S20620C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20620C8(Test_S20620C8, "S20620C8", ABISELECT(720,476));

#else // __cplusplus

extern void _ZN8S20620C8C1Ev();
extern void _ZN8S20620C8D2Ev();
Name_Map name_map_S20620C8[] = {
  NSPAIR(_ZN8S20620C8C1Ev),
  NSPAIR(_ZN8S20620C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20620C3_nt;
extern VTBL_ENTRY _ZTI11S20620C3_nt[];
extern Class_Descriptor cd_S20620C2;
extern VTBL_ENTRY _ZTI8S20620C2[];
extern  VTBL_ENTRY _ZTV8S20620C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C2[];
extern Class_Descriptor cd_S20620C5;
extern VTBL_ENTRY _ZTI8S20620C5[];
extern  VTBL_ENTRY _ZTV8S20620C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C5[];
extern Class_Descriptor cd_S20620C2;
extern VTBL_ENTRY _ZTI8S20620C2[];
extern  VTBL_ENTRY _ZTV8S20620C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C2[];
extern Class_Descriptor cd_S20620C4;
extern VTBL_ENTRY _ZTI8S20620C4[];
extern  VTBL_ENTRY _ZTV8S20620C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C4[];
extern Class_Descriptor cd_S20620C9;
extern VTBL_ENTRY _ZTI8S20620C9[];
extern  VTBL_ENTRY _ZTV8S20620C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C9[];
extern Class_Descriptor cd_S20620C2;
extern VTBL_ENTRY _ZTI8S20620C2[];
extern  VTBL_ENTRY _ZTV8S20620C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C2[];
extern Class_Descriptor cd_S20620C5;
extern VTBL_ENTRY _ZTI8S20620C5[];
extern  VTBL_ENTRY _ZTV8S20620C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C5[];
extern Class_Descriptor cd_S20620C10;
extern VTBL_ENTRY _ZTI9S20620C10[];
extern  VTBL_ENTRY _ZTV9S20620C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20620C10[];
static Base_Class bases_S20620C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20620C3_nt,    ABISELECT(512,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20620C2,    ABISELECT(528,344), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20620C5,    ABISELECT(592,392), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20620C2,    ABISELECT(656,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20620C4,    ABISELECT(656,428), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20620C9,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20620C2,    ABISELECT(384,248), //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
    8, //immediately_derived
  0, 0},
  {&cd_S20620C5,    ABISELECT(448,296), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20620C10,    ABISELECT(384,248), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20620C8[];
extern void _ZN8S20620C8D1Ev();
extern void _ZN8S20620C8D0Ev();
extern void _ZN8S20620C82v4Ev();
extern void _ZN8S20620C82v5Ev();
extern void ABISELECT(_ZThn384_N8S20620C8D1Ev,_ZThn248_N8S20620C8D1Ev)();
extern void ABISELECT(_ZThn384_N8S20620C8D0Ev,_ZThn248_N8S20620C8D0Ev)();
extern void _ZN9S20620C102v3Ev();
extern void ABISELECT(_ZThn448_N8S20620C8D1Ev,_ZThn296_N8S20620C8D1Ev)();
extern void ABISELECT(_ZThn448_N8S20620C8D0Ev,_ZThn296_N8S20620C8D0Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20620C8D1Ev,_ZTv0_n20_N8S20620C8D1Ev)();
extern void ABISELECT(_ZThn592_N8S20620C8D1Ev,_ZThn392_N8S20620C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20620C8D0Ev,_ZTv0_n20_N8S20620C8D0Ev)();
extern void ABISELECT(_ZThn592_N8S20620C8D0Ev,_ZThn392_N8S20620C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20620C8D1Ev,_ZTv0_n24_N8S20620C8D1Ev)();
extern void ABISELECT(_ZThn656_N8S20620C8D1Ev,_ZThn428_N8S20620C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20620C8D0Ev,_ZTv0_n24_N8S20620C8D0Ev)();
extern void ABISELECT(_ZThn656_N8S20620C8D0Ev,_ZThn428_N8S20620C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20620C8[] = {
  ABISELECT(528,344),
  ABISELECT(592,392),
  ABISELECT(656,428),
  ABISELECT(512,332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C8[0]),
  (VTBL_ENTRY)&_ZN8S20620C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20620C82v4Ev,
  (VTBL_ENTRY)&_ZN8S20620C82v5Ev,
  ABISELECT(144,96),
  ABISELECT(128,84),
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI8S20620C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N8S20620C8D1Ev,_ZThn248_N8S20620C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N8S20620C8D0Ev,_ZThn248_N8S20620C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20620C102v3Ev,
  ABISELECT(80,48),
  ABISELECT(64,36),
  ABISELECT(-448,-296),
  (VTBL_ENTRY)&(_ZTI8S20620C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N8S20620C8D1Ev,_ZThn296_N8S20620C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N8S20620C8D0Ev,_ZThn296_N8S20620C8D0Ev),
  ABISELECT(-16,-12),
  ABISELECT(-528,-344),
  (VTBL_ENTRY)&(_ZTI8S20620C8[0]),
  ABISELECT(-592,-392),
  ABISELECT(-64,-48),
  ABISELECT(-80,-60),
  ABISELECT(-592,-392),
  (VTBL_ENTRY)&(_ZTI8S20620C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C8D1Ev,_ZTv0_n20_N8S20620C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C8D0Ev,_ZTv0_n20_N8S20620C8D0Ev),
  ABISELECT(-656,-428),
  ABISELECT(-128,-84),
  ABISELECT(-64,-36),
  ABISELECT(-144,-96),
  ABISELECT(-656,-428),
  (VTBL_ENTRY)&(_ZTI8S20620C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C8D1Ev,_ZTv0_n24_N8S20620C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C8D0Ev,_ZTv0_n24_N8S20620C8D0Ev),
};
extern VTBL_ENTRY _ZTV8S20620C8[];
extern void _ZN8S20620C9D1Ev();
extern void _ZN8S20620C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C9__8S20620C8[] = {
  ABISELECT(528,344),
  ABISELECT(592,392),
  ABISELECT(656,428),
  ABISELECT(512,332),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C9[0]),
  (VTBL_ENTRY)&_ZN8S20620C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C9D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S20620C9D1Ev,_ZTv0_n24_N8S20620C9D1Ev)();
extern void ABISELECT(_ZThn656_N8S20620C9D1Ev,_ZThn428_N8S20620C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20620C9D0Ev,_ZTv0_n24_N8S20620C9D0Ev)();
extern void ABISELECT(_ZThn656_N8S20620C9D0Ev,_ZThn428_N8S20620C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20620C4__8S20620C9__8S20620C8[] = {
  ABISELECT(-656,-428),
  ABISELECT(-128,-84),
  ABISELECT(-64,-36),
  ABISELECT(-144,-96),
  ABISELECT(-656,-428),
  (VTBL_ENTRY)&(_ZTI8S20620C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C9D1Ev,_ZTv0_n24_N8S20620C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C9D0Ev,_ZTv0_n24_N8S20620C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20620C9D1Ev,_ZTv0_n20_N8S20620C9D1Ev)();
extern void ABISELECT(_ZThn592_N8S20620C9D1Ev,_ZThn392_N8S20620C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20620C9D0Ev,_ZTv0_n20_N8S20620C9D0Ev)();
extern void ABISELECT(_ZThn592_N8S20620C9D0Ev,_ZThn392_N8S20620C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20620C5__8S20620C9__8S20620C8[] = {
  ABISELECT(-592,-392),
  ABISELECT(-64,-48),
  ABISELECT(-80,-60),
  ABISELECT(-592,-392),
  (VTBL_ENTRY)&(_ZTI8S20620C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C9D1Ev,_ZTv0_n20_N8S20620C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C9D0Ev,_ZTv0_n20_N8S20620C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C9__8S20620C8[] = {
  ABISELECT(-16,-12),
  ABISELECT(-528,-344),
  (VTBL_ENTRY)&(_ZTI8S20620C9[0]),
};
extern void _ZN9S20620C10D1Ev();
extern void _ZN9S20620C10D0Ev();
extern void _ZN9S20620C102v3Ev();
static  VTBL_ENTRY _tg__ZTV9S20620C10__8S20620C8[] = {
  ABISELECT(144,96),
  ABISELECT(128,84),
  0,
  (VTBL_ENTRY)&(_ZTI9S20620C10[0]),
  (VTBL_ENTRY)&_ZN9S20620C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20620C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20620C102v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20620C29S20620C10__A2__8S20620C8[] = {
  ABISELECT(128,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C2[0]),
};
extern void _ZN8S20620C5D1Ev();
extern void _ZN8S20620C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C59S20620C10__A1__8S20620C8[] = {
  ABISELECT(80,48),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
  (VTBL_ENTRY)&_ZN8S20620C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C59S20620C10__A1__8S20620C8[] = {
  ABISELECT(-16,-12),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
};
extern void ABISELECT(_ZThn64_N9S20620C10D1Ev,_ZThn48_N9S20620C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S20620C10D0Ev,_ZThn48_N9S20620C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20620C5__9S20620C10__8S20620C8[] = {
  ABISELECT(80,48),
  ABISELECT(64,36),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI9S20620C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S20620C10D1Ev,_ZThn48_N9S20620C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S20620C10D0Ev,_ZThn48_N9S20620C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__A1__9S20620C10__8S20620C8[] = {
  ABISELECT(-16,-12),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI9S20620C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C8[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C2[0]),
};
extern void _ZN8S20620C5D1Ev();
extern void _ZN8S20620C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C5__8S20620C8[] = {
  ABISELECT(-64,-48),
  ABISELECT(-80,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
  (VTBL_ENTRY)&_ZN8S20620C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C5__8S20620C8[] = {
  ABISELECT(-16,-12),
  ABISELECT(64,48),
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
};
extern void _ZN8S20620C4D1Ev();
extern void _ZN8S20620C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C4__8S20620C8[] = {
  ABISELECT(-128,-84),
  ABISELECT(-64,-36),
  ABISELECT(-144,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C4[0]),
  (VTBL_ENTRY)&_ZN8S20620C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20620C28S20620C4__A1__8S20620C8[] = {
  ABISELECT(-144,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C2[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S20620C4D1Ev,_ZTv0_n20_N8S20620C4D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20620C4D0Ev,_ZTv0_n20_N8S20620C4D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20620C5__8S20620C4__8S20620C8[] = {
  ABISELECT(64,36),
  ABISELECT(-64,-48),
  ABISELECT(-80,-60),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S20620C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C4D1Ev,_ZTv0_n20_N8S20620C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C4D0Ev,_ZTv0_n20_N8S20620C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C4__8S20620C8[] = {
  ABISELECT(-16,-12),
  ABISELECT(128,84),
  (VTBL_ENTRY)&(_ZTI8S20620C4[0]),
};
static  VTT_ENTRY vtt_S20620C8[] = {
  {&(_ZTV8S20620C8[6]),  6,41},
  {&(_tg__ZTV8S20620C9__8S20620C8[6]),  6,8},
  {&(_tg__ZTV8S20620C4__8S20620C9__8S20620C8[6]),  6,8},
  {&(_tg__ZTV8S20620C5__8S20620C9__8S20620C8[5]),  5,7},
  {&(_tg__ZTV8S20620C2__8S20620C9__8S20620C8[3]),  3,3},
  {&(_tg__ZTV9S20620C10__8S20620C8[4]),  4,7},
  {&(_tg__ZTV8S20620C29S20620C10__A2__8S20620C8[3]),  3,3},
  {&(_tg__ZTV8S20620C59S20620C10__A1__8S20620C8[4]),  4,6},
  {&(_tg__ZTV8S20620C2__8S20620C59S20620C10__A1__8S20620C8[3]),  3,3},
  {&(_tg__ZTV8S20620C5__9S20620C10__8S20620C8[4]),  4,6},
  {&(_tg__ZTV8S20620C2__A1__9S20620C10__8S20620C8[3]),  3,3},
  {&(_ZTV8S20620C8[26]),  26,41},
  {&(_ZTV8S20620C8[31]),  31,41},
  {&(_ZTV8S20620C8[39]),  39,41},
  {&(_ZTV8S20620C8[14]),  14,41},
  {&(_ZTV8S20620C8[21]),  21,41},
  {&(_tg__ZTV8S20620C2__8S20620C8[3]),  3,3},
  {&(_tg__ZTV8S20620C5__8S20620C8[4]),  4,6},
  {&(_tg__ZTV8S20620C2__8S20620C5__8S20620C8[3]),  3,3},
  {&(_tg__ZTV8S20620C4__8S20620C8[5]),  5,7},
  {&(_tg__ZTV8S20620C28S20620C4__A1__8S20620C8[3]),  3,3},
  {&(_tg__ZTV8S20620C5__8S20620C4__8S20620C8[5]),  5,7},
  {&(_tg__ZTV8S20620C2__8S20620C4__8S20620C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20620C8[];
extern  VTBL_ENTRY _ZTV8S20620C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C8[];
static VTBL_ENTRY alt_thunk_names166[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C9D0Ev,_ZTv0_n20_N8S20620C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N8S20620C9D0Ev,_ZThn392_N8S20620C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C9D1Ev,_ZTv0_n20_N8S20620C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N8S20620C9D1Ev,_ZThn392_N8S20620C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20620C9D0Ev,_ZTv0_n24_N8S20620C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S20620C9D0Ev,_ZThn428_N8S20620C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20620C9D1Ev,_ZTv0_n24_N8S20620C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S20620C9D1Ev,_ZThn428_N8S20620C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20620C8D0Ev,_ZTv0_n24_N8S20620C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S20620C8D0Ev,_ZThn428_N8S20620C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20620C8D1Ev,_ZTv0_n24_N8S20620C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S20620C8D1Ev,_ZThn428_N8S20620C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C8D0Ev,_ZTv0_n20_N8S20620C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N8S20620C8D0Ev,_ZThn392_N8S20620C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C8D1Ev,_ZTv0_n20_N8S20620C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N8S20620C8D1Ev,_ZThn392_N8S20620C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20620C8 = {  "S20620C8", // class name
  bases_S20620C8, 9,
  &(vtc_S20620C8[0]), // expected_vtbl_contents
  &(vtt_S20620C8[0]), // expected_vtt_contents
  ABISELECT(720,476), // object size
  NSPAIRA(_ZTI8S20620C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20620C8),41, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20620C8),23, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names166,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20620C7  : virtual S20620C4 , S20620C8 {
  int s20620c7f0[6];
  long double s20620c7f1;
  int s20620c7f2;
  long double s20620c7f3;
  virtual  ~S20620C7(); // _ZN8S20620C7D2Ev
  virtual void  v6(); // _ZN8S20620C72v6Ev
  virtual void  v7(); // _ZN8S20620C72v7Ev
  S20620C7(); // tgen
};
//SIG(-1 S20620C7) C1{ VBC2{ VBC3{ m FD} VBC4{ VBC3 VBC5{ VBC3 Fp Fi[4] FC3 FC3} vd Fp FL Fp FD Fs} BC5 vd} BC6{ VBC3 VBC5 VBC4 BC7{ VBC3 VBC2 vd FC4 Fs FC8{ BC5 BC4 vd v3 FC9{}}} BC8 vd v4 v5} vd v1 v2 Fi[6] FD Fi FD}


 S20620C7 ::~S20620C7(){ note_dtor("S20620C7", this);}
void  S20620C7 ::v6(){vfunc_called(this, "_ZN8S20620C72v6Ev");}
void  S20620C7 ::v7(){vfunc_called(this, "_ZN8S20620C72v7Ev");}
S20620C7 ::S20620C7(){ note_ctor("S20620C7", this);} // tgen

static void Test_S20620C7()
{
  extern Class_Descriptor cd_S20620C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(50,133)];
    init_test(&cd_S20620C7, buf);
    S20620C7 *dp, &lv = *(dp=new (buf) S20620C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(784,528), "sizeof(S20620C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20620C7)");
    check_base_class_offset(lv, (S20620C3_nt*)(S20620C4*), ABISELECT(640,432), "S20620C7");
    /*is_ambiguous_... S20620C7::S20620C5 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C5*), ABISELECT(640,432), "S20620C7");
    /*is_ambiguous_... S20620C7::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C2*), ABISELECT(640,432), "S20620C7");
    /*is_ambiguous_... S20620C4::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C2*)(S20620C4*), ABISELECT(640,432), "S20620C7");
    check_base_class_offset(lv, (S20620C3_nt*)(S20620C8*), ABISELECT(640,432), "S20620C7");
    check_base_class_offset(lv, (S20620C3_nt*)(S20620C9*)(S20620C8*), ABISELECT(640,432), "S20620C7");
    /*is_ambiguous_... S20620C10::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C2*)(S20620C10*)(S20620C8*), ABISELECT(640,432), "S20620C7");
    check_base_class_offset(lv, (S20620C3_nt*)(S20620C5*)(S20620C10*)(S20620C8*), ABISELECT(640,432), "S20620C7");
    /*is_ambiguous_... S20620C7::S20620C5 */ AMB_check_base_class_offset(lv, (S20620C2*)(S20620C5*), ABISELECT(720,480), "S20620C7");
    /*is_ambiguous_... S20620C8::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C2*)(S20620C8*), ABISELECT(720,480), "S20620C7");
    check_base_class_offset(lv, (S20620C2*)(S20620C5*)(S20620C10*)(S20620C8*), ABISELECT(720,480), "S20620C7");
    check_base_class_offset(lv, (S20620C5*)(S20620C4*), ABISELECT(656,444), "S20620C7");
    /*is_ambiguous_... S20620C8::S20620C5 */ AMB_check_base_class_offset(lv, (S20620C5*)(S20620C8*), ABISELECT(656,444), "S20620C7");
    /*is_ambiguous_... S20620C4::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C2*)(S20620C4*), ABISELECT(576,384), "S20620C7");
    check_base_class_offset(lv, (S20620C4*), ABISELECT(576,384), "S20620C7");
    check_base_class_offset(lv, (S20620C4*)(S20620C9*)(S20620C8*), ABISELECT(576,384), "S20620C7");
    check_base_class_offset(lv, (S20620C9*)(S20620C8*), 0, "S20620C7");
    /*is_ambiguous_... S20620C10::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C2*)(S20620C10*)(S20620C8*), ABISELECT(384,248), "S20620C7");
    check_base_class_offset(lv, (S20620C5*)(S20620C10*)(S20620C8*), ABISELECT(448,296), "S20620C7");
    check_base_class_offset(lv, (S20620C10*)(S20620C8*), ABISELECT(384,248), "S20620C7");
    check_base_class_offset(lv, (S20620C8*), 0, "S20620C7");
    check_field_offset(lv, s20620c7f0, ABISELECT(500,332), "S20620C7.s20620c7f0");
    check_field_offset(lv, s20620c7f1, ABISELECT(528,356), "S20620C7.s20620c7f1");
    check_field_offset(lv, s20620c7f2, ABISELECT(544,368), "S20620C7.s20620c7f2");
    check_field_offset(lv, s20620c7f3, ABISELECT(560,372), "S20620C7.s20620c7f3");
    test_class_info(&lv, &cd_S20620C7);
    dp->~S20620C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20620C7(Test_S20620C7, "S20620C7", ABISELECT(784,528));

#else // __cplusplus

extern void _ZN8S20620C7C1Ev();
extern void _ZN8S20620C7D2Ev();
Name_Map name_map_S20620C7[] = {
  NSPAIR(_ZN8S20620C7C1Ev),
  NSPAIR(_ZN8S20620C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20620C3_nt;
extern VTBL_ENTRY _ZTI11S20620C3_nt[];
extern Class_Descriptor cd_S20620C2;
extern VTBL_ENTRY _ZTI8S20620C2[];
extern  VTBL_ENTRY _ZTV8S20620C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C2[];
extern Class_Descriptor cd_S20620C5;
extern VTBL_ENTRY _ZTI8S20620C5[];
extern  VTBL_ENTRY _ZTV8S20620C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C5[];
extern Class_Descriptor cd_S20620C2;
extern VTBL_ENTRY _ZTI8S20620C2[];
extern  VTBL_ENTRY _ZTV8S20620C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C2[];
extern Class_Descriptor cd_S20620C4;
extern VTBL_ENTRY _ZTI8S20620C4[];
extern  VTBL_ENTRY _ZTV8S20620C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C4[];
extern Class_Descriptor cd_S20620C9;
extern VTBL_ENTRY _ZTI8S20620C9[];
extern  VTBL_ENTRY _ZTV8S20620C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C9[];
extern Class_Descriptor cd_S20620C2;
extern VTBL_ENTRY _ZTI8S20620C2[];
extern  VTBL_ENTRY _ZTV8S20620C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C2[];
extern Class_Descriptor cd_S20620C5;
extern VTBL_ENTRY _ZTI8S20620C5[];
extern  VTBL_ENTRY _ZTV8S20620C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C5[];
extern Class_Descriptor cd_S20620C10;
extern VTBL_ENTRY _ZTI9S20620C10[];
extern  VTBL_ENTRY _ZTV9S20620C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20620C10[];
extern Class_Descriptor cd_S20620C8;
extern VTBL_ENTRY _ZTI8S20620C8[];
extern  VTBL_ENTRY _ZTV8S20620C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C8[];
static Base_Class bases_S20620C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20620C3_nt,    ABISELECT(640,432), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20620C2,    ABISELECT(720,480), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20620C5,    ABISELECT(656,444), //bcp->offset
    33, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20620C2,    ABISELECT(576,384), //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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20620C4,    ABISELECT(576,384), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20620C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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
    9, //immediately_derived
  0, 0},
  {&cd_S20620C2,    ABISELECT(384,248), //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
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20620C5,    ABISELECT(448,296), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20620C10,    ABISELECT(384,248), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20620C8,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S20620C7[];
extern void _ZN8S20620C7D1Ev();
extern void _ZN8S20620C7D0Ev();
extern void _ZN8S20620C82v4Ev();
extern void _ZN8S20620C82v5Ev();
extern void _ZN8S20620C72v6Ev();
extern void _ZN8S20620C72v7Ev();
extern void ABISELECT(_ZThn384_N8S20620C7D1Ev,_ZThn248_N8S20620C7D1Ev)();
extern void ABISELECT(_ZThn384_N8S20620C7D0Ev,_ZThn248_N8S20620C7D0Ev)();
extern void _ZN9S20620C102v3Ev();
extern void ABISELECT(_ZThn448_N8S20620C7D1Ev,_ZThn296_N8S20620C7D1Ev)();
extern void ABISELECT(_ZThn448_N8S20620C7D0Ev,_ZThn296_N8S20620C7D0Ev)();
extern void ABISELECT(_ZTv0_n48_N8S20620C7D1Ev,_ZTv0_n24_N8S20620C7D1Ev)();
extern void ABISELECT(_ZThn576_N8S20620C7D1Ev,_ZThn384_N8S20620C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20620C7D0Ev,_ZTv0_n24_N8S20620C7D0Ev)();
extern void ABISELECT(_ZThn576_N8S20620C7D0Ev,_ZThn384_N8S20620C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20620C7D1Ev,_ZTv0_n20_N8S20620C7D1Ev)();
extern void ABISELECT(_ZThn656_N8S20620C7D1Ev,_ZThn444_N8S20620C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20620C7D0Ev,_ZTv0_n20_N8S20620C7D0Ev)();
extern void ABISELECT(_ZThn656_N8S20620C7D0Ev,_ZThn444_N8S20620C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20620C7[] = {
  ABISELECT(720,480),
  ABISELECT(656,444),
  ABISELECT(576,384),
  ABISELECT(640,432),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C7[0]),
  (VTBL_ENTRY)&_ZN8S20620C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20620C82v4Ev,
  (VTBL_ENTRY)&_ZN8S20620C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20620C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20620C72v7Ev,
  ABISELECT(336,232),
  ABISELECT(256,184),
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI8S20620C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N8S20620C7D1Ev,_ZThn248_N8S20620C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N8S20620C7D0Ev,_ZThn248_N8S20620C7D0Ev),
  (VTBL_ENTRY)&_ZN9S20620C102v3Ev,
  ABISELECT(272,184),
  ABISELECT(192,136),
  ABISELECT(-448,-296),
  (VTBL_ENTRY)&(_ZTI8S20620C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N8S20620C7D1Ev,_ZThn296_N8S20620C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N8S20620C7D0Ev,_ZThn296_N8S20620C7D0Ev),
  ABISELECT(-576,-384),
  ABISELECT(144,96),
  ABISELECT(80,60),
  ABISELECT(64,48),
  ABISELECT(-576,-384),
  (VTBL_ENTRY)&(_ZTI8S20620C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C7D1Ev,_ZTv0_n24_N8S20620C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C7D0Ev,_ZTv0_n24_N8S20620C7D0Ev),
  ABISELECT(-656,-444),
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  ABISELECT(-656,-444),
  (VTBL_ENTRY)&(_ZTI8S20620C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C7D1Ev,_ZTv0_n20_N8S20620C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C7D0Ev,_ZTv0_n20_N8S20620C7D0Ev),
  ABISELECT(-80,-48),
  ABISELECT(-720,-480),
  (VTBL_ENTRY)&(_ZTI8S20620C7[0]),
};
extern VTBL_ENTRY _ZTV8S20620C7[];
extern void _ZN8S20620C8D1Ev();
extern void _ZN8S20620C8D0Ev();
extern void _ZN8S20620C82v4Ev();
extern void _ZN8S20620C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C8__8S20620C7[] = {
  ABISELECT(720,480),
  ABISELECT(656,444),
  ABISELECT(576,384),
  ABISELECT(640,432),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C8[0]),
  (VTBL_ENTRY)&_ZN8S20620C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20620C82v4Ev,
  (VTBL_ENTRY)&_ZN8S20620C82v5Ev,
};
extern void _ZN8S20620C9D1Ev();
extern void _ZN8S20620C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C98S20620C8__8S20620C7[] = {
  ABISELECT(720,480),
  ABISELECT(656,444),
  ABISELECT(576,384),
  ABISELECT(640,432),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C9[0]),
  (VTBL_ENTRY)&_ZN8S20620C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C9D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S20620C9D1Ev,_ZTv0_n24_N8S20620C9D1Ev)();
extern void ABISELECT(_ZThn576_N8S20620C9D1Ev,_ZThn384_N8S20620C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20620C9D0Ev,_ZTv0_n24_N8S20620C9D0Ev)();
extern void ABISELECT(_ZThn576_N8S20620C9D0Ev,_ZThn384_N8S20620C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20620C4__8S20620C98S20620C8__8S20620C7[] = {
  ABISELECT(-576,-384),
  ABISELECT(144,96),
  ABISELECT(80,60),
  ABISELECT(64,48),
  ABISELECT(-576,-384),
  (VTBL_ENTRY)&(_ZTI8S20620C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C9D1Ev,_ZTv0_n24_N8S20620C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C9D0Ev,_ZTv0_n24_N8S20620C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20620C9D1Ev,_ZTv0_n20_N8S20620C9D1Ev)();
extern void ABISELECT(_ZThn656_N8S20620C9D1Ev,_ZThn444_N8S20620C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20620C9D0Ev,_ZTv0_n20_N8S20620C9D0Ev)();
extern void ABISELECT(_ZThn656_N8S20620C9D0Ev,_ZThn444_N8S20620C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20620C5__8S20620C98S20620C8__8S20620C7[] = {
  ABISELECT(-656,-444),
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  ABISELECT(-656,-444),
  (VTBL_ENTRY)&(_ZTI8S20620C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C9D1Ev,_ZTv0_n20_N8S20620C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C9D0Ev,_ZTv0_n20_N8S20620C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C98S20620C8__8S20620C7[] = {
  ABISELECT(-80,-48),
  ABISELECT(-720,-480),
  (VTBL_ENTRY)&(_ZTI8S20620C9[0]),
};
extern void _ZN9S20620C10D1Ev();
extern void _ZN9S20620C10D0Ev();
extern void _ZN9S20620C102v3Ev();
static  VTBL_ENTRY _tg__ZTV9S20620C108S20620C8__8S20620C7[] = {
  ABISELECT(336,232),
  ABISELECT(256,184),
  0,
  (VTBL_ENTRY)&(_ZTI9S20620C10[0]),
  (VTBL_ENTRY)&_ZN9S20620C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20620C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20620C102v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20620C29S20620C108S20620C8__A2__8S20620C7[] = {
  ABISELECT(256,184),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C2[0]),
};
extern void _ZN8S20620C5D1Ev();
extern void _ZN8S20620C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C59S20620C108S20620C8__A1__8S20620C7[] = {
  ABISELECT(272,184),
  ABISELECT(192,136),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
  (VTBL_ENTRY)&_ZN8S20620C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C59S20620C108S20620C8__A1__8S20620C7[] = {
  ABISELECT(-80,-48),
  ABISELECT(-272,-184),
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
};
extern void ABISELECT(_ZThn64_N9S20620C10D1Ev,_ZThn48_N9S20620C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S20620C10D0Ev,_ZThn48_N9S20620C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20620C5__9S20620C108S20620C8__8S20620C7[] = {
  ABISELECT(272,184),
  ABISELECT(192,136),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI9S20620C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S20620C10D1Ev,_ZThn48_N9S20620C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S20620C10D0Ev,_ZThn48_N9S20620C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__A1__9S20620C108S20620C8__8S20620C7[] = {
  ABISELECT(-80,-48),
  ABISELECT(-336,-232),
  (VTBL_ENTRY)&(_ZTI9S20620C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C8__8S20620C7[] = {
  ABISELECT(-80,-48),
  ABISELECT(-720,-480),
  (VTBL_ENTRY)&(_ZTI8S20620C8[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S20620C8D1Ev,_ZTv0_n20_N8S20620C8D1Ev)();
extern void ABISELECT(_ZThn656_N8S20620C8D1Ev,_ZThn444_N8S20620C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20620C8D0Ev,_ZTv0_n20_N8S20620C8D0Ev)();
extern void ABISELECT(_ZThn656_N8S20620C8D0Ev,_ZThn444_N8S20620C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20620C5__8S20620C8__8S20620C7[] = {
  ABISELECT(-656,-444),
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  ABISELECT(-656,-444),
  (VTBL_ENTRY)&(_ZTI8S20620C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C8D1Ev,_ZTv0_n20_N8S20620C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C8D0Ev,_ZTv0_n20_N8S20620C8D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20620C8D1Ev,_ZTv0_n24_N8S20620C8D1Ev)();
extern void ABISELECT(_ZThn576_N8S20620C8D1Ev,_ZThn384_N8S20620C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20620C8D0Ev,_ZTv0_n24_N8S20620C8D0Ev)();
extern void ABISELECT(_ZThn576_N8S20620C8D0Ev,_ZThn384_N8S20620C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20620C4__8S20620C8__8S20620C7[] = {
  ABISELECT(-576,-384),
  ABISELECT(144,96),
  ABISELECT(80,60),
  ABISELECT(64,48),
  ABISELECT(-576,-384),
  (VTBL_ENTRY)&(_ZTI8S20620C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C8D1Ev,_ZTv0_n24_N8S20620C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C8D0Ev,_ZTv0_n24_N8S20620C8D0Ev),
};
extern void ABISELECT(_ZThn384_N8S20620C8D1Ev,_ZThn248_N8S20620C8D1Ev)();
extern void ABISELECT(_ZThn384_N8S20620C8D0Ev,_ZThn248_N8S20620C8D0Ev)();
extern void _ZN9S20620C102v3Ev();
static  VTBL_ENTRY _tg__ZTV9S20620C10__8S20620C8__8S20620C7[] = {
  ABISELECT(336,232),
  ABISELECT(256,184),
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI8S20620C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N8S20620C8D1Ev,_ZThn248_N8S20620C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N8S20620C8D0Ev,_ZThn248_N8S20620C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20620C102v3Ev,
};
extern void ABISELECT(_ZThn448_N8S20620C8D1Ev,_ZThn296_N8S20620C8D1Ev)();
extern void ABISELECT(_ZThn448_N8S20620C8D0Ev,_ZThn296_N8S20620C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20620C59S20620C10__A1__8S20620C8__8S20620C7[] = {
  ABISELECT(272,184),
  ABISELECT(192,136),
  ABISELECT(-448,-296),
  (VTBL_ENTRY)&(_ZTI8S20620C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N8S20620C8D1Ev,_ZThn296_N8S20620C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N8S20620C8D0Ev,_ZThn296_N8S20620C8D0Ev),
};
extern void _ZN8S20620C4D1Ev();
extern void _ZN8S20620C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C4__8S20620C7[] = {
  ABISELECT(144,96),
  ABISELECT(80,60),
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C4[0]),
  (VTBL_ENTRY)&_ZN8S20620C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20620C28S20620C4__A1__8S20620C7[] = {
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C2[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S20620C4D1Ev,_ZTv0_n20_N8S20620C4D1Ev)();
extern void ABISELECT(_ZThn80_N8S20620C4D1Ev,_ZThn60_N8S20620C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20620C4D0Ev,_ZTv0_n20_N8S20620C4D0Ev)();
extern void ABISELECT(_ZThn80_N8S20620C4D0Ev,_ZThn60_N8S20620C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20620C5__8S20620C4__8S20620C7[] = {
  ABISELECT(-80,-60),
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI8S20620C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C4D1Ev,_ZTv0_n20_N8S20620C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C4D0Ev,_ZTv0_n20_N8S20620C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C4__8S20620C7[] = {
  ABISELECT(-80,-48),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI8S20620C4[0]),
};
extern void _ZN8S20620C5D1Ev();
extern void _ZN8S20620C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C5__8S20620C7[] = {
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
  (VTBL_ENTRY)&_ZN8S20620C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C5__8S20620C7[] = {
  ABISELECT(-80,-48),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C7[] = {
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C2[0]),
};
static  VTT_ENTRY vtt_S20620C7[] = {
  {&(_ZTV8S20620C7[6]),  6,43},
  {&(_tg__ZTV8S20620C8__8S20620C7[6]),  6,10},
  {&(_tg__ZTV8S20620C98S20620C8__8S20620C7[6]),  6,8},
  {&(_tg__ZTV8S20620C4__8S20620C98S20620C8__8S20620C7[6]),  6,8},
  {&(_tg__ZTV8S20620C5__8S20620C98S20620C8__8S20620C7[5]),  5,7},
  {&(_tg__ZTV8S20620C2__8S20620C98S20620C8__8S20620C7[3]),  3,3},
  {&(_tg__ZTV9S20620C108S20620C8__8S20620C7[4]),  4,7},
  {&(_tg__ZTV8S20620C29S20620C108S20620C8__A2__8S20620C7[3]),  3,3},
  {&(_tg__ZTV8S20620C59S20620C108S20620C8__A1__8S20620C7[4]),  4,6},
  {&(_tg__ZTV8S20620C2__8S20620C59S20620C108S20620C8__A1__8S20620C7[3]),  3,3},
  {&(_tg__ZTV8S20620C5__9S20620C108S20620C8__8S20620C7[4]),  4,6},
  {&(_tg__ZTV8S20620C2__A1__9S20620C108S20620C8__8S20620C7[3]),  3,3},
  {&(_tg__ZTV8S20620C2__8S20620C8__8S20620C7[3]),  3,3},
  {&(_tg__ZTV8S20620C5__8S20620C8__8S20620C7[5]),  5,7},
  {&(_tg__ZTV8S20620C4__8S20620C8__8S20620C7[6]),  6,8},
  {&(_tg__ZTV9S20620C10__8S20620C8__8S20620C7[4]),  4,7},
  {&(_tg__ZTV8S20620C59S20620C10__A1__8S20620C8__8S20620C7[4]),  4,6},
  {&(_ZTV8S20620C7[31]),  31,43},
  {&(_ZTV8S20620C7[38]),  38,43},
  {&(_ZTV8S20620C7[43]),  43,43},
  {&(_ZTV8S20620C7[16]),  16,43},
  {&(_ZTV8S20620C7[23]),  23,43},
  {&(_tg__ZTV8S20620C4__8S20620C7[5]),  5,7},
  {&(_tg__ZTV8S20620C28S20620C4__A1__8S20620C7[3]),  3,3},
  {&(_tg__ZTV8S20620C5__8S20620C4__8S20620C7[5]),  5,7},
  {&(_tg__ZTV8S20620C2__8S20620C4__8S20620C7[3]),  3,3},
  {&(_tg__ZTV8S20620C5__8S20620C7[4]),  4,6},
  {&(_tg__ZTV8S20620C2__8S20620C5__8S20620C7[3]),  3,3},
  {&(_tg__ZTV8S20620C2__8S20620C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20620C7[];
extern  VTBL_ENTRY _ZTV8S20620C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C7[];
static VTBL_ENTRY alt_thunk_names167[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C4D0Ev,_ZTv0_n20_N8S20620C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20620C4D0Ev,_ZThn60_N8S20620C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C4D1Ev,_ZTv0_n20_N8S20620C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20620C4D1Ev,_ZThn60_N8S20620C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20620C8D0Ev,_ZTv0_n24_N8S20620C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S20620C8D0Ev,_ZThn384_N8S20620C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20620C8D1Ev,_ZTv0_n24_N8S20620C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S20620C8D1Ev,_ZThn384_N8S20620C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C8D0Ev,_ZTv0_n20_N8S20620C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S20620C8D0Ev,_ZThn444_N8S20620C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C8D1Ev,_ZTv0_n20_N8S20620C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S20620C8D1Ev,_ZThn444_N8S20620C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C9D0Ev,_ZTv0_n20_N8S20620C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S20620C9D0Ev,_ZThn444_N8S20620C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C9D1Ev,_ZTv0_n20_N8S20620C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S20620C9D1Ev,_ZThn444_N8S20620C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20620C9D0Ev,_ZTv0_n24_N8S20620C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S20620C9D0Ev,_ZThn384_N8S20620C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20620C9D1Ev,_ZTv0_n24_N8S20620C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S20620C9D1Ev,_ZThn384_N8S20620C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C7D0Ev,_ZTv0_n20_N8S20620C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S20620C7D0Ev,_ZThn444_N8S20620C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C7D1Ev,_ZTv0_n20_N8S20620C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N8S20620C7D1Ev,_ZThn444_N8S20620C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20620C7D0Ev,_ZTv0_n24_N8S20620C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S20620C7D0Ev,_ZThn384_N8S20620C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20620C7D1Ev,_ZTv0_n24_N8S20620C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N8S20620C7D1Ev,_ZThn384_N8S20620C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20620C7 = {  "S20620C7", // class name
  bases_S20620C7, 10,
  &(vtc_S20620C7[0]), // expected_vtbl_contents
  &(vtt_S20620C7[0]), // expected_vtt_contents
  ABISELECT(784,528), // object size
  NSPAIRA(_ZTI8S20620C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20620C7),43, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20620C7),29, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names167,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20620C6  : S20620C7 , S20620C10 {
  ::S20620C9 s20620c6f0;
  __tsi64 s20620c6f1;
  int s20620c6f2;
  virtual void  v8(); // _ZN8S20620C62v8Ev
  virtual void  v9(); // _ZN8S20620C62v9Ev
  virtual void  v10(); // _ZN8S20620C63v10Ev
  ~S20620C6(); // tgen
  S20620C6(); // tgen
};
//SIG(-1 S20620C6) C1{ BC2{ VBC3{ VBC4{ m FD} VBC5{ VBC4 VBC6{ VBC4 Fp Fi[4] FC4 FC4} vd Fp FL Fp FD Fs} BC6 vd} BC7{ VBC4 VBC6 VBC5 BC8{ VBC4 VBC3 vd FC5 Fs FC9{ BC6 BC5 vd v4 FC10{}}} BC9 vd v5 v6} vd v7 v8 Fi[6] FD Fi FD} BC9 v1 v2 v3 FC8 FL Fi}


void  S20620C6 ::v8(){vfunc_called(this, "_ZN8S20620C62v8Ev");}
void  S20620C6 ::v9(){vfunc_called(this, "_ZN8S20620C62v9Ev");}
void  S20620C6 ::v10(){vfunc_called(this, "_ZN8S20620C63v10Ev");}
S20620C6 ::~S20620C6(){ note_dtor("S20620C6", this);} // tgen
S20620C6 ::S20620C6(){ note_ctor("S20620C6", this);} // tgen

static void Test_S20620C6()
{
  extern Class_Descriptor cd_S20620C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(96,255)];
    init_test(&cd_S20620C6, buf);
    S20620C6 *dp, &lv = *(dp=new (buf) S20620C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1520,1016), "sizeof(S20620C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20620C6)");
    check_base_class_offset(lv, (S20620C3_nt*)(S20620C4*), ABISELECT(1376,920), "S20620C6");
    /*is_ambiguous_... S20620C6::S20620C5 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C5*), ABISELECT(1376,920), "S20620C6");
    /*is_ambiguous_... S20620C6::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C2*), ABISELECT(1376,920), "S20620C6");
    /*is_ambiguous_... S20620C4::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C2*)(S20620C4*), ABISELECT(1376,920), "S20620C6");
    check_base_class_offset(lv, (S20620C3_nt*)(S20620C8*)(S20620C7*), ABISELECT(1376,920), "S20620C6");
    check_base_class_offset(lv, (S20620C3_nt*)(S20620C9*)(S20620C8*)(S20620C7*), ABISELECT(1376,920), "S20620C6");
    /*is_ambiguous_... S20620C10::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C2*)(S20620C10*)(S20620C8*)(S20620C7*), ABISELECT(1376,920), "S20620C6");
    check_base_class_offset(lv, (S20620C3_nt*)(S20620C5*)(S20620C10*)(S20620C8*)(S20620C7*), ABISELECT(1376,920), "S20620C6");
    /*is_ambiguous_... S20620C6::S20620C10 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C2*)(S20620C10*), ABISELECT(1376,920), "S20620C6");
    /*is_ambiguous_... S20620C6::S20620C10 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C5*)(S20620C10*), ABISELECT(1376,920), "S20620C6");
    /*is_ambiguous_... S20620C6::S20620C5 */ AMB_check_base_class_offset(lv, (S20620C2*)(S20620C5*), ABISELECT(1456,968), "S20620C6");
    /*is_ambiguous_... S20620C8::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C2*)(S20620C8*)(S20620C7*), ABISELECT(1456,968), "S20620C6");
    check_base_class_offset(lv, (S20620C2*)(S20620C5*)(S20620C10*)(S20620C8*)(S20620C7*), ABISELECT(1456,968), "S20620C6");
    /*is_ambiguous_... S20620C6::S20620C10 */ AMB_check_base_class_offset(lv, (S20620C2*)(S20620C5*)(S20620C10*), ABISELECT(1456,968), "S20620C6");
    check_base_class_offset(lv, (S20620C5*)(S20620C4*), ABISELECT(1392,932), "S20620C6");
    /*is_ambiguous_... S20620C8::S20620C5 */ AMB_check_base_class_offset(lv, (S20620C5*)(S20620C8*)(S20620C7*), ABISELECT(1392,932), "S20620C6");
    /*is_ambiguous_... S20620C4::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C2*)(S20620C4*), ABISELECT(1312,872), "S20620C6");
    check_base_class_offset(lv, (S20620C4*)(S20620C7*), ABISELECT(1312,872), "S20620C6");
    check_base_class_offset(lv, (S20620C4*)(S20620C9*)(S20620C8*)(S20620C7*), ABISELECT(1312,872), "S20620C6");
    check_base_class_offset(lv, (S20620C9*)(S20620C8*)(S20620C7*), 0, "S20620C6");
    /*is_ambiguous_... S20620C10::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C2*)(S20620C10*)(S20620C8*)(S20620C7*), ABISELECT(384,248), "S20620C6");
    check_base_class_offset(lv, (S20620C5*)(S20620C10*)(S20620C8*)(S20620C7*), ABISELECT(448,296), "S20620C6");
    check_base_class_offset(lv, (S20620C10*)(S20620C8*)(S20620C7*), ABISELECT(384,248), "S20620C6");
    check_base_class_offset(lv, (S20620C8*)(S20620C7*), 0, "S20620C6");
    check_base_class_offset(lv, (S20620C7*), 0, "S20620C6");
    /*is_ambiguous_... S20620C6::S20620C10 */ AMB_check_base_class_offset(lv, (S20620C2*)(S20620C10*), ABISELECT(576,384), "S20620C6");
    /*is_ambiguous_... S20620C6::S20620C10 */ AMB_check_base_class_offset(lv, (S20620C5*)(S20620C10*), ABISELECT(640,432), "S20620C6");
    /*is_ambiguous_... S20620C6::S20620C10 */ AMB_check_base_class_offset(lv, (S20620C10*), ABISELECT(576,384), "S20620C6");
    check_field_offset(lv, s20620c6f0, ABISELECT(704,468), "S20620C6.s20620c6f0");
    check_field_offset(lv, s20620c6f1, ABISELECT(1296,860), "S20620C6.s20620c6f1");
    check_field_offset(lv, s20620c6f2, ABISELECT(1304,868), "S20620C6.s20620c6f2");
    test_class_info(&lv, &cd_S20620C6);
    dp->~S20620C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20620C6(Test_S20620C6, "S20620C6", ABISELECT(1520,1016));

#else // __cplusplus

extern void _ZN8S20620C6C1Ev();
extern void _ZN8S20620C6D1Ev();
Name_Map name_map_S20620C6[] = {
  NSPAIR(_ZN8S20620C6C1Ev),
  NSPAIR(_ZN8S20620C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20620C3_nt;
extern VTBL_ENTRY _ZTI11S20620C3_nt[];
extern Class_Descriptor cd_S20620C2;
extern VTBL_ENTRY _ZTI8S20620C2[];
extern  VTBL_ENTRY _ZTV8S20620C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C2[];
extern Class_Descriptor cd_S20620C5;
extern VTBL_ENTRY _ZTI8S20620C5[];
extern  VTBL_ENTRY _ZTV8S20620C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C5[];
extern Class_Descriptor cd_S20620C2;
extern VTBL_ENTRY _ZTI8S20620C2[];
extern  VTBL_ENTRY _ZTV8S20620C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C2[];
extern Class_Descriptor cd_S20620C4;
extern VTBL_ENTRY _ZTI8S20620C4[];
extern  VTBL_ENTRY _ZTV8S20620C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C4[];
extern Class_Descriptor cd_S20620C9;
extern VTBL_ENTRY _ZTI8S20620C9[];
extern  VTBL_ENTRY _ZTV8S20620C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C9[];
extern Class_Descriptor cd_S20620C2;
extern VTBL_ENTRY _ZTI8S20620C2[];
extern  VTBL_ENTRY _ZTV8S20620C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C2[];
extern Class_Descriptor cd_S20620C5;
extern VTBL_ENTRY _ZTI8S20620C5[];
extern  VTBL_ENTRY _ZTV8S20620C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C5[];
extern Class_Descriptor cd_S20620C10;
extern VTBL_ENTRY _ZTI9S20620C10[];
extern  VTBL_ENTRY _ZTV9S20620C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20620C10[];
extern Class_Descriptor cd_S20620C8;
extern VTBL_ENTRY _ZTI8S20620C8[];
extern  VTBL_ENTRY _ZTV8S20620C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C8[];
extern Class_Descriptor cd_S20620C7;
extern VTBL_ENTRY _ZTI8S20620C7[];
extern  VTBL_ENTRY _ZTV8S20620C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C7[];
extern Class_Descriptor cd_S20620C2;
extern VTBL_ENTRY _ZTI8S20620C2[];
extern  VTBL_ENTRY _ZTV8S20620C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C2[];
extern Class_Descriptor cd_S20620C5;
extern VTBL_ENTRY _ZTI8S20620C5[];
extern  VTBL_ENTRY _ZTV8S20620C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C5[];
extern Class_Descriptor cd_S20620C10;
extern VTBL_ENTRY _ZTI9S20620C10[];
extern  VTBL_ENTRY _ZTV9S20620C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20620C10[];
static Base_Class bases_S20620C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20620C3_nt,    ABISELECT(1376,920), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20620C2,    ABISELECT(1456,968), //bcp->offset
    56, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20620C5,    ABISELECT(1392,932), //bcp->offset
    49, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20620C2,    ABISELECT(1312,872), //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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20620C4,    ABISELECT(1312,872), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20620C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20620C2,    ABISELECT(384,248), //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
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20620C5,    ABISELECT(448,296), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20620C10,    ABISELECT(384,248), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20620C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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
    10, //immediately_derived
  0, 0},
  {&cd_S20620C7,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20620C2,    ABISELECT(576,384), //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
    11, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20620C5,    ABISELECT(640,432), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20620C10,    ABISELECT(576,384), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20620C6[];
extern void _ZN8S20620C6D1Ev();
extern void _ZN8S20620C6D0Ev();
extern void _ZN8S20620C82v4Ev();
extern void _ZN8S20620C82v5Ev();
extern void _ZN8S20620C72v6Ev();
extern void _ZN8S20620C72v7Ev();
extern void _ZN8S20620C62v8Ev();
extern void _ZN8S20620C62v9Ev();
extern void _ZN8S20620C63v10Ev();
extern void ABISELECT(_ZThn384_N8S20620C6D1Ev,_ZThn248_N8S20620C6D1Ev)();
extern void ABISELECT(_ZThn384_N8S20620C6D0Ev,_ZThn248_N8S20620C6D0Ev)();
extern void _ZN9S20620C102v3Ev();
extern void ABISELECT(_ZThn448_N8S20620C6D1Ev,_ZThn296_N8S20620C6D1Ev)();
extern void ABISELECT(_ZThn448_N8S20620C6D0Ev,_ZThn296_N8S20620C6D0Ev)();
extern void ABISELECT(_ZThn576_N8S20620C6D1Ev,_ZThn384_N8S20620C6D1Ev)();
extern void ABISELECT(_ZThn576_N8S20620C6D0Ev,_ZThn384_N8S20620C6D0Ev)();
extern void _ZN9S20620C102v3Ev();
extern void ABISELECT(_ZThn640_N8S20620C6D1Ev,_ZThn432_N8S20620C6D1Ev)();
extern void ABISELECT(_ZThn640_N8S20620C6D0Ev,_ZThn432_N8S20620C6D0Ev)();
extern void ABISELECT(_ZTv0_n48_N8S20620C6D1Ev,_ZTv0_n24_N8S20620C6D1Ev)();
extern void ABISELECT(_ZThn1312_N8S20620C6D1Ev,_ZThn872_N8S20620C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20620C6D0Ev,_ZTv0_n24_N8S20620C6D0Ev)();
extern void ABISELECT(_ZThn1312_N8S20620C6D0Ev,_ZThn872_N8S20620C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20620C6D1Ev,_ZTv0_n20_N8S20620C6D1Ev)();
extern void ABISELECT(_ZThn1392_N8S20620C6D1Ev,_ZThn932_N8S20620C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20620C6D0Ev,_ZTv0_n20_N8S20620C6D0Ev)();
extern void ABISELECT(_ZThn1392_N8S20620C6D0Ev,_ZThn932_N8S20620C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20620C6[] = {
  ABISELECT(1456,968),
  ABISELECT(1392,932),
  ABISELECT(1312,872),
  ABISELECT(1376,920),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C6[0]),
  (VTBL_ENTRY)&_ZN8S20620C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20620C82v4Ev,
  (VTBL_ENTRY)&_ZN8S20620C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20620C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20620C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20620C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20620C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20620C63v10Ev,
  ABISELECT(1072,720),
  ABISELECT(992,672),
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI8S20620C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N8S20620C6D1Ev,_ZThn248_N8S20620C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N8S20620C6D0Ev,_ZThn248_N8S20620C6D0Ev),
  (VTBL_ENTRY)&_ZN9S20620C102v3Ev,
  ABISELECT(1008,672),
  ABISELECT(928,624),
  ABISELECT(-448,-296),
  (VTBL_ENTRY)&(_ZTI8S20620C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N8S20620C6D1Ev,_ZThn296_N8S20620C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N8S20620C6D0Ev,_ZThn296_N8S20620C6D0Ev),
  ABISELECT(880,584),
  ABISELECT(800,536),
  ABISELECT(-576,-384),
  (VTBL_ENTRY)&(_ZTI8S20620C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N8S20620C6D1Ev,_ZThn384_N8S20620C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N8S20620C6D0Ev,_ZThn384_N8S20620C6D0Ev),
  (VTBL_ENTRY)&_ZN9S20620C102v3Ev,
  ABISELECT(816,536),
  ABISELECT(736,488),
  ABISELECT(-640,-432),
  (VTBL_ENTRY)&(_ZTI8S20620C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn640_N8S20620C6D1Ev,_ZThn432_N8S20620C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn640_N8S20620C6D0Ev,_ZThn432_N8S20620C6D0Ev),
  ABISELECT(-1312,-872),
  ABISELECT(144,96),
  ABISELECT(80,60),
  ABISELECT(64,48),
  ABISELECT(-1312,-872),
  (VTBL_ENTRY)&(_ZTI8S20620C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C6D1Ev,_ZTv0_n24_N8S20620C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C6D0Ev,_ZTv0_n24_N8S20620C6D0Ev),
  ABISELECT(-1392,-932),
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  ABISELECT(-1392,-932),
  (VTBL_ENTRY)&(_ZTI8S20620C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C6D1Ev,_ZTv0_n20_N8S20620C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C6D0Ev,_ZTv0_n20_N8S20620C6D0Ev),
  ABISELECT(-80,-48),
  ABISELECT(-1456,-968),
  (VTBL_ENTRY)&(_ZTI8S20620C6[0]),
};
extern VTBL_ENTRY _ZTV8S20620C6[];
extern void _ZN8S20620C7D1Ev();
extern void _ZN8S20620C7D0Ev();
extern void _ZN8S20620C82v4Ev();
extern void _ZN8S20620C82v5Ev();
extern void _ZN8S20620C72v6Ev();
extern void _ZN8S20620C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C7__8S20620C6[] = {
  ABISELECT(1456,968),
  ABISELECT(1392,932),
  ABISELECT(1312,872),
  ABISELECT(1376,920),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C7[0]),
  (VTBL_ENTRY)&_ZN8S20620C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20620C82v4Ev,
  (VTBL_ENTRY)&_ZN8S20620C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20620C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20620C72v7Ev,
};
extern void _ZN8S20620C8D1Ev();
extern void _ZN8S20620C8D0Ev();
extern void _ZN8S20620C82v4Ev();
extern void _ZN8S20620C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C88S20620C7__8S20620C6[] = {
  ABISELECT(1456,968),
  ABISELECT(1392,932),
  ABISELECT(1312,872),
  ABISELECT(1376,920),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C8[0]),
  (VTBL_ENTRY)&_ZN8S20620C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20620C82v4Ev,
  (VTBL_ENTRY)&_ZN8S20620C82v5Ev,
};
extern void _ZN8S20620C9D1Ev();
extern void _ZN8S20620C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C98S20620C88S20620C7__8S20620C6[] = {
  ABISELECT(1456,968),
  ABISELECT(1392,932),
  ABISELECT(1312,872),
  ABISELECT(1376,920),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C9[0]),
  (VTBL_ENTRY)&_ZN8S20620C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C9D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S20620C9D1Ev,_ZTv0_n24_N8S20620C9D1Ev)();
extern void ABISELECT(_ZThn1312_N8S20620C9D1Ev,_ZThn872_N8S20620C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20620C9D0Ev,_ZTv0_n24_N8S20620C9D0Ev)();
extern void ABISELECT(_ZThn1312_N8S20620C9D0Ev,_ZThn872_N8S20620C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20620C4__8S20620C98S20620C88S20620C7__8S20620C6[] = {
  ABISELECT(-1312,-872),
  ABISELECT(144,96),
  ABISELECT(80,60),
  ABISELECT(64,48),
  ABISELECT(-1312,-872),
  (VTBL_ENTRY)&(_ZTI8S20620C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C9D1Ev,_ZTv0_n24_N8S20620C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C9D0Ev,_ZTv0_n24_N8S20620C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20620C9D1Ev,_ZTv0_n20_N8S20620C9D1Ev)();
extern void ABISELECT(_ZThn1392_N8S20620C9D1Ev,_ZThn932_N8S20620C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20620C9D0Ev,_ZTv0_n20_N8S20620C9D0Ev)();
extern void ABISELECT(_ZThn1392_N8S20620C9D0Ev,_ZThn932_N8S20620C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20620C5__8S20620C98S20620C88S20620C7__8S20620C6[] = {
  ABISELECT(-1392,-932),
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  ABISELECT(-1392,-932),
  (VTBL_ENTRY)&(_ZTI8S20620C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C9D1Ev,_ZTv0_n20_N8S20620C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C9D0Ev,_ZTv0_n20_N8S20620C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C98S20620C88S20620C7__8S20620C6[] = {
  ABISELECT(-80,-48),
  ABISELECT(-1456,-968),
  (VTBL_ENTRY)&(_ZTI8S20620C9[0]),
};
extern void _ZN9S20620C10D1Ev();
extern void _ZN9S20620C10D0Ev();
extern void _ZN9S20620C102v3Ev();
static  VTBL_ENTRY _tg__ZTV9S20620C108S20620C88S20620C7__8S20620C6[] = {
  ABISELECT(1072,720),
  ABISELECT(992,672),
  0,
  (VTBL_ENTRY)&(_ZTI9S20620C10[0]),
  (VTBL_ENTRY)&_ZN9S20620C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20620C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20620C102v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20620C29S20620C108S20620C88S20620C7__A2__8S20620C6[] = {
  ABISELECT(992,672),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C2[0]),
};
extern void _ZN8S20620C5D1Ev();
extern void _ZN8S20620C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C59S20620C108S20620C88S20620C7__A1__8S20620C6[] = {
  ABISELECT(1008,672),
  ABISELECT(928,624),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
  (VTBL_ENTRY)&_ZN8S20620C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C59S20620C108S20620C88S20620C7__A1__8S20620C6[] = {
  ABISELECT(-80,-48),
  ABISELECT(-1008,-672),
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
};
extern void ABISELECT(_ZThn64_N9S20620C10D1Ev,_ZThn48_N9S20620C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S20620C10D0Ev,_ZThn48_N9S20620C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20620C5__9S20620C108S20620C88S20620C7__8S20620C6[] = {
  ABISELECT(1008,672),
  ABISELECT(928,624),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI9S20620C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S20620C10D1Ev,_ZThn48_N9S20620C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S20620C10D0Ev,_ZThn48_N9S20620C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__A1__9S20620C108S20620C88S20620C7__8S20620C6[] = {
  ABISELECT(-80,-48),
  ABISELECT(-1072,-720),
  (VTBL_ENTRY)&(_ZTI9S20620C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C88S20620C7__8S20620C6[] = {
  ABISELECT(-80,-48),
  ABISELECT(-1456,-968),
  (VTBL_ENTRY)&(_ZTI8S20620C8[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S20620C8D1Ev,_ZTv0_n20_N8S20620C8D1Ev)();
extern void ABISELECT(_ZThn1392_N8S20620C8D1Ev,_ZThn932_N8S20620C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20620C8D0Ev,_ZTv0_n20_N8S20620C8D0Ev)();
extern void ABISELECT(_ZThn1392_N8S20620C8D0Ev,_ZThn932_N8S20620C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20620C5__8S20620C88S20620C7__8S20620C6[] = {
  ABISELECT(-1392,-932),
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  ABISELECT(-1392,-932),
  (VTBL_ENTRY)&(_ZTI8S20620C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C8D1Ev,_ZTv0_n20_N8S20620C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C8D0Ev,_ZTv0_n20_N8S20620C8D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20620C8D1Ev,_ZTv0_n24_N8S20620C8D1Ev)();
extern void ABISELECT(_ZThn1312_N8S20620C8D1Ev,_ZThn872_N8S20620C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20620C8D0Ev,_ZTv0_n24_N8S20620C8D0Ev)();
extern void ABISELECT(_ZThn1312_N8S20620C8D0Ev,_ZThn872_N8S20620C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20620C4__8S20620C88S20620C7__8S20620C6[] = {
  ABISELECT(-1312,-872),
  ABISELECT(144,96),
  ABISELECT(80,60),
  ABISELECT(64,48),
  ABISELECT(-1312,-872),
  (VTBL_ENTRY)&(_ZTI8S20620C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C8D1Ev,_ZTv0_n24_N8S20620C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C8D0Ev,_ZTv0_n24_N8S20620C8D0Ev),
};
extern void ABISELECT(_ZThn384_N8S20620C8D1Ev,_ZThn248_N8S20620C8D1Ev)();
extern void ABISELECT(_ZThn384_N8S20620C8D0Ev,_ZThn248_N8S20620C8D0Ev)();
extern void _ZN9S20620C102v3Ev();
static  VTBL_ENTRY _tg__ZTV9S20620C10__8S20620C88S20620C7__8S20620C6[] = {
  ABISELECT(1072,720),
  ABISELECT(992,672),
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI8S20620C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N8S20620C8D1Ev,_ZThn248_N8S20620C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N8S20620C8D0Ev,_ZThn248_N8S20620C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20620C102v3Ev,
};
extern void ABISELECT(_ZThn448_N8S20620C8D1Ev,_ZThn296_N8S20620C8D1Ev)();
extern void ABISELECT(_ZThn448_N8S20620C8D0Ev,_ZThn296_N8S20620C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20620C59S20620C10__A1__8S20620C88S20620C7__8S20620C6[] = {
  ABISELECT(1008,672),
  ABISELECT(928,624),
  ABISELECT(-448,-296),
  (VTBL_ENTRY)&(_ZTI8S20620C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N8S20620C8D1Ev,_ZThn296_N8S20620C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N8S20620C8D0Ev,_ZThn296_N8S20620C8D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20620C7D1Ev,_ZTv0_n24_N8S20620C7D1Ev)();
extern void ABISELECT(_ZThn1312_N8S20620C7D1Ev,_ZThn872_N8S20620C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20620C7D0Ev,_ZTv0_n24_N8S20620C7D0Ev)();
extern void ABISELECT(_ZThn1312_N8S20620C7D0Ev,_ZThn872_N8S20620C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20620C4__8S20620C7__8S20620C6[] = {
  ABISELECT(-1312,-872),
  ABISELECT(144,96),
  ABISELECT(80,60),
  ABISELECT(64,48),
  ABISELECT(-1312,-872),
  (VTBL_ENTRY)&(_ZTI8S20620C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C7D1Ev,_ZTv0_n24_N8S20620C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C7D0Ev,_ZTv0_n24_N8S20620C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20620C7D1Ev,_ZTv0_n20_N8S20620C7D1Ev)();
extern void ABISELECT(_ZThn1392_N8S20620C7D1Ev,_ZThn932_N8S20620C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20620C7D0Ev,_ZTv0_n20_N8S20620C7D0Ev)();
extern void ABISELECT(_ZThn1392_N8S20620C7D0Ev,_ZThn932_N8S20620C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20620C5__8S20620C7__8S20620C6[] = {
  ABISELECT(-1392,-932),
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  ABISELECT(-1392,-932),
  (VTBL_ENTRY)&(_ZTI8S20620C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C7D1Ev,_ZTv0_n20_N8S20620C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C7D0Ev,_ZTv0_n20_N8S20620C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C7__8S20620C6[] = {
  ABISELECT(-80,-48),
  ABISELECT(-1456,-968),
  (VTBL_ENTRY)&(_ZTI8S20620C7[0]),
};
extern void ABISELECT(_ZThn384_N8S20620C7D1Ev,_ZThn248_N8S20620C7D1Ev)();
extern void ABISELECT(_ZThn384_N8S20620C7D0Ev,_ZThn248_N8S20620C7D0Ev)();
extern void _ZN9S20620C102v3Ev();
static  VTBL_ENTRY _tg__ZTV9S20620C108S20620C8__8S20620C7__8S20620C6[] = {
  ABISELECT(1072,720),
  ABISELECT(992,672),
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI8S20620C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N8S20620C7D1Ev,_ZThn248_N8S20620C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N8S20620C7D0Ev,_ZThn248_N8S20620C7D0Ev),
  (VTBL_ENTRY)&_ZN9S20620C102v3Ev,
};
extern void ABISELECT(_ZThn448_N8S20620C7D1Ev,_ZThn296_N8S20620C7D1Ev)();
extern void ABISELECT(_ZThn448_N8S20620C7D0Ev,_ZThn296_N8S20620C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20620C59S20620C108S20620C8__A1__8S20620C7__8S20620C6[] = {
  ABISELECT(1008,672),
  ABISELECT(928,624),
  ABISELECT(-448,-296),
  (VTBL_ENTRY)&(_ZTI8S20620C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N8S20620C7D1Ev,_ZThn296_N8S20620C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N8S20620C7D0Ev,_ZThn296_N8S20620C7D0Ev),
};
extern void _ZN9S20620C10D1Ev();
extern void _ZN9S20620C10D0Ev();
extern void _ZN9S20620C102v3Ev();
static  VTBL_ENTRY _tg__ZTV9S20620C10__A1__8S20620C6[] = {
  ABISELECT(880,584),
  ABISELECT(800,536),
  0,
  (VTBL_ENTRY)&(_ZTI9S20620C10[0]),
  (VTBL_ENTRY)&_ZN9S20620C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20620C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20620C102v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20620C29S20620C10__A3__8S20620C6[] = {
  ABISELECT(800,536),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C2[0]),
};
extern void _ZN8S20620C5D1Ev();
extern void _ZN8S20620C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C59S20620C10__A2__8S20620C6[] = {
  ABISELECT(816,536),
  ABISELECT(736,488),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
  (VTBL_ENTRY)&_ZN8S20620C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C59S20620C10__A2__8S20620C6[] = {
  ABISELECT(-80,-48),
  ABISELECT(-816,-536),
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
};
extern void ABISELECT(_ZThn64_N9S20620C10D1Ev,_ZThn48_N9S20620C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S20620C10D0Ev,_ZThn48_N9S20620C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20620C5__9S20620C10__A1__8S20620C6[] = {
  ABISELECT(816,536),
  ABISELECT(736,488),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI9S20620C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S20620C10D1Ev,_ZThn48_N9S20620C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S20620C10D0Ev,_ZThn48_N9S20620C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__A1__9S20620C10__A1__8S20620C6[] = {
  ABISELECT(-80,-48),
  ABISELECT(-880,-584),
  (VTBL_ENTRY)&(_ZTI9S20620C10[0]),
};
extern void _ZN8S20620C4D1Ev();
extern void _ZN8S20620C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C4__8S20620C6[] = {
  ABISELECT(144,96),
  ABISELECT(80,60),
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C4[0]),
  (VTBL_ENTRY)&_ZN8S20620C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20620C28S20620C4__A1__8S20620C6[] = {
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C2[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S20620C4D1Ev,_ZTv0_n20_N8S20620C4D1Ev)();
extern void ABISELECT(_ZThn80_N8S20620C4D1Ev,_ZThn60_N8S20620C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20620C4D0Ev,_ZTv0_n20_N8S20620C4D0Ev)();
extern void ABISELECT(_ZThn80_N8S20620C4D0Ev,_ZThn60_N8S20620C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20620C5__8S20620C4__8S20620C6[] = {
  ABISELECT(-80,-60),
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI8S20620C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C4D1Ev,_ZTv0_n20_N8S20620C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C4D0Ev,_ZTv0_n20_N8S20620C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C4__8S20620C6[] = {
  ABISELECT(-80,-48),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI8S20620C4[0]),
};
extern void _ZN8S20620C5D1Ev();
extern void _ZN8S20620C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C5__8S20620C6[] = {
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
  (VTBL_ENTRY)&_ZN8S20620C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C5__8S20620C6[] = {
  ABISELECT(-80,-48),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C6[] = {
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C2[0]),
};
static  VTT_ENTRY vtt_S20620C6[] = {
  {&(_ZTV8S20620C6[6]),  6,59},
  {&(_tg__ZTV8S20620C7__8S20620C6[6]),  6,12},
  {&(_tg__ZTV8S20620C88S20620C7__8S20620C6[6]),  6,10},
  {&(_tg__ZTV8S20620C98S20620C88S20620C7__8S20620C6[6]),  6,8},
  {&(_tg__ZTV8S20620C4__8S20620C98S20620C88S20620C7__8S20620C6[6]),  6,8},
  {&(_tg__ZTV8S20620C5__8S20620C98S20620C88S20620C7__8S20620C6[5]),  5,7},
  {&(_tg__ZTV8S20620C2__8S20620C98S20620C88S20620C7__8S20620C6[3]),  3,3},
  {&(_tg__ZTV9S20620C108S20620C88S20620C7__8S20620C6[4]),  4,7},
  {&(_tg__ZTV8S20620C29S20620C108S20620C88S20620C7__A2__8S20620C6[3]),  3,3},
  {&(_tg__ZTV8S20620C59S20620C108S20620C88S20620C7__A1__8S20620C6[4]),  4,6},
  {&(_tg__ZTV8S20620C2__8S20620C59S20620C108S20620C88S20620C7__A1__8S20620C6[3]),  3,3},
  {&(_tg__ZTV8S20620C5__9S20620C108S20620C88S20620C7__8S20620C6[4]),  4,6},
  {&(_tg__ZTV8S20620C2__A1__9S20620C108S20620C88S20620C7__8S20620C6[3]),  3,3},
  {&(_tg__ZTV8S20620C2__8S20620C88S20620C7__8S20620C6[3]),  3,3},
  {&(_tg__ZTV8S20620C5__8S20620C88S20620C7__8S20620C6[5]),  5,7},
  {&(_tg__ZTV8S20620C4__8S20620C88S20620C7__8S20620C6[6]),  6,8},
  {&(_tg__ZTV9S20620C10__8S20620C88S20620C7__8S20620C6[4]),  4,7},
  {&(_tg__ZTV8S20620C59S20620C10__A1__8S20620C88S20620C7__8S20620C6[4]),  4,6},
  {&(_tg__ZTV8S20620C4__8S20620C7__8S20620C6[6]),  6,8},
  {&(_tg__ZTV8S20620C5__8S20620C7__8S20620C6[5]),  5,7},
  {&(_tg__ZTV8S20620C2__8S20620C7__8S20620C6[3]),  3,3},
  {&(_tg__ZTV9S20620C108S20620C8__8S20620C7__8S20620C6[4]),  4,7},
  {&(_tg__ZTV8S20620C59S20620C108S20620C8__A1__8S20620C7__8S20620C6[4]),  4,6},
  {&(_tg__ZTV9S20620C10__A1__8S20620C6[4]),  4,7},
  {&(_tg__ZTV8S20620C29S20620C10__A3__8S20620C6[3]),  3,3},
  {&(_tg__ZTV8S20620C59S20620C10__A2__8S20620C6[4]),  4,6},
  {&(_tg__ZTV8S20620C2__8S20620C59S20620C10__A2__8S20620C6[3]),  3,3},
  {&(_tg__ZTV8S20620C5__9S20620C10__A1__8S20620C6[4]),  4,6},
  {&(_tg__ZTV8S20620C2__A1__9S20620C10__A1__8S20620C6[3]),  3,3},
  {&(_ZTV8S20620C6[47]),  47,59},
  {&(_ZTV8S20620C6[54]),  54,59},
  {&(_ZTV8S20620C6[59]),  59,59},
  {&(_ZTV8S20620C6[19]),  19,59},
  {&(_ZTV8S20620C6[26]),  26,59},
  {&(_ZTV8S20620C6[32]),  32,59},
  {&(_ZTV8S20620C6[39]),  39,59},
  {&(_tg__ZTV8S20620C4__8S20620C6[5]),  5,7},
  {&(_tg__ZTV8S20620C28S20620C4__A1__8S20620C6[3]),  3,3},
  {&(_tg__ZTV8S20620C5__8S20620C4__8S20620C6[5]),  5,7},
  {&(_tg__ZTV8S20620C2__8S20620C4__8S20620C6[3]),  3,3},
  {&(_tg__ZTV8S20620C5__8S20620C6[4]),  4,6},
  {&(_tg__ZTV8S20620C2__8S20620C5__8S20620C6[3]),  3,3},
  {&(_tg__ZTV8S20620C2__8S20620C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20620C6[];
extern  VTBL_ENTRY _ZTV8S20620C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C6[];
static VTBL_ENTRY alt_thunk_names168[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C4D0Ev,_ZTv0_n20_N8S20620C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20620C4D0Ev,_ZThn60_N8S20620C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C4D1Ev,_ZTv0_n20_N8S20620C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N8S20620C4D1Ev,_ZThn60_N8S20620C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C7D0Ev,_ZTv0_n20_N8S20620C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N8S20620C7D0Ev,_ZThn932_N8S20620C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C7D1Ev,_ZTv0_n20_N8S20620C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N8S20620C7D1Ev,_ZThn932_N8S20620C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20620C7D0Ev,_ZTv0_n24_N8S20620C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N8S20620C7D0Ev,_ZThn872_N8S20620C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20620C7D1Ev,_ZTv0_n24_N8S20620C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N8S20620C7D1Ev,_ZThn872_N8S20620C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20620C8D0Ev,_ZTv0_n24_N8S20620C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N8S20620C8D0Ev,_ZThn872_N8S20620C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20620C8D1Ev,_ZTv0_n24_N8S20620C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N8S20620C8D1Ev,_ZThn872_N8S20620C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C8D0Ev,_ZTv0_n20_N8S20620C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N8S20620C8D0Ev,_ZThn932_N8S20620C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C8D1Ev,_ZTv0_n20_N8S20620C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N8S20620C8D1Ev,_ZThn932_N8S20620C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C9D0Ev,_ZTv0_n20_N8S20620C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N8S20620C9D0Ev,_ZThn932_N8S20620C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C9D1Ev,_ZTv0_n20_N8S20620C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N8S20620C9D1Ev,_ZThn932_N8S20620C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20620C9D0Ev,_ZTv0_n24_N8S20620C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N8S20620C9D0Ev,_ZThn872_N8S20620C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20620C9D1Ev,_ZTv0_n24_N8S20620C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N8S20620C9D1Ev,_ZThn872_N8S20620C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C6D0Ev,_ZTv0_n20_N8S20620C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N8S20620C6D0Ev,_ZThn932_N8S20620C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C6D1Ev,_ZTv0_n20_N8S20620C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N8S20620C6D1Ev,_ZThn932_N8S20620C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20620C6D0Ev,_ZTv0_n24_N8S20620C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N8S20620C6D0Ev,_ZThn872_N8S20620C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20620C6D1Ev,_ZTv0_n24_N8S20620C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N8S20620C6D1Ev,_ZThn872_N8S20620C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20620C6 = {  "S20620C6", // class name
  bases_S20620C6, 14,
  &(vtc_S20620C6[0]), // expected_vtbl_contents
  &(vtt_S20620C6[0]), // expected_vtt_contents
  ABISELECT(1520,1016), // object size
  NSPAIRA(_ZTI8S20620C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20620C6),59, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20620C6),43, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names168,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20620C1  : virtual S20620C2 , virtual S20620C4 , virtual S20620C6 {
  __tsi64 s20620c1f0[4];
  unsigned short s20620c1f1:1;
  char s20620c1f2;
  virtual void  v1(); // _ZN8S20620C12v1Ev
  virtual void  v2(); // _ZN8S20620C12v2Ev
  ~S20620C1(); // tgen
  S20620C1(); // tgen
};
//SIG(1 S20620C1) C1{ VBC2{ VBC3{ m FD} Fp Fi[4] FC3 FC3} VBC4{ VBC3 VBC5{ VBC3 VBC2 vd Fp FL Fp FD Fs} BC2 vd} VBC6{ BC7{ VBC4 BC8{ VBC3 VBC2 VBC5 BC9{ VBC3 VBC4 vd FC5 Fs FC10{ BC2 BC5 vd v3 FC11{}}} BC10 vd v4 v5} vd v6 v7 Fi[6] FD Fi FD} BC10 v8 v9 v10 FC9 FL Fi} v1 v2 FL[4] Fs:1 Fc}


void  S20620C1 ::v1(){vfunc_called(this, "_ZN8S20620C12v1Ev");}
void  S20620C1 ::v2(){vfunc_called(this, "_ZN8S20620C12v2Ev");}
S20620C1 ::~S20620C1(){ note_dtor("S20620C1", this);} // tgen
S20620C1 ::S20620C1(){ note_ctor("S20620C1", this);} // tgen

static void Test_S20620C1()
{
  extern Class_Descriptor cd_S20620C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(99,265)];
    init_test(&cd_S20620C1, buf);
    S20620C1 *dp, &lv = *(dp=new (buf) S20620C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1568,1056), "sizeof(S20620C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S20620C1)");
    /*is_ambiguous_... S20620C1::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C2*), ABISELECT(112,88), "S20620C1");
    check_base_class_offset(lv, (S20620C3_nt*)(S20620C4*), ABISELECT(112,88), "S20620C1");
    /*is_ambiguous_... S20620C1::S20620C5 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C5*), ABISELECT(112,88), "S20620C1");
    /*is_ambiguous_... S20620C4::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C2*)(S20620C4*), ABISELECT(112,88), "S20620C1");
    check_base_class_offset(lv, (S20620C3_nt*)(S20620C8*)(S20620C7*)(S20620C6*), ABISELECT(112,88), "S20620C1");
    check_base_class_offset(lv, (S20620C3_nt*)(S20620C9*)(S20620C8*)(S20620C7*)(S20620C6*), ABISELECT(112,88), "S20620C1");
    /*is_ambiguous_... S20620C10::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C2*)(S20620C10*)(S20620C8*)(S20620C7*)(S20620C6*), ABISELECT(112,88), "S20620C1");
    check_base_class_offset(lv, (S20620C3_nt*)(S20620C5*)(S20620C10*)(S20620C8*)(S20620C7*)(S20620C6*), ABISELECT(112,88), "S20620C1");
    /*is_ambiguous_... S20620C6::S20620C10 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C2*)(S20620C10*)(S20620C6*), ABISELECT(112,88), "S20620C1");
    /*is_ambiguous_... S20620C6::S20620C10 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S20620C5*)(S20620C10*)(S20620C6*), ABISELECT(112,88), "S20620C1");
    /*is_ambiguous_... S20620C1::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C2*), ABISELECT(48,40), "S20620C1");
    /*is_ambiguous_... S20620C1::S20620C5 */ AMB_check_base_class_offset(lv, (S20620C2*)(S20620C5*), ABISELECT(48,40), "S20620C1");
    /*is_ambiguous_... S20620C8::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C2*)(S20620C8*)(S20620C7*)(S20620C6*), ABISELECT(48,40), "S20620C1");
    check_base_class_offset(lv, (S20620C2*)(S20620C5*)(S20620C10*)(S20620C8*)(S20620C7*)(S20620C6*), ABISELECT(48,40), "S20620C1");
    /*is_ambiguous_... S20620C6::S20620C10 */ AMB_check_base_class_offset(lv, (S20620C2*)(S20620C5*)(S20620C10*)(S20620C6*), ABISELECT(48,40), "S20620C1");
    check_base_class_offset(lv, (S20620C5*)(S20620C4*), ABISELECT(192,148), "S20620C1");
    /*is_ambiguous_... S20620C8::S20620C5 */ AMB_check_base_class_offset(lv, (S20620C5*)(S20620C8*)(S20620C7*)(S20620C6*), ABISELECT(192,148), "S20620C1");
    /*is_ambiguous_... S20620C4::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C2*)(S20620C4*), ABISELECT(128,100), "S20620C1");
    check_base_class_offset(lv, (S20620C4*), ABISELECT(128,100), "S20620C1");
    check_base_class_offset(lv, (S20620C4*)(S20620C7*)(S20620C6*), ABISELECT(128,100), "S20620C1");
    check_base_class_offset(lv, (S20620C4*)(S20620C9*)(S20620C8*)(S20620C7*)(S20620C6*), ABISELECT(128,100), "S20620C1");
    check_base_class_offset(lv, (S20620C9*)(S20620C8*)(S20620C7*)(S20620C6*), ABISELECT(256,184), "S20620C1");
    /*is_ambiguous_... S20620C10::S20620C2 */ AMB_check_base_class_offset(lv, (S20620C2*)(S20620C10*)(S20620C8*)(S20620C7*)(S20620C6*), ABISELECT(640,432), "S20620C1");
    check_base_class_offset(lv, (S20620C5*)(S20620C10*)(S20620C8*)(S20620C7*)(S20620C6*), ABISELECT(704,480), "S20620C1");
    check_base_class_offset(lv, (S20620C10*)(S20620C8*)(S20620C7*)(S20620C6*), ABISELECT(640,432), "S20620C1");
    check_base_class_offset(lv, (S20620C8*)(S20620C7*)(S20620C6*), ABISELECT(256,184), "S20620C1");
    check_base_class_offset(lv, (S20620C7*)(S20620C6*), ABISELECT(256,184), "S20620C1");
    /*is_ambiguous_... S20620C6::S20620C10 */ AMB_check_base_class_offset(lv, (S20620C2*)(S20620C10*)(S20620C6*), ABISELECT(832,568), "S20620C1");
    /*is_ambiguous_... S20620C6::S20620C10 */ AMB_check_base_class_offset(lv, (S20620C5*)(S20620C10*)(S20620C6*), ABISELECT(896,616), "S20620C1");
    /*is_ambiguous_... S20620C6::S20620C10 */ AMB_check_base_class_offset(lv, (S20620C10*)(S20620C6*), ABISELECT(832,568), "S20620C1");
    check_base_class_offset(lv, (S20620C6*), ABISELECT(256,184), "S20620C1");
    check_field_offset(lv, s20620c1f0, ABISELECT(8,4), "S20620C1.s20620c1f0");
    set_bf_and_test(lv, s20620c1f1, ABISELECT(40,36), 0, 1, 1, "S20620C1");
    check_field_offset(lv, s20620c1f2, ABISELECT(41,37), "S20620C1.s20620c1f2");
    test_class_info(&lv, &cd_S20620C1);
    dp->~S20620C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20620C1(Test_S20620C1, "S20620C1", ABISELECT(1568,1056));

#else // __cplusplus

extern void _ZN8S20620C1C1Ev();
extern void _ZN8S20620C1D1Ev();
Name_Map name_map_S20620C1[] = {
  NSPAIR(_ZN8S20620C1C1Ev),
  NSPAIR(_ZN8S20620C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20620C3_nt;
extern VTBL_ENTRY _ZTI11S20620C3_nt[];
extern Class_Descriptor cd_S20620C2;
extern VTBL_ENTRY _ZTI8S20620C2[];
extern  VTBL_ENTRY _ZTV8S20620C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C2[];
extern Class_Descriptor cd_S20620C5;
extern VTBL_ENTRY _ZTI8S20620C5[];
extern  VTBL_ENTRY _ZTV8S20620C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C5[];
extern Class_Descriptor cd_S20620C2;
extern VTBL_ENTRY _ZTI8S20620C2[];
extern  VTBL_ENTRY _ZTV8S20620C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C2[];
extern Class_Descriptor cd_S20620C4;
extern VTBL_ENTRY _ZTI8S20620C4[];
extern  VTBL_ENTRY _ZTV8S20620C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C4[];
extern Class_Descriptor cd_S20620C9;
extern VTBL_ENTRY _ZTI8S20620C9[];
extern  VTBL_ENTRY _ZTV8S20620C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C9[];
extern Class_Descriptor cd_S20620C2;
extern VTBL_ENTRY _ZTI8S20620C2[];
extern  VTBL_ENTRY _ZTV8S20620C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C2[];
extern Class_Descriptor cd_S20620C5;
extern VTBL_ENTRY _ZTI8S20620C5[];
extern  VTBL_ENTRY _ZTV8S20620C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C5[];
extern Class_Descriptor cd_S20620C10;
extern VTBL_ENTRY _ZTI9S20620C10[];
extern  VTBL_ENTRY _ZTV9S20620C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20620C10[];
extern Class_Descriptor cd_S20620C8;
extern VTBL_ENTRY _ZTI8S20620C8[];
extern  VTBL_ENTRY _ZTV8S20620C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C8[];
extern Class_Descriptor cd_S20620C7;
extern VTBL_ENTRY _ZTI8S20620C7[];
extern  VTBL_ENTRY _ZTV8S20620C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C7[];
extern Class_Descriptor cd_S20620C2;
extern VTBL_ENTRY _ZTI8S20620C2[];
extern  VTBL_ENTRY _ZTV8S20620C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C2[];
extern Class_Descriptor cd_S20620C5;
extern VTBL_ENTRY _ZTI8S20620C5[];
extern  VTBL_ENTRY _ZTV8S20620C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C5[];
extern Class_Descriptor cd_S20620C10;
extern VTBL_ENTRY _ZTI9S20620C10[];
extern  VTBL_ENTRY _ZTV9S20620C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20620C10[];
extern Class_Descriptor cd_S20620C6;
extern VTBL_ENTRY _ZTI8S20620C6[];
extern  VTBL_ENTRY _ZTV8S20620C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C6[];
static Base_Class bases_S20620C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20620C3_nt,    ABISELECT(112,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
    1, //immediately_derived
  0, 1},
  {&cd_S20620C2,    ABISELECT(48,40), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20620C5,    ABISELECT(192,148), //bcp->offset
    22, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20620C2,    ABISELECT(128,100), //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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S20620C4,    ABISELECT(128,100), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20620C9,    ABISELECT(256,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20620C2,    ABISELECT(640,432), //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
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20620C5,    ABISELECT(704,480), //bcp->offset
    60, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S20620C10,    ABISELECT(640,432), //bcp->offset
    53, //bcp->virtual_function_table_offset
    4, //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
    9, //immediately_derived
  0, 0},
  {&cd_S20620C8,    ABISELECT(256,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S20620C7,    ABISELECT(256,184), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20620C2,    ABISELECT(832,568), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20620C5,    ABISELECT(896,616), //bcp->offset
    73, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S20620C10,    ABISELECT(832,568), //bcp->offset
    66, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S20620C6,    ABISELECT(256,184), //bcp->offset
    29, //bcp->virtual_function_table_offset
    15, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20620C1[];
extern void _ZN8S20620C12v1Ev();
extern void _ZN8S20620C12v2Ev();
extern void _ZN8S20620C1D1Ev();
extern void _ZN8S20620C1D0Ev();
extern void ABISELECT(_ZTv0_n48_N8S20620C1D1Ev,_ZTv0_n24_N8S20620C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S20620C1D1Ev,_ZThn100_N8S20620C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20620C1D0Ev,_ZTv0_n24_N8S20620C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S20620C1D0Ev,_ZThn100_N8S20620C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20620C1D1Ev,_ZTv0_n20_N8S20620C1D1Ev)();
extern void ABISELECT(_ZThn192_N8S20620C1D1Ev,_ZThn148_N8S20620C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20620C1D0Ev,_ZTv0_n20_N8S20620C1D0Ev)();
extern void ABISELECT(_ZThn192_N8S20620C1D0Ev,_ZThn148_N8S20620C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20620C1D1Ev,_ZTv0_n28_N8S20620C1D1Ev)();
extern void ABISELECT(_ZThn256_N8S20620C1D1Ev,_ZThn184_N8S20620C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20620C1D0Ev,_ZTv0_n28_N8S20620C1D0Ev)();
extern void ABISELECT(_ZThn256_N8S20620C1D0Ev,_ZThn184_N8S20620C1D0Ev)() __attribute__((weak));
extern void _ZN8S20620C82v4Ev();
extern void _ZN8S20620C82v5Ev();
extern void _ZN8S20620C72v6Ev();
extern void _ZN8S20620C72v7Ev();
extern void _ZN8S20620C62v8Ev();
extern void _ZN8S20620C62v9Ev();
extern void _ZN8S20620C63v10Ev();
extern void ABISELECT(_ZTvn384_n56_N8S20620C1D1Ev,_ZTvn248_n28_N8S20620C1D1Ev)();
extern void ABISELECT(_ZTvn384_n56_N8S20620C1D0Ev,_ZTvn248_n28_N8S20620C1D0Ev)();
extern void _ZN9S20620C102v3Ev();
extern void ABISELECT(_ZTvn448_n56_N8S20620C1D1Ev,_ZTvn296_n28_N8S20620C1D1Ev)();
extern void ABISELECT(_ZTvn448_n56_N8S20620C1D0Ev,_ZTvn296_n28_N8S20620C1D0Ev)();
extern void ABISELECT(_ZTvn576_n56_N8S20620C1D1Ev,_ZTvn384_n28_N8S20620C1D1Ev)();
extern void ABISELECT(_ZTvn576_n56_N8S20620C1D0Ev,_ZTvn384_n28_N8S20620C1D0Ev)();
extern void _ZN9S20620C102v3Ev();
extern void ABISELECT(_ZTvn640_n56_N8S20620C1D1Ev,_ZTvn432_n28_N8S20620C1D1Ev)();
extern void ABISELECT(_ZTvn640_n56_N8S20620C1D0Ev,_ZTvn432_n28_N8S20620C1D0Ev)();
static  VTBL_ENTRY vtc_S20620C1[] = {
  ABISELECT(256,184),
  ABISELECT(192,148),
  ABISELECT(128,100),
  ABISELECT(112,88),
  ABISELECT(48,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C1[0]),
  (VTBL_ENTRY)&_ZN8S20620C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20620C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20620C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C1D0Ev,
  ABISELECT(64,48),
  ABISELECT(-48,-40),
  (VTBL_ENTRY)&(_ZTI8S20620C1[0]),
  ABISELECT(-128,-100),
  ABISELECT(-80,-60),
  ABISELECT(64,48),
  ABISELECT(-16,-12),
  ABISELECT(-128,-100),
  (VTBL_ENTRY)&(_ZTI8S20620C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C1D1Ev,_ZTv0_n24_N8S20620C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C1D0Ev,_ZTv0_n24_N8S20620C1D0Ev),
  ABISELECT(-192,-148),
  ABISELECT(-144,-108),
  ABISELECT(-80,-60),
  ABISELECT(-192,-148),
  (VTBL_ENTRY)&(_ZTI8S20620C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C1D1Ev,_ZTv0_n20_N8S20620C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C1D0Ev,_ZTv0_n20_N8S20620C1D0Ev),
  0,
  0,
  0,
  0,
  0,
  ABISELECT(384,248),
  0,
  0,
  ABISELECT(-256,-184),
  ABISELECT(-208,-144),
  ABISELECT(-64,-36),
  ABISELECT(-128,-84),
  ABISELECT(-144,-96),
  ABISELECT(-256,-184),
  (VTBL_ENTRY)&(_ZTI8S20620C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20620C1D1Ev,_ZTv0_n28_N8S20620C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20620C1D0Ev,_ZTv0_n28_N8S20620C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20620C82v4Ev,
  (VTBL_ENTRY)&_ZN8S20620C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20620C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20620C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20620C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20620C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20620C63v10Ev,
  ABISELECT(-592,-392),
  ABISELECT(-528,-344),
  ABISELECT(-640,-432),
  (VTBL_ENTRY)&(_ZTI8S20620C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn384_n56_N8S20620C1D1Ev,_ZTvn248_n28_N8S20620C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn384_n56_N8S20620C1D0Ev,_ZTvn248_n28_N8S20620C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20620C102v3Ev,
  ABISELECT(-656,-440),
  ABISELECT(-592,-392),
  ABISELECT(-704,-480),
  (VTBL_ENTRY)&(_ZTI8S20620C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn448_n56_N8S20620C1D1Ev,_ZTvn296_n28_N8S20620C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn448_n56_N8S20620C1D0Ev,_ZTvn296_n28_N8S20620C1D0Ev),
  ABISELECT(-784,-528),
  ABISELECT(-720,-480),
  ABISELECT(-832,-568),
  (VTBL_ENTRY)&(_ZTI8S20620C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn576_n56_N8S20620C1D1Ev,_ZTvn384_n28_N8S20620C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn576_n56_N8S20620C1D0Ev,_ZTvn384_n28_N8S20620C1D0Ev),
  (VTBL_ENTRY)&_ZN9S20620C102v3Ev,
  ABISELECT(-848,-576),
  ABISELECT(-784,-528),
  ABISELECT(-896,-616),
  (VTBL_ENTRY)&(_ZTI8S20620C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn640_n56_N8S20620C1D1Ev,_ZTvn432_n28_N8S20620C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn640_n56_N8S20620C1D0Ev,_ZTvn432_n28_N8S20620C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20620C1[];
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C1[] = {
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C2[0]),
};
extern void _ZN8S20620C4D1Ev();
extern void _ZN8S20620C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C4__8S20620C1[] = {
  ABISELECT(-80,-60),
  ABISELECT(64,48),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C4[0]),
  (VTBL_ENTRY)&_ZN8S20620C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20620C28S20620C4__A1__8S20620C1[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C2[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S20620C4D1Ev,_ZTv0_n20_N8S20620C4D1Ev)();
extern void ABISELECT(_ZThn64_N8S20620C4D1Ev,_ZThn48_N8S20620C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N8S20620C4D0Ev,_ZTv0_n20_N8S20620C4D0Ev)();
extern void ABISELECT(_ZThn64_N8S20620C4D0Ev,_ZThn48_N8S20620C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20620C5__8S20620C4__8S20620C1[] = {
  ABISELECT(-64,-48),
  ABISELECT(-144,-108),
  ABISELECT(-80,-60),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI8S20620C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C4D1Ev,_ZTv0_n20_N8S20620C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C4D0Ev,_ZTv0_n20_N8S20620C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C4__8S20620C1[] = {
  ABISELECT(64,48),
  ABISELECT(80,60),
  (VTBL_ENTRY)&(_ZTI8S20620C4[0]),
};
extern void _ZN8S20620C5D1Ev();
extern void _ZN8S20620C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C5__8S20620C1[] = {
  ABISELECT(-144,-108),
  ABISELECT(-80,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
  (VTBL_ENTRY)&_ZN8S20620C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C5__8S20620C1[] = {
  ABISELECT(64,48),
  ABISELECT(144,108),
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
};
extern void _ZN8S20620C6D1Ev();
extern void _ZN8S20620C6D0Ev();
extern void _ZN8S20620C82v4Ev();
extern void _ZN8S20620C82v5Ev();
extern void _ZN8S20620C72v6Ev();
extern void _ZN8S20620C72v7Ev();
extern void _ZN8S20620C62v8Ev();
extern void _ZN8S20620C62v9Ev();
extern void _ZN8S20620C63v10Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C6__8S20620C1[] = {
  ABISELECT(-208,-144),
  ABISELECT(-64,-36),
  ABISELECT(-128,-84),
  ABISELECT(-144,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C6[0]),
  (VTBL_ENTRY)&_ZN8S20620C6D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C6D0Ev,
  (VTBL_ENTRY)&_ZN8S20620C82v4Ev,
  (VTBL_ENTRY)&_ZN8S20620C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20620C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20620C72v7Ev,
  (VTBL_ENTRY)&_ZN8S20620C62v8Ev,
  (VTBL_ENTRY)&_ZN8S20620C62v9Ev,
  (VTBL_ENTRY)&_ZN8S20620C63v10Ev,
};
extern void _ZN8S20620C7D1Ev();
extern void _ZN8S20620C7D0Ev();
extern void _ZN8S20620C82v4Ev();
extern void _ZN8S20620C82v5Ev();
extern void _ZN8S20620C72v6Ev();
extern void _ZN8S20620C72v7Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C78S20620C6__8S20620C1[] = {
  ABISELECT(-208,-144),
  ABISELECT(-64,-36),
  ABISELECT(-128,-84),
  ABISELECT(-144,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C7[0]),
  (VTBL_ENTRY)&_ZN8S20620C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C7D0Ev,
  (VTBL_ENTRY)&_ZN8S20620C82v4Ev,
  (VTBL_ENTRY)&_ZN8S20620C82v5Ev,
  (VTBL_ENTRY)&_ZN8S20620C72v6Ev,
  (VTBL_ENTRY)&_ZN8S20620C72v7Ev,
};
extern void _ZN8S20620C8D1Ev();
extern void _ZN8S20620C8D0Ev();
extern void _ZN8S20620C82v4Ev();
extern void _ZN8S20620C82v5Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C88S20620C78S20620C6__8S20620C1[] = {
  ABISELECT(-208,-144),
  ABISELECT(-64,-36),
  ABISELECT(-128,-84),
  ABISELECT(-144,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C8[0]),
  (VTBL_ENTRY)&_ZN8S20620C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C8D0Ev,
  (VTBL_ENTRY)&_ZN8S20620C82v4Ev,
  (VTBL_ENTRY)&_ZN8S20620C82v5Ev,
};
extern void _ZN8S20620C9D1Ev();
extern void _ZN8S20620C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C98S20620C88S20620C78S20620C6__8S20620C1[] = {
  ABISELECT(-208,-144),
  ABISELECT(-64,-36),
  ABISELECT(-128,-84),
  ABISELECT(-144,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C9[0]),
  (VTBL_ENTRY)&_ZN8S20620C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C9D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N8S20620C9D1Ev,_ZTv0_n24_N8S20620C9D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S20620C9D0Ev,_ZTv0_n24_N8S20620C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20620C4__8S20620C98S20620C88S20620C78S20620C6__8S20620C1[] = {
  ABISELECT(128,84),
  ABISELECT(-80,-60),
  ABISELECT(64,48),
  ABISELECT(-16,-12),
  ABISELECT(128,84),
  (VTBL_ENTRY)&(_ZTI8S20620C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C9D1Ev,_ZTv0_n24_N8S20620C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C9D0Ev,_ZTv0_n24_N8S20620C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20620C9D1Ev,_ZTv0_n20_N8S20620C9D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20620C9D0Ev,_ZTv0_n20_N8S20620C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20620C5__8S20620C98S20620C88S20620C78S20620C6__8S20620C1[] = {
  ABISELECT(64,36),
  ABISELECT(-144,-108),
  ABISELECT(-80,-60),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S20620C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C9D1Ev,_ZTv0_n20_N8S20620C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C9D0Ev,_ZTv0_n20_N8S20620C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C98S20620C88S20620C78S20620C6__8S20620C1[] = {
  ABISELECT(64,48),
  ABISELECT(208,144),
  (VTBL_ENTRY)&(_ZTI8S20620C9[0]),
};
extern void _ZN9S20620C10D1Ev();
extern void _ZN9S20620C10D0Ev();
extern void _ZN9S20620C102v3Ev();
static  VTBL_ENTRY _tg__ZTV9S20620C108S20620C88S20620C78S20620C6__8S20620C1[] = {
  ABISELECT(-592,-392),
  ABISELECT(-528,-344),
  0,
  (VTBL_ENTRY)&(_ZTI9S20620C10[0]),
  (VTBL_ENTRY)&_ZN9S20620C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20620C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20620C102v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20620C29S20620C108S20620C88S20620C78S20620C6__A2__8S20620C1[] = {
  ABISELECT(-528,-344),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C2[0]),
};
extern void _ZN8S20620C5D1Ev();
extern void _ZN8S20620C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C59S20620C108S20620C88S20620C78S20620C6__A1__8S20620C1[] = {
  ABISELECT(-656,-440),
  ABISELECT(-592,-392),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
  (VTBL_ENTRY)&_ZN8S20620C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C59S20620C108S20620C88S20620C78S20620C6__A1__8S20620C1[] = {
  ABISELECT(64,48),
  ABISELECT(656,440),
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
};
extern void ABISELECT(_ZThn64_N9S20620C10D1Ev,_ZThn48_N9S20620C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S20620C10D0Ev,_ZThn48_N9S20620C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20620C5__9S20620C108S20620C88S20620C78S20620C6__8S20620C1[] = {
  ABISELECT(-656,-440),
  ABISELECT(-592,-392),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI9S20620C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S20620C10D1Ev,_ZThn48_N9S20620C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S20620C10D0Ev,_ZThn48_N9S20620C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__A1__9S20620C108S20620C88S20620C78S20620C6__8S20620C1[] = {
  ABISELECT(64,48),
  ABISELECT(592,392),
  (VTBL_ENTRY)&(_ZTI9S20620C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C88S20620C78S20620C6__8S20620C1[] = {
  ABISELECT(64,48),
  ABISELECT(208,144),
  (VTBL_ENTRY)&(_ZTI8S20620C8[0]),
};
extern void ABISELECT(_ZTv0_n40_N8S20620C8D1Ev,_ZTv0_n20_N8S20620C8D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20620C8D0Ev,_ZTv0_n20_N8S20620C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20620C5__8S20620C88S20620C78S20620C6__8S20620C1[] = {
  ABISELECT(64,36),
  ABISELECT(-144,-108),
  ABISELECT(-80,-60),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S20620C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C8D1Ev,_ZTv0_n20_N8S20620C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C8D0Ev,_ZTv0_n20_N8S20620C8D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20620C8D1Ev,_ZTv0_n24_N8S20620C8D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S20620C8D0Ev,_ZTv0_n24_N8S20620C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20620C4__8S20620C88S20620C78S20620C6__8S20620C1[] = {
  ABISELECT(128,84),
  ABISELECT(-80,-60),
  ABISELECT(64,48),
  ABISELECT(-16,-12),
  ABISELECT(128,84),
  (VTBL_ENTRY)&(_ZTI8S20620C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C8D1Ev,_ZTv0_n24_N8S20620C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C8D0Ev,_ZTv0_n24_N8S20620C8D0Ev),
};
extern void ABISELECT(_ZThn384_N8S20620C8D1Ev,_ZThn248_N8S20620C8D1Ev)();
extern void ABISELECT(_ZThn384_N8S20620C8D0Ev,_ZThn248_N8S20620C8D0Ev)();
extern void _ZN9S20620C102v3Ev();
static  VTBL_ENTRY _tg__ZTV9S20620C10__8S20620C88S20620C78S20620C6__8S20620C1[] = {
  ABISELECT(-592,-392),
  ABISELECT(-528,-344),
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI8S20620C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N8S20620C8D1Ev,_ZThn248_N8S20620C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N8S20620C8D0Ev,_ZThn248_N8S20620C8D0Ev),
  (VTBL_ENTRY)&_ZN9S20620C102v3Ev,
};
extern void ABISELECT(_ZThn448_N8S20620C8D1Ev,_ZThn296_N8S20620C8D1Ev)();
extern void ABISELECT(_ZThn448_N8S20620C8D0Ev,_ZThn296_N8S20620C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20620C59S20620C10__A1__8S20620C88S20620C78S20620C6__8S20620C1[] = {
  ABISELECT(-656,-440),
  ABISELECT(-592,-392),
  ABISELECT(-448,-296),
  (VTBL_ENTRY)&(_ZTI8S20620C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N8S20620C8D1Ev,_ZThn296_N8S20620C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N8S20620C8D0Ev,_ZThn296_N8S20620C8D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20620C7D1Ev,_ZTv0_n24_N8S20620C7D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S20620C7D0Ev,_ZTv0_n24_N8S20620C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20620C4__8S20620C78S20620C6__8S20620C1[] = {
  ABISELECT(128,84),
  ABISELECT(-80,-60),
  ABISELECT(64,48),
  ABISELECT(-16,-12),
  ABISELECT(128,84),
  (VTBL_ENTRY)&(_ZTI8S20620C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C7D1Ev,_ZTv0_n24_N8S20620C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C7D0Ev,_ZTv0_n24_N8S20620C7D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20620C7D1Ev,_ZTv0_n20_N8S20620C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20620C7D0Ev,_ZTv0_n20_N8S20620C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20620C5__8S20620C78S20620C6__8S20620C1[] = {
  ABISELECT(64,36),
  ABISELECT(-144,-108),
  ABISELECT(-80,-60),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S20620C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C7D1Ev,_ZTv0_n20_N8S20620C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C7D0Ev,_ZTv0_n20_N8S20620C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C78S20620C6__8S20620C1[] = {
  ABISELECT(64,48),
  ABISELECT(208,144),
  (VTBL_ENTRY)&(_ZTI8S20620C7[0]),
};
extern void ABISELECT(_ZThn384_N8S20620C7D1Ev,_ZThn248_N8S20620C7D1Ev)();
extern void ABISELECT(_ZThn384_N8S20620C7D0Ev,_ZThn248_N8S20620C7D0Ev)();
extern void _ZN9S20620C102v3Ev();
static  VTBL_ENTRY _tg__ZTV9S20620C108S20620C8__8S20620C78S20620C6__8S20620C1[] = {
  ABISELECT(-592,-392),
  ABISELECT(-528,-344),
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI8S20620C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N8S20620C7D1Ev,_ZThn248_N8S20620C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N8S20620C7D0Ev,_ZThn248_N8S20620C7D0Ev),
  (VTBL_ENTRY)&_ZN9S20620C102v3Ev,
};
extern void ABISELECT(_ZThn448_N8S20620C7D1Ev,_ZThn296_N8S20620C7D1Ev)();
extern void ABISELECT(_ZThn448_N8S20620C7D0Ev,_ZThn296_N8S20620C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20620C59S20620C108S20620C8__A1__8S20620C78S20620C6__8S20620C1[] = {
  ABISELECT(-656,-440),
  ABISELECT(-592,-392),
  ABISELECT(-448,-296),
  (VTBL_ENTRY)&(_ZTI8S20620C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N8S20620C7D1Ev,_ZThn296_N8S20620C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N8S20620C7D0Ev,_ZThn296_N8S20620C7D0Ev),
};
extern void _ZN9S20620C10D1Ev();
extern void _ZN9S20620C10D0Ev();
extern void _ZN9S20620C102v3Ev();
static  VTBL_ENTRY _tg__ZTV9S20620C108S20620C6__A1__8S20620C1[] = {
  ABISELECT(-784,-528),
  ABISELECT(-720,-480),
  0,
  (VTBL_ENTRY)&(_ZTI9S20620C10[0]),
  (VTBL_ENTRY)&_ZN9S20620C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20620C10D0Ev,
  (VTBL_ENTRY)&_ZN9S20620C102v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20620C29S20620C108S20620C6__A3__8S20620C1[] = {
  ABISELECT(-720,-480),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C2[0]),
};
extern void _ZN8S20620C5D1Ev();
extern void _ZN8S20620C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20620C59S20620C108S20620C6__A2__8S20620C1[] = {
  ABISELECT(-848,-576),
  ABISELECT(-784,-528),
  0,
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
  (VTBL_ENTRY)&_ZN8S20620C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20620C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C59S20620C108S20620C6__A2__8S20620C1[] = {
  ABISELECT(64,48),
  ABISELECT(848,576),
  (VTBL_ENTRY)&(_ZTI8S20620C5[0]),
};
extern void ABISELECT(_ZThn64_N9S20620C10D1Ev,_ZThn48_N9S20620C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S20620C10D0Ev,_ZThn48_N9S20620C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20620C5__9S20620C108S20620C6__A1__8S20620C1[] = {
  ABISELECT(-848,-576),
  ABISELECT(-784,-528),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI9S20620C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S20620C10D1Ev,_ZThn48_N9S20620C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N9S20620C10D0Ev,_ZThn48_N9S20620C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__A1__9S20620C108S20620C6__A1__8S20620C1[] = {
  ABISELECT(64,48),
  ABISELECT(784,528),
  (VTBL_ENTRY)&(_ZTI9S20620C10[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S20620C6D1Ev,_ZTv0_n24_N8S20620C6D1Ev)();
extern void ABISELECT(_ZTv0_n48_N8S20620C6D0Ev,_ZTv0_n24_N8S20620C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20620C4__8S20620C6__8S20620C1[] = {
  ABISELECT(128,84),
  ABISELECT(-80,-60),
  ABISELECT(64,48),
  ABISELECT(-16,-12),
  ABISELECT(128,84),
  (VTBL_ENTRY)&(_ZTI8S20620C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C6D1Ev,_ZTv0_n24_N8S20620C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20620C6D0Ev,_ZTv0_n24_N8S20620C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N8S20620C6D1Ev,_ZTv0_n20_N8S20620C6D1Ev)();
extern void ABISELECT(_ZTv0_n40_N8S20620C6D0Ev,_ZTv0_n20_N8S20620C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20620C5__8S20620C6__8S20620C1[] = {
  ABISELECT(64,36),
  ABISELECT(-144,-108),
  ABISELECT(-80,-60),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S20620C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C6D1Ev,_ZTv0_n20_N8S20620C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N8S20620C6D0Ev,_ZTv0_n20_N8S20620C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20620C2__8S20620C6__8S20620C1[] = {
  ABISELECT(64,48),
  ABISELECT(208,144),
  (VTBL_ENTRY)&(_ZTI8S20620C6[0]),
};
extern void ABISELECT(_ZThn384_N8S20620C6D1Ev,_ZThn248_N8S20620C6D1Ev)();
extern void ABISELECT(_ZThn384_N8S20620C6D0Ev,_ZThn248_N8S20620C6D0Ev)();
extern void _ZN9S20620C102v3Ev();
static  VTBL_ENTRY _tg__ZTV9S20620C108S20620C88S20620C7__8S20620C6__8S20620C1[] = {
  ABISELECT(-592,-392),
  ABISELECT(-528,-344),
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI8S20620C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N8S20620C6D1Ev,_ZThn248_N8S20620C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N8S20620C6D0Ev,_ZThn248_N8S20620C6D0Ev),
  (VTBL_ENTRY)&_ZN9S20620C102v3Ev,
};
extern void ABISELECT(_ZThn448_N8S20620C6D1Ev,_ZThn296_N8S20620C6D1Ev)();
extern void ABISELECT(_ZThn448_N8S20620C6D0Ev,_ZThn296_N8S20620C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20620C59S20620C108S20620C88S20620C7__A1__8S20620C6__8S20620C1[] = {
  ABISELECT(-656,-440),
  ABISELECT(-592,-392),
  ABISELECT(-448,-296),
  (VTBL_ENTRY)&(_ZTI8S20620C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N8S20620C6D1Ev,_ZThn296_N8S20620C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N8S20620C6D0Ev,_ZThn296_N8S20620C6D0Ev),
};
extern void ABISELECT(_ZThn576_N8S20620C6D1Ev,_ZThn384_N8S20620C6D1Ev)();
extern void ABISELECT(_ZThn576_N8S20620C6D0Ev,_ZThn384_N8S20620C6D0Ev)();
extern void _ZN9S20620C102v3Ev();
static  VTBL_ENTRY _tg__ZTV9S20620C10__A1__8S20620C6__8S20620C1[] = {
  ABISELECT(-784,-528),
  ABISELECT(-720,-480),
  ABISELECT(-576,-384),
  (VTBL_ENTRY)&(_ZTI8S20620C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N8S20620C6D1Ev,_ZThn384_N8S20620C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N8S20620C6D0Ev,_ZThn384_N8S20620C6D0Ev),
  (VTBL_ENTRY)&_ZN9S20620C102v3Ev,
};
extern void ABISELECT(_ZThn640_N8S20620C6D1Ev,_ZThn432_N8S20620C6D1Ev)();
extern void ABISELECT(_ZThn640_N8S20620C6D0Ev,_ZThn432_N8S20620C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20620C59S20620C10__A2__8S20620C6__8S20620C1[] = {
  ABISELECT(-848,-576),
  ABISELECT(-784,-528),
  ABISELECT(-640,-432),
  (VTBL_ENTRY)&(_ZTI8S20620C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn640_N8S20620C6D1Ev,_ZThn432_N8S20620C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn640_N8S20620C6D0Ev,_ZThn432_N8S20620C6D0Ev),
};
static  VTT_ENTRY vtt_S20620C1[] = {
  {&(_ZTV8S20620C1[7]),  7,79},
  {&(_ZTV8S20620C1[14]),  14,79},
  {&(_ZTV8S20620C1[20]),  20,79},
  {&(_ZTV8S20620C1[27]),  27,79},
  {&(_ZTV8S20620C1[44]),  44,79},
  {&(_ZTV8S20620C1[57]),  57,79},
  {&(_ZTV8S20620C1[64]),  64,79},
  {&(_ZTV8S20620C1[70]),  70,79},
  {&(_ZTV8S20620C1[77]),  77,79},
  {&(_tg__ZTV8S20620C2__8S20620C1[3]),  3,3},
  {&(_tg__ZTV8S20620C4__8S20620C1[5]),  5,7},
  {&(_tg__ZTV8S20620C28S20620C4__A1__8S20620C1[3]),  3,3},
  {&(_tg__ZTV8S20620C5__8S20620C4__8S20620C1[5]),  5,7},
  {&(_tg__ZTV8S20620C2__8S20620C4__8S20620C1[3]),  3,3},
  {&(_tg__ZTV8S20620C5__8S20620C1[4]),  4,6},
  {&(_tg__ZTV8S20620C2__8S20620C5__8S20620C1[3]),  3,3},
  {&(_tg__ZTV8S20620C6__8S20620C1[6]),  6,15},
  {&(_tg__ZTV8S20620C78S20620C6__8S20620C1[6]),  6,12},
  {&(_tg__ZTV8S20620C88S20620C78S20620C6__8S20620C1[6]),  6,10},
  {&(_tg__ZTV8S20620C98S20620C88S20620C78S20620C6__8S20620C1[6]),  6,8},
  {&(_tg__ZTV8S20620C4__8S20620C98S20620C88S20620C78S20620C6__8S20620C1[6]),  6,8},
  {&(_tg__ZTV8S20620C5__8S20620C98S20620C88S20620C78S20620C6__8S20620C1[5]),  5,7},
  {&(_tg__ZTV8S20620C2__8S20620C98S20620C88S20620C78S20620C6__8S20620C1[3]),  3,3},
  {&(_tg__ZTV9S20620C108S20620C88S20620C78S20620C6__8S20620C1[4]),  4,7},
  {&(_tg__ZTV8S20620C29S20620C108S20620C88S20620C78S20620C6__A2__8S20620C1[3]),  3,3},
  {&(_tg__ZTV8S20620C59S20620C108S20620C88S20620C78S20620C6__A1__8S20620C1[4]),  4,6},
  {&(_tg__ZTV8S20620C2__8S20620C59S20620C108S20620C88S20620C78S20620C6__A1__8S20620C1[3]),  3,3},
  {&(_tg__ZTV8S20620C5__9S20620C108S20620C88S20620C78S20620C6__8S20620C1[4]),  4,6},
  {&(_tg__ZTV8S20620C2__A1__9S20620C108S20620C88S20620C78S20620C6__8S20620C1[3]),  3,3},
  {&(_tg__ZTV8S20620C2__8S20620C88S20620C78S20620C6__8S20620C1[3]),  3,3},
  {&(_tg__ZTV8S20620C5__8S20620C88S20620C78S20620C6__8S20620C1[5]),  5,7},
  {&(_tg__ZTV8S20620C4__8S20620C88S20620C78S20620C6__8S20620C1[6]),  6,8},
  {&(_tg__ZTV9S20620C10__8S20620C88S20620C78S20620C6__8S20620C1[4]),  4,7},
  {&(_tg__ZTV8S20620C59S20620C10__A1__8S20620C88S20620C78S20620C6__8S20620C1[4]),  4,6},
  {&(_tg__ZTV8S20620C4__8S20620C78S20620C6__8S20620C1[6]),  6,8},
  {&(_tg__ZTV8S20620C5__8S20620C78S20620C6__8S20620C1[5]),  5,7},
  {&(_tg__ZTV8S20620C2__8S20620C78S20620C6__8S20620C1[3]),  3,3},
  {&(_tg__ZTV9S20620C108S20620C8__8S20620C78S20620C6__8S20620C1[4]),  4,7},
  {&(_tg__ZTV8S20620C59S20620C108S20620C8__A1__8S20620C78S20620C6__8S20620C1[4]),  4,6},
  {&(_tg__ZTV9S20620C108S20620C6__A1__8S20620C1[4]),  4,7},
  {&(_tg__ZTV8S20620C29S20620C108S20620C6__A3__8S20620C1[3]),  3,3},
  {&(_tg__ZTV8S20620C59S20620C108S20620C6__A2__8S20620C1[4]),  4,6},
  {&(_tg__ZTV8S20620C2__8S20620C59S20620C108S20620C6__A2__8S20620C1[3]),  3,3},
  {&(_tg__ZTV8S20620C5__9S20620C108S20620C6__A1__8S20620C1[4]),  4,6},
  {&(_tg__ZTV8S20620C2__A1__9S20620C108S20620C6__A1__8S20620C1[3]),  3,3},
  {&(_tg__ZTV8S20620C4__8S20620C6__8S20620C1[6]),  6,8},
  {&(_tg__ZTV8S20620C5__8S20620C6__8S20620C1[5]),  5,7},
  {&(_tg__ZTV8S20620C2__8S20620C6__8S20620C1[3]),  3,3},
  {&(_tg__ZTV9S20620C108S20620C88S20620C7__8S20620C6__8S20620C1[4]),  4,7},
  {&(_tg__ZTV8S20620C59S20620C108S20620C88S20620C7__A1__8S20620C6__8S20620C1[4]),  4,6},
  {&(_tg__ZTV9S20620C10__A1__8S20620C6__8S20620C1[4]),  4,7},
  {&(_tg__ZTV8S20620C59S20620C10__A2__8S20620C6__8S20620C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20620C1[];
extern  VTBL_ENTRY _ZTV8S20620C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20620C1[];
static VTBL_ENTRY alt_thunk_names169[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C4D0Ev,_ZTv0_n20_N8S20620C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20620C4D0Ev,_ZThn48_N8S20620C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C4D1Ev,_ZTv0_n20_N8S20620C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20620C4D1Ev,_ZThn48_N8S20620C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20620C1D0Ev,_ZTv0_n28_N8S20620C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S20620C1D0Ev,_ZThn184_N8S20620C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20620C1D1Ev,_ZTv0_n28_N8S20620C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn256_N8S20620C1D1Ev,_ZThn184_N8S20620C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C1D0Ev,_ZTv0_n20_N8S20620C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20620C1D0Ev,_ZThn148_N8S20620C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N8S20620C1D1Ev,_ZTv0_n20_N8S20620C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn192_N8S20620C1D1Ev,_ZThn148_N8S20620C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20620C1D0Ev,_ZTv0_n24_N8S20620C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20620C1D0Ev,_ZThn100_N8S20620C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20620C1D1Ev,_ZTv0_n24_N8S20620C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S20620C1D1Ev,_ZThn100_N8S20620C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20620C1 = {  "S20620C1", // class name
  bases_S20620C1, 15,
  &(vtc_S20620C1[0]), // expected_vtbl_contents
  &(vtt_S20620C1[0]), // expected_vtt_contents
  ABISELECT(1568,1056), // object size
  NSPAIRA(_ZTI8S20620C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20620C1),79, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20620C1),52, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names169,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20750C6  : S2264C28 , virtual S2264C38 {
  ~S20750C6(); // tgen
  S20750C6(); // tgen
};
//SIG(-1 S20750C6) C1{ BC2{ m} VBC3{ m}}


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

static void Test_S20750C6()
{
  extern Class_Descriptor cd_S20750C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20750C6, buf);
    S20750C6 *dp, &lv = *(dp=new (buf) S20750C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20750C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20750C6)");
    check_base_class_offset(lv, (S2264C28*), 0, "S20750C6");
    check_base_class_offset(lv, (S2264C38*), 0, "S20750C6");
    test_class_info(&lv, &cd_S20750C6);
    dp->~S20750C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20750C6(Test_S20750C6, "S20750C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20750C6C1Ev();
extern void _ZN8S20750C6D1Ev();
Name_Map name_map_S20750C6[] = {
  NSPAIR(_ZN8S20750C6C1Ev),
  NSPAIR(_ZN8S20750C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
static Base_Class bases_S20750C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20750C6[];
static  VTBL_ENTRY vtc_S20750C6[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C6[0]),
};
extern VTBL_ENTRY _ZTV8S20750C6[];
static  VTT_ENTRY vtt_S20750C6[] = {
  {&(_ZTV8S20750C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20750C6[];
extern  VTBL_ENTRY _ZTV8S20750C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20750C6[];
Class_Descriptor cd_S20750C6 = {  "S20750C6", // class name
  bases_S20750C6, 2,
  &(vtc_S20750C6[0]), // expected_vtbl_contents
  &(vtt_S20750C6[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20750C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20750C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20750C6),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  S20750C7  : S2264C28 {
  virtual  ~S20750C7(); // _ZN8S20750C7D1Ev
  S20750C7(); // tgen
};
//SIG(-1 S20750C7) C1{ BC2{ m} vd}


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

static void Test_S20750C7()
{
  extern Class_Descriptor cd_S20750C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20750C7, buf);
    S20750C7 *dp, &lv = *(dp=new (buf) S20750C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20750C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20750C7)");
    check_base_class_offset(lv, (S2264C28*), 0, "S20750C7");
    test_class_info(&lv, &cd_S20750C7);
    dp->~S20750C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20750C7(Test_S20750C7, "S20750C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20750C7C1Ev();
extern void _ZN8S20750C7D1Ev();
Name_Map name_map_S20750C7[] = {
  NSPAIR(_ZN8S20750C7C1Ev),
  NSPAIR(_ZN8S20750C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S20750C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S20750C7[];
extern void _ZN8S20750C7D1Ev();
extern void _ZN8S20750C7D0Ev();
static  VTBL_ENTRY vtc_S20750C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C7[0]),
  (VTBL_ENTRY)&_ZN8S20750C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20750C7D0Ev,
};
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
Class_Descriptor cd_S20750C7 = {  "S20750C7", // class name
  bases_S20750C7, 1,
  &(vtc_S20750C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20750C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20750C7),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  S20750C4  : virtual S2264C28 , virtual S2264C38 , virtual S20750C6 , S20750C7 {
  virtual  ~S20750C4(); // _ZN8S20750C4D2Ev
  S20750C4(); // tgen
};
//SIG(-1 S20750C4) C1{ VBC2{ m} VBC3{ m} VBC4{ BC2 VBC3} BC5{ BC2 vd} vd}


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

static void Test_S20750C4()
{
  extern Class_Descriptor cd_S20750C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20750C4, buf);
    S20750C4 *dp, &lv = *(dp=new (buf) S20750C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20750C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20750C4)");
    /*is_ambiguous_... S20750C4::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), ABISELECT(8,4), "S20750C4");
    check_base_class_offset(lv, (S2264C38*), 0, "S20750C4");
    check_base_class_offset(lv, (S2264C38*)(S20750C6*), 0, "S20750C4");
    check_base_class_offset(lv, (S2264C28*)(S20750C6*), ABISELECT(16,8), "S20750C4");
    check_base_class_offset(lv, (S20750C6*), ABISELECT(16,8), "S20750C4");
    check_base_class_offset(lv, (S2264C28*)(S20750C7*), 0, "S20750C4");
    check_base_class_offset(lv, (S20750C7*), 0, "S20750C4");
    test_class_info(&lv, &cd_S20750C4);
    dp->~S20750C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20750C4(Test_S20750C4, "S20750C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20750C4C1Ev();
extern void _ZN8S20750C4D2Ev();
Name_Map name_map_S20750C4[] = {
  NSPAIR(_ZN8S20750C4C1Ev),
  NSPAIR(_ZN8S20750C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C6;
extern VTBL_ENTRY _ZTI8S20750C6[];
extern  VTBL_ENTRY _ZTV8S20750C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20750C6[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
static Base_Class bases_S20750C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C28,    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_S20750C6,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20750C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S20750C4[];
extern void _ZN8S20750C4D1Ev();
extern void _ZN8S20750C4D0Ev();
static  VTBL_ENTRY vtc_S20750C4[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C4[0]),
  (VTBL_ENTRY)&_ZN8S20750C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20750C4D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20750C4[0]),
};
extern VTBL_ENTRY _ZTV8S20750C4[];
static  VTBL_ENTRY _tg__ZTV8S20750C6__8S20750C4[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C6[0]),
};
static  VTT_ENTRY vtt_S20750C4[] = {
  {&(_ZTV8S20750C4[5]),  5,10},
  {&(_ZTV8S20750C4[10]),  10,10},
  {&(_tg__ZTV8S20750C6__8S20750C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20750C4[];
extern  VTBL_ENTRY _ZTV8S20750C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20750C4[];
Class_Descriptor cd_S20750C4 = {  "S20750C4", // class name
  bases_S20750C4, 6,
  &(vtc_S20750C4[0]), // expected_vtbl_contents
  &(vtt_S20750C4[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20750C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20750C4),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20750C4),3, //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  S20750C2  : virtual S2264C38 , virtual S20750C4 , virtual S20750C7 {
  virtual  ~S20750C2(); // _ZN8S20750C2D2Ev
  S20750C2(); // tgen
};
//SIG(-1 S20750C2) C1{ VBC2{ m} VBC3{ VBC4{ m} VBC2 VBC5{ BC4 VBC2} BC6{ BC4 vd} vd} VBC6 vd}


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

static void Test_S20750C2()
{
  extern Class_Descriptor cd_S20750C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20750C2, buf);
    S20750C2 *dp, &lv = *(dp=new (buf) S20750C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20750C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20750C2)");
    check_base_class_offset(lv, (S2264C38*), 0, "S20750C2");
    check_base_class_offset(lv, (S2264C38*)(S20750C4*), 0, "S20750C2");
    check_base_class_offset(lv, (S2264C38*)(S20750C6*), 0, "S20750C2");
    /*is_ambiguous_... S20750C4::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C4*), ABISELECT(8,4), "S20750C2");
    check_base_class_offset(lv, (S2264C28*)(S20750C6*), ABISELECT(16,8), "S20750C2");
    check_base_class_offset(lv, (S20750C6*)(S20750C4*), ABISELECT(16,8), "S20750C2");
    check_base_class_offset(lv, (S2264C28*)(S20750C7*)(S20750C4*), 0, "S20750C2");
    check_base_class_offset(lv, (S20750C7*)(S20750C4*), 0, "S20750C2");
    check_base_class_offset(lv, (S20750C4*), 0, "S20750C2");
    /*is_ambiguous_... S20750C2::S20750C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C7*), ABISELECT(24,12), "S20750C2");
    /*is_ambiguous_... S20750C2::S20750C7 */ AMB_check_base_class_offset(lv, (S20750C7*), ABISELECT(24,12), "S20750C2");
    test_class_info(&lv, &cd_S20750C2);
    dp->~S20750C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20750C2(Test_S20750C2, "S20750C2", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S20750C2C1Ev();
extern void _ZN8S20750C2D2Ev();
Name_Map name_map_S20750C2[] = {
  NSPAIR(_ZN8S20750C2C1Ev),
  NSPAIR(_ZN8S20750C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C6;
extern VTBL_ENTRY _ZTI8S20750C6[];
extern  VTBL_ENTRY _ZTV8S20750C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20750C6[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
extern Class_Descriptor cd_S20750C4;
extern VTBL_ENTRY _ZTI8S20750C4[];
extern  VTBL_ENTRY _ZTV8S20750C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20750C4[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
static Base_Class bases_S20750C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C28,    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
    6, //immediately_derived
  0, 1},
  {&cd_S2264C28,    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_S20750C6,    ABISELECT(16,8), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20750C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S20750C4,    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},
  {&cd_S2264C28,    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_S20750C7,    ABISELECT(24,12), //bcp->offset
    13, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20750C2[];
extern void _ZN8S20750C2D1Ev();
extern void _ZN8S20750C2D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20750C2D1Ev,_ZTv0_n12_N8S20750C2D1Ev)();
extern void ABISELECT(_ZThn24_N8S20750C2D1Ev,_ZThn12_N8S20750C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20750C2D0Ev,_ZTv0_n12_N8S20750C2D0Ev)();
extern void ABISELECT(_ZThn24_N8S20750C2D0Ev,_ZThn12_N8S20750C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20750C2[] = {
  ABISELECT(24,12),
  0,
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C2[0]),
  (VTBL_ENTRY)&_ZN8S20750C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20750C2D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20750C2[0]),
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20750C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20750C2D1Ev,_ZTv0_n12_N8S20750C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20750C2D0Ev,_ZTv0_n12_N8S20750C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S20750C2[];
extern void _ZN8S20750C4D1Ev();
extern void _ZN8S20750C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20750C4__8S20750C2[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C4[0]),
  (VTBL_ENTRY)&_ZN8S20750C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20750C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__8S20750C4__8S20750C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20750C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__8S20750C2[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C6[0]),
};
static  VTT_ENTRY vtt_S20750C2[] = {
  {&(_ZTV8S20750C2[8]),  8,18},
  {&(_ZTV8S20750C2[8]),  8,18},
  {&(_ZTV8S20750C2[13]),  13,18},
  {&(_ZTV8S20750C2[16]),  16,18},
  {&(_tg__ZTV8S20750C4__8S20750C2[5]),  5,7},
  {&(_tg__ZTV8S20750C6__8S20750C4__8S20750C2[3]),  3,3},
  {&(_tg__ZTV8S20750C6__8S20750C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20750C2[];
extern  VTBL_ENTRY _ZTV8S20750C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20750C2[];
static VTBL_ENTRY alt_thunk_names170[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20750C2D0Ev,_ZTv0_n12_N8S20750C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20750C2D0Ev,_ZThn12_N8S20750C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20750C2D1Ev,_ZTv0_n12_N8S20750C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S20750C2D1Ev,_ZThn12_N8S20750C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20750C2 = {  "S20750C2", // class name
  bases_S20750C2, 9,
  &(vtc_S20750C2[0]), // expected_vtbl_contents
  &(vtt_S20750C2[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S20750C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20750C2),18, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20750C2),7, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names170,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20750C9  : S20750C7 {
  virtual  ~S20750C9(); // _ZN8S20750C9D1Ev
  S20750C9(); // tgen
};
//SIG(-1 S20750C9) C1{ BC2{ BC3{ m} vd} vd}


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

static void Test_S20750C9()
{
  extern Class_Descriptor cd_S20750C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20750C9, buf);
    S20750C9 *dp, &lv = *(dp=new (buf) S20750C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20750C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20750C9)");
    check_base_class_offset(lv, (S2264C28*)(S20750C7*), 0, "S20750C9");
    check_base_class_offset(lv, (S20750C7*), 0, "S20750C9");
    test_class_info(&lv, &cd_S20750C9);
    dp->~S20750C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20750C9(Test_S20750C9, "S20750C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20750C9C1Ev();
extern void _ZN8S20750C9D1Ev();
Name_Map name_map_S20750C9[] = {
  NSPAIR(_ZN8S20750C9C1Ev),
  NSPAIR(_ZN8S20750C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
static Base_Class bases_S20750C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20750C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S20750C9[];
extern void _ZN8S20750C9D1Ev();
extern void _ZN8S20750C9D0Ev();
static  VTBL_ENTRY vtc_S20750C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C9[0]),
  (VTBL_ENTRY)&_ZN8S20750C9D1Ev,
  (VTBL_ENTRY)&_ZN8S20750C9D0Ev,
};
extern VTBL_ENTRY _ZTI8S20750C9[];
extern  VTBL_ENTRY _ZTV8S20750C9[];
Class_Descriptor cd_S20750C9 = {  "S20750C9", // class name
  bases_S20750C9, 2,
  &(vtc_S20750C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20750C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20750C9),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  S20750C8  : S20750C4 , S20750C9 , S3351C8_nt {
  short s20750c8f0;
  virtual  ~S20750C8(); // _ZN8S20750C8D2Ev
  S20750C8(); // tgen
};
//SIG(-1 S20750C8) C1{ BC2{ VBC3{ m} VBC4{ m} VBC5{ BC3 VBC4} BC6{ BC3 vd} vd} BC7{ BC6 vd} BC8{ m Fi} vd Fs}


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

static void Test_S20750C8()
{
  extern Class_Descriptor cd_S20750C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S20750C8, buf);
    S20750C8 *dp, &lv = *(dp=new (buf) S20750C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S20750C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20750C8)");
    /*is_ambiguous_... S20750C4::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C4*), ABISELECT(22,14), "S20750C8");
    check_base_class_offset(lv, (S2264C38*)(S20750C4*), 0, "S20750C8");
    check_base_class_offset(lv, (S2264C38*)(S20750C6*), 0, "S20750C8");
    check_base_class_offset(lv, (S2264C28*)(S20750C6*), ABISELECT(24,16), "S20750C8");
    check_base_class_offset(lv, (S20750C6*)(S20750C4*), ABISELECT(24,16), "S20750C8");
    check_base_class_offset(lv, (S2264C28*)(S20750C7*)(S20750C4*), 0, "S20750C8");
    check_base_class_offset(lv, (S20750C7*)(S20750C4*), 0, "S20750C8");
    check_base_class_offset(lv, (S20750C4*), 0, "S20750C8");
    check_base_class_offset(lv, (S2264C28*)(S20750C7*)(S20750C9*), ABISELECT(8,4), "S20750C8");
    check_base_class_offset(lv, (S20750C7*)(S20750C9*), ABISELECT(8,4), "S20750C8");
    check_base_class_offset(lv, (S20750C9*), ABISELECT(8,4), "S20750C8");
    check_base_class_offset(lv, (S3351C8_nt*), ABISELECT(16,8), "S20750C8");
    check_field_offset(lv, s20750c8f0, ABISELECT(20,12), "S20750C8.s20750c8f0");
    test_class_info(&lv, &cd_S20750C8);
    dp->~S20750C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20750C8(Test_S20750C8, "S20750C8", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S20750C8C1Ev();
extern void _ZN8S20750C8D2Ev();
Name_Map name_map_S20750C8[] = {
  NSPAIR(_ZN8S20750C8C1Ev),
  NSPAIR(_ZN8S20750C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C6;
extern VTBL_ENTRY _ZTI8S20750C6[];
extern  VTBL_ENTRY _ZTV8S20750C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20750C6[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
extern Class_Descriptor cd_S20750C4;
extern VTBL_ENTRY _ZTI8S20750C4[];
extern  VTBL_ENTRY _ZTV8S20750C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20750C4[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
extern Class_Descriptor cd_S20750C9;
extern VTBL_ENTRY _ZTI8S20750C9[];
extern  VTBL_ENTRY _ZTV8S20750C9[];
extern Class_Descriptor cd_S3351C8_nt;
extern VTBL_ENTRY _ZTI10S3351C8_nt[];
static Base_Class bases_S20750C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    ABISELECT(22,14), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    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
    3, //immediately_derived
  0, 0},
  {&cd_S20750C6,    ABISELECT(24,16), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20750C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S20750C4,    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_S2264C28,    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_S20750C7,    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
    9, //immediately_derived
  0, 0},
  {&cd_S20750C9,    ABISELECT(8,4), //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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S3351C8_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 _ZTI8S20750C8[];
extern void _ZN8S20750C8D1Ev();
extern void _ZN8S20750C8D0Ev();
extern void ABISELECT(_ZThn8_N8S20750C8D1Ev,_ZThn4_N8S20750C8D1Ev)();
extern void ABISELECT(_ZThn8_N8S20750C8D0Ev,_ZThn4_N8S20750C8D0Ev)();
static  VTBL_ENTRY vtc_S20750C8[] = {
  ABISELECT(24,16),
  0,
  ABISELECT(22,14),
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C8[0]),
  (VTBL_ENTRY)&_ZN8S20750C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20750C8D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20750C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20750C8D1Ev,_ZThn4_N8S20750C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20750C8D0Ev,_ZThn4_N8S20750C8D0Ev),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20750C8[0]),
};
extern VTBL_ENTRY _ZTV8S20750C8[];
extern void _ZN8S20750C4D1Ev();
extern void _ZN8S20750C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20750C4__8S20750C8[] = {
  ABISELECT(24,16),
  0,
  ABISELECT(22,14),
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C4[0]),
  (VTBL_ENTRY)&_ZN8S20750C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20750C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__8S20750C4__8S20750C8[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20750C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__8S20750C8[] = {
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C6[0]),
};
static  VTT_ENTRY vtt_S20750C8[] = {
  {&(_ZTV8S20750C8[5]),  5,14},
  {&(_tg__ZTV8S20750C4__8S20750C8[5]),  5,7},
  {&(_tg__ZTV8S20750C6__8S20750C4__8S20750C8[3]),  3,3},
  {&(_ZTV8S20750C8[14]),  14,14},
  {&(_tg__ZTV8S20750C6__8S20750C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20750C8[];
extern  VTBL_ENTRY _ZTV8S20750C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20750C8[];
Class_Descriptor cd_S20750C8 = {  "S20750C8", // class name
  bases_S20750C8, 11,
  &(vtc_S20750C8[0]), // expected_vtbl_contents
  &(vtt_S20750C8[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S20750C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20750C8),14, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20750C8),5, //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  S20750C11  : virtual S20750C4 , S20750C7 {
  void *s20750c11f0;
  ~S20750C11(); // tgen
  S20750C11(); // tgen
};
//SIG(-1 S20750C11) C1{ VBC2{ VBC3{ m} VBC4{ m} VBC5{ BC3 VBC4} BC6{ BC3 vd} vd} BC6 Fp}


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

static void Test_S20750C11()
{
  extern Class_Descriptor cd_S20750C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20750C11, buf);
    S20750C11 *dp, &lv = *(dp=new (buf) S20750C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20750C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20750C11)");
    /*is_ambiguous_... S20750C4::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C4*), ABISELECT(24,12), "S20750C11");
    check_base_class_offset(lv, (S2264C38*)(S20750C4*), 0, "S20750C11");
    check_base_class_offset(lv, (S2264C38*)(S20750C6*), 0, "S20750C11");
    check_base_class_offset(lv, (S2264C28*)(S20750C6*), ABISELECT(32,16), "S20750C11");
    check_base_class_offset(lv, (S20750C6*)(S20750C4*), ABISELECT(32,16), "S20750C11");
    check_base_class_offset(lv, (S2264C28*)(S20750C7*)(S20750C4*), ABISELECT(16,8), "S20750C11");
    check_base_class_offset(lv, (S20750C7*)(S20750C4*), ABISELECT(16,8), "S20750C11");
    check_base_class_offset(lv, (S20750C4*), ABISELECT(16,8), "S20750C11");
    /*is_ambiguous_... S20750C11::S20750C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C7*), 0, "S20750C11");
    /*is_ambiguous_... S20750C11::S20750C7 */ AMB_check_base_class_offset(lv, (S20750C7*), 0, "S20750C11");
    check_field_offset(lv, s20750c11f0, ABISELECT(8,4), "S20750C11.s20750c11f0");
    test_class_info(&lv, &cd_S20750C11);
    dp->~S20750C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20750C11(Test_S20750C11, "S20750C11", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN9S20750C11C1Ev();
extern void _ZN9S20750C11D1Ev();
Name_Map name_map_S20750C11[] = {
  NSPAIR(_ZN9S20750C11C1Ev),
  NSPAIR(_ZN9S20750C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C6;
extern VTBL_ENTRY _ZTI8S20750C6[];
extern  VTBL_ENTRY _ZTV8S20750C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20750C6[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
extern Class_Descriptor cd_S20750C4;
extern VTBL_ENTRY _ZTI8S20750C4[];
extern  VTBL_ENTRY _ZTV8S20750C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20750C4[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
static Base_Class bases_S20750C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    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, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    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
    3, //immediately_derived
  0, 0},
  {&cd_S20750C6,    ABISELECT(32,16), //bcp->offset
    16, //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
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2264C28,    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_S20750C7,    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
    6, //immediately_derived
  0, 0},
  {&cd_S20750C4,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20750C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S20750C11[];
extern void _ZN9S20750C11D1Ev();
extern void _ZN9S20750C11D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S20750C11D1Ev,_ZTv0_n24_N9S20750C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S20750C11D1Ev,_ZThn8_N9S20750C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20750C11D0Ev,_ZTv0_n24_N9S20750C11D0Ev)();
extern void ABISELECT(_ZThn16_N9S20750C11D0Ev,_ZThn8_N9S20750C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20750C11[] = {
  ABISELECT(32,16),
  0,
  ABISELECT(24,12),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20750C11[0]),
  (VTBL_ENTRY)&_ZN9S20750C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20750C11D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20750C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C11D1Ev,_ZTv0_n24_N9S20750C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C11D0Ev,_ZTv0_n24_N9S20750C11D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI9S20750C11[0]),
};
extern VTBL_ENTRY _ZTV9S20750C11[];
extern void _ZN8S20750C4D1Ev();
extern void _ZN8S20750C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20750C4__9S20750C11[] = {
  ABISELECT(16,8),
  ABISELECT(-16,-8),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C4[0]),
  (VTBL_ENTRY)&_ZN8S20750C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20750C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__8S20750C4__9S20750C11[] = {
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20750C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__9S20750C11[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C6[0]),
};
static  VTT_ENTRY vtt_S20750C11[] = {
  {&(_ZTV9S20750C11[6]),  6,19},
  {&(_ZTV9S20750C11[14]),  14,19},
  {&(_ZTV9S20750C11[19]),  19,19},
  {&(_tg__ZTV8S20750C4__9S20750C11[5]),  5,7},
  {&(_tg__ZTV8S20750C6__8S20750C4__9S20750C11[3]),  3,3},
  {&(_tg__ZTV8S20750C6__9S20750C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20750C11[];
extern  VTBL_ENTRY _ZTV9S20750C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20750C11[];
static VTBL_ENTRY alt_thunk_names171[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20750C11D0Ev,_ZTv0_n24_N9S20750C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20750C11D0Ev,_ZThn8_N9S20750C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20750C11D1Ev,_ZTv0_n24_N9S20750C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20750C11D1Ev,_ZThn8_N9S20750C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20750C11 = {  "S20750C11", // class name
  bases_S20750C11, 9,
  &(vtc_S20750C11[0]), // expected_vtbl_contents
  &(vtt_S20750C11[0]), // expected_vtt_contents
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI9S20750C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20750C11),19, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20750C11),6, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names171,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20750C13  : virtual S20750C7 , virtual S20750C6 {
  void *s20750c13f0;
  ::S3052C22_nt s20750c13f1;
  virtual  ~S20750C13(); // _ZN9S20750C13D2Ev
  S20750C13(); // tgen
};
//SIG(-1 S20750C13) C1{ VBC2{ BC3{ m} vd} VBC4{ BC3 VBC5{ m}} vd Fp FC6{}}


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

static void Test_S20750C13()
{
  extern Class_Descriptor cd_S20750C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S20750C13, buf);
    S20750C13 *dp, &lv = *(dp=new (buf) S20750C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S20750C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20750C13)");
    check_base_class_offset(lv, (S2264C28*)(S20750C7*), 0, "S20750C13");
    check_base_class_offset(lv, (S20750C7*), 0, "S20750C13");
    check_base_class_offset(lv, (S2264C28*)(S20750C6*), ABISELECT(24,12), "S20750C13");
    check_base_class_offset(lv, (S2264C38*)(S20750C6*), 0, "S20750C13");
    check_base_class_offset(lv, (S20750C6*), ABISELECT(24,12), "S20750C13");
    check_field_offset(lv, s20750c13f0, ABISELECT(8,4), "S20750C13.s20750c13f0");
    check_field_offset(lv, s20750c13f1, ABISELECT(16,8), "S20750C13.s20750c13f1");
    test_class_info(&lv, &cd_S20750C13);
    dp->~S20750C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20750C13(Test_S20750C13, "S20750C13", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN9S20750C13C1Ev();
extern void _ZN9S20750C13D2Ev();
Name_Map name_map_S20750C13[] = {
  NSPAIR(_ZN9S20750C13C1Ev),
  NSPAIR(_ZN9S20750C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20750C6;
extern VTBL_ENTRY _ZTI8S20750C6[];
extern  VTBL_ENTRY _ZTV8S20750C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20750C6[];
static Base_Class bases_S20750C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20750C7,    0, //bcp->offset
    -1, //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_S2264C28,    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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20750C6,    ABISELECT(24,12), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //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 _ZTI9S20750C13[];
extern void _ZN9S20750C13D1Ev();
extern void _ZN9S20750C13D0Ev();
static  VTBL_ENTRY vtc_S20750C13[] = {
  0,
  ABISELECT(24,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20750C13[0]),
  (VTBL_ENTRY)&_ZN9S20750C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20750C13D0Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20750C13[0]),
};
extern VTBL_ENTRY _ZTV9S20750C13[];
static  VTBL_ENTRY _tg__ZTV8S20750C6__9S20750C13[] = {
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C6[0]),
};
static  VTT_ENTRY vtt_S20750C13[] = {
  {&(_ZTV9S20750C13[6]),  6,11},
  {&(_ZTV9S20750C13[6]),  6,11},
  {&(_ZTV9S20750C13[11]),  11,11},
  {&(_tg__ZTV8S20750C6__9S20750C13[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20750C13[];
extern  VTBL_ENTRY _ZTV9S20750C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20750C13[];
Class_Descriptor cd_S20750C13 = {  "S20750C13", // class name
  bases_S20750C13, 5,
  &(vtc_S20750C13[0]), // expected_vtbl_contents
  &(vtt_S20750C13[0]), // expected_vtt_contents
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI9S20750C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20750C13),11, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20750C13),4, //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  S20750C16  : S20750C9 , virtual S20750C6 , virtual S20750C4 , virtual S20750C7 , S2264C28 {
  ::S2264C28 s20750c16f0;
  __tsi64 s20750c16f1[2];
  virtual  ~S20750C16(); // _ZN9S20750C16D2Ev
  S20750C16(); // tgen
};
//SIG(-1 S20750C16) C1{ BC2{ BC3{ BC4{ m} vd} vd} VBC5{ BC4 VBC6{ m}} VBC7{ VBC4 VBC6 VBC5 BC3 vd} VBC3 BC4 vd FC4 FL[2]}


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

static void Test_S20750C16()
{
  extern Class_Descriptor cd_S20750C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,11)];
    init_test(&cd_S20750C16, buf);
    S20750C16 *dp, &lv = *(dp=new (buf) S20750C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,40), "sizeof(S20750C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20750C16)");
    check_base_class_offset(lv, (S2264C28*)(S20750C7*)(S20750C9*), 0, "S20750C16");
    check_base_class_offset(lv, (S20750C7*)(S20750C9*), 0, "S20750C16");
    check_base_class_offset(lv, (S20750C9*), 0, "S20750C16");
    check_base_class_offset(lv, (S2264C28*)(S20750C6*), ABISELECT(32,24), "S20750C16");
    check_base_class_offset(lv, (S2264C38*)(S20750C6*), 0, "S20750C16");
    check_base_class_offset(lv, (S2264C38*)(S20750C4*), 0, "S20750C16");
    check_base_class_offset(lv, (S20750C6*), ABISELECT(32,24), "S20750C16");
    check_base_class_offset(lv, (S20750C6*)(S20750C4*), ABISELECT(32,24), "S20750C16");
    /*is_ambiguous_... S20750C4::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C4*), ABISELECT(48,32), "S20750C16");
    check_base_class_offset(lv, (S2264C28*)(S20750C7*)(S20750C4*), ABISELECT(40,28), "S20750C16");
    check_base_class_offset(lv, (S20750C7*)(S20750C4*), ABISELECT(40,28), "S20750C16");
    check_base_class_offset(lv, (S20750C4*), ABISELECT(40,28), "S20750C16");
    /*is_ambiguous_... S20750C16::S20750C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C7*), ABISELECT(56,36), "S20750C16");
    /*is_ambiguous_... S20750C16::S20750C7 */ AMB_check_base_class_offset(lv, (S20750C7*), ABISELECT(56,36), "S20750C16");
    /*is_ambiguous_... S20750C16::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), ABISELECT(8,4), "S20750C16");
    check_field_offset(lv, s20750c16f0, ABISELECT(9,5), "S20750C16.s20750c16f0");
    check_field_offset(lv, s20750c16f1, ABISELECT(16,8), "S20750C16.s20750c16f1");
    test_class_info(&lv, &cd_S20750C16);
    dp->~S20750C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20750C16(Test_S20750C16, "S20750C16", ABISELECT(64,40));

#else // __cplusplus

extern void _ZN9S20750C16C1Ev();
extern void _ZN9S20750C16D2Ev();
Name_Map name_map_S20750C16[] = {
  NSPAIR(_ZN9S20750C16C1Ev),
  NSPAIR(_ZN9S20750C16D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
extern Class_Descriptor cd_S20750C9;
extern VTBL_ENTRY _ZTI8S20750C9[];
extern  VTBL_ENTRY _ZTV8S20750C9[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20750C6;
extern VTBL_ENTRY _ZTI8S20750C6[];
extern  VTBL_ENTRY _ZTV8S20750C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20750C6[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
extern Class_Descriptor cd_S20750C4;
extern VTBL_ENTRY _ZTI8S20750C4[];
extern  VTBL_ENTRY _ZTV8S20750C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20750C4[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S20750C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S20750C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    2, //immediately_derived
  0, 0},
  {&cd_S20750C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S2264C28,    ABISELECT(32,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
    5, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20750C6,    ABISELECT(32,24), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    ABISELECT(48,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_S2264C28,    ABISELECT(40,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_S20750C7,    ABISELECT(40,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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20750C4,    ABISELECT(40,28), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //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},
  {&cd_S2264C28,    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
    11, //immediately_derived
  0, 0},
  {&cd_S20750C7,    ABISELECT(56,36), //bcp->offset
    20, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    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 _ZTI9S20750C16[];
extern void _ZN9S20750C16D1Ev();
extern void _ZN9S20750C16D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S20750C16D1Ev,_ZTv0_n24_N9S20750C16D1Ev)();
extern void ABISELECT(_ZThn40_N9S20750C16D1Ev,_ZThn28_N9S20750C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20750C16D0Ev,_ZTv0_n24_N9S20750C16D0Ev)();
extern void ABISELECT(_ZThn40_N9S20750C16D0Ev,_ZThn28_N9S20750C16D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20750C16D1Ev,_ZTv0_n12_N9S20750C16D1Ev)();
extern void ABISELECT(_ZThn56_N9S20750C16D1Ev,_ZThn36_N9S20750C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20750C16D0Ev,_ZTv0_n12_N9S20750C16D0Ev)();
extern void ABISELECT(_ZThn56_N9S20750C16D0Ev,_ZThn36_N9S20750C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20750C16[] = {
  ABISELECT(56,36),
  ABISELECT(48,32),
  ABISELECT(40,28),
  0,
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20750C16[0]),
  (VTBL_ENTRY)&_ZN9S20750C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20750C16D0Ev,
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI9S20750C16[0]),
  ABISELECT(-40,-28),
  ABISELECT(-8,-4),
  ABISELECT(-40,-28),
  ABISELECT(8,4),
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI9S20750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C16D1Ev,_ZTv0_n24_N9S20750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C16D0Ev,_ZTv0_n24_N9S20750C16D0Ev),
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S20750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20750C16D1Ev,_ZTv0_n12_N9S20750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20750C16D0Ev,_ZTv0_n12_N9S20750C16D0Ev),
};
extern VTBL_ENTRY _ZTV9S20750C16[];
static  VTBL_ENTRY _tg__ZTV8S20750C6__9S20750C16[] = {
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C6[0]),
};
extern void _ZN8S20750C4D1Ev();
extern void _ZN8S20750C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20750C4__9S20750C16[] = {
  ABISELECT(-8,-4),
  ABISELECT(-40,-28),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C4[0]),
  (VTBL_ENTRY)&_ZN8S20750C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20750C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__8S20750C4__9S20750C16[] = {
  ABISELECT(-32,-24),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20750C4[0]),
};
static  VTT_ENTRY vtt_S20750C16[] = {
  {&(_ZTV9S20750C16[7]),  7,25},
  {&(_ZTV9S20750C16[12]),  12,25},
  {&(_ZTV9S20750C16[18]),  18,25},
  {&(_ZTV9S20750C16[23]),  23,25},
  {&(_tg__ZTV8S20750C6__9S20750C16[3]),  3,3},
  {&(_tg__ZTV8S20750C4__9S20750C16[5]),  5,7},
  {&(_tg__ZTV8S20750C6__8S20750C4__9S20750C16[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20750C16[];
extern  VTBL_ENTRY _ZTV9S20750C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20750C16[];
static VTBL_ENTRY alt_thunk_names172[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20750C16D0Ev,_ZTv0_n12_N9S20750C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20750C16D0Ev,_ZThn36_N9S20750C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20750C16D1Ev,_ZTv0_n12_N9S20750C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20750C16D1Ev,_ZThn36_N9S20750C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20750C16D0Ev,_ZTv0_n24_N9S20750C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20750C16D0Ev,_ZThn28_N9S20750C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20750C16D1Ev,_ZTv0_n24_N9S20750C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20750C16D1Ev,_ZThn28_N9S20750C16D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20750C16 = {  "S20750C16", // class name
  bases_S20750C16, 13,
  &(vtc_S20750C16[0]), // expected_vtbl_contents
  &(vtt_S20750C16[0]), // expected_vtt_contents
  ABISELECT(64,40), // object size
  NSPAIRA(_ZTI9S20750C16),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20750C16),25, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20750C16),7, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names172,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20750C15  : S2264C28 , virtual S20750C4 , S20750C16 , virtual S20750C11 {
  ~S20750C15(); // tgen
  S20750C15(); // tgen
};
//SIG(-1 S20750C15) C1{ BC2{ m} VBC3{ VBC2 VBC4{ m} VBC5{ BC2 VBC4} BC6{ BC2 vd} vd} BC7{ BC8{ BC6 vd} VBC5 VBC3 VBC6 BC2 vd FC2 FL[2]} VBC9{ VBC3 BC6 Fp}}


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

static void Test_S20750C15()
{
  extern Class_Descriptor cd_S20750C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,14)];
    init_test(&cd_S20750C15, buf);
    S20750C15 *dp, &lv = *(dp=new (buf) S20750C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,52), "sizeof(S20750C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20750C15)");
    /*is_ambiguous_... S20750C15::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), ABISELECT(32,24), "S20750C15");
    /*is_ambiguous_... S20750C4::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C4*), ABISELECT(48,32), "S20750C15");
    check_base_class_offset(lv, (S2264C38*)(S20750C4*), 0, "S20750C15");
    check_base_class_offset(lv, (S2264C38*)(S20750C6*), 0, "S20750C15");
    check_base_class_offset(lv, (S2264C28*)(S20750C6*), ABISELECT(56,36), "S20750C15");
    check_base_class_offset(lv, (S20750C6*)(S20750C4*), ABISELECT(56,36), "S20750C15");
    check_base_class_offset(lv, (S20750C6*)(S20750C16*), ABISELECT(56,36), "S20750C15");
    check_base_class_offset(lv, (S2264C28*)(S20750C7*)(S20750C4*), ABISELECT(40,28), "S20750C15");
    check_base_class_offset(lv, (S20750C7*)(S20750C4*), ABISELECT(40,28), "S20750C15");
    check_base_class_offset(lv, (S20750C4*), ABISELECT(40,28), "S20750C15");
    check_base_class_offset(lv, (S20750C4*)(S20750C16*), ABISELECT(40,28), "S20750C15");
    check_base_class_offset(lv, (S20750C4*)(S20750C11*), ABISELECT(40,28), "S20750C15");
    check_base_class_offset(lv, (S2264C28*)(S20750C7*)(S20750C9*)(S20750C16*), 0, "S20750C15");
    check_base_class_offset(lv, (S20750C7*)(S20750C9*)(S20750C16*), 0, "S20750C15");
    check_base_class_offset(lv, (S20750C9*)(S20750C16*), 0, "S20750C15");
    /*is_ambiguous_... S20750C15::S20750C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C7*), ABISELECT(64,40), "S20750C15");
    /*is_ambiguous_... S20750C16::S20750C7 */ AMB_check_base_class_offset(lv, (S20750C7*)(S20750C16*), ABISELECT(64,40), "S20750C15");
    /*is_ambiguous_... S20750C16::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C16*), ABISELECT(8,4), "S20750C15");
    check_base_class_offset(lv, (S20750C16*), 0, "S20750C15");
    /*is_ambiguous_... S20750C11::S20750C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C7*)(S20750C11*), ABISELECT(72,44), "S20750C15");
    /*is_ambiguous_... S20750C11::S20750C7 */ AMB_check_base_class_offset(lv, (S20750C7*)(S20750C11*), ABISELECT(72,44), "S20750C15");
    check_base_class_offset(lv, (S20750C11*), ABISELECT(72,44), "S20750C15");
    test_class_info(&lv, &cd_S20750C15);
    dp->~S20750C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20750C15(Test_S20750C15, "S20750C15", ABISELECT(88,52));

#else // __cplusplus

extern void _ZN9S20750C15C1Ev();
extern void _ZN9S20750C15D1Ev();
Name_Map name_map_S20750C15[] = {
  NSPAIR(_ZN9S20750C15C1Ev),
  NSPAIR(_ZN9S20750C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C6;
extern VTBL_ENTRY _ZTI8S20750C6[];
extern  VTBL_ENTRY _ZTV8S20750C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20750C6[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
extern Class_Descriptor cd_S20750C4;
extern VTBL_ENTRY _ZTI8S20750C4[];
extern  VTBL_ENTRY _ZTV8S20750C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20750C4[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
extern Class_Descriptor cd_S20750C9;
extern VTBL_ENTRY _ZTI8S20750C9[];
extern  VTBL_ENTRY _ZTV8S20750C9[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C16;
extern VTBL_ENTRY _ZTI9S20750C16[];
extern  VTBL_ENTRY _ZTV9S20750C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20750C16[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
extern Class_Descriptor cd_S20750C11;
extern VTBL_ENTRY _ZTI9S20750C11[];
extern  VTBL_ENTRY _ZTV9S20750C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20750C11[];
static Base_Class bases_S20750C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    ABISELECT(32,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, 0},
  {&cd_S2264C28,    ABISELECT(48,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, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    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
    4, //immediately_derived
  0, 0},
  {&cd_S20750C6,    ABISELECT(56,36), //bcp->offset
    18, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(40,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_S20750C7,    ABISELECT(40,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
    2, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S20750C4,    ABISELECT(40,28), //bcp->offset
    10, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20750C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20750C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(64,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
    12, //immediately_derived
  0, 0},
  {&cd_S20750C7,    ABISELECT(64,40), //bcp->offset
    21, //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
    4, //init_seq
    14, //immediately_derived
  0, 1},
  {&cd_S2264C28,    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
    14, //immediately_derived
  0, 0},
  {&cd_S20750C16,    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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C28,    ABISELECT(72,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
    16, //immediately_derived
  0, 0},
  {&cd_S20750C7,    ABISELECT(72,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
    17, //immediately_derived
  0, 0},
  {&cd_S20750C11,    ABISELECT(72,44), //bcp->offset
    26, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20750C15[];
extern void _ZN9S20750C15D1Ev();
extern void _ZN9S20750C15D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S20750C15D1Ev,_ZTv0_n24_N9S20750C15D1Ev)();
extern void ABISELECT(_ZThn40_N9S20750C15D1Ev,_ZThn28_N9S20750C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20750C15D0Ev,_ZTv0_n24_N9S20750C15D0Ev)();
extern void ABISELECT(_ZThn40_N9S20750C15D0Ev,_ZThn28_N9S20750C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20750C15D1Ev,_ZTv0_n12_N9S20750C15D1Ev)();
extern void ABISELECT(_ZThn64_N9S20750C15D1Ev,_ZThn40_N9S20750C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20750C15D0Ev,_ZTv0_n12_N9S20750C15D0Ev)();
extern void ABISELECT(_ZThn64_N9S20750C15D0Ev,_ZThn40_N9S20750C15D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20750C15D1Ev,_ZTv0_n28_N9S20750C15D1Ev)();
extern void ABISELECT(_ZThn72_N9S20750C15D1Ev,_ZThn44_N9S20750C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20750C15D0Ev,_ZTv0_n28_N9S20750C15D0Ev)();
extern void ABISELECT(_ZThn72_N9S20750C15D0Ev,_ZThn44_N9S20750C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20750C15[] = {
  ABISELECT(72,44),
  ABISELECT(64,40),
  ABISELECT(48,32),
  ABISELECT(40,28),
  0,
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20750C15[0]),
  (VTBL_ENTRY)&_ZN9S20750C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20750C15D0Ev,
  ABISELECT(-40,-28),
  ABISELECT(16,8),
  ABISELECT(-40,-28),
  ABISELECT(8,4),
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI9S20750C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C15D1Ev,_ZTv0_n24_N9S20750C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C15D0Ev,_ZTv0_n24_N9S20750C15D0Ev),
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S20750C15[0]),
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI9S20750C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20750C15D1Ev,_ZTv0_n12_N9S20750C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20750C15D0Ev,_ZTv0_n12_N9S20750C15D0Ev),
  ABISELECT(-72,-44),
  ABISELECT(-16,-8),
  ABISELECT(-72,-44),
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  ABISELECT(-72,-44),
  (VTBL_ENTRY)&(_ZTI9S20750C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20750C15D1Ev,_ZTv0_n28_N9S20750C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20750C15D0Ev,_ZTv0_n28_N9S20750C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S20750C15[];
extern void _ZN9S20750C16D1Ev();
extern void _ZN9S20750C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20750C16__9S20750C15[] = {
  ABISELECT(64,40),
  ABISELECT(48,32),
  ABISELECT(40,28),
  0,
  ABISELECT(56,36),
  0,
  (VTBL_ENTRY)&(_ZTI9S20750C16[0]),
  (VTBL_ENTRY)&_ZN9S20750C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20750C16D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__9S20750C16__9S20750C15[] = {
  ABISELECT(-56,-36),
  ABISELECT(-56,-36),
  (VTBL_ENTRY)&(_ZTI9S20750C16[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20750C16D1Ev,_ZTv0_n24_N9S20750C16D1Ev)();
extern void ABISELECT(_ZThn40_N9S20750C16D1Ev,_ZThn28_N9S20750C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20750C16D0Ev,_ZTv0_n24_N9S20750C16D0Ev)();
extern void ABISELECT(_ZThn40_N9S20750C16D0Ev,_ZThn28_N9S20750C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20750C4__9S20750C16__9S20750C15[] = {
  ABISELECT(-40,-28),
  ABISELECT(16,8),
  ABISELECT(-40,-28),
  ABISELECT(8,4),
  ABISELECT(-40,-28),
  (VTBL_ENTRY)&(_ZTI9S20750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C16D1Ev,_ZTv0_n24_N9S20750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C16D0Ev,_ZTv0_n24_N9S20750C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20750C16D1Ev,_ZTv0_n12_N9S20750C16D1Ev)();
extern void ABISELECT(_ZThn64_N9S20750C16D1Ev,_ZThn40_N9S20750C16D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20750C16D0Ev,_ZTv0_n12_N9S20750C16D0Ev)();
extern void ABISELECT(_ZThn64_N9S20750C16D0Ev,_ZThn40_N9S20750C16D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20750C7__A2__9S20750C16__9S20750C15[] = {
  ABISELECT(-64,-40),
  ABISELECT(-64,-40),
  (VTBL_ENTRY)&(_ZTI9S20750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20750C16D1Ev,_ZTv0_n12_N9S20750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20750C16D0Ev,_ZTv0_n12_N9S20750C16D0Ev),
};
extern void _ZN8S20750C4D1Ev();
extern void _ZN8S20750C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20750C4__9S20750C15[] = {
  ABISELECT(16,8),
  ABISELECT(-40,-28),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C4[0]),
  (VTBL_ENTRY)&_ZN8S20750C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20750C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__8S20750C4__9S20750C15[] = {
  ABISELECT(-56,-36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20750C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__9S20750C15[] = {
  ABISELECT(-56,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C6[0]),
};
extern void _ZN9S20750C11D1Ev();
extern void _ZN9S20750C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20750C11__9S20750C15[] = {
  ABISELECT(-16,-8),
  ABISELECT(-72,-44),
  ABISELECT(-24,-12),
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20750C11[0]),
  (VTBL_ENTRY)&_ZN9S20750C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20750C11D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20750C11D1Ev,_ZTv0_n24_N9S20750C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20750C11D0Ev,_ZTv0_n24_N9S20750C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20750C4__9S20750C11__9S20750C15[] = {
  ABISELECT(32,16),
  ABISELECT(16,8),
  ABISELECT(-40,-28),
  ABISELECT(8,4),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI9S20750C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C11D1Ev,_ZTv0_n24_N9S20750C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C11D0Ev,_ZTv0_n24_N9S20750C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__9S20750C11__9S20750C15[] = {
  ABISELECT(-56,-36),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20750C11[0]),
};
static  VTT_ENTRY vtt_S20750C15[] = {
  {&(_ZTV9S20750C15[8]),  8,35},
  {&(_tg__ZTV9S20750C16__9S20750C15[7]),  7,9},
  {&(_tg__ZTV8S20750C6__9S20750C16__9S20750C15[3]),  3,3},
  {&(_tg__ZTV8S20750C4__9S20750C16__9S20750C15[6]),  6,8},
  {&(_tg__ZTV8S20750C7__A2__9S20750C16__9S20750C15[3]),  3,5},
  {&(_ZTV9S20750C15[16]),  16,35},
  {&(_ZTV9S20750C15[21]),  21,35},
  {&(_ZTV9S20750C15[24]),  24,35},
  {&(_ZTV9S20750C15[33]),  33,35},
  {&(_tg__ZTV8S20750C4__9S20750C15[5]),  5,7},
  {&(_tg__ZTV8S20750C6__8S20750C4__9S20750C15[3]),  3,3},
  {&(_tg__ZTV8S20750C6__9S20750C15[3]),  3,3},
  {&(_tg__ZTV9S20750C11__9S20750C15[6]),  6,8},
  {&(_tg__ZTV8S20750C4__9S20750C11__9S20750C15[6]),  6,8},
  {&(_tg__ZTV8S20750C6__9S20750C11__9S20750C15[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20750C15[];
extern  VTBL_ENTRY _ZTV9S20750C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20750C15[];
static VTBL_ENTRY alt_thunk_names173[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20750C16D0Ev,_ZTv0_n12_N9S20750C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20750C16D0Ev,_ZThn40_N9S20750C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20750C16D1Ev,_ZTv0_n12_N9S20750C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20750C16D1Ev,_ZThn40_N9S20750C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20750C16D0Ev,_ZTv0_n24_N9S20750C16D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20750C16D0Ev,_ZThn28_N9S20750C16D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20750C16D1Ev,_ZTv0_n24_N9S20750C16D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20750C16D1Ev,_ZThn28_N9S20750C16D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20750C15D0Ev,_ZTv0_n28_N9S20750C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20750C15D0Ev,_ZThn44_N9S20750C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20750C15D1Ev,_ZTv0_n28_N9S20750C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20750C15D1Ev,_ZThn44_N9S20750C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20750C15D0Ev,_ZTv0_n12_N9S20750C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20750C15D0Ev,_ZThn40_N9S20750C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20750C15D1Ev,_ZTv0_n12_N9S20750C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20750C15D1Ev,_ZThn40_N9S20750C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20750C15D0Ev,_ZTv0_n24_N9S20750C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20750C15D0Ev,_ZThn28_N9S20750C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20750C15D1Ev,_ZTv0_n24_N9S20750C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N9S20750C15D1Ev,_ZThn28_N9S20750C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20750C15 = {  "S20750C15", // class name
  bases_S20750C15, 18,
  &(vtc_S20750C15[0]), // expected_vtbl_contents
  &(vtt_S20750C15[0]), // expected_vtt_contents
  ABISELECT(88,52), // object size
  NSPAIRA(_ZTI9S20750C15),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20750C15),35, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20750C15),15, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names173,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20750C12  : virtual S20750C13 , virtual S20750C11 , virtual S20750C15 , S20750C7 {
  char s20750c12f0[3];
  int s20750c12f1[2];
  ~S20750C12(); // tgen
  S20750C12(); // tgen
};
//SIG(-1 S20750C12) C1{ VBC2{ VBC3{ BC4{ m} vd} VBC5{ BC4 VBC6{ m}} vd Fp FC7{}} VBC8{ VBC9{ VBC4 VBC6 VBC5 BC3 vd} BC3 Fp} VBC10{ BC4 VBC9 BC11{ BC12{ BC3 vd} VBC5 VBC9 VBC3 BC4 vd FC4 FL[2]} VBC8} BC3 Fc[3] Fi[2]}


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

static void Test_S20750C12()
{
  extern Class_Descriptor cd_S20750C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,20)];
    init_test(&cd_S20750C12, buf);
    S20750C12 *dp, &lv = *(dp=new (buf) S20750C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,76), "sizeof(S20750C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20750C12)");
    /*is_ambiguous_... S20750C12::S20750C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C7*), ABISELECT(24,16), "S20750C12");
    check_base_class_offset(lv, (S20750C7*)(S20750C13*), ABISELECT(24,16), "S20750C12");
    /*is_ambiguous_... S20750C16::S20750C7 */ AMB_check_base_class_offset(lv, (S20750C7*)(S20750C16*)(S20750C15*), ABISELECT(24,16), "S20750C12");
    check_base_class_offset(lv, (S2264C28*)(S20750C6*), ABISELECT(48,28), "S20750C12");
    check_base_class_offset(lv, (S2264C38*)(S20750C6*), 0, "S20750C12");
    check_base_class_offset(lv, (S2264C38*)(S20750C4*), 0, "S20750C12");
    check_base_class_offset(lv, (S20750C6*)(S20750C13*), ABISELECT(48,28), "S20750C12");
    check_base_class_offset(lv, (S20750C6*)(S20750C4*), ABISELECT(48,28), "S20750C12");
    check_base_class_offset(lv, (S20750C6*)(S20750C16*)(S20750C15*), ABISELECT(48,28), "S20750C12");
    check_base_class_offset(lv, (S20750C13*), ABISELECT(24,16), "S20750C12");
    /*is_ambiguous_... S20750C4::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C4*), ABISELECT(80,44), "S20750C12");
    check_base_class_offset(lv, (S2264C28*)(S20750C7*)(S20750C4*), ABISELECT(72,40), "S20750C12");
    check_base_class_offset(lv, (S20750C7*)(S20750C4*), ABISELECT(72,40), "S20750C12");
    check_base_class_offset(lv, (S20750C4*)(S20750C11*), ABISELECT(72,40), "S20750C12");
    check_base_class_offset(lv, (S20750C4*)(S20750C15*), ABISELECT(72,40), "S20750C12");
    check_base_class_offset(lv, (S20750C4*)(S20750C16*)(S20750C15*), ABISELECT(72,40), "S20750C12");
    /*is_ambiguous_... S20750C11::S20750C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C7*)(S20750C11*), ABISELECT(56,32), "S20750C12");
    /*is_ambiguous_... S20750C11::S20750C7 */ AMB_check_base_class_offset(lv, (S20750C7*)(S20750C11*), ABISELECT(56,32), "S20750C12");
    check_base_class_offset(lv, (S20750C11*), ABISELECT(56,32), "S20750C12");
    check_base_class_offset(lv, (S20750C11*)(S20750C15*), ABISELECT(56,32), "S20750C12");
    /*is_ambiguous_... S20750C15::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C15*), ABISELECT(120,72), "S20750C12");
    check_base_class_offset(lv, (S2264C28*)(S20750C7*)(S20750C9*)(S20750C16*)(S20750C15*), ABISELECT(88,48), "S20750C12");
    check_base_class_offset(lv, (S20750C7*)(S20750C9*)(S20750C16*)(S20750C15*), ABISELECT(88,48), "S20750C12");
    check_base_class_offset(lv, (S20750C9*)(S20750C16*)(S20750C15*), ABISELECT(88,48), "S20750C12");
    /*is_ambiguous_... S20750C16::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C16*)(S20750C15*), ABISELECT(96,52), "S20750C12");
    check_base_class_offset(lv, (S20750C16*)(S20750C15*), ABISELECT(88,48), "S20750C12");
    check_base_class_offset(lv, (S20750C15*), ABISELECT(88,48), "S20750C12");
    /*is_ambiguous_... S20750C12::S20750C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C7*), 0, "S20750C12");
    /*is_ambiguous_... S20750C12::S20750C7 */ AMB_check_base_class_offset(lv, (S20750C7*), 0, "S20750C12");
    check_field_offset(lv, s20750c12f0, ABISELECT(8,4), "S20750C12.s20750c12f0");
    check_field_offset(lv, s20750c12f1, ABISELECT(12,8), "S20750C12.s20750c12f1");
    test_class_info(&lv, &cd_S20750C12);
    dp->~S20750C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20750C12(Test_S20750C12, "S20750C12", ABISELECT(128,76));

#else // __cplusplus

extern void _ZN9S20750C12C1Ev();
extern void _ZN9S20750C12D1Ev();
Name_Map name_map_S20750C12[] = {
  NSPAIR(_ZN9S20750C12C1Ev),
  NSPAIR(_ZN9S20750C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20750C6;
extern VTBL_ENTRY _ZTI8S20750C6[];
extern  VTBL_ENTRY _ZTV8S20750C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20750C6[];
extern Class_Descriptor cd_S20750C13;
extern VTBL_ENTRY _ZTI9S20750C13[];
extern  VTBL_ENTRY _ZTV9S20750C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20750C13[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
extern Class_Descriptor cd_S20750C4;
extern VTBL_ENTRY _ZTI8S20750C4[];
extern  VTBL_ENTRY _ZTV8S20750C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20750C4[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
extern Class_Descriptor cd_S20750C11;
extern VTBL_ENTRY _ZTI9S20750C11[];
extern  VTBL_ENTRY _ZTV9S20750C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20750C11[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
extern Class_Descriptor cd_S20750C9;
extern VTBL_ENTRY _ZTI8S20750C9[];
extern  VTBL_ENTRY _ZTV8S20750C9[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C16;
extern VTBL_ENTRY _ZTI9S20750C16[];
extern  VTBL_ENTRY _ZTV9S20750C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20750C16[];
extern Class_Descriptor cd_S20750C15;
extern VTBL_ENTRY _ZTI9S20750C15[];
extern  VTBL_ENTRY _ZTV9S20750C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20750C15[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
static Base_Class bases_S20750C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    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
    1, //immediately_derived
  0, 0},
  {&cd_S20750C7,    ABISELECT(24,16), //bcp->offset
    -1, //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
    5, //immediately_derived
  0, 1},
  {&cd_S2264C28,    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, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20750C6,    ABISELECT(48,28), //bcp->offset
    20, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20750C13,    ABISELECT(24,16), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    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
    -1, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(72,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
    8, //immediately_derived
  0, 0},
  {&cd_S20750C7,    ABISELECT(72,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
    4, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S20750C4,    ABISELECT(72,40), //bcp->offset
    32, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S2264C28,    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, 0},
  {&cd_S20750C7,    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
    6, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20750C11,    ABISELECT(56,32), //bcp->offset
    23, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    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
    19, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(88,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
    15, //immediately_derived
  0, 0},
  {&cd_S20750C7,    ABISELECT(88,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
    8, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S20750C9,    ABISELECT(88,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
    9, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(96,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
    18, //immediately_derived
  0, 0},
  {&cd_S20750C16,    ABISELECT(88,48), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    19, //immediately_derived
  0, 0},
  {&cd_S20750C15,    ABISELECT(88,48), //bcp->offset
    40, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20750C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20750C12[];
extern void _ZN9S20750C12D1Ev();
extern void _ZN9S20750C12D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S20750C12D1Ev,_ZTv0_n12_N9S20750C12D1Ev)();
extern void ABISELECT(_ZThn24_N9S20750C12D1Ev,_ZThn16_N9S20750C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20750C12D0Ev,_ZTv0_n12_N9S20750C12D0Ev)();
extern void ABISELECT(_ZThn24_N9S20750C12D0Ev,_ZThn16_N9S20750C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20750C12D1Ev,_ZTv0_n28_N9S20750C12D1Ev)();
extern void ABISELECT(_ZThn56_N9S20750C12D1Ev,_ZThn32_N9S20750C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20750C12D0Ev,_ZTv0_n28_N9S20750C12D0Ev)();
extern void ABISELECT(_ZThn56_N9S20750C12D0Ev,_ZThn32_N9S20750C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20750C12D1Ev,_ZTv0_n24_N9S20750C12D1Ev)();
extern void ABISELECT(_ZThn72_N9S20750C12D1Ev,_ZThn40_N9S20750C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20750C12D0Ev,_ZTv0_n24_N9S20750C12D0Ev)();
extern void ABISELECT(_ZThn72_N9S20750C12D0Ev,_ZThn40_N9S20750C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20750C12D1Ev,_ZTv0_n36_N9S20750C12D1Ev)();
extern void ABISELECT(_ZThn88_N9S20750C12D1Ev,_ZThn48_N9S20750C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20750C12D0Ev,_ZTv0_n36_N9S20750C12D0Ev)();
extern void ABISELECT(_ZThn88_N9S20750C12D0Ev,_ZThn48_N9S20750C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20750C12[] = {
  ABISELECT(88,48),
  ABISELECT(80,44),
  ABISELECT(72,40),
  ABISELECT(56,32),
  0,
  ABISELECT(48,28),
  ABISELECT(24,16),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20750C12[0]),
  (VTBL_ENTRY)&_ZN9S20750C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20750C12D0Ev,
  ABISELECT(-24,-16),
  ABISELECT(24,12),
  0,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S20750C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20750C12D1Ev,_ZTv0_n12_N9S20750C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20750C12D0Ev,_ZTv0_n12_N9S20750C12D0Ev),
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S20750C12[0]),
  ABISELECT(-56,-32),
  ABISELECT(-8,-4),
  ABISELECT(-56,-32),
  ABISELECT(24,12),
  ABISELECT(16,8),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI9S20750C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20750C12D1Ev,_ZTv0_n28_N9S20750C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20750C12D0Ev,_ZTv0_n28_N9S20750C12D0Ev),
  ABISELECT(-72,-40),
  ABISELECT(-24,-12),
  ABISELECT(-72,-40),
  ABISELECT(8,4),
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI9S20750C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C12D1Ev,_ZTv0_n24_N9S20750C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C12D0Ev,_ZTv0_n24_N9S20750C12D0Ev),
  ABISELECT(-88,-48),
  ABISELECT(-32,-16),
  ABISELECT(-64,-32),
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-88,-48),
  ABISELECT(-40,-20),
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI9S20750C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20750C12D1Ev,_ZTv0_n36_N9S20750C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20750C12D0Ev,_ZTv0_n36_N9S20750C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S20750C12[];
extern void ABISELECT(_ZTv0_n24_N9S20750C13D1Ev,_ZTv0_n12_N9S20750C13D1Ev)();
extern void _ZN9S20750C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20750C13D0Ev,_ZTv0_n12_N9S20750C13D0Ev)();
extern void _ZN9S20750C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20750C13__9S20750C12[] = {
  ABISELECT(-24,-16),
  ABISELECT(24,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20750C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20750C13D1Ev,_ZTv0_n12_N9S20750C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20750C13D0Ev,_ZTv0_n12_N9S20750C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__9S20750C13__9S20750C12[] = {
  ABISELECT(-48,-28),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20750C13[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__9S20750C12[] = {
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C6[0]),
};
extern void _ZN9S20750C11D1Ev();
extern void _ZN9S20750C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20750C11__9S20750C12[] = {
  ABISELECT(-8,-4),
  ABISELECT(-56,-32),
  ABISELECT(24,12),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20750C11[0]),
  (VTBL_ENTRY)&_ZN9S20750C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20750C11D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20750C11D1Ev,_ZTv0_n24_N9S20750C11D1Ev)();
extern void ABISELECT(_ZThn16_N9S20750C11D1Ev,_ZThn8_N9S20750C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20750C11D0Ev,_ZTv0_n24_N9S20750C11D0Ev)();
extern void ABISELECT(_ZThn16_N9S20750C11D0Ev,_ZThn8_N9S20750C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20750C4__9S20750C11__9S20750C12[] = {
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(-72,-40),
  ABISELECT(8,4),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20750C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C11D1Ev,_ZTv0_n24_N9S20750C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C11D0Ev,_ZTv0_n24_N9S20750C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__9S20750C11__9S20750C12[] = {
  ABISELECT(-48,-28),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20750C11[0]),
};
extern void _ZN8S20750C4D1Ev();
extern void _ZN8S20750C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20750C4__9S20750C12[] = {
  ABISELECT(-24,-12),
  ABISELECT(-72,-40),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C4[0]),
  (VTBL_ENTRY)&_ZN8S20750C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20750C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__8S20750C4__9S20750C12[] = {
  ABISELECT(-48,-28),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S20750C4[0]),
};
extern void _ZN9S20750C15D1Ev();
extern void _ZN9S20750C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20750C15__9S20750C12[] = {
  ABISELECT(-32,-16),
  ABISELECT(-64,-32),
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-88,-48),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20750C15[0]),
  (VTBL_ENTRY)&_ZN9S20750C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20750C15D0Ev,
};
extern void _ZN9S20750C16D1Ev();
extern void _ZN9S20750C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20750C169S20750C15__9S20750C12[] = {
  ABISELECT(-64,-32),
  ABISELECT(-8,-4),
  ABISELECT(-16,-8),
  ABISELECT(-88,-48),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20750C16[0]),
  (VTBL_ENTRY)&_ZN9S20750C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20750C16D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__9S20750C169S20750C15__9S20750C12[] = {
  ABISELECT(-48,-28),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI9S20750C16[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20750C16D1Ev,_ZTv0_n24_N9S20750C16D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20750C16D0Ev,_ZTv0_n24_N9S20750C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20750C4__9S20750C169S20750C15__9S20750C12[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-72,-40),
  ABISELECT(8,4),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C16D1Ev,_ZTv0_n24_N9S20750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C16D0Ev,_ZTv0_n24_N9S20750C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20750C16D1Ev,_ZTv0_n12_N9S20750C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20750C16D0Ev,_ZTv0_n12_N9S20750C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20750C7__A2__9S20750C169S20750C15__9S20750C12[] = {
  ABISELECT(64,32),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI9S20750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20750C16D1Ev,_ZTv0_n12_N9S20750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20750C16D0Ev,_ZTv0_n12_N9S20750C16D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20750C15D1Ev,_ZTv0_n24_N9S20750C15D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20750C15D0Ev,_ZTv0_n24_N9S20750C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20750C4__9S20750C15__9S20750C12[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-72,-40),
  ABISELECT(8,4),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20750C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C15D1Ev,_ZTv0_n24_N9S20750C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C15D0Ev,_ZTv0_n24_N9S20750C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__9S20750C15__9S20750C12[] = {
  ABISELECT(-48,-28),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI9S20750C15[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S20750C15D1Ev,_ZTv0_n12_N9S20750C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20750C15D0Ev,_ZTv0_n12_N9S20750C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20750C7__A2__9S20750C15__9S20750C12[] = {
  ABISELECT(64,32),
  ABISELECT(64,32),
  (VTBL_ENTRY)&(_ZTI9S20750C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20750C15D1Ev,_ZTv0_n12_N9S20750C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20750C15D0Ev,_ZTv0_n12_N9S20750C15D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N9S20750C15D1Ev,_ZTv0_n28_N9S20750C15D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20750C15D0Ev,_ZTv0_n28_N9S20750C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20750C11__9S20750C15__9S20750C12[] = {
  ABISELECT(32,16),
  ABISELECT(-8,-4),
  ABISELECT(-56,-32),
  ABISELECT(24,12),
  ABISELECT(16,8),
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI9S20750C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20750C15D1Ev,_ZTv0_n28_N9S20750C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20750C15D0Ev,_ZTv0_n28_N9S20750C15D0Ev),
};
static  VTT_ENTRY vtt_S20750C12[] = {
  {&(_ZTV9S20750C12[10]),  10,51},
  {&(_ZTV9S20750C12[18]),  18,51},
  {&(_ZTV9S20750C12[18]),  18,51},
  {&(_ZTV9S20750C12[23]),  23,51},
  {&(_ZTV9S20750C12[30]),  30,51},
  {&(_ZTV9S20750C12[38]),  38,51},
  {&(_ZTV9S20750C12[49]),  49,51},
  {&(_tg__ZTV9S20750C13__9S20750C12[6]),  6,8},
  {&(_tg__ZTV9S20750C13__9S20750C12[6]),  6,8},
  {&(_tg__ZTV8S20750C6__9S20750C13__9S20750C12[3]),  3,3},
  {&(_tg__ZTV8S20750C6__9S20750C12[3]),  3,3},
  {&(_tg__ZTV9S20750C11__9S20750C12[6]),  6,8},
  {&(_tg__ZTV8S20750C4__9S20750C11__9S20750C12[6]),  6,8},
  {&(_tg__ZTV8S20750C6__9S20750C11__9S20750C12[3]),  3,3},
  {&(_tg__ZTV8S20750C4__9S20750C12[5]),  5,7},
  {&(_tg__ZTV8S20750C6__8S20750C4__9S20750C12[3]),  3,3},
  {&(_tg__ZTV9S20750C15__9S20750C12[8]),  8,10},
  {&(_tg__ZTV9S20750C169S20750C15__9S20750C12[7]),  7,9},
  {&(_tg__ZTV8S20750C6__9S20750C169S20750C15__9S20750C12[3]),  3,3},
  {&(_tg__ZTV8S20750C4__9S20750C169S20750C15__9S20750C12[6]),  6,8},
  {&(_tg__ZTV8S20750C7__A2__9S20750C169S20750C15__9S20750C12[3]),  3,5},
  {&(_tg__ZTV8S20750C4__9S20750C15__9S20750C12[6]),  6,8},
  {&(_tg__ZTV8S20750C6__9S20750C15__9S20750C12[3]),  3,3},
  {&(_tg__ZTV8S20750C7__A2__9S20750C15__9S20750C12[3]),  3,5},
  {&(_tg__ZTV9S20750C11__9S20750C15__9S20750C12[7]),  7,9},
};
extern VTBL_ENTRY _ZTI9S20750C12[];
extern  VTBL_ENTRY _ZTV9S20750C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20750C12[];
static VTBL_ENTRY alt_thunk_names174[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20750C11D0Ev,_ZTv0_n24_N9S20750C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20750C11D0Ev,_ZThn8_N9S20750C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20750C11D1Ev,_ZTv0_n24_N9S20750C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N9S20750C11D1Ev,_ZThn8_N9S20750C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20750C13D0Ev,_ZTv0_n12_N9S20750C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20750C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20750C13D1Ev,_ZTv0_n12_N9S20750C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20750C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20750C12D0Ev,_ZTv0_n36_N9S20750C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S20750C12D0Ev,_ZThn48_N9S20750C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20750C12D1Ev,_ZTv0_n36_N9S20750C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S20750C12D1Ev,_ZThn48_N9S20750C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20750C12D0Ev,_ZTv0_n24_N9S20750C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20750C12D0Ev,_ZThn40_N9S20750C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20750C12D1Ev,_ZTv0_n24_N9S20750C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20750C12D1Ev,_ZThn40_N9S20750C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20750C12D0Ev,_ZTv0_n28_N9S20750C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20750C12D0Ev,_ZThn32_N9S20750C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20750C12D1Ev,_ZTv0_n28_N9S20750C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N9S20750C12D1Ev,_ZThn32_N9S20750C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20750C12D0Ev,_ZTv0_n12_N9S20750C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20750C12D0Ev,_ZThn16_N9S20750C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20750C12D1Ev,_ZTv0_n12_N9S20750C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20750C12D1Ev,_ZThn16_N9S20750C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20750C12 = {  "S20750C12", // class name
  bases_S20750C12, 22,
  &(vtc_S20750C12[0]), // expected_vtbl_contents
  &(vtt_S20750C12[0]), // expected_vtt_contents
  ABISELECT(128,76), // object size
  NSPAIRA(_ZTI9S20750C12),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20750C12),51, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20750C12),25, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names174,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20750C1  : virtual S20750C2 , S20750C8 , S20750C11 , virtual S20750C12 {
  int s20750c1f0;
  ::S20750C12 s20750c1f1;
  ~S20750C1(); // tgen
  S20750C1(); // tgen
};
//SIG(1 S20750C1) C1{ VBC2{ VBC3{ m} VBC4{ VBC5{ m} VBC3 VBC6{ BC5 VBC3} BC7{ BC5 vd} vd} VBC7 vd} BC8{ BC4 BC9{ BC7 vd} BC10{ m Fi} vd Fs} BC11{ VBC4 BC7 Fp} VBC12{ VBC13{ VBC7 VBC6 vd Fp FC14{}} VBC11 VBC15{ BC5 VBC4 BC16{ BC9 VBC6 VBC4 VBC7 BC5 vd FC5 FL[2]} VBC11} BC7 Fc[3] Fi[2]} Fi FC12}


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

static void Test_S20750C1()
{
  extern Class_Descriptor cd_S20750C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(39,46)];
    init_test(&cd_S20750C1, buf);
    S20750C1 *dp, &lv = *(dp=new (buf) S20750C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(304,180), "sizeof(S20750C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20750C1)");
    check_base_class_offset(lv, (S2264C38*)(S20750C2*), 0, "S20750C1");
    /*is_ambiguous_... S20750C1::S20750C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20750C4*), 0, "S20750C1");
    check_base_class_offset(lv, (S2264C38*)(S20750C6*), 0, "S20750C1");
    check_base_class_offset(lv, (S2264C38*)(S20750C4*)(S20750C8*), 0, "S20750C1");
    /*is_ambiguous_... S20750C1::S20750C4 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C4*), ABISELECT(184,108), "S20750C1");
    /*is_ambiguous_... S20750C4::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C4*)(S20750C8*), ABISELECT(184,108), "S20750C1");
    check_base_class_offset(lv, (S2264C28*)(S20750C6*), ABISELECT(192,112), "S20750C1");
    /*is_ambiguous_... S20750C1::S20750C4 */ AMB_check_base_class_offset(lv, (S20750C6*)(S20750C4*), ABISELECT(192,112), "S20750C1");
    check_base_class_offset(lv, (S20750C6*)(S20750C4*)(S20750C8*), ABISELECT(192,112), "S20750C1");
    check_base_class_offset(lv, (S20750C6*)(S20750C13*), ABISELECT(192,112), "S20750C1");
    check_base_class_offset(lv, (S20750C6*)(S20750C16*)(S20750C15*), ABISELECT(192,112), "S20750C1");
    /*is_ambiguous_... S20750C1::S20750C4 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C7*)(S20750C4*), ABISELECT(176,104), "S20750C1");
    /*is_ambiguous_... S20750C1::S20750C4 */ AMB_check_base_class_offset(lv, (S20750C7*)(S20750C4*), ABISELECT(176,104), "S20750C1");
    check_base_class_offset(lv, (S20750C4*)(S20750C2*), ABISELECT(176,104), "S20750C1");
    /*is_ambiguous_... S20750C1::S20750C11 */ AMB_check_base_class_offset(lv, (S20750C4*)(S20750C11*), ABISELECT(176,104), "S20750C1");
    /*is_ambiguous_... S20750C1::S20750C11 */ AMB_check_base_class_offset(lv, (S20750C4*)(S20750C11*), ABISELECT(176,104), "S20750C1");
    check_base_class_offset(lv, (S20750C4*)(S20750C15*), ABISELECT(176,104), "S20750C1");
    check_base_class_offset(lv, (S20750C4*)(S20750C16*)(S20750C15*), ABISELECT(176,104), "S20750C1");
    /*is_ambiguous_... S20750C1::S20750C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C7*), ABISELECT(224,132), "S20750C1");
    /*is_ambiguous_... S20750C2::S20750C7 */ AMB_check_base_class_offset(lv, (S20750C7*)(S20750C2*), ABISELECT(224,132), "S20750C1");
    check_base_class_offset(lv, (S20750C7*)(S20750C13*), ABISELECT(224,132), "S20750C1");
    /*is_ambiguous_... S20750C16::S20750C7 */ AMB_check_base_class_offset(lv, (S20750C7*)(S20750C16*)(S20750C15*), ABISELECT(224,132), "S20750C1");
    check_base_class_offset(lv, (S20750C2*), ABISELECT(176,104), "S20750C1");
    check_base_class_offset(lv, (S2264C28*)(S20750C7*)(S20750C4*)(S20750C8*), 0, "S20750C1");
    check_base_class_offset(lv, (S20750C7*)(S20750C4*)(S20750C8*), 0, "S20750C1");
    check_base_class_offset(lv, (S20750C4*)(S20750C8*), 0, "S20750C1");
    check_base_class_offset(lv, (S2264C28*)(S20750C7*)(S20750C9*)(S20750C8*), ABISELECT(8,4), "S20750C1");
    check_base_class_offset(lv, (S20750C7*)(S20750C9*)(S20750C8*), ABISELECT(8,4), "S20750C1");
    check_base_class_offset(lv, (S20750C9*)(S20750C8*), ABISELECT(8,4), "S20750C1");
    check_base_class_offset(lv, (S3351C8_nt*)(S20750C8*), ABISELECT(16,8), "S20750C1");
    check_base_class_offset(lv, (S20750C8*), 0, "S20750C1");
    /*is_ambiguous_... S20750C1::S20750C11 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C7*)(S20750C11*), ABISELECT(24,16), "S20750C1");
    /*is_ambiguous_... S20750C1::S20750C11 */ AMB_check_base_class_offset(lv, (S20750C7*)(S20750C11*), ABISELECT(24,16), "S20750C1");
    /*is_ambiguous_... S20750C1::S20750C11 */ AMB_check_base_class_offset(lv, (S20750C11*), ABISELECT(24,16), "S20750C1");
    check_base_class_offset(lv, (S20750C13*)(S20750C12*), ABISELECT(224,132), "S20750C1");
    /*is_ambiguous_... S20750C1::S20750C11 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C7*)(S20750C11*), ABISELECT(248,144), "S20750C1");
    /*is_ambiguous_... S20750C1::S20750C11 */ AMB_check_base_class_offset(lv, (S20750C7*)(S20750C11*), ABISELECT(248,144), "S20750C1");
    check_base_class_offset(lv, (S20750C11*)(S20750C12*), ABISELECT(248,144), "S20750C1");
    check_base_class_offset(lv, (S20750C11*)(S20750C15*), ABISELECT(248,144), "S20750C1");
    /*is_ambiguous_... S20750C15::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C15*), ABISELECT(296,176), "S20750C1");
    check_base_class_offset(lv, (S2264C28*)(S20750C7*)(S20750C9*)(S20750C16*)(S20750C15*), ABISELECT(264,152), "S20750C1");
    check_base_class_offset(lv, (S20750C7*)(S20750C9*)(S20750C16*)(S20750C15*), ABISELECT(264,152), "S20750C1");
    check_base_class_offset(lv, (S20750C9*)(S20750C16*)(S20750C15*), ABISELECT(264,152), "S20750C1");
    /*is_ambiguous_... S20750C16::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C16*)(S20750C15*), ABISELECT(272,156), "S20750C1");
    check_base_class_offset(lv, (S20750C16*)(S20750C15*), ABISELECT(264,152), "S20750C1");
    check_base_class_offset(lv, (S20750C15*)(S20750C12*), ABISELECT(264,152), "S20750C1");
    /*is_ambiguous_... S20750C12::S20750C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20750C7*)(S20750C12*), ABISELECT(200,116), "S20750C1");
    /*is_ambiguous_... S20750C12::S20750C7 */ AMB_check_base_class_offset(lv, (S20750C7*)(S20750C12*), ABISELECT(200,116), "S20750C1");
    check_base_class_offset(lv, (S20750C12*), ABISELECT(200,116), "S20750C1");
    check_field_offset(lv, s20750c1f0, ABISELECT(40,24), "S20750C1.s20750c1f0");
    check_field_offset(lv, s20750c1f1, ABISELECT(48,28), "S20750C1.s20750c1f1");
    test_class_info(&lv, &cd_S20750C1);
    dp->~S20750C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20750C1(Test_S20750C1, "S20750C1", ABISELECT(304,180));

#else // __cplusplus

extern void _ZN8S20750C1C1Ev();
extern void _ZN8S20750C1D1Ev();
Name_Map name_map_S20750C1[] = {
  NSPAIR(_ZN8S20750C1C1Ev),
  NSPAIR(_ZN8S20750C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C6;
extern VTBL_ENTRY _ZTI8S20750C6[];
extern  VTBL_ENTRY _ZTV8S20750C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20750C6[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
extern Class_Descriptor cd_S20750C4;
extern VTBL_ENTRY _ZTI8S20750C4[];
extern  VTBL_ENTRY _ZTV8S20750C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20750C4[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
extern Class_Descriptor cd_S20750C2;
extern VTBL_ENTRY _ZTI8S20750C2[];
extern  VTBL_ENTRY _ZTV8S20750C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20750C2[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
extern Class_Descriptor cd_S20750C4;
extern VTBL_ENTRY _ZTI8S20750C4[];
extern  VTBL_ENTRY _ZTV8S20750C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20750C4[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
extern Class_Descriptor cd_S20750C9;
extern VTBL_ENTRY _ZTI8S20750C9[];
extern  VTBL_ENTRY _ZTV8S20750C9[];
extern Class_Descriptor cd_S3351C8_nt;
extern VTBL_ENTRY _ZTI10S3351C8_nt[];
extern Class_Descriptor cd_S20750C8;
extern VTBL_ENTRY _ZTI8S20750C8[];
extern  VTBL_ENTRY _ZTV8S20750C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20750C8[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
extern Class_Descriptor cd_S20750C11;
extern VTBL_ENTRY _ZTI9S20750C11[];
extern  VTBL_ENTRY _ZTV9S20750C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20750C11[];
extern Class_Descriptor cd_S20750C13;
extern VTBL_ENTRY _ZTI9S20750C13[];
extern  VTBL_ENTRY _ZTV9S20750C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20750C13[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
extern Class_Descriptor cd_S20750C11;
extern VTBL_ENTRY _ZTI9S20750C11[];
extern  VTBL_ENTRY _ZTV9S20750C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20750C11[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
extern Class_Descriptor cd_S20750C9;
extern VTBL_ENTRY _ZTI8S20750C9[];
extern  VTBL_ENTRY _ZTV8S20750C9[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C16;
extern VTBL_ENTRY _ZTI9S20750C16[];
extern  VTBL_ENTRY _ZTV9S20750C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20750C16[];
extern Class_Descriptor cd_S20750C15;
extern VTBL_ENTRY _ZTI9S20750C15[];
extern  VTBL_ENTRY _ZTV9S20750C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20750C15[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20750C7;
extern VTBL_ENTRY _ZTI8S20750C7[];
extern  VTBL_ENTRY _ZTV8S20750C7[];
extern Class_Descriptor cd_S20750C12;
extern VTBL_ENTRY _ZTI9S20750C12[];
extern  VTBL_ENTRY _ZTV9S20750C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20750C12[];
static Base_Class bases_S20750C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    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
    6, //immediately_derived
  0, 1},
  {&cd_S2264C28,    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
    3, //immediately_derived
  0, 0},
  {&cd_S20750C6,    ABISELECT(192,112), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S2264C28,    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
    5, //immediately_derived
  0, 0},
  {&cd_S20750C7,    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
    2, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S20750C4,    ABISELECT(176,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S2264C28,    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
    8, //immediately_derived
  0, 0},
  {&cd_S20750C7,    ABISELECT(224,132), //bcp->offset
    -1, //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
    4, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20750C2,    ABISELECT(176,104), //bcp->offset
    26, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20750C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    12, //immediately_derived
  0, 0},
  {&cd_S20750C4,    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
    16, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S2264C28,    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
    14, //immediately_derived
  0, 0},
  {&cd_S20750C7,    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
    17, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20750C9,    ABISELECT(8,4), //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
    18, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S3351C8_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
    17, //immediately_derived
  0, 0},
  {&cd_S20750C8,    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
    19, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C28,    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
    19, //immediately_derived
  0, 0},
  {&cd_S20750C7,    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
    20, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S20750C11,    ABISELECT(24,16), //bcp->offset
    18, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20750C13,    ABISELECT(224,132), //bcp->offset
    52, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    34, //immediately_derived
  0, 1},
  {&cd_S2264C28,    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_S20750C7,    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
    7, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20750C11,    ABISELECT(248,144), //bcp->offset
    60, //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
    8, //init_seq
    31, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(296,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
    31, //immediately_derived
  0, 0},
  {&cd_S2264C28,    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
    27, //immediately_derived
  0, 0},
  {&cd_S20750C7,    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
    9, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20750C9,    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
    10, //init_seq
    30, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(272,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
    30, //immediately_derived
  0, 0},
  {&cd_S20750C16,    ABISELECT(264,152), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S20750C15,    ABISELECT(264,152), //bcp->offset
    69, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    34, //immediately_derived
  0, 1},
  {&cd_S2264C28,    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
    33, //immediately_derived
  0, 0},
  {&cd_S20750C7,    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
    13, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S20750C12,    ABISELECT(200,116), //bcp->offset
    39, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20750C1[];
extern void _ZN8S20750C1D1Ev();
extern void _ZN8S20750C1D0Ev();
extern void ABISELECT(_ZThn8_N8S20750C1D1Ev,_ZThn4_N8S20750C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20750C1D0Ev,_ZThn4_N8S20750C1D0Ev)();
extern void ABISELECT(_ZThn24_N8S20750C1D1Ev,_ZThn16_N8S20750C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S20750C1D0Ev,_ZThn16_N8S20750C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N8S20750C1D1Ev,_ZTv0_n24_N8S20750C1D1Ev)();
extern void ABISELECT(_ZThn176_N8S20750C1D1Ev,_ZThn104_N8S20750C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20750C1D0Ev,_ZTv0_n24_N8S20750C1D0Ev)();
extern void ABISELECT(_ZThn176_N8S20750C1D0Ev,_ZThn104_N8S20750C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20750C1D1Ev,_ZTv0_n44_N8S20750C1D1Ev)();
extern void ABISELECT(_ZThn200_N8S20750C1D1Ev,_ZThn116_N8S20750C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S20750C1D0Ev,_ZTv0_n44_N8S20750C1D0Ev)();
extern void ABISELECT(_ZThn200_N8S20750C1D0Ev,_ZThn116_N8S20750C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20750C1D1Ev,_ZTv0_n12_N8S20750C1D1Ev)();
extern void ABISELECT(_ZThn224_N8S20750C1D1Ev,_ZThn132_N8S20750C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20750C1D0Ev,_ZTv0_n12_N8S20750C1D0Ev)();
extern void ABISELECT(_ZThn224_N8S20750C1D0Ev,_ZThn132_N8S20750C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20750C1D1Ev,_ZTv0_n28_N8S20750C1D1Ev)();
extern void ABISELECT(_ZThn248_N8S20750C1D1Ev,_ZThn144_N8S20750C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20750C1D0Ev,_ZTv0_n28_N8S20750C1D0Ev)();
extern void ABISELECT(_ZThn248_N8S20750C1D0Ev,_ZThn144_N8S20750C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20750C1D1Ev,_ZTv0_n36_N8S20750C1D1Ev)();
extern void ABISELECT(_ZThn264_N8S20750C1D1Ev,_ZThn152_N8S20750C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N8S20750C1D0Ev,_ZTv0_n36_N8S20750C1D0Ev)();
extern void ABISELECT(_ZThn264_N8S20750C1D0Ev,_ZThn152_N8S20750C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20750C1[] = {
  ABISELECT(264,152),
  ABISELECT(248,144),
  ABISELECT(224,132),
  ABISELECT(200,116),
  ABISELECT(224,132),
  ABISELECT(176,104),
  ABISELECT(176,104),
  ABISELECT(192,112),
  0,
  ABISELECT(184,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C1[0]),
  (VTBL_ENTRY)&_ZN8S20750C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20750C1D0Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20750C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20750C1D1Ev,_ZThn4_N8S20750C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn8_N8S20750C1D0Ev,_ZThn4_N8S20750C1D0Ev),
  ABISELECT(168,96),
  ABISELECT(-24,-16),
  ABISELECT(160,92),
  ABISELECT(152,88),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S20750C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S20750C1D1Ev,_ZThn16_N8S20750C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S20750C1D0Ev,_ZThn16_N8S20750C1D0Ev),
  ABISELECT(48,28),
  0,
  ABISELECT(-176,-104),
  ABISELECT(16,8),
  ABISELECT(-176,-104),
  ABISELECT(8,4),
  ABISELECT(-176,-104),
  (VTBL_ENTRY)&(_ZTI8S20750C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20750C1D1Ev,_ZTv0_n24_N8S20750C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20750C1D0Ev,_ZTv0_n24_N8S20750C1D0Ev),
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI8S20750C1[0]),
  ABISELECT(-200,-116),
  ABISELECT(64,36),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,28),
  ABISELECT(-200,-116),
  ABISELECT(-8,-4),
  ABISELECT(24,16),
  ABISELECT(24,16),
  ABISELECT(-200,-116),
  (VTBL_ENTRY)&(_ZTI8S20750C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20750C1D1Ev,_ZTv0_n44_N8S20750C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S20750C1D0Ev,_ZTv0_n44_N8S20750C1D0Ev),
  ABISELECT(-224,-132),
  ABISELECT(-32,-20),
  0,
  ABISELECT(-224,-132),
  ABISELECT(-224,-132),
  (VTBL_ENTRY)&(_ZTI8S20750C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20750C1D1Ev,_ZTv0_n12_N8S20750C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20750C1D0Ev,_ZTv0_n12_N8S20750C1D0Ev),
  ABISELECT(-248,-144),
  ABISELECT(-56,-32),
  ABISELECT(-248,-144),
  ABISELECT(-64,-36),
  ABISELECT(-72,-40),
  ABISELECT(-248,-144),
  (VTBL_ENTRY)&(_ZTI8S20750C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20750C1D1Ev,_ZTv0_n28_N8S20750C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20750C1D0Ev,_ZTv0_n28_N8S20750C1D0Ev),
  ABISELECT(-264,-152),
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(-80,-44),
  ABISELECT(-88,-48),
  ABISELECT(-264,-152),
  ABISELECT(-72,-40),
  ABISELECT(-264,-152),
  (VTBL_ENTRY)&(_ZTI8S20750C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20750C1D1Ev,_ZTv0_n36_N8S20750C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N8S20750C1D0Ev,_ZTv0_n36_N8S20750C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20750C1[];
extern void _ZN8S20750C8D1Ev();
extern void _ZN8S20750C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20750C8__8S20750C1[] = {
  ABISELECT(192,112),
  0,
  ABISELECT(184,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C8[0]),
  (VTBL_ENTRY)&_ZN8S20750C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20750C8D0Ev,
};
extern void _ZN8S20750C4D1Ev();
extern void _ZN8S20750C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20750C48S20750C8__A1__8S20750C1[] = {
  ABISELECT(192,112),
  0,
  ABISELECT(184,108),
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C4[0]),
  (VTBL_ENTRY)&_ZN8S20750C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20750C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__8S20750C48S20750C8__A1__8S20750C1[] = {
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI8S20750C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__8S20750C8__8S20750C1[] = {
  ABISELECT(-192,-112),
  ABISELECT(-192,-112),
  (VTBL_ENTRY)&(_ZTI8S20750C8[0]),
};
extern void _ZN9S20750C11D1Ev();
extern void _ZN9S20750C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20750C11__A__8S20750C1[] = {
  ABISELECT(168,96),
  ABISELECT(-24,-16),
  ABISELECT(160,92),
  ABISELECT(152,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S20750C11[0]),
  (VTBL_ENTRY)&_ZN9S20750C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20750C11D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20750C11D1Ev,_ZTv0_n24_N9S20750C11D1Ev)();
extern void ABISELECT(_ZThn152_N9S20750C11D1Ev,_ZThn88_N9S20750C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20750C11D0Ev,_ZTv0_n24_N9S20750C11D0Ev)();
extern void ABISELECT(_ZThn152_N9S20750C11D0Ev,_ZThn88_N9S20750C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20750C4__9S20750C11__A__8S20750C1[] = {
  ABISELECT(-152,-88),
  ABISELECT(16,8),
  ABISELECT(-176,-104),
  ABISELECT(8,4),
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI9S20750C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C11D1Ev,_ZTv0_n24_N9S20750C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C11D0Ev,_ZTv0_n24_N9S20750C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__9S20750C11__A__8S20750C1[] = {
  ABISELECT(-192,-112),
  ABISELECT(-168,-96),
  (VTBL_ENTRY)&(_ZTI9S20750C11[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S20750C2D1Ev,_ZTv0_n24_N8S20750C2D1Ev)();
extern void _ZN8S20750C2D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20750C2D0Ev,_ZTv0_n24_N8S20750C2D0Ev)();
extern void _ZN8S20750C2D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20750C2__8S20750C1[] = {
  ABISELECT(48,28),
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(-176,-104),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20750C2D1Ev,_ZTv0_n24_N8S20750C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20750C2D0Ev,_ZTv0_n24_N8S20750C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__8S20750C2__8S20750C1[] = {
  ABISELECT(-192,-112),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20750C2[0]),
};
extern void ABISELECT(_ZTv0_n24_N8S20750C2D1Ev,_ZTv0_n12_N8S20750C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S20750C2D1Ev,_ZThn28_N8S20750C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20750C2D0Ev,_ZTv0_n12_N8S20750C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S20750C2D0Ev,_ZThn28_N8S20750C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20750C7__A1__8S20750C2__8S20750C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI8S20750C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20750C2D1Ev,_ZTv0_n12_N8S20750C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20750C2D0Ev,_ZTv0_n12_N8S20750C2D0Ev),
};
extern void _ZN8S20750C4D1Ev();
extern void _ZN8S20750C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20750C4__8S20750C1[] = {
  ABISELECT(16,8),
  ABISELECT(-176,-104),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C4[0]),
  (VTBL_ENTRY)&_ZN8S20750C4D1Ev,
  (VTBL_ENTRY)&_ZN8S20750C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__8S20750C4__8S20750C1[] = {
  ABISELECT(-192,-112),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20750C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__8S20750C1[] = {
  ABISELECT(-192,-112),
  0,
  (VTBL_ENTRY)&(_ZTI8S20750C6[0]),
};
extern void _ZN9S20750C12D1Ev();
extern void _ZN9S20750C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20750C12__8S20750C1[] = {
  ABISELECT(64,36),
  ABISELECT(-16,-8),
  ABISELECT(-24,-12),
  ABISELECT(48,28),
  ABISELECT(-200,-116),
  ABISELECT(-8,-4),
  ABISELECT(24,16),
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20750C12[0]),
  (VTBL_ENTRY)&_ZN9S20750C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20750C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S20750C12D1Ev,_ZTv0_n12_N9S20750C12D1Ev)();
extern void ABISELECT(_ZThn24_N9S20750C12D1Ev,_ZThn16_N9S20750C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20750C12D0Ev,_ZTv0_n12_N9S20750C12D0Ev)();
extern void ABISELECT(_ZThn24_N9S20750C12D0Ev,_ZThn16_N9S20750C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20750C13__9S20750C12__8S20750C1[] = {
  ABISELECT(-224,-132),
  ABISELECT(-32,-20),
  0,
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI9S20750C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20750C12D1Ev,_ZTv0_n12_N9S20750C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20750C12D0Ev,_ZTv0_n12_N9S20750C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__9S20750C12__8S20750C1[] = {
  ABISELECT(-192,-112),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20750C12[0]),
};
extern void ABISELECT(_ZTv0_n56_N9S20750C12D1Ev,_ZTv0_n28_N9S20750C12D1Ev)();
extern void ABISELECT(_ZThn48_N9S20750C12D1Ev,_ZThn28_N9S20750C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20750C12D0Ev,_ZTv0_n28_N9S20750C12D0Ev)();
extern void ABISELECT(_ZThn48_N9S20750C12D0Ev,_ZThn28_N9S20750C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20750C11__9S20750C12__8S20750C1[] = {
  ABISELECT(-48,-28),
  ABISELECT(-56,-32),
  ABISELECT(-248,-144),
  ABISELECT(-64,-36),
  ABISELECT(-72,-40),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI9S20750C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20750C12D1Ev,_ZTv0_n28_N9S20750C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20750C12D0Ev,_ZTv0_n28_N9S20750C12D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20750C12D1Ev,_ZTv0_n24_N9S20750C12D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20750C12D0Ev,_ZTv0_n24_N9S20750C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20750C4__9S20750C12__8S20750C1[] = {
  ABISELECT(24,12),
  ABISELECT(16,8),
  ABISELECT(-176,-104),
  ABISELECT(8,4),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S20750C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C12D1Ev,_ZTv0_n24_N9S20750C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C12D0Ev,_ZTv0_n24_N9S20750C12D0Ev),
};
extern void ABISELECT(_ZTv0_n72_N9S20750C12D1Ev,_ZTv0_n36_N9S20750C12D1Ev)();
extern void ABISELECT(_ZThn64_N9S20750C12D1Ev,_ZThn36_N9S20750C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n72_N9S20750C12D0Ev,_ZTv0_n36_N9S20750C12D0Ev)();
extern void ABISELECT(_ZThn64_N9S20750C12D0Ev,_ZThn36_N9S20750C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20750C15__9S20750C12__8S20750C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(-80,-44),
  ABISELECT(-88,-48),
  ABISELECT(-264,-152),
  ABISELECT(-72,-40),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI9S20750C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20750C12D1Ev,_ZTv0_n36_N9S20750C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n72_N9S20750C12D0Ev,_ZTv0_n36_N9S20750C12D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20750C13D1Ev,_ZTv0_n12_N9S20750C13D1Ev)();
extern void _ZN9S20750C13D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S20750C13D0Ev,_ZTv0_n12_N9S20750C13D0Ev)();
extern void _ZN9S20750C13D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20750C13__8S20750C1[] = {
  ABISELECT(-224,-132),
  ABISELECT(-32,-20),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S20750C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20750C13D1Ev,_ZTv0_n12_N9S20750C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20750C13D0Ev,_ZTv0_n12_N9S20750C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__9S20750C13__8S20750C1[] = {
  ABISELECT(-192,-112),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI9S20750C13[0]),
};
extern void _ZN9S20750C11D1Ev();
extern void _ZN9S20750C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20750C11__A1__8S20750C1[] = {
  ABISELECT(-56,-32),
  ABISELECT(-248,-144),
  ABISELECT(-64,-36),
  ABISELECT(-72,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S20750C11[0]),
  (VTBL_ENTRY)&_ZN9S20750C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20750C11D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20750C11D1Ev,_ZTv0_n24_N9S20750C11D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20750C11D0Ev,_ZTv0_n24_N9S20750C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20750C4__9S20750C11__A1__8S20750C1[] = {
  ABISELECT(72,40),
  ABISELECT(16,8),
  ABISELECT(-176,-104),
  ABISELECT(8,4),
  ABISELECT(72,40),
  (VTBL_ENTRY)&(_ZTI9S20750C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C11D1Ev,_ZTv0_n24_N9S20750C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C11D0Ev,_ZTv0_n24_N9S20750C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__9S20750C11__A1__8S20750C1[] = {
  ABISELECT(-192,-112),
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI9S20750C11[0]),
};
extern void _ZN9S20750C15D1Ev();
extern void _ZN9S20750C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20750C15__8S20750C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-40,-20),
  ABISELECT(-80,-44),
  ABISELECT(-88,-48),
  ABISELECT(-264,-152),
  ABISELECT(-72,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S20750C15[0]),
  (VTBL_ENTRY)&_ZN9S20750C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20750C15D0Ev,
};
extern void _ZN9S20750C16D1Ev();
extern void _ZN9S20750C16D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20750C169S20750C15__8S20750C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-80,-44),
  ABISELECT(-88,-48),
  ABISELECT(-264,-152),
  ABISELECT(-72,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S20750C16[0]),
  (VTBL_ENTRY)&_ZN9S20750C16D1Ev,
  (VTBL_ENTRY)&_ZN9S20750C16D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__9S20750C169S20750C15__8S20750C1[] = {
  ABISELECT(-192,-112),
  ABISELECT(72,40),
  (VTBL_ENTRY)&(_ZTI9S20750C16[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20750C16D1Ev,_ZTv0_n24_N9S20750C16D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20750C16D0Ev,_ZTv0_n24_N9S20750C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20750C4__9S20750C169S20750C15__8S20750C1[] = {
  ABISELECT(88,48),
  ABISELECT(16,8),
  ABISELECT(-176,-104),
  ABISELECT(8,4),
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI9S20750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C16D1Ev,_ZTv0_n24_N9S20750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C16D0Ev,_ZTv0_n24_N9S20750C16D0Ev),
};
extern void ABISELECT(_ZTv0_n24_N9S20750C16D1Ev,_ZTv0_n12_N9S20750C16D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20750C16D0Ev,_ZTv0_n12_N9S20750C16D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20750C7__A2__9S20750C169S20750C15__8S20750C1[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI9S20750C16[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20750C16D1Ev,_ZTv0_n12_N9S20750C16D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20750C16D0Ev,_ZTv0_n12_N9S20750C16D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20750C15D1Ev,_ZTv0_n24_N9S20750C15D1Ev)();
extern void ABISELECT(_ZTv0_n48_N9S20750C15D0Ev,_ZTv0_n24_N9S20750C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20750C4__9S20750C15__8S20750C1[] = {
  ABISELECT(88,48),
  ABISELECT(16,8),
  ABISELECT(-176,-104),
  ABISELECT(8,4),
  ABISELECT(88,48),
  (VTBL_ENTRY)&(_ZTI9S20750C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C15D1Ev,_ZTv0_n24_N9S20750C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20750C15D0Ev,_ZTv0_n24_N9S20750C15D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20750C6__9S20750C15__8S20750C1[] = {
  ABISELECT(-192,-112),
  ABISELECT(72,40),
  (VTBL_ENTRY)&(_ZTI9S20750C15[0]),
};
extern void ABISELECT(_ZTv0_n24_N9S20750C15D1Ev,_ZTv0_n12_N9S20750C15D1Ev)();
extern void ABISELECT(_ZTv0_n24_N9S20750C15D0Ev,_ZTv0_n12_N9S20750C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S20750C7__A2__9S20750C15__8S20750C1[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI9S20750C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20750C15D1Ev,_ZTv0_n12_N9S20750C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S20750C15D0Ev,_ZTv0_n12_N9S20750C15D0Ev),
};
extern void ABISELECT(_ZTv0_n56_N9S20750C15D1Ev,_ZTv0_n28_N9S20750C15D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20750C15D0Ev,_ZTv0_n28_N9S20750C15D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20750C11__9S20750C15__8S20750C1[] = {
  ABISELECT(16,8),
  ABISELECT(-56,-32),
  ABISELECT(-248,-144),
  ABISELECT(-64,-36),
  ABISELECT(-72,-40),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S20750C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20750C15D1Ev,_ZTv0_n28_N9S20750C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20750C15D0Ev,_ZTv0_n28_N9S20750C15D0Ev),
};
static  VTT_ENTRY vtt_S20750C1[] = {
  {&(_ZTV8S20750C1[12]),  12,80},
  {&(_tg__ZTV8S20750C8__8S20750C1[5]),  5,7},
  {&(_tg__ZTV8S20750C48S20750C8__A1__8S20750C1[5]),  5,7},
  {&(_tg__ZTV8S20750C6__8S20750C48S20750C8__A1__8S20750C1[3]),  3,3},
  {&(_tg__ZTV8S20750C6__8S20750C8__8S20750C1[3]),  3,3},
  {&(_tg__ZTV9S20750C11__A__8S20750C1[6]),  6,8},
  {&(_tg__ZTV8S20750C4__9S20750C11__A__8S20750C1[6]),  6,8},
  {&(_tg__ZTV8S20750C6__9S20750C11__A__8S20750C1[3]),  3,3},
  {&(_ZTV8S20750C1[34]),  34,80},
  {&(_ZTV8S20750C1[34]),  34,80},
  {&(_ZTV8S20750C1[39]),  39,80},
  {&(_ZTV8S20750C1[58]),  58,80},
  {&(_ZTV8S20750C1[24]),  24,80},
  {&(_ZTV8S20750C1[50]),  50,80},
  {&(_ZTV8S20750C1[58]),  58,80},
  {&(_ZTV8S20750C1[67]),  67,80},
  {&(_ZTV8S20750C1[78]),  78,80},
  {&(_tg__ZTV8S20750C2__8S20750C1[8]),  8,10},
  {&(_tg__ZTV8S20750C2__8S20750C1[8]),  8,10},
  {&(_tg__ZTV8S20750C6__8S20750C2__8S20750C1[3]),  3,3},
  {&(_tg__ZTV8S20750C7__A1__8S20750C2__8S20750C1[3]),  3,5},
  {&(_tg__ZTV8S20750C4__8S20750C1[5]),  5,7},
  {&(_tg__ZTV8S20750C6__8S20750C4__8S20750C1[3]),  3,3},
  {&(_tg__ZTV8S20750C6__8S20750C1[3]),  3,3},
  {&(_tg__ZTV9S20750C12__8S20750C1[10]),  10,12},
  {&(_tg__ZTV9S20750C13__9S20750C12__8S20750C1[6]),  6,8},
  {&(_tg__ZTV9S20750C13__9S20750C12__8S20750C1[6]),  6,8},
  {&(_tg__ZTV8S20750C6__9S20750C12__8S20750C1[3]),  3,3},
  {&(_tg__ZTV9S20750C11__9S20750C12__8S20750C1[7]),  7,9},
  {&(_tg__ZTV8S20750C4__9S20750C12__8S20750C1[6]),  6,8},
  {&(_tg__ZTV9S20750C15__9S20750C12__8S20750C1[9]),  9,11},
  {&(_tg__ZTV9S20750C13__8S20750C1[6]),  6,8},
  {&(_tg__ZTV9S20750C13__8S20750C1[6]),  6,8},
  {&(_tg__ZTV8S20750C6__9S20750C13__8S20750C1[3]),  3,3},
  {&(_tg__ZTV9S20750C11__A1__8S20750C1[6]),  6,8},
  {&(_tg__ZTV8S20750C4__9S20750C11__A1__8S20750C1[6]),  6,8},
  {&(_tg__ZTV8S20750C6__9S20750C11__A1__8S20750C1[3]),  3,3},
  {&(_tg__ZTV9S20750C15__8S20750C1[8]),  8,10},
  {&(_tg__ZTV9S20750C169S20750C15__8S20750C1[7]),  7,9},
  {&(_tg__ZTV8S20750C6__9S20750C169S20750C15__8S20750C1[3]),  3,3},
  {&(_tg__ZTV8S20750C4__9S20750C169S20750C15__8S20750C1[6]),  6,8},
  {&(_tg__ZTV8S20750C7__A2__9S20750C169S20750C15__8S20750C1[3]),  3,5},
  {&(_tg__ZTV8S20750C4__9S20750C15__8S20750C1[6]),  6,8},
  {&(_tg__ZTV8S20750C6__9S20750C15__8S20750C1[3]),  3,3},
  {&(_tg__ZTV8S20750C7__A2__9S20750C15__8S20750C1[3]),  3,5},
  {&(_tg__ZTV9S20750C11__9S20750C15__8S20750C1[7]),  7,9},
};
extern VTBL_ENTRY _ZTI8S20750C1[];
extern  VTBL_ENTRY _ZTV8S20750C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20750C1[];
static VTBL_ENTRY alt_thunk_names175[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20750C13D0Ev,_ZTv0_n12_N9S20750C13D0Ev), // 
  (VTBL_ENTRY)_ZN9S20750C13D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20750C13D1Ev,_ZTv0_n12_N9S20750C13D1Ev), // 
  (VTBL_ENTRY)_ZN9S20750C13D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20750C12D0Ev,_ZTv0_n36_N9S20750C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20750C12D0Ev,_ZThn36_N9S20750C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N9S20750C12D1Ev,_ZTv0_n36_N9S20750C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20750C12D1Ev,_ZThn36_N9S20750C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20750C12D0Ev,_ZTv0_n28_N9S20750C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20750C12D0Ev,_ZThn28_N9S20750C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20750C12D1Ev,_ZTv0_n28_N9S20750C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S20750C12D1Ev,_ZThn28_N9S20750C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20750C12D0Ev,_ZTv0_n12_N9S20750C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20750C12D0Ev,_ZThn16_N9S20750C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S20750C12D1Ev,_ZTv0_n12_N9S20750C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N9S20750C12D1Ev,_ZThn16_N9S20750C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20750C2D0Ev,_ZTv0_n12_N8S20750C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20750C2D0Ev,_ZThn28_N8S20750C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20750C2D1Ev,_ZTv0_n12_N8S20750C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20750C2D1Ev,_ZThn28_N8S20750C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20750C2D0Ev,_ZTv0_n24_N8S20750C2D0Ev), // 
  (VTBL_ENTRY)_ZN8S20750C2D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20750C2D1Ev,_ZTv0_n24_N8S20750C2D1Ev), // 
  (VTBL_ENTRY)_ZN8S20750C2D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20750C11D0Ev,_ZTv0_n24_N9S20750C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S20750C11D0Ev,_ZThn88_N9S20750C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20750C11D1Ev,_ZTv0_n24_N9S20750C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn152_N9S20750C11D1Ev,_ZThn88_N9S20750C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20750C1D0Ev,_ZTv0_n36_N8S20750C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S20750C1D0Ev,_ZThn152_N8S20750C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n72_N8S20750C1D1Ev,_ZTv0_n36_N8S20750C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn264_N8S20750C1D1Ev,_ZThn152_N8S20750C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20750C1D0Ev,_ZTv0_n28_N8S20750C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S20750C1D0Ev,_ZThn144_N8S20750C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20750C1D1Ev,_ZTv0_n28_N8S20750C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn248_N8S20750C1D1Ev,_ZThn144_N8S20750C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20750C1D0Ev,_ZTv0_n12_N8S20750C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20750C1D0Ev,_ZThn132_N8S20750C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20750C1D1Ev,_ZTv0_n12_N8S20750C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N8S20750C1D1Ev,_ZThn132_N8S20750C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20750C1D0Ev,_ZTv0_n44_N8S20750C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20750C1D0Ev,_ZThn116_N8S20750C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S20750C1D1Ev,_ZTv0_n44_N8S20750C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn200_N8S20750C1D1Ev,_ZThn116_N8S20750C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20750C1D0Ev,_ZTv0_n24_N8S20750C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20750C1D0Ev,_ZThn104_N8S20750C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20750C1D1Ev,_ZTv0_n24_N8S20750C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N8S20750C1D1Ev,_ZThn104_N8S20750C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20750C1 = {  "S20750C1", // class name
  bases_S20750C1, 35,
  &(vtc_S20750C1[0]), // expected_vtbl_contents
  &(vtt_S20750C1[0]), // expected_vtt_contents
  ABISELECT(304,180), // object size
  NSPAIRA(_ZTI8S20750C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20750C1),80, //virtual function table var
  12, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20750C1),46, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names175,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4760C3  {
  ::S2264C20_nt s4760c3f0;
  int s4760c3f1[2];
  char s4760c3f2;
  virtual  ~S4760C3(); // _ZN7S4760C3D1Ev
  virtual void  v3(); // _ZN7S4760C32v3Ev
  virtual void  v4(); // _ZN7S4760C32v4Ev
  virtual void  v5(); // _ZN7S4760C32v5Ev
  S4760C3(); // tgen
};
//SIG(-1 S4760C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4760C3 ::~S4760C3(){ note_dtor("S4760C3", this);}
void  S4760C3 ::v3(){vfunc_called(this, "_ZN7S4760C32v3Ev");}
void  S4760C3 ::v4(){vfunc_called(this, "_ZN7S4760C32v4Ev");}
void  S4760C3 ::v5(){vfunc_called(this, "_ZN7S4760C32v5Ev");}
S4760C3 ::S4760C3(){ note_ctor("S4760C3", this);} // tgen

static void Test_S4760C3()
{
  extern Class_Descriptor cd_S4760C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4760C3, buf);
    S4760C3 *dp, &lv = *(dp=new (buf) S4760C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4760C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4760C3)");
    check_field_offset(lv, s4760c3f0, ABISELECT(8,4), "S4760C3.s4760c3f0");
    check_field_offset(lv, s4760c3f1, ABISELECT(24,16), "S4760C3.s4760c3f1");
    check_field_offset(lv, s4760c3f2, ABISELECT(32,24), "S4760C3.s4760c3f2");
    test_class_info(&lv, &cd_S4760C3);
    dp->~S4760C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4760C3(Test_S4760C3, "S4760C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4760C3C1Ev();
extern void _ZN7S4760C3D1Ev();
Name_Map name_map_S4760C3[] = {
  NSPAIR(_ZN7S4760C3C1Ev),
  NSPAIR(_ZN7S4760C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4760C3[];
extern void _ZN7S4760C3D1Ev();
extern void _ZN7S4760C3D0Ev();
extern void _ZN7S4760C32v3Ev();
extern void _ZN7S4760C32v4Ev();
extern void _ZN7S4760C32v5Ev();
static  VTBL_ENTRY vtc_S4760C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4760C3[0]),
  (VTBL_ENTRY)&_ZN7S4760C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4760C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4760C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4760C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4760C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4760C3[];
extern  VTBL_ENTRY _ZTV7S4760C3[];
Class_Descriptor cd_S4760C3 = {  "S4760C3", // class name
  0,0,//no base classes
  &(vtc_S4760C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4760C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4760C3),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  S4760C2  : S4760C3 {
  void *s4760c2f0;
  virtual void  v6(); // _ZN7S4760C22v6Ev
  virtual void  v7(); // _ZN7S4760C22v7Ev
  ~S4760C2(); // tgen
  S4760C2(); // tgen
};
//SIG(-1 S4760C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4760C2 ::v6(){vfunc_called(this, "_ZN7S4760C22v6Ev");}
void  S4760C2 ::v7(){vfunc_called(this, "_ZN7S4760C22v7Ev");}
S4760C2 ::~S4760C2(){ note_dtor("S4760C2", this);} // tgen
S4760C2 ::S4760C2(){ note_ctor("S4760C2", this);} // tgen

static void Test_S4760C2()
{
  extern Class_Descriptor cd_S4760C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4760C2, buf);
    S4760C2 *dp, &lv = *(dp=new (buf) S4760C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4760C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4760C2)");
    check_base_class_offset(lv, (S4760C3*), 0, "S4760C2");
    check_field_offset(lv, s4760c2f0, ABISELECT(40,28), "S4760C2.s4760c2f0");
    test_class_info(&lv, &cd_S4760C2);
    dp->~S4760C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4760C2(Test_S4760C2, "S4760C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4760C2C1Ev();
extern void _ZN7S4760C2D1Ev();
Name_Map name_map_S4760C2[] = {
  NSPAIR(_ZN7S4760C2C1Ev),
  NSPAIR(_ZN7S4760C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4760C3;
extern VTBL_ENTRY _ZTI7S4760C3[];
extern  VTBL_ENTRY _ZTV7S4760C3[];
static Base_Class bases_S4760C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4760C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S4760C2[];
extern void _ZN7S4760C2D1Ev();
extern void _ZN7S4760C2D0Ev();
extern void _ZN7S4760C32v3Ev();
extern void _ZN7S4760C32v4Ev();
extern void _ZN7S4760C32v5Ev();
extern void _ZN7S4760C22v6Ev();
extern void _ZN7S4760C22v7Ev();
static  VTBL_ENTRY vtc_S4760C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4760C2[0]),
  (VTBL_ENTRY)&_ZN7S4760C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4760C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4760C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4760C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4760C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4760C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4760C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4760C2[];
extern  VTBL_ENTRY _ZTV7S4760C2[];
Class_Descriptor cd_S4760C2 = {  "S4760C2", // class name
  bases_S4760C2, 1,
  &(vtc_S4760C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4760C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4760C2),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  S4760C7_nt  {
  char s4760c7f0[20];
};
//SIG(-1 S4760C7_nt) C1{ Fc[20]}



//skip512 S4760C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4760C6_nt  {
  ::S4760C7_nt s4760c6f0;
  char s4760c6f1[16];
};
//SIG(-1 S4760C6_nt) C1{ FC2{ Fc[20]} Fc[16]}



//skip512 S4760C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4760C10_nt  {
  char s4760c10f0[52];
};
//SIG(-1 S4760C10_nt) C1{ Fc[52]}



//skip512 S4760C10_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4760C11_nt  {
  char s4760c11f0[128];
};
//SIG(-1 S4760C11_nt) C1{ Fc[128]}



//skip512 S4760C11_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4760C9_nt  {
  ::S4760C6_nt s4760c9f0;
  ::S4760C10_nt s4760c9f1;
  ::S4760C11_nt s4760c9f2;
};
//SIG(-1 S4760C9_nt) C1{ FC2{ FC3{ Fc[20]} Fc[16]} FC4{ Fc[52]} FC5{ Fc[128]}}



//skip512 S4760C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4760C12_nt  {
  char s4760c12f0[4];
};
//SIG(-1 S4760C12_nt) C1{ Fc[4]}



//skip512 S4760C12_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4760C13_nt  {
  int s4760c13f0[3];
  char s4760c13f1[4];
};
//SIG(-1 S4760C13_nt) C1{ Fi[3] Fc[4]}



//skip512 S4760C13_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4760C14_nt  {
  char s4760c14f0[64];
};
//SIG(-1 S4760C14_nt) C1{ Fc[64]}



//skip512 S4760C14_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4760C16_nt  {
  int s4760c16f0;
  int s4760c16f1;
};
//SIG(1 S4760C16_nt) C1{ Fi[2]}



//skip512 S4760C16_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4760C17_nt  {
  int s4760c17f0;
  int s4760c17f1;
  int s4760c17f2;
  char s4760c17f3[128];
};
//SIG(1 S4760C17_nt) C1{ Fi[3] Fc[128]}



//skip512 S4760C17_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S4760C15_nt  {
  ::S4760C16_nt s4760c15f0;
  __tsi64 s4760c15f1;
  ::S4760C17_nt s4760c15f2;
};
//SIG(1 S4760C15_nt) U1{ FC2{ Fi Fi} FL FC3{ Fi Fi Fi Fc[128]}}

#endif // __cplusplus
#ifdef __cplusplus

struct  S4760C8_nt  {
  ::S4760C9_nt s4760c8f0;
  ::S4760C12_nt s4760c8f1;
  ::S4760C13_nt s4760c8f2;
  int s4760c8f3;
  ::S4760C14_nt s4760c8f4;
  ::S4760C15_nt s4760c8f5;
  int s4760c8f6;
};
//SIG(-1 S4760C8_nt) C1{ FC2{ FC3{ FC4{ Fc[20]} Fc[16]} FC5{ Fc[52]} FC6{ Fc[128]}} FC7{ Fc[4]} FC8{ Fi[3] Fc[4]} Fi FC9{ Fc[64]} FU10{ FC11{ Fi Fi} FL FC12{ Fi Fi Fi Fc[128]}} Fi}



//skip512 S4760C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4760C18_nt  {
  __tsi64 s4760c18f0[4];
  void  mf4760c18(); // _ZN11S4760C18_nt9mf4760c18Ev
};
//SIG(-1 S4760C18_nt) C1{ m FL[4]}


void  S4760C18_nt ::mf4760c18(){}

//skip512 S4760C18_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S4760C1  : S4760C2 {
  ::S4760C6_nt s4760c1f0;
  ::S4760C6_nt s4760c1f1;
  ::S4760C8_nt s4760c1f2;
  int s4760c1f3;
  int s4760c1f4;
  ::S4760C18_nt s4760c1f5;
  virtual  ~S4760C1(); // _ZN7S4760C1D1Ev
  virtual void  v1(); // _ZN7S4760C12v1Ev
  virtual void  v2(); // _ZN7S4760C12v2Ev
  S4760C1(); // tgen
};
//SIG(1 S4760C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FC6{ FC7{ Fc[20]} Fc[16]} FC6 FC8{ FC9{ FC6 FC10{ Fc[52]} FC11{ Fc[128]}} FC12{ Fc[4]} FC13{ Fi[3] Fc[4]} Fi FC14{ Fc[64]} FU15{ FC16{ Fi Fi} FL FC17{ Fi Fi Fi Fc[128]}} Fi} Fi Fi FC18{ m FL[4]}}


 S4760C1 ::~S4760C1(){ note_dtor("S4760C1", this);}
void  S4760C1 ::v1(){vfunc_called(this, "_ZN7S4760C12v1Ev");}
void  S4760C1 ::v2(){vfunc_called(this, "_ZN7S4760C12v2Ev");}
S4760C1 ::S4760C1(){ note_ctor("S4760C1", this);} // tgen

static void Test_S4760C1()
{
  extern Class_Descriptor cd_S4760C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(78,149)];
    init_test(&cd_S4760C1, buf);
    S4760C1 *dp, &lv = *(dp=new (buf) S4760C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(616,592), "sizeof(S4760C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4760C1)");
    check_base_class_offset(lv, (S4760C3*)(S4760C2*), 0, "S4760C1");
    check_base_class_offset(lv, (S4760C2*), 0, "S4760C1");
    check_field_offset(lv, s4760c1f0, ABISELECT(48,32), "S4760C1.s4760c1f0");
    check_field_offset(lv, s4760c1f1, ABISELECT(84,68), "S4760C1.s4760c1f1");
    check_field_offset(lv, s4760c1f2, ABISELECT(120,104), "S4760C1.s4760c1f2");
    check_field_offset(lv, s4760c1f3, ABISELECT(576,552), "S4760C1.s4760c1f3");
    check_field_offset(lv, s4760c1f4, ABISELECT(580,556), "S4760C1.s4760c1f4");
    check_field_offset(lv, s4760c1f5, ABISELECT(584,560), "S4760C1.s4760c1f5");
    test_class_info(&lv, &cd_S4760C1);
    dp->~S4760C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4760C1(Test_S4760C1, "S4760C1", ABISELECT(616,592));

#else // __cplusplus

extern void _ZN7S4760C1C1Ev();
extern void _ZN7S4760C1D1Ev();
Name_Map name_map_S4760C1[] = {
  NSPAIR(_ZN7S4760C1C1Ev),
  NSPAIR(_ZN7S4760C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4760C3;
extern VTBL_ENTRY _ZTI7S4760C3[];
extern  VTBL_ENTRY _ZTV7S4760C3[];
extern Class_Descriptor cd_S4760C2;
extern VTBL_ENTRY _ZTI7S4760C2[];
extern  VTBL_ENTRY _ZTV7S4760C2[];
static Base_Class bases_S4760C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4760C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4760C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4760C1[];
extern void _ZN7S4760C1D1Ev();
extern void _ZN7S4760C1D0Ev();
extern void _ZN7S4760C32v3Ev();
extern void _ZN7S4760C32v4Ev();
extern void _ZN7S4760C32v5Ev();
extern void _ZN7S4760C22v6Ev();
extern void _ZN7S4760C22v7Ev();
extern void _ZN7S4760C12v1Ev();
extern void _ZN7S4760C12v2Ev();
static  VTBL_ENTRY vtc_S4760C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4760C1[0]),
  (VTBL_ENTRY)&_ZN7S4760C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4760C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4760C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4760C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4760C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4760C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4760C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4760C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4760C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4760C1[];
extern  VTBL_ENTRY _ZTV7S4760C1[];
Class_Descriptor cd_S4760C1 = {  "S4760C1", // class name
  bases_S4760C1, 2,
  &(vtc_S4760C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(616,592), // object size
  NSPAIRA(_ZTI7S4760C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4760C1),11, //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  S18976C6  {
  ::S7218C6 s18976c6f0;
  virtual void  v8(); // _ZN8S18976C62v8Ev
  virtual void  v9(); // _ZN8S18976C62v9Ev
  virtual void  v10(); // _ZN8S18976C63v10Ev
  ~S18976C6(); // tgen
  S18976C6(); // tgen
};
//SIG(-1 S18976C6) C1{ v1 v2 v3 FC2{ BC3{ BC4{ v11 v12 v13 v14 v15 v16 Fi} v17} v4 v5 v6 v7 v8 v9 v10}}


void  S18976C6 ::v8(){vfunc_called(this, "_ZN8S18976C62v8Ev");}
void  S18976C6 ::v9(){vfunc_called(this, "_ZN8S18976C62v9Ev");}
void  S18976C6 ::v10(){vfunc_called(this, "_ZN8S18976C63v10Ev");}
S18976C6 ::~S18976C6(){ note_dtor("S18976C6", this);} // tgen
S18976C6 ::S18976C6(){ note_ctor("S18976C6", this);} // tgen

static void Test_S18976C6()
{
  extern Class_Descriptor cd_S18976C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S18976C6, buf);
    S18976C6 *dp, &lv = *(dp=new (buf) S18976C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18976C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18976C6)");
    check_field_offset(lv, s18976c6f0, ABISELECT(8,4), "S18976C6.s18976c6f0");
    test_class_info(&lv, &cd_S18976C6);
    dp->~S18976C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18976C6(Test_S18976C6, "S18976C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S18976C6C1Ev();
extern void _ZN8S18976C6D1Ev();
Name_Map name_map_S18976C6[] = {
  NSPAIR(_ZN8S18976C6C1Ev),
  NSPAIR(_ZN8S18976C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18976C6[];
extern void _ZN8S18976C62v8Ev();
extern void _ZN8S18976C62v9Ev();
extern void _ZN8S18976C63v10Ev();
static  VTBL_ENTRY vtc_S18976C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18976C6[0]),
  (VTBL_ENTRY)&_ZN8S18976C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18976C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18976C63v10Ev,
};
extern VTBL_ENTRY _ZTI8S18976C6[];
extern  VTBL_ENTRY _ZTV8S18976C6[];
Class_Descriptor cd_S18976C6 = {  "S18976C6", // class name
  0,0,//no base classes
  &(vtc_S18976C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S18976C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18976C6),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  S18976C5  : S18976C6 {
  void *s18976c5f0;
  char s18976c5f1;
  virtual void  v11(); // _ZN8S18976C53v11Ev
  virtual void  v12(); // _ZN8S18976C53v12Ev
  virtual void  v13(); // _ZN8S18976C53v13Ev
  virtual void  v14(); // _ZN8S18976C53v14Ev
  ~S18976C5(); // tgen
  S18976C5(); // tgen
};
//SIG(-1 S18976C5) C1{ BC2{ v5 v6 v7 FC3{ BC4{ BC5{ v15 v16 v17 v18 v19 v20 Fi} v21} v8 v9 v10 v11 v12 v13 v14}} v1 v2 v3 v4 Fp Fc}


void  S18976C5 ::v11(){vfunc_called(this, "_ZN8S18976C53v11Ev");}
void  S18976C5 ::v12(){vfunc_called(this, "_ZN8S18976C53v12Ev");}
void  S18976C5 ::v13(){vfunc_called(this, "_ZN8S18976C53v13Ev");}
void  S18976C5 ::v14(){vfunc_called(this, "_ZN8S18976C53v14Ev");}
S18976C5 ::~S18976C5(){ note_dtor("S18976C5", this);} // tgen
S18976C5 ::S18976C5(){ note_ctor("S18976C5", this);} // tgen

static void Test_S18976C5()
{
  extern Class_Descriptor cd_S18976C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S18976C5, buf);
    S18976C5 *dp, &lv = *(dp=new (buf) S18976C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S18976C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18976C5)");
    check_base_class_offset(lv, (S18976C6*), 0, "S18976C5");
    check_field_offset(lv, s18976c5f0, ABISELECT(24,12), "S18976C5.s18976c5f0");
    check_field_offset(lv, s18976c5f1, ABISELECT(32,16), "S18976C5.s18976c5f1");
    test_class_info(&lv, &cd_S18976C5);
    dp->~S18976C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18976C5(Test_S18976C5, "S18976C5", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S18976C5C1Ev();
extern void _ZN8S18976C5D1Ev();
Name_Map name_map_S18976C5[] = {
  NSPAIR(_ZN8S18976C5C1Ev),
  NSPAIR(_ZN8S18976C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18976C6;
extern VTBL_ENTRY _ZTI8S18976C6[];
extern  VTBL_ENTRY _ZTV8S18976C6[];
static Base_Class bases_S18976C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18976C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S18976C5[];
extern void _ZN8S18976C62v8Ev();
extern void _ZN8S18976C62v9Ev();
extern void _ZN8S18976C63v10Ev();
extern void _ZN8S18976C53v11Ev();
extern void _ZN8S18976C53v12Ev();
extern void _ZN8S18976C53v13Ev();
extern void _ZN8S18976C53v14Ev();
static  VTBL_ENTRY vtc_S18976C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18976C5[0]),
  (VTBL_ENTRY)&_ZN8S18976C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18976C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18976C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v14Ev,
};
extern VTBL_ENTRY _ZTI8S18976C5[];
extern  VTBL_ENTRY _ZTV8S18976C5[];
Class_Descriptor cd_S18976C5 = {  "S18976C5", // class name
  bases_S18976C5, 1,
  &(vtc_S18976C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S18976C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S18976C5),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  S18976C9  {
  int s18976c9f0;
  virtual void  v15(); // _ZN8S18976C93v15Ev
  virtual void  v16(); // _ZN8S18976C93v16Ev
  virtual void  v17(); // _ZN8S18976C93v17Ev
  virtual void  v18(); // _ZN8S18976C93v18Ev
  virtual void  v19(); // _ZN8S18976C93v19Ev
  virtual void  v20(); // _ZN8S18976C93v20Ev
  ~S18976C9(); // tgen
  S18976C9(); // tgen
};
//SIG(-1 S18976C9) C1{ v1 v2 v3 v4 v5 v6 Fi}


void  S18976C9 ::v15(){vfunc_called(this, "_ZN8S18976C93v15Ev");}
void  S18976C9 ::v16(){vfunc_called(this, "_ZN8S18976C93v16Ev");}
void  S18976C9 ::v17(){vfunc_called(this, "_ZN8S18976C93v17Ev");}
void  S18976C9 ::v18(){vfunc_called(this, "_ZN8S18976C93v18Ev");}
void  S18976C9 ::v19(){vfunc_called(this, "_ZN8S18976C93v19Ev");}
void  S18976C9 ::v20(){vfunc_called(this, "_ZN8S18976C93v20Ev");}
S18976C9 ::~S18976C9(){ note_dtor("S18976C9", this);} // tgen
S18976C9 ::S18976C9(){ note_ctor("S18976C9", this);} // tgen

static void Test_S18976C9()
{
  extern Class_Descriptor cd_S18976C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S18976C9, buf);
    S18976C9 *dp, &lv = *(dp=new (buf) S18976C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S18976C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18976C9)");
    check_field_offset(lv, s18976c9f0, ABISELECT(8,4), "S18976C9.s18976c9f0");
    test_class_info(&lv, &cd_S18976C9);
    dp->~S18976C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18976C9(Test_S18976C9, "S18976C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S18976C9C1Ev();
extern void _ZN8S18976C9D1Ev();
Name_Map name_map_S18976C9[] = {
  NSPAIR(_ZN8S18976C9C1Ev),
  NSPAIR(_ZN8S18976C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18976C9[];
extern void _ZN8S18976C93v15Ev();
extern void _ZN8S18976C93v16Ev();
extern void _ZN8S18976C93v17Ev();
extern void _ZN8S18976C93v18Ev();
extern void _ZN8S18976C93v19Ev();
extern void _ZN8S18976C93v20Ev();
static  VTBL_ENTRY vtc_S18976C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18976C9[0]),
  (VTBL_ENTRY)&_ZN8S18976C93v15Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v16Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v17Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v20Ev,
};
extern VTBL_ENTRY _ZTI8S18976C9[];
extern  VTBL_ENTRY _ZTV8S18976C9[];
Class_Descriptor cd_S18976C9 = {  "S18976C9", // class name
  0,0,//no base classes
  &(vtc_S18976C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S18976C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18976C9),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  S18976C4  : S18976C5 , S18976C9 {
  void *s18976c4f0[2];
  virtual  ~S18976C4(); // _ZN8S18976C4D1Ev
  virtual void  v21(); // _ZN8S18976C43v21Ev
  virtual void  v22(); // _ZN8S18976C43v22Ev
  virtual void  v23(); // _ZN8S18976C43v23Ev
  virtual void  v24(); // _ZN8S18976C43v24Ev
  virtual void  v25(); // _ZN8S18976C43v25Ev
  virtual void  v26(); // _ZN8S18976C43v26Ev
  virtual void  v27(); // _ZN8S18976C43v27Ev
  virtual void  v28(); // _ZN8S18976C43v28Ev
  S18976C4(); // tgen
};
//SIG(-1 S18976C4) C1{ BC2{ BC3{ v9 v10 v11 FC4{ BC5{ BC6{ v29 v30 v31 v32 v33 v34 Fi} v35} v22 v23 v24 v25 v26 v27 v28}} v12 v13 v14 v15 Fp Fc} BC7{ v16 v17 v18 v19 v20 v21 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[2]}


 S18976C4 ::~S18976C4(){ note_dtor("S18976C4", this);}
void  S18976C4 ::v21(){vfunc_called(this, "_ZN8S18976C43v21Ev");}
void  S18976C4 ::v22(){vfunc_called(this, "_ZN8S18976C43v22Ev");}
void  S18976C4 ::v23(){vfunc_called(this, "_ZN8S18976C43v23Ev");}
void  S18976C4 ::v24(){vfunc_called(this, "_ZN8S18976C43v24Ev");}
void  S18976C4 ::v25(){vfunc_called(this, "_ZN8S18976C43v25Ev");}
void  S18976C4 ::v26(){vfunc_called(this, "_ZN8S18976C43v26Ev");}
void  S18976C4 ::v27(){vfunc_called(this, "_ZN8S18976C43v27Ev");}
void  S18976C4 ::v28(){vfunc_called(this, "_ZN8S18976C43v28Ev");}
S18976C4 ::S18976C4(){ note_ctor("S18976C4", this);} // tgen

static void Test_S18976C4()
{
  extern Class_Descriptor cd_S18976C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S18976C4, buf);
    S18976C4 *dp, &lv = *(dp=new (buf) S18976C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S18976C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18976C4)");
    check_base_class_offset(lv, (S18976C6*)(S18976C5*), 0, "S18976C4");
    check_base_class_offset(lv, (S18976C5*), 0, "S18976C4");
    check_base_class_offset(lv, (S18976C9*), ABISELECT(40,20), "S18976C4");
    check_field_offset(lv, s18976c4f0, ABISELECT(56,28), "S18976C4.s18976c4f0");
    test_class_info(&lv, &cd_S18976C4);
    dp->~S18976C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18976C4(Test_S18976C4, "S18976C4", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S18976C4C1Ev();
extern void _ZN8S18976C4D1Ev();
Name_Map name_map_S18976C4[] = {
  NSPAIR(_ZN8S18976C4C1Ev),
  NSPAIR(_ZN8S18976C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18976C6;
extern VTBL_ENTRY _ZTI8S18976C6[];
extern  VTBL_ENTRY _ZTV8S18976C6[];
extern Class_Descriptor cd_S18976C5;
extern VTBL_ENTRY _ZTI8S18976C5[];
extern  VTBL_ENTRY _ZTV8S18976C5[];
extern Class_Descriptor cd_S18976C9;
extern VTBL_ENTRY _ZTI8S18976C9[];
extern  VTBL_ENTRY _ZTV8S18976C9[];
static Base_Class bases_S18976C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18976C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S18976C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18976C9,    ABISELECT(40,20), //bcp->offset
    19, //bcp->virtual_function_table_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 _ZTI8S18976C4[];
extern void _ZN8S18976C62v8Ev();
extern void _ZN8S18976C62v9Ev();
extern void _ZN8S18976C63v10Ev();
extern void _ZN8S18976C53v11Ev();
extern void _ZN8S18976C53v12Ev();
extern void _ZN8S18976C53v13Ev();
extern void _ZN8S18976C53v14Ev();
extern void _ZN8S18976C4D1Ev();
extern void _ZN8S18976C4D0Ev();
extern void _ZN8S18976C43v21Ev();
extern void _ZN8S18976C43v22Ev();
extern void _ZN8S18976C43v23Ev();
extern void _ZN8S18976C43v24Ev();
extern void _ZN8S18976C43v25Ev();
extern void _ZN8S18976C43v26Ev();
extern void _ZN8S18976C43v27Ev();
extern void _ZN8S18976C43v28Ev();
extern void _ZN8S18976C93v15Ev();
extern void _ZN8S18976C93v16Ev();
extern void _ZN8S18976C93v17Ev();
extern void _ZN8S18976C93v18Ev();
extern void _ZN8S18976C93v19Ev();
extern void _ZN8S18976C93v20Ev();
static  VTBL_ENTRY vtc_S18976C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18976C4[0]),
  (VTBL_ENTRY)&_ZN8S18976C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18976C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18976C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18976C4D1Ev,
  (VTBL_ENTRY)&_ZN8S18976C4D0Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v25Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v26Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v27Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v28Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S18976C4[0]),
  (VTBL_ENTRY)&_ZN8S18976C93v15Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v16Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v17Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v20Ev,
};
extern VTBL_ENTRY _ZTI8S18976C4[];
extern  VTBL_ENTRY _ZTV8S18976C4[];
Class_Descriptor cd_S18976C4 = {  "S18976C4", // class name
  bases_S18976C4, 3,
  &(vtc_S18976C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S18976C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18976C4),27, //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  S18976C3  : S18976C4 , virtual S18976C5 {
  __tsi64  :0;
  virtual  ~S18976C3(); // _ZN8S18976C3D2Ev
  virtual void  v29(); // _ZN8S18976C33v29Ev
  S18976C3(); // tgen
};
//SIG(-1 S18976C3) C1{ BC2{ BC3{ BC4{ v2 v3 v4 FC5{ BC6{ BC7{ v30 v31 v32 v33 v34 v35 Fi} v36} v23 v24 v25 v26 v27 v28 v29}} v5 v6 v7 v8 Fp Fc} BC8{ v9 v10 v11 v12 v13 v14 Fi} vd v15 v16 v17 v18 v19 v20 v21 v22 Fp[2]} VBC3 vd v1 FL:0}


 S18976C3 ::~S18976C3(){ note_dtor("S18976C3", this);}
void  S18976C3 ::v29(){vfunc_called(this, "_ZN8S18976C33v29Ev");}
S18976C3 ::S18976C3(){ note_ctor("S18976C3", this);} // tgen

static void Test_S18976C3()
{
  extern Class_Descriptor cd_S18976C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,15)];
    init_test(&cd_S18976C3, buf);
    S18976C3 *dp, &lv = *(dp=new (buf) S18976C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S18976C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18976C3)");
    check_base_class_offset(lv, (S18976C6*)(S18976C5*)(S18976C4*), 0, "S18976C3");
    check_base_class_offset(lv, (S18976C5*)(S18976C4*), 0, "S18976C3");
    check_base_class_offset(lv, (S18976C9*)(S18976C4*), ABISELECT(40,20), "S18976C3");
    check_base_class_offset(lv, (S18976C4*), 0, "S18976C3");
    /*is_ambiguous_... S18976C3::S18976C5 */ AMB_check_base_class_offset(lv, (S18976C6*)(S18976C5*), ABISELECT(72,36), "S18976C3");
    /*is_ambiguous_... S18976C3::S18976C5 */ AMB_check_base_class_offset(lv, (S18976C5*), ABISELECT(72,36), "S18976C3");
    test_class_info(&lv, &cd_S18976C3);
    dp->~S18976C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18976C3(Test_S18976C3, "S18976C3", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN8S18976C3C1Ev();
extern void _ZN8S18976C3D2Ev();
Name_Map name_map_S18976C3[] = {
  NSPAIR(_ZN8S18976C3C1Ev),
  NSPAIR(_ZN8S18976C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18976C6;
extern VTBL_ENTRY _ZTI8S18976C6[];
extern  VTBL_ENTRY _ZTV8S18976C6[];
extern Class_Descriptor cd_S18976C5;
extern VTBL_ENTRY _ZTI8S18976C5[];
extern  VTBL_ENTRY _ZTV8S18976C5[];
extern Class_Descriptor cd_S18976C9;
extern VTBL_ENTRY _ZTI8S18976C9[];
extern  VTBL_ENTRY _ZTV8S18976C9[];
extern Class_Descriptor cd_S18976C4;
extern VTBL_ENTRY _ZTI8S18976C4[];
extern  VTBL_ENTRY _ZTV8S18976C4[];
extern Class_Descriptor cd_S18976C6;
extern VTBL_ENTRY _ZTI8S18976C6[];
extern  VTBL_ENTRY _ZTV8S18976C6[];
extern Class_Descriptor cd_S18976C5;
extern VTBL_ENTRY _ZTI8S18976C5[];
extern  VTBL_ENTRY _ZTV8S18976C5[];
static Base_Class bases_S18976C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18976C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S18976C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S18976C9,    ABISELECT(40,20), //bcp->offset
    21, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S18976C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S18976C6,    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_S18976C5,    ABISELECT(72,36), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S18976C3[];
extern void _ZN8S18976C62v8Ev();
extern void _ZN8S18976C62v9Ev();
extern void _ZN8S18976C63v10Ev();
extern void _ZN8S18976C53v11Ev();
extern void _ZN8S18976C53v12Ev();
extern void _ZN8S18976C53v13Ev();
extern void _ZN8S18976C53v14Ev();
extern void _ZN8S18976C3D1Ev();
extern void _ZN8S18976C3D0Ev();
extern void _ZN8S18976C43v21Ev();
extern void _ZN8S18976C43v22Ev();
extern void _ZN8S18976C43v23Ev();
extern void _ZN8S18976C43v24Ev();
extern void _ZN8S18976C43v25Ev();
extern void _ZN8S18976C43v26Ev();
extern void _ZN8S18976C43v27Ev();
extern void _ZN8S18976C43v28Ev();
extern void _ZN8S18976C33v29Ev();
extern void _ZN8S18976C93v15Ev();
extern void _ZN8S18976C93v16Ev();
extern void _ZN8S18976C93v17Ev();
extern void _ZN8S18976C93v18Ev();
extern void _ZN8S18976C93v19Ev();
extern void _ZN8S18976C93v20Ev();
extern void _ZN8S18976C62v8Ev();
extern void _ZN8S18976C62v9Ev();
extern void _ZN8S18976C63v10Ev();
extern void _ZN8S18976C53v11Ev();
extern void _ZN8S18976C53v12Ev();
extern void _ZN8S18976C53v13Ev();
extern void _ZN8S18976C53v14Ev();
static  VTBL_ENTRY vtc_S18976C3[] = {
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S18976C3[0]),
  (VTBL_ENTRY)&_ZN8S18976C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18976C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18976C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18976C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18976C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v25Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v26Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v27Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18976C33v29Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S18976C3[0]),
  (VTBL_ENTRY)&_ZN8S18976C93v15Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v16Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v17Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S18976C3[0]),
  (VTBL_ENTRY)&_ZN8S18976C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18976C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18976C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v14Ev,
};
extern VTBL_ENTRY _ZTV8S18976C3[];
static  VTT_ENTRY vtt_S18976C3[] = {
  {&(_ZTV8S18976C3[3]),  3,45},
  {&(_ZTV8S18976C3[38]),  38,45},
};
extern VTBL_ENTRY _ZTI8S18976C3[];
extern  VTBL_ENTRY _ZTV8S18976C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18976C3[];
Class_Descriptor cd_S18976C3 = {  "S18976C3", // class name
  bases_S18976C3, 6,
  &(vtc_S18976C3[0]), // expected_vtbl_contents
  &(vtt_S18976C3[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI8S18976C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18976C3),45, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18976C3),2, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18976C8  : S18976C9 {
  virtual void  v39(); // _ZN8S18976C83v39Ev
  ~S18976C8(); // tgen
  S18976C8(); // tgen
};
//SIG(-1 S18976C8) C1{ BC2{ v2 v3 v4 v5 v6 v7 Fi} v1}


void  S18976C8 ::v39(){vfunc_called(this, "_ZN8S18976C83v39Ev");}
S18976C8 ::~S18976C8(){ note_dtor("S18976C8", this);} // tgen
S18976C8 ::S18976C8(){ note_ctor("S18976C8", this);} // tgen

static void Test_S18976C8()
{
  extern Class_Descriptor cd_S18976C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S18976C8, buf);
    S18976C8 *dp, &lv = *(dp=new (buf) S18976C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S18976C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18976C8)");
    check_base_class_offset(lv, (S18976C9*), 0, "S18976C8");
    test_class_info(&lv, &cd_S18976C8);
    dp->~S18976C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18976C8(Test_S18976C8, "S18976C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S18976C8C1Ev();
extern void _ZN8S18976C8D1Ev();
Name_Map name_map_S18976C8[] = {
  NSPAIR(_ZN8S18976C8C1Ev),
  NSPAIR(_ZN8S18976C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18976C9;
extern VTBL_ENTRY _ZTI8S18976C9[];
extern  VTBL_ENTRY _ZTV8S18976C9[];
static Base_Class bases_S18976C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18976C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S18976C8[];
extern void _ZN8S18976C93v15Ev();
extern void _ZN8S18976C93v16Ev();
extern void _ZN8S18976C93v17Ev();
extern void _ZN8S18976C93v18Ev();
extern void _ZN8S18976C93v19Ev();
extern void _ZN8S18976C93v20Ev();
extern void _ZN8S18976C83v39Ev();
static  VTBL_ENTRY vtc_S18976C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18976C8[0]),
  (VTBL_ENTRY)&_ZN8S18976C93v15Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v16Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v17Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v20Ev,
  (VTBL_ENTRY)&_ZN8S18976C83v39Ev,
};
extern VTBL_ENTRY _ZTI8S18976C8[];
extern  VTBL_ENTRY _ZTV8S18976C8[];
Class_Descriptor cd_S18976C8 = {  "S18976C8", // class name
  bases_S18976C8, 1,
  &(vtc_S18976C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S18976C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S18976C8),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18976C2  : S18976C3 {
  ::S18976C8 s18976c2f0;
  ::S18976C9 s18976c2f1;
  virtual  ~S18976C2(); // _ZN8S18976C2D2Ev
  virtual void  v30(); // _ZN8S18976C23v30Ev
  virtual void  v31(); // _ZN8S18976C23v31Ev
  S18976C2(); // tgen
};
//SIG(-1 S18976C2) C1{ BC2{ BC3{ BC4{ BC5{ v3 v4 v5 FC6{ BC7{ BC8{ v32 v33 v34 v35 v36 v37 Fi} v38} v25 v26 v27 v28 v29 v30 v31}} v6 v7 v8 v9 Fp Fc} BC9{ v10 v11 v12 v13 v14 v15 Fi} vd v16 v17 v18 v19 v20 v21 v22 v23 Fp[2]} VBC4 vd v24 FL:0} vd v1 v2 FC10{ BC9 v39} FC9}


 S18976C2 ::~S18976C2(){ note_dtor("S18976C2", this);}
void  S18976C2 ::v30(){vfunc_called(this, "_ZN8S18976C23v30Ev");}
void  S18976C2 ::v31(){vfunc_called(this, "_ZN8S18976C23v31Ev");}
S18976C2 ::S18976C2(){ note_ctor("S18976C2", this);} // tgen

static void Test_S18976C2()
{
  extern Class_Descriptor cd_S18976C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,19)];
    init_test(&cd_S18976C2, buf);
    S18976C2 *dp, &lv = *(dp=new (buf) S18976C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,72), "sizeof(S18976C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18976C2)");
    check_base_class_offset(lv, (S18976C6*)(S18976C5*)(S18976C4*)(S18976C3*), 0, "S18976C2");
    check_base_class_offset(lv, (S18976C5*)(S18976C4*)(S18976C3*), 0, "S18976C2");
    check_base_class_offset(lv, (S18976C9*)(S18976C4*)(S18976C3*), ABISELECT(40,20), "S18976C2");
    check_base_class_offset(lv, (S18976C4*)(S18976C3*), 0, "S18976C2");
    /*is_ambiguous_... S18976C2::S18976C5 */ AMB_check_base_class_offset(lv, (S18976C6*)(S18976C5*), ABISELECT(104,52), "S18976C2");
    /*is_ambiguous_... S18976C3::S18976C5 */ AMB_check_base_class_offset(lv, (S18976C5*)(S18976C3*), ABISELECT(104,52), "S18976C2");
    check_base_class_offset(lv, (S18976C3*), 0, "S18976C2");
    check_field_offset(lv, s18976c2f0, ABISELECT(72,36), "S18976C2.s18976c2f0");
    check_field_offset(lv, s18976c2f1, ABISELECT(88,44), "S18976C2.s18976c2f1");
    test_class_info(&lv, &cd_S18976C2);
    dp->~S18976C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18976C2(Test_S18976C2, "S18976C2", ABISELECT(144,72));

#else // __cplusplus

extern void _ZN8S18976C2C1Ev();
extern void _ZN8S18976C2D2Ev();
Name_Map name_map_S18976C2[] = {
  NSPAIR(_ZN8S18976C2C1Ev),
  NSPAIR(_ZN8S18976C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18976C6;
extern VTBL_ENTRY _ZTI8S18976C6[];
extern  VTBL_ENTRY _ZTV8S18976C6[];
extern Class_Descriptor cd_S18976C5;
extern VTBL_ENTRY _ZTI8S18976C5[];
extern  VTBL_ENTRY _ZTV8S18976C5[];
extern Class_Descriptor cd_S18976C9;
extern VTBL_ENTRY _ZTI8S18976C9[];
extern  VTBL_ENTRY _ZTV8S18976C9[];
extern Class_Descriptor cd_S18976C4;
extern VTBL_ENTRY _ZTI8S18976C4[];
extern  VTBL_ENTRY _ZTV8S18976C4[];
extern Class_Descriptor cd_S18976C6;
extern VTBL_ENTRY _ZTI8S18976C6[];
extern  VTBL_ENTRY _ZTV8S18976C6[];
extern Class_Descriptor cd_S18976C5;
extern VTBL_ENTRY _ZTI8S18976C5[];
extern  VTBL_ENTRY _ZTV8S18976C5[];
extern Class_Descriptor cd_S18976C3;
extern VTBL_ENTRY _ZTI8S18976C3[];
extern  VTBL_ENTRY _ZTV8S18976C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18976C3[];
static Base_Class bases_S18976C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18976C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S18976C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S18976C9,    ABISELECT(40,20), //bcp->offset
    23, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S18976C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S18976C6,    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
    5, //immediately_derived
  0, 0},
  {&cd_S18976C5,    ABISELECT(104,52), //bcp->offset
    31, //bcp->virtual_function_table_offset
    9, //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
    6, //immediately_derived
  0, 1},
  {&cd_S18976C3,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S18976C2[];
extern void _ZN8S18976C62v8Ev();
extern void _ZN8S18976C62v9Ev();
extern void _ZN8S18976C63v10Ev();
extern void _ZN8S18976C53v11Ev();
extern void _ZN8S18976C53v12Ev();
extern void _ZN8S18976C53v13Ev();
extern void _ZN8S18976C53v14Ev();
extern void _ZN8S18976C2D1Ev();
extern void _ZN8S18976C2D0Ev();
extern void _ZN8S18976C43v21Ev();
extern void _ZN8S18976C43v22Ev();
extern void _ZN8S18976C43v23Ev();
extern void _ZN8S18976C43v24Ev();
extern void _ZN8S18976C43v25Ev();
extern void _ZN8S18976C43v26Ev();
extern void _ZN8S18976C43v27Ev();
extern void _ZN8S18976C43v28Ev();
extern void _ZN8S18976C33v29Ev();
extern void _ZN8S18976C23v30Ev();
extern void _ZN8S18976C23v31Ev();
extern void _ZN8S18976C93v15Ev();
extern void _ZN8S18976C93v16Ev();
extern void _ZN8S18976C93v17Ev();
extern void _ZN8S18976C93v18Ev();
extern void _ZN8S18976C93v19Ev();
extern void _ZN8S18976C93v20Ev();
extern void _ZN8S18976C62v8Ev();
extern void _ZN8S18976C62v9Ev();
extern void _ZN8S18976C63v10Ev();
extern void _ZN8S18976C53v11Ev();
extern void _ZN8S18976C53v12Ev();
extern void _ZN8S18976C53v13Ev();
extern void _ZN8S18976C53v14Ev();
static  VTBL_ENTRY vtc_S18976C2[] = {
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S18976C2[0]),
  (VTBL_ENTRY)&_ZN8S18976C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18976C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18976C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18976C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18976C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v25Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v26Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v27Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18976C33v29Ev,
  (VTBL_ENTRY)&_ZN8S18976C23v30Ev,
  (VTBL_ENTRY)&_ZN8S18976C23v31Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S18976C2[0]),
  (VTBL_ENTRY)&_ZN8S18976C93v15Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v16Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v17Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S18976C2[0]),
  (VTBL_ENTRY)&_ZN8S18976C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18976C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18976C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v14Ev,
};
extern VTBL_ENTRY _ZTV8S18976C2[];
extern void _ZN8S18976C62v8Ev();
extern void _ZN8S18976C62v9Ev();
extern void _ZN8S18976C63v10Ev();
extern void _ZN8S18976C53v11Ev();
extern void _ZN8S18976C53v12Ev();
extern void _ZN8S18976C53v13Ev();
extern void _ZN8S18976C53v14Ev();
extern void _ZN8S18976C3D1Ev();
extern void _ZN8S18976C3D0Ev();
extern void _ZN8S18976C43v21Ev();
extern void _ZN8S18976C43v22Ev();
extern void _ZN8S18976C43v23Ev();
extern void _ZN8S18976C43v24Ev();
extern void _ZN8S18976C43v25Ev();
extern void _ZN8S18976C43v26Ev();
extern void _ZN8S18976C43v27Ev();
extern void _ZN8S18976C43v28Ev();
extern void _ZN8S18976C33v29Ev();
static  VTBL_ENTRY _tg__ZTV8S18976C3__8S18976C2[] = {
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S18976C3[0]),
  (VTBL_ENTRY)&_ZN8S18976C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18976C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18976C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18976C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18976C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v25Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v26Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v27Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18976C33v29Ev,
};
extern void _ZN8S18976C62v8Ev();
extern void _ZN8S18976C62v9Ev();
extern void _ZN8S18976C63v10Ev();
extern void _ZN8S18976C53v11Ev();
extern void _ZN8S18976C53v12Ev();
extern void _ZN8S18976C53v13Ev();
extern void _ZN8S18976C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S18976C5__A1__8S18976C3__8S18976C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S18976C3[0]),
  (VTBL_ENTRY)&_ZN8S18976C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18976C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18976C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v14Ev,
};
static  VTT_ENTRY vtt_S18976C2[] = {
  {&(_ZTV8S18976C2[3]),  3,47},
  {&(_tg__ZTV8S18976C3__8S18976C2[3]),  3,21},
  {&(_tg__ZTV8S18976C5__A1__8S18976C3__8S18976C2[9]),  9,16},
  {&(_ZTV8S18976C2[40]),  40,47},
};
extern VTBL_ENTRY _ZTI8S18976C2[];
extern  VTBL_ENTRY _ZTV8S18976C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18976C2[];
Class_Descriptor cd_S18976C2 = {  "S18976C2", // class name
  bases_S18976C2, 7,
  &(vtc_S18976C2[0]), // expected_vtbl_contents
  &(vtt_S18976C2[0]), // expected_vtt_contents
  ABISELECT(144,72), // object size
  NSPAIRA(_ZTI8S18976C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S18976C2),47, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18976C2),4, //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  S18976C1  : virtual S18976C2 , S18976C5 {
  virtual  ~S18976C1(); // _ZN8S18976C1D2Ev
  virtual void  v1(); // _ZN8S18976C12v1Ev
  virtual void  v2(); // _ZN8S18976C12v2Ev
  virtual void  v3(); // _ZN8S18976C12v3Ev
  virtual void  v4(); // _ZN8S18976C12v4Ev
  virtual void  v5(); // _ZN8S18976C12v5Ev
  virtual void  v6(); // _ZN8S18976C12v6Ev
  virtual void  v7(); // _ZN8S18976C12v7Ev
  S18976C1(); // tgen
};
//SIG(1 S18976C1) C1{ VBC2{ BC3{ BC4{ BC5{ BC6{ v8 v9 v10 FC7{ BC8{ BC9{ v39 v40 v41 v42 v43 v44 Fi} v45} v32 v33 v34 v35 v36 v37 v38}} v11 v12 v13 v14 Fp Fc} BC10{ v15 v16 v17 v18 v19 v20 Fi} vd v21 v22 v23 v24 v25 v26 v27 v28 Fp[2]} VBC5 vd v29 FL:0} vd v30 v31 FC11{ BC10 v46} FC10} BC5 vd v1 v2 v3 v4 v5 v6 v7}


 S18976C1 ::~S18976C1(){ note_dtor("S18976C1", this);}
void  S18976C1 ::v1(){vfunc_called(this, "_ZN8S18976C12v1Ev");}
void  S18976C1 ::v2(){vfunc_called(this, "_ZN8S18976C12v2Ev");}
void  S18976C1 ::v3(){vfunc_called(this, "_ZN8S18976C12v3Ev");}
void  S18976C1 ::v4(){vfunc_called(this, "_ZN8S18976C12v4Ev");}
void  S18976C1 ::v5(){vfunc_called(this, "_ZN8S18976C12v5Ev");}
void  S18976C1 ::v6(){vfunc_called(this, "_ZN8S18976C12v6Ev");}
void  S18976C1 ::v7(){vfunc_called(this, "_ZN8S18976C12v7Ev");}
S18976C1 ::S18976C1(){ note_ctor("S18976C1", this);} // tgen

static void Test_S18976C1()
{
  extern Class_Descriptor cd_S18976C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,24)];
    init_test(&cd_S18976C1, buf);
    S18976C1 *dp, &lv = *(dp=new (buf) S18976C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,92), "sizeof(S18976C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18976C1)");
    check_base_class_offset(lv, (S18976C6*)(S18976C5*)(S18976C4*)(S18976C3*)(S18976C2*), ABISELECT(40,20), "S18976C1");
    check_base_class_offset(lv, (S18976C5*)(S18976C4*)(S18976C3*)(S18976C2*), ABISELECT(40,20), "S18976C1");
    check_base_class_offset(lv, (S18976C9*)(S18976C4*)(S18976C3*)(S18976C2*), ABISELECT(80,40), "S18976C1");
    check_base_class_offset(lv, (S18976C4*)(S18976C3*)(S18976C2*), ABISELECT(40,20), "S18976C1");
    /*is_ambiguous_... S18976C1::S18976C5 */ AMB_check_base_class_offset(lv, (S18976C6*)(S18976C5*), ABISELECT(144,72), "S18976C1");
    /*is_ambiguous_... S18976C3::S18976C5 */ AMB_check_base_class_offset(lv, (S18976C5*)(S18976C3*)(S18976C2*), ABISELECT(144,72), "S18976C1");
    check_base_class_offset(lv, (S18976C3*)(S18976C2*), ABISELECT(40,20), "S18976C1");
    check_base_class_offset(lv, (S18976C2*), ABISELECT(40,20), "S18976C1");
    /*is_ambiguous_... S18976C1::S18976C5 */ AMB_check_base_class_offset(lv, (S18976C6*)(S18976C5*), 0, "S18976C1");
    /*is_ambiguous_... S18976C1::S18976C5 */ AMB_check_base_class_offset(lv, (S18976C5*), 0, "S18976C1");
    test_class_info(&lv, &cd_S18976C1);
    dp->~S18976C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18976C1(Test_S18976C1, "S18976C1", ABISELECT(184,92));

#else // __cplusplus

extern void _ZN8S18976C1C1Ev();
extern void _ZN8S18976C1D2Ev();
Name_Map name_map_S18976C1[] = {
  NSPAIR(_ZN8S18976C1C1Ev),
  NSPAIR(_ZN8S18976C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18976C6;
extern VTBL_ENTRY _ZTI8S18976C6[];
extern  VTBL_ENTRY _ZTV8S18976C6[];
extern Class_Descriptor cd_S18976C5;
extern VTBL_ENTRY _ZTI8S18976C5[];
extern  VTBL_ENTRY _ZTV8S18976C5[];
extern Class_Descriptor cd_S18976C9;
extern VTBL_ENTRY _ZTI8S18976C9[];
extern  VTBL_ENTRY _ZTV8S18976C9[];
extern Class_Descriptor cd_S18976C4;
extern VTBL_ENTRY _ZTI8S18976C4[];
extern  VTBL_ENTRY _ZTV8S18976C4[];
extern Class_Descriptor cd_S18976C6;
extern VTBL_ENTRY _ZTI8S18976C6[];
extern  VTBL_ENTRY _ZTV8S18976C6[];
extern Class_Descriptor cd_S18976C5;
extern VTBL_ENTRY _ZTI8S18976C5[];
extern  VTBL_ENTRY _ZTV8S18976C5[];
extern Class_Descriptor cd_S18976C3;
extern VTBL_ENTRY _ZTI8S18976C3[];
extern  VTBL_ENTRY _ZTV8S18976C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18976C3[];
extern Class_Descriptor cd_S18976C2;
extern VTBL_ENTRY _ZTI8S18976C2[];
extern  VTBL_ENTRY _ZTV8S18976C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18976C2[];
extern Class_Descriptor cd_S18976C6;
extern VTBL_ENTRY _ZTI8S18976C6[];
extern  VTBL_ENTRY _ZTV8S18976C6[];
extern Class_Descriptor cd_S18976C5;
extern VTBL_ENTRY _ZTI8S18976C5[];
extern  VTBL_ENTRY _ZTV8S18976C5[];
static Base_Class bases_S18976C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18976C6,    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
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S18976C5,    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
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S18976C9,    ABISELECT(80,40), //bcp->offset
    68, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S18976C4,    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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S18976C6,    ABISELECT(144,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
    5, //immediately_derived
  0, 0},
  {&cd_S18976C5,    ABISELECT(144,72), //bcp->offset
    76, //bcp->virtual_function_table_offset
    9, //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
    6, //immediately_derived
  0, 1},
  {&cd_S18976C3,    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
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S18976C2,    ABISELECT(40,20), //bcp->offset
    20, //bcp->virtual_function_table_offset
    28, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18976C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S18976C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S18976C1[];
extern void _ZN8S18976C62v8Ev();
extern void _ZN8S18976C62v9Ev();
extern void _ZN8S18976C63v10Ev();
extern void _ZN8S18976C53v11Ev();
extern void _ZN8S18976C53v12Ev();
extern void _ZN8S18976C53v13Ev();
extern void _ZN8S18976C53v14Ev();
extern void _ZN8S18976C1D1Ev();
extern void _ZN8S18976C1D0Ev();
extern void _ZN8S18976C12v1Ev();
extern void _ZN8S18976C12v2Ev();
extern void _ZN8S18976C12v3Ev();
extern void _ZN8S18976C12v4Ev();
extern void _ZN8S18976C12v5Ev();
extern void _ZN8S18976C12v6Ev();
extern void _ZN8S18976C12v7Ev();
extern void _ZN8S18976C62v8Ev();
extern void _ZN8S18976C62v9Ev();
extern void _ZN8S18976C63v10Ev();
extern void _ZN8S18976C53v11Ev();
extern void _ZN8S18976C53v12Ev();
extern void _ZN8S18976C53v13Ev();
extern void _ZN8S18976C53v14Ev();
extern void ABISELECT(_ZTv0_n88_N8S18976C1D1Ev,_ZTv0_n44_N8S18976C1D1Ev)();
extern void ABISELECT(_ZThn40_N8S18976C1D1Ev,_ZThn20_N8S18976C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S18976C1D0Ev,_ZTv0_n44_N8S18976C1D0Ev)();
extern void ABISELECT(_ZThn40_N8S18976C1D0Ev,_ZThn20_N8S18976C1D0Ev)() __attribute__((weak));
extern void _ZN8S18976C43v21Ev();
extern void _ZN8S18976C43v22Ev();
extern void _ZN8S18976C43v23Ev();
extern void _ZN8S18976C43v24Ev();
extern void _ZN8S18976C43v25Ev();
extern void _ZN8S18976C43v26Ev();
extern void _ZN8S18976C43v27Ev();
extern void _ZN8S18976C43v28Ev();
extern void _ZN8S18976C33v29Ev();
extern void _ZN8S18976C23v30Ev();
extern void _ZN8S18976C23v31Ev();
extern void _ZN8S18976C93v15Ev();
extern void _ZN8S18976C93v16Ev();
extern void _ZN8S18976C93v17Ev();
extern void _ZN8S18976C93v18Ev();
extern void _ZN8S18976C93v19Ev();
extern void _ZN8S18976C93v20Ev();
extern void _ZN8S18976C62v8Ev();
extern void _ZN8S18976C62v9Ev();
extern void _ZN8S18976C63v10Ev();
extern void _ZN8S18976C53v11Ev();
extern void _ZN8S18976C53v12Ev();
extern void _ZN8S18976C53v13Ev();
extern void _ZN8S18976C53v14Ev();
static  VTBL_ENTRY vtc_S18976C1[] = {
  ABISELECT(144,72),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S18976C1[0]),
  (VTBL_ENTRY)&_ZN8S18976C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18976C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18976C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18976C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18976C1D0Ev,
  (VTBL_ENTRY)&_ZN8S18976C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18976C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18976C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18976C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18976C12v5Ev,
  (VTBL_ENTRY)&_ZN8S18976C12v6Ev,
  (VTBL_ENTRY)&_ZN8S18976C12v7Ev,
  0,
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,52),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S18976C1[0]),
  (VTBL_ENTRY)&_ZN8S18976C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18976C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18976C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18976C1D1Ev,_ZTv0_n44_N8S18976C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18976C1D0Ev,_ZTv0_n44_N8S18976C1D0Ev),
  (VTBL_ENTRY)&_ZN8S18976C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v25Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v26Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v27Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18976C33v29Ev,
  (VTBL_ENTRY)&_ZN8S18976C23v30Ev,
  (VTBL_ENTRY)&_ZN8S18976C23v31Ev,
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S18976C1[0]),
  (VTBL_ENTRY)&_ZN8S18976C93v15Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v16Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v17Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18976C93v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI8S18976C1[0]),
  (VTBL_ENTRY)&_ZN8S18976C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18976C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18976C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v14Ev,
};
extern VTBL_ENTRY _ZTV8S18976C1[];
extern void _ZN8S18976C62v8Ev();
extern void _ZN8S18976C62v9Ev();
extern void _ZN8S18976C63v10Ev();
extern void _ZN8S18976C53v11Ev();
extern void _ZN8S18976C53v12Ev();
extern void _ZN8S18976C53v13Ev();
extern void _ZN8S18976C53v14Ev();
extern void _ZN8S18976C2D1Ev();
extern void _ZN8S18976C2D0Ev();
extern void _ZN8S18976C43v21Ev();
extern void _ZN8S18976C43v22Ev();
extern void _ZN8S18976C43v23Ev();
extern void _ZN8S18976C43v24Ev();
extern void _ZN8S18976C43v25Ev();
extern void _ZN8S18976C43v26Ev();
extern void _ZN8S18976C43v27Ev();
extern void _ZN8S18976C43v28Ev();
extern void _ZN8S18976C33v29Ev();
extern void _ZN8S18976C23v30Ev();
extern void _ZN8S18976C23v31Ev();
static  VTBL_ENTRY _tg__ZTV8S18976C2__8S18976C1[] = {
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S18976C2[0]),
  (VTBL_ENTRY)&_ZN8S18976C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18976C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18976C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18976C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18976C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v25Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v26Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v27Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18976C33v29Ev,
  (VTBL_ENTRY)&_ZN8S18976C23v30Ev,
  (VTBL_ENTRY)&_ZN8S18976C23v31Ev,
};
extern void _ZN8S18976C62v8Ev();
extern void _ZN8S18976C62v9Ev();
extern void _ZN8S18976C63v10Ev();
extern void _ZN8S18976C53v11Ev();
extern void _ZN8S18976C53v12Ev();
extern void _ZN8S18976C53v13Ev();
extern void _ZN8S18976C53v14Ev();
extern void _ZN8S18976C3D1Ev();
extern void _ZN8S18976C3D0Ev();
extern void _ZN8S18976C43v21Ev();
extern void _ZN8S18976C43v22Ev();
extern void _ZN8S18976C43v23Ev();
extern void _ZN8S18976C43v24Ev();
extern void _ZN8S18976C43v25Ev();
extern void _ZN8S18976C43v26Ev();
extern void _ZN8S18976C43v27Ev();
extern void _ZN8S18976C43v28Ev();
extern void _ZN8S18976C33v29Ev();
static  VTBL_ENTRY _tg__ZTV8S18976C38S18976C2__8S18976C1[] = {
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S18976C3[0]),
  (VTBL_ENTRY)&_ZN8S18976C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18976C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18976C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18976C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18976C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v25Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v26Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v27Ev,
  (VTBL_ENTRY)&_ZN8S18976C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18976C33v29Ev,
};
extern void _ZN8S18976C62v8Ev();
extern void _ZN8S18976C62v9Ev();
extern void _ZN8S18976C63v10Ev();
extern void _ZN8S18976C53v11Ev();
extern void _ZN8S18976C53v12Ev();
extern void _ZN8S18976C53v13Ev();
extern void _ZN8S18976C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S18976C5__A1__8S18976C38S18976C2__8S18976C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S18976C3[0]),
  (VTBL_ENTRY)&_ZN8S18976C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18976C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18976C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v14Ev,
};
extern void _ZN8S18976C62v8Ev();
extern void _ZN8S18976C62v9Ev();
extern void _ZN8S18976C63v10Ev();
extern void _ZN8S18976C53v11Ev();
extern void _ZN8S18976C53v12Ev();
extern void _ZN8S18976C53v13Ev();
extern void _ZN8S18976C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S18976C5__A1__8S18976C2__8S18976C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S18976C2[0]),
  (VTBL_ENTRY)&_ZN8S18976C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18976C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18976C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18976C53v14Ev,
};
static  VTT_ENTRY vtt_S18976C1[] = {
  {&(_ZTV8S18976C1[4]),  4,92},
  {&(_ZTV8S18976C1[48]),  48,92},
  {&(_ZTV8S18976C1[70]),  70,92},
  {&(_ZTV8S18976C1[85]),  85,92},
  {&(_tg__ZTV8S18976C2__8S18976C1[3]),  3,23},
  {&(_tg__ZTV8S18976C38S18976C2__8S18976C1[3]),  3,21},
  {&(_tg__ZTV8S18976C5__A1__8S18976C38S18976C2__8S18976C1[9]),  9,16},
  {&(_tg__ZTV8S18976C5__A1__8S18976C2__8S18976C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S18976C1[];
extern  VTBL_ENTRY _ZTV8S18976C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18976C1[];
static VTBL_ENTRY alt_thunk_names176[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18976C1D0Ev,_ZTv0_n44_N8S18976C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S18976C1D0Ev,_ZThn20_N8S18976C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18976C1D1Ev,_ZTv0_n44_N8S18976C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S18976C1D1Ev,_ZThn20_N8S18976C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18976C1 = {  "S18976C1", // class name
  bases_S18976C1, 10,
  &(vtc_S18976C1[0]), // expected_vtbl_contents
  &(vtt_S18976C1[0]), // expected_vtt_contents
  ABISELECT(184,92), // object size
  NSPAIRA(_ZTI8S18976C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18976C1),92, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18976C1),8, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names176,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18975C6  {
  ::S7218C6 s18975c6f0;
  virtual void  v8(); // _ZN8S18975C62v8Ev
  virtual void  v9(); // _ZN8S18975C62v9Ev
  virtual void  v10(); // _ZN8S18975C63v10Ev
  ~S18975C6(); // tgen
  S18975C6(); // tgen
};
//SIG(-1 S18975C6) C1{ v1 v2 v3 FC2{ BC3{ BC4{ v11 v12 v13 v14 v15 v16 Fi} v17} v4 v5 v6 v7 v8 v9 v10}}


void  S18975C6 ::v8(){vfunc_called(this, "_ZN8S18975C62v8Ev");}
void  S18975C6 ::v9(){vfunc_called(this, "_ZN8S18975C62v9Ev");}
void  S18975C6 ::v10(){vfunc_called(this, "_ZN8S18975C63v10Ev");}
S18975C6 ::~S18975C6(){ note_dtor("S18975C6", this);} // tgen
S18975C6 ::S18975C6(){ note_ctor("S18975C6", this);} // tgen

static void Test_S18975C6()
{
  extern Class_Descriptor cd_S18975C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S18975C6, buf);
    S18975C6 *dp, &lv = *(dp=new (buf) S18975C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18975C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18975C6)");
    check_field_offset(lv, s18975c6f0, ABISELECT(8,4), "S18975C6.s18975c6f0");
    test_class_info(&lv, &cd_S18975C6);
    dp->~S18975C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18975C6(Test_S18975C6, "S18975C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S18975C6C1Ev();
extern void _ZN8S18975C6D1Ev();
Name_Map name_map_S18975C6[] = {
  NSPAIR(_ZN8S18975C6C1Ev),
  NSPAIR(_ZN8S18975C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18975C6[];
extern void _ZN8S18975C62v8Ev();
extern void _ZN8S18975C62v9Ev();
extern void _ZN8S18975C63v10Ev();
static  VTBL_ENTRY vtc_S18975C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18975C6[0]),
  (VTBL_ENTRY)&_ZN8S18975C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18975C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18975C63v10Ev,
};
extern VTBL_ENTRY _ZTI8S18975C6[];
extern  VTBL_ENTRY _ZTV8S18975C6[];
Class_Descriptor cd_S18975C6 = {  "S18975C6", // class name
  0,0,//no base classes
  &(vtc_S18975C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S18975C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18975C6),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  S18975C5  : S18975C6 {
  void *s18975c5f0;
  char s18975c5f1;
  virtual void  v11(); // _ZN8S18975C53v11Ev
  virtual void  v12(); // _ZN8S18975C53v12Ev
  virtual void  v13(); // _ZN8S18975C53v13Ev
  virtual void  v14(); // _ZN8S18975C53v14Ev
  ~S18975C5(); // tgen
  S18975C5(); // tgen
};
//SIG(-1 S18975C5) C1{ BC2{ v5 v6 v7 FC3{ BC4{ BC5{ v15 v16 v17 v18 v19 v20 Fi} v21} v8 v9 v10 v11 v12 v13 v14}} v1 v2 v3 v4 Fp Fc}


void  S18975C5 ::v11(){vfunc_called(this, "_ZN8S18975C53v11Ev");}
void  S18975C5 ::v12(){vfunc_called(this, "_ZN8S18975C53v12Ev");}
void  S18975C5 ::v13(){vfunc_called(this, "_ZN8S18975C53v13Ev");}
void  S18975C5 ::v14(){vfunc_called(this, "_ZN8S18975C53v14Ev");}
S18975C5 ::~S18975C5(){ note_dtor("S18975C5", this);} // tgen
S18975C5 ::S18975C5(){ note_ctor("S18975C5", this);} // tgen

static void Test_S18975C5()
{
  extern Class_Descriptor cd_S18975C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S18975C5, buf);
    S18975C5 *dp, &lv = *(dp=new (buf) S18975C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S18975C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18975C5)");
    check_base_class_offset(lv, (S18975C6*), 0, "S18975C5");
    check_field_offset(lv, s18975c5f0, ABISELECT(24,12), "S18975C5.s18975c5f0");
    check_field_offset(lv, s18975c5f1, ABISELECT(32,16), "S18975C5.s18975c5f1");
    test_class_info(&lv, &cd_S18975C5);
    dp->~S18975C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18975C5(Test_S18975C5, "S18975C5", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S18975C5C1Ev();
extern void _ZN8S18975C5D1Ev();
Name_Map name_map_S18975C5[] = {
  NSPAIR(_ZN8S18975C5C1Ev),
  NSPAIR(_ZN8S18975C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18975C6;
extern VTBL_ENTRY _ZTI8S18975C6[];
extern  VTBL_ENTRY _ZTV8S18975C6[];
static Base_Class bases_S18975C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18975C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S18975C5[];
extern void _ZN8S18975C62v8Ev();
extern void _ZN8S18975C62v9Ev();
extern void _ZN8S18975C63v10Ev();
extern void _ZN8S18975C53v11Ev();
extern void _ZN8S18975C53v12Ev();
extern void _ZN8S18975C53v13Ev();
extern void _ZN8S18975C53v14Ev();
static  VTBL_ENTRY vtc_S18975C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18975C5[0]),
  (VTBL_ENTRY)&_ZN8S18975C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18975C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18975C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v14Ev,
};
extern VTBL_ENTRY _ZTI8S18975C5[];
extern  VTBL_ENTRY _ZTV8S18975C5[];
Class_Descriptor cd_S18975C5 = {  "S18975C5", // class name
  bases_S18975C5, 1,
  &(vtc_S18975C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S18975C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S18975C5),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  S18975C9  {
  int s18975c9f0;
  virtual void  v15(); // _ZN8S18975C93v15Ev
  virtual void  v16(); // _ZN8S18975C93v16Ev
  virtual void  v17(); // _ZN8S18975C93v17Ev
  virtual void  v18(); // _ZN8S18975C93v18Ev
  virtual void  v19(); // _ZN8S18975C93v19Ev
  virtual void  v20(); // _ZN8S18975C93v20Ev
  ~S18975C9(); // tgen
  S18975C9(); // tgen
};
//SIG(-1 S18975C9) C1{ v1 v2 v3 v4 v5 v6 Fi}


void  S18975C9 ::v15(){vfunc_called(this, "_ZN8S18975C93v15Ev");}
void  S18975C9 ::v16(){vfunc_called(this, "_ZN8S18975C93v16Ev");}
void  S18975C9 ::v17(){vfunc_called(this, "_ZN8S18975C93v17Ev");}
void  S18975C9 ::v18(){vfunc_called(this, "_ZN8S18975C93v18Ev");}
void  S18975C9 ::v19(){vfunc_called(this, "_ZN8S18975C93v19Ev");}
void  S18975C9 ::v20(){vfunc_called(this, "_ZN8S18975C93v20Ev");}
S18975C9 ::~S18975C9(){ note_dtor("S18975C9", this);} // tgen
S18975C9 ::S18975C9(){ note_ctor("S18975C9", this);} // tgen

static void Test_S18975C9()
{
  extern Class_Descriptor cd_S18975C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S18975C9, buf);
    S18975C9 *dp, &lv = *(dp=new (buf) S18975C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S18975C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18975C9)");
    check_field_offset(lv, s18975c9f0, ABISELECT(8,4), "S18975C9.s18975c9f0");
    test_class_info(&lv, &cd_S18975C9);
    dp->~S18975C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18975C9(Test_S18975C9, "S18975C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S18975C9C1Ev();
extern void _ZN8S18975C9D1Ev();
Name_Map name_map_S18975C9[] = {
  NSPAIR(_ZN8S18975C9C1Ev),
  NSPAIR(_ZN8S18975C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18975C9[];
extern void _ZN8S18975C93v15Ev();
extern void _ZN8S18975C93v16Ev();
extern void _ZN8S18975C93v17Ev();
extern void _ZN8S18975C93v18Ev();
extern void _ZN8S18975C93v19Ev();
extern void _ZN8S18975C93v20Ev();
static  VTBL_ENTRY vtc_S18975C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18975C9[0]),
  (VTBL_ENTRY)&_ZN8S18975C93v15Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v16Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v17Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v20Ev,
};
extern VTBL_ENTRY _ZTI8S18975C9[];
extern  VTBL_ENTRY _ZTV8S18975C9[];
Class_Descriptor cd_S18975C9 = {  "S18975C9", // class name
  0,0,//no base classes
  &(vtc_S18975C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S18975C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18975C9),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  S18975C4  : S18975C5 , S18975C9 {
  void *s18975c4f0[2];
  virtual  ~S18975C4(); // _ZN8S18975C4D1Ev
  virtual void  v21(); // _ZN8S18975C43v21Ev
  virtual void  v22(); // _ZN8S18975C43v22Ev
  virtual void  v23(); // _ZN8S18975C43v23Ev
  virtual void  v24(); // _ZN8S18975C43v24Ev
  virtual void  v25(); // _ZN8S18975C43v25Ev
  virtual void  v26(); // _ZN8S18975C43v26Ev
  virtual void  v27(); // _ZN8S18975C43v27Ev
  virtual void  v28(); // _ZN8S18975C43v28Ev
  S18975C4(); // tgen
};
//SIG(-1 S18975C4) C1{ BC2{ BC3{ v9 v10 v11 FC4{ BC5{ BC6{ v29 v30 v31 v32 v33 v34 Fi} v35} v22 v23 v24 v25 v26 v27 v28}} v12 v13 v14 v15 Fp Fc} BC7{ v16 v17 v18 v19 v20 v21 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[2]}


 S18975C4 ::~S18975C4(){ note_dtor("S18975C4", this);}
void  S18975C4 ::v21(){vfunc_called(this, "_ZN8S18975C43v21Ev");}
void  S18975C4 ::v22(){vfunc_called(this, "_ZN8S18975C43v22Ev");}
void  S18975C4 ::v23(){vfunc_called(this, "_ZN8S18975C43v23Ev");}
void  S18975C4 ::v24(){vfunc_called(this, "_ZN8S18975C43v24Ev");}
void  S18975C4 ::v25(){vfunc_called(this, "_ZN8S18975C43v25Ev");}
void  S18975C4 ::v26(){vfunc_called(this, "_ZN8S18975C43v26Ev");}
void  S18975C4 ::v27(){vfunc_called(this, "_ZN8S18975C43v27Ev");}
void  S18975C4 ::v28(){vfunc_called(this, "_ZN8S18975C43v28Ev");}
S18975C4 ::S18975C4(){ note_ctor("S18975C4", this);} // tgen

static void Test_S18975C4()
{
  extern Class_Descriptor cd_S18975C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S18975C4, buf);
    S18975C4 *dp, &lv = *(dp=new (buf) S18975C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S18975C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18975C4)");
    check_base_class_offset(lv, (S18975C6*)(S18975C5*), 0, "S18975C4");
    check_base_class_offset(lv, (S18975C5*), 0, "S18975C4");
    check_base_class_offset(lv, (S18975C9*), ABISELECT(40,20), "S18975C4");
    check_field_offset(lv, s18975c4f0, ABISELECT(56,28), "S18975C4.s18975c4f0");
    test_class_info(&lv, &cd_S18975C4);
    dp->~S18975C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18975C4(Test_S18975C4, "S18975C4", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S18975C4C1Ev();
extern void _ZN8S18975C4D1Ev();
Name_Map name_map_S18975C4[] = {
  NSPAIR(_ZN8S18975C4C1Ev),
  NSPAIR(_ZN8S18975C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18975C6;
extern VTBL_ENTRY _ZTI8S18975C6[];
extern  VTBL_ENTRY _ZTV8S18975C6[];
extern Class_Descriptor cd_S18975C5;
extern VTBL_ENTRY _ZTI8S18975C5[];
extern  VTBL_ENTRY _ZTV8S18975C5[];
extern Class_Descriptor cd_S18975C9;
extern VTBL_ENTRY _ZTI8S18975C9[];
extern  VTBL_ENTRY _ZTV8S18975C9[];
static Base_Class bases_S18975C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18975C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S18975C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18975C9,    ABISELECT(40,20), //bcp->offset
    19, //bcp->virtual_function_table_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 _ZTI8S18975C4[];
extern void _ZN8S18975C62v8Ev();
extern void _ZN8S18975C62v9Ev();
extern void _ZN8S18975C63v10Ev();
extern void _ZN8S18975C53v11Ev();
extern void _ZN8S18975C53v12Ev();
extern void _ZN8S18975C53v13Ev();
extern void _ZN8S18975C53v14Ev();
extern void _ZN8S18975C4D1Ev();
extern void _ZN8S18975C4D0Ev();
extern void _ZN8S18975C43v21Ev();
extern void _ZN8S18975C43v22Ev();
extern void _ZN8S18975C43v23Ev();
extern void _ZN8S18975C43v24Ev();
extern void _ZN8S18975C43v25Ev();
extern void _ZN8S18975C43v26Ev();
extern void _ZN8S18975C43v27Ev();
extern void _ZN8S18975C43v28Ev();
extern void _ZN8S18975C93v15Ev();
extern void _ZN8S18975C93v16Ev();
extern void _ZN8S18975C93v17Ev();
extern void _ZN8S18975C93v18Ev();
extern void _ZN8S18975C93v19Ev();
extern void _ZN8S18975C93v20Ev();
static  VTBL_ENTRY vtc_S18975C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18975C4[0]),
  (VTBL_ENTRY)&_ZN8S18975C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18975C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18975C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18975C4D1Ev,
  (VTBL_ENTRY)&_ZN8S18975C4D0Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v25Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v26Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v27Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v28Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S18975C4[0]),
  (VTBL_ENTRY)&_ZN8S18975C93v15Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v16Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v17Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v20Ev,
};
extern VTBL_ENTRY _ZTI8S18975C4[];
extern  VTBL_ENTRY _ZTV8S18975C4[];
Class_Descriptor cd_S18975C4 = {  "S18975C4", // class name
  bases_S18975C4, 3,
  &(vtc_S18975C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S18975C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18975C4),27, //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  S18975C3  : S18975C4 , virtual S18975C5 {
  int  :0;
  virtual  ~S18975C3(); // _ZN8S18975C3D2Ev
  virtual void  v29(); // _ZN8S18975C33v29Ev
  S18975C3(); // tgen
};
//SIG(-1 S18975C3) C1{ BC2{ BC3{ BC4{ v2 v3 v4 FC5{ BC6{ BC7{ v30 v31 v32 v33 v34 v35 Fi} v36} v23 v24 v25 v26 v27 v28 v29}} v5 v6 v7 v8 Fp Fc} BC8{ v9 v10 v11 v12 v13 v14 Fi} vd v15 v16 v17 v18 v19 v20 v21 v22 Fp[2]} VBC3 vd v1 Fi:0}


 S18975C3 ::~S18975C3(){ note_dtor("S18975C3", this);}
void  S18975C3 ::v29(){vfunc_called(this, "_ZN8S18975C33v29Ev");}
S18975C3 ::S18975C3(){ note_ctor("S18975C3", this);} // tgen

static void Test_S18975C3()
{
  extern Class_Descriptor cd_S18975C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[15];
    init_test(&cd_S18975C3, buf);
    S18975C3 *dp, &lv = *(dp=new (buf) S18975C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S18975C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18975C3)");
    check_base_class_offset(lv, (S18975C6*)(S18975C5*)(S18975C4*), 0, "S18975C3");
    check_base_class_offset(lv, (S18975C5*)(S18975C4*), 0, "S18975C3");
    check_base_class_offset(lv, (S18975C9*)(S18975C4*), ABISELECT(40,20), "S18975C3");
    check_base_class_offset(lv, (S18975C4*), 0, "S18975C3");
    /*is_ambiguous_... S18975C3::S18975C5 */ AMB_check_base_class_offset(lv, (S18975C6*)(S18975C5*), ABISELECT(72,36), "S18975C3");
    /*is_ambiguous_... S18975C3::S18975C5 */ AMB_check_base_class_offset(lv, (S18975C5*), ABISELECT(72,36), "S18975C3");
    test_class_info(&lv, &cd_S18975C3);
    dp->~S18975C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18975C3(Test_S18975C3, "S18975C3", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN8S18975C3C1Ev();
extern void _ZN8S18975C3D2Ev();
Name_Map name_map_S18975C3[] = {
  NSPAIR(_ZN8S18975C3C1Ev),
  NSPAIR(_ZN8S18975C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18975C6;
extern VTBL_ENTRY _ZTI8S18975C6[];
extern  VTBL_ENTRY _ZTV8S18975C6[];
extern Class_Descriptor cd_S18975C5;
extern VTBL_ENTRY _ZTI8S18975C5[];
extern  VTBL_ENTRY _ZTV8S18975C5[];
extern Class_Descriptor cd_S18975C9;
extern VTBL_ENTRY _ZTI8S18975C9[];
extern  VTBL_ENTRY _ZTV8S18975C9[];
extern Class_Descriptor cd_S18975C4;
extern VTBL_ENTRY _ZTI8S18975C4[];
extern  VTBL_ENTRY _ZTV8S18975C4[];
extern Class_Descriptor cd_S18975C6;
extern VTBL_ENTRY _ZTI8S18975C6[];
extern  VTBL_ENTRY _ZTV8S18975C6[];
extern Class_Descriptor cd_S18975C5;
extern VTBL_ENTRY _ZTI8S18975C5[];
extern  VTBL_ENTRY _ZTV8S18975C5[];
static Base_Class bases_S18975C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18975C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S18975C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S18975C9,    ABISELECT(40,20), //bcp->offset
    21, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S18975C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S18975C6,    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_S18975C5,    ABISELECT(72,36), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S18975C3[];
extern void _ZN8S18975C62v8Ev();
extern void _ZN8S18975C62v9Ev();
extern void _ZN8S18975C63v10Ev();
extern void _ZN8S18975C53v11Ev();
extern void _ZN8S18975C53v12Ev();
extern void _ZN8S18975C53v13Ev();
extern void _ZN8S18975C53v14Ev();
extern void _ZN8S18975C3D1Ev();
extern void _ZN8S18975C3D0Ev();
extern void _ZN8S18975C43v21Ev();
extern void _ZN8S18975C43v22Ev();
extern void _ZN8S18975C43v23Ev();
extern void _ZN8S18975C43v24Ev();
extern void _ZN8S18975C43v25Ev();
extern void _ZN8S18975C43v26Ev();
extern void _ZN8S18975C43v27Ev();
extern void _ZN8S18975C43v28Ev();
extern void _ZN8S18975C33v29Ev();
extern void _ZN8S18975C93v15Ev();
extern void _ZN8S18975C93v16Ev();
extern void _ZN8S18975C93v17Ev();
extern void _ZN8S18975C93v18Ev();
extern void _ZN8S18975C93v19Ev();
extern void _ZN8S18975C93v20Ev();
extern void _ZN8S18975C62v8Ev();
extern void _ZN8S18975C62v9Ev();
extern void _ZN8S18975C63v10Ev();
extern void _ZN8S18975C53v11Ev();
extern void _ZN8S18975C53v12Ev();
extern void _ZN8S18975C53v13Ev();
extern void _ZN8S18975C53v14Ev();
static  VTBL_ENTRY vtc_S18975C3[] = {
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S18975C3[0]),
  (VTBL_ENTRY)&_ZN8S18975C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18975C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18975C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18975C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18975C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v25Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v26Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v27Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18975C33v29Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S18975C3[0]),
  (VTBL_ENTRY)&_ZN8S18975C93v15Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v16Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v17Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S18975C3[0]),
  (VTBL_ENTRY)&_ZN8S18975C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18975C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18975C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v14Ev,
};
extern VTBL_ENTRY _ZTV8S18975C3[];
static  VTT_ENTRY vtt_S18975C3[] = {
  {&(_ZTV8S18975C3[3]),  3,45},
  {&(_ZTV8S18975C3[38]),  38,45},
};
extern VTBL_ENTRY _ZTI8S18975C3[];
extern  VTBL_ENTRY _ZTV8S18975C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18975C3[];
Class_Descriptor cd_S18975C3 = {  "S18975C3", // class name
  bases_S18975C3, 6,
  &(vtc_S18975C3[0]), // expected_vtbl_contents
  &(vtt_S18975C3[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI8S18975C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18975C3),45, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18975C3),2, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18975C8  : S18975C9 {
  virtual void  v39(); // _ZN8S18975C83v39Ev
  ~S18975C8(); // tgen
  S18975C8(); // tgen
};
//SIG(-1 S18975C8) C1{ BC2{ v2 v3 v4 v5 v6 v7 Fi} v1}


void  S18975C8 ::v39(){vfunc_called(this, "_ZN8S18975C83v39Ev");}
S18975C8 ::~S18975C8(){ note_dtor("S18975C8", this);} // tgen
S18975C8 ::S18975C8(){ note_ctor("S18975C8", this);} // tgen

static void Test_S18975C8()
{
  extern Class_Descriptor cd_S18975C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S18975C8, buf);
    S18975C8 *dp, &lv = *(dp=new (buf) S18975C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S18975C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18975C8)");
    check_base_class_offset(lv, (S18975C9*), 0, "S18975C8");
    test_class_info(&lv, &cd_S18975C8);
    dp->~S18975C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18975C8(Test_S18975C8, "S18975C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S18975C8C1Ev();
extern void _ZN8S18975C8D1Ev();
Name_Map name_map_S18975C8[] = {
  NSPAIR(_ZN8S18975C8C1Ev),
  NSPAIR(_ZN8S18975C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18975C9;
extern VTBL_ENTRY _ZTI8S18975C9[];
extern  VTBL_ENTRY _ZTV8S18975C9[];
static Base_Class bases_S18975C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18975C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S18975C8[];
extern void _ZN8S18975C93v15Ev();
extern void _ZN8S18975C93v16Ev();
extern void _ZN8S18975C93v17Ev();
extern void _ZN8S18975C93v18Ev();
extern void _ZN8S18975C93v19Ev();
extern void _ZN8S18975C93v20Ev();
extern void _ZN8S18975C83v39Ev();
static  VTBL_ENTRY vtc_S18975C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18975C8[0]),
  (VTBL_ENTRY)&_ZN8S18975C93v15Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v16Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v17Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v20Ev,
  (VTBL_ENTRY)&_ZN8S18975C83v39Ev,
};
extern VTBL_ENTRY _ZTI8S18975C8[];
extern  VTBL_ENTRY _ZTV8S18975C8[];
Class_Descriptor cd_S18975C8 = {  "S18975C8", // class name
  bases_S18975C8, 1,
  &(vtc_S18975C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S18975C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S18975C8),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18975C2  : S18975C3 {
  ::S18975C8 s18975c2f0;
  ::S18975C9 s18975c2f1;
  virtual  ~S18975C2(); // _ZN8S18975C2D2Ev
  virtual void  v30(); // _ZN8S18975C23v30Ev
  virtual void  v31(); // _ZN8S18975C23v31Ev
  S18975C2(); // tgen
};
//SIG(-1 S18975C2) C1{ BC2{ BC3{ BC4{ BC5{ v3 v4 v5 FC6{ BC7{ BC8{ v32 v33 v34 v35 v36 v37 Fi} v38} v25 v26 v27 v28 v29 v30 v31}} v6 v7 v8 v9 Fp Fc} BC9{ v10 v11 v12 v13 v14 v15 Fi} vd v16 v17 v18 v19 v20 v21 v22 v23 Fp[2]} VBC4 vd v24 Fi:0} vd v1 v2 FC10{ BC9 v39} FC9}


 S18975C2 ::~S18975C2(){ note_dtor("S18975C2", this);}
void  S18975C2 ::v30(){vfunc_called(this, "_ZN8S18975C23v30Ev");}
void  S18975C2 ::v31(){vfunc_called(this, "_ZN8S18975C23v31Ev");}
S18975C2 ::S18975C2(){ note_ctor("S18975C2", this);} // tgen

static void Test_S18975C2()
{
  extern Class_Descriptor cd_S18975C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[19];
    init_test(&cd_S18975C2, buf);
    S18975C2 *dp, &lv = *(dp=new (buf) S18975C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,72), "sizeof(S18975C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18975C2)");
    check_base_class_offset(lv, (S18975C6*)(S18975C5*)(S18975C4*)(S18975C3*), 0, "S18975C2");
    check_base_class_offset(lv, (S18975C5*)(S18975C4*)(S18975C3*), 0, "S18975C2");
    check_base_class_offset(lv, (S18975C9*)(S18975C4*)(S18975C3*), ABISELECT(40,20), "S18975C2");
    check_base_class_offset(lv, (S18975C4*)(S18975C3*), 0, "S18975C2");
    /*is_ambiguous_... S18975C2::S18975C5 */ AMB_check_base_class_offset(lv, (S18975C6*)(S18975C5*), ABISELECT(104,52), "S18975C2");
    /*is_ambiguous_... S18975C3::S18975C5 */ AMB_check_base_class_offset(lv, (S18975C5*)(S18975C3*), ABISELECT(104,52), "S18975C2");
    check_base_class_offset(lv, (S18975C3*), 0, "S18975C2");
    check_field_offset(lv, s18975c2f0, ABISELECT(72,36), "S18975C2.s18975c2f0");
    check_field_offset(lv, s18975c2f1, ABISELECT(88,44), "S18975C2.s18975c2f1");
    test_class_info(&lv, &cd_S18975C2);
    dp->~S18975C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18975C2(Test_S18975C2, "S18975C2", ABISELECT(144,72));

#else // __cplusplus

extern void _ZN8S18975C2C1Ev();
extern void _ZN8S18975C2D2Ev();
Name_Map name_map_S18975C2[] = {
  NSPAIR(_ZN8S18975C2C1Ev),
  NSPAIR(_ZN8S18975C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18975C6;
extern VTBL_ENTRY _ZTI8S18975C6[];
extern  VTBL_ENTRY _ZTV8S18975C6[];
extern Class_Descriptor cd_S18975C5;
extern VTBL_ENTRY _ZTI8S18975C5[];
extern  VTBL_ENTRY _ZTV8S18975C5[];
extern Class_Descriptor cd_S18975C9;
extern VTBL_ENTRY _ZTI8S18975C9[];
extern  VTBL_ENTRY _ZTV8S18975C9[];
extern Class_Descriptor cd_S18975C4;
extern VTBL_ENTRY _ZTI8S18975C4[];
extern  VTBL_ENTRY _ZTV8S18975C4[];
extern Class_Descriptor cd_S18975C6;
extern VTBL_ENTRY _ZTI8S18975C6[];
extern  VTBL_ENTRY _ZTV8S18975C6[];
extern Class_Descriptor cd_S18975C5;
extern VTBL_ENTRY _ZTI8S18975C5[];
extern  VTBL_ENTRY _ZTV8S18975C5[];
extern Class_Descriptor cd_S18975C3;
extern VTBL_ENTRY _ZTI8S18975C3[];
extern  VTBL_ENTRY _ZTV8S18975C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18975C3[];
static Base_Class bases_S18975C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18975C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S18975C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S18975C9,    ABISELECT(40,20), //bcp->offset
    23, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S18975C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S18975C6,    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
    5, //immediately_derived
  0, 0},
  {&cd_S18975C5,    ABISELECT(104,52), //bcp->offset
    31, //bcp->virtual_function_table_offset
    9, //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
    6, //immediately_derived
  0, 1},
  {&cd_S18975C3,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S18975C2[];
extern void _ZN8S18975C62v8Ev();
extern void _ZN8S18975C62v9Ev();
extern void _ZN8S18975C63v10Ev();
extern void _ZN8S18975C53v11Ev();
extern void _ZN8S18975C53v12Ev();
extern void _ZN8S18975C53v13Ev();
extern void _ZN8S18975C53v14Ev();
extern void _ZN8S18975C2D1Ev();
extern void _ZN8S18975C2D0Ev();
extern void _ZN8S18975C43v21Ev();
extern void _ZN8S18975C43v22Ev();
extern void _ZN8S18975C43v23Ev();
extern void _ZN8S18975C43v24Ev();
extern void _ZN8S18975C43v25Ev();
extern void _ZN8S18975C43v26Ev();
extern void _ZN8S18975C43v27Ev();
extern void _ZN8S18975C43v28Ev();
extern void _ZN8S18975C33v29Ev();
extern void _ZN8S18975C23v30Ev();
extern void _ZN8S18975C23v31Ev();
extern void _ZN8S18975C93v15Ev();
extern void _ZN8S18975C93v16Ev();
extern void _ZN8S18975C93v17Ev();
extern void _ZN8S18975C93v18Ev();
extern void _ZN8S18975C93v19Ev();
extern void _ZN8S18975C93v20Ev();
extern void _ZN8S18975C62v8Ev();
extern void _ZN8S18975C62v9Ev();
extern void _ZN8S18975C63v10Ev();
extern void _ZN8S18975C53v11Ev();
extern void _ZN8S18975C53v12Ev();
extern void _ZN8S18975C53v13Ev();
extern void _ZN8S18975C53v14Ev();
static  VTBL_ENTRY vtc_S18975C2[] = {
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S18975C2[0]),
  (VTBL_ENTRY)&_ZN8S18975C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18975C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18975C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18975C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18975C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v25Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v26Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v27Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18975C33v29Ev,
  (VTBL_ENTRY)&_ZN8S18975C23v30Ev,
  (VTBL_ENTRY)&_ZN8S18975C23v31Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S18975C2[0]),
  (VTBL_ENTRY)&_ZN8S18975C93v15Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v16Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v17Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S18975C2[0]),
  (VTBL_ENTRY)&_ZN8S18975C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18975C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18975C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v14Ev,
};
extern VTBL_ENTRY _ZTV8S18975C2[];
extern void _ZN8S18975C62v8Ev();
extern void _ZN8S18975C62v9Ev();
extern void _ZN8S18975C63v10Ev();
extern void _ZN8S18975C53v11Ev();
extern void _ZN8S18975C53v12Ev();
extern void _ZN8S18975C53v13Ev();
extern void _ZN8S18975C53v14Ev();
extern void _ZN8S18975C3D1Ev();
extern void _ZN8S18975C3D0Ev();
extern void _ZN8S18975C43v21Ev();
extern void _ZN8S18975C43v22Ev();
extern void _ZN8S18975C43v23Ev();
extern void _ZN8S18975C43v24Ev();
extern void _ZN8S18975C43v25Ev();
extern void _ZN8S18975C43v26Ev();
extern void _ZN8S18975C43v27Ev();
extern void _ZN8S18975C43v28Ev();
extern void _ZN8S18975C33v29Ev();
static  VTBL_ENTRY _tg__ZTV8S18975C3__8S18975C2[] = {
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S18975C3[0]),
  (VTBL_ENTRY)&_ZN8S18975C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18975C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18975C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18975C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18975C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v25Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v26Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v27Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18975C33v29Ev,
};
extern void _ZN8S18975C62v8Ev();
extern void _ZN8S18975C62v9Ev();
extern void _ZN8S18975C63v10Ev();
extern void _ZN8S18975C53v11Ev();
extern void _ZN8S18975C53v12Ev();
extern void _ZN8S18975C53v13Ev();
extern void _ZN8S18975C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S18975C5__A1__8S18975C3__8S18975C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S18975C3[0]),
  (VTBL_ENTRY)&_ZN8S18975C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18975C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18975C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v14Ev,
};
static  VTT_ENTRY vtt_S18975C2[] = {
  {&(_ZTV8S18975C2[3]),  3,47},
  {&(_tg__ZTV8S18975C3__8S18975C2[3]),  3,21},
  {&(_tg__ZTV8S18975C5__A1__8S18975C3__8S18975C2[9]),  9,16},
  {&(_ZTV8S18975C2[40]),  40,47},
};
extern VTBL_ENTRY _ZTI8S18975C2[];
extern  VTBL_ENTRY _ZTV8S18975C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18975C2[];
Class_Descriptor cd_S18975C2 = {  "S18975C2", // class name
  bases_S18975C2, 7,
  &(vtc_S18975C2[0]), // expected_vtbl_contents
  &(vtt_S18975C2[0]), // expected_vtt_contents
  ABISELECT(144,72), // object size
  NSPAIRA(_ZTI8S18975C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S18975C2),47, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18975C2),4, //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  S18975C1  : virtual S18975C2 , S18975C5 {
  virtual  ~S18975C1(); // _ZN8S18975C1D2Ev
  virtual void  v1(); // _ZN8S18975C12v1Ev
  virtual void  v2(); // _ZN8S18975C12v2Ev
  virtual void  v3(); // _ZN8S18975C12v3Ev
  virtual void  v4(); // _ZN8S18975C12v4Ev
  virtual void  v5(); // _ZN8S18975C12v5Ev
  virtual void  v6(); // _ZN8S18975C12v6Ev
  virtual void  v7(); // _ZN8S18975C12v7Ev
  S18975C1(); // tgen
};
//SIG(1 S18975C1) C1{ VBC2{ BC3{ BC4{ BC5{ BC6{ v8 v9 v10 FC7{ BC8{ BC9{ v39 v40 v41 v42 v43 v44 Fi} v45} v32 v33 v34 v35 v36 v37 v38}} v11 v12 v13 v14 Fp Fc} BC10{ v15 v16 v17 v18 v19 v20 Fi} vd v21 v22 v23 v24 v25 v26 v27 v28 Fp[2]} VBC5 vd v29 Fi:0} vd v30 v31 FC11{ BC10 v46} FC10} BC5 vd v1 v2 v3 v4 v5 v6 v7}


 S18975C1 ::~S18975C1(){ note_dtor("S18975C1", this);}
void  S18975C1 ::v1(){vfunc_called(this, "_ZN8S18975C12v1Ev");}
void  S18975C1 ::v2(){vfunc_called(this, "_ZN8S18975C12v2Ev");}
void  S18975C1 ::v3(){vfunc_called(this, "_ZN8S18975C12v3Ev");}
void  S18975C1 ::v4(){vfunc_called(this, "_ZN8S18975C12v4Ev");}
void  S18975C1 ::v5(){vfunc_called(this, "_ZN8S18975C12v5Ev");}
void  S18975C1 ::v6(){vfunc_called(this, "_ZN8S18975C12v6Ev");}
void  S18975C1 ::v7(){vfunc_called(this, "_ZN8S18975C12v7Ev");}
S18975C1 ::S18975C1(){ note_ctor("S18975C1", this);} // tgen

static void Test_S18975C1()
{
  extern Class_Descriptor cd_S18975C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[24];
    init_test(&cd_S18975C1, buf);
    S18975C1 *dp, &lv = *(dp=new (buf) S18975C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,92), "sizeof(S18975C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18975C1)");
    check_base_class_offset(lv, (S18975C6*)(S18975C5*)(S18975C4*)(S18975C3*)(S18975C2*), ABISELECT(40,20), "S18975C1");
    check_base_class_offset(lv, (S18975C5*)(S18975C4*)(S18975C3*)(S18975C2*), ABISELECT(40,20), "S18975C1");
    check_base_class_offset(lv, (S18975C9*)(S18975C4*)(S18975C3*)(S18975C2*), ABISELECT(80,40), "S18975C1");
    check_base_class_offset(lv, (S18975C4*)(S18975C3*)(S18975C2*), ABISELECT(40,20), "S18975C1");
    /*is_ambiguous_... S18975C1::S18975C5 */ AMB_check_base_class_offset(lv, (S18975C6*)(S18975C5*), ABISELECT(144,72), "S18975C1");
    /*is_ambiguous_... S18975C3::S18975C5 */ AMB_check_base_class_offset(lv, (S18975C5*)(S18975C3*)(S18975C2*), ABISELECT(144,72), "S18975C1");
    check_base_class_offset(lv, (S18975C3*)(S18975C2*), ABISELECT(40,20), "S18975C1");
    check_base_class_offset(lv, (S18975C2*), ABISELECT(40,20), "S18975C1");
    /*is_ambiguous_... S18975C1::S18975C5 */ AMB_check_base_class_offset(lv, (S18975C6*)(S18975C5*), 0, "S18975C1");
    /*is_ambiguous_... S18975C1::S18975C5 */ AMB_check_base_class_offset(lv, (S18975C5*), 0, "S18975C1");
    test_class_info(&lv, &cd_S18975C1);
    dp->~S18975C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18975C1(Test_S18975C1, "S18975C1", ABISELECT(184,92));

#else // __cplusplus

extern void _ZN8S18975C1C1Ev();
extern void _ZN8S18975C1D2Ev();
Name_Map name_map_S18975C1[] = {
  NSPAIR(_ZN8S18975C1C1Ev),
  NSPAIR(_ZN8S18975C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18975C6;
extern VTBL_ENTRY _ZTI8S18975C6[];
extern  VTBL_ENTRY _ZTV8S18975C6[];
extern Class_Descriptor cd_S18975C5;
extern VTBL_ENTRY _ZTI8S18975C5[];
extern  VTBL_ENTRY _ZTV8S18975C5[];
extern Class_Descriptor cd_S18975C9;
extern VTBL_ENTRY _ZTI8S18975C9[];
extern  VTBL_ENTRY _ZTV8S18975C9[];
extern Class_Descriptor cd_S18975C4;
extern VTBL_ENTRY _ZTI8S18975C4[];
extern  VTBL_ENTRY _ZTV8S18975C4[];
extern Class_Descriptor cd_S18975C6;
extern VTBL_ENTRY _ZTI8S18975C6[];
extern  VTBL_ENTRY _ZTV8S18975C6[];
extern Class_Descriptor cd_S18975C5;
extern VTBL_ENTRY _ZTI8S18975C5[];
extern  VTBL_ENTRY _ZTV8S18975C5[];
extern Class_Descriptor cd_S18975C3;
extern VTBL_ENTRY _ZTI8S18975C3[];
extern  VTBL_ENTRY _ZTV8S18975C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18975C3[];
extern Class_Descriptor cd_S18975C2;
extern VTBL_ENTRY _ZTI8S18975C2[];
extern  VTBL_ENTRY _ZTV8S18975C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18975C2[];
extern Class_Descriptor cd_S18975C6;
extern VTBL_ENTRY _ZTI8S18975C6[];
extern  VTBL_ENTRY _ZTV8S18975C6[];
extern Class_Descriptor cd_S18975C5;
extern VTBL_ENTRY _ZTI8S18975C5[];
extern  VTBL_ENTRY _ZTV8S18975C5[];
static Base_Class bases_S18975C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18975C6,    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
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S18975C5,    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
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S18975C9,    ABISELECT(80,40), //bcp->offset
    68, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S18975C4,    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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S18975C6,    ABISELECT(144,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
    5, //immediately_derived
  0, 0},
  {&cd_S18975C5,    ABISELECT(144,72), //bcp->offset
    76, //bcp->virtual_function_table_offset
    9, //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
    6, //immediately_derived
  0, 1},
  {&cd_S18975C3,    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
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S18975C2,    ABISELECT(40,20), //bcp->offset
    20, //bcp->virtual_function_table_offset
    28, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S18975C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    9, //immediately_derived
  0, 0},
  {&cd_S18975C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S18975C1[];
extern void _ZN8S18975C62v8Ev();
extern void _ZN8S18975C62v9Ev();
extern void _ZN8S18975C63v10Ev();
extern void _ZN8S18975C53v11Ev();
extern void _ZN8S18975C53v12Ev();
extern void _ZN8S18975C53v13Ev();
extern void _ZN8S18975C53v14Ev();
extern void _ZN8S18975C1D1Ev();
extern void _ZN8S18975C1D0Ev();
extern void _ZN8S18975C12v1Ev();
extern void _ZN8S18975C12v2Ev();
extern void _ZN8S18975C12v3Ev();
extern void _ZN8S18975C12v4Ev();
extern void _ZN8S18975C12v5Ev();
extern void _ZN8S18975C12v6Ev();
extern void _ZN8S18975C12v7Ev();
extern void _ZN8S18975C62v8Ev();
extern void _ZN8S18975C62v9Ev();
extern void _ZN8S18975C63v10Ev();
extern void _ZN8S18975C53v11Ev();
extern void _ZN8S18975C53v12Ev();
extern void _ZN8S18975C53v13Ev();
extern void _ZN8S18975C53v14Ev();
extern void ABISELECT(_ZTv0_n88_N8S18975C1D1Ev,_ZTv0_n44_N8S18975C1D1Ev)();
extern void ABISELECT(_ZThn40_N8S18975C1D1Ev,_ZThn20_N8S18975C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S18975C1D0Ev,_ZTv0_n44_N8S18975C1D0Ev)();
extern void ABISELECT(_ZThn40_N8S18975C1D0Ev,_ZThn20_N8S18975C1D0Ev)() __attribute__((weak));
extern void _ZN8S18975C43v21Ev();
extern void _ZN8S18975C43v22Ev();
extern void _ZN8S18975C43v23Ev();
extern void _ZN8S18975C43v24Ev();
extern void _ZN8S18975C43v25Ev();
extern void _ZN8S18975C43v26Ev();
extern void _ZN8S18975C43v27Ev();
extern void _ZN8S18975C43v28Ev();
extern void _ZN8S18975C33v29Ev();
extern void _ZN8S18975C23v30Ev();
extern void _ZN8S18975C23v31Ev();
extern void _ZN8S18975C93v15Ev();
extern void _ZN8S18975C93v16Ev();
extern void _ZN8S18975C93v17Ev();
extern void _ZN8S18975C93v18Ev();
extern void _ZN8S18975C93v19Ev();
extern void _ZN8S18975C93v20Ev();
extern void _ZN8S18975C62v8Ev();
extern void _ZN8S18975C62v9Ev();
extern void _ZN8S18975C63v10Ev();
extern void _ZN8S18975C53v11Ev();
extern void _ZN8S18975C53v12Ev();
extern void _ZN8S18975C53v13Ev();
extern void _ZN8S18975C53v14Ev();
static  VTBL_ENTRY vtc_S18975C1[] = {
  ABISELECT(144,72),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S18975C1[0]),
  (VTBL_ENTRY)&_ZN8S18975C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18975C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18975C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18975C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18975C1D0Ev,
  (VTBL_ENTRY)&_ZN8S18975C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18975C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18975C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18975C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18975C12v5Ev,
  (VTBL_ENTRY)&_ZN8S18975C12v6Ev,
  (VTBL_ENTRY)&_ZN8S18975C12v7Ev,
  0,
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,52),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S18975C1[0]),
  (VTBL_ENTRY)&_ZN8S18975C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18975C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18975C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18975C1D1Ev,_ZTv0_n44_N8S18975C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18975C1D0Ev,_ZTv0_n44_N8S18975C1D0Ev),
  (VTBL_ENTRY)&_ZN8S18975C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v25Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v26Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v27Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18975C33v29Ev,
  (VTBL_ENTRY)&_ZN8S18975C23v30Ev,
  (VTBL_ENTRY)&_ZN8S18975C23v31Ev,
  ABISELECT(-80,-40),
  (VTBL_ENTRY)&(_ZTI8S18975C1[0]),
  (VTBL_ENTRY)&_ZN8S18975C93v15Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v16Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v17Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v18Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v19Ev,
  (VTBL_ENTRY)&_ZN8S18975C93v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-72),
  (VTBL_ENTRY)&(_ZTI8S18975C1[0]),
  (VTBL_ENTRY)&_ZN8S18975C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18975C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18975C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v14Ev,
};
extern VTBL_ENTRY _ZTV8S18975C1[];
extern void _ZN8S18975C62v8Ev();
extern void _ZN8S18975C62v9Ev();
extern void _ZN8S18975C63v10Ev();
extern void _ZN8S18975C53v11Ev();
extern void _ZN8S18975C53v12Ev();
extern void _ZN8S18975C53v13Ev();
extern void _ZN8S18975C53v14Ev();
extern void _ZN8S18975C2D1Ev();
extern void _ZN8S18975C2D0Ev();
extern void _ZN8S18975C43v21Ev();
extern void _ZN8S18975C43v22Ev();
extern void _ZN8S18975C43v23Ev();
extern void _ZN8S18975C43v24Ev();
extern void _ZN8S18975C43v25Ev();
extern void _ZN8S18975C43v26Ev();
extern void _ZN8S18975C43v27Ev();
extern void _ZN8S18975C43v28Ev();
extern void _ZN8S18975C33v29Ev();
extern void _ZN8S18975C23v30Ev();
extern void _ZN8S18975C23v31Ev();
static  VTBL_ENTRY _tg__ZTV8S18975C2__8S18975C1[] = {
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S18975C2[0]),
  (VTBL_ENTRY)&_ZN8S18975C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18975C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18975C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18975C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18975C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v25Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v26Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v27Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18975C33v29Ev,
  (VTBL_ENTRY)&_ZN8S18975C23v30Ev,
  (VTBL_ENTRY)&_ZN8S18975C23v31Ev,
};
extern void _ZN8S18975C62v8Ev();
extern void _ZN8S18975C62v9Ev();
extern void _ZN8S18975C63v10Ev();
extern void _ZN8S18975C53v11Ev();
extern void _ZN8S18975C53v12Ev();
extern void _ZN8S18975C53v13Ev();
extern void _ZN8S18975C53v14Ev();
extern void _ZN8S18975C3D1Ev();
extern void _ZN8S18975C3D0Ev();
extern void _ZN8S18975C43v21Ev();
extern void _ZN8S18975C43v22Ev();
extern void _ZN8S18975C43v23Ev();
extern void _ZN8S18975C43v24Ev();
extern void _ZN8S18975C43v25Ev();
extern void _ZN8S18975C43v26Ev();
extern void _ZN8S18975C43v27Ev();
extern void _ZN8S18975C43v28Ev();
extern void _ZN8S18975C33v29Ev();
static  VTBL_ENTRY _tg__ZTV8S18975C38S18975C2__8S18975C1[] = {
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S18975C3[0]),
  (VTBL_ENTRY)&_ZN8S18975C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18975C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18975C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v14Ev,
  (VTBL_ENTRY)&_ZN8S18975C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18975C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v25Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v26Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v27Ev,
  (VTBL_ENTRY)&_ZN8S18975C43v28Ev,
  (VTBL_ENTRY)&_ZN8S18975C33v29Ev,
};
extern void _ZN8S18975C62v8Ev();
extern void _ZN8S18975C62v9Ev();
extern void _ZN8S18975C63v10Ev();
extern void _ZN8S18975C53v11Ev();
extern void _ZN8S18975C53v12Ev();
extern void _ZN8S18975C53v13Ev();
extern void _ZN8S18975C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S18975C5__A1__8S18975C38S18975C2__8S18975C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S18975C3[0]),
  (VTBL_ENTRY)&_ZN8S18975C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18975C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18975C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v14Ev,
};
extern void _ZN8S18975C62v8Ev();
extern void _ZN8S18975C62v9Ev();
extern void _ZN8S18975C63v10Ev();
extern void _ZN8S18975C53v11Ev();
extern void _ZN8S18975C53v12Ev();
extern void _ZN8S18975C53v13Ev();
extern void _ZN8S18975C53v14Ev();
static  VTBL_ENTRY _tg__ZTV8S18975C5__A1__8S18975C2__8S18975C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S18975C2[0]),
  (VTBL_ENTRY)&_ZN8S18975C62v8Ev,
  (VTBL_ENTRY)&_ZN8S18975C62v9Ev,
  (VTBL_ENTRY)&_ZN8S18975C63v10Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v11Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v12Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v13Ev,
  (VTBL_ENTRY)&_ZN8S18975C53v14Ev,
};
static  VTT_ENTRY vtt_S18975C1[] = {
  {&(_ZTV8S18975C1[4]),  4,92},
  {&(_ZTV8S18975C1[48]),  48,92},
  {&(_ZTV8S18975C1[70]),  70,92},
  {&(_ZTV8S18975C1[85]),  85,92},
  {&(_tg__ZTV8S18975C2__8S18975C1[3]),  3,23},
  {&(_tg__ZTV8S18975C38S18975C2__8S18975C1[3]),  3,21},
  {&(_tg__ZTV8S18975C5__A1__8S18975C38S18975C2__8S18975C1[9]),  9,16},
  {&(_tg__ZTV8S18975C5__A1__8S18975C2__8S18975C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S18975C1[];
extern  VTBL_ENTRY _ZTV8S18975C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18975C1[];
static VTBL_ENTRY alt_thunk_names177[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18975C1D0Ev,_ZTv0_n44_N8S18975C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S18975C1D0Ev,_ZThn20_N8S18975C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18975C1D1Ev,_ZTv0_n44_N8S18975C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S18975C1D1Ev,_ZThn20_N8S18975C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18975C1 = {  "S18975C1", // class name
  bases_S18975C1, 10,
  &(vtc_S18975C1[0]), // expected_vtbl_contents
  &(vtt_S18975C1[0]), // expected_vtt_contents
  ABISELECT(184,92), // object size
  NSPAIRA(_ZTI8S18975C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18975C1),92, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18975C1),8, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names177,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7401C4  : virtual S20620C3_nt {
  void *s7401c4f0;
  int s7401c4f1[4];
  ::S20620C3_nt s7401c4f2;
  ::S20620C3_nt s7401c4f3;
  ~S7401C4(); // tgen
  S7401C4(); // tgen
};
//SIG(-1 S7401C4) C1{ VBC2{ m FD} Fp Fi[4] FC2 FC2}


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

static void Test_S7401C4()
{
  extern Class_Descriptor cd_S7401C4;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,16)];
    init_test(&cd_S7401C4, buf);
    S7401C4 *dp, &lv = *(dp=new (buf) S7401C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S7401C4)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7401C4)");
    check_base_class_offset(lv, (S20620C3_nt*), ABISELECT(64,48), "S7401C4");
    check_field_offset(lv, s7401c4f0, ABISELECT(8,4), "S7401C4.s7401c4f0");
    check_field_offset(lv, s7401c4f1, ABISELECT(16,8), "S7401C4.s7401c4f1");
    check_field_offset(lv, s7401c4f2, ABISELECT(32,24), "S7401C4.s7401c4f2");
    check_field_offset(lv, s7401c4f3, ABISELECT(48,36), "S7401C4.s7401c4f3");
    test_class_info(&lv, &cd_S7401C4);
    dp->~S7401C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7401C4(Test_S7401C4, "S7401C4", ABISELECT(80,60));

#else // __cplusplus

extern void _ZN7S7401C4C1Ev();
extern void _ZN7S7401C4D1Ev();
Name_Map name_map_S7401C4[] = {
  NSPAIR(_ZN7S7401C4C1Ev),
  NSPAIR(_ZN7S7401C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20620C3_nt;
extern VTBL_ENTRY _ZTI11S20620C3_nt[];
static Base_Class bases_S7401C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20620C3_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
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7401C4[];
static  VTBL_ENTRY vtc_S7401C4[] = {
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C4[0]),
};
extern VTBL_ENTRY _ZTV7S7401C4[];
static  VTT_ENTRY vtt_S7401C4[] = {
  {&(_ZTV7S7401C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7401C4[];
extern  VTBL_ENTRY _ZTV7S7401C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C4[];
Class_Descriptor cd_S7401C4 = {  "S7401C4", // class name
  bases_S7401C4, 1,
  &(vtc_S7401C4[0]), // expected_vtbl_contents
  &(vtt_S7401C4[0]), // expected_vtt_contents
  ABISELECT(80,60), // object size
  NSPAIRA(_ZTI7S7401C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7401C4),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7401C4),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  S7401C2  : virtual S20620C3_nt , virtual S7401C4 {
  void *s7401c2f0;
  __tsi64 s7401c2f1;
  void *s7401c2f2;
  long double s7401c2f3;
  short s7401c2f4;
  virtual  ~S7401C2(); // _ZN7S7401C2D2Ev
  S7401C2(); // tgen
};
//SIG(-1 S7401C2) C1{ VBC2{ m FD} VBC3{ VBC2 Fp Fi[4] FC2 FC2} vd Fp FL Fp FD Fs}


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

static void Test_S7401C2()
{
  extern Class_Descriptor cd_S7401C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(10,25)];
    init_test(&cd_S7401C2, buf);
    S7401C2 *dp, &lv = *(dp=new (buf) S7401C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,96), "sizeof(S7401C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7401C2)");
    check_base_class_offset(lv, (S20620C3_nt*), ABISELECT(64,36), "S7401C2");
    check_base_class_offset(lv, (S20620C3_nt*)(S7401C4*), ABISELECT(64,36), "S7401C2");
    check_base_class_offset(lv, (S7401C4*), ABISELECT(80,48), "S7401C2");
    check_field_offset(lv, s7401c2f0, ABISELECT(8,4), "S7401C2.s7401c2f0");
    check_field_offset(lv, s7401c2f1, ABISELECT(16,8), "S7401C2.s7401c2f1");
    check_field_offset(lv, s7401c2f2, ABISELECT(24,16), "S7401C2.s7401c2f2");
    check_field_offset(lv, s7401c2f3, ABISELECT(32,20), "S7401C2.s7401c2f3");
    check_field_offset(lv, s7401c2f4, ABISELECT(48,32), "S7401C2.s7401c2f4");
    test_class_info(&lv, &cd_S7401C2);
    dp->~S7401C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7401C2(Test_S7401C2, "S7401C2", ABISELECT(144,96));

#else // __cplusplus

extern void _ZN7S7401C2C1Ev();
extern void _ZN7S7401C2D2Ev();
Name_Map name_map_S7401C2[] = {
  NSPAIR(_ZN7S7401C2C1Ev),
  NSPAIR(_ZN7S7401C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20620C3_nt;
extern VTBL_ENTRY _ZTI11S20620C3_nt[];
extern Class_Descriptor cd_S7401C4;
extern VTBL_ENTRY _ZTI7S7401C4[];
extern  VTBL_ENTRY _ZTV7S7401C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C4[];
static Base_Class bases_S7401C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20620C3_nt,    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
    -1, //immediately_derived
  1, 1},
  {&cd_S7401C4,    ABISELECT(80,48), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //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 _ZTI7S7401C2[];
extern void _ZN7S7401C2D1Ev();
extern void _ZN7S7401C2D0Ev();
static  VTBL_ENTRY vtc_S7401C2[] = {
  ABISELECT(80,48),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
  (VTBL_ENTRY)&_ZN7S7401C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C2D0Ev,
  ABISELECT(-16,-12),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
};
extern VTBL_ENTRY _ZTV7S7401C2[];
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C2[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C4[0]),
};
static  VTT_ENTRY vtt_S7401C2[] = {
  {&(_ZTV7S7401C2[4]),  4,9},
  {&(_ZTV7S7401C2[9]),  9,9},
  {&(_tg__ZTV7S7401C4__7S7401C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7401C2[];
extern  VTBL_ENTRY _ZTV7S7401C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C2[];
Class_Descriptor cd_S7401C2 = {  "S7401C2", // class name
  bases_S7401C2, 2,
  &(vtc_S7401C2[0]), // expected_vtbl_contents
  &(vtt_S7401C2[0]), // expected_vtt_contents
  ABISELECT(144,96), // object size
  NSPAIRA(_ZTI7S7401C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7401C2),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7401C2),3, //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  S7401C7  : virtual S20620C3_nt , virtual S7401C2 , S7401C4 {
  virtual  ~S7401C7(); // _ZN7S7401C7D2Ev
  S7401C7(); // tgen
};
//SIG(-1 S7401C7) C1{ VBC2{ m FD} VBC3{ VBC2 VBC4{ VBC2 Fp Fi[4] FC2 FC2} vd Fp FL Fp FD Fs} BC4 vd}


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

static void Test_S7401C7()
{
  extern Class_Descriptor cd_S7401C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,37)];
    init_test(&cd_S7401C7, buf);
    S7401C7 *dp, &lv = *(dp=new (buf) S7401C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,144), "sizeof(S7401C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7401C7)");
    check_base_class_offset(lv, (S20620C3_nt*), ABISELECT(64,48), "S7401C7");
    check_base_class_offset(lv, (S20620C3_nt*)(S7401C2*), ABISELECT(64,48), "S7401C7");
    /*is_ambiguous_... S7401C7::S7401C4 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C4*), ABISELECT(64,48), "S7401C7");
    /*is_ambiguous_... S7401C7::S7401C4 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C4*), ABISELECT(64,48), "S7401C7");
    check_base_class_offset(lv, (S7401C4*)(S7401C2*), ABISELECT(144,96), "S7401C7");
    check_base_class_offset(lv, (S7401C2*), ABISELECT(80,60), "S7401C7");
    /*is_ambiguous_... S7401C7::S7401C4 */ AMB_check_base_class_offset(lv, (S7401C4*), 0, "S7401C7");
    test_class_info(&lv, &cd_S7401C7);
    dp->~S7401C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7401C7(Test_S7401C7, "S7401C7", ABISELECT(208,144));

#else // __cplusplus

extern void _ZN7S7401C7C1Ev();
extern void _ZN7S7401C7D2Ev();
Name_Map name_map_S7401C7[] = {
  NSPAIR(_ZN7S7401C7C1Ev),
  NSPAIR(_ZN7S7401C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20620C3_nt;
extern VTBL_ENTRY _ZTI11S20620C3_nt[];
extern Class_Descriptor cd_S7401C4;
extern VTBL_ENTRY _ZTI7S7401C4[];
extern  VTBL_ENTRY _ZTV7S7401C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C4[];
extern Class_Descriptor cd_S7401C2;
extern VTBL_ENTRY _ZTI7S7401C2[];
extern  VTBL_ENTRY _ZTV7S7401C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C2[];
extern Class_Descriptor cd_S7401C4;
extern VTBL_ENTRY _ZTI7S7401C4[];
extern  VTBL_ENTRY _ZTV7S7401C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C4[];
static Base_Class bases_S7401C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20620C3_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
  1, 1},
  {&cd_S7401C4,    ABISELECT(144,96), //bcp->offset
    14, //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
    2, //immediately_derived
  0, 1},
  {&cd_S7401C2,    ABISELECT(80,60), //bcp->offset
    7, //bcp->virtual_function_table_offset
    5, //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},
  {&cd_S7401C4,    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 _ZTI7S7401C7[];
extern void _ZN7S7401C7D1Ev();
extern void _ZN7S7401C7D0Ev();
extern void ABISELECT(_ZTv0_n40_N7S7401C7D1Ev,_ZTv0_n20_N7S7401C7D1Ev)();
extern void ABISELECT(_ZThn80_N7S7401C7D1Ev,_ZThn60_N7S7401C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7401C7D0Ev,_ZTv0_n20_N7S7401C7D0Ev)();
extern void ABISELECT(_ZThn80_N7S7401C7D0Ev,_ZThn60_N7S7401C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7401C7[] = {
  ABISELECT(144,96),
  ABISELECT(80,60),
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C7[0]),
  (VTBL_ENTRY)&_ZN7S7401C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C7D0Ev,
  ABISELECT(-80,-60),
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI7S7401C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C7D1Ev,_ZTv0_n20_N7S7401C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C7D0Ev,_ZTv0_n20_N7S7401C7D0Ev),
  ABISELECT(-80,-48),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI7S7401C7[0]),
};
extern VTBL_ENTRY _ZTV7S7401C7[];
static  VTBL_ENTRY _tg__ZTV7S7401C4__A__7S7401C7[] = {
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C4[0]),
};
extern void _ZN7S7401C2D1Ev();
extern void _ZN7S7401C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C2__7S7401C7[] = {
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
  (VTBL_ENTRY)&_ZN7S7401C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C2__7S7401C7[] = {
  ABISELECT(-80,-48),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C7[] = {
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C4[0]),
};
static  VTT_ENTRY vtt_S7401C7[] = {
  {&(_ZTV7S7401C7[5]),  5,17},
  {&(_tg__ZTV7S7401C4__A__7S7401C7[3]),  3,3},
  {&(_ZTV7S7401C7[12]),  12,17},
  {&(_ZTV7S7401C7[17]),  17,17},
  {&(_tg__ZTV7S7401C2__7S7401C7[4]),  4,6},
  {&(_tg__ZTV7S7401C4__7S7401C2__7S7401C7[3]),  3,3},
  {&(_tg__ZTV7S7401C4__7S7401C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7401C7[];
extern  VTBL_ENTRY _ZTV7S7401C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C7[];
static VTBL_ENTRY alt_thunk_names178[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C7D0Ev,_ZTv0_n20_N7S7401C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7401C7D0Ev,_ZThn60_N7S7401C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C7D1Ev,_ZTv0_n20_N7S7401C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7401C7D1Ev,_ZThn60_N7S7401C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7401C7 = {  "S7401C7", // class name
  bases_S7401C7, 4,
  &(vtc_S7401C7[0]), // expected_vtbl_contents
  &(vtt_S7401C7[0]), // expected_vtt_contents
  ABISELECT(208,144), // object size
  NSPAIRA(_ZTI7S7401C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7401C7),17, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7401C7),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names178,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7401C10  : S7401C4 , S7401C2 {
  ::S3052C22_nt s7401c10f0;
  virtual  ~S7401C10(); // _ZN8S7401C10D2Ev
  virtual void  v1(); // _ZN8S7401C102v1Ev
  S7401C10(); // tgen
};
//SIG(-1 S7401C10) C1{ BC2{ VBC3{ m FD} Fp Fi[4] FC3 FC3} BC4{ VBC3 VBC2 vd Fp FL Fp FD Fs} vd v1 FC5{}}


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

static void Test_S7401C10()
{
  extern Class_Descriptor cd_S7401C10;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(14,37)];
    init_test(&cd_S7401C10, buf);
    S7401C10 *dp, &lv = *(dp=new (buf) S7401C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,144), "sizeof(S7401C10)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7401C10)");
    /*is_ambiguous_... S7401C10::S7401C4 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C4*), ABISELECT(128,84), "S7401C10");
    check_base_class_offset(lv, (S20620C3_nt*)(S7401C2*), ABISELECT(128,84), "S7401C10");
    /*is_ambiguous_... S7401C10::S7401C4 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C4*), ABISELECT(128,84), "S7401C10");
    /*is_ambiguous_... S7401C10::S7401C4 */ AMB_check_base_class_offset(lv, (S7401C4*), 0, "S7401C10");
    check_base_class_offset(lv, (S7401C4*)(S7401C2*), ABISELECT(144,96), "S7401C10");
    check_base_class_offset(lv, (S7401C2*), ABISELECT(64,48), "S7401C10");
    check_field_offset(lv, s7401c10f0, ABISELECT(114,82), "S7401C10.s7401c10f0");
    test_class_info(&lv, &cd_S7401C10);
    dp->~S7401C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7401C10(Test_S7401C10, "S7401C10", ABISELECT(208,144));

#else // __cplusplus

extern void _ZN8S7401C10C1Ev();
extern void _ZN8S7401C10D2Ev();
Name_Map name_map_S7401C10[] = {
  NSPAIR(_ZN8S7401C10C1Ev),
  NSPAIR(_ZN8S7401C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20620C3_nt;
extern VTBL_ENTRY _ZTI11S20620C3_nt[];
extern Class_Descriptor cd_S7401C4;
extern VTBL_ENTRY _ZTI7S7401C4[];
extern  VTBL_ENTRY _ZTV7S7401C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C4[];
extern Class_Descriptor cd_S7401C4;
extern VTBL_ENTRY _ZTI7S7401C4[];
extern  VTBL_ENTRY _ZTV7S7401C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C4[];
extern Class_Descriptor cd_S7401C2;
extern VTBL_ENTRY _ZTI7S7401C2[];
extern  VTBL_ENTRY _ZTV7S7401C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C2[];
static Base_Class bases_S7401C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20620C3_nt,    ABISELECT(128,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, 1},
  {&cd_S7401C4,    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},
  {&cd_S7401C4,    ABISELECT(144,96), //bcp->offset
    13, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7401C2,    ABISELECT(64,48), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S7401C10[];
extern void _ZN8S7401C10D1Ev();
extern void _ZN8S7401C10D0Ev();
extern void _ZN8S7401C102v1Ev();
extern void ABISELECT(_ZThn64_N8S7401C10D1Ev,_ZThn48_N8S7401C10D1Ev)();
extern void ABISELECT(_ZThn64_N8S7401C10D0Ev,_ZThn48_N8S7401C10D0Ev)();
static  VTBL_ENTRY vtc_S7401C10[] = {
  ABISELECT(144,96),
  ABISELECT(128,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S7401C10[0]),
  (VTBL_ENTRY)&_ZN8S7401C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7401C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7401C102v1Ev,
  ABISELECT(80,48),
  ABISELECT(64,36),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI8S7401C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S7401C10D1Ev,_ZThn48_N8S7401C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S7401C10D0Ev,_ZThn48_N8S7401C10D0Ev),
  ABISELECT(-16,-12),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI8S7401C10[0]),
};
extern VTBL_ENTRY _ZTV8S7401C10[];
static  VTBL_ENTRY _tg__ZTV7S7401C4__A__8S7401C10[] = {
  ABISELECT(128,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C4[0]),
};
extern void _ZN7S7401C2D1Ev();
extern void _ZN7S7401C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C2__8S7401C10[] = {
  ABISELECT(80,48),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
  (VTBL_ENTRY)&_ZN7S7401C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C2__8S7401C10[] = {
  ABISELECT(-16,-12),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__A1__8S7401C10[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C4[0]),
};
static  VTT_ENTRY vtt_S7401C10[] = {
  {&(_ZTV8S7401C10[4]),  4,16},
  {&(_tg__ZTV7S7401C4__A__8S7401C10[3]),  3,3},
  {&(_tg__ZTV7S7401C2__8S7401C10[4]),  4,6},
  {&(_tg__ZTV7S7401C4__7S7401C2__8S7401C10[3]),  3,3},
  {&(_ZTV8S7401C10[11]),  11,16},
  {&(_ZTV8S7401C10[16]),  16,16},
  {&(_tg__ZTV7S7401C4__A1__8S7401C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7401C10[];
extern  VTBL_ENTRY _ZTV8S7401C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7401C10[];
Class_Descriptor cd_S7401C10 = {  "S7401C10", // class name
  bases_S7401C10, 4,
  &(vtc_S7401C10[0]), // expected_vtbl_contents
  &(vtt_S7401C10[0]), // expected_vtt_contents
  ABISELECT(208,144), // object size
  NSPAIRA(_ZTI8S7401C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7401C10),16, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7401C10),7, //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  S7401C9  : virtual S20620C3_nt , virtual S7401C7 {
  ::S7401C2 s7401c9f0;
  short s7401c9f1;
  ::S7401C10 s7401c9f2;
  virtual  ~S7401C9(); // _ZN7S7401C9D2Ev
  S7401C9(); // tgen
};
//SIG(-1 S7401C9) C1{ VBC2{ m FD} VBC3{ VBC2 VBC4{ VBC2 VBC5{ VBC2 Fp Fi[4] FC2 FC2} vd Fp FL Fp FD Fs} BC5 vd} vd FC4 Fs FC6{ BC5 BC4 vd v1 FC7{}}}


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

static void Test_S7401C9()
{
  extern Class_Descriptor cd_S7401C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(38,99)];
    init_test(&cd_S7401C9, buf);
    S7401C9 *dp, &lv = *(dp=new (buf) S7401C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(592,392), "sizeof(S7401C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7401C9)");
    check_base_class_offset(lv, (S20620C3_nt*), ABISELECT(384,248), "S7401C9");
    check_base_class_offset(lv, (S20620C3_nt*)(S7401C7*), ABISELECT(384,248), "S7401C9");
    check_base_class_offset(lv, (S20620C3_nt*)(S7401C2*), ABISELECT(384,248), "S7401C9");
    /*is_ambiguous_... S7401C9::S7401C4 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C4*), ABISELECT(384,248), "S7401C9");
    /*is_ambiguous_... S7401C7::S7401C4 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C4*)(S7401C7*), ABISELECT(384,248), "S7401C9");
    check_base_class_offset(lv, (S7401C4*)(S7401C2*), ABISELECT(528,344), "S7401C9");
    check_base_class_offset(lv, (S7401C2*)(S7401C7*), ABISELECT(464,308), "S7401C9");
    /*is_ambiguous_... S7401C7::S7401C4 */ AMB_check_base_class_offset(lv, (S7401C4*)(S7401C7*), ABISELECT(400,260), "S7401C9");
    check_base_class_offset(lv, (S7401C7*), ABISELECT(400,260), "S7401C9");
    check_field_offset(lv, s7401c9f0, ABISELECT(16,4), "S7401C9.s7401c9f0");
    check_field_offset(lv, s7401c9f1, ABISELECT(160,100), "S7401C9.s7401c9f1");
    check_field_offset(lv, s7401c9f2, ABISELECT(176,104), "S7401C9.s7401c9f2");
    test_class_info(&lv, &cd_S7401C9);
    dp->~S7401C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7401C9(Test_S7401C9, "S7401C9", ABISELECT(592,392));

#else // __cplusplus

extern void _ZN7S7401C9C1Ev();
extern void _ZN7S7401C9D2Ev();
Name_Map name_map_S7401C9[] = {
  NSPAIR(_ZN7S7401C9C1Ev),
  NSPAIR(_ZN7S7401C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20620C3_nt;
extern VTBL_ENTRY _ZTI11S20620C3_nt[];
extern Class_Descriptor cd_S7401C4;
extern VTBL_ENTRY _ZTI7S7401C4[];
extern  VTBL_ENTRY _ZTV7S7401C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C4[];
extern Class_Descriptor cd_S7401C2;
extern VTBL_ENTRY _ZTI7S7401C2[];
extern  VTBL_ENTRY _ZTV7S7401C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C2[];
extern Class_Descriptor cd_S7401C4;
extern VTBL_ENTRY _ZTI7S7401C4[];
extern  VTBL_ENTRY _ZTV7S7401C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C4[];
extern Class_Descriptor cd_S7401C7;
extern VTBL_ENTRY _ZTI7S7401C7[];
extern  VTBL_ENTRY _ZTV7S7401C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C7[];
static Base_Class bases_S7401C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20620C3_nt,    ABISELECT(384,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7401C4,    ABISELECT(528,344), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7401C2,    ABISELECT(464,308), //bcp->offset
    16, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7401C4,    ABISELECT(400,260), //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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7401C7,    ABISELECT(400,260), //bcp->offset
    8, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7401C9[];
extern void _ZN7S7401C9D1Ev();
extern void _ZN7S7401C9D0Ev();
extern void ABISELECT(_ZTv0_n48_N7S7401C9D1Ev,_ZTv0_n24_N7S7401C9D1Ev)();
extern void ABISELECT(_ZThn400_N7S7401C9D1Ev,_ZThn260_N7S7401C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7401C9D0Ev,_ZTv0_n24_N7S7401C9D0Ev)();
extern void ABISELECT(_ZThn400_N7S7401C9D0Ev,_ZThn260_N7S7401C9D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7401C9D1Ev,_ZTv0_n20_N7S7401C9D1Ev)();
extern void ABISELECT(_ZThn464_N7S7401C9D1Ev,_ZThn308_N7S7401C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7401C9D0Ev,_ZTv0_n20_N7S7401C9D0Ev)();
extern void ABISELECT(_ZThn464_N7S7401C9D0Ev,_ZThn308_N7S7401C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7401C9[] = {
  ABISELECT(528,344),
  ABISELECT(464,308),
  ABISELECT(400,260),
  ABISELECT(384,248),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C9[0]),
  (VTBL_ENTRY)&_ZN7S7401C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C9D0Ev,
  ABISELECT(-400,-260),
  ABISELECT(128,84),
  ABISELECT(64,48),
  ABISELECT(-16,-12),
  ABISELECT(-400,-260),
  (VTBL_ENTRY)&(_ZTI7S7401C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C9D1Ev,_ZTv0_n24_N7S7401C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C9D0Ev,_ZTv0_n24_N7S7401C9D0Ev),
  ABISELECT(-464,-308),
  ABISELECT(64,36),
  ABISELECT(-80,-60),
  ABISELECT(-464,-308),
  (VTBL_ENTRY)&(_ZTI7S7401C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C9D1Ev,_ZTv0_n20_N7S7401C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C9D0Ev,_ZTv0_n20_N7S7401C9D0Ev),
  ABISELECT(-144,-96),
  ABISELECT(-528,-344),
  (VTBL_ENTRY)&(_ZTI7S7401C9[0]),
};
extern VTBL_ENTRY _ZTV7S7401C9[];
extern void _ZN7S7401C7D1Ev();
extern void _ZN7S7401C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C7__7S7401C9[] = {
  ABISELECT(128,84),
  ABISELECT(64,48),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C7[0]),
  (VTBL_ENTRY)&_ZN7S7401C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7401C47S7401C7__A1__7S7401C9[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C4[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S7401C7D1Ev,_ZTv0_n20_N7S7401C7D1Ev)();
extern void ABISELECT(_ZThn64_N7S7401C7D1Ev,_ZThn48_N7S7401C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7401C7D0Ev,_ZTv0_n20_N7S7401C7D0Ev)();
extern void ABISELECT(_ZThn64_N7S7401C7D0Ev,_ZThn48_N7S7401C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7401C2__7S7401C7__7S7401C9[] = {
  ABISELECT(-64,-48),
  ABISELECT(64,36),
  ABISELECT(-80,-60),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI7S7401C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C7D1Ev,_ZTv0_n20_N7S7401C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C7D0Ev,_ZTv0_n20_N7S7401C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C7__7S7401C9[] = {
  ABISELECT(-144,-96),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI7S7401C7[0]),
};
extern void _ZN7S7401C2D1Ev();
extern void _ZN7S7401C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C2__7S7401C9[] = {
  ABISELECT(64,36),
  ABISELECT(-80,-60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
  (VTBL_ENTRY)&_ZN7S7401C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C2__7S7401C9[] = {
  ABISELECT(-144,-96),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C9[] = {
  ABISELECT(-144,-96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C4[0]),
};
static  VTT_ENTRY vtt_S7401C9[] = {
  {&(_ZTV7S7401C9[6]),  6,26},
  {&(_ZTV7S7401C9[14]),  14,26},
  {&(_ZTV7S7401C9[21]),  21,26},
  {&(_ZTV7S7401C9[26]),  26,26},
  {&(_tg__ZTV7S7401C7__7S7401C9[5]),  5,7},
  {&(_tg__ZTV7S7401C47S7401C7__A1__7S7401C9[3]),  3,3},
  {&(_tg__ZTV7S7401C2__7S7401C7__7S7401C9[5]),  5,7},
  {&(_tg__ZTV7S7401C4__7S7401C7__7S7401C9[3]),  3,3},
  {&(_tg__ZTV7S7401C2__7S7401C9[4]),  4,6},
  {&(_tg__ZTV7S7401C4__7S7401C2__7S7401C9[3]),  3,3},
  {&(_tg__ZTV7S7401C4__7S7401C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7401C9[];
extern  VTBL_ENTRY _ZTV7S7401C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C9[];
static VTBL_ENTRY alt_thunk_names179[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C7D0Ev,_ZTv0_n20_N7S7401C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7401C7D0Ev,_ZThn48_N7S7401C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C7D1Ev,_ZTv0_n20_N7S7401C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7401C7D1Ev,_ZThn48_N7S7401C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C9D0Ev,_ZTv0_n20_N7S7401C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S7401C9D0Ev,_ZThn308_N7S7401C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C9D1Ev,_ZTv0_n20_N7S7401C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn464_N7S7401C9D1Ev,_ZThn308_N7S7401C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C9D0Ev,_ZTv0_n24_N7S7401C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S7401C9D0Ev,_ZThn260_N7S7401C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C9D1Ev,_ZTv0_n24_N7S7401C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn400_N7S7401C9D1Ev,_ZThn260_N7S7401C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7401C9 = {  "S7401C9", // class name
  bases_S7401C9, 5,
  &(vtc_S7401C9[0]), // expected_vtbl_contents
  &(vtt_S7401C9[0]), // expected_vtt_contents
  ABISELECT(592,392), // object size
  NSPAIRA(_ZTI7S7401C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7401C9),26, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7401C9),11, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names179,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7401C8  : virtual S20620C3_nt , virtual S7401C4 , virtual S7401C2 , S7401C9 , S7401C10 {
  virtual  ~S7401C8(); // _ZN7S7401C8D2Ev
  virtual void  v2(); // _ZN7S7401C82v2Ev
  virtual void  v3(); // _ZN7S7401C82v3Ev
  S7401C8(); // tgen
};
//SIG(-1 S7401C8) C1{ VBC2{ m FD} VBC3{ VBC2 Fp Fi[4] FC2 FC2} VBC4{ VBC2 VBC3 vd Fp FL Fp FD Fs} BC5{ VBC2 VBC6{ VBC2 VBC4 BC3 vd} vd FC4 Fs FC7{ BC3 BC4 vd v3 FC8{}}} BC7 vd v1 v2}


 S7401C8 ::~S7401C8(){ note_dtor("S7401C8", this);}
void  S7401C8 ::v2(){vfunc_called(this, "_ZN7S7401C82v2Ev");}
void  S7401C8 ::v3(){vfunc_called(this, "_ZN7S7401C82v3Ev");}
S7401C8 ::S7401C8(){ note_ctor("S7401C8", this);} // tgen

static void Test_S7401C8()
{
  extern Class_Descriptor cd_S7401C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(46,120)];
    init_test(&cd_S7401C8, buf);
    S7401C8 *dp, &lv = *(dp=new (buf) S7401C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(720,476), "sizeof(S7401C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7401C8)");
    check_base_class_offset(lv, (S20620C3_nt*), ABISELECT(512,332), "S7401C8");
    /*is_ambiguous_... S7401C8::S7401C4 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C4*), ABISELECT(512,332), "S7401C8");
    /*is_ambiguous_... S7401C8::S7401C2 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C2*), ABISELECT(512,332), "S7401C8");
    check_base_class_offset(lv, (S20620C3_nt*)(S7401C9*), ABISELECT(512,332), "S7401C8");
    check_base_class_offset(lv, (S20620C3_nt*)(S7401C7*), ABISELECT(512,332), "S7401C8");
    /*is_ambiguous_... S7401C7::S7401C4 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C4*)(S7401C7*), ABISELECT(512,332), "S7401C8");
    /*is_ambiguous_... S7401C10::S7401C4 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C4*)(S7401C10*), ABISELECT(512,332), "S7401C8");
    check_base_class_offset(lv, (S20620C3_nt*)(S7401C2*)(S7401C10*), ABISELECT(512,332), "S7401C8");
    /*is_ambiguous_... S7401C8::S7401C4 */ AMB_check_base_class_offset(lv, (S7401C4*), ABISELECT(528,344), "S7401C8");
    /*is_ambiguous_... S7401C8::S7401C2 */ AMB_check_base_class_offset(lv, (S7401C4*)(S7401C2*), ABISELECT(528,344), "S7401C8");
    check_base_class_offset(lv, (S7401C4*)(S7401C2*)(S7401C10*), ABISELECT(528,344), "S7401C8");
    /*is_ambiguous_... S7401C8::S7401C2 */ AMB_check_base_class_offset(lv, (S7401C2*), ABISELECT(592,392), "S7401C8");
    check_base_class_offset(lv, (S7401C2*)(S7401C7*), ABISELECT(592,392), "S7401C8");
    /*is_ambiguous_... S7401C7::S7401C4 */ AMB_check_base_class_offset(lv, (S7401C4*)(S7401C7*), ABISELECT(656,428), "S7401C8");
    check_base_class_offset(lv, (S7401C7*)(S7401C9*), ABISELECT(656,428), "S7401C8");
    check_base_class_offset(lv, (S7401C9*), 0, "S7401C8");
    /*is_ambiguous_... S7401C10::S7401C4 */ AMB_check_base_class_offset(lv, (S7401C4*)(S7401C10*), ABISELECT(384,248), "S7401C8");
    check_base_class_offset(lv, (S7401C2*)(S7401C10*), ABISELECT(448,296), "S7401C8");
    check_base_class_offset(lv, (S7401C10*), ABISELECT(384,248), "S7401C8");
    test_class_info(&lv, &cd_S7401C8);
    dp->~S7401C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7401C8(Test_S7401C8, "S7401C8", ABISELECT(720,476));

#else // __cplusplus

extern void _ZN7S7401C8C1Ev();
extern void _ZN7S7401C8D2Ev();
Name_Map name_map_S7401C8[] = {
  NSPAIR(_ZN7S7401C8C1Ev),
  NSPAIR(_ZN7S7401C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20620C3_nt;
extern VTBL_ENTRY _ZTI11S20620C3_nt[];
extern Class_Descriptor cd_S7401C4;
extern VTBL_ENTRY _ZTI7S7401C4[];
extern  VTBL_ENTRY _ZTV7S7401C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C4[];
extern Class_Descriptor cd_S7401C2;
extern VTBL_ENTRY _ZTI7S7401C2[];
extern  VTBL_ENTRY _ZTV7S7401C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C2[];
extern Class_Descriptor cd_S7401C4;
extern VTBL_ENTRY _ZTI7S7401C4[];
extern  VTBL_ENTRY _ZTV7S7401C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C4[];
extern Class_Descriptor cd_S7401C7;
extern VTBL_ENTRY _ZTI7S7401C7[];
extern  VTBL_ENTRY _ZTV7S7401C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C7[];
extern Class_Descriptor cd_S7401C9;
extern VTBL_ENTRY _ZTI7S7401C9[];
extern  VTBL_ENTRY _ZTV7S7401C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C9[];
extern Class_Descriptor cd_S7401C4;
extern VTBL_ENTRY _ZTI7S7401C4[];
extern  VTBL_ENTRY _ZTV7S7401C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C4[];
extern Class_Descriptor cd_S7401C2;
extern VTBL_ENTRY _ZTI7S7401C2[];
extern  VTBL_ENTRY _ZTV7S7401C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C2[];
extern Class_Descriptor cd_S7401C10;
extern VTBL_ENTRY _ZTI8S7401C10[];
extern  VTBL_ENTRY _ZTV8S7401C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7401C10[];
static Base_Class bases_S7401C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20620C3_nt,    ABISELECT(512,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
    -1, //immediately_derived
  1, 1},
  {&cd_S7401C4,    ABISELECT(528,344), //bcp->offset
    23, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7401C2,    ABISELECT(592,392), //bcp->offset
    26, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7401C4,    ABISELECT(656,428), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7401C7,    ABISELECT(656,428), //bcp->offset
    33, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7401C9,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7401C4,    ABISELECT(384,248), //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
    8, //immediately_derived
  0, 0},
  {&cd_S7401C2,    ABISELECT(448,296), //bcp->offset
    17, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7401C10,    ABISELECT(384,248), //bcp->offset
    10, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7401C8[];
extern void _ZN7S7401C8D1Ev();
extern void _ZN7S7401C8D0Ev();
extern void _ZN7S7401C82v2Ev();
extern void _ZN7S7401C82v3Ev();
extern void ABISELECT(_ZThn384_N7S7401C8D1Ev,_ZThn248_N7S7401C8D1Ev)();
extern void ABISELECT(_ZThn384_N7S7401C8D0Ev,_ZThn248_N7S7401C8D0Ev)();
extern void _ZN8S7401C102v1Ev();
extern void ABISELECT(_ZThn448_N7S7401C8D1Ev,_ZThn296_N7S7401C8D1Ev)();
extern void ABISELECT(_ZThn448_N7S7401C8D0Ev,_ZThn296_N7S7401C8D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7401C8D1Ev,_ZTv0_n20_N7S7401C8D1Ev)();
extern void ABISELECT(_ZThn592_N7S7401C8D1Ev,_ZThn392_N7S7401C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7401C8D0Ev,_ZTv0_n20_N7S7401C8D0Ev)();
extern void ABISELECT(_ZThn592_N7S7401C8D0Ev,_ZThn392_N7S7401C8D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7401C8D1Ev,_ZTv0_n24_N7S7401C8D1Ev)();
extern void ABISELECT(_ZThn656_N7S7401C8D1Ev,_ZThn428_N7S7401C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7401C8D0Ev,_ZTv0_n24_N7S7401C8D0Ev)();
extern void ABISELECT(_ZThn656_N7S7401C8D0Ev,_ZThn428_N7S7401C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7401C8[] = {
  ABISELECT(528,344),
  ABISELECT(592,392),
  ABISELECT(656,428),
  ABISELECT(512,332),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C8[0]),
  (VTBL_ENTRY)&_ZN7S7401C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7401C82v2Ev,
  (VTBL_ENTRY)&_ZN7S7401C82v3Ev,
  ABISELECT(144,96),
  ABISELECT(128,84),
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI7S7401C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N7S7401C8D1Ev,_ZThn248_N7S7401C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N7S7401C8D0Ev,_ZThn248_N7S7401C8D0Ev),
  (VTBL_ENTRY)&_ZN8S7401C102v1Ev,
  ABISELECT(80,48),
  ABISELECT(64,36),
  ABISELECT(-448,-296),
  (VTBL_ENTRY)&(_ZTI7S7401C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N7S7401C8D1Ev,_ZThn296_N7S7401C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N7S7401C8D0Ev,_ZThn296_N7S7401C8D0Ev),
  ABISELECT(-16,-12),
  ABISELECT(-528,-344),
  (VTBL_ENTRY)&(_ZTI7S7401C8[0]),
  ABISELECT(-592,-392),
  ABISELECT(-64,-48),
  ABISELECT(-80,-60),
  ABISELECT(-592,-392),
  (VTBL_ENTRY)&(_ZTI7S7401C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C8D1Ev,_ZTv0_n20_N7S7401C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C8D0Ev,_ZTv0_n20_N7S7401C8D0Ev),
  ABISELECT(-656,-428),
  ABISELECT(-128,-84),
  ABISELECT(-64,-36),
  ABISELECT(-144,-96),
  ABISELECT(-656,-428),
  (VTBL_ENTRY)&(_ZTI7S7401C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C8D1Ev,_ZTv0_n24_N7S7401C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C8D0Ev,_ZTv0_n24_N7S7401C8D0Ev),
};
extern VTBL_ENTRY _ZTV7S7401C8[];
extern void _ZN7S7401C9D1Ev();
extern void _ZN7S7401C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C9__7S7401C8[] = {
  ABISELECT(528,344),
  ABISELECT(592,392),
  ABISELECT(656,428),
  ABISELECT(512,332),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C9[0]),
  (VTBL_ENTRY)&_ZN7S7401C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C9D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7401C9D1Ev,_ZTv0_n24_N7S7401C9D1Ev)();
extern void ABISELECT(_ZThn656_N7S7401C9D1Ev,_ZThn428_N7S7401C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7401C9D0Ev,_ZTv0_n24_N7S7401C9D0Ev)();
extern void ABISELECT(_ZThn656_N7S7401C9D0Ev,_ZThn428_N7S7401C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7401C7__7S7401C9__7S7401C8[] = {
  ABISELECT(-656,-428),
  ABISELECT(-128,-84),
  ABISELECT(-64,-36),
  ABISELECT(-144,-96),
  ABISELECT(-656,-428),
  (VTBL_ENTRY)&(_ZTI7S7401C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C9D1Ev,_ZTv0_n24_N7S7401C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C9D0Ev,_ZTv0_n24_N7S7401C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7401C9D1Ev,_ZTv0_n20_N7S7401C9D1Ev)();
extern void ABISELECT(_ZThn592_N7S7401C9D1Ev,_ZThn392_N7S7401C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7401C9D0Ev,_ZTv0_n20_N7S7401C9D0Ev)();
extern void ABISELECT(_ZThn592_N7S7401C9D0Ev,_ZThn392_N7S7401C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7401C2__7S7401C9__7S7401C8[] = {
  ABISELECT(-592,-392),
  ABISELECT(-64,-48),
  ABISELECT(-80,-60),
  ABISELECT(-592,-392),
  (VTBL_ENTRY)&(_ZTI7S7401C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C9D1Ev,_ZTv0_n20_N7S7401C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C9D0Ev,_ZTv0_n20_N7S7401C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C9__7S7401C8[] = {
  ABISELECT(-16,-12),
  ABISELECT(-528,-344),
  (VTBL_ENTRY)&(_ZTI7S7401C9[0]),
};
extern void _ZN8S7401C10D1Ev();
extern void _ZN8S7401C10D0Ev();
extern void _ZN8S7401C102v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7401C10__7S7401C8[] = {
  ABISELECT(144,96),
  ABISELECT(128,84),
  0,
  (VTBL_ENTRY)&(_ZTI8S7401C10[0]),
  (VTBL_ENTRY)&_ZN8S7401C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7401C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7401C102v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7401C48S7401C10__A2__7S7401C8[] = {
  ABISELECT(128,84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C4[0]),
};
extern void _ZN7S7401C2D1Ev();
extern void _ZN7S7401C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C28S7401C10__A1__7S7401C8[] = {
  ABISELECT(80,48),
  ABISELECT(64,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
  (VTBL_ENTRY)&_ZN7S7401C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C28S7401C10__A1__7S7401C8[] = {
  ABISELECT(-16,-12),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
};
extern void ABISELECT(_ZThn64_N8S7401C10D1Ev,_ZThn48_N8S7401C10D1Ev)();
extern void ABISELECT(_ZThn64_N8S7401C10D0Ev,_ZThn48_N8S7401C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7401C2__8S7401C10__7S7401C8[] = {
  ABISELECT(80,48),
  ABISELECT(64,36),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI8S7401C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S7401C10D1Ev,_ZThn48_N8S7401C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S7401C10D0Ev,_ZThn48_N8S7401C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__A1__8S7401C10__7S7401C8[] = {
  ABISELECT(-16,-12),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI8S7401C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C8[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C4[0]),
};
extern void _ZN7S7401C2D1Ev();
extern void _ZN7S7401C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C2__7S7401C8[] = {
  ABISELECT(-64,-48),
  ABISELECT(-80,-60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
  (VTBL_ENTRY)&_ZN7S7401C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C2__7S7401C8[] = {
  ABISELECT(-16,-12),
  ABISELECT(64,48),
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
};
extern void _ZN7S7401C7D1Ev();
extern void _ZN7S7401C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C7__7S7401C8[] = {
  ABISELECT(-128,-84),
  ABISELECT(-64,-36),
  ABISELECT(-144,-96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C7[0]),
  (VTBL_ENTRY)&_ZN7S7401C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7401C47S7401C7__A1__7S7401C8[] = {
  ABISELECT(-144,-96),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C4[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S7401C7D1Ev,_ZTv0_n20_N7S7401C7D1Ev)();
extern void ABISELECT(_ZTv0_n40_N7S7401C7D0Ev,_ZTv0_n20_N7S7401C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7401C2__7S7401C7__7S7401C8[] = {
  ABISELECT(64,36),
  ABISELECT(-64,-48),
  ABISELECT(-80,-60),
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI7S7401C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C7D1Ev,_ZTv0_n20_N7S7401C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C7D0Ev,_ZTv0_n20_N7S7401C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C7__7S7401C8[] = {
  ABISELECT(-16,-12),
  ABISELECT(128,84),
  (VTBL_ENTRY)&(_ZTI7S7401C7[0]),
};
static  VTT_ENTRY vtt_S7401C8[] = {
  {&(_ZTV7S7401C8[6]),  6,41},
  {&(_tg__ZTV7S7401C9__7S7401C8[6]),  6,8},
  {&(_tg__ZTV7S7401C7__7S7401C9__7S7401C8[6]),  6,8},
  {&(_tg__ZTV7S7401C2__7S7401C9__7S7401C8[5]),  5,7},
  {&(_tg__ZTV7S7401C4__7S7401C9__7S7401C8[3]),  3,3},
  {&(_tg__ZTV8S7401C10__7S7401C8[4]),  4,7},
  {&(_tg__ZTV7S7401C48S7401C10__A2__7S7401C8[3]),  3,3},
  {&(_tg__ZTV7S7401C28S7401C10__A1__7S7401C8[4]),  4,6},
  {&(_tg__ZTV7S7401C4__7S7401C28S7401C10__A1__7S7401C8[3]),  3,3},
  {&(_tg__ZTV7S7401C2__8S7401C10__7S7401C8[4]),  4,6},
  {&(_tg__ZTV7S7401C4__A1__8S7401C10__7S7401C8[3]),  3,3},
  {&(_ZTV7S7401C8[26]),  26,41},
  {&(_ZTV7S7401C8[31]),  31,41},
  {&(_ZTV7S7401C8[39]),  39,41},
  {&(_ZTV7S7401C8[14]),  14,41},
  {&(_ZTV7S7401C8[21]),  21,41},
  {&(_tg__ZTV7S7401C4__7S7401C8[3]),  3,3},
  {&(_tg__ZTV7S7401C2__7S7401C8[4]),  4,6},
  {&(_tg__ZTV7S7401C4__7S7401C2__7S7401C8[3]),  3,3},
  {&(_tg__ZTV7S7401C7__7S7401C8[5]),  5,7},
  {&(_tg__ZTV7S7401C47S7401C7__A1__7S7401C8[3]),  3,3},
  {&(_tg__ZTV7S7401C2__7S7401C7__7S7401C8[5]),  5,7},
  {&(_tg__ZTV7S7401C4__7S7401C7__7S7401C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7401C8[];
extern  VTBL_ENTRY _ZTV7S7401C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C8[];
static VTBL_ENTRY alt_thunk_names180[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C9D0Ev,_ZTv0_n20_N7S7401C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N7S7401C9D0Ev,_ZThn392_N7S7401C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C9D1Ev,_ZTv0_n20_N7S7401C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N7S7401C9D1Ev,_ZThn392_N7S7401C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C9D0Ev,_ZTv0_n24_N7S7401C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7401C9D0Ev,_ZThn428_N7S7401C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C9D1Ev,_ZTv0_n24_N7S7401C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7401C9D1Ev,_ZThn428_N7S7401C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C8D0Ev,_ZTv0_n24_N7S7401C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7401C8D0Ev,_ZThn428_N7S7401C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C8D1Ev,_ZTv0_n24_N7S7401C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7401C8D1Ev,_ZThn428_N7S7401C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C8D0Ev,_ZTv0_n20_N7S7401C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N7S7401C8D0Ev,_ZThn392_N7S7401C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C8D1Ev,_ZTv0_n20_N7S7401C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn592_N7S7401C8D1Ev,_ZThn392_N7S7401C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7401C8 = {  "S7401C8", // class name
  bases_S7401C8, 9,
  &(vtc_S7401C8[0]), // expected_vtbl_contents
  &(vtt_S7401C8[0]), // expected_vtt_contents
  ABISELECT(720,476), // object size
  NSPAIRA(_ZTI7S7401C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7401C8),41, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7401C8),23, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names180,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7401C6  : virtual S7401C7 , S7401C8 {
  int s7401c6f0[6];
  long double s7401c6f1;
  int s7401c6f2;
  long double s7401c6f3;
  virtual  ~S7401C6(); // _ZN7S7401C6D2Ev
  virtual void  v4(); // _ZN7S7401C62v4Ev
  virtual void  v5(); // _ZN7S7401C62v5Ev
  S7401C6(); // tgen
};
//SIG(-1 S7401C6) C1{ VBC2{ VBC3{ m FD} VBC4{ VBC3 VBC5{ VBC3 Fp Fi[4] FC3 FC3} vd Fp FL Fp FD Fs} BC5 vd} BC6{ VBC3 VBC5 VBC4 BC7{ VBC3 VBC2 vd FC4 Fs FC8{ BC5 BC4 vd v3 FC9{}}} BC8 vd v4 v5} vd v1 v2 Fi[6] FD Fi FD}


 S7401C6 ::~S7401C6(){ note_dtor("S7401C6", this);}
void  S7401C6 ::v4(){vfunc_called(this, "_ZN7S7401C62v4Ev");}
void  S7401C6 ::v5(){vfunc_called(this, "_ZN7S7401C62v5Ev");}
S7401C6 ::S7401C6(){ note_ctor("S7401C6", this);} // tgen

static void Test_S7401C6()
{
  extern Class_Descriptor cd_S7401C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(50,133)];
    init_test(&cd_S7401C6, buf);
    S7401C6 *dp, &lv = *(dp=new (buf) S7401C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(784,528), "sizeof(S7401C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7401C6)");
    check_base_class_offset(lv, (S20620C3_nt*)(S7401C7*), ABISELECT(640,432), "S7401C6");
    /*is_ambiguous_... S7401C6::S7401C2 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C2*), ABISELECT(640,432), "S7401C6");
    /*is_ambiguous_... S7401C6::S7401C4 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C4*), ABISELECT(640,432), "S7401C6");
    /*is_ambiguous_... S7401C7::S7401C4 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C4*)(S7401C7*), ABISELECT(640,432), "S7401C6");
    check_base_class_offset(lv, (S20620C3_nt*)(S7401C8*), ABISELECT(640,432), "S7401C6");
    check_base_class_offset(lv, (S20620C3_nt*)(S7401C9*)(S7401C8*), ABISELECT(640,432), "S7401C6");
    /*is_ambiguous_... S7401C10::S7401C4 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C4*)(S7401C10*)(S7401C8*), ABISELECT(640,432), "S7401C6");
    check_base_class_offset(lv, (S20620C3_nt*)(S7401C2*)(S7401C10*)(S7401C8*), ABISELECT(640,432), "S7401C6");
    /*is_ambiguous_... S7401C6::S7401C2 */ AMB_check_base_class_offset(lv, (S7401C4*)(S7401C2*), ABISELECT(720,480), "S7401C6");
    /*is_ambiguous_... S7401C8::S7401C4 */ AMB_check_base_class_offset(lv, (S7401C4*)(S7401C8*), ABISELECT(720,480), "S7401C6");
    check_base_class_offset(lv, (S7401C4*)(S7401C2*)(S7401C10*)(S7401C8*), ABISELECT(720,480), "S7401C6");
    check_base_class_offset(lv, (S7401C2*)(S7401C7*), ABISELECT(656,444), "S7401C6");
    /*is_ambiguous_... S7401C8::S7401C2 */ AMB_check_base_class_offset(lv, (S7401C2*)(S7401C8*), ABISELECT(656,444), "S7401C6");
    /*is_ambiguous_... S7401C7::S7401C4 */ AMB_check_base_class_offset(lv, (S7401C4*)(S7401C7*), ABISELECT(576,384), "S7401C6");
    check_base_class_offset(lv, (S7401C7*), ABISELECT(576,384), "S7401C6");
    check_base_class_offset(lv, (S7401C7*)(S7401C9*)(S7401C8*), ABISELECT(576,384), "S7401C6");
    check_base_class_offset(lv, (S7401C9*)(S7401C8*), 0, "S7401C6");
    /*is_ambiguous_... S7401C10::S7401C4 */ AMB_check_base_class_offset(lv, (S7401C4*)(S7401C10*)(S7401C8*), ABISELECT(384,248), "S7401C6");
    check_base_class_offset(lv, (S7401C2*)(S7401C10*)(S7401C8*), ABISELECT(448,296), "S7401C6");
    check_base_class_offset(lv, (S7401C10*)(S7401C8*), ABISELECT(384,248), "S7401C6");
    check_base_class_offset(lv, (S7401C8*), 0, "S7401C6");
    check_field_offset(lv, s7401c6f0, ABISELECT(500,332), "S7401C6.s7401c6f0");
    check_field_offset(lv, s7401c6f1, ABISELECT(528,356), "S7401C6.s7401c6f1");
    check_field_offset(lv, s7401c6f2, ABISELECT(544,368), "S7401C6.s7401c6f2");
    check_field_offset(lv, s7401c6f3, ABISELECT(560,372), "S7401C6.s7401c6f3");
    test_class_info(&lv, &cd_S7401C6);
    dp->~S7401C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7401C6(Test_S7401C6, "S7401C6", ABISELECT(784,528));

#else // __cplusplus

extern void _ZN7S7401C6C1Ev();
extern void _ZN7S7401C6D2Ev();
Name_Map name_map_S7401C6[] = {
  NSPAIR(_ZN7S7401C6C1Ev),
  NSPAIR(_ZN7S7401C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20620C3_nt;
extern VTBL_ENTRY _ZTI11S20620C3_nt[];
extern Class_Descriptor cd_S7401C4;
extern VTBL_ENTRY _ZTI7S7401C4[];
extern  VTBL_ENTRY _ZTV7S7401C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C4[];
extern Class_Descriptor cd_S7401C2;
extern VTBL_ENTRY _ZTI7S7401C2[];
extern  VTBL_ENTRY _ZTV7S7401C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C2[];
extern Class_Descriptor cd_S7401C4;
extern VTBL_ENTRY _ZTI7S7401C4[];
extern  VTBL_ENTRY _ZTV7S7401C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C4[];
extern Class_Descriptor cd_S7401C7;
extern VTBL_ENTRY _ZTI7S7401C7[];
extern  VTBL_ENTRY _ZTV7S7401C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C7[];
extern Class_Descriptor cd_S7401C9;
extern VTBL_ENTRY _ZTI7S7401C9[];
extern  VTBL_ENTRY _ZTV7S7401C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C9[];
extern Class_Descriptor cd_S7401C4;
extern VTBL_ENTRY _ZTI7S7401C4[];
extern  VTBL_ENTRY _ZTV7S7401C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C4[];
extern Class_Descriptor cd_S7401C2;
extern VTBL_ENTRY _ZTI7S7401C2[];
extern  VTBL_ENTRY _ZTV7S7401C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C2[];
extern Class_Descriptor cd_S7401C10;
extern VTBL_ENTRY _ZTI8S7401C10[];
extern  VTBL_ENTRY _ZTV8S7401C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7401C10[];
extern Class_Descriptor cd_S7401C8;
extern VTBL_ENTRY _ZTI7S7401C8[];
extern  VTBL_ENTRY _ZTV7S7401C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C8[];
static Base_Class bases_S7401C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20620C3_nt,    ABISELECT(640,432), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7401C4,    ABISELECT(720,480), //bcp->offset
    40, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7401C2,    ABISELECT(656,444), //bcp->offset
    33, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7401C4,    ABISELECT(576,384), //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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7401C7,    ABISELECT(576,384), //bcp->offset
    25, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7401C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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
    9, //immediately_derived
  0, 0},
  {&cd_S7401C4,    ABISELECT(384,248), //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
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7401C2,    ABISELECT(448,296), //bcp->offset
    19, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7401C10,    ABISELECT(384,248), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7401C8,    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},
  {0}};
extern VTBL_ENTRY _ZTI7S7401C6[];
extern void _ZN7S7401C6D1Ev();
extern void _ZN7S7401C6D0Ev();
extern void _ZN7S7401C82v2Ev();
extern void _ZN7S7401C82v3Ev();
extern void _ZN7S7401C62v4Ev();
extern void _ZN7S7401C62v5Ev();
extern void ABISELECT(_ZThn384_N7S7401C6D1Ev,_ZThn248_N7S7401C6D1Ev)();
extern void ABISELECT(_ZThn384_N7S7401C6D0Ev,_ZThn248_N7S7401C6D0Ev)();
extern void _ZN8S7401C102v1Ev();
extern void ABISELECT(_ZThn448_N7S7401C6D1Ev,_ZThn296_N7S7401C6D1Ev)();
extern void ABISELECT(_ZThn448_N7S7401C6D0Ev,_ZThn296_N7S7401C6D0Ev)();
extern void ABISELECT(_ZTv0_n48_N7S7401C6D1Ev,_ZTv0_n24_N7S7401C6D1Ev)();
extern void ABISELECT(_ZThn576_N7S7401C6D1Ev,_ZThn384_N7S7401C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7401C6D0Ev,_ZTv0_n24_N7S7401C6D0Ev)();
extern void ABISELECT(_ZThn576_N7S7401C6D0Ev,_ZThn384_N7S7401C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7401C6D1Ev,_ZTv0_n20_N7S7401C6D1Ev)();
extern void ABISELECT(_ZThn656_N7S7401C6D1Ev,_ZThn444_N7S7401C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7401C6D0Ev,_ZTv0_n20_N7S7401C6D0Ev)();
extern void ABISELECT(_ZThn656_N7S7401C6D0Ev,_ZThn444_N7S7401C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7401C6[] = {
  ABISELECT(720,480),
  ABISELECT(656,444),
  ABISELECT(576,384),
  ABISELECT(640,432),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C6[0]),
  (VTBL_ENTRY)&_ZN7S7401C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7401C82v2Ev,
  (VTBL_ENTRY)&_ZN7S7401C82v3Ev,
  (VTBL_ENTRY)&_ZN7S7401C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7401C62v5Ev,
  ABISELECT(336,232),
  ABISELECT(256,184),
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI7S7401C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N7S7401C6D1Ev,_ZThn248_N7S7401C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N7S7401C6D0Ev,_ZThn248_N7S7401C6D0Ev),
  (VTBL_ENTRY)&_ZN8S7401C102v1Ev,
  ABISELECT(272,184),
  ABISELECT(192,136),
  ABISELECT(-448,-296),
  (VTBL_ENTRY)&(_ZTI7S7401C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N7S7401C6D1Ev,_ZThn296_N7S7401C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N7S7401C6D0Ev,_ZThn296_N7S7401C6D0Ev),
  ABISELECT(-576,-384),
  ABISELECT(144,96),
  ABISELECT(80,60),
  ABISELECT(64,48),
  ABISELECT(-576,-384),
  (VTBL_ENTRY)&(_ZTI7S7401C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C6D1Ev,_ZTv0_n24_N7S7401C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C6D0Ev,_ZTv0_n24_N7S7401C6D0Ev),
  ABISELECT(-656,-444),
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  ABISELECT(-656,-444),
  (VTBL_ENTRY)&(_ZTI7S7401C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C6D1Ev,_ZTv0_n20_N7S7401C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C6D0Ev,_ZTv0_n20_N7S7401C6D0Ev),
  ABISELECT(-80,-48),
  ABISELECT(-720,-480),
  (VTBL_ENTRY)&(_ZTI7S7401C6[0]),
};
extern VTBL_ENTRY _ZTV7S7401C6[];
extern void _ZN7S7401C8D1Ev();
extern void _ZN7S7401C8D0Ev();
extern void _ZN7S7401C82v2Ev();
extern void _ZN7S7401C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C8__7S7401C6[] = {
  ABISELECT(720,480),
  ABISELECT(656,444),
  ABISELECT(576,384),
  ABISELECT(640,432),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C8[0]),
  (VTBL_ENTRY)&_ZN7S7401C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7401C82v2Ev,
  (VTBL_ENTRY)&_ZN7S7401C82v3Ev,
};
extern void _ZN7S7401C9D1Ev();
extern void _ZN7S7401C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C97S7401C8__7S7401C6[] = {
  ABISELECT(720,480),
  ABISELECT(656,444),
  ABISELECT(576,384),
  ABISELECT(640,432),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C9[0]),
  (VTBL_ENTRY)&_ZN7S7401C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C9D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7401C9D1Ev,_ZTv0_n24_N7S7401C9D1Ev)();
extern void ABISELECT(_ZThn576_N7S7401C9D1Ev,_ZThn384_N7S7401C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7401C9D0Ev,_ZTv0_n24_N7S7401C9D0Ev)();
extern void ABISELECT(_ZThn576_N7S7401C9D0Ev,_ZThn384_N7S7401C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7401C7__7S7401C97S7401C8__7S7401C6[] = {
  ABISELECT(-576,-384),
  ABISELECT(144,96),
  ABISELECT(80,60),
  ABISELECT(64,48),
  ABISELECT(-576,-384),
  (VTBL_ENTRY)&(_ZTI7S7401C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C9D1Ev,_ZTv0_n24_N7S7401C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C9D0Ev,_ZTv0_n24_N7S7401C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7401C9D1Ev,_ZTv0_n20_N7S7401C9D1Ev)();
extern void ABISELECT(_ZThn656_N7S7401C9D1Ev,_ZThn444_N7S7401C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7401C9D0Ev,_ZTv0_n20_N7S7401C9D0Ev)();
extern void ABISELECT(_ZThn656_N7S7401C9D0Ev,_ZThn444_N7S7401C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7401C2__7S7401C97S7401C8__7S7401C6[] = {
  ABISELECT(-656,-444),
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  ABISELECT(-656,-444),
  (VTBL_ENTRY)&(_ZTI7S7401C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C9D1Ev,_ZTv0_n20_N7S7401C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C9D0Ev,_ZTv0_n20_N7S7401C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C97S7401C8__7S7401C6[] = {
  ABISELECT(-80,-48),
  ABISELECT(-720,-480),
  (VTBL_ENTRY)&(_ZTI7S7401C9[0]),
};
extern void _ZN8S7401C10D1Ev();
extern void _ZN8S7401C10D0Ev();
extern void _ZN8S7401C102v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7401C107S7401C8__7S7401C6[] = {
  ABISELECT(336,232),
  ABISELECT(256,184),
  0,
  (VTBL_ENTRY)&(_ZTI8S7401C10[0]),
  (VTBL_ENTRY)&_ZN8S7401C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7401C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7401C102v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7401C48S7401C107S7401C8__A2__7S7401C6[] = {
  ABISELECT(256,184),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C4[0]),
};
extern void _ZN7S7401C2D1Ev();
extern void _ZN7S7401C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C28S7401C107S7401C8__A1__7S7401C6[] = {
  ABISELECT(272,184),
  ABISELECT(192,136),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
  (VTBL_ENTRY)&_ZN7S7401C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C28S7401C107S7401C8__A1__7S7401C6[] = {
  ABISELECT(-80,-48),
  ABISELECT(-272,-184),
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
};
extern void ABISELECT(_ZThn64_N8S7401C10D1Ev,_ZThn48_N8S7401C10D1Ev)();
extern void ABISELECT(_ZThn64_N8S7401C10D0Ev,_ZThn48_N8S7401C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7401C2__8S7401C107S7401C8__7S7401C6[] = {
  ABISELECT(272,184),
  ABISELECT(192,136),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI8S7401C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S7401C10D1Ev,_ZThn48_N8S7401C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S7401C10D0Ev,_ZThn48_N8S7401C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__A1__8S7401C107S7401C8__7S7401C6[] = {
  ABISELECT(-80,-48),
  ABISELECT(-336,-232),
  (VTBL_ENTRY)&(_ZTI8S7401C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C8__7S7401C6[] = {
  ABISELECT(-80,-48),
  ABISELECT(-720,-480),
  (VTBL_ENTRY)&(_ZTI7S7401C8[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S7401C8D1Ev,_ZTv0_n20_N7S7401C8D1Ev)();
extern void ABISELECT(_ZThn656_N7S7401C8D1Ev,_ZThn444_N7S7401C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7401C8D0Ev,_ZTv0_n20_N7S7401C8D0Ev)();
extern void ABISELECT(_ZThn656_N7S7401C8D0Ev,_ZThn444_N7S7401C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7401C2__7S7401C8__7S7401C6[] = {
  ABISELECT(-656,-444),
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  ABISELECT(-656,-444),
  (VTBL_ENTRY)&(_ZTI7S7401C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C8D1Ev,_ZTv0_n20_N7S7401C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C8D0Ev,_ZTv0_n20_N7S7401C8D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S7401C8D1Ev,_ZTv0_n24_N7S7401C8D1Ev)();
extern void ABISELECT(_ZThn576_N7S7401C8D1Ev,_ZThn384_N7S7401C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7401C8D0Ev,_ZTv0_n24_N7S7401C8D0Ev)();
extern void ABISELECT(_ZThn576_N7S7401C8D0Ev,_ZThn384_N7S7401C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7401C7__7S7401C8__7S7401C6[] = {
  ABISELECT(-576,-384),
  ABISELECT(144,96),
  ABISELECT(80,60),
  ABISELECT(64,48),
  ABISELECT(-576,-384),
  (VTBL_ENTRY)&(_ZTI7S7401C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C8D1Ev,_ZTv0_n24_N7S7401C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C8D0Ev,_ZTv0_n24_N7S7401C8D0Ev),
};
extern void ABISELECT(_ZThn384_N7S7401C8D1Ev,_ZThn248_N7S7401C8D1Ev)();
extern void ABISELECT(_ZThn384_N7S7401C8D0Ev,_ZThn248_N7S7401C8D0Ev)();
extern void _ZN8S7401C102v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7401C10__7S7401C8__7S7401C6[] = {
  ABISELECT(336,232),
  ABISELECT(256,184),
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI7S7401C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N7S7401C8D1Ev,_ZThn248_N7S7401C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N7S7401C8D0Ev,_ZThn248_N7S7401C8D0Ev),
  (VTBL_ENTRY)&_ZN8S7401C102v1Ev,
};
extern void ABISELECT(_ZThn448_N7S7401C8D1Ev,_ZThn296_N7S7401C8D1Ev)();
extern void ABISELECT(_ZThn448_N7S7401C8D0Ev,_ZThn296_N7S7401C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7401C28S7401C10__A1__7S7401C8__7S7401C6[] = {
  ABISELECT(272,184),
  ABISELECT(192,136),
  ABISELECT(-448,-296),
  (VTBL_ENTRY)&(_ZTI7S7401C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N7S7401C8D1Ev,_ZThn296_N7S7401C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N7S7401C8D0Ev,_ZThn296_N7S7401C8D0Ev),
};
extern void _ZN7S7401C7D1Ev();
extern void _ZN7S7401C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C7__7S7401C6[] = {
  ABISELECT(144,96),
  ABISELECT(80,60),
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C7[0]),
  (VTBL_ENTRY)&_ZN7S7401C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7401C47S7401C7__A1__7S7401C6[] = {
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C4[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S7401C7D1Ev,_ZTv0_n20_N7S7401C7D1Ev)();
extern void ABISELECT(_ZThn80_N7S7401C7D1Ev,_ZThn60_N7S7401C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7401C7D0Ev,_ZTv0_n20_N7S7401C7D0Ev)();
extern void ABISELECT(_ZThn80_N7S7401C7D0Ev,_ZThn60_N7S7401C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7401C2__7S7401C7__7S7401C6[] = {
  ABISELECT(-80,-60),
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI7S7401C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C7D1Ev,_ZTv0_n20_N7S7401C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C7D0Ev,_ZTv0_n20_N7S7401C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C7__7S7401C6[] = {
  ABISELECT(-80,-48),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI7S7401C7[0]),
};
extern void _ZN7S7401C2D1Ev();
extern void _ZN7S7401C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C2__7S7401C6[] = {
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
  (VTBL_ENTRY)&_ZN7S7401C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C2__7S7401C6[] = {
  ABISELECT(-80,-48),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C6[] = {
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C4[0]),
};
static  VTT_ENTRY vtt_S7401C6[] = {
  {&(_ZTV7S7401C6[6]),  6,43},
  {&(_tg__ZTV7S7401C8__7S7401C6[6]),  6,10},
  {&(_tg__ZTV7S7401C97S7401C8__7S7401C6[6]),  6,8},
  {&(_tg__ZTV7S7401C7__7S7401C97S7401C8__7S7401C6[6]),  6,8},
  {&(_tg__ZTV7S7401C2__7S7401C97S7401C8__7S7401C6[5]),  5,7},
  {&(_tg__ZTV7S7401C4__7S7401C97S7401C8__7S7401C6[3]),  3,3},
  {&(_tg__ZTV8S7401C107S7401C8__7S7401C6[4]),  4,7},
  {&(_tg__ZTV7S7401C48S7401C107S7401C8__A2__7S7401C6[3]),  3,3},
  {&(_tg__ZTV7S7401C28S7401C107S7401C8__A1__7S7401C6[4]),  4,6},
  {&(_tg__ZTV7S7401C4__7S7401C28S7401C107S7401C8__A1__7S7401C6[3]),  3,3},
  {&(_tg__ZTV7S7401C2__8S7401C107S7401C8__7S7401C6[4]),  4,6},
  {&(_tg__ZTV7S7401C4__A1__8S7401C107S7401C8__7S7401C6[3]),  3,3},
  {&(_tg__ZTV7S7401C4__7S7401C8__7S7401C6[3]),  3,3},
  {&(_tg__ZTV7S7401C2__7S7401C8__7S7401C6[5]),  5,7},
  {&(_tg__ZTV7S7401C7__7S7401C8__7S7401C6[6]),  6,8},
  {&(_tg__ZTV8S7401C10__7S7401C8__7S7401C6[4]),  4,7},
  {&(_tg__ZTV7S7401C28S7401C10__A1__7S7401C8__7S7401C6[4]),  4,6},
  {&(_ZTV7S7401C6[31]),  31,43},
  {&(_ZTV7S7401C6[38]),  38,43},
  {&(_ZTV7S7401C6[43]),  43,43},
  {&(_ZTV7S7401C6[16]),  16,43},
  {&(_ZTV7S7401C6[23]),  23,43},
  {&(_tg__ZTV7S7401C7__7S7401C6[5]),  5,7},
  {&(_tg__ZTV7S7401C47S7401C7__A1__7S7401C6[3]),  3,3},
  {&(_tg__ZTV7S7401C2__7S7401C7__7S7401C6[5]),  5,7},
  {&(_tg__ZTV7S7401C4__7S7401C7__7S7401C6[3]),  3,3},
  {&(_tg__ZTV7S7401C2__7S7401C6[4]),  4,6},
  {&(_tg__ZTV7S7401C4__7S7401C2__7S7401C6[3]),  3,3},
  {&(_tg__ZTV7S7401C4__7S7401C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7401C6[];
extern  VTBL_ENTRY _ZTV7S7401C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C6[];
static VTBL_ENTRY alt_thunk_names181[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C7D0Ev,_ZTv0_n20_N7S7401C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7401C7D0Ev,_ZThn60_N7S7401C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C7D1Ev,_ZTv0_n20_N7S7401C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7401C7D1Ev,_ZThn60_N7S7401C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C8D0Ev,_ZTv0_n24_N7S7401C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N7S7401C8D0Ev,_ZThn384_N7S7401C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C8D1Ev,_ZTv0_n24_N7S7401C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N7S7401C8D1Ev,_ZThn384_N7S7401C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C8D0Ev,_ZTv0_n20_N7S7401C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7401C8D0Ev,_ZThn444_N7S7401C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C8D1Ev,_ZTv0_n20_N7S7401C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7401C8D1Ev,_ZThn444_N7S7401C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C9D0Ev,_ZTv0_n20_N7S7401C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7401C9D0Ev,_ZThn444_N7S7401C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C9D1Ev,_ZTv0_n20_N7S7401C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7401C9D1Ev,_ZThn444_N7S7401C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C9D0Ev,_ZTv0_n24_N7S7401C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N7S7401C9D0Ev,_ZThn384_N7S7401C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C9D1Ev,_ZTv0_n24_N7S7401C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N7S7401C9D1Ev,_ZThn384_N7S7401C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C6D0Ev,_ZTv0_n20_N7S7401C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7401C6D0Ev,_ZThn444_N7S7401C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C6D1Ev,_ZTv0_n20_N7S7401C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn656_N7S7401C6D1Ev,_ZThn444_N7S7401C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C6D0Ev,_ZTv0_n24_N7S7401C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N7S7401C6D0Ev,_ZThn384_N7S7401C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C6D1Ev,_ZTv0_n24_N7S7401C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn576_N7S7401C6D1Ev,_ZThn384_N7S7401C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7401C6 = {  "S7401C6", // class name
  bases_S7401C6, 10,
  &(vtc_S7401C6[0]), // expected_vtbl_contents
  &(vtt_S7401C6[0]), // expected_vtt_contents
  ABISELECT(784,528), // object size
  NSPAIRA(_ZTI7S7401C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7401C6),43, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7401C6),29, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names181,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7401C5  : S7401C6 , S7401C10 {
  ::S7401C9 s7401c5f0;
  __tsi64 s7401c5f1;
  int s7401c5f2;
  virtual void  v6(); // _ZN7S7401C52v6Ev
  virtual void  v7(); // _ZN7S7401C52v7Ev
  virtual void  v8(); // _ZN7S7401C52v8Ev
  ~S7401C5(); // tgen
  S7401C5(); // tgen
};
//SIG(-1 S7401C5) C1{ BC2{ VBC3{ VBC4{ m FD} VBC5{ VBC4 VBC6{ VBC4 Fp Fi[4] FC4 FC4} vd Fp FL Fp FD Fs} BC6 vd} BC7{ VBC4 VBC6 VBC5 BC8{ VBC4 VBC3 vd FC5 Fs FC9{ BC6 BC5 vd v4 FC10{}}} BC9 vd v5 v6} vd v7 v8 Fi[6] FD Fi FD} BC9 v1 v2 v3 FC8 FL Fi}


void  S7401C5 ::v6(){vfunc_called(this, "_ZN7S7401C52v6Ev");}
void  S7401C5 ::v7(){vfunc_called(this, "_ZN7S7401C52v7Ev");}
void  S7401C5 ::v8(){vfunc_called(this, "_ZN7S7401C52v8Ev");}
S7401C5 ::~S7401C5(){ note_dtor("S7401C5", this);} // tgen
S7401C5 ::S7401C5(){ note_ctor("S7401C5", this);} // tgen

static void Test_S7401C5()
{
  extern Class_Descriptor cd_S7401C5;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(96,255)];
    init_test(&cd_S7401C5, buf);
    S7401C5 *dp, &lv = *(dp=new (buf) S7401C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1520,1016), "sizeof(S7401C5)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7401C5)");
    check_base_class_offset(lv, (S20620C3_nt*)(S7401C7*), ABISELECT(1376,920), "S7401C5");
    /*is_ambiguous_... S7401C5::S7401C2 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C2*), ABISELECT(1376,920), "S7401C5");
    /*is_ambiguous_... S7401C5::S7401C4 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C4*), ABISELECT(1376,920), "S7401C5");
    /*is_ambiguous_... S7401C7::S7401C4 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C4*)(S7401C7*), ABISELECT(1376,920), "S7401C5");
    check_base_class_offset(lv, (S20620C3_nt*)(S7401C8*)(S7401C6*), ABISELECT(1376,920), "S7401C5");
    check_base_class_offset(lv, (S20620C3_nt*)(S7401C9*)(S7401C8*)(S7401C6*), ABISELECT(1376,920), "S7401C5");
    /*is_ambiguous_... S7401C10::S7401C4 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C4*)(S7401C10*)(S7401C8*)(S7401C6*), ABISELECT(1376,920), "S7401C5");
    check_base_class_offset(lv, (S20620C3_nt*)(S7401C2*)(S7401C10*)(S7401C8*)(S7401C6*), ABISELECT(1376,920), "S7401C5");
    /*is_ambiguous_... S7401C5::S7401C10 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C4*)(S7401C10*), ABISELECT(1376,920), "S7401C5");
    /*is_ambiguous_... S7401C5::S7401C10 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C2*)(S7401C10*), ABISELECT(1376,920), "S7401C5");
    /*is_ambiguous_... S7401C5::S7401C2 */ AMB_check_base_class_offset(lv, (S7401C4*)(S7401C2*), ABISELECT(1456,968), "S7401C5");
    /*is_ambiguous_... S7401C8::S7401C4 */ AMB_check_base_class_offset(lv, (S7401C4*)(S7401C8*)(S7401C6*), ABISELECT(1456,968), "S7401C5");
    check_base_class_offset(lv, (S7401C4*)(S7401C2*)(S7401C10*)(S7401C8*)(S7401C6*), ABISELECT(1456,968), "S7401C5");
    /*is_ambiguous_... S7401C5::S7401C10 */ AMB_check_base_class_offset(lv, (S7401C4*)(S7401C2*)(S7401C10*), ABISELECT(1456,968), "S7401C5");
    check_base_class_offset(lv, (S7401C2*)(S7401C7*), ABISELECT(1392,932), "S7401C5");
    /*is_ambiguous_... S7401C8::S7401C2 */ AMB_check_base_class_offset(lv, (S7401C2*)(S7401C8*)(S7401C6*), ABISELECT(1392,932), "S7401C5");
    /*is_ambiguous_... S7401C7::S7401C4 */ AMB_check_base_class_offset(lv, (S7401C4*)(S7401C7*), ABISELECT(1312,872), "S7401C5");
    check_base_class_offset(lv, (S7401C7*)(S7401C6*), ABISELECT(1312,872), "S7401C5");
    check_base_class_offset(lv, (S7401C7*)(S7401C9*)(S7401C8*)(S7401C6*), ABISELECT(1312,872), "S7401C5");
    check_base_class_offset(lv, (S7401C9*)(S7401C8*)(S7401C6*), 0, "S7401C5");
    /*is_ambiguous_... S7401C10::S7401C4 */ AMB_check_base_class_offset(lv, (S7401C4*)(S7401C10*)(S7401C8*)(S7401C6*), ABISELECT(384,248), "S7401C5");
    check_base_class_offset(lv, (S7401C2*)(S7401C10*)(S7401C8*)(S7401C6*), ABISELECT(448,296), "S7401C5");
    check_base_class_offset(lv, (S7401C10*)(S7401C8*)(S7401C6*), ABISELECT(384,248), "S7401C5");
    check_base_class_offset(lv, (S7401C8*)(S7401C6*), 0, "S7401C5");
    check_base_class_offset(lv, (S7401C6*), 0, "S7401C5");
    /*is_ambiguous_... S7401C5::S7401C10 */ AMB_check_base_class_offset(lv, (S7401C4*)(S7401C10*), ABISELECT(576,384), "S7401C5");
    /*is_ambiguous_... S7401C5::S7401C10 */ AMB_check_base_class_offset(lv, (S7401C2*)(S7401C10*), ABISELECT(640,432), "S7401C5");
    /*is_ambiguous_... S7401C5::S7401C10 */ AMB_check_base_class_offset(lv, (S7401C10*), ABISELECT(576,384), "S7401C5");
    check_field_offset(lv, s7401c5f0, ABISELECT(704,468), "S7401C5.s7401c5f0");
    check_field_offset(lv, s7401c5f1, ABISELECT(1296,860), "S7401C5.s7401c5f1");
    check_field_offset(lv, s7401c5f2, ABISELECT(1304,868), "S7401C5.s7401c5f2");
    test_class_info(&lv, &cd_S7401C5);
    dp->~S7401C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7401C5(Test_S7401C5, "S7401C5", ABISELECT(1520,1016));

#else // __cplusplus

extern void _ZN7S7401C5C1Ev();
extern void _ZN7S7401C5D1Ev();
Name_Map name_map_S7401C5[] = {
  NSPAIR(_ZN7S7401C5C1Ev),
  NSPAIR(_ZN7S7401C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20620C3_nt;
extern VTBL_ENTRY _ZTI11S20620C3_nt[];
extern Class_Descriptor cd_S7401C4;
extern VTBL_ENTRY _ZTI7S7401C4[];
extern  VTBL_ENTRY _ZTV7S7401C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C4[];
extern Class_Descriptor cd_S7401C2;
extern VTBL_ENTRY _ZTI7S7401C2[];
extern  VTBL_ENTRY _ZTV7S7401C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C2[];
extern Class_Descriptor cd_S7401C4;
extern VTBL_ENTRY _ZTI7S7401C4[];
extern  VTBL_ENTRY _ZTV7S7401C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C4[];
extern Class_Descriptor cd_S7401C7;
extern VTBL_ENTRY _ZTI7S7401C7[];
extern  VTBL_ENTRY _ZTV7S7401C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C7[];
extern Class_Descriptor cd_S7401C9;
extern VTBL_ENTRY _ZTI7S7401C9[];
extern  VTBL_ENTRY _ZTV7S7401C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C9[];
extern Class_Descriptor cd_S7401C4;
extern VTBL_ENTRY _ZTI7S7401C4[];
extern  VTBL_ENTRY _ZTV7S7401C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C4[];
extern Class_Descriptor cd_S7401C2;
extern VTBL_ENTRY _ZTI7S7401C2[];
extern  VTBL_ENTRY _ZTV7S7401C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C2[];
extern Class_Descriptor cd_S7401C10;
extern VTBL_ENTRY _ZTI8S7401C10[];
extern  VTBL_ENTRY _ZTV8S7401C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7401C10[];
extern Class_Descriptor cd_S7401C8;
extern VTBL_ENTRY _ZTI7S7401C8[];
extern  VTBL_ENTRY _ZTV7S7401C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C8[];
extern Class_Descriptor cd_S7401C6;
extern VTBL_ENTRY _ZTI7S7401C6[];
extern  VTBL_ENTRY _ZTV7S7401C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C6[];
extern Class_Descriptor cd_S7401C4;
extern VTBL_ENTRY _ZTI7S7401C4[];
extern  VTBL_ENTRY _ZTV7S7401C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C4[];
extern Class_Descriptor cd_S7401C2;
extern VTBL_ENTRY _ZTI7S7401C2[];
extern  VTBL_ENTRY _ZTV7S7401C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C2[];
extern Class_Descriptor cd_S7401C10;
extern VTBL_ENTRY _ZTI8S7401C10[];
extern  VTBL_ENTRY _ZTV8S7401C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7401C10[];
static Base_Class bases_S7401C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20620C3_nt,    ABISELECT(1376,920), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7401C4,    ABISELECT(1456,968), //bcp->offset
    56, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    32, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7401C2,    ABISELECT(1392,932), //bcp->offset
    49, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7401C4,    ABISELECT(1312,872), //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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7401C7,    ABISELECT(1312,872), //bcp->offset
    41, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7401C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7401C4,    ABISELECT(384,248), //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
    6, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7401C2,    ABISELECT(448,296), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    34, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S7401C10,    ABISELECT(384,248), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    33, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7401C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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
    10, //immediately_derived
  0, 0},
  {&cd_S7401C6,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7401C4,    ABISELECT(576,384), //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
    11, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7401C2,    ABISELECT(640,432), //bcp->offset
    35, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    36, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S7401C10,    ABISELECT(576,384), //bcp->offset
    28, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    35, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7401C5[];
extern void _ZN7S7401C5D1Ev();
extern void _ZN7S7401C5D0Ev();
extern void _ZN7S7401C82v2Ev();
extern void _ZN7S7401C82v3Ev();
extern void _ZN7S7401C62v4Ev();
extern void _ZN7S7401C62v5Ev();
extern void _ZN7S7401C52v6Ev();
extern void _ZN7S7401C52v7Ev();
extern void _ZN7S7401C52v8Ev();
extern void ABISELECT(_ZThn384_N7S7401C5D1Ev,_ZThn248_N7S7401C5D1Ev)();
extern void ABISELECT(_ZThn384_N7S7401C5D0Ev,_ZThn248_N7S7401C5D0Ev)();
extern void _ZN8S7401C102v1Ev();
extern void ABISELECT(_ZThn448_N7S7401C5D1Ev,_ZThn296_N7S7401C5D1Ev)();
extern void ABISELECT(_ZThn448_N7S7401C5D0Ev,_ZThn296_N7S7401C5D0Ev)();
extern void ABISELECT(_ZThn576_N7S7401C5D1Ev,_ZThn384_N7S7401C5D1Ev)();
extern void ABISELECT(_ZThn576_N7S7401C5D0Ev,_ZThn384_N7S7401C5D0Ev)();
extern void _ZN8S7401C102v1Ev();
extern void ABISELECT(_ZThn640_N7S7401C5D1Ev,_ZThn432_N7S7401C5D1Ev)();
extern void ABISELECT(_ZThn640_N7S7401C5D0Ev,_ZThn432_N7S7401C5D0Ev)();
extern void ABISELECT(_ZTv0_n48_N7S7401C5D1Ev,_ZTv0_n24_N7S7401C5D1Ev)();
extern void ABISELECT(_ZThn1312_N7S7401C5D1Ev,_ZThn872_N7S7401C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7401C5D0Ev,_ZTv0_n24_N7S7401C5D0Ev)();
extern void ABISELECT(_ZThn1312_N7S7401C5D0Ev,_ZThn872_N7S7401C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7401C5D1Ev,_ZTv0_n20_N7S7401C5D1Ev)();
extern void ABISELECT(_ZThn1392_N7S7401C5D1Ev,_ZThn932_N7S7401C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7401C5D0Ev,_ZTv0_n20_N7S7401C5D0Ev)();
extern void ABISELECT(_ZThn1392_N7S7401C5D0Ev,_ZThn932_N7S7401C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7401C5[] = {
  ABISELECT(1456,968),
  ABISELECT(1392,932),
  ABISELECT(1312,872),
  ABISELECT(1376,920),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C5[0]),
  (VTBL_ENTRY)&_ZN7S7401C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7401C82v2Ev,
  (VTBL_ENTRY)&_ZN7S7401C82v3Ev,
  (VTBL_ENTRY)&_ZN7S7401C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7401C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7401C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7401C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7401C52v8Ev,
  ABISELECT(1072,720),
  ABISELECT(992,672),
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI7S7401C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N7S7401C5D1Ev,_ZThn248_N7S7401C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N7S7401C5D0Ev,_ZThn248_N7S7401C5D0Ev),
  (VTBL_ENTRY)&_ZN8S7401C102v1Ev,
  ABISELECT(1008,672),
  ABISELECT(928,624),
  ABISELECT(-448,-296),
  (VTBL_ENTRY)&(_ZTI7S7401C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N7S7401C5D1Ev,_ZThn296_N7S7401C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N7S7401C5D0Ev,_ZThn296_N7S7401C5D0Ev),
  ABISELECT(880,584),
  ABISELECT(800,536),
  ABISELECT(-576,-384),
  (VTBL_ENTRY)&(_ZTI7S7401C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N7S7401C5D1Ev,_ZThn384_N7S7401C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N7S7401C5D0Ev,_ZThn384_N7S7401C5D0Ev),
  (VTBL_ENTRY)&_ZN8S7401C102v1Ev,
  ABISELECT(816,536),
  ABISELECT(736,488),
  ABISELECT(-640,-432),
  (VTBL_ENTRY)&(_ZTI7S7401C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn640_N7S7401C5D1Ev,_ZThn432_N7S7401C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn640_N7S7401C5D0Ev,_ZThn432_N7S7401C5D0Ev),
  ABISELECT(-1312,-872),
  ABISELECT(144,96),
  ABISELECT(80,60),
  ABISELECT(64,48),
  ABISELECT(-1312,-872),
  (VTBL_ENTRY)&(_ZTI7S7401C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C5D1Ev,_ZTv0_n24_N7S7401C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C5D0Ev,_ZTv0_n24_N7S7401C5D0Ev),
  ABISELECT(-1392,-932),
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  ABISELECT(-1392,-932),
  (VTBL_ENTRY)&(_ZTI7S7401C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C5D1Ev,_ZTv0_n20_N7S7401C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C5D0Ev,_ZTv0_n20_N7S7401C5D0Ev),
  ABISELECT(-80,-48),
  ABISELECT(-1456,-968),
  (VTBL_ENTRY)&(_ZTI7S7401C5[0]),
};
extern VTBL_ENTRY _ZTV7S7401C5[];
extern void _ZN7S7401C6D1Ev();
extern void _ZN7S7401C6D0Ev();
extern void _ZN7S7401C82v2Ev();
extern void _ZN7S7401C82v3Ev();
extern void _ZN7S7401C62v4Ev();
extern void _ZN7S7401C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C6__7S7401C5[] = {
  ABISELECT(1456,968),
  ABISELECT(1392,932),
  ABISELECT(1312,872),
  ABISELECT(1376,920),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C6[0]),
  (VTBL_ENTRY)&_ZN7S7401C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7401C82v2Ev,
  (VTBL_ENTRY)&_ZN7S7401C82v3Ev,
  (VTBL_ENTRY)&_ZN7S7401C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7401C62v5Ev,
};
extern void _ZN7S7401C8D1Ev();
extern void _ZN7S7401C8D0Ev();
extern void _ZN7S7401C82v2Ev();
extern void _ZN7S7401C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C87S7401C6__7S7401C5[] = {
  ABISELECT(1456,968),
  ABISELECT(1392,932),
  ABISELECT(1312,872),
  ABISELECT(1376,920),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C8[0]),
  (VTBL_ENTRY)&_ZN7S7401C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7401C82v2Ev,
  (VTBL_ENTRY)&_ZN7S7401C82v3Ev,
};
extern void _ZN7S7401C9D1Ev();
extern void _ZN7S7401C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C97S7401C87S7401C6__7S7401C5[] = {
  ABISELECT(1456,968),
  ABISELECT(1392,932),
  ABISELECT(1312,872),
  ABISELECT(1376,920),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C9[0]),
  (VTBL_ENTRY)&_ZN7S7401C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C9D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7401C9D1Ev,_ZTv0_n24_N7S7401C9D1Ev)();
extern void ABISELECT(_ZThn1312_N7S7401C9D1Ev,_ZThn872_N7S7401C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7401C9D0Ev,_ZTv0_n24_N7S7401C9D0Ev)();
extern void ABISELECT(_ZThn1312_N7S7401C9D0Ev,_ZThn872_N7S7401C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7401C7__7S7401C97S7401C87S7401C6__7S7401C5[] = {
  ABISELECT(-1312,-872),
  ABISELECT(144,96),
  ABISELECT(80,60),
  ABISELECT(64,48),
  ABISELECT(-1312,-872),
  (VTBL_ENTRY)&(_ZTI7S7401C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C9D1Ev,_ZTv0_n24_N7S7401C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C9D0Ev,_ZTv0_n24_N7S7401C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7401C9D1Ev,_ZTv0_n20_N7S7401C9D1Ev)();
extern void ABISELECT(_ZThn1392_N7S7401C9D1Ev,_ZThn932_N7S7401C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7401C9D0Ev,_ZTv0_n20_N7S7401C9D0Ev)();
extern void ABISELECT(_ZThn1392_N7S7401C9D0Ev,_ZThn932_N7S7401C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7401C2__7S7401C97S7401C87S7401C6__7S7401C5[] = {
  ABISELECT(-1392,-932),
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  ABISELECT(-1392,-932),
  (VTBL_ENTRY)&(_ZTI7S7401C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C9D1Ev,_ZTv0_n20_N7S7401C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C9D0Ev,_ZTv0_n20_N7S7401C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C97S7401C87S7401C6__7S7401C5[] = {
  ABISELECT(-80,-48),
  ABISELECT(-1456,-968),
  (VTBL_ENTRY)&(_ZTI7S7401C9[0]),
};
extern void _ZN8S7401C10D1Ev();
extern void _ZN8S7401C10D0Ev();
extern void _ZN8S7401C102v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7401C107S7401C87S7401C6__7S7401C5[] = {
  ABISELECT(1072,720),
  ABISELECT(992,672),
  0,
  (VTBL_ENTRY)&(_ZTI8S7401C10[0]),
  (VTBL_ENTRY)&_ZN8S7401C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7401C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7401C102v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7401C48S7401C107S7401C87S7401C6__A2__7S7401C5[] = {
  ABISELECT(992,672),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C4[0]),
};
extern void _ZN7S7401C2D1Ev();
extern void _ZN7S7401C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C28S7401C107S7401C87S7401C6__A1__7S7401C5[] = {
  ABISELECT(1008,672),
  ABISELECT(928,624),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
  (VTBL_ENTRY)&_ZN7S7401C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C28S7401C107S7401C87S7401C6__A1__7S7401C5[] = {
  ABISELECT(-80,-48),
  ABISELECT(-1008,-672),
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
};
extern void ABISELECT(_ZThn64_N8S7401C10D1Ev,_ZThn48_N8S7401C10D1Ev)();
extern void ABISELECT(_ZThn64_N8S7401C10D0Ev,_ZThn48_N8S7401C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7401C2__8S7401C107S7401C87S7401C6__7S7401C5[] = {
  ABISELECT(1008,672),
  ABISELECT(928,624),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI8S7401C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S7401C10D1Ev,_ZThn48_N8S7401C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S7401C10D0Ev,_ZThn48_N8S7401C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__A1__8S7401C107S7401C87S7401C6__7S7401C5[] = {
  ABISELECT(-80,-48),
  ABISELECT(-1072,-720),
  (VTBL_ENTRY)&(_ZTI8S7401C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C87S7401C6__7S7401C5[] = {
  ABISELECT(-80,-48),
  ABISELECT(-1456,-968),
  (VTBL_ENTRY)&(_ZTI7S7401C8[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S7401C8D1Ev,_ZTv0_n20_N7S7401C8D1Ev)();
extern void ABISELECT(_ZThn1392_N7S7401C8D1Ev,_ZThn932_N7S7401C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7401C8D0Ev,_ZTv0_n20_N7S7401C8D0Ev)();
extern void ABISELECT(_ZThn1392_N7S7401C8D0Ev,_ZThn932_N7S7401C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7401C2__7S7401C87S7401C6__7S7401C5[] = {
  ABISELECT(-1392,-932),
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  ABISELECT(-1392,-932),
  (VTBL_ENTRY)&(_ZTI7S7401C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C8D1Ev,_ZTv0_n20_N7S7401C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C8D0Ev,_ZTv0_n20_N7S7401C8D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S7401C8D1Ev,_ZTv0_n24_N7S7401C8D1Ev)();
extern void ABISELECT(_ZThn1312_N7S7401C8D1Ev,_ZThn872_N7S7401C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7401C8D0Ev,_ZTv0_n24_N7S7401C8D0Ev)();
extern void ABISELECT(_ZThn1312_N7S7401C8D0Ev,_ZThn872_N7S7401C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7401C7__7S7401C87S7401C6__7S7401C5[] = {
  ABISELECT(-1312,-872),
  ABISELECT(144,96),
  ABISELECT(80,60),
  ABISELECT(64,48),
  ABISELECT(-1312,-872),
  (VTBL_ENTRY)&(_ZTI7S7401C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C8D1Ev,_ZTv0_n24_N7S7401C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C8D0Ev,_ZTv0_n24_N7S7401C8D0Ev),
};
extern void ABISELECT(_ZThn384_N7S7401C8D1Ev,_ZThn248_N7S7401C8D1Ev)();
extern void ABISELECT(_ZThn384_N7S7401C8D0Ev,_ZThn248_N7S7401C8D0Ev)();
extern void _ZN8S7401C102v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7401C10__7S7401C87S7401C6__7S7401C5[] = {
  ABISELECT(1072,720),
  ABISELECT(992,672),
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI7S7401C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N7S7401C8D1Ev,_ZThn248_N7S7401C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N7S7401C8D0Ev,_ZThn248_N7S7401C8D0Ev),
  (VTBL_ENTRY)&_ZN8S7401C102v1Ev,
};
extern void ABISELECT(_ZThn448_N7S7401C8D1Ev,_ZThn296_N7S7401C8D1Ev)();
extern void ABISELECT(_ZThn448_N7S7401C8D0Ev,_ZThn296_N7S7401C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7401C28S7401C10__A1__7S7401C87S7401C6__7S7401C5[] = {
  ABISELECT(1008,672),
  ABISELECT(928,624),
  ABISELECT(-448,-296),
  (VTBL_ENTRY)&(_ZTI7S7401C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N7S7401C8D1Ev,_ZThn296_N7S7401C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N7S7401C8D0Ev,_ZThn296_N7S7401C8D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S7401C6D1Ev,_ZTv0_n24_N7S7401C6D1Ev)();
extern void ABISELECT(_ZThn1312_N7S7401C6D1Ev,_ZThn872_N7S7401C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7401C6D0Ev,_ZTv0_n24_N7S7401C6D0Ev)();
extern void ABISELECT(_ZThn1312_N7S7401C6D0Ev,_ZThn872_N7S7401C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7401C7__7S7401C6__7S7401C5[] = {
  ABISELECT(-1312,-872),
  ABISELECT(144,96),
  ABISELECT(80,60),
  ABISELECT(64,48),
  ABISELECT(-1312,-872),
  (VTBL_ENTRY)&(_ZTI7S7401C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C6D1Ev,_ZTv0_n24_N7S7401C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C6D0Ev,_ZTv0_n24_N7S7401C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7401C6D1Ev,_ZTv0_n20_N7S7401C6D1Ev)();
extern void ABISELECT(_ZThn1392_N7S7401C6D1Ev,_ZThn932_N7S7401C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7401C6D0Ev,_ZTv0_n20_N7S7401C6D0Ev)();
extern void ABISELECT(_ZThn1392_N7S7401C6D0Ev,_ZThn932_N7S7401C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7401C2__7S7401C6__7S7401C5[] = {
  ABISELECT(-1392,-932),
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  ABISELECT(-1392,-932),
  (VTBL_ENTRY)&(_ZTI7S7401C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C6D1Ev,_ZTv0_n20_N7S7401C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C6D0Ev,_ZTv0_n20_N7S7401C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C6__7S7401C5[] = {
  ABISELECT(-80,-48),
  ABISELECT(-1456,-968),
  (VTBL_ENTRY)&(_ZTI7S7401C6[0]),
};
extern void ABISELECT(_ZThn384_N7S7401C6D1Ev,_ZThn248_N7S7401C6D1Ev)();
extern void ABISELECT(_ZThn384_N7S7401C6D0Ev,_ZThn248_N7S7401C6D0Ev)();
extern void _ZN8S7401C102v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7401C107S7401C8__7S7401C6__7S7401C5[] = {
  ABISELECT(1072,720),
  ABISELECT(992,672),
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI7S7401C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N7S7401C6D1Ev,_ZThn248_N7S7401C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N7S7401C6D0Ev,_ZThn248_N7S7401C6D0Ev),
  (VTBL_ENTRY)&_ZN8S7401C102v1Ev,
};
extern void ABISELECT(_ZThn448_N7S7401C6D1Ev,_ZThn296_N7S7401C6D1Ev)();
extern void ABISELECT(_ZThn448_N7S7401C6D0Ev,_ZThn296_N7S7401C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7401C28S7401C107S7401C8__A1__7S7401C6__7S7401C5[] = {
  ABISELECT(1008,672),
  ABISELECT(928,624),
  ABISELECT(-448,-296),
  (VTBL_ENTRY)&(_ZTI7S7401C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N7S7401C6D1Ev,_ZThn296_N7S7401C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N7S7401C6D0Ev,_ZThn296_N7S7401C6D0Ev),
};
extern void _ZN8S7401C10D1Ev();
extern void _ZN8S7401C10D0Ev();
extern void _ZN8S7401C102v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7401C10__A1__7S7401C5[] = {
  ABISELECT(880,584),
  ABISELECT(800,536),
  0,
  (VTBL_ENTRY)&(_ZTI8S7401C10[0]),
  (VTBL_ENTRY)&_ZN8S7401C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7401C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7401C102v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7401C48S7401C10__A3__7S7401C5[] = {
  ABISELECT(800,536),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C4[0]),
};
extern void _ZN7S7401C2D1Ev();
extern void _ZN7S7401C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C28S7401C10__A2__7S7401C5[] = {
  ABISELECT(816,536),
  ABISELECT(736,488),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
  (VTBL_ENTRY)&_ZN7S7401C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C28S7401C10__A2__7S7401C5[] = {
  ABISELECT(-80,-48),
  ABISELECT(-816,-536),
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
};
extern void ABISELECT(_ZThn64_N8S7401C10D1Ev,_ZThn48_N8S7401C10D1Ev)();
extern void ABISELECT(_ZThn64_N8S7401C10D0Ev,_ZThn48_N8S7401C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7401C2__8S7401C10__A1__7S7401C5[] = {
  ABISELECT(816,536),
  ABISELECT(736,488),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI8S7401C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S7401C10D1Ev,_ZThn48_N8S7401C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S7401C10D0Ev,_ZThn48_N8S7401C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__A1__8S7401C10__A1__7S7401C5[] = {
  ABISELECT(-80,-48),
  ABISELECT(-880,-584),
  (VTBL_ENTRY)&(_ZTI8S7401C10[0]),
};
extern void _ZN7S7401C7D1Ev();
extern void _ZN7S7401C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C7__7S7401C5[] = {
  ABISELECT(144,96),
  ABISELECT(80,60),
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C7[0]),
  (VTBL_ENTRY)&_ZN7S7401C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7401C47S7401C7__A1__7S7401C5[] = {
  ABISELECT(64,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C4[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S7401C7D1Ev,_ZTv0_n20_N7S7401C7D1Ev)();
extern void ABISELECT(_ZThn80_N7S7401C7D1Ev,_ZThn60_N7S7401C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7401C7D0Ev,_ZTv0_n20_N7S7401C7D0Ev)();
extern void ABISELECT(_ZThn80_N7S7401C7D0Ev,_ZThn60_N7S7401C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7401C2__7S7401C7__7S7401C5[] = {
  ABISELECT(-80,-60),
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI7S7401C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C7D1Ev,_ZTv0_n20_N7S7401C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C7D0Ev,_ZTv0_n20_N7S7401C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C7__7S7401C5[] = {
  ABISELECT(-80,-48),
  ABISELECT(-144,-96),
  (VTBL_ENTRY)&(_ZTI7S7401C7[0]),
};
extern void _ZN7S7401C2D1Ev();
extern void _ZN7S7401C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C2__7S7401C5[] = {
  ABISELECT(64,36),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
  (VTBL_ENTRY)&_ZN7S7401C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C2__7S7401C5[] = {
  ABISELECT(-80,-48),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C5[] = {
  ABISELECT(-80,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C4[0]),
};
static  VTT_ENTRY vtt_S7401C5[] = {
  {&(_ZTV7S7401C5[6]),  6,59},
  {&(_tg__ZTV7S7401C6__7S7401C5[6]),  6,12},
  {&(_tg__ZTV7S7401C87S7401C6__7S7401C5[6]),  6,10},
  {&(_tg__ZTV7S7401C97S7401C87S7401C6__7S7401C5[6]),  6,8},
  {&(_tg__ZTV7S7401C7__7S7401C97S7401C87S7401C6__7S7401C5[6]),  6,8},
  {&(_tg__ZTV7S7401C2__7S7401C97S7401C87S7401C6__7S7401C5[5]),  5,7},
  {&(_tg__ZTV7S7401C4__7S7401C97S7401C87S7401C6__7S7401C5[3]),  3,3},
  {&(_tg__ZTV8S7401C107S7401C87S7401C6__7S7401C5[4]),  4,7},
  {&(_tg__ZTV7S7401C48S7401C107S7401C87S7401C6__A2__7S7401C5[3]),  3,3},
  {&(_tg__ZTV7S7401C28S7401C107S7401C87S7401C6__A1__7S7401C5[4]),  4,6},
  {&(_tg__ZTV7S7401C4__7S7401C28S7401C107S7401C87S7401C6__A1__7S7401C5[3]),  3,3},
  {&(_tg__ZTV7S7401C2__8S7401C107S7401C87S7401C6__7S7401C5[4]),  4,6},
  {&(_tg__ZTV7S7401C4__A1__8S7401C107S7401C87S7401C6__7S7401C5[3]),  3,3},
  {&(_tg__ZTV7S7401C4__7S7401C87S7401C6__7S7401C5[3]),  3,3},
  {&(_tg__ZTV7S7401C2__7S7401C87S7401C6__7S7401C5[5]),  5,7},
  {&(_tg__ZTV7S7401C7__7S7401C87S7401C6__7S7401C5[6]),  6,8},
  {&(_tg__ZTV8S7401C10__7S7401C87S7401C6__7S7401C5[4]),  4,7},
  {&(_tg__ZTV7S7401C28S7401C10__A1__7S7401C87S7401C6__7S7401C5[4]),  4,6},
  {&(_tg__ZTV7S7401C7__7S7401C6__7S7401C5[6]),  6,8},
  {&(_tg__ZTV7S7401C2__7S7401C6__7S7401C5[5]),  5,7},
  {&(_tg__ZTV7S7401C4__7S7401C6__7S7401C5[3]),  3,3},
  {&(_tg__ZTV8S7401C107S7401C8__7S7401C6__7S7401C5[4]),  4,7},
  {&(_tg__ZTV7S7401C28S7401C107S7401C8__A1__7S7401C6__7S7401C5[4]),  4,6},
  {&(_tg__ZTV8S7401C10__A1__7S7401C5[4]),  4,7},
  {&(_tg__ZTV7S7401C48S7401C10__A3__7S7401C5[3]),  3,3},
  {&(_tg__ZTV7S7401C28S7401C10__A2__7S7401C5[4]),  4,6},
  {&(_tg__ZTV7S7401C4__7S7401C28S7401C10__A2__7S7401C5[3]),  3,3},
  {&(_tg__ZTV7S7401C2__8S7401C10__A1__7S7401C5[4]),  4,6},
  {&(_tg__ZTV7S7401C4__A1__8S7401C10__A1__7S7401C5[3]),  3,3},
  {&(_ZTV7S7401C5[47]),  47,59},
  {&(_ZTV7S7401C5[54]),  54,59},
  {&(_ZTV7S7401C5[59]),  59,59},
  {&(_ZTV7S7401C5[19]),  19,59},
  {&(_ZTV7S7401C5[26]),  26,59},
  {&(_ZTV7S7401C5[32]),  32,59},
  {&(_ZTV7S7401C5[39]),  39,59},
  {&(_tg__ZTV7S7401C7__7S7401C5[5]),  5,7},
  {&(_tg__ZTV7S7401C47S7401C7__A1__7S7401C5[3]),  3,3},
  {&(_tg__ZTV7S7401C2__7S7401C7__7S7401C5[5]),  5,7},
  {&(_tg__ZTV7S7401C4__7S7401C7__7S7401C5[3]),  3,3},
  {&(_tg__ZTV7S7401C2__7S7401C5[4]),  4,6},
  {&(_tg__ZTV7S7401C4__7S7401C2__7S7401C5[3]),  3,3},
  {&(_tg__ZTV7S7401C4__7S7401C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7401C5[];
extern  VTBL_ENTRY _ZTV7S7401C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C5[];
static VTBL_ENTRY alt_thunk_names182[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C7D0Ev,_ZTv0_n20_N7S7401C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7401C7D0Ev,_ZThn60_N7S7401C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C7D1Ev,_ZTv0_n20_N7S7401C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S7401C7D1Ev,_ZThn60_N7S7401C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C6D0Ev,_ZTv0_n20_N7S7401C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N7S7401C6D0Ev,_ZThn932_N7S7401C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C6D1Ev,_ZTv0_n20_N7S7401C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N7S7401C6D1Ev,_ZThn932_N7S7401C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C6D0Ev,_ZTv0_n24_N7S7401C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N7S7401C6D0Ev,_ZThn872_N7S7401C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C6D1Ev,_ZTv0_n24_N7S7401C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N7S7401C6D1Ev,_ZThn872_N7S7401C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C8D0Ev,_ZTv0_n24_N7S7401C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N7S7401C8D0Ev,_ZThn872_N7S7401C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C8D1Ev,_ZTv0_n24_N7S7401C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N7S7401C8D1Ev,_ZThn872_N7S7401C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C8D0Ev,_ZTv0_n20_N7S7401C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N7S7401C8D0Ev,_ZThn932_N7S7401C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C8D1Ev,_ZTv0_n20_N7S7401C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N7S7401C8D1Ev,_ZThn932_N7S7401C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C9D0Ev,_ZTv0_n20_N7S7401C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N7S7401C9D0Ev,_ZThn932_N7S7401C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C9D1Ev,_ZTv0_n20_N7S7401C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N7S7401C9D1Ev,_ZThn932_N7S7401C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C9D0Ev,_ZTv0_n24_N7S7401C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N7S7401C9D0Ev,_ZThn872_N7S7401C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C9D1Ev,_ZTv0_n24_N7S7401C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N7S7401C9D1Ev,_ZThn872_N7S7401C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C5D0Ev,_ZTv0_n20_N7S7401C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N7S7401C5D0Ev,_ZThn932_N7S7401C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C5D1Ev,_ZTv0_n20_N7S7401C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1392_N7S7401C5D1Ev,_ZThn932_N7S7401C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C5D0Ev,_ZTv0_n24_N7S7401C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N7S7401C5D0Ev,_ZThn872_N7S7401C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C5D1Ev,_ZTv0_n24_N7S7401C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1312_N7S7401C5D1Ev,_ZThn872_N7S7401C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7401C5 = {  "S7401C5", // class name
  bases_S7401C5, 14,
  &(vtc_S7401C5[0]), // expected_vtbl_contents
  &(vtt_S7401C5[0]), // expected_vtt_contents
  ABISELECT(1520,1016), // object size
  NSPAIRA(_ZTI7S7401C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7401C5),59, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7401C5),43, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names182,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7401C1  : S7401C2 , S7401C5 , S20620C3_nt {
  int s7401c1f0;
  __tsi64 s7401c1f1;
  virtual  ~S7401C1(); // _ZN7S7401C1D2Ev
  S7401C1(); // tgen
};
//SIG(1 S7401C1) C1{ BC2{ VBC3{ m FD} VBC4{ VBC3 Fp Fi[4] FC3 FC3} vd Fp FL Fp FD Fs} BC5{ BC6{ VBC7{ VBC3 VBC2 BC4 vd} BC8{ VBC3 VBC4 VBC2 BC9{ VBC3 VBC7 vd FC2 Fs FC10{ BC4 BC2 vd v1 FC11{}}} BC10 vd v2 v3} vd v4 v5 Fi[6] FD Fi FD} BC10 v6 v7 v8 FC9 FL Fi} BC3 vd Fi FL}


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

static void Test_S7401C1()
{
  extern Class_Descriptor cd_S7401C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(102,270)];
    init_test(&cd_S7401C1, buf);
    S7401C1 *dp, &lv = *(dp=new (buf) S7401C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1616,1076), "sizeof(S7401C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7401C1)");
    /*is_ambiguous_... S7401C1::S7401C2 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C2*), ABISELECT(1408,932), "S7401C1");
    /*is_ambiguous_... S7401C1::S7401C4 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C4*), ABISELECT(1408,932), "S7401C1");
    check_base_class_offset(lv, (S20620C3_nt*)(S7401C7*), ABISELECT(1408,932), "S7401C1");
    /*is_ambiguous_... S7401C1::S7401C2 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C2*), ABISELECT(1408,932), "S7401C1");
    /*is_ambiguous_... S7401C7::S7401C4 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C4*)(S7401C7*), ABISELECT(1408,932), "S7401C1");
    check_base_class_offset(lv, (S20620C3_nt*)(S7401C8*)(S7401C6*)(S7401C5*), ABISELECT(1408,932), "S7401C1");
    check_base_class_offset(lv, (S20620C3_nt*)(S7401C9*)(S7401C8*)(S7401C6*)(S7401C5*), ABISELECT(1408,932), "S7401C1");
    /*is_ambiguous_... S7401C10::S7401C4 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C4*)(S7401C10*)(S7401C8*)(S7401C6*)(S7401C5*), ABISELECT(1408,932), "S7401C1");
    check_base_class_offset(lv, (S20620C3_nt*)(S7401C2*)(S7401C10*)(S7401C8*)(S7401C6*)(S7401C5*), ABISELECT(1408,932), "S7401C1");
    /*is_ambiguous_... S7401C5::S7401C10 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C4*)(S7401C10*)(S7401C5*), ABISELECT(1408,932), "S7401C1");
    /*is_ambiguous_... S7401C5::S7401C10 */ AMB_check_base_class_offset(lv, (S20620C3_nt*)(S7401C2*)(S7401C10*)(S7401C5*), ABISELECT(1408,932), "S7401C1");
    /*is_ambiguous_... S7401C1::S7401C2 */ AMB_check_base_class_offset(lv, (S7401C4*)(S7401C2*), ABISELECT(1424,944), "S7401C1");
    /*is_ambiguous_... S7401C1::S7401C2 */ AMB_check_base_class_offset(lv, (S7401C4*)(S7401C2*), ABISELECT(1424,944), "S7401C1");
    /*is_ambiguous_... S7401C8::S7401C4 */ AMB_check_base_class_offset(lv, (S7401C4*)(S7401C8*)(S7401C6*)(S7401C5*), ABISELECT(1424,944), "S7401C1");
    check_base_class_offset(lv, (S7401C4*)(S7401C2*)(S7401C10*)(S7401C8*)(S7401C6*)(S7401C5*), ABISELECT(1424,944), "S7401C1");
    /*is_ambiguous_... S7401C5::S7401C10 */ AMB_check_base_class_offset(lv, (S7401C4*)(S7401C2*)(S7401C10*)(S7401C5*), ABISELECT(1424,944), "S7401C1");
    /*is_ambiguous_... S7401C1::S7401C2 */ AMB_check_base_class_offset(lv, (S7401C2*), 0, "S7401C1");
    check_base_class_offset(lv, (S7401C2*)(S7401C7*), ABISELECT(1552,1040), "S7401C1");
    /*is_ambiguous_... S7401C8::S7401C2 */ AMB_check_base_class_offset(lv, (S7401C2*)(S7401C8*)(S7401C6*)(S7401C5*), ABISELECT(1552,1040), "S7401C1");
    /*is_ambiguous_... S7401C7::S7401C4 */ AMB_check_base_class_offset(lv, (S7401C4*)(S7401C7*), ABISELECT(1488,992), "S7401C1");
    check_base_class_offset(lv, (S7401C7*)(S7401C6*)(S7401C5*), ABISELECT(1488,992), "S7401C1");
    check_base_class_offset(lv, (S7401C7*)(S7401C9*)(S7401C8*)(S7401C6*)(S7401C5*), ABISELECT(1488,992), "S7401C1");
    check_base_class_offset(lv, (S7401C9*)(S7401C8*)(S7401C6*)(S7401C5*), ABISELECT(64,36), "S7401C1");
    /*is_ambiguous_... S7401C10::S7401C4 */ AMB_check_base_class_offset(lv, (S7401C4*)(S7401C10*)(S7401C8*)(S7401C6*)(S7401C5*), ABISELECT(448,284), "S7401C1");
    check_base_class_offset(lv, (S7401C2*)(S7401C10*)(S7401C8*)(S7401C6*)(S7401C5*), ABISELECT(512,332), "S7401C1");
    check_base_class_offset(lv, (S7401C10*)(S7401C8*)(S7401C6*)(S7401C5*), ABISELECT(448,284), "S7401C1");
    check_base_class_offset(lv, (S7401C8*)(S7401C6*)(S7401C5*), ABISELECT(64,36), "S7401C1");
    check_base_class_offset(lv, (S7401C6*)(S7401C5*), ABISELECT(64,36), "S7401C1");
    /*is_ambiguous_... S7401C5::S7401C10 */ AMB_check_base_class_offset(lv, (S7401C4*)(S7401C10*)(S7401C5*), ABISELECT(640,420), "S7401C1");
    /*is_ambiguous_... S7401C5::S7401C10 */ AMB_check_base_class_offset(lv, (S7401C2*)(S7401C10*)(S7401C5*), ABISELECT(704,468), "S7401C1");
    /*is_ambiguous_... S7401C5::S7401C10 */ AMB_check_base_class_offset(lv, (S7401C10*)(S7401C5*), ABISELECT(640,420), "S7401C1");
    check_base_class_offset(lv, (S7401C5*), ABISELECT(64,36), "S7401C1");
    /*is_ambiguous_... S7401C1::S20620C3_nt */ AMB_check_base_class_offset(lv, (S20620C3_nt*), ABISELECT(1376,908), "S7401C1");
    check_field_offset(lv, s7401c1f0, ABISELECT(1392,920), "S7401C1.s7401c1f0");
    check_field_offset(lv, s7401c1f1, ABISELECT(1400,924), "S7401C1.s7401c1f1");
    test_class_info(&lv, &cd_S7401C1);
    dp->~S7401C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7401C1(Test_S7401C1, "S7401C1", ABISELECT(1616,1076));

#else // __cplusplus

extern void _ZN7S7401C1C1Ev();
extern void _ZN7S7401C1D2Ev();
Name_Map name_map_S7401C1[] = {
  NSPAIR(_ZN7S7401C1C1Ev),
  NSPAIR(_ZN7S7401C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20620C3_nt;
extern VTBL_ENTRY _ZTI11S20620C3_nt[];
extern Class_Descriptor cd_S7401C4;
extern VTBL_ENTRY _ZTI7S7401C4[];
extern  VTBL_ENTRY _ZTV7S7401C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C4[];
extern Class_Descriptor cd_S7401C2;
extern VTBL_ENTRY _ZTI7S7401C2[];
extern  VTBL_ENTRY _ZTV7S7401C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C2[];
extern Class_Descriptor cd_S7401C2;
extern VTBL_ENTRY _ZTI7S7401C2[];
extern  VTBL_ENTRY _ZTV7S7401C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C2[];
extern Class_Descriptor cd_S7401C4;
extern VTBL_ENTRY _ZTI7S7401C4[];
extern  VTBL_ENTRY _ZTV7S7401C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C4[];
extern Class_Descriptor cd_S7401C7;
extern VTBL_ENTRY _ZTI7S7401C7[];
extern  VTBL_ENTRY _ZTV7S7401C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C7[];
extern Class_Descriptor cd_S7401C9;
extern VTBL_ENTRY _ZTI7S7401C9[];
extern  VTBL_ENTRY _ZTV7S7401C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C9[];
extern Class_Descriptor cd_S7401C4;
extern VTBL_ENTRY _ZTI7S7401C4[];
extern  VTBL_ENTRY _ZTV7S7401C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C4[];
extern Class_Descriptor cd_S7401C2;
extern VTBL_ENTRY _ZTI7S7401C2[];
extern  VTBL_ENTRY _ZTV7S7401C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C2[];
extern Class_Descriptor cd_S7401C10;
extern VTBL_ENTRY _ZTI8S7401C10[];
extern  VTBL_ENTRY _ZTV8S7401C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7401C10[];
extern Class_Descriptor cd_S7401C8;
extern VTBL_ENTRY _ZTI7S7401C8[];
extern  VTBL_ENTRY _ZTV7S7401C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C8[];
extern Class_Descriptor cd_S7401C6;
extern VTBL_ENTRY _ZTI7S7401C6[];
extern  VTBL_ENTRY _ZTV7S7401C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C6[];
extern Class_Descriptor cd_S7401C4;
extern VTBL_ENTRY _ZTI7S7401C4[];
extern  VTBL_ENTRY _ZTV7S7401C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C4[];
extern Class_Descriptor cd_S7401C2;
extern VTBL_ENTRY _ZTI7S7401C2[];
extern  VTBL_ENTRY _ZTV7S7401C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C2[];
extern Class_Descriptor cd_S7401C10;
extern VTBL_ENTRY _ZTI8S7401C10[];
extern  VTBL_ENTRY _ZTV8S7401C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7401C10[];
extern Class_Descriptor cd_S7401C5;
extern VTBL_ENTRY _ZTI7S7401C5[];
extern  VTBL_ENTRY _ZTV7S7401C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C5[];
extern Class_Descriptor cd_S20620C3_nt;
extern VTBL_ENTRY _ZTI11S20620C3_nt[];
static Base_Class bases_S7401C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20620C3_nt,    ABISELECT(1408,932), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S7401C4,    ABISELECT(1424,944), //bcp->offset
    49, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    40, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7401C2,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7401C2,    ABISELECT(1552,1040), //bcp->offset
    60, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    43, //bcp->index_in_construction_vtbl_array
    53, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7401C4,    ABISELECT(1488,992), //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
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7401C7,    ABISELECT(1488,992), //bcp->offset
    52, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    42, //bcp->index_in_construction_vtbl_array
    49, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    6, //immediately_derived
  0, 1},
  {&cd_S7401C9,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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
    10, //immediately_derived
  0, 0},
  {&cd_S7401C4,    ABISELECT(448,284), //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
    7, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7401C2,    ABISELECT(512,332), //bcp->offset
    30, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    45, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S7401C10,    ABISELECT(448,284), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    44, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S7401C8,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S7401C6,    ABISELECT(64,36), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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
    15, //immediately_derived
  0, 0},
  {&cd_S7401C4,    ABISELECT(640,420), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7401C2,    ABISELECT(704,468), //bcp->offset
    43, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    47, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    14, //immediately_derived
  0, 0},
  {&cd_S7401C10,    ABISELECT(640,420), //bcp->offset
    36, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    46, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S7401C5,    ABISELECT(64,36), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    41, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20620C3_nt,    ABISELECT(1376,908), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S7401C1[];
extern void _ZN7S7401C1D1Ev();
extern void _ZN7S7401C1D0Ev();
extern void ABISELECT(_ZThn64_N7S7401C1D1Ev,_ZThn36_N7S7401C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S7401C1D0Ev,_ZThn36_N7S7401C1D0Ev)();
extern void _ZN7S7401C82v2Ev();
extern void _ZN7S7401C82v3Ev();
extern void _ZN7S7401C62v4Ev();
extern void _ZN7S7401C62v5Ev();
extern void _ZN7S7401C52v6Ev();
extern void _ZN7S7401C52v7Ev();
extern void _ZN7S7401C52v8Ev();
extern void ABISELECT(_ZThn448_N7S7401C1D1Ev,_ZThn284_N7S7401C1D1Ev)();
extern void ABISELECT(_ZThn448_N7S7401C1D0Ev,_ZThn284_N7S7401C1D0Ev)();
extern void _ZN8S7401C102v1Ev();
extern void ABISELECT(_ZThn512_N7S7401C1D1Ev,_ZThn332_N7S7401C1D1Ev)();
extern void ABISELECT(_ZThn512_N7S7401C1D0Ev,_ZThn332_N7S7401C1D0Ev)();
extern void ABISELECT(_ZThn640_N7S7401C1D1Ev,_ZThn420_N7S7401C1D1Ev)();
extern void ABISELECT(_ZThn640_N7S7401C1D0Ev,_ZThn420_N7S7401C1D0Ev)();
extern void _ZN8S7401C102v1Ev();
extern void ABISELECT(_ZThn704_N7S7401C1D1Ev,_ZThn468_N7S7401C1D1Ev)();
extern void ABISELECT(_ZThn704_N7S7401C1D0Ev,_ZThn468_N7S7401C1D0Ev)();
extern void ABISELECT(_ZTv0_n48_N7S7401C1D1Ev,_ZTv0_n24_N7S7401C1D1Ev)();
extern void ABISELECT(_ZThn1488_N7S7401C1D1Ev,_ZThn992_N7S7401C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7401C1D0Ev,_ZTv0_n24_N7S7401C1D0Ev)();
extern void ABISELECT(_ZThn1488_N7S7401C1D0Ev,_ZThn992_N7S7401C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7401C1D1Ev,_ZTv0_n20_N7S7401C1D1Ev)();
extern void ABISELECT(_ZThn1552_N7S7401C1D1Ev,_ZThn1040_N7S7401C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7401C1D0Ev,_ZTv0_n20_N7S7401C1D0Ev)();
extern void ABISELECT(_ZThn1552_N7S7401C1D0Ev,_ZThn1040_N7S7401C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7401C1[] = {
  ABISELECT(1552,1040),
  ABISELECT(1488,992),
  ABISELECT(1424,944),
  ABISELECT(1408,932),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C1[0]),
  (VTBL_ENTRY)&_ZN7S7401C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C1D0Ev,
  ABISELECT(1360,908),
  ABISELECT(1488,1004),
  ABISELECT(1424,956),
  ABISELECT(1344,896),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI7S7401C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S7401C1D1Ev,_ZThn36_N7S7401C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N7S7401C1D0Ev,_ZThn36_N7S7401C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7401C82v2Ev,
  (VTBL_ENTRY)&_ZN7S7401C82v3Ev,
  (VTBL_ENTRY)&_ZN7S7401C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7401C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7401C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7401C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7401C52v8Ev,
  ABISELECT(976,660),
  ABISELECT(960,648),
  ABISELECT(-448,-284),
  (VTBL_ENTRY)&(_ZTI7S7401C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N7S7401C1D1Ev,_ZThn284_N7S7401C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N7S7401C1D0Ev,_ZThn284_N7S7401C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7401C102v1Ev,
  ABISELECT(912,612),
  ABISELECT(896,600),
  ABISELECT(-512,-332),
  (VTBL_ENTRY)&(_ZTI7S7401C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn512_N7S7401C1D1Ev,_ZThn332_N7S7401C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn512_N7S7401C1D0Ev,_ZThn332_N7S7401C1D0Ev),
  ABISELECT(784,524),
  ABISELECT(768,512),
  ABISELECT(-640,-420),
  (VTBL_ENTRY)&(_ZTI7S7401C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn640_N7S7401C1D1Ev,_ZThn420_N7S7401C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn640_N7S7401C1D0Ev,_ZThn420_N7S7401C1D0Ev),
  (VTBL_ENTRY)&_ZN8S7401C102v1Ev,
  ABISELECT(720,476),
  ABISELECT(704,464),
  ABISELECT(-704,-468),
  (VTBL_ENTRY)&(_ZTI7S7401C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn704_N7S7401C1D1Ev,_ZThn468_N7S7401C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn704_N7S7401C1D0Ev,_ZThn468_N7S7401C1D0Ev),
  ABISELECT(-16,-12),
  ABISELECT(-1424,-944),
  (VTBL_ENTRY)&(_ZTI7S7401C1[0]),
  ABISELECT(-1488,-992),
  ABISELECT(-64,-48),
  ABISELECT(64,48),
  ABISELECT(-80,-60),
  ABISELECT(-1488,-992),
  (VTBL_ENTRY)&(_ZTI7S7401C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C1D1Ev,_ZTv0_n24_N7S7401C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C1D0Ev,_ZTv0_n24_N7S7401C1D0Ev),
  ABISELECT(-1552,-1040),
  ABISELECT(-128,-96),
  ABISELECT(-144,-108),
  ABISELECT(-1552,-1040),
  (VTBL_ENTRY)&(_ZTI7S7401C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C1D1Ev,_ZTv0_n20_N7S7401C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C1D0Ev,_ZTv0_n20_N7S7401C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7401C1[];
extern void _ZN7S7401C2D1Ev();
extern void _ZN7S7401C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C2__A__7S7401C1[] = {
  ABISELECT(1424,944),
  ABISELECT(1408,932),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
  (VTBL_ENTRY)&_ZN7S7401C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C2__A__7S7401C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-1424,-944),
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
};
extern void _ZN7S7401C5D1Ev();
extern void _ZN7S7401C5D0Ev();
extern void _ZN7S7401C82v2Ev();
extern void _ZN7S7401C82v3Ev();
extern void _ZN7S7401C62v4Ev();
extern void _ZN7S7401C62v5Ev();
extern void _ZN7S7401C52v6Ev();
extern void _ZN7S7401C52v7Ev();
extern void _ZN7S7401C52v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C5__7S7401C1[] = {
  ABISELECT(1360,908),
  ABISELECT(1488,1004),
  ABISELECT(1424,956),
  ABISELECT(1344,896),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C5[0]),
  (VTBL_ENTRY)&_ZN7S7401C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7401C82v2Ev,
  (VTBL_ENTRY)&_ZN7S7401C82v3Ev,
  (VTBL_ENTRY)&_ZN7S7401C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7401C62v5Ev,
  (VTBL_ENTRY)&_ZN7S7401C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7401C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7401C52v8Ev,
};
extern void _ZN7S7401C6D1Ev();
extern void _ZN7S7401C6D0Ev();
extern void _ZN7S7401C82v2Ev();
extern void _ZN7S7401C82v3Ev();
extern void _ZN7S7401C62v4Ev();
extern void _ZN7S7401C62v5Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C67S7401C5__7S7401C1[] = {
  ABISELECT(1360,908),
  ABISELECT(1488,1004),
  ABISELECT(1424,956),
  ABISELECT(1344,896),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C6[0]),
  (VTBL_ENTRY)&_ZN7S7401C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C6D0Ev,
  (VTBL_ENTRY)&_ZN7S7401C82v2Ev,
  (VTBL_ENTRY)&_ZN7S7401C82v3Ev,
  (VTBL_ENTRY)&_ZN7S7401C62v4Ev,
  (VTBL_ENTRY)&_ZN7S7401C62v5Ev,
};
extern void _ZN7S7401C8D1Ev();
extern void _ZN7S7401C8D0Ev();
extern void _ZN7S7401C82v2Ev();
extern void _ZN7S7401C82v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C87S7401C67S7401C5__7S7401C1[] = {
  ABISELECT(1360,908),
  ABISELECT(1488,1004),
  ABISELECT(1424,956),
  ABISELECT(1344,896),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C8[0]),
  (VTBL_ENTRY)&_ZN7S7401C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C8D0Ev,
  (VTBL_ENTRY)&_ZN7S7401C82v2Ev,
  (VTBL_ENTRY)&_ZN7S7401C82v3Ev,
};
extern void _ZN7S7401C9D1Ev();
extern void _ZN7S7401C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C97S7401C87S7401C67S7401C5__7S7401C1[] = {
  ABISELECT(1360,908),
  ABISELECT(1488,1004),
  ABISELECT(1424,956),
  ABISELECT(1344,896),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C9[0]),
  (VTBL_ENTRY)&_ZN7S7401C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C9D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N7S7401C9D1Ev,_ZTv0_n24_N7S7401C9D1Ev)();
extern void ABISELECT(_ZThn1424_N7S7401C9D1Ev,_ZThn956_N7S7401C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7401C9D0Ev,_ZTv0_n24_N7S7401C9D0Ev)();
extern void ABISELECT(_ZThn1424_N7S7401C9D0Ev,_ZThn956_N7S7401C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7401C7__7S7401C97S7401C87S7401C67S7401C5__7S7401C1[] = {
  ABISELECT(-1424,-956),
  ABISELECT(-64,-48),
  ABISELECT(64,48),
  ABISELECT(-80,-60),
  ABISELECT(-1424,-956),
  (VTBL_ENTRY)&(_ZTI7S7401C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C9D1Ev,_ZTv0_n24_N7S7401C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C9D0Ev,_ZTv0_n24_N7S7401C9D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7401C9D1Ev,_ZTv0_n20_N7S7401C9D1Ev)();
extern void ABISELECT(_ZThn1488_N7S7401C9D1Ev,_ZThn1004_N7S7401C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7401C9D0Ev,_ZTv0_n20_N7S7401C9D0Ev)();
extern void ABISELECT(_ZThn1488_N7S7401C9D0Ev,_ZThn1004_N7S7401C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7401C2__7S7401C97S7401C87S7401C67S7401C5__7S7401C1[] = {
  ABISELECT(-1488,-1004),
  ABISELECT(-128,-96),
  ABISELECT(-144,-108),
  ABISELECT(-1488,-1004),
  (VTBL_ENTRY)&(_ZTI7S7401C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C9D1Ev,_ZTv0_n20_N7S7401C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C9D0Ev,_ZTv0_n20_N7S7401C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C97S7401C87S7401C67S7401C5__7S7401C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-1360,-908),
  (VTBL_ENTRY)&(_ZTI7S7401C9[0]),
};
extern void _ZN8S7401C10D1Ev();
extern void _ZN8S7401C10D0Ev();
extern void _ZN8S7401C102v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7401C107S7401C87S7401C67S7401C5__7S7401C1[] = {
  ABISELECT(976,660),
  ABISELECT(960,648),
  0,
  (VTBL_ENTRY)&(_ZTI8S7401C10[0]),
  (VTBL_ENTRY)&_ZN8S7401C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7401C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7401C102v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7401C48S7401C107S7401C87S7401C67S7401C5__A2__7S7401C1[] = {
  ABISELECT(960,648),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C4[0]),
};
extern void _ZN7S7401C2D1Ev();
extern void _ZN7S7401C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C28S7401C107S7401C87S7401C67S7401C5__A2__7S7401C1[] = {
  ABISELECT(912,612),
  ABISELECT(896,600),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
  (VTBL_ENTRY)&_ZN7S7401C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C28S7401C107S7401C87S7401C67S7401C5__A2__7S7401C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-912,-612),
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
};
extern void ABISELECT(_ZThn64_N8S7401C10D1Ev,_ZThn48_N8S7401C10D1Ev)();
extern void ABISELECT(_ZThn64_N8S7401C10D0Ev,_ZThn48_N8S7401C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7401C2__8S7401C107S7401C87S7401C67S7401C5__7S7401C1[] = {
  ABISELECT(912,612),
  ABISELECT(896,600),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI8S7401C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S7401C10D1Ev,_ZThn48_N8S7401C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S7401C10D0Ev,_ZThn48_N8S7401C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__A1__8S7401C107S7401C87S7401C67S7401C5__7S7401C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-976,-660),
  (VTBL_ENTRY)&(_ZTI8S7401C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C87S7401C67S7401C5__7S7401C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-1360,-908),
  (VTBL_ENTRY)&(_ZTI7S7401C8[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S7401C8D1Ev,_ZTv0_n20_N7S7401C8D1Ev)();
extern void ABISELECT(_ZThn1488_N7S7401C8D1Ev,_ZThn1004_N7S7401C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7401C8D0Ev,_ZTv0_n20_N7S7401C8D0Ev)();
extern void ABISELECT(_ZThn1488_N7S7401C8D0Ev,_ZThn1004_N7S7401C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7401C2__7S7401C87S7401C67S7401C5__7S7401C1[] = {
  ABISELECT(-1488,-1004),
  ABISELECT(-128,-96),
  ABISELECT(-144,-108),
  ABISELECT(-1488,-1004),
  (VTBL_ENTRY)&(_ZTI7S7401C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C8D1Ev,_ZTv0_n20_N7S7401C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C8D0Ev,_ZTv0_n20_N7S7401C8D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S7401C8D1Ev,_ZTv0_n24_N7S7401C8D1Ev)();
extern void ABISELECT(_ZThn1424_N7S7401C8D1Ev,_ZThn956_N7S7401C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7401C8D0Ev,_ZTv0_n24_N7S7401C8D0Ev)();
extern void ABISELECT(_ZThn1424_N7S7401C8D0Ev,_ZThn956_N7S7401C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7401C7__7S7401C87S7401C67S7401C5__7S7401C1[] = {
  ABISELECT(-1424,-956),
  ABISELECT(-64,-48),
  ABISELECT(64,48),
  ABISELECT(-80,-60),
  ABISELECT(-1424,-956),
  (VTBL_ENTRY)&(_ZTI7S7401C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C8D1Ev,_ZTv0_n24_N7S7401C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C8D0Ev,_ZTv0_n24_N7S7401C8D0Ev),
};
extern void ABISELECT(_ZThn384_N7S7401C8D1Ev,_ZThn248_N7S7401C8D1Ev)();
extern void ABISELECT(_ZThn384_N7S7401C8D0Ev,_ZThn248_N7S7401C8D0Ev)();
extern void _ZN8S7401C102v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7401C10__7S7401C87S7401C67S7401C5__7S7401C1[] = {
  ABISELECT(976,660),
  ABISELECT(960,648),
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI7S7401C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N7S7401C8D1Ev,_ZThn248_N7S7401C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N7S7401C8D0Ev,_ZThn248_N7S7401C8D0Ev),
  (VTBL_ENTRY)&_ZN8S7401C102v1Ev,
};
extern void ABISELECT(_ZThn448_N7S7401C8D1Ev,_ZThn296_N7S7401C8D1Ev)();
extern void ABISELECT(_ZThn448_N7S7401C8D0Ev,_ZThn296_N7S7401C8D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7401C28S7401C10__A1__7S7401C87S7401C67S7401C5__7S7401C1[] = {
  ABISELECT(912,612),
  ABISELECT(896,600),
  ABISELECT(-448,-296),
  (VTBL_ENTRY)&(_ZTI7S7401C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N7S7401C8D1Ev,_ZThn296_N7S7401C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N7S7401C8D0Ev,_ZThn296_N7S7401C8D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N7S7401C6D1Ev,_ZTv0_n24_N7S7401C6D1Ev)();
extern void ABISELECT(_ZThn1424_N7S7401C6D1Ev,_ZThn956_N7S7401C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7401C6D0Ev,_ZTv0_n24_N7S7401C6D0Ev)();
extern void ABISELECT(_ZThn1424_N7S7401C6D0Ev,_ZThn956_N7S7401C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7401C7__7S7401C67S7401C5__7S7401C1[] = {
  ABISELECT(-1424,-956),
  ABISELECT(-64,-48),
  ABISELECT(64,48),
  ABISELECT(-80,-60),
  ABISELECT(-1424,-956),
  (VTBL_ENTRY)&(_ZTI7S7401C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C6D1Ev,_ZTv0_n24_N7S7401C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C6D0Ev,_ZTv0_n24_N7S7401C6D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7401C6D1Ev,_ZTv0_n20_N7S7401C6D1Ev)();
extern void ABISELECT(_ZThn1488_N7S7401C6D1Ev,_ZThn1004_N7S7401C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7401C6D0Ev,_ZTv0_n20_N7S7401C6D0Ev)();
extern void ABISELECT(_ZThn1488_N7S7401C6D0Ev,_ZThn1004_N7S7401C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7401C2__7S7401C67S7401C5__7S7401C1[] = {
  ABISELECT(-1488,-1004),
  ABISELECT(-128,-96),
  ABISELECT(-144,-108),
  ABISELECT(-1488,-1004),
  (VTBL_ENTRY)&(_ZTI7S7401C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C6D1Ev,_ZTv0_n20_N7S7401C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C6D0Ev,_ZTv0_n20_N7S7401C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C67S7401C5__7S7401C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-1360,-908),
  (VTBL_ENTRY)&(_ZTI7S7401C6[0]),
};
extern void ABISELECT(_ZThn384_N7S7401C6D1Ev,_ZThn248_N7S7401C6D1Ev)();
extern void ABISELECT(_ZThn384_N7S7401C6D0Ev,_ZThn248_N7S7401C6D0Ev)();
extern void _ZN8S7401C102v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7401C107S7401C8__7S7401C67S7401C5__7S7401C1[] = {
  ABISELECT(976,660),
  ABISELECT(960,648),
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI7S7401C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N7S7401C6D1Ev,_ZThn248_N7S7401C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N7S7401C6D0Ev,_ZThn248_N7S7401C6D0Ev),
  (VTBL_ENTRY)&_ZN8S7401C102v1Ev,
};
extern void ABISELECT(_ZThn448_N7S7401C6D1Ev,_ZThn296_N7S7401C6D1Ev)();
extern void ABISELECT(_ZThn448_N7S7401C6D0Ev,_ZThn296_N7S7401C6D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7401C28S7401C107S7401C8__A1__7S7401C67S7401C5__7S7401C1[] = {
  ABISELECT(912,612),
  ABISELECT(896,600),
  ABISELECT(-448,-296),
  (VTBL_ENTRY)&(_ZTI7S7401C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N7S7401C6D1Ev,_ZThn296_N7S7401C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N7S7401C6D0Ev,_ZThn296_N7S7401C6D0Ev),
};
extern void _ZN8S7401C10D1Ev();
extern void _ZN8S7401C10D0Ev();
extern void _ZN8S7401C102v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7401C107S7401C5__A1__7S7401C1[] = {
  ABISELECT(784,524),
  ABISELECT(768,512),
  0,
  (VTBL_ENTRY)&(_ZTI8S7401C10[0]),
  (VTBL_ENTRY)&_ZN8S7401C10D1Ev,
  (VTBL_ENTRY)&_ZN8S7401C10D0Ev,
  (VTBL_ENTRY)&_ZN8S7401C102v1Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7401C48S7401C107S7401C5__A3__7S7401C1[] = {
  ABISELECT(768,512),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C4[0]),
};
extern void _ZN7S7401C2D1Ev();
extern void _ZN7S7401C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C28S7401C107S7401C5__A3__7S7401C1[] = {
  ABISELECT(720,476),
  ABISELECT(704,464),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
  (VTBL_ENTRY)&_ZN7S7401C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C28S7401C107S7401C5__A3__7S7401C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-720,-476),
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
};
extern void ABISELECT(_ZThn64_N8S7401C10D1Ev,_ZThn48_N8S7401C10D1Ev)();
extern void ABISELECT(_ZThn64_N8S7401C10D0Ev,_ZThn48_N8S7401C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7401C2__8S7401C107S7401C5__A1__7S7401C1[] = {
  ABISELECT(720,476),
  ABISELECT(704,464),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI8S7401C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S7401C10D1Ev,_ZThn48_N8S7401C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn64_N8S7401C10D0Ev,_ZThn48_N8S7401C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__A1__8S7401C107S7401C5__A1__7S7401C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-784,-524),
  (VTBL_ENTRY)&(_ZTI8S7401C10[0]),
};
extern void ABISELECT(_ZTv0_n48_N7S7401C5D1Ev,_ZTv0_n24_N7S7401C5D1Ev)();
extern void ABISELECT(_ZThn1424_N7S7401C5D1Ev,_ZThn956_N7S7401C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7401C5D0Ev,_ZTv0_n24_N7S7401C5D0Ev)();
extern void ABISELECT(_ZThn1424_N7S7401C5D0Ev,_ZThn956_N7S7401C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7401C7__7S7401C5__7S7401C1[] = {
  ABISELECT(-1424,-956),
  ABISELECT(-64,-48),
  ABISELECT(64,48),
  ABISELECT(-80,-60),
  ABISELECT(-1424,-956),
  (VTBL_ENTRY)&(_ZTI7S7401C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C5D1Ev,_ZTv0_n24_N7S7401C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7401C5D0Ev,_ZTv0_n24_N7S7401C5D0Ev),
};
extern void ABISELECT(_ZTv0_n40_N7S7401C5D1Ev,_ZTv0_n20_N7S7401C5D1Ev)();
extern void ABISELECT(_ZThn1488_N7S7401C5D1Ev,_ZThn1004_N7S7401C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7401C5D0Ev,_ZTv0_n20_N7S7401C5D0Ev)();
extern void ABISELECT(_ZThn1488_N7S7401C5D0Ev,_ZThn1004_N7S7401C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7401C2__7S7401C5__7S7401C1[] = {
  ABISELECT(-1488,-1004),
  ABISELECT(-128,-96),
  ABISELECT(-144,-108),
  ABISELECT(-1488,-1004),
  (VTBL_ENTRY)&(_ZTI7S7401C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C5D1Ev,_ZTv0_n20_N7S7401C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C5D0Ev,_ZTv0_n20_N7S7401C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C5__7S7401C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-1360,-908),
  (VTBL_ENTRY)&(_ZTI7S7401C5[0]),
};
extern void ABISELECT(_ZThn384_N7S7401C5D1Ev,_ZThn248_N7S7401C5D1Ev)();
extern void ABISELECT(_ZThn384_N7S7401C5D0Ev,_ZThn248_N7S7401C5D0Ev)();
extern void _ZN8S7401C102v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7401C107S7401C87S7401C6__7S7401C5__7S7401C1[] = {
  ABISELECT(976,660),
  ABISELECT(960,648),
  ABISELECT(-384,-248),
  (VTBL_ENTRY)&(_ZTI7S7401C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N7S7401C5D1Ev,_ZThn248_N7S7401C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn384_N7S7401C5D0Ev,_ZThn248_N7S7401C5D0Ev),
  (VTBL_ENTRY)&_ZN8S7401C102v1Ev,
};
extern void ABISELECT(_ZThn448_N7S7401C5D1Ev,_ZThn296_N7S7401C5D1Ev)();
extern void ABISELECT(_ZThn448_N7S7401C5D0Ev,_ZThn296_N7S7401C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7401C28S7401C107S7401C87S7401C6__A1__7S7401C5__7S7401C1[] = {
  ABISELECT(912,612),
  ABISELECT(896,600),
  ABISELECT(-448,-296),
  (VTBL_ENTRY)&(_ZTI7S7401C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N7S7401C5D1Ev,_ZThn296_N7S7401C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn448_N7S7401C5D0Ev,_ZThn296_N7S7401C5D0Ev),
};
extern void ABISELECT(_ZThn576_N7S7401C5D1Ev,_ZThn384_N7S7401C5D1Ev)();
extern void ABISELECT(_ZThn576_N7S7401C5D0Ev,_ZThn384_N7S7401C5D0Ev)();
extern void _ZN8S7401C102v1Ev();
static  VTBL_ENTRY _tg__ZTV8S7401C10__A1__7S7401C5__7S7401C1[] = {
  ABISELECT(784,524),
  ABISELECT(768,512),
  ABISELECT(-576,-384),
  (VTBL_ENTRY)&(_ZTI7S7401C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N7S7401C5D1Ev,_ZThn384_N7S7401C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn576_N7S7401C5D0Ev,_ZThn384_N7S7401C5D0Ev),
  (VTBL_ENTRY)&_ZN8S7401C102v1Ev,
};
extern void ABISELECT(_ZThn640_N7S7401C5D1Ev,_ZThn432_N7S7401C5D1Ev)();
extern void ABISELECT(_ZThn640_N7S7401C5D0Ev,_ZThn432_N7S7401C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S7401C28S7401C10__A2__7S7401C5__7S7401C1[] = {
  ABISELECT(720,476),
  ABISELECT(704,464),
  ABISELECT(-640,-432),
  (VTBL_ENTRY)&(_ZTI7S7401C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn640_N7S7401C5D1Ev,_ZThn432_N7S7401C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn640_N7S7401C5D0Ev,_ZThn432_N7S7401C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C1[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C4[0]),
};
extern void _ZN7S7401C7D1Ev();
extern void _ZN7S7401C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C7__7S7401C1[] = {
  ABISELECT(-64,-48),
  ABISELECT(64,48),
  ABISELECT(-80,-60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C7[0]),
  (VTBL_ENTRY)&_ZN7S7401C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7401C47S7401C7__A1__7S7401C1[] = {
  ABISELECT(-80,-60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C4[0]),
};
extern void ABISELECT(_ZTv0_n40_N7S7401C7D1Ev,_ZTv0_n20_N7S7401C7D1Ev)();
extern void ABISELECT(_ZThn64_N7S7401C7D1Ev,_ZThn48_N7S7401C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S7401C7D0Ev,_ZTv0_n20_N7S7401C7D0Ev)();
extern void ABISELECT(_ZThn64_N7S7401C7D0Ev,_ZThn48_N7S7401C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7401C2__7S7401C7__7S7401C1[] = {
  ABISELECT(-64,-48),
  ABISELECT(-128,-96),
  ABISELECT(-144,-108),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI7S7401C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C7D1Ev,_ZTv0_n20_N7S7401C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S7401C7D0Ev,_ZTv0_n20_N7S7401C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C7__7S7401C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(64,48),
  (VTBL_ENTRY)&(_ZTI7S7401C7[0]),
};
extern void _ZN7S7401C2D1Ev();
extern void _ZN7S7401C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7401C2__A1__7S7401C1[] = {
  ABISELECT(-128,-96),
  ABISELECT(-144,-108),
  0,
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
  (VTBL_ENTRY)&_ZN7S7401C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7401C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7401C4__7S7401C2__A1__7S7401C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(128,96),
  (VTBL_ENTRY)&(_ZTI7S7401C2[0]),
};
static  VTT_ENTRY vtt_S7401C1[] = {
  {&(_ZTV7S7401C1[6]),  6,67},
  {&(_tg__ZTV7S7401C2__A__7S7401C1[4]),  4,6},
  {&(_tg__ZTV7S7401C4__7S7401C2__A__7S7401C1[3]),  3,3},
  {&(_tg__ZTV7S7401C5__7S7401C1[6]),  6,15},
  {&(_tg__ZTV7S7401C67S7401C5__7S7401C1[6]),  6,12},
  {&(_tg__ZTV7S7401C87S7401C67S7401C5__7S7401C1[6]),  6,10},
  {&(_tg__ZTV7S7401C97S7401C87S7401C67S7401C5__7S7401C1[6]),  6,8},
  {&(_tg__ZTV7S7401C7__7S7401C97S7401C87S7401C67S7401C5__7S7401C1[6]),  6,8},
  {&(_tg__ZTV7S7401C2__7S7401C97S7401C87S7401C67S7401C5__7S7401C1[5]),  5,7},
  {&(_tg__ZTV7S7401C4__7S7401C97S7401C87S7401C67S7401C5__7S7401C1[3]),  3,3},
  {&(_tg__ZTV8S7401C107S7401C87S7401C67S7401C5__7S7401C1[4]),  4,7},
  {&(_tg__ZTV7S7401C48S7401C107S7401C87S7401C67S7401C5__A2__7S7401C1[3]),  3,3},
  {&(_tg__ZTV7S7401C28S7401C107S7401C87S7401C67S7401C5__A2__7S7401C1[4]),  4,6},
  {&(_tg__ZTV7S7401C4__7S7401C28S7401C107S7401C87S7401C67S7401C5__A2__7S7401C1[3]),  3,3},
  {&(_tg__ZTV7S7401C2__8S7401C107S7401C87S7401C67S7401C5__7S7401C1[4]),  4,6},
  {&(_tg__ZTV7S7401C4__A1__8S7401C107S7401C87S7401C67S7401C5__7S7401C1[3]),  3,3},
  {&(_tg__ZTV7S7401C4__7S7401C87S7401C67S7401C5__7S7401C1[3]),  3,3},
  {&(_tg__ZTV7S7401C2__7S7401C87S7401C67S7401C5__7S7401C1[5]),  5,7},
  {&(_tg__ZTV7S7401C7__7S7401C87S7401C67S7401C5__7S7401C1[6]),  6,8},
  {&(_tg__ZTV8S7401C10__7S7401C87S7401C67S7401C5__7S7401C1[4]),  4,7},
  {&(_tg__ZTV7S7401C28S7401C10__A1__7S7401C87S7401C67S7401C5__7S7401C1[4]),  4,6},
  {&(_tg__ZTV7S7401C7__7S7401C67S7401C5__7S7401C1[6]),  6,8},
  {&(_tg__ZTV7S7401C2__7S7401C67S7401C5__7S7401C1[5]),  5,7},
  {&(_tg__ZTV7S7401C4__7S7401C67S7401C5__7S7401C1[3]),  3,3},
  {&(_tg__ZTV8S7401C107S7401C8__7S7401C67S7401C5__7S7401C1[4]),  4,7},
  {&(_tg__ZTV7S7401C28S7401C107S7401C8__A1__7S7401C67S7401C5__7S7401C1[4]),  4,6},
  {&(_tg__ZTV8S7401C107S7401C5__A1__7S7401C1[4]),  4,7},
  {&(_tg__ZTV7S7401C48S7401C107S7401C5__A3__7S7401C1[3]),  3,3},
  {&(_tg__ZTV7S7401C28S7401C107S7401C5__A3__7S7401C1[4]),  4,6},
  {&(_tg__ZTV7S7401C4__7S7401C28S7401C107S7401C5__A3__7S7401C1[3]),  3,3},
  {&(_tg__ZTV7S7401C2__8S7401C107S7401C5__A1__7S7401C1[4]),  4,6},
  {&(_tg__ZTV7S7401C4__A1__8S7401C107S7401C5__A1__7S7401C1[3]),  3,3},
  {&(_tg__ZTV7S7401C7__7S7401C5__7S7401C1[6]),  6,8},
  {&(_tg__ZTV7S7401C2__7S7401C5__7S7401C1[5]),  5,7},
  {&(_tg__ZTV7S7401C4__7S7401C5__7S7401C1[3]),  3,3},
  {&(_tg__ZTV8S7401C107S7401C87S7401C6__7S7401C5__7S7401C1[4]),  4,7},
  {&(_tg__ZTV7S7401C28S7401C107S7401C87S7401C6__A1__7S7401C5__7S7401C1[4]),  4,6},
  {&(_tg__ZTV8S7401C10__A1__7S7401C5__7S7401C1[4]),  4,7},
  {&(_tg__ZTV7S7401C28S7401C10__A2__7S7401C5__7S7401C1[4]),  4,6},
  {&(_ZTV7S7401C1[52]),  52,67},
  {&(_ZTV7S7401C1[14]),  14,67},
  {&(_ZTV7S7401C1[58]),  58,67},
  {&(_ZTV7S7401C1[65]),  65,67},
  {&(_ZTV7S7401C1[27]),  27,67},
  {&(_ZTV7S7401C1[34]),  34,67},
  {&(_ZTV7S7401C1[40]),  40,67},
  {&(_ZTV7S7401C1[47]),  47,67},
  {&(_tg__ZTV7S7401C4__7S7401C1[3]),  3,3},
  {&(_tg__ZTV7S7401C7__7S7401C1[5]),  5,7},
  {&(_tg__ZTV7S7401C47S7401C7__A1__7S7401C1[3]),  3,3},
  {&(_tg__ZTV7S7401C2__7S7401C7__7S7401C1[5]),  5,7},
  {&(_tg__ZTV7S7401C4__7S7401C7__7S7401C1[3]),  3,3},
  {&(_tg__ZTV7S7401C2__A1__7S7401C1[4]),  4,6},
  {&(_tg__ZTV7S7401C4__7S7401C2__A1__7S7401C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7401C1[];
extern  VTBL_ENTRY _ZTV7S7401C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7401C1[];
static VTBL_ENTRY alt_thunk_names183[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C7D0Ev,_ZTv0_n20_N7S7401C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7401C7D0Ev,_ZThn48_N7S7401C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C7D1Ev,_ZTv0_n20_N7S7401C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7401C7D1Ev,_ZThn48_N7S7401C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C5D0Ev,_ZTv0_n20_N7S7401C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1488_N7S7401C5D0Ev,_ZThn1004_N7S7401C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C5D1Ev,_ZTv0_n20_N7S7401C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1488_N7S7401C5D1Ev,_ZThn1004_N7S7401C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C5D0Ev,_ZTv0_n24_N7S7401C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1424_N7S7401C5D0Ev,_ZThn956_N7S7401C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C5D1Ev,_ZTv0_n24_N7S7401C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1424_N7S7401C5D1Ev,_ZThn956_N7S7401C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C6D0Ev,_ZTv0_n20_N7S7401C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1488_N7S7401C6D0Ev,_ZThn1004_N7S7401C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C6D1Ev,_ZTv0_n20_N7S7401C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1488_N7S7401C6D1Ev,_ZThn1004_N7S7401C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C6D0Ev,_ZTv0_n24_N7S7401C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1424_N7S7401C6D0Ev,_ZThn956_N7S7401C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C6D1Ev,_ZTv0_n24_N7S7401C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1424_N7S7401C6D1Ev,_ZThn956_N7S7401C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C8D0Ev,_ZTv0_n24_N7S7401C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1424_N7S7401C8D0Ev,_ZThn956_N7S7401C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C8D1Ev,_ZTv0_n24_N7S7401C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1424_N7S7401C8D1Ev,_ZThn956_N7S7401C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C8D0Ev,_ZTv0_n20_N7S7401C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1488_N7S7401C8D0Ev,_ZThn1004_N7S7401C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C8D1Ev,_ZTv0_n20_N7S7401C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1488_N7S7401C8D1Ev,_ZThn1004_N7S7401C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C9D0Ev,_ZTv0_n20_N7S7401C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1488_N7S7401C9D0Ev,_ZThn1004_N7S7401C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C9D1Ev,_ZTv0_n20_N7S7401C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1488_N7S7401C9D1Ev,_ZThn1004_N7S7401C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C9D0Ev,_ZTv0_n24_N7S7401C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1424_N7S7401C9D0Ev,_ZThn956_N7S7401C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C9D1Ev,_ZTv0_n24_N7S7401C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1424_N7S7401C9D1Ev,_ZThn956_N7S7401C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C1D0Ev,_ZTv0_n20_N7S7401C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N7S7401C1D0Ev,_ZThn1040_N7S7401C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S7401C1D1Ev,_ZTv0_n20_N7S7401C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1552_N7S7401C1D1Ev,_ZThn1040_N7S7401C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C1D0Ev,_ZTv0_n24_N7S7401C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1488_N7S7401C1D0Ev,_ZThn992_N7S7401C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7401C1D1Ev,_ZTv0_n24_N7S7401C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn1488_N7S7401C1D1Ev,_ZThn992_N7S7401C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7401C1 = {  "S7401C1", // class name
  bases_S7401C1, 17,
  &(vtc_S7401C1[0]), // expected_vtbl_contents
  &(vtt_S7401C1[0]), // expected_vtt_contents
  ABISELECT(1616,1076), // object size
  NSPAIRA(_ZTI7S7401C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7401C1),67, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7401C1),54, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names183,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7703C5  {
  int s7703c5f0;
  virtual void  v2(); // _ZN7S7703C52v2Ev
  virtual void  v3(); // _ZN7S7703C52v3Ev
  virtual void  v4(); // _ZN7S7703C52v4Ev
  virtual void  v5(); // _ZN7S7703C52v5Ev
  virtual void  v6(); // _ZN7S7703C52v6Ev
  virtual void  v7(); // _ZN7S7703C52v7Ev
  ~S7703C5(); // tgen
  S7703C5(); // tgen
};
//SIG(-1 S7703C5) C1{ v1 v2 v3 v4 v5 v6 Fi}


void  S7703C5 ::v2(){vfunc_called(this, "_ZN7S7703C52v2Ev");}
void  S7703C5 ::v3(){vfunc_called(this, "_ZN7S7703C52v3Ev");}
void  S7703C5 ::v4(){vfunc_called(this, "_ZN7S7703C52v4Ev");}
void  S7703C5 ::v5(){vfunc_called(this, "_ZN7S7703C52v5Ev");}
void  S7703C5 ::v6(){vfunc_called(this, "_ZN7S7703C52v6Ev");}
void  S7703C5 ::v7(){vfunc_called(this, "_ZN7S7703C52v7Ev");}
S7703C5 ::~S7703C5(){ note_dtor("S7703C5", this);} // tgen
S7703C5 ::S7703C5(){ note_ctor("S7703C5", this);} // tgen

static void Test_S7703C5()
{
  extern Class_Descriptor cd_S7703C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7703C5, buf);
    S7703C5 *dp, &lv = *(dp=new (buf) S7703C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7703C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7703C5)");
    check_field_offset(lv, s7703c5f0, ABISELECT(8,4), "S7703C5.s7703c5f0");
    test_class_info(&lv, &cd_S7703C5);
    dp->~S7703C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7703C5(Test_S7703C5, "S7703C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7703C5C1Ev();
extern void _ZN7S7703C5D1Ev();
Name_Map name_map_S7703C5[] = {
  NSPAIR(_ZN7S7703C5C1Ev),
  NSPAIR(_ZN7S7703C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7703C5[];
extern void _ZN7S7703C52v2Ev();
extern void _ZN7S7703C52v3Ev();
extern void _ZN7S7703C52v4Ev();
extern void _ZN7S7703C52v5Ev();
extern void _ZN7S7703C52v6Ev();
extern void _ZN7S7703C52v7Ev();
static  VTBL_ENTRY vtc_S7703C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7703C5[0]),
  (VTBL_ENTRY)&_ZN7S7703C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v7Ev,
};
extern VTBL_ENTRY _ZTI7S7703C5[];
extern  VTBL_ENTRY _ZTV7S7703C5[];
Class_Descriptor cd_S7703C5 = {  "S7703C5", // class name
  0,0,//no base classes
  &(vtc_S7703C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7703C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7703C5),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  S7703C4  : S7703C5 {
  virtual void  v8(); // _ZN7S7703C42v8Ev
  ~S7703C4(); // tgen
  S7703C4(); // tgen
};
//SIG(-1 S7703C4) C1{ BC2{ v2 v3 v4 v5 v6 v7 Fi} v1}


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

static void Test_S7703C4()
{
  extern Class_Descriptor cd_S7703C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7703C4, buf);
    S7703C4 *dp, &lv = *(dp=new (buf) S7703C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7703C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7703C4)");
    check_base_class_offset(lv, (S7703C5*), 0, "S7703C4");
    test_class_info(&lv, &cd_S7703C4);
    dp->~S7703C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7703C4(Test_S7703C4, "S7703C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7703C4C1Ev();
extern void _ZN7S7703C4D1Ev();
Name_Map name_map_S7703C4[] = {
  NSPAIR(_ZN7S7703C4C1Ev),
  NSPAIR(_ZN7S7703C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7703C5;
extern VTBL_ENTRY _ZTI7S7703C5[];
extern  VTBL_ENTRY _ZTV7S7703C5[];
static Base_Class bases_S7703C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7703C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S7703C4[];
extern void _ZN7S7703C52v2Ev();
extern void _ZN7S7703C52v3Ev();
extern void _ZN7S7703C52v4Ev();
extern void _ZN7S7703C52v5Ev();
extern void _ZN7S7703C52v6Ev();
extern void _ZN7S7703C52v7Ev();
extern void _ZN7S7703C42v8Ev();
static  VTBL_ENTRY vtc_S7703C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7703C4[0]),
  (VTBL_ENTRY)&_ZN7S7703C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7703C42v8Ev,
};
extern VTBL_ENTRY _ZTI7S7703C4[];
extern  VTBL_ENTRY _ZTV7S7703C4[];
Class_Descriptor cd_S7703C4 = {  "S7703C4", // class name
  bases_S7703C4, 1,
  &(vtc_S7703C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7703C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7703C4),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7703C3  : virtual S7703C4 {
  int s7703c3f0;
  short s7703c3f1;
  virtual  ~S7703C3(); // _ZN7S7703C3D2Ev
  virtual void  v9(); // _ZN7S7703C32v9Ev
  virtual void  v10(); // _ZN7S7703C33v10Ev
  virtual void  v11(); // _ZN7S7703C33v11Ev
  virtual void  v12(); // _ZN7S7703C33v12Ev
  virtual void  v13(); // _ZN7S7703C33v13Ev
  virtual void  v14(); // _ZN7S7703C33v14Ev
  virtual void  v15(); // _ZN7S7703C33v15Ev
  virtual void  v16(); // _ZN7S7703C33v16Ev
  S7703C3(); // tgen
};
//SIG(-1 S7703C3) C1{ VBC2{ BC3{ v9 v10 v11 v12 v13 v14 Fi} v15} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fs}


 S7703C3 ::~S7703C3(){ note_dtor("S7703C3", this);}
void  S7703C3 ::v9(){vfunc_called(this, "_ZN7S7703C32v9Ev");}
void  S7703C3 ::v10(){vfunc_called(this, "_ZN7S7703C33v10Ev");}
void  S7703C3 ::v11(){vfunc_called(this, "_ZN7S7703C33v11Ev");}
void  S7703C3 ::v12(){vfunc_called(this, "_ZN7S7703C33v12Ev");}
void  S7703C3 ::v13(){vfunc_called(this, "_ZN7S7703C33v13Ev");}
void  S7703C3 ::v14(){vfunc_called(this, "_ZN7S7703C33v14Ev");}
void  S7703C3 ::v15(){vfunc_called(this, "_ZN7S7703C33v15Ev");}
void  S7703C3 ::v16(){vfunc_called(this, "_ZN7S7703C33v16Ev");}
S7703C3 ::S7703C3(){ note_ctor("S7703C3", this);} // tgen

static void Test_S7703C3()
{
  extern Class_Descriptor cd_S7703C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S7703C3, buf);
    S7703C3 *dp, &lv = *(dp=new (buf) S7703C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S7703C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7703C3)");
    check_base_class_offset(lv, (S7703C5*)(S7703C4*), ABISELECT(16,12), "S7703C3");
    check_base_class_offset(lv, (S7703C4*), ABISELECT(16,12), "S7703C3");
    check_field_offset(lv, s7703c3f0, ABISELECT(8,4), "S7703C3.s7703c3f0");
    check_field_offset(lv, s7703c3f1, ABISELECT(12,8), "S7703C3.s7703c3f1");
    test_class_info(&lv, &cd_S7703C3);
    dp->~S7703C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7703C3(Test_S7703C3, "S7703C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S7703C3C1Ev();
extern void _ZN7S7703C3D2Ev();
Name_Map name_map_S7703C3[] = {
  NSPAIR(_ZN7S7703C3C1Ev),
  NSPAIR(_ZN7S7703C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7703C5;
extern VTBL_ENTRY _ZTI7S7703C5[];
extern  VTBL_ENTRY _ZTV7S7703C5[];
extern Class_Descriptor cd_S7703C4;
extern VTBL_ENTRY _ZTI7S7703C4[];
extern  VTBL_ENTRY _ZTV7S7703C4[];
static Base_Class bases_S7703C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7703C5,    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
  0, 0},
  {&cd_S7703C4,    ABISELECT(16,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S7703C3[];
extern void _ZN7S7703C3D1Ev();
extern void _ZN7S7703C3D0Ev();
extern void _ZN7S7703C32v9Ev();
extern void _ZN7S7703C33v10Ev();
extern void _ZN7S7703C33v11Ev();
extern void _ZN7S7703C33v12Ev();
extern void _ZN7S7703C33v13Ev();
extern void _ZN7S7703C33v14Ev();
extern void _ZN7S7703C33v15Ev();
extern void _ZN7S7703C33v16Ev();
extern void _ZN7S7703C52v2Ev();
extern void _ZN7S7703C52v3Ev();
extern void _ZN7S7703C52v4Ev();
extern void _ZN7S7703C52v5Ev();
extern void _ZN7S7703C52v6Ev();
extern void _ZN7S7703C52v7Ev();
extern void _ZN7S7703C42v8Ev();
static  VTBL_ENTRY vtc_S7703C3[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7703C3[0]),
  (VTBL_ENTRY)&_ZN7S7703C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7703C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7703C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7703C3[0]),
  (VTBL_ENTRY)&_ZN7S7703C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7703C42v8Ev,
};
extern VTBL_ENTRY _ZTV7S7703C3[];
static  VTT_ENTRY vtt_S7703C3[] = {
  {&(_ZTV7S7703C3[3]),  3,29},
  {&(_ZTV7S7703C3[22]),  22,29},
};
extern VTBL_ENTRY _ZTI7S7703C3[];
extern  VTBL_ENTRY _ZTV7S7703C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7703C3[];
Class_Descriptor cd_S7703C3 = {  "S7703C3", // class name
  bases_S7703C3, 2,
  &(vtc_S7703C3[0]), // expected_vtbl_contents
  &(vtt_S7703C3[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S7703C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7703C3),29, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7703C3),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  S7703C2  : virtual S7703C3 {
  void *s7703c2f0[7];
  int s7703c2f1;
  virtual void  v17(); // _ZN7S7703C23v17Ev
  virtual void  v18(); // _ZN7S7703C23v18Ev
  virtual void  v19(); // _ZN7S7703C23v19Ev
  virtual void  v20(); // _ZN7S7703C23v20Ev
  virtual void  v21(); // _ZN7S7703C23v21Ev
  ~S7703C2(); // tgen
  S7703C2(); // tgen
};
//SIG(-1 S7703C2) C1{ VBC2{ VBC3{ BC4{ v6 v7 v8 v9 v10 v11 Fi} v12} vd v13 v14 v15 v16 v17 v18 v19 v20 Fi Fs} v1 v2 v3 v4 v5 Fp[7] Fi}


void  S7703C2 ::v17(){vfunc_called(this, "_ZN7S7703C23v17Ev");}
void  S7703C2 ::v18(){vfunc_called(this, "_ZN7S7703C23v18Ev");}
void  S7703C2 ::v19(){vfunc_called(this, "_ZN7S7703C23v19Ev");}
void  S7703C2 ::v20(){vfunc_called(this, "_ZN7S7703C23v20Ev");}
void  S7703C2 ::v21(){vfunc_called(this, "_ZN7S7703C23v21Ev");}
S7703C2 ::~S7703C2(){ note_dtor("S7703C2", this);} // tgen
S7703C2 ::S7703C2(){ note_ctor("S7703C2", this);} // tgen

static void Test_S7703C2()
{
  extern Class_Descriptor cd_S7703C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,15)];
    init_test(&cd_S7703C2, buf);
    S7703C2 *dp, &lv = *(dp=new (buf) S7703C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,56), "sizeof(S7703C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7703C2)");
    check_base_class_offset(lv, (S7703C5*)(S7703C4*), ABISELECT(88,48), "S7703C2");
    check_base_class_offset(lv, (S7703C4*)(S7703C3*), ABISELECT(88,48), "S7703C2");
    check_base_class_offset(lv, (S7703C3*), ABISELECT(72,36), "S7703C2");
    check_field_offset(lv, s7703c2f0, ABISELECT(8,4), "S7703C2.s7703c2f0");
    check_field_offset(lv, s7703c2f1, ABISELECT(64,32), "S7703C2.s7703c2f1");
    test_class_info(&lv, &cd_S7703C2);
    dp->~S7703C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7703C2(Test_S7703C2, "S7703C2", ABISELECT(104,56));

#else // __cplusplus

extern void _ZN7S7703C2C1Ev();
extern void _ZN7S7703C2D1Ev();
Name_Map name_map_S7703C2[] = {
  NSPAIR(_ZN7S7703C2C1Ev),
  NSPAIR(_ZN7S7703C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7703C5;
extern VTBL_ENTRY _ZTI7S7703C5[];
extern  VTBL_ENTRY _ZTV7S7703C5[];
extern Class_Descriptor cd_S7703C4;
extern VTBL_ENTRY _ZTI7S7703C4[];
extern  VTBL_ENTRY _ZTV7S7703C4[];
extern Class_Descriptor cd_S7703C3;
extern VTBL_ENTRY _ZTI7S7703C3[];
extern  VTBL_ENTRY _ZTV7S7703C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7703C3[];
static Base_Class bases_S7703C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7703C5,    ABISELECT(88,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_S7703C4,    ABISELECT(88,48), //bcp->offset
    33, //bcp->virtual_function_table_offset
    9, //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
    2, //immediately_derived
  0, 1},
  {&cd_S7703C3,    ABISELECT(72,36), //bcp->offset
    11, //bcp->virtual_function_table_offset
    12, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S7703C2[];
extern void _ZN7S7703C23v17Ev();
extern void _ZN7S7703C23v18Ev();
extern void _ZN7S7703C23v19Ev();
extern void _ZN7S7703C23v20Ev();
extern void _ZN7S7703C23v21Ev();
extern void _ZN7S7703C2D1Ev();
extern void _ZN7S7703C2D0Ev();
extern void ABISELECT(_ZTv0_n32_N7S7703C2D1Ev,_ZTv0_n16_N7S7703C2D1Ev)();
extern void ABISELECT(_ZThn72_N7S7703C2D1Ev,_ZThn36_N7S7703C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7703C2D0Ev,_ZTv0_n16_N7S7703C2D0Ev)();
extern void ABISELECT(_ZThn72_N7S7703C2D0Ev,_ZThn36_N7S7703C2D0Ev)() __attribute__((weak));
extern void _ZN7S7703C32v9Ev();
extern void _ZN7S7703C33v10Ev();
extern void _ZN7S7703C33v11Ev();
extern void _ZN7S7703C33v12Ev();
extern void _ZN7S7703C33v13Ev();
extern void _ZN7S7703C33v14Ev();
extern void _ZN7S7703C33v15Ev();
extern void _ZN7S7703C33v16Ev();
extern void _ZN7S7703C52v2Ev();
extern void _ZN7S7703C52v3Ev();
extern void _ZN7S7703C52v4Ev();
extern void _ZN7S7703C52v5Ev();
extern void _ZN7S7703C52v6Ev();
extern void _ZN7S7703C52v7Ev();
extern void _ZN7S7703C42v8Ev();
static  VTBL_ENTRY vtc_S7703C2[] = {
  ABISELECT(88,48),
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI7S7703C2[0]),
  (VTBL_ENTRY)&_ZN7S7703C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7703C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7703C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7703C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7703C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7703C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7703C2D0Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  ABISELECT(16,12),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S7703C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7703C2D1Ev,_ZTv0_n16_N7S7703C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7703C2D0Ev,_ZTv0_n16_N7S7703C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7703C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-48),
  (VTBL_ENTRY)&(_ZTI7S7703C2[0]),
  (VTBL_ENTRY)&_ZN7S7703C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7703C42v8Ev,
};
extern VTBL_ENTRY _ZTV7S7703C2[];
extern void _ZN7S7703C3D1Ev();
extern void _ZN7S7703C3D0Ev();
extern void _ZN7S7703C32v9Ev();
extern void _ZN7S7703C33v10Ev();
extern void _ZN7S7703C33v11Ev();
extern void _ZN7S7703C33v12Ev();
extern void _ZN7S7703C33v13Ev();
extern void _ZN7S7703C33v14Ev();
extern void _ZN7S7703C33v15Ev();
extern void _ZN7S7703C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7703C3__7S7703C2[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7703C3[0]),
  (VTBL_ENTRY)&_ZN7S7703C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7703C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7703C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v16Ev,
};
extern void _ZN7S7703C52v2Ev();
extern void _ZN7S7703C52v3Ev();
extern void _ZN7S7703C52v4Ev();
extern void _ZN7S7703C52v5Ev();
extern void _ZN7S7703C52v6Ev();
extern void _ZN7S7703C52v7Ev();
extern void _ZN7S7703C42v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7703C4__7S7703C3__7S7703C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7703C3[0]),
  (VTBL_ENTRY)&_ZN7S7703C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7703C42v8Ev,
};
static  VTT_ENTRY vtt_S7703C2[] = {
  {&(_ZTV7S7703C2[4]),  4,49},
  {&(_ZTV7S7703C2[23]),  23,49},
  {&(_ZTV7S7703C2[42]),  42,49},
  {&(_tg__ZTV7S7703C3__7S7703C2[3]),  3,13},
  {&(_tg__ZTV7S7703C4__7S7703C3__7S7703C2[9]),  9,16},
};
extern VTBL_ENTRY _ZTI7S7703C2[];
extern  VTBL_ENTRY _ZTV7S7703C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7703C2[];
static VTBL_ENTRY alt_thunk_names184[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7703C2D0Ev,_ZTv0_n16_N7S7703C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7703C2D0Ev,_ZThn36_N7S7703C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7703C2D1Ev,_ZTv0_n16_N7S7703C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7703C2D1Ev,_ZThn36_N7S7703C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7703C2 = {  "S7703C2", // class name
  bases_S7703C2, 3,
  &(vtc_S7703C2[0]), // expected_vtbl_contents
  &(vtt_S7703C2[0]), // expected_vtt_contents
  ABISELECT(104,56), // object size
  NSPAIRA(_ZTI7S7703C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7703C2),49, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7703C2),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names184,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7703C7  {
  ::S7218C6 s7703c7f0;
  virtual void  v22(); // _ZN7S7703C73v22Ev
  virtual void  v23(); // _ZN7S7703C73v23Ev
  virtual void  v24(); // _ZN7S7703C73v24Ev
  ~S7703C7(); // tgen
  S7703C7(); // tgen
};
//SIG(-1 S7703C7) C1{ v1 v2 v3 FC2{ BC3{ BC4{ v11 v12 v13 v14 v15 v16 Fi} v17} v4 v5 v6 v7 v8 v9 v10}}


void  S7703C7 ::v22(){vfunc_called(this, "_ZN7S7703C73v22Ev");}
void  S7703C7 ::v23(){vfunc_called(this, "_ZN7S7703C73v23Ev");}
void  S7703C7 ::v24(){vfunc_called(this, "_ZN7S7703C73v24Ev");}
S7703C7 ::~S7703C7(){ note_dtor("S7703C7", this);} // tgen
S7703C7 ::S7703C7(){ note_ctor("S7703C7", this);} // tgen

static void Test_S7703C7()
{
  extern Class_Descriptor cd_S7703C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7703C7, buf);
    S7703C7 *dp, &lv = *(dp=new (buf) S7703C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7703C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7703C7)");
    check_field_offset(lv, s7703c7f0, ABISELECT(8,4), "S7703C7.s7703c7f0");
    test_class_info(&lv, &cd_S7703C7);
    dp->~S7703C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7703C7(Test_S7703C7, "S7703C7", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7703C7C1Ev();
extern void _ZN7S7703C7D1Ev();
Name_Map name_map_S7703C7[] = {
  NSPAIR(_ZN7S7703C7C1Ev),
  NSPAIR(_ZN7S7703C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7703C7[];
extern void _ZN7S7703C73v22Ev();
extern void _ZN7S7703C73v23Ev();
extern void _ZN7S7703C73v24Ev();
static  VTBL_ENTRY vtc_S7703C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7703C7[0]),
  (VTBL_ENTRY)&_ZN7S7703C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7703C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7703C73v24Ev,
};
extern VTBL_ENTRY _ZTI7S7703C7[];
extern  VTBL_ENTRY _ZTV7S7703C7[];
Class_Descriptor cd_S7703C7 = {  "S7703C7", // class name
  0,0,//no base classes
  &(vtc_S7703C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7703C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7703C7),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  S7703C9  : S7703C7 {
  void *s7703c9f0;
  char s7703c9f1;
  virtual void  v25(); // _ZN7S7703C93v25Ev
  virtual void  v26(); // _ZN7S7703C93v26Ev
  virtual void  v27(); // _ZN7S7703C93v27Ev
  virtual void  v28(); // _ZN7S7703C93v28Ev
  ~S7703C9(); // tgen
  S7703C9(); // tgen
};
//SIG(-1 S7703C9) C1{ BC2{ v5 v6 v7 FC3{ BC4{ BC5{ v15 v16 v17 v18 v19 v20 Fi} v21} v8 v9 v10 v11 v12 v13 v14}} v1 v2 v3 v4 Fp Fc}


void  S7703C9 ::v25(){vfunc_called(this, "_ZN7S7703C93v25Ev");}
void  S7703C9 ::v26(){vfunc_called(this, "_ZN7S7703C93v26Ev");}
void  S7703C9 ::v27(){vfunc_called(this, "_ZN7S7703C93v27Ev");}
void  S7703C9 ::v28(){vfunc_called(this, "_ZN7S7703C93v28Ev");}
S7703C9 ::~S7703C9(){ note_dtor("S7703C9", this);} // tgen
S7703C9 ::S7703C9(){ note_ctor("S7703C9", this);} // tgen

static void Test_S7703C9()
{
  extern Class_Descriptor cd_S7703C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S7703C9, buf);
    S7703C9 *dp, &lv = *(dp=new (buf) S7703C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S7703C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7703C9)");
    check_base_class_offset(lv, (S7703C7*), 0, "S7703C9");
    check_field_offset(lv, s7703c9f0, ABISELECT(24,12), "S7703C9.s7703c9f0");
    check_field_offset(lv, s7703c9f1, ABISELECT(32,16), "S7703C9.s7703c9f1");
    test_class_info(&lv, &cd_S7703C9);
    dp->~S7703C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7703C9(Test_S7703C9, "S7703C9", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S7703C9C1Ev();
extern void _ZN7S7703C9D1Ev();
Name_Map name_map_S7703C9[] = {
  NSPAIR(_ZN7S7703C9C1Ev),
  NSPAIR(_ZN7S7703C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7703C7;
extern VTBL_ENTRY _ZTI7S7703C7[];
extern  VTBL_ENTRY _ZTV7S7703C7[];
static Base_Class bases_S7703C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7703C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S7703C9[];
extern void _ZN7S7703C73v22Ev();
extern void _ZN7S7703C73v23Ev();
extern void _ZN7S7703C73v24Ev();
extern void _ZN7S7703C93v25Ev();
extern void _ZN7S7703C93v26Ev();
extern void _ZN7S7703C93v27Ev();
extern void _ZN7S7703C93v28Ev();
static  VTBL_ENTRY vtc_S7703C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7703C9[0]),
  (VTBL_ENTRY)&_ZN7S7703C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7703C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7703C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7703C93v25Ev,
  (VTBL_ENTRY)&_ZN7S7703C93v26Ev,
  (VTBL_ENTRY)&_ZN7S7703C93v27Ev,
  (VTBL_ENTRY)&_ZN7S7703C93v28Ev,
};
extern VTBL_ENTRY _ZTI7S7703C9[];
extern  VTBL_ENTRY _ZTV7S7703C9[];
Class_Descriptor cd_S7703C9 = {  "S7703C9", // class name
  bases_S7703C9, 1,
  &(vtc_S7703C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S7703C9),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7703C9),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  S7703C6  : virtual S7703C7 , virtual S7703C9 {
  ::S3052C22_nt s7703c6f0;
  virtual void  v29(); // _ZN7S7703C63v29Ev
  virtual void  v30(); // _ZN7S7703C63v30Ev
  virtual void  v31(); // _ZN7S7703C63v31Ev
  virtual void  v32(); // _ZN7S7703C63v32Ev
  virtual void  v33(); // _ZN7S7703C63v33Ev
  ~S7703C6(); // tgen
  S7703C6(); // tgen
};
//SIG(-1 S7703C6) C1{ VBC2{ v6 v7 v8 FC3{ BC4{ BC5{ v20 v21 v22 v23 v24 v25 Fi} v26} v13 v14 v15 v16 v17 v18 v19}} VBC6{ BC2 v9 v10 v11 v12 Fp Fc} v1 v2 v3 v4 v5 FC7{}}


void  S7703C6 ::v29(){vfunc_called(this, "_ZN7S7703C63v29Ev");}
void  S7703C6 ::v30(){vfunc_called(this, "_ZN7S7703C63v30Ev");}
void  S7703C6 ::v31(){vfunc_called(this, "_ZN7S7703C63v31Ev");}
void  S7703C6 ::v32(){vfunc_called(this, "_ZN7S7703C63v32Ev");}
void  S7703C6 ::v33(){vfunc_called(this, "_ZN7S7703C63v33Ev");}
S7703C6 ::~S7703C6(){ note_dtor("S7703C6", this);} // tgen
S7703C6 ::S7703C6(){ note_ctor("S7703C6", this);} // tgen

static void Test_S7703C6()
{
  extern Class_Descriptor cd_S7703C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[11];
    init_test(&cd_S7703C6, buf);
    S7703C6 *dp, &lv = *(dp=new (buf) S7703C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S7703C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7703C6)");
    /*is_ambiguous_... S7703C6::S7703C7 */ AMB_check_base_class_offset(lv, (S7703C7*), ABISELECT(16,8), "S7703C6");
    check_base_class_offset(lv, (S7703C7*)(S7703C9*), ABISELECT(40,20), "S7703C6");
    check_base_class_offset(lv, (S7703C9*), ABISELECT(40,20), "S7703C6");
    check_field_offset(lv, s7703c6f0, ABISELECT(8,4), "S7703C6.s7703c6f0");
    test_class_info(&lv, &cd_S7703C6);
    dp->~S7703C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7703C6(Test_S7703C6, "S7703C6", ABISELECT(80,40));

#else // __cplusplus

extern void _ZN7S7703C6C1Ev();
extern void _ZN7S7703C6D1Ev();
Name_Map name_map_S7703C6[] = {
  NSPAIR(_ZN7S7703C6C1Ev),
  NSPAIR(_ZN7S7703C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7703C7;
extern VTBL_ENTRY _ZTI7S7703C7[];
extern  VTBL_ENTRY _ZTV7S7703C7[];
extern Class_Descriptor cd_S7703C7;
extern VTBL_ENTRY _ZTI7S7703C7[];
extern  VTBL_ENTRY _ZTV7S7703C7[];
extern Class_Descriptor cd_S7703C9;
extern VTBL_ENTRY _ZTI7S7703C9[];
extern  VTBL_ENTRY _ZTV7S7703C9[];
static Base_Class bases_S7703C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7703C7,    ABISELECT(16,8), //bcp->offset
    9, //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},
  {&cd_S7703C7,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7703C9,    ABISELECT(40,20), //bcp->offset
    17, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7703C6[];
extern void _ZN7S7703C63v29Ev();
extern void _ZN7S7703C63v30Ev();
extern void _ZN7S7703C63v31Ev();
extern void _ZN7S7703C63v32Ev();
extern void _ZN7S7703C63v33Ev();
extern void _ZN7S7703C73v22Ev();
extern void _ZN7S7703C73v23Ev();
extern void _ZN7S7703C73v24Ev();
extern void _ZN7S7703C73v22Ev();
extern void _ZN7S7703C73v23Ev();
extern void _ZN7S7703C73v24Ev();
extern void _ZN7S7703C93v25Ev();
extern void _ZN7S7703C93v26Ev();
extern void _ZN7S7703C93v27Ev();
extern void _ZN7S7703C93v28Ev();
static  VTBL_ENTRY vtc_S7703C6[] = {
  ABISELECT(40,20),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7703C6[0]),
  (VTBL_ENTRY)&_ZN7S7703C63v29Ev,
  (VTBL_ENTRY)&_ZN7S7703C63v30Ev,
  (VTBL_ENTRY)&_ZN7S7703C63v31Ev,
  (VTBL_ENTRY)&_ZN7S7703C63v32Ev,
  (VTBL_ENTRY)&_ZN7S7703C63v33Ev,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7703C6[0]),
  (VTBL_ENTRY)&_ZN7S7703C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7703C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7703C73v24Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7703C6[0]),
  (VTBL_ENTRY)&_ZN7S7703C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7703C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7703C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7703C93v25Ev,
  (VTBL_ENTRY)&_ZN7S7703C93v26Ev,
  (VTBL_ENTRY)&_ZN7S7703C93v27Ev,
  (VTBL_ENTRY)&_ZN7S7703C93v28Ev,
};
extern VTBL_ENTRY _ZTV7S7703C6[];
static  VTT_ENTRY vtt_S7703C6[] = {
  {&(_ZTV7S7703C6[4]),  4,33},
  {&(_ZTV7S7703C6[14]),  14,33},
  {&(_ZTV7S7703C6[26]),  26,33},
};
extern VTBL_ENTRY _ZTI7S7703C6[];
extern  VTBL_ENTRY _ZTV7S7703C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7703C6[];
Class_Descriptor cd_S7703C6 = {  "S7703C6", // class name
  bases_S7703C6, 3,
  &(vtc_S7703C6[0]), // expected_vtbl_contents
  &(vtt_S7703C6[0]), // expected_vtt_contents
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI7S7703C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7703C6),33, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7703C6),3, //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  S7703C1  : S7703C2 , S7703C6 {
  virtual  ~S7703C1(); // _ZN7S7703C1D2Ev
  virtual void  v1(); // _ZN7S7703C12v1Ev
  S7703C1(); // tgen
};
//SIG(1 S7703C1) C1{ BC2{ VBC3{ VBC4{ BC5{ v2 v3 v4 v5 v6 v7 Fi} v8} vd v9 v10 v11 v12 v13 v14 v15 v16 Fi Fs} v17 v18 v19 v20 v21 Fp[7] Fi} BC6{ VBC7{ v22 v23 v24 FC8{ BC9{ BC10{ v41 v42 v43 v44 v45 v46 Fi} v47} v34 v35 v36 v37 v38 v39 v40}} VBC11{ BC7 v25 v26 v27 v28 Fp Fc} v29 v30 v31 v32 v33 FC12{}} vd v1}


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

static void Test_S7703C1()
{
  extern Class_Descriptor cd_S7703C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,25)];
    init_test(&cd_S7703C1, buf);
    S7703C1 *dp, &lv = *(dp=new (buf) S7703C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,96), "sizeof(S7703C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7703C1)");
    check_base_class_offset(lv, (S7703C5*)(S7703C4*), ABISELECT(104,56), "S7703C1");
    check_base_class_offset(lv, (S7703C4*)(S7703C3*), ABISELECT(104,56), "S7703C1");
    check_base_class_offset(lv, (S7703C3*)(S7703C2*), ABISELECT(88,44), "S7703C1");
    check_base_class_offset(lv, (S7703C2*), 0, "S7703C1");
    /*is_ambiguous_... S7703C6::S7703C7 */ AMB_check_base_class_offset(lv, (S7703C7*)(S7703C6*), ABISELECT(120,64), "S7703C1");
    check_base_class_offset(lv, (S7703C7*)(S7703C9*), ABISELECT(144,76), "S7703C1");
    check_base_class_offset(lv, (S7703C9*)(S7703C6*), ABISELECT(144,76), "S7703C1");
    check_base_class_offset(lv, (S7703C6*), ABISELECT(72,36), "S7703C1");
    test_class_info(&lv, &cd_S7703C1);
    dp->~S7703C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7703C1(Test_S7703C1, "S7703C1", ABISELECT(184,96));

#else // __cplusplus

extern void _ZN7S7703C1C1Ev();
extern void _ZN7S7703C1D2Ev();
Name_Map name_map_S7703C1[] = {
  NSPAIR(_ZN7S7703C1C1Ev),
  NSPAIR(_ZN7S7703C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7703C5;
extern VTBL_ENTRY _ZTI7S7703C5[];
extern  VTBL_ENTRY _ZTV7S7703C5[];
extern Class_Descriptor cd_S7703C4;
extern VTBL_ENTRY _ZTI7S7703C4[];
extern  VTBL_ENTRY _ZTV7S7703C4[];
extern Class_Descriptor cd_S7703C3;
extern VTBL_ENTRY _ZTI7S7703C3[];
extern  VTBL_ENTRY _ZTV7S7703C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7703C3[];
extern Class_Descriptor cd_S7703C2;
extern VTBL_ENTRY _ZTI7S7703C2[];
extern  VTBL_ENTRY _ZTV7S7703C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7703C2[];
extern Class_Descriptor cd_S7703C7;
extern VTBL_ENTRY _ZTI7S7703C7[];
extern  VTBL_ENTRY _ZTV7S7703C7[];
extern Class_Descriptor cd_S7703C7;
extern VTBL_ENTRY _ZTI7S7703C7[];
extern  VTBL_ENTRY _ZTV7S7703C7[];
extern Class_Descriptor cd_S7703C9;
extern VTBL_ENTRY _ZTI7S7703C9[];
extern  VTBL_ENTRY _ZTV7S7703C9[];
extern Class_Descriptor cd_S7703C6;
extern VTBL_ENTRY _ZTI7S7703C6[];
extern  VTBL_ENTRY _ZTV7S7703C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7703C6[];
static Base_Class bases_S7703C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7703C5,    ABISELECT(104,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
  0, 0},
  {&cd_S7703C4,    ABISELECT(104,56), //bcp->offset
    45, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S7703C3,    ABISELECT(88,44), //bcp->offset
    23, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7703C2,    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
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S7703C7,    ABISELECT(120,64), //bcp->offset
    61, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7703C7,    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
    5, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S7703C9,    ABISELECT(144,76), //bcp->offset
    69, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S7703C6,    ABISELECT(72,36), //bcp->offset
    14, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7703C1[];
extern void _ZN7S7703C23v17Ev();
extern void _ZN7S7703C23v18Ev();
extern void _ZN7S7703C23v19Ev();
extern void _ZN7S7703C23v20Ev();
extern void _ZN7S7703C23v21Ev();
extern void _ZN7S7703C1D1Ev();
extern void _ZN7S7703C1D0Ev();
extern void _ZN7S7703C12v1Ev();
extern void _ZN7S7703C63v29Ev();
extern void _ZN7S7703C63v30Ev();
extern void _ZN7S7703C63v31Ev();
extern void _ZN7S7703C63v32Ev();
extern void _ZN7S7703C63v33Ev();
extern void ABISELECT(_ZTv0_n32_N7S7703C1D1Ev,_ZTv0_n16_N7S7703C1D1Ev)();
extern void ABISELECT(_ZThn88_N7S7703C1D1Ev,_ZThn44_N7S7703C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7703C1D0Ev,_ZTv0_n16_N7S7703C1D0Ev)();
extern void ABISELECT(_ZThn88_N7S7703C1D0Ev,_ZThn44_N7S7703C1D0Ev)() __attribute__((weak));
extern void _ZN7S7703C32v9Ev();
extern void _ZN7S7703C33v10Ev();
extern void _ZN7S7703C33v11Ev();
extern void _ZN7S7703C33v12Ev();
extern void _ZN7S7703C33v13Ev();
extern void _ZN7S7703C33v14Ev();
extern void _ZN7S7703C33v15Ev();
extern void _ZN7S7703C33v16Ev();
extern void _ZN7S7703C52v2Ev();
extern void _ZN7S7703C52v3Ev();
extern void _ZN7S7703C52v4Ev();
extern void _ZN7S7703C52v5Ev();
extern void _ZN7S7703C52v6Ev();
extern void _ZN7S7703C52v7Ev();
extern void _ZN7S7703C42v8Ev();
extern void _ZN7S7703C73v22Ev();
extern void _ZN7S7703C73v23Ev();
extern void _ZN7S7703C73v24Ev();
extern void _ZN7S7703C73v22Ev();
extern void _ZN7S7703C73v23Ev();
extern void _ZN7S7703C73v24Ev();
extern void _ZN7S7703C93v25Ev();
extern void _ZN7S7703C93v26Ev();
extern void _ZN7S7703C93v27Ev();
extern void _ZN7S7703C93v28Ev();
static  VTBL_ENTRY vtc_S7703C1[] = {
  ABISELECT(144,76),
  ABISELECT(120,64),
  ABISELECT(104,56),
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7703C1[0]),
  (VTBL_ENTRY)&_ZN7S7703C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7703C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7703C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7703C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7703C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7703C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7703C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7703C12v1Ev,
  ABISELECT(72,40),
  ABISELECT(48,28),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI7S7703C1[0]),
  (VTBL_ENTRY)&_ZN7S7703C63v29Ev,
  (VTBL_ENTRY)&_ZN7S7703C63v30Ev,
  (VTBL_ENTRY)&_ZN7S7703C63v31Ev,
  (VTBL_ENTRY)&_ZN7S7703C63v32Ev,
  (VTBL_ENTRY)&_ZN7S7703C63v33Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(16,12),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI7S7703C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7703C1D1Ev,_ZTv0_n16_N7S7703C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7703C1D0Ev,_ZTv0_n16_N7S7703C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7703C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S7703C1[0]),
  (VTBL_ENTRY)&_ZN7S7703C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7703C42v8Ev,
  0,
  0,
  0,
  ABISELECT(-120,-64),
  (VTBL_ENTRY)&(_ZTI7S7703C1[0]),
  (VTBL_ENTRY)&_ZN7S7703C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7703C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7703C73v24Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-144,-76),
  (VTBL_ENTRY)&(_ZTI7S7703C1[0]),
  (VTBL_ENTRY)&_ZN7S7703C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7703C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7703C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7703C93v25Ev,
  (VTBL_ENTRY)&_ZN7S7703C93v26Ev,
  (VTBL_ENTRY)&_ZN7S7703C93v27Ev,
  (VTBL_ENTRY)&_ZN7S7703C93v28Ev,
};
extern VTBL_ENTRY _ZTV7S7703C1[];
extern void _ZN7S7703C23v17Ev();
extern void _ZN7S7703C23v18Ev();
extern void _ZN7S7703C23v19Ev();
extern void _ZN7S7703C23v20Ev();
extern void _ZN7S7703C23v21Ev();
extern void _ZN7S7703C2D1Ev();
extern void _ZN7S7703C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7703C2__7S7703C1[] = {
  ABISELECT(104,56),
  ABISELECT(88,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S7703C2[0]),
  (VTBL_ENTRY)&_ZN7S7703C23v17Ev,
  (VTBL_ENTRY)&_ZN7S7703C23v18Ev,
  (VTBL_ENTRY)&_ZN7S7703C23v19Ev,
  (VTBL_ENTRY)&_ZN7S7703C23v20Ev,
  (VTBL_ENTRY)&_ZN7S7703C23v21Ev,
  (VTBL_ENTRY)&_ZN7S7703C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7703C2D0Ev,
};
extern void ABISELECT(_ZTv0_n32_N7S7703C2D1Ev,_ZTv0_n16_N7S7703C2D1Ev)();
extern void ABISELECT(_ZThn88_N7S7703C2D1Ev,_ZThn44_N7S7703C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7703C2D0Ev,_ZTv0_n16_N7S7703C2D0Ev)();
extern void ABISELECT(_ZThn88_N7S7703C2D0Ev,_ZThn44_N7S7703C2D0Ev)() __attribute__((weak));
extern void _ZN7S7703C32v9Ev();
extern void _ZN7S7703C33v10Ev();
extern void _ZN7S7703C33v11Ev();
extern void _ZN7S7703C33v12Ev();
extern void _ZN7S7703C33v13Ev();
extern void _ZN7S7703C33v14Ev();
extern void _ZN7S7703C33v15Ev();
extern void _ZN7S7703C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7703C3__7S7703C2__7S7703C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-44),
  ABISELECT(16,12),
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI7S7703C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7703C2D1Ev,_ZTv0_n16_N7S7703C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7703C2D0Ev,_ZTv0_n16_N7S7703C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7703C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v16Ev,
};
extern void _ZN7S7703C52v2Ev();
extern void _ZN7S7703C52v3Ev();
extern void _ZN7S7703C52v4Ev();
extern void _ZN7S7703C52v5Ev();
extern void _ZN7S7703C52v6Ev();
extern void _ZN7S7703C52v7Ev();
extern void _ZN7S7703C42v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7703C4__7S7703C2__7S7703C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-56),
  (VTBL_ENTRY)&(_ZTI7S7703C2[0]),
  (VTBL_ENTRY)&_ZN7S7703C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7703C42v8Ev,
};
extern void _ZN7S7703C63v29Ev();
extern void _ZN7S7703C63v30Ev();
extern void _ZN7S7703C63v31Ev();
extern void _ZN7S7703C63v32Ev();
extern void _ZN7S7703C63v33Ev();
static  VTBL_ENTRY _tg__ZTV7S7703C6__7S7703C1[] = {
  ABISELECT(72,40),
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7703C6[0]),
  (VTBL_ENTRY)&_ZN7S7703C63v29Ev,
  (VTBL_ENTRY)&_ZN7S7703C63v30Ev,
  (VTBL_ENTRY)&_ZN7S7703C63v31Ev,
  (VTBL_ENTRY)&_ZN7S7703C63v32Ev,
  (VTBL_ENTRY)&_ZN7S7703C63v33Ev,
};
extern void _ZN7S7703C73v22Ev();
extern void _ZN7S7703C73v23Ev();
extern void _ZN7S7703C73v24Ev();
static  VTBL_ENTRY _tg__ZTV7S7703C7__7S7703C6__7S7703C1[] = {
  0,
  0,
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7703C6[0]),
  (VTBL_ENTRY)&_ZN7S7703C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7703C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7703C73v24Ev,
};
extern void _ZN7S7703C73v22Ev();
extern void _ZN7S7703C73v23Ev();
extern void _ZN7S7703C73v24Ev();
extern void _ZN7S7703C93v25Ev();
extern void _ZN7S7703C93v26Ev();
extern void _ZN7S7703C93v27Ev();
extern void _ZN7S7703C93v28Ev();
static  VTBL_ENTRY _tg__ZTV7S7703C9__7S7703C6__7S7703C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-40),
  (VTBL_ENTRY)&(_ZTI7S7703C6[0]),
  (VTBL_ENTRY)&_ZN7S7703C73v22Ev,
  (VTBL_ENTRY)&_ZN7S7703C73v23Ev,
  (VTBL_ENTRY)&_ZN7S7703C73v24Ev,
  (VTBL_ENTRY)&_ZN7S7703C93v25Ev,
  (VTBL_ENTRY)&_ZN7S7703C93v26Ev,
  (VTBL_ENTRY)&_ZN7S7703C93v27Ev,
  (VTBL_ENTRY)&_ZN7S7703C93v28Ev,
};
extern void _ZN7S7703C3D1Ev();
extern void _ZN7S7703C3D0Ev();
extern void _ZN7S7703C32v9Ev();
extern void _ZN7S7703C33v10Ev();
extern void _ZN7S7703C33v11Ev();
extern void _ZN7S7703C33v12Ev();
extern void _ZN7S7703C33v13Ev();
extern void _ZN7S7703C33v14Ev();
extern void _ZN7S7703C33v15Ev();
extern void _ZN7S7703C33v16Ev();
static  VTBL_ENTRY _tg__ZTV7S7703C3__7S7703C1[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7703C3[0]),
  (VTBL_ENTRY)&_ZN7S7703C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7703C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7703C32v9Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v10Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v11Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v12Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v13Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v14Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v15Ev,
  (VTBL_ENTRY)&_ZN7S7703C33v16Ev,
};
extern void _ZN7S7703C52v2Ev();
extern void _ZN7S7703C52v3Ev();
extern void _ZN7S7703C52v4Ev();
extern void _ZN7S7703C52v5Ev();
extern void _ZN7S7703C52v6Ev();
extern void _ZN7S7703C52v7Ev();
extern void _ZN7S7703C42v8Ev();
static  VTBL_ENTRY _tg__ZTV7S7703C4__7S7703C3__7S7703C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S7703C3[0]),
  (VTBL_ENTRY)&_ZN7S7703C52v2Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v3Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v4Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v5Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v6Ev,
  (VTBL_ENTRY)&_ZN7S7703C52v7Ev,
  (VTBL_ENTRY)&_ZN7S7703C42v8Ev,
};
static  VTT_ENTRY vtt_S7703C1[] = {
  {&(_ZTV7S7703C1[6]),  6,85},
  {&(_tg__ZTV7S7703C2__7S7703C1[4]),  4,11},
  {&(_tg__ZTV7S7703C3__7S7703C2__7S7703C1[12]),  12,22},
  {&(_tg__ZTV7S7703C4__7S7703C2__7S7703C1[9]),  9,16},
  {&(_tg__ZTV7S7703C6__7S7703C1[4]),  4,9},
  {&(_tg__ZTV7S7703C7__7S7703C6__7S7703C1[5]),  5,8},
  {&(_tg__ZTV7S7703C9__7S7703C6__7S7703C1[9]),  9,16},
  {&(_ZTV7S7703C1[35]),  35,85},
  {&(_ZTV7S7703C1[54]),  54,85},
  {&(_ZTV7S7703C1[18]),  18,85},
  {&(_ZTV7S7703C1[66]),  66,85},
  {&(_ZTV7S7703C1[78]),  78,85},
  {&(_tg__ZTV7S7703C3__7S7703C1[3]),  3,13},
  {&(_tg__ZTV7S7703C4__7S7703C3__7S7703C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI7S7703C1[];
extern  VTBL_ENTRY _ZTV7S7703C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7703C1[];
static VTBL_ENTRY alt_thunk_names185[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7703C2D0Ev,_ZTv0_n16_N7S7703C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7703C2D0Ev,_ZThn44_N7S7703C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7703C2D1Ev,_ZTv0_n16_N7S7703C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7703C2D1Ev,_ZThn44_N7S7703C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7703C1D0Ev,_ZTv0_n16_N7S7703C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7703C1D0Ev,_ZThn44_N7S7703C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7703C1D1Ev,_ZTv0_n16_N7S7703C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7703C1D1Ev,_ZThn44_N7S7703C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7703C1 = {  "S7703C1", // class name
  bases_S7703C1, 8,
  &(vtc_S7703C1[0]), // expected_vtbl_contents
  &(vtt_S7703C1[0]), // expected_vtt_contents
  ABISELECT(184,96), // object size
  NSPAIRA(_ZTI7S7703C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7703C1),85, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7703C1),14, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names185,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5569C5  : virtual S19566C5 , S19566C6 {
  ::S19566C5 s5569c5f0[3];
  int s5569c5f1[4];
  ~S5569C5(); // tgen
  S5569C5(); // tgen
};
//SIG(-1 S5569C5) C1{ VBC2{ m FL Fp FC3{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC3 FC2[3] Fi[4]}


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

static void Test_S5569C5()
{
  extern Class_Descriptor cd_S5569C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(198,243)];
    init_test(&cd_S5569C5, buf);
    S5569C5 *dp, &lv = *(dp=new (buf) S5569C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1576,968), "sizeof(S5569C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5569C5)");
    check_base_class_offset(lv, (S19566C5*), ABISELECT(1216,748), "S5569C5");
    check_base_class_offset(lv, (S19566C6*), ABISELECT(8,4), "S5569C5");
    check_field_offset(lv, s5569c5f0, ABISELECT(120,72), "S5569C5.s5569c5f0");
    check_field_offset(lv, s5569c5f1, ABISELECT(1200,732), "S5569C5.s5569c5f1");
    test_class_info(&lv, &cd_S5569C5);
    dp->~S5569C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5569C5(Test_S5569C5, "S5569C5", ABISELECT(1576,968));

#else // __cplusplus

extern void _ZN7S5569C5C1Ev();
extern void _ZN7S5569C5D1Ev();
Name_Map name_map_S5569C5[] = {
  NSPAIR(_ZN7S5569C5C1Ev),
  NSPAIR(_ZN7S5569C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
static Base_Class bases_S5569C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19566C6,    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 _ZTI7S5569C5[];
static  VTBL_ENTRY vtc_S5569C5[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C5[0]),
};
extern VTBL_ENTRY _ZTV7S5569C5[];
static  VTT_ENTRY vtt_S5569C5[] = {
  {&(_ZTV7S5569C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5569C5[];
extern  VTBL_ENTRY _ZTV7S5569C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C5[];
Class_Descriptor cd_S5569C5 = {  "S5569C5", // class name
  bases_S5569C5, 2,
  &(vtc_S5569C5[0]), // expected_vtbl_contents
  &(vtt_S5569C5[0]), // expected_vtt_contents
  ABISELECT(1576,968), // object size
  NSPAIRA(_ZTI7S5569C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5569C5),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5569C5),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  S5569C4  : S5569C5 , S19566C6 , S19566C5 {
  __tsi64 s5569c4f0[6];
  int s5569c4f1;
  ::S19566C5 s5569c4f2;
  void *s5569c4f3;
  ::S19566C6 s5569c4f4;
  int s5569c4f5;
  void *s5569c4f6[7];
  virtual  ~S5569C4(); // _ZN7S5569C4D2Ev
  S5569C4(); // tgen
};
//SIG(-1 S5569C4) C1{ BC2{ VBC3{ m FL Fp FC4{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC4 FC3[3] Fi[4]} BC4 BC3 vd FL[6] Fi FC3 Fp FC4 Fi Fp[7]}


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

static void Test_S5569C4()
{
  extern Class_Descriptor cd_S5569C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(332,409)];
    init_test(&cd_S5569C4, buf);
    S5569C4 *dp, &lv = *(dp=new (buf) S5569C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(2648,1632), "sizeof(S5569C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5569C4)");
    check_base_class_offset(lv, (S19566C5*)(S5569C5*), ABISELECT(2288,1412), "S5569C4");
    check_base_class_offset(lv, (S19566C6*)(S5569C5*), ABISELECT(8,4), "S5569C4");
    check_base_class_offset(lv, (S5569C5*), 0, "S5569C4");
    /*is_ambiguous_... S5569C4::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*), ABISELECT(1216,748), "S5569C4");
    /*is_ambiguous_... S5569C4::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(1328,816), "S5569C4");
    check_field_offset(lv, s5569c4f0, ABISELECT(1688,1036), "S5569C4.s5569c4f0");
    check_field_offset(lv, s5569c4f1, ABISELECT(1736,1084), "S5569C4.s5569c4f1");
    check_field_offset(lv, s5569c4f2, ABISELECT(1744,1088), "S5569C4.s5569c4f2");
    check_field_offset(lv, s5569c4f3, ABISELECT(2104,1308), "S5569C4.s5569c4f3");
    check_field_offset(lv, s5569c4f4, ABISELECT(2112,1312), "S5569C4.s5569c4f4");
    check_field_offset(lv, s5569c4f5, ABISELECT(2224,1380), "S5569C4.s5569c4f5");
    check_field_offset(lv, s5569c4f6, ABISELECT(2232,1384), "S5569C4.s5569c4f6");
    test_class_info(&lv, &cd_S5569C4);
    dp->~S5569C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5569C4(Test_S5569C4, "S5569C4", ABISELECT(2648,1632));

#else // __cplusplus

extern void _ZN7S5569C4C1Ev();
extern void _ZN7S5569C4D2Ev();
Name_Map name_map_S5569C4[] = {
  NSPAIR(_ZN7S5569C4C1Ev),
  NSPAIR(_ZN7S5569C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S5569C5;
extern VTBL_ENTRY _ZTI7S5569C5[];
extern  VTBL_ENTRY _ZTV7S5569C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
static Base_Class bases_S5569C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    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_S5569C5,    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_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S5569C4[];
extern void _ZN7S5569C4D1Ev();
extern void _ZN7S5569C4D0Ev();
static  VTBL_ENTRY vtc_S5569C4[] = {
  ABISELECT(2288,1412),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C4[0]),
  (VTBL_ENTRY)&_ZN7S5569C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5569C4D0Ev,
};
extern VTBL_ENTRY _ZTV7S5569C4[];
static  VTBL_ENTRY _tg__ZTV7S5569C5__7S5569C4[] = {
  ABISELECT(2288,1412),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C5[0]),
};
static  VTT_ENTRY vtt_S5569C4[] = {
  {&(_ZTV7S5569C4[3]),  3,5},
  {&(_tg__ZTV7S5569C5__7S5569C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5569C4[];
extern  VTBL_ENTRY _ZTV7S5569C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C4[];
Class_Descriptor cd_S5569C4 = {  "S5569C4", // class name
  bases_S5569C4, 5,
  &(vtc_S5569C4[0]), // expected_vtbl_contents
  &(vtt_S5569C4[0]), // expected_vtt_contents
  ABISELECT(2648,1632), // object size
  NSPAIRA(_ZTI7S5569C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5569C4),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5569C4),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  S5569C6  : virtual S5569C5 , S19566C6 , S19566C5 , S5569C4 {
  int s5569c6f0;
  ::S5569C5 s5569c6f1;
  short s5569c6f2;
  void *s5569c6f3;
  int s5569c6f4[5];
  ~S5569C6(); // tgen
  S5569C6(); // tgen
};
//SIG(-1 S5569C6) C1{ VBC2{ VBC3{ m FL Fp FC4{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC4 FC3[3] Fi[4]} BC4 BC3 BC5{ BC2 BC4 BC3 vd FL[6] Fi FC3 Fp FC4 Fi Fp[7]} Fi FC2 Fs Fp Fi[5]}


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

static void Test_S5569C6()
{
  extern Class_Descriptor cd_S5569C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(746,918)];
    init_test(&cd_S5569C6, buf);
    S5569C6 *dp, &lv = *(dp=new (buf) S5569C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(5960,3668), "sizeof(S5569C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5569C6)");
    /*is_ambiguous_... S5569C6::S5569C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S5569C5*), ABISELECT(5600,3448), "S5569C6");
    check_base_class_offset(lv, (S19566C5*)(S5569C5*)(S5569C4*), ABISELECT(5600,3448), "S5569C6");
    /*is_ambiguous_... S5569C6::S5569C5 */ AMB_check_base_class_offset(lv, (S19566C6*)(S5569C5*), ABISELECT(4392,2704), "S5569C6");
    /*is_ambiguous_... S5569C6::S5569C5 */ AMB_check_base_class_offset(lv, (S5569C5*), ABISELECT(4384,2700), "S5569C6");
    /*is_ambiguous_... S5569C6::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*), ABISELECT(2288,1412), "S5569C6");
    /*is_ambiguous_... S5569C6::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(2400,1480), "S5569C6");
    check_base_class_offset(lv, (S19566C6*)(S5569C5*)(S5569C4*), ABISELECT(8,4), "S5569C6");
    check_base_class_offset(lv, (S5569C5*)(S5569C4*), 0, "S5569C6");
    /*is_ambiguous_... S5569C4::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S5569C4*), ABISELECT(1216,748), "S5569C6");
    /*is_ambiguous_... S5569C4::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S5569C4*), ABISELECT(1328,816), "S5569C6");
    check_base_class_offset(lv, (S5569C4*), 0, "S5569C6");
    check_field_offset(lv, s5569c6f0, ABISELECT(2760,1700), "S5569C6.s5569c6f0");
    check_field_offset(lv, s5569c6f1, ABISELECT(2768,1704), "S5569C6.s5569c6f1");
    check_field_offset(lv, s5569c6f2, ABISELECT(4344,2672), "S5569C6.s5569c6f2");
    check_field_offset(lv, s5569c6f3, ABISELECT(4352,2676), "S5569C6.s5569c6f3");
    check_field_offset(lv, s5569c6f4, ABISELECT(4360,2680), "S5569C6.s5569c6f4");
    test_class_info(&lv, &cd_S5569C6);
    dp->~S5569C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5569C6(Test_S5569C6, "S5569C6", ABISELECT(5960,3668));

#else // __cplusplus

extern void _ZN7S5569C6C1Ev();
extern void _ZN7S5569C6D1Ev();
Name_Map name_map_S5569C6[] = {
  NSPAIR(_ZN7S5569C6C1Ev),
  NSPAIR(_ZN7S5569C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S5569C5;
extern VTBL_ENTRY _ZTI7S5569C5[];
extern  VTBL_ENTRY _ZTV7S5569C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S5569C5;
extern VTBL_ENTRY _ZTI7S5569C5[];
extern  VTBL_ENTRY _ZTV7S5569C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S5569C4;
extern VTBL_ENTRY _ZTI7S5569C4[];
extern  VTBL_ENTRY _ZTV7S5569C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C4[];
static Base_Class bases_S5569C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(5600,3448), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(4392,2704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5569C5,    ABISELECT(4384,2700), //bcp->offset
    6, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19566C5,    ABISELECT(2400,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
  1, 0},
  {&cd_S19566C6,    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
    6, //immediately_derived
  0, 0},
  {&cd_S5569C5,    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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5569C4,    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 _ZTI7S5569C6[];
extern void _ZN7S5569C6D1Ev();
extern void _ZN7S5569C6D0Ev();
static  VTBL_ENTRY vtc_S5569C6[] = {
  ABISELECT(4384,2700),
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C6[0]),
  (VTBL_ENTRY)&_ZN7S5569C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5569C6D0Ev,
  ABISELECT(1216,748),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI7S5569C6[0]),
};
extern VTBL_ENTRY _ZTV7S5569C6[];
extern void _ZN7S5569C4D1Ev();
extern void _ZN7S5569C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5569C4__7S5569C6[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C4[0]),
  (VTBL_ENTRY)&_ZN7S5569C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5569C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5569C57S5569C4__A1__7S5569C6[] = {
  ABISELECT(5600,3448),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5569C5__7S5569C6[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C5[0]),
};
static  VTT_ENTRY vtt_S5569C6[] = {
  {&(_ZTV7S5569C6[4]),  4,9},
  {&(_tg__ZTV7S5569C4__7S5569C6[3]),  3,5},
  {&(_tg__ZTV7S5569C57S5569C4__A1__7S5569C6[3]),  3,3},
  {&(_ZTV7S5569C6[9]),  9,9},
  {&(_tg__ZTV7S5569C5__7S5569C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5569C6[];
extern  VTBL_ENTRY _ZTV7S5569C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C6[];
Class_Descriptor cd_S5569C6 = {  "S5569C6", // class name
  bases_S5569C6, 10,
  &(vtc_S5569C6[0]), // expected_vtbl_contents
  &(vtt_S5569C6[0]), // expected_vtt_contents
  ABISELECT(5960,3668), // object size
  NSPAIRA(_ZTI7S5569C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S5569C6),9, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5569C6),5, //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  S5569C7  : S5569C6 , S5569C5 , S5569C4 , S19566C5 {
  ::S3052C22_nt s5569c7f0;
  int s5569c7f1[2];
  long s5569c7f2;
  void *s5569c7f3;
  virtual  ~S5569C7(); // _ZN7S5569C7D2Ev
  virtual void  v2(); // _ZN7S5569C72v2Ev
  S5569C7(); // tgen
};
//SIG(-1 S5569C7) C1{ BC2{ VBC3{ VBC4{ m FL Fp FC5{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp}[3] Fc} BC5 FC4[3] Fi[4]} BC5 BC4 BC6{ BC3 BC5 BC4 vd FL[6] Fi FC4 Fp FC5 Fi Fp[7]} Fi FC3 Fs Fp Fi[5]} BC3 BC6 BC4 vd v1 FC7{} Fi[2] Fl Fp}


 S5569C7 ::~S5569C7(){ note_dtor("S5569C7", this);}
void  S5569C7 ::v2(){vfunc_called(this, "_ZN7S5569C72v2Ev");}
S5569C7 ::S5569C7(){ note_ctor("S5569C7", this);} // tgen

static void Test_S5569C7()
{
  extern Class_Descriptor cd_S5569C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(1233,1518)];
    init_test(&cd_S5569C7, buf);
    S5569C7 *dp, &lv = *(dp=new (buf) S5569C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(9856,6068), "sizeof(S5569C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5569C7)");
    /*is_ambiguous_... S5569C7::S5569C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S5569C5*), ABISELECT(9496,5848), "S5569C7");
    check_base_class_offset(lv, (S19566C5*)(S5569C5*)(S5569C4*)(S5569C6*), ABISELECT(9496,5848), "S5569C7");
    /*is_ambiguous_... S5569C7::S5569C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S5569C5*), ABISELECT(9496,5848), "S5569C7");
    /*is_ambiguous_... S5569C7::S5569C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S5569C5*)(S5569C4*), ABISELECT(9496,5848), "S5569C7");
    /*is_ambiguous_... S5569C7::S5569C5 */ AMB_check_base_class_offset(lv, (S19566C6*)(S5569C5*), ABISELECT(8288,5104), "S5569C7");
    /*is_ambiguous_... S5569C6::S5569C5 */ AMB_check_base_class_offset(lv, (S5569C5*)(S5569C6*), ABISELECT(8280,5100), "S5569C7");
    /*is_ambiguous_... S5569C6::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S5569C6*), ABISELECT(2288,1412), "S5569C7");
    /*is_ambiguous_... S5569C6::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S5569C6*), ABISELECT(2400,1480), "S5569C7");
    check_base_class_offset(lv, (S19566C6*)(S5569C5*)(S5569C4*)(S5569C6*), ABISELECT(8,4), "S5569C7");
    check_base_class_offset(lv, (S5569C5*)(S5569C4*)(S5569C6*), 0, "S5569C7");
    /*is_ambiguous_... S5569C4::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S5569C4*)(S5569C6*), ABISELECT(1216,748), "S5569C7");
    /*is_ambiguous_... S5569C4::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S5569C4*)(S5569C6*), ABISELECT(1328,816), "S5569C7");
    check_base_class_offset(lv, (S5569C4*)(S5569C6*), 0, "S5569C7");
    check_base_class_offset(lv, (S5569C6*), 0, "S5569C7");
    /*is_ambiguous_... S5569C7::S5569C5 */ AMB_check_base_class_offset(lv, (S19566C6*)(S5569C5*), ABISELECT(4392,2704), "S5569C7");
    /*is_ambiguous_... S5569C7::S5569C5 */ AMB_check_base_class_offset(lv, (S5569C5*), ABISELECT(4384,2700), "S5569C7");
    /*is_ambiguous_... S5569C7::S5569C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S5569C5*)(S5569C4*), ABISELECT(5608,3452), "S5569C7");
    /*is_ambiguous_... S5569C7::S5569C4 */ AMB_check_base_class_offset(lv, (S5569C5*)(S5569C4*), ABISELECT(5600,3448), "S5569C7");
    /*is_ambiguous_... S5569C7::S5569C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S5569C4*), ABISELECT(6816,4196), "S5569C7");
    /*is_ambiguous_... S5569C7::S5569C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S5569C4*), ABISELECT(6928,4264), "S5569C7");
    /*is_ambiguous_... S5569C7::S5569C4 */ AMB_check_base_class_offset(lv, (S5569C4*), ABISELECT(5600,3448), "S5569C7");
    /*is_ambiguous_... S5569C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(7888,4860), "S5569C7");
    check_field_offset(lv, s5569c7f0, ABISELECT(8248,5080), "S5569C7.s5569c7f0");
    check_field_offset(lv, s5569c7f1, ABISELECT(8252,5084), "S5569C7.s5569c7f1");
    check_field_offset(lv, s5569c7f2, ABISELECT(8264,5092), "S5569C7.s5569c7f2");
    check_field_offset(lv, s5569c7f3, ABISELECT(8272,5096), "S5569C7.s5569c7f3");
    test_class_info(&lv, &cd_S5569C7);
    dp->~S5569C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5569C7(Test_S5569C7, "S5569C7", ABISELECT(9856,6068));

#else // __cplusplus

extern void _ZN7S5569C7C1Ev();
extern void _ZN7S5569C7D2Ev();
Name_Map name_map_S5569C7[] = {
  NSPAIR(_ZN7S5569C7C1Ev),
  NSPAIR(_ZN7S5569C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S5569C5;
extern VTBL_ENTRY _ZTI7S5569C5[];
extern  VTBL_ENTRY _ZTV7S5569C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S5569C5;
extern VTBL_ENTRY _ZTI7S5569C5[];
extern  VTBL_ENTRY _ZTV7S5569C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S5569C4;
extern VTBL_ENTRY _ZTI7S5569C4[];
extern  VTBL_ENTRY _ZTV7S5569C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C4[];
extern Class_Descriptor cd_S5569C6;
extern VTBL_ENTRY _ZTI7S5569C6[];
extern  VTBL_ENTRY _ZTV7S5569C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C6[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S5569C5;
extern VTBL_ENTRY _ZTI7S5569C5[];
extern  VTBL_ENTRY _ZTV7S5569C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S5569C5;
extern VTBL_ENTRY _ZTI7S5569C5[];
extern  VTBL_ENTRY _ZTV7S5569C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S5569C4;
extern VTBL_ENTRY _ZTI7S5569C4[];
extern  VTBL_ENTRY _ZTV7S5569C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C4[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
static Base_Class bases_S5569C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C5,    ABISELECT(9496,5848), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(8288,5104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5569C5,    ABISELECT(8280,5100), //bcp->offset
    15, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(2400,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
    10, //immediately_derived
  0, 0},
  {&cd_S19566C6,    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
    6, //immediately_derived
  0, 0},
  {&cd_S5569C5,    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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5569C4,    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
    3, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S5569C6,    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_S19566C6,    ABISELECT(4392,2704), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5569C5,    ABISELECT(4384,2700), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19566C6,    ABISELECT(5608,3452), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5569C5,    ABISELECT(5600,3448), //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
    6, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(6816,4196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(6928,4264), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5569C4,    ABISELECT(5600,3448), //bcp->offset
    10, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19566C5,    ABISELECT(7888,4860), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S5569C7[];
extern void _ZN7S5569C7D1Ev();
extern void _ZN7S5569C7D0Ev();
extern void _ZN7S5569C72v2Ev();
extern void ABISELECT(_ZThn5600_N7S5569C7D1Ev,_ZThn3448_N7S5569C7D1Ev)();
extern void ABISELECT(_ZThn5600_N7S5569C7D0Ev,_ZThn3448_N7S5569C7D0Ev)();
static  VTBL_ENTRY vtc_S5569C7[] = {
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C7[0]),
  (VTBL_ENTRY)&_ZN7S5569C7D1Ev,
  (VTBL_ENTRY)&_ZN7S5569C7D0Ev,
  (VTBL_ENTRY)&_ZN7S5569C72v2Ev,
  ABISELECT(5112,3148),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI7S5569C7[0]),
  ABISELECT(3896,2400),
  ABISELECT(-5600,-3448),
  (VTBL_ENTRY)&(_ZTI7S5569C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N7S5569C7D1Ev,_ZThn3448_N7S5569C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N7S5569C7D0Ev,_ZThn3448_N7S5569C7D0Ev),
  ABISELECT(1216,748),
  ABISELECT(-8280,-5100),
  (VTBL_ENTRY)&(_ZTI7S5569C7[0]),
};
extern VTBL_ENTRY _ZTV7S5569C7[];
extern void _ZN7S5569C6D1Ev();
extern void _ZN7S5569C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5569C6__7S5569C7[] = {
  ABISELECT(8280,5100),
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C6[0]),
  (VTBL_ENTRY)&_ZN7S5569C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5569C6D0Ev,
};
extern void _ZN7S5569C4D1Ev();
extern void _ZN7S5569C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5569C47S5569C6__7S5569C7[] = {
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C4[0]),
  (VTBL_ENTRY)&_ZN7S5569C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5569C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5569C57S5569C47S5569C6__A1__7S5569C7[] = {
  ABISELECT(9496,5848),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5569C5__7S5569C6__7S5569C7[] = {
  ABISELECT(1216,748),
  ABISELECT(-8280,-5100),
  (VTBL_ENTRY)&(_ZTI7S5569C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5569C5__A__7S5569C7[] = {
  ABISELECT(5112,3148),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C5[0]),
};
extern void _ZN7S5569C4D1Ev();
extern void _ZN7S5569C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5569C4__A1__7S5569C7[] = {
  ABISELECT(3896,2400),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C4[0]),
  (VTBL_ENTRY)&_ZN7S5569C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5569C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5569C57S5569C4__A3__7S5569C7[] = {
  ABISELECT(3896,2400),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5569C5__7S5569C7[] = {
  ABISELECT(1216,748),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C5[0]),
};
static  VTT_ENTRY vtt_S5569C7[] = {
  {&(_ZTV7S5569C7[4]),  4,18},
  {&(_tg__ZTV7S5569C6__7S5569C7[4]),  4,6},
  {&(_tg__ZTV7S5569C47S5569C6__7S5569C7[3]),  3,5},
  {&(_tg__ZTV7S5569C57S5569C47S5569C6__A1__7S5569C7[3]),  3,3},
  {&(_tg__ZTV7S5569C5__7S5569C6__7S5569C7[3]),  3,3},
  {&(_tg__ZTV7S5569C5__A__7S5569C7[3]),  3,3},
  {&(_tg__ZTV7S5569C4__A1__7S5569C7[3]),  3,5},
  {&(_tg__ZTV7S5569C57S5569C4__A3__7S5569C7[3]),  3,3},
  {&(_ZTV7S5569C7[18]),  18,18},
  {&(_ZTV7S5569C7[10]),  10,18},
  {&(_ZTV7S5569C7[13]),  13,18},
  {&(_tg__ZTV7S5569C5__7S5569C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5569C7[];
extern  VTBL_ENTRY _ZTV7S5569C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C7[];
Class_Descriptor cd_S5569C7 = {  "S5569C7", // class name
  bases_S5569C7, 19,
  &(vtc_S5569C7[0]), // expected_vtbl_contents
  &(vtt_S5569C7[0]), // expected_vtt_contents
  ABISELECT(9856,6068), // object size
  NSPAIRA(_ZTI7S5569C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S5569C7),18, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5569C7),12, //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  S5569C1  : S19566C6 , virtual S19566C5 , S5569C4 , S5569C6 , virtual S5569C7 {
  ::S5569C7 s5569c1f0;
  void *s5569c1f1[5];
  virtual void  v1(); // _ZN7S5569C12v1Ev
  ~S5569C1(); // tgen
  S5569C1(); // tgen
};
//SIG(1 S5569C1) C1{ BC2{ m Fc:0 Fc:1 Fp FL[2] Fp[8] FL Fp} VBC3{ m FL Fp FC2[3] Fc} BC4{ BC5{ VBC3 BC2 FC3[3] Fi[4]} BC2 BC3 vd FL[6] Fi FC3 Fp FC2 Fi Fp[7]} BC6{ VBC5 BC2 BC3 BC4 Fi FC5 Fs Fp Fi[5]} VBC7{ BC6 BC5 BC4 BC3 vd v2 FC8{} Fi[2] Fl Fp} v1 FC7 Fp[5]}


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

static void Test_S5569C1()
{
  extern Class_Descriptor cd_S5569C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3318,4085)];
    init_test(&cd_S5569C1, buf);
    S5569C1 *dp, &lv = *(dp=new (buf) S5569C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(26536,16336), "sizeof(S5569C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5569C1)");
    /*is_ambiguous_... S5569C1::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*), ABISELECT(2288,1412), "S5569C1");
    /*is_ambiguous_... S5569C1::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*), ABISELECT(16680,10268), "S5569C1");
    /*is_ambiguous_... S5569C1::S5569C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S5569C5*)(S5569C4*), ABISELECT(16680,10268), "S5569C1");
    /*is_ambiguous_... S5569C1::S5569C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S5569C5*), ABISELECT(16680,10268), "S5569C1");
    /*is_ambiguous_... S5569C1::S5569C6 */ AMB_check_base_class_offset(lv, (S19566C5*)(S5569C5*)(S5569C4*)(S5569C6*), ABISELECT(16680,10268), "S5569C1");
    check_base_class_offset(lv, (S19566C5*)(S5569C5*)(S5569C4*)(S5569C6*)(S5569C7*), ABISELECT(16680,10268), "S5569C1");
    /*is_ambiguous_... S5569C7::S5569C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S5569C5*)(S5569C7*), ABISELECT(16680,10268), "S5569C1");
    /*is_ambiguous_... S5569C7::S5569C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S5569C5*)(S5569C4*)(S5569C7*), ABISELECT(16680,10268), "S5569C1");
    /*is_ambiguous_... S5569C1::S5569C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S5569C5*)(S5569C4*), ABISELECT(8,4), "S5569C1");
    /*is_ambiguous_... S5569C1::S5569C4 */ AMB_check_base_class_offset(lv, (S5569C5*)(S5569C4*), 0, "S5569C1");
    /*is_ambiguous_... S5569C1::S5569C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S5569C4*), ABISELECT(1216,748), "S5569C1");
    /*is_ambiguous_... S5569C1::S5569C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S5569C4*), ABISELECT(1328,816), "S5569C1");
    /*is_ambiguous_... S5569C1::S5569C4 */ AMB_check_base_class_offset(lv, (S5569C4*), 0, "S5569C1");
    /*is_ambiguous_... S5569C1::S5569C5 */ AMB_check_base_class_offset(lv, (S19566C6*)(S5569C5*), ABISELECT(17048,10492), "S5569C1");
    /*is_ambiguous_... S5569C1::S5569C6 */ AMB_check_base_class_offset(lv, (S5569C5*)(S5569C6*), ABISELECT(17040,10488), "S5569C1");
    /*is_ambiguous_... S5569C6::S5569C5 */ AMB_check_base_class_offset(lv, (S5569C5*)(S5569C6*)(S5569C7*), ABISELECT(17040,10488), "S5569C1");
    /*is_ambiguous_... S5569C1::S5569C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S5569C6*), ABISELECT(4688,2892), "S5569C1");
    /*is_ambiguous_... S5569C1::S5569C6 */ AMB_check_base_class_offset(lv, (S19566C5*)(S5569C6*), ABISELECT(4800,2960), "S5569C1");
    /*is_ambiguous_... S5569C1::S5569C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S5569C5*)(S5569C4*)(S5569C6*), ABISELECT(2408,1484), "S5569C1");
    /*is_ambiguous_... S5569C1::S5569C6 */ AMB_check_base_class_offset(lv, (S5569C5*)(S5569C4*)(S5569C6*), ABISELECT(2400,1480), "S5569C1");
    /*is_ambiguous_... S5569C1::S5569C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S5569C4*)(S5569C6*), ABISELECT(3616,2228), "S5569C1");
    /*is_ambiguous_... S5569C1::S5569C6 */ AMB_check_base_class_offset(lv, (S19566C5*)(S5569C4*)(S5569C6*), ABISELECT(3728,2296), "S5569C1");
    /*is_ambiguous_... S5569C1::S5569C6 */ AMB_check_base_class_offset(lv, (S5569C4*)(S5569C6*), ABISELECT(2400,1480), "S5569C1");
    /*is_ambiguous_... S5569C1::S5569C6 */ AMB_check_base_class_offset(lv, (S5569C6*), ABISELECT(2400,1480), "S5569C1");
    /*is_ambiguous_... S5569C6::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S5569C6*)(S5569C7*), ABISELECT(20544,12648), "S5569C1");
    /*is_ambiguous_... S5569C6::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S5569C6*)(S5569C7*), ABISELECT(20656,12716), "S5569C1");
    check_base_class_offset(lv, (S19566C6*)(S5569C5*)(S5569C4*)(S5569C6*)(S5569C7*), ABISELECT(18264,11240), "S5569C1");
    check_base_class_offset(lv, (S5569C5*)(S5569C4*)(S5569C6*)(S5569C7*), ABISELECT(18256,11236), "S5569C1");
    /*is_ambiguous_... S5569C4::S19566C6 */ AMB_check_base_class_offset(lv, (S19566C6*)(S5569C4*)(S5569C6*)(S5569C7*), ABISELECT(19472,11984), "S5569C1");
    /*is_ambiguous_... S5569C4::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S5569C4*)(S5569C6*)(S5569C7*), ABISELECT(19584,12052), "S5569C1");
    check_base_class_offset(lv, (S5569C4*)(S5569C6*)(S5569C7*), ABISELECT(18256,11236), "S5569C1");
    check_base_class_offset(lv, (S5569C6*)(S5569C7*), ABISELECT(18256,11236), "S5569C1");
    /*is_ambiguous_... S5569C7::S5569C5 */ AMB_check_base_class_offset(lv, (S19566C6*)(S5569C5*)(S5569C7*), ABISELECT(22648,13940), "S5569C1");
    /*is_ambiguous_... S5569C7::S5569C5 */ AMB_check_base_class_offset(lv, (S5569C5*)(S5569C7*), ABISELECT(22640,13936), "S5569C1");
    /*is_ambiguous_... S5569C7::S5569C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S5569C5*)(S5569C4*)(S5569C7*), ABISELECT(23864,14688), "S5569C1");
    /*is_ambiguous_... S5569C7::S5569C4 */ AMB_check_base_class_offset(lv, (S5569C5*)(S5569C4*)(S5569C7*), ABISELECT(23856,14684), "S5569C1");
    /*is_ambiguous_... S5569C7::S5569C4 */ AMB_check_base_class_offset(lv, (S19566C6*)(S5569C4*)(S5569C7*), ABISELECT(25072,15432), "S5569C1");
    /*is_ambiguous_... S5569C7::S5569C4 */ AMB_check_base_class_offset(lv, (S19566C5*)(S5569C4*)(S5569C7*), ABISELECT(25184,15500), "S5569C1");
    /*is_ambiguous_... S5569C7::S5569C4 */ AMB_check_base_class_offset(lv, (S5569C4*)(S5569C7*), ABISELECT(23856,14684), "S5569C1");
    /*is_ambiguous_... S5569C7::S19566C5 */ AMB_check_base_class_offset(lv, (S19566C5*)(S5569C7*), ABISELECT(26144,16096), "S5569C1");
    check_base_class_offset(lv, (S5569C7*), ABISELECT(18256,11236), "S5569C1");
    check_field_offset(lv, s5569c1f0, ABISELECT(6784,4180), "S5569C1.s5569c1f0");
    check_field_offset(lv, s5569c1f1, ABISELECT(16640,10248), "S5569C1.s5569c1f1");
    test_class_info(&lv, &cd_S5569C1);
    dp->~S5569C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5569C1(Test_S5569C1, "S5569C1", ABISELECT(26536,16336));

#else // __cplusplus

extern void _ZN7S5569C1C1Ev();
extern void _ZN7S5569C1D1Ev();
Name_Map name_map_S5569C1[] = {
  NSPAIR(_ZN7S5569C1C1Ev),
  NSPAIR(_ZN7S5569C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S5569C5;
extern VTBL_ENTRY _ZTI7S5569C5[];
extern  VTBL_ENTRY _ZTV7S5569C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S5569C4;
extern VTBL_ENTRY _ZTI7S5569C4[];
extern  VTBL_ENTRY _ZTV7S5569C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C4[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S5569C5;
extern VTBL_ENTRY _ZTI7S5569C5[];
extern  VTBL_ENTRY _ZTV7S5569C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S5569C5;
extern VTBL_ENTRY _ZTI7S5569C5[];
extern  VTBL_ENTRY _ZTV7S5569C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S5569C4;
extern VTBL_ENTRY _ZTI7S5569C4[];
extern  VTBL_ENTRY _ZTV7S5569C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C4[];
extern Class_Descriptor cd_S5569C6;
extern VTBL_ENTRY _ZTI7S5569C6[];
extern  VTBL_ENTRY _ZTV7S5569C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C6[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S5569C5;
extern VTBL_ENTRY _ZTI7S5569C5[];
extern  VTBL_ENTRY _ZTV7S5569C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S5569C4;
extern VTBL_ENTRY _ZTI7S5569C4[];
extern  VTBL_ENTRY _ZTV7S5569C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C4[];
extern Class_Descriptor cd_S5569C6;
extern VTBL_ENTRY _ZTI7S5569C6[];
extern  VTBL_ENTRY _ZTV7S5569C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C6[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S5569C5;
extern VTBL_ENTRY _ZTI7S5569C5[];
extern  VTBL_ENTRY _ZTV7S5569C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S5569C5;
extern VTBL_ENTRY _ZTI7S5569C5[];
extern  VTBL_ENTRY _ZTV7S5569C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C5[];
extern Class_Descriptor cd_S19566C6;
extern VTBL_ENTRY _ZTI8S19566C6[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S5569C4;
extern VTBL_ENTRY _ZTI7S5569C4[];
extern  VTBL_ENTRY _ZTV7S5569C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C4[];
extern Class_Descriptor cd_S19566C5;
extern VTBL_ENTRY _ZTI8S19566C5[];
extern Class_Descriptor cd_S5569C7;
extern VTBL_ENTRY _ZTI7S5569C7[];
extern  VTBL_ENTRY _ZTV7S5569C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C7[];
static Base_Class bases_S5569C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19566C6,    ABISELECT(2288,1412), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S19566C5,    ABISELECT(16680,10268), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19566C6,    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_S5569C5,    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
    6, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(1216,748), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(1328,816), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5569C4,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19566C6,    ABISELECT(17048,10492), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5569C5,    ABISELECT(17040,10488), //bcp->offset
    14, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S19566C6,    ABISELECT(4688,2892), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(4800,2960), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(2408,1484), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5569C5,    ABISELECT(2400,1480), //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
    11, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(3616,2228), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 0},
  {&cd_S19566C5,    ABISELECT(3728,2296), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 0},
  {&cd_S5569C4,    ABISELECT(2400,1480), //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
    16, //immediately_derived
  0, 0},
  {&cd_S5569C6,    ABISELECT(2400,1480), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19566C6,    ABISELECT(20544,12648), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(20656,12716), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C6,    ABISELECT(18264,11240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5569C5,    ABISELECT(18256,11236), //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
    2, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(19472,11984), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(19584,12052), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5569C4,    ABISELECT(18256,11236), //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
    3, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S5569C6,    ABISELECT(18256,11236), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(22648,13940), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5569C5,    ABISELECT(22640,13936), //bcp->offset
    26, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    33, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(23864,14688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5569C5,    ABISELECT(23856,14684), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S19566C6,    ABISELECT(25072,15432), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19566C5,    ABISELECT(25184,15500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5569C4,    ABISELECT(23856,14684), //bcp->offset
    29, //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
    33, //immediately_derived
  0, 0},
  {&cd_S19566C5,    ABISELECT(26144,16096), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5569C7,    ABISELECT(18256,11236), //bcp->offset
    17, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S5569C1[];
extern void _ZN7S5569C1D1Ev();
extern void _ZN7S5569C1D0Ev();
extern void _ZN7S5569C12v1Ev();
extern void ABISELECT(_ZThn2400_N7S5569C1D1Ev,_ZThn1480_N7S5569C1D1Ev)();
extern void ABISELECT(_ZThn2400_N7S5569C1D0Ev,_ZThn1480_N7S5569C1D0Ev)();
extern void ABISELECT(_ZTv0_n40_N7S5569C1D1Ev,_ZTv0_n20_N7S5569C1D1Ev)();
extern void ABISELECT(_ZThn18256_N7S5569C1D1Ev,_ZThn11236_N7S5569C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n40_N7S5569C1D0Ev,_ZTv0_n20_N7S5569C1D0Ev)();
extern void ABISELECT(_ZThn18256_N7S5569C1D0Ev,_ZThn11236_N7S5569C1D0Ev)() __attribute__((weak));
extern void _ZN7S5569C72v2Ev();
extern void ABISELECT(_ZTvn5600_n40_N7S5569C1D1Ev,_ZTvn3448_n20_N7S5569C1D1Ev)();
extern void ABISELECT(_ZTvn5600_n40_N7S5569C1D0Ev,_ZTvn3448_n20_N7S5569C1D0Ev)();
static  VTBL_ENTRY vtc_S5569C1[] = {
  ABISELECT(18256,11236),
  ABISELECT(17040,10488),
  ABISELECT(16680,10268),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C1[0]),
  (VTBL_ENTRY)&_ZN7S5569C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5569C1D0Ev,
  (VTBL_ENTRY)&_ZN7S5569C12v1Ev,
  ABISELECT(14640,9008),
  ABISELECT(14280,8788),
  ABISELECT(-2400,-1480),
  (VTBL_ENTRY)&(_ZTI7S5569C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn2400_N7S5569C1D1Ev,_ZThn1480_N7S5569C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn2400_N7S5569C1D0Ev,_ZThn1480_N7S5569C1D0Ev),
  ABISELECT(-360,-220),
  ABISELECT(-17040,-10488),
  (VTBL_ENTRY)&(_ZTI7S5569C1[0]),
  0,
  ABISELECT(-18256,-11236),
  ABISELECT(-1216,-748),
  ABISELECT(-1576,-968),
  ABISELECT(-18256,-11236),
  (VTBL_ENTRY)&(_ZTI7S5569C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5569C1D1Ev,_ZTv0_n20_N7S5569C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n40_N7S5569C1D0Ev,_ZTv0_n20_N7S5569C1D0Ev),
  (VTBL_ENTRY)&_ZN7S5569C72v2Ev,
  ABISELECT(-5960,-3668),
  ABISELECT(-22640,-13936),
  (VTBL_ENTRY)&(_ZTI7S5569C1[0]),
  ABISELECT(-7176,-4416),
  ABISELECT(-23856,-14684),
  (VTBL_ENTRY)&(_ZTI7S5569C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N7S5569C1D1Ev,_ZTvn3448_n20_N7S5569C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn5600_n40_N7S5569C1D0Ev,_ZTvn3448_n20_N7S5569C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S5569C1[];
extern void _ZN7S5569C4D1Ev();
extern void _ZN7S5569C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5569C4__7S5569C1[] = {
  ABISELECT(16680,10268),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C4[0]),
  (VTBL_ENTRY)&_ZN7S5569C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5569C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5569C57S5569C4__7S5569C1[] = {
  ABISELECT(16680,10268),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C5[0]),
};
extern void _ZN7S5569C6D1Ev();
extern void _ZN7S5569C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5569C6__7S5569C1[] = {
  ABISELECT(14640,9008),
  ABISELECT(14280,8788),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C6[0]),
  (VTBL_ENTRY)&_ZN7S5569C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5569C6D0Ev,
};
extern void _ZN7S5569C4D1Ev();
extern void _ZN7S5569C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5569C47S5569C6__A1__7S5569C1[] = {
  ABISELECT(14280,8788),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C4[0]),
  (VTBL_ENTRY)&_ZN7S5569C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5569C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5569C57S5569C47S5569C6__A2__7S5569C1[] = {
  ABISELECT(14280,8788),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5569C5__7S5569C6__7S5569C1[] = {
  ABISELECT(-360,-220),
  ABISELECT(-14640,-9008),
  (VTBL_ENTRY)&(_ZTI7S5569C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5569C5__A1__7S5569C1[] = {
  ABISELECT(-360,-220),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C5[0]),
};
extern void _ZN7S5569C7D1Ev();
extern void _ZN7S5569C7D0Ev();
extern void _ZN7S5569C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S5569C7__7S5569C1[] = {
  ABISELECT(-1216,-748),
  ABISELECT(-1576,-968),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C7[0]),
  (VTBL_ENTRY)&_ZN7S5569C7D1Ev,
  (VTBL_ENTRY)&_ZN7S5569C7D0Ev,
  (VTBL_ENTRY)&_ZN7S5569C72v2Ev,
};
extern void _ZN7S5569C6D1Ev();
extern void _ZN7S5569C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5569C67S5569C7__A1__7S5569C1[] = {
  ABISELECT(-1216,-748),
  ABISELECT(-1576,-968),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C6[0]),
  (VTBL_ENTRY)&_ZN7S5569C6D1Ev,
  (VTBL_ENTRY)&_ZN7S5569C6D0Ev,
};
extern void _ZN7S5569C4D1Ev();
extern void _ZN7S5569C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5569C47S5569C67S5569C7__A2__7S5569C1[] = {
  ABISELECT(-1576,-968),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C4[0]),
  (VTBL_ENTRY)&_ZN7S5569C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5569C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5569C57S5569C47S5569C67S5569C7__A3__7S5569C1[] = {
  ABISELECT(-1576,-968),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5569C5__7S5569C67S5569C7__A1__7S5569C1[] = {
  ABISELECT(-360,-220),
  ABISELECT(1216,748),
  (VTBL_ENTRY)&(_ZTI7S5569C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5569C57S5569C7__A4__7S5569C1[] = {
  ABISELECT(-5960,-3668),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C5[0]),
};
extern void _ZN7S5569C4D1Ev();
extern void _ZN7S5569C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5569C47S5569C7__A3__7S5569C1[] = {
  ABISELECT(-7176,-4416),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C4[0]),
  (VTBL_ENTRY)&_ZN7S5569C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5569C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5569C57S5569C47S5569C7__A5__7S5569C1[] = {
  ABISELECT(-7176,-4416),
  0,
  (VTBL_ENTRY)&(_ZTI7S5569C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5569C5__7S5569C7__7S5569C1[] = {
  ABISELECT(-360,-220),
  ABISELECT(1216,748),
  (VTBL_ENTRY)&(_ZTI7S5569C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5569C5__A__7S5569C7__7S5569C1[] = {
  ABISELECT(-5960,-3668),
  ABISELECT(-4384,-2700),
  (VTBL_ENTRY)&(_ZTI7S5569C7[0]),
};
extern void ABISELECT(_ZThn5600_N7S5569C7D1Ev,_ZThn3448_N7S5569C7D1Ev)();
extern void ABISELECT(_ZThn5600_N7S5569C7D0Ev,_ZThn3448_N7S5569C7D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S5569C4__A1__7S5569C7__7S5569C1[] = {
  ABISELECT(-7176,-4416),
  ABISELECT(-5600,-3448),
  (VTBL_ENTRY)&(_ZTI7S5569C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N7S5569C7D1Ev,_ZThn3448_N7S5569C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn5600_N7S5569C7D0Ev,_ZThn3448_N7S5569C7D0Ev),
};
static  VTT_ENTRY vtt_S5569C1[] = {
  {&(_ZTV7S5569C1[5]),  5,34},
  {&(_tg__ZTV7S5569C4__7S5569C1[3]),  3,5},
  {&(_tg__ZTV7S5569C57S5569C4__7S5569C1[3]),  3,3},
  {&(_tg__ZTV7S5569C6__7S5569C1[4]),  4,6},
  {&(_tg__ZTV7S5569C47S5569C6__A1__7S5569C1[3]),  3,5},
  {&(_tg__ZTV7S5569C57S5569C47S5569C6__A2__7S5569C1[3]),  3,3},
  {&(_tg__ZTV7S5569C5__7S5569C6__7S5569C1[3]),  3,3},
  {&(_ZTV7S5569C1[12]),  12,34},
  {&(_ZTV7S5569C1[17]),  17,34},
  {&(_ZTV7S5569C1[23]),  23,34},
  {&(_ZTV7S5569C1[29]),  29,34},
  {&(_ZTV7S5569C1[32]),  32,34},
  {&(_tg__ZTV7S5569C5__A1__7S5569C1[3]),  3,3},
  {&(_tg__ZTV7S5569C7__7S5569C1[4]),  4,7},
  {&(_tg__ZTV7S5569C67S5569C7__A1__7S5569C1[4]),  4,6},
  {&(_tg__ZTV7S5569C47S5569C67S5569C7__A2__7S5569C1[3]),  3,5},
  {&(_tg__ZTV7S5569C57S5569C47S5569C67S5569C7__A3__7S5569C1[3]),  3,3},
  {&(_tg__ZTV7S5569C5__7S5569C67S5569C7__A1__7S5569C1[3]),  3,3},
  {&(_tg__ZTV7S5569C57S5569C7__A4__7S5569C1[3]),  3,3},
  {&(_tg__ZTV7S5569C47S5569C7__A3__7S5569C1[3]),  3,5},
  {&(_tg__ZTV7S5569C57S5569C47S5569C7__A5__7S5569C1[3]),  3,3},
  {&(_tg__ZTV7S5569C5__7S5569C7__7S5569C1[3]),  3,3},
  {&(_tg__ZTV7S5569C5__A__7S5569C7__7S5569C1[3]),  3,3},
  {&(_tg__ZTV7S5569C4__A1__7S5569C7__7S5569C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S5569C1[];
extern  VTBL_ENTRY _ZTV7S5569C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5569C1[];
static VTBL_ENTRY alt_thunk_names186[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5569C1D0Ev,_ZTv0_n20_N7S5569C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18256_N7S5569C1D0Ev,_ZThn11236_N7S5569C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n40_N7S5569C1D1Ev,_ZTv0_n20_N7S5569C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn18256_N7S5569C1D1Ev,_ZThn11236_N7S5569C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S5569C1 = {  "S5569C1", // class name
  bases_S5569C1, 34,
  &(vtc_S5569C1[0]), // expected_vtbl_contents
  &(vtt_S5569C1[0]), // expected_vtt_contents
  ABISELECT(26536,16336), // object size
  NSPAIRA(_ZTI7S5569C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S5569C1),34, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5569C1),24, //virtual table table var
  13, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names186,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S599C5  {
  ::S7218C6 s599c5f0;
  virtual void  v5(); // _ZN6S599C52v5Ev
  virtual void  v6(); // _ZN6S599C52v6Ev
  virtual void  v7(); // _ZN6S599C52v7Ev
  ~S599C5(); // tgen
  S599C5(); // tgen
};
//SIG(-1 S599C5) C1{ v1 v2 v3 FC2{ BC3{ BC4{ v11 v12 v13 v14 v15 v16 Fi} v17} v4 v5 v6 v7 v8 v9 v10}}


void  S599C5 ::v5(){vfunc_called(this, "_ZN6S599C52v5Ev");}
void  S599C5 ::v6(){vfunc_called(this, "_ZN6S599C52v6Ev");}
void  S599C5 ::v7(){vfunc_called(this, "_ZN6S599C52v7Ev");}
S599C5 ::~S599C5(){ note_dtor("S599C5", this);} // tgen
S599C5 ::S599C5(){ note_ctor("S599C5", this);} // tgen

static void Test_S599C5()
{
  extern Class_Descriptor cd_S599C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S599C5, buf);
    S599C5 *dp, &lv = *(dp=new (buf) S599C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S599C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S599C5)");
    check_field_offset(lv, s599c5f0, ABISELECT(8,4), "S599C5.s599c5f0");
    test_class_info(&lv, &cd_S599C5);
    dp->~S599C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS599C5(Test_S599C5, "S599C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S599C5C1Ev();
extern void _ZN6S599C5D1Ev();
Name_Map name_map_S599C5[] = {
  NSPAIR(_ZN6S599C5C1Ev),
  NSPAIR(_ZN6S599C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S599C5[];
extern void _ZN6S599C52v5Ev();
extern void _ZN6S599C52v6Ev();
extern void _ZN6S599C52v7Ev();
static  VTBL_ENTRY vtc_S599C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S599C5[0]),
  (VTBL_ENTRY)&_ZN6S599C52v5Ev,
  (VTBL_ENTRY)&_ZN6S599C52v6Ev,
  (VTBL_ENTRY)&_ZN6S599C52v7Ev,
};
extern VTBL_ENTRY _ZTI6S599C5[];
extern  VTBL_ENTRY _ZTV6S599C5[];
Class_Descriptor cd_S599C5 = {  "S599C5", // class name
  0,0,//no base classes
  &(vtc_S599C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S599C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S599C5),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  S599C4  : S599C5 {
  void *s599c4f0;
  char s599c4f1;
  virtual void  v8(); // _ZN6S599C42v8Ev
  virtual void  v9(); // _ZN6S599C42v9Ev
  virtual void  v10(); // _ZN6S599C43v10Ev
  virtual void  v11(); // _ZN6S599C43v11Ev
  ~S599C4(); // tgen
  S599C4(); // tgen
};
//SIG(-1 S599C4) C1{ BC2{ v5 v6 v7 FC3{ BC4{ BC5{ v15 v16 v17 v18 v19 v20 Fi} v21} v8 v9 v10 v11 v12 v13 v14}} v1 v2 v3 v4 Fp Fc}


void  S599C4 ::v8(){vfunc_called(this, "_ZN6S599C42v8Ev");}
void  S599C4 ::v9(){vfunc_called(this, "_ZN6S599C42v9Ev");}
void  S599C4 ::v10(){vfunc_called(this, "_ZN6S599C43v10Ev");}
void  S599C4 ::v11(){vfunc_called(this, "_ZN6S599C43v11Ev");}
S599C4 ::~S599C4(){ note_dtor("S599C4", this);} // tgen
S599C4 ::S599C4(){ note_ctor("S599C4", this);} // tgen

static void Test_S599C4()
{
  extern Class_Descriptor cd_S599C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S599C4, buf);
    S599C4 *dp, &lv = *(dp=new (buf) S599C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S599C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S599C4)");
    check_base_class_offset(lv, (S599C5*), 0, "S599C4");
    check_field_offset(lv, s599c4f0, ABISELECT(24,12), "S599C4.s599c4f0");
    check_field_offset(lv, s599c4f1, ABISELECT(32,16), "S599C4.s599c4f1");
    test_class_info(&lv, &cd_S599C4);
    dp->~S599C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS599C4(Test_S599C4, "S599C4", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN6S599C4C1Ev();
extern void _ZN6S599C4D1Ev();
Name_Map name_map_S599C4[] = {
  NSPAIR(_ZN6S599C4C1Ev),
  NSPAIR(_ZN6S599C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S599C5;
extern VTBL_ENTRY _ZTI6S599C5[];
extern  VTBL_ENTRY _ZTV6S599C5[];
static Base_Class bases_S599C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S599C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S599C4[];
extern void _ZN6S599C52v5Ev();
extern void _ZN6S599C52v6Ev();
extern void _ZN6S599C52v7Ev();
extern void _ZN6S599C42v8Ev();
extern void _ZN6S599C42v9Ev();
extern void _ZN6S599C43v10Ev();
extern void _ZN6S599C43v11Ev();
static  VTBL_ENTRY vtc_S599C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S599C4[0]),
  (VTBL_ENTRY)&_ZN6S599C52v5Ev,
  (VTBL_ENTRY)&_ZN6S599C52v6Ev,
  (VTBL_ENTRY)&_ZN6S599C52v7Ev,
  (VTBL_ENTRY)&_ZN6S599C42v8Ev,
  (VTBL_ENTRY)&_ZN6S599C42v9Ev,
  (VTBL_ENTRY)&_ZN6S599C43v10Ev,
  (VTBL_ENTRY)&_ZN6S599C43v11Ev,
};
extern VTBL_ENTRY _ZTI6S599C4[];
extern  VTBL_ENTRY _ZTV6S599C4[];
Class_Descriptor cd_S599C4 = {  "S599C4", // class name
  bases_S599C4, 1,
  &(vtc_S599C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI6S599C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S599C4),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  S599C8  {
  int s599c8f0;
  virtual void  v12(); // _ZN6S599C83v12Ev
  virtual void  v13(); // _ZN6S599C83v13Ev
  virtual void  v14(); // _ZN6S599C83v14Ev
  virtual void  v15(); // _ZN6S599C83v15Ev
  virtual void  v16(); // _ZN6S599C83v16Ev
  virtual void  v17(); // _ZN6S599C83v17Ev
  ~S599C8(); // tgen
  S599C8(); // tgen
};
//SIG(-1 S599C8) C1{ v1 v2 v3 v4 v5 v6 Fi}


void  S599C8 ::v12(){vfunc_called(this, "_ZN6S599C83v12Ev");}
void  S599C8 ::v13(){vfunc_called(this, "_ZN6S599C83v13Ev");}
void  S599C8 ::v14(){vfunc_called(this, "_ZN6S599C83v14Ev");}
void  S599C8 ::v15(){vfunc_called(this, "_ZN6S599C83v15Ev");}
void  S599C8 ::v16(){vfunc_called(this, "_ZN6S599C83v16Ev");}
void  S599C8 ::v17(){vfunc_called(this, "_ZN6S599C83v17Ev");}
S599C8 ::~S599C8(){ note_dtor("S599C8", this);} // tgen
S599C8 ::S599C8(){ note_ctor("S599C8", this);} // tgen

static void Test_S599C8()
{
  extern Class_Descriptor cd_S599C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S599C8, buf);
    S599C8 *dp, &lv = *(dp=new (buf) S599C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S599C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S599C8)");
    check_field_offset(lv, s599c8f0, ABISELECT(8,4), "S599C8.s599c8f0");
    test_class_info(&lv, &cd_S599C8);
    dp->~S599C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS599C8(Test_S599C8, "S599C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S599C8C1Ev();
extern void _ZN6S599C8D1Ev();
Name_Map name_map_S599C8[] = {
  NSPAIR(_ZN6S599C8C1Ev),
  NSPAIR(_ZN6S599C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S599C8[];
extern void _ZN6S599C83v12Ev();
extern void _ZN6S599C83v13Ev();
extern void _ZN6S599C83v14Ev();
extern void _ZN6S599C83v15Ev();
extern void _ZN6S599C83v16Ev();
extern void _ZN6S599C83v17Ev();
static  VTBL_ENTRY vtc_S599C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S599C8[0]),
  (VTBL_ENTRY)&_ZN6S599C83v12Ev,
  (VTBL_ENTRY)&_ZN6S599C83v13Ev,
  (VTBL_ENTRY)&_ZN6S599C83v14Ev,
  (VTBL_ENTRY)&_ZN6S599C83v15Ev,
  (VTBL_ENTRY)&_ZN6S599C83v16Ev,
  (VTBL_ENTRY)&_ZN6S599C83v17Ev,
};
extern VTBL_ENTRY _ZTI6S599C8[];
extern  VTBL_ENTRY _ZTV6S599C8[];
Class_Descriptor cd_S599C8 = {  "S599C8", // class name
  0,0,//no base classes
  &(vtc_S599C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S599C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S599C8),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  S599C3  : S599C4 , S599C8 {
  void *s599c3f0[2];
  virtual  ~S599C3(); // _ZN6S599C3D1Ev
  virtual void  v18(); // _ZN6S599C33v18Ev
  virtual void  v19(); // _ZN6S599C33v19Ev
  virtual void  v20(); // _ZN6S599C33v20Ev
  virtual void  v21(); // _ZN6S599C33v21Ev
  virtual void  v22(); // _ZN6S599C33v22Ev
  virtual void  v23(); // _ZN6S599C33v23Ev
  virtual void  v24(); // _ZN6S599C33v24Ev
  virtual void  v25(); // _ZN6S599C33v25Ev
  S599C3(); // tgen
};
//SIG(-1 S599C3) C1{ BC2{ BC3{ v9 v10 v11 FC4{ BC5{ BC6{ v29 v30 v31 v32 v33 v34 Fi} v35} v22 v23 v24 v25 v26 v27 v28}} v12 v13 v14 v15 Fp Fc} BC7{ v16 v17 v18 v19 v20 v21 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[2]}


 S599C3 ::~S599C3(){ note_dtor("S599C3", this);}
void  S599C3 ::v18(){vfunc_called(this, "_ZN6S599C33v18Ev");}
void  S599C3 ::v19(){vfunc_called(this, "_ZN6S599C33v19Ev");}
void  S599C3 ::v20(){vfunc_called(this, "_ZN6S599C33v20Ev");}
void  S599C3 ::v21(){vfunc_called(this, "_ZN6S599C33v21Ev");}
void  S599C3 ::v22(){vfunc_called(this, "_ZN6S599C33v22Ev");}
void  S599C3 ::v23(){vfunc_called(this, "_ZN6S599C33v23Ev");}
void  S599C3 ::v24(){vfunc_called(this, "_ZN6S599C33v24Ev");}
void  S599C3 ::v25(){vfunc_called(this, "_ZN6S599C33v25Ev");}
S599C3 ::S599C3(){ note_ctor("S599C3", this);} // tgen

static void Test_S599C3()
{
  extern Class_Descriptor cd_S599C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S599C3, buf);
    S599C3 *dp, &lv = *(dp=new (buf) S599C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S599C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S599C3)");
    check_base_class_offset(lv, (S599C5*)(S599C4*), 0, "S599C3");
    check_base_class_offset(lv, (S599C4*), 0, "S599C3");
    check_base_class_offset(lv, (S599C8*), ABISELECT(40,20), "S599C3");
    check_field_offset(lv, s599c3f0, ABISELECT(56,28), "S599C3.s599c3f0");
    test_class_info(&lv, &cd_S599C3);
    dp->~S599C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS599C3(Test_S599C3, "S599C3", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN6S599C3C1Ev();
extern void _ZN6S599C3D1Ev();
Name_Map name_map_S599C3[] = {
  NSPAIR(_ZN6S599C3C1Ev),
  NSPAIR(_ZN6S599C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S599C5;
extern VTBL_ENTRY _ZTI6S599C5[];
extern  VTBL_ENTRY _ZTV6S599C5[];
extern Class_Descriptor cd_S599C4;
extern VTBL_ENTRY _ZTI6S599C4[];
extern  VTBL_ENTRY _ZTV6S599C4[];
extern Class_Descriptor cd_S599C8;
extern VTBL_ENTRY _ZTI6S599C8[];
extern  VTBL_ENTRY _ZTV6S599C8[];
static Base_Class bases_S599C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S599C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S599C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S599C8,    ABISELECT(40,20), //bcp->offset
    19, //bcp->virtual_function_table_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 _ZTI6S599C3[];
extern void _ZN6S599C52v5Ev();
extern void _ZN6S599C52v6Ev();
extern void _ZN6S599C52v7Ev();
extern void _ZN6S599C42v8Ev();
extern void _ZN6S599C42v9Ev();
extern void _ZN6S599C43v10Ev();
extern void _ZN6S599C43v11Ev();
extern void _ZN6S599C3D1Ev();
extern void _ZN6S599C3D0Ev();
extern void _ZN6S599C33v18Ev();
extern void _ZN6S599C33v19Ev();
extern void _ZN6S599C33v20Ev();
extern void _ZN6S599C33v21Ev();
extern void _ZN6S599C33v22Ev();
extern void _ZN6S599C33v23Ev();
extern void _ZN6S599C33v24Ev();
extern void _ZN6S599C33v25Ev();
extern void _ZN6S599C83v12Ev();
extern void _ZN6S599C83v13Ev();
extern void _ZN6S599C83v14Ev();
extern void _ZN6S599C83v15Ev();
extern void _ZN6S599C83v16Ev();
extern void _ZN6S599C83v17Ev();
static  VTBL_ENTRY vtc_S599C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S599C3[0]),
  (VTBL_ENTRY)&_ZN6S599C52v5Ev,
  (VTBL_ENTRY)&_ZN6S599C52v6Ev,
  (VTBL_ENTRY)&_ZN6S599C52v7Ev,
  (VTBL_ENTRY)&_ZN6S599C42v8Ev,
  (VTBL_ENTRY)&_ZN6S599C42v9Ev,
  (VTBL_ENTRY)&_ZN6S599C43v10Ev,
  (VTBL_ENTRY)&_ZN6S599C43v11Ev,
  (VTBL_ENTRY)&_ZN6S599C3D1Ev,
  (VTBL_ENTRY)&_ZN6S599C3D0Ev,
  (VTBL_ENTRY)&_ZN6S599C33v18Ev,
  (VTBL_ENTRY)&_ZN6S599C33v19Ev,
  (VTBL_ENTRY)&_ZN6S599C33v20Ev,
  (VTBL_ENTRY)&_ZN6S599C33v21Ev,
  (VTBL_ENTRY)&_ZN6S599C33v22Ev,
  (VTBL_ENTRY)&_ZN6S599C33v23Ev,
  (VTBL_ENTRY)&_ZN6S599C33v24Ev,
  (VTBL_ENTRY)&_ZN6S599C33v25Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI6S599C3[0]),
  (VTBL_ENTRY)&_ZN6S599C83v12Ev,
  (VTBL_ENTRY)&_ZN6S599C83v13Ev,
  (VTBL_ENTRY)&_ZN6S599C83v14Ev,
  (VTBL_ENTRY)&_ZN6S599C83v15Ev,
  (VTBL_ENTRY)&_ZN6S599C83v16Ev,
  (VTBL_ENTRY)&_ZN6S599C83v17Ev,
};
extern VTBL_ENTRY _ZTI6S599C3[];
extern  VTBL_ENTRY _ZTV6S599C3[];
Class_Descriptor cd_S599C3 = {  "S599C3", // class name
  bases_S599C3, 3,
  &(vtc_S599C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI6S599C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S599C3),27, //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  S599C2  : S599C3 , virtual S599C4 {
  __tsi64  :0;
  virtual  ~S599C2(); // _ZN6S599C2D2Ev
  virtual void  v26(); // _ZN6S599C23v26Ev
  S599C2(); // tgen
};
//SIG(-1 S599C2) C1{ BC2{ BC3{ BC4{ v2 v3 v4 FC5{ BC6{ BC7{ v30 v31 v32 v33 v34 v35 Fi} v36} v23 v24 v25 v26 v27 v28 v29}} v5 v6 v7 v8 Fp Fc} BC8{ v9 v10 v11 v12 v13 v14 Fi} vd v15 v16 v17 v18 v19 v20 v21 v22 Fp[2]} VBC3 vd v1 FL:0}


 S599C2 ::~S599C2(){ note_dtor("S599C2", this);}
void  S599C2 ::v26(){vfunc_called(this, "_ZN6S599C23v26Ev");}
S599C2 ::S599C2(){ note_ctor("S599C2", this);} // tgen

static void Test_S599C2()
{
  extern Class_Descriptor cd_S599C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,15)];
    init_test(&cd_S599C2, buf);
    S599C2 *dp, &lv = *(dp=new (buf) S599C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S599C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S599C2)");
    check_base_class_offset(lv, (S599C5*)(S599C4*)(S599C3*), 0, "S599C2");
    check_base_class_offset(lv, (S599C4*)(S599C3*), 0, "S599C2");
    check_base_class_offset(lv, (S599C8*)(S599C3*), ABISELECT(40,20), "S599C2");
    check_base_class_offset(lv, (S599C3*), 0, "S599C2");
    /*is_ambiguous_... S599C2::S599C4 */ AMB_check_base_class_offset(lv, (S599C5*)(S599C4*), ABISELECT(72,36), "S599C2");
    /*is_ambiguous_... S599C2::S599C4 */ AMB_check_base_class_offset(lv, (S599C4*), ABISELECT(72,36), "S599C2");
    test_class_info(&lv, &cd_S599C2);
    dp->~S599C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS599C2(Test_S599C2, "S599C2", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN6S599C2C1Ev();
extern void _ZN6S599C2D2Ev();
Name_Map name_map_S599C2[] = {
  NSPAIR(_ZN6S599C2C1Ev),
  NSPAIR(_ZN6S599C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S599C5;
extern VTBL_ENTRY _ZTI6S599C5[];
extern  VTBL_ENTRY _ZTV6S599C5[];
extern Class_Descriptor cd_S599C4;
extern VTBL_ENTRY _ZTI6S599C4[];
extern  VTBL_ENTRY _ZTV6S599C4[];
extern Class_Descriptor cd_S599C8;
extern VTBL_ENTRY _ZTI6S599C8[];
extern  VTBL_ENTRY _ZTV6S599C8[];
extern Class_Descriptor cd_S599C3;
extern VTBL_ENTRY _ZTI6S599C3[];
extern  VTBL_ENTRY _ZTV6S599C3[];
extern Class_Descriptor cd_S599C5;
extern VTBL_ENTRY _ZTI6S599C5[];
extern  VTBL_ENTRY _ZTV6S599C5[];
extern Class_Descriptor cd_S599C4;
extern VTBL_ENTRY _ZTI6S599C4[];
extern  VTBL_ENTRY _ZTV6S599C4[];
static Base_Class bases_S599C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S599C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S599C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S599C8,    ABISELECT(40,20), //bcp->offset
    21, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S599C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S599C5,    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_S599C4,    ABISELECT(72,36), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI6S599C2[];
extern void _ZN6S599C52v5Ev();
extern void _ZN6S599C52v6Ev();
extern void _ZN6S599C52v7Ev();
extern void _ZN6S599C42v8Ev();
extern void _ZN6S599C42v9Ev();
extern void _ZN6S599C43v10Ev();
extern void _ZN6S599C43v11Ev();
extern void _ZN6S599C2D1Ev();
extern void _ZN6S599C2D0Ev();
extern void _ZN6S599C33v18Ev();
extern void _ZN6S599C33v19Ev();
extern void _ZN6S599C33v20Ev();
extern void _ZN6S599C33v21Ev();
extern void _ZN6S599C33v22Ev();
extern void _ZN6S599C33v23Ev();
extern void _ZN6S599C33v24Ev();
extern void _ZN6S599C33v25Ev();
extern void _ZN6S599C23v26Ev();
extern void _ZN6S599C83v12Ev();
extern void _ZN6S599C83v13Ev();
extern void _ZN6S599C83v14Ev();
extern void _ZN6S599C83v15Ev();
extern void _ZN6S599C83v16Ev();
extern void _ZN6S599C83v17Ev();
extern void _ZN6S599C52v5Ev();
extern void _ZN6S599C52v6Ev();
extern void _ZN6S599C52v7Ev();
extern void _ZN6S599C42v8Ev();
extern void _ZN6S599C42v9Ev();
extern void _ZN6S599C43v10Ev();
extern void _ZN6S599C43v11Ev();
static  VTBL_ENTRY vtc_S599C2[] = {
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI6S599C2[0]),
  (VTBL_ENTRY)&_ZN6S599C52v5Ev,
  (VTBL_ENTRY)&_ZN6S599C52v6Ev,
  (VTBL_ENTRY)&_ZN6S599C52v7Ev,
  (VTBL_ENTRY)&_ZN6S599C42v8Ev,
  (VTBL_ENTRY)&_ZN6S599C42v9Ev,
  (VTBL_ENTRY)&_ZN6S599C43v10Ev,
  (VTBL_ENTRY)&_ZN6S599C43v11Ev,
  (VTBL_ENTRY)&_ZN6S599C2D1Ev,
  (VTBL_ENTRY)&_ZN6S599C2D0Ev,
  (VTBL_ENTRY)&_ZN6S599C33v18Ev,
  (VTBL_ENTRY)&_ZN6S599C33v19Ev,
  (VTBL_ENTRY)&_ZN6S599C33v20Ev,
  (VTBL_ENTRY)&_ZN6S599C33v21Ev,
  (VTBL_ENTRY)&_ZN6S599C33v22Ev,
  (VTBL_ENTRY)&_ZN6S599C33v23Ev,
  (VTBL_ENTRY)&_ZN6S599C33v24Ev,
  (VTBL_ENTRY)&_ZN6S599C33v25Ev,
  (VTBL_ENTRY)&_ZN6S599C23v26Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI6S599C2[0]),
  (VTBL_ENTRY)&_ZN6S599C83v12Ev,
  (VTBL_ENTRY)&_ZN6S599C83v13Ev,
  (VTBL_ENTRY)&_ZN6S599C83v14Ev,
  (VTBL_ENTRY)&_ZN6S599C83v15Ev,
  (VTBL_ENTRY)&_ZN6S599C83v16Ev,
  (VTBL_ENTRY)&_ZN6S599C83v17Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI6S599C2[0]),
  (VTBL_ENTRY)&_ZN6S599C52v5Ev,
  (VTBL_ENTRY)&_ZN6S599C52v6Ev,
  (VTBL_ENTRY)&_ZN6S599C52v7Ev,
  (VTBL_ENTRY)&_ZN6S599C42v8Ev,
  (VTBL_ENTRY)&_ZN6S599C42v9Ev,
  (VTBL_ENTRY)&_ZN6S599C43v10Ev,
  (VTBL_ENTRY)&_ZN6S599C43v11Ev,
};
extern VTBL_ENTRY _ZTV6S599C2[];
static  VTT_ENTRY vtt_S599C2[] = {
  {&(_ZTV6S599C2[3]),  3,45},
  {&(_ZTV6S599C2[38]),  38,45},
};
extern VTBL_ENTRY _ZTI6S599C2[];
extern  VTBL_ENTRY _ZTV6S599C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S599C2[];
Class_Descriptor cd_S599C2 = {  "S599C2", // class name
  bases_S599C2, 6,
  &(vtc_S599C2[0]), // expected_vtbl_contents
  &(vtt_S599C2[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI6S599C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S599C2),45, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S599C2),2, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S599C9  {
  int s599c9f0;
  void *s599c9f1;
  virtual void  v27(); // _ZN6S599C93v27Ev
  virtual void  v28(); // _ZN6S599C93v28Ev
  virtual void  v29(); // _ZN6S599C93v29Ev
  virtual void  v30(); // _ZN6S599C93v30Ev
  ~S599C9(); // tgen
  S599C9(); // tgen
};
//SIG(-1 S599C9) C1{ v1 v2 v3 v4 Fi Fp}


void  S599C9 ::v27(){vfunc_called(this, "_ZN6S599C93v27Ev");}
void  S599C9 ::v28(){vfunc_called(this, "_ZN6S599C93v28Ev");}
void  S599C9 ::v29(){vfunc_called(this, "_ZN6S599C93v29Ev");}
void  S599C9 ::v30(){vfunc_called(this, "_ZN6S599C93v30Ev");}
S599C9 ::~S599C9(){ note_dtor("S599C9", this);} // tgen
S599C9 ::S599C9(){ note_ctor("S599C9", this);} // tgen

static void Test_S599C9()
{
  extern Class_Descriptor cd_S599C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S599C9, buf);
    S599C9 *dp, &lv = *(dp=new (buf) S599C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S599C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S599C9)");
    check_field_offset(lv, s599c9f0, ABISELECT(8,4), "S599C9.s599c9f0");
    check_field_offset(lv, s599c9f1, ABISELECT(16,8), "S599C9.s599c9f1");
    test_class_info(&lv, &cd_S599C9);
    dp->~S599C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS599C9(Test_S599C9, "S599C9", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S599C9C1Ev();
extern void _ZN6S599C9D1Ev();
Name_Map name_map_S599C9[] = {
  NSPAIR(_ZN6S599C9C1Ev),
  NSPAIR(_ZN6S599C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S599C9[];
extern void _ZN6S599C93v27Ev();
extern void _ZN6S599C93v28Ev();
extern void _ZN6S599C93v29Ev();
extern void _ZN6S599C93v30Ev();
static  VTBL_ENTRY vtc_S599C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S599C9[0]),
  (VTBL_ENTRY)&_ZN6S599C93v27Ev,
  (VTBL_ENTRY)&_ZN6S599C93v28Ev,
  (VTBL_ENTRY)&_ZN6S599C93v29Ev,
  (VTBL_ENTRY)&_ZN6S599C93v30Ev,
};
extern VTBL_ENTRY _ZTI6S599C9[];
extern  VTBL_ENTRY _ZTV6S599C9[];
Class_Descriptor cd_S599C9 = {  "S599C9", // class name
  0,0,//no base classes
  &(vtc_S599C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S599C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S599C9),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  S599C1  : S599C2 , S599C9 {
  virtual  ~S599C1(); // _ZN6S599C1D2Ev
  virtual void  v1(); // _ZN6S599C12v1Ev
  virtual void  v2(); // _ZN6S599C12v2Ev
  virtual void  v3(); // _ZN6S599C12v3Ev
  virtual void  v4(); // _ZN6S599C12v4Ev
  S599C1(); // tgen
};
//SIG(1 S599C1) C1{ BC2{ BC3{ BC4{ BC5{ v5 v6 v7 FC6{ BC7{ BC8{ v38 v39 v40 v41 v42 v43 Fi} v44} v31 v32 v33 v34 v35 v36 v37}} v8 v9 v10 v11 Fp Fc} BC9{ v12 v13 v14 v15 v16 v17 Fi} vd v18 v19 v20 v21 v22 v23 v24 v25 Fp[2]} VBC4 vd v26 FL:0} BC10{ v27 v28 v29 v30 Fi Fp} vd v1 v2 v3 v4}


 S599C1 ::~S599C1(){ note_dtor("S599C1", this);}
void  S599C1 ::v1(){vfunc_called(this, "_ZN6S599C12v1Ev");}
void  S599C1 ::v2(){vfunc_called(this, "_ZN6S599C12v2Ev");}
void  S599C1 ::v3(){vfunc_called(this, "_ZN6S599C12v3Ev");}
void  S599C1 ::v4(){vfunc_called(this, "_ZN6S599C12v4Ev");}
S599C1 ::S599C1(){ note_ctor("S599C1", this);} // tgen

static void Test_S599C1()
{
  extern Class_Descriptor cd_S599C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,18)];
    init_test(&cd_S599C1, buf);
    S599C1 *dp, &lv = *(dp=new (buf) S599C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,68), "sizeof(S599C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S599C1)");
    check_base_class_offset(lv, (S599C5*)(S599C4*)(S599C3*)(S599C2*), 0, "S599C1");
    check_base_class_offset(lv, (S599C4*)(S599C3*)(S599C2*), 0, "S599C1");
    check_base_class_offset(lv, (S599C8*)(S599C3*)(S599C2*), ABISELECT(40,20), "S599C1");
    check_base_class_offset(lv, (S599C3*)(S599C2*), 0, "S599C1");
    /*is_ambiguous_... S599C1::S599C4 */ AMB_check_base_class_offset(lv, (S599C5*)(S599C4*), ABISELECT(96,48), "S599C1");
    /*is_ambiguous_... S599C2::S599C4 */ AMB_check_base_class_offset(lv, (S599C4*)(S599C2*), ABISELECT(96,48), "S599C1");
    check_base_class_offset(lv, (S599C2*), 0, "S599C1");
    check_base_class_offset(lv, (S599C9*), ABISELECT(72,36), "S599C1");
    test_class_info(&lv, &cd_S599C1);
    dp->~S599C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS599C1(Test_S599C1, "S599C1", ABISELECT(136,68));

#else // __cplusplus

extern void _ZN6S599C1C1Ev();
extern void _ZN6S599C1D2Ev();
Name_Map name_map_S599C1[] = {
  NSPAIR(_ZN6S599C1C1Ev),
  NSPAIR(_ZN6S599C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S599C5;
extern VTBL_ENTRY _ZTI6S599C5[];
extern  VTBL_ENTRY _ZTV6S599C5[];
extern Class_Descriptor cd_S599C4;
extern VTBL_ENTRY _ZTI6S599C4[];
extern  VTBL_ENTRY _ZTV6S599C4[];
extern Class_Descriptor cd_S599C8;
extern VTBL_ENTRY _ZTI6S599C8[];
extern  VTBL_ENTRY _ZTV6S599C8[];
extern Class_Descriptor cd_S599C3;
extern VTBL_ENTRY _ZTI6S599C3[];
extern  VTBL_ENTRY _ZTV6S599C3[];
extern Class_Descriptor cd_S599C5;
extern VTBL_ENTRY _ZTI6S599C5[];
extern  VTBL_ENTRY _ZTV6S599C5[];
extern Class_Descriptor cd_S599C4;
extern VTBL_ENTRY _ZTI6S599C4[];
extern  VTBL_ENTRY _ZTV6S599C4[];
extern Class_Descriptor cd_S599C2;
extern VTBL_ENTRY _ZTI6S599C2[];
extern  VTBL_ENTRY _ZTV6S599C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S599C2[];
extern Class_Descriptor cd_S599C9;
extern VTBL_ENTRY _ZTI6S599C9[];
extern  VTBL_ENTRY _ZTV6S599C9[];
static Base_Class bases_S599C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S599C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S599C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S599C8,    ABISELECT(40,20), //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
    5, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S599C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S599C5,    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
    5, //immediately_derived
  0, 0},
  {&cd_S599C4,    ABISELECT(96,48), //bcp->offset
    39, //bcp->virtual_function_table_offset
    9, //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
    6, //immediately_derived
  0, 1},
  {&cd_S599C2,    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_S599C9,    ABISELECT(72,36), //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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S599C1[];
extern void _ZN6S599C52v5Ev();
extern void _ZN6S599C52v6Ev();
extern void _ZN6S599C52v7Ev();
extern void _ZN6S599C42v8Ev();
extern void _ZN6S599C42v9Ev();
extern void _ZN6S599C43v10Ev();
extern void _ZN6S599C43v11Ev();
extern void _ZN6S599C1D1Ev();
extern void _ZN6S599C1D0Ev();
extern void _ZN6S599C33v18Ev();
extern void _ZN6S599C33v19Ev();
extern void _ZN6S599C33v20Ev();
extern void _ZN6S599C33v21Ev();
extern void _ZN6S599C33v22Ev();
extern void _ZN6S599C33v23Ev();
extern void _ZN6S599C33v24Ev();
extern void _ZN6S599C33v25Ev();
extern void _ZN6S599C23v26Ev();
extern void _ZN6S599C12v1Ev();
extern void _ZN6S599C12v2Ev();
extern void _ZN6S599C12v3Ev();
extern void _ZN6S599C12v4Ev();
extern void _ZN6S599C83v12Ev();
extern void _ZN6S599C83v13Ev();
extern void _ZN6S599C83v14Ev();
extern void _ZN6S599C83v15Ev();
extern void _ZN6S599C83v16Ev();
extern void _ZN6S599C83v17Ev();
extern void _ZN6S599C93v27Ev();
extern void _ZN6S599C93v28Ev();
extern void _ZN6S599C93v29Ev();
extern void _ZN6S599C93v30Ev();
extern void _ZN6S599C52v5Ev();
extern void _ZN6S599C52v6Ev();
extern void _ZN6S599C52v7Ev();
extern void _ZN6S599C42v8Ev();
extern void _ZN6S599C42v9Ev();
extern void _ZN6S599C43v10Ev();
extern void _ZN6S599C43v11Ev();
static  VTBL_ENTRY vtc_S599C1[] = {
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI6S599C1[0]),
  (VTBL_ENTRY)&_ZN6S599C52v5Ev,
  (VTBL_ENTRY)&_ZN6S599C52v6Ev,
  (VTBL_ENTRY)&_ZN6S599C52v7Ev,
  (VTBL_ENTRY)&_ZN6S599C42v8Ev,
  (VTBL_ENTRY)&_ZN6S599C42v9Ev,
  (VTBL_ENTRY)&_ZN6S599C43v10Ev,
  (VTBL_ENTRY)&_ZN6S599C43v11Ev,
  (VTBL_ENTRY)&_ZN6S599C1D1Ev,
  (VTBL_ENTRY)&_ZN6S599C1D0Ev,
  (VTBL_ENTRY)&_ZN6S599C33v18Ev,
  (VTBL_ENTRY)&_ZN6S599C33v19Ev,
  (VTBL_ENTRY)&_ZN6S599C33v20Ev,
  (VTBL_ENTRY)&_ZN6S599C33v21Ev,
  (VTBL_ENTRY)&_ZN6S599C33v22Ev,
  (VTBL_ENTRY)&_ZN6S599C33v23Ev,
  (VTBL_ENTRY)&_ZN6S599C33v24Ev,
  (VTBL_ENTRY)&_ZN6S599C33v25Ev,
  (VTBL_ENTRY)&_ZN6S599C23v26Ev,
  (VTBL_ENTRY)&_ZN6S599C12v1Ev,
  (VTBL_ENTRY)&_ZN6S599C12v2Ev,
  (VTBL_ENTRY)&_ZN6S599C12v3Ev,
  (VTBL_ENTRY)&_ZN6S599C12v4Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI6S599C1[0]),
  (VTBL_ENTRY)&_ZN6S599C83v12Ev,
  (VTBL_ENTRY)&_ZN6S599C83v13Ev,
  (VTBL_ENTRY)&_ZN6S599C83v14Ev,
  (VTBL_ENTRY)&_ZN6S599C83v15Ev,
  (VTBL_ENTRY)&_ZN6S599C83v16Ev,
  (VTBL_ENTRY)&_ZN6S599C83v17Ev,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI6S599C1[0]),
  (VTBL_ENTRY)&_ZN6S599C93v27Ev,
  (VTBL_ENTRY)&_ZN6S599C93v28Ev,
  (VTBL_ENTRY)&_ZN6S599C93v29Ev,
  (VTBL_ENTRY)&_ZN6S599C93v30Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI6S599C1[0]),
  (VTBL_ENTRY)&_ZN6S599C52v5Ev,
  (VTBL_ENTRY)&_ZN6S599C52v6Ev,
  (VTBL_ENTRY)&_ZN6S599C52v7Ev,
  (VTBL_ENTRY)&_ZN6S599C42v8Ev,
  (VTBL_ENTRY)&_ZN6S599C42v9Ev,
  (VTBL_ENTRY)&_ZN6S599C43v10Ev,
  (VTBL_ENTRY)&_ZN6S599C43v11Ev,
};
extern VTBL_ENTRY _ZTV6S599C1[];
extern void _ZN6S599C52v5Ev();
extern void _ZN6S599C52v6Ev();
extern void _ZN6S599C52v7Ev();
extern void _ZN6S599C42v8Ev();
extern void _ZN6S599C42v9Ev();
extern void _ZN6S599C43v10Ev();
extern void _ZN6S599C43v11Ev();
extern void _ZN6S599C2D1Ev();
extern void _ZN6S599C2D0Ev();
extern void _ZN6S599C33v18Ev();
extern void _ZN6S599C33v19Ev();
extern void _ZN6S599C33v20Ev();
extern void _ZN6S599C33v21Ev();
extern void _ZN6S599C33v22Ev();
extern void _ZN6S599C33v23Ev();
extern void _ZN6S599C33v24Ev();
extern void _ZN6S599C33v25Ev();
extern void _ZN6S599C23v26Ev();
static  VTBL_ENTRY _tg__ZTV6S599C2__6S599C1[] = {
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI6S599C2[0]),
  (VTBL_ENTRY)&_ZN6S599C52v5Ev,
  (VTBL_ENTRY)&_ZN6S599C52v6Ev,
  (VTBL_ENTRY)&_ZN6S599C52v7Ev,
  (VTBL_ENTRY)&_ZN6S599C42v8Ev,
  (VTBL_ENTRY)&_ZN6S599C42v9Ev,
  (VTBL_ENTRY)&_ZN6S599C43v10Ev,
  (VTBL_ENTRY)&_ZN6S599C43v11Ev,
  (VTBL_ENTRY)&_ZN6S599C2D1Ev,
  (VTBL_ENTRY)&_ZN6S599C2D0Ev,
  (VTBL_ENTRY)&_ZN6S599C33v18Ev,
  (VTBL_ENTRY)&_ZN6S599C33v19Ev,
  (VTBL_ENTRY)&_ZN6S599C33v20Ev,
  (VTBL_ENTRY)&_ZN6S599C33v21Ev,
  (VTBL_ENTRY)&_ZN6S599C33v22Ev,
  (VTBL_ENTRY)&_ZN6S599C33v23Ev,
  (VTBL_ENTRY)&_ZN6S599C33v24Ev,
  (VTBL_ENTRY)&_ZN6S599C33v25Ev,
  (VTBL_ENTRY)&_ZN6S599C23v26Ev,
};
extern void _ZN6S599C52v5Ev();
extern void _ZN6S599C52v6Ev();
extern void _ZN6S599C52v7Ev();
extern void _ZN6S599C42v8Ev();
extern void _ZN6S599C42v9Ev();
extern void _ZN6S599C43v10Ev();
extern void _ZN6S599C43v11Ev();
static  VTBL_ENTRY _tg__ZTV6S599C4__A1__6S599C2__6S599C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI6S599C2[0]),
  (VTBL_ENTRY)&_ZN6S599C52v5Ev,
  (VTBL_ENTRY)&_ZN6S599C52v6Ev,
  (VTBL_ENTRY)&_ZN6S599C52v7Ev,
  (VTBL_ENTRY)&_ZN6S599C42v8Ev,
  (VTBL_ENTRY)&_ZN6S599C42v9Ev,
  (VTBL_ENTRY)&_ZN6S599C43v10Ev,
  (VTBL_ENTRY)&_ZN6S599C43v11Ev,
};
static  VTT_ENTRY vtt_S599C1[] = {
  {&(_ZTV6S599C1[3]),  3,55},
  {&(_tg__ZTV6S599C2__6S599C1[3]),  3,21},
  {&(_tg__ZTV6S599C4__A1__6S599C2__6S599C1[9]),  9,16},
  {&(_ZTV6S599C1[48]),  48,55},
};
extern VTBL_ENTRY _ZTI6S599C1[];
extern  VTBL_ENTRY _ZTV6S599C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S599C1[];
Class_Descriptor cd_S599C1 = {  "S599C1", // class name
  bases_S599C1, 8,
  &(vtc_S599C1[0]), // expected_vtbl_contents
  &(vtt_S599C1[0]), // expected_vtt_contents
  ABISELECT(136,68), // object size
  NSPAIRA(_ZTI6S599C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S599C1),55, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S599C1),4, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S598C5  {
  ::S7218C6 s598c5f0;
  virtual void  v5(); // _ZN6S598C52v5Ev
  virtual void  v6(); // _ZN6S598C52v6Ev
  virtual void  v7(); // _ZN6S598C52v7Ev
  ~S598C5(); // tgen
  S598C5(); // tgen
};
//SIG(-1 S598C5) C1{ v1 v2 v3 FC2{ BC3{ BC4{ v11 v12 v13 v14 v15 v16 Fi} v17} v4 v5 v6 v7 v8 v9 v10}}


void  S598C5 ::v5(){vfunc_called(this, "_ZN6S598C52v5Ev");}
void  S598C5 ::v6(){vfunc_called(this, "_ZN6S598C52v6Ev");}
void  S598C5 ::v7(){vfunc_called(this, "_ZN6S598C52v7Ev");}
S598C5 ::~S598C5(){ note_dtor("S598C5", this);} // tgen
S598C5 ::S598C5(){ note_ctor("S598C5", this);} // tgen

static void Test_S598C5()
{
  extern Class_Descriptor cd_S598C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S598C5, buf);
    S598C5 *dp, &lv = *(dp=new (buf) S598C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S598C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S598C5)");
    check_field_offset(lv, s598c5f0, ABISELECT(8,4), "S598C5.s598c5f0");
    test_class_info(&lv, &cd_S598C5);
    dp->~S598C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS598C5(Test_S598C5, "S598C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S598C5C1Ev();
extern void _ZN6S598C5D1Ev();
Name_Map name_map_S598C5[] = {
  NSPAIR(_ZN6S598C5C1Ev),
  NSPAIR(_ZN6S598C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S598C5[];
extern void _ZN6S598C52v5Ev();
extern void _ZN6S598C52v6Ev();
extern void _ZN6S598C52v7Ev();
static  VTBL_ENTRY vtc_S598C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S598C5[0]),
  (VTBL_ENTRY)&_ZN6S598C52v5Ev,
  (VTBL_ENTRY)&_ZN6S598C52v6Ev,
  (VTBL_ENTRY)&_ZN6S598C52v7Ev,
};
extern VTBL_ENTRY _ZTI6S598C5[];
extern  VTBL_ENTRY _ZTV6S598C5[];
Class_Descriptor cd_S598C5 = {  "S598C5", // class name
  0,0,//no base classes
  &(vtc_S598C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S598C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S598C5),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  S598C4  : S598C5 {
  void *s598c4f0;
  char s598c4f1;
  virtual void  v8(); // _ZN6S598C42v8Ev
  virtual void  v9(); // _ZN6S598C42v9Ev
  virtual void  v10(); // _ZN6S598C43v10Ev
  virtual void  v11(); // _ZN6S598C43v11Ev
  ~S598C4(); // tgen
  S598C4(); // tgen
};
//SIG(-1 S598C4) C1{ BC2{ v5 v6 v7 FC3{ BC4{ BC5{ v15 v16 v17 v18 v19 v20 Fi} v21} v8 v9 v10 v11 v12 v13 v14}} v1 v2 v3 v4 Fp Fc}


void  S598C4 ::v8(){vfunc_called(this, "_ZN6S598C42v8Ev");}
void  S598C4 ::v9(){vfunc_called(this, "_ZN6S598C42v9Ev");}
void  S598C4 ::v10(){vfunc_called(this, "_ZN6S598C43v10Ev");}
void  S598C4 ::v11(){vfunc_called(this, "_ZN6S598C43v11Ev");}
S598C4 ::~S598C4(){ note_dtor("S598C4", this);} // tgen
S598C4 ::S598C4(){ note_ctor("S598C4", this);} // tgen

static void Test_S598C4()
{
  extern Class_Descriptor cd_S598C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S598C4, buf);
    S598C4 *dp, &lv = *(dp=new (buf) S598C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S598C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S598C4)");
    check_base_class_offset(lv, (S598C5*), 0, "S598C4");
    check_field_offset(lv, s598c4f0, ABISELECT(24,12), "S598C4.s598c4f0");
    check_field_offset(lv, s598c4f1, ABISELECT(32,16), "S598C4.s598c4f1");
    test_class_info(&lv, &cd_S598C4);
    dp->~S598C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS598C4(Test_S598C4, "S598C4", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN6S598C4C1Ev();
extern void _ZN6S598C4D1Ev();
Name_Map name_map_S598C4[] = {
  NSPAIR(_ZN6S598C4C1Ev),
  NSPAIR(_ZN6S598C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S598C5;
extern VTBL_ENTRY _ZTI6S598C5[];
extern  VTBL_ENTRY _ZTV6S598C5[];
static Base_Class bases_S598C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S598C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI6S598C4[];
extern void _ZN6S598C52v5Ev();
extern void _ZN6S598C52v6Ev();
extern void _ZN6S598C52v7Ev();
extern void _ZN6S598C42v8Ev();
extern void _ZN6S598C42v9Ev();
extern void _ZN6S598C43v10Ev();
extern void _ZN6S598C43v11Ev();
static  VTBL_ENTRY vtc_S598C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S598C4[0]),
  (VTBL_ENTRY)&_ZN6S598C52v5Ev,
  (VTBL_ENTRY)&_ZN6S598C52v6Ev,
  (VTBL_ENTRY)&_ZN6S598C52v7Ev,
  (VTBL_ENTRY)&_ZN6S598C42v8Ev,
  (VTBL_ENTRY)&_ZN6S598C42v9Ev,
  (VTBL_ENTRY)&_ZN6S598C43v10Ev,
  (VTBL_ENTRY)&_ZN6S598C43v11Ev,
};
extern VTBL_ENTRY _ZTI6S598C4[];
extern  VTBL_ENTRY _ZTV6S598C4[];
Class_Descriptor cd_S598C4 = {  "S598C4", // class name
  bases_S598C4, 1,
  &(vtc_S598C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI6S598C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV6S598C4),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  S598C8  {
  int s598c8f0;
  virtual void  v12(); // _ZN6S598C83v12Ev
  virtual void  v13(); // _ZN6S598C83v13Ev
  virtual void  v14(); // _ZN6S598C83v14Ev
  virtual void  v15(); // _ZN6S598C83v15Ev
  virtual void  v16(); // _ZN6S598C83v16Ev
  virtual void  v17(); // _ZN6S598C83v17Ev
  ~S598C8(); // tgen
  S598C8(); // tgen
};
//SIG(-1 S598C8) C1{ v1 v2 v3 v4 v5 v6 Fi}


void  S598C8 ::v12(){vfunc_called(this, "_ZN6S598C83v12Ev");}
void  S598C8 ::v13(){vfunc_called(this, "_ZN6S598C83v13Ev");}
void  S598C8 ::v14(){vfunc_called(this, "_ZN6S598C83v14Ev");}
void  S598C8 ::v15(){vfunc_called(this, "_ZN6S598C83v15Ev");}
void  S598C8 ::v16(){vfunc_called(this, "_ZN6S598C83v16Ev");}
void  S598C8 ::v17(){vfunc_called(this, "_ZN6S598C83v17Ev");}
S598C8 ::~S598C8(){ note_dtor("S598C8", this);} // tgen
S598C8 ::S598C8(){ note_ctor("S598C8", this);} // tgen

static void Test_S598C8()
{
  extern Class_Descriptor cd_S598C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S598C8, buf);
    S598C8 *dp, &lv = *(dp=new (buf) S598C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S598C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S598C8)");
    check_field_offset(lv, s598c8f0, ABISELECT(8,4), "S598C8.s598c8f0");
    test_class_info(&lv, &cd_S598C8);
    dp->~S598C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS598C8(Test_S598C8, "S598C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN6S598C8C1Ev();
extern void _ZN6S598C8D1Ev();
Name_Map name_map_S598C8[] = {
  NSPAIR(_ZN6S598C8C1Ev),
  NSPAIR(_ZN6S598C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S598C8[];
extern void _ZN6S598C83v12Ev();
extern void _ZN6S598C83v13Ev();
extern void _ZN6S598C83v14Ev();
extern void _ZN6S598C83v15Ev();
extern void _ZN6S598C83v16Ev();
extern void _ZN6S598C83v17Ev();
static  VTBL_ENTRY vtc_S598C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S598C8[0]),
  (VTBL_ENTRY)&_ZN6S598C83v12Ev,
  (VTBL_ENTRY)&_ZN6S598C83v13Ev,
  (VTBL_ENTRY)&_ZN6S598C83v14Ev,
  (VTBL_ENTRY)&_ZN6S598C83v15Ev,
  (VTBL_ENTRY)&_ZN6S598C83v16Ev,
  (VTBL_ENTRY)&_ZN6S598C83v17Ev,
};
extern VTBL_ENTRY _ZTI6S598C8[];
extern  VTBL_ENTRY _ZTV6S598C8[];
Class_Descriptor cd_S598C8 = {  "S598C8", // class name
  0,0,//no base classes
  &(vtc_S598C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI6S598C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S598C8),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  S598C3  : S598C4 , S598C8 {
  void *s598c3f0[2];
  virtual  ~S598C3(); // _ZN6S598C3D1Ev
  virtual void  v18(); // _ZN6S598C33v18Ev
  virtual void  v19(); // _ZN6S598C33v19Ev
  virtual void  v20(); // _ZN6S598C33v20Ev
  virtual void  v21(); // _ZN6S598C33v21Ev
  virtual void  v22(); // _ZN6S598C33v22Ev
  virtual void  v23(); // _ZN6S598C33v23Ev
  virtual void  v24(); // _ZN6S598C33v24Ev
  virtual void  v25(); // _ZN6S598C33v25Ev
  S598C3(); // tgen
};
//SIG(-1 S598C3) C1{ BC2{ BC3{ v9 v10 v11 FC4{ BC5{ BC6{ v29 v30 v31 v32 v33 v34 Fi} v35} v22 v23 v24 v25 v26 v27 v28}} v12 v13 v14 v15 Fp Fc} BC7{ v16 v17 v18 v19 v20 v21 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[2]}


 S598C3 ::~S598C3(){ note_dtor("S598C3", this);}
void  S598C3 ::v18(){vfunc_called(this, "_ZN6S598C33v18Ev");}
void  S598C3 ::v19(){vfunc_called(this, "_ZN6S598C33v19Ev");}
void  S598C3 ::v20(){vfunc_called(this, "_ZN6S598C33v20Ev");}
void  S598C3 ::v21(){vfunc_called(this, "_ZN6S598C33v21Ev");}
void  S598C3 ::v22(){vfunc_called(this, "_ZN6S598C33v22Ev");}
void  S598C3 ::v23(){vfunc_called(this, "_ZN6S598C33v23Ev");}
void  S598C3 ::v24(){vfunc_called(this, "_ZN6S598C33v24Ev");}
void  S598C3 ::v25(){vfunc_called(this, "_ZN6S598C33v25Ev");}
S598C3 ::S598C3(){ note_ctor("S598C3", this);} // tgen

static void Test_S598C3()
{
  extern Class_Descriptor cd_S598C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S598C3, buf);
    S598C3 *dp, &lv = *(dp=new (buf) S598C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S598C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S598C3)");
    check_base_class_offset(lv, (S598C5*)(S598C4*), 0, "S598C3");
    check_base_class_offset(lv, (S598C4*), 0, "S598C3");
    check_base_class_offset(lv, (S598C8*), ABISELECT(40,20), "S598C3");
    check_field_offset(lv, s598c3f0, ABISELECT(56,28), "S598C3.s598c3f0");
    test_class_info(&lv, &cd_S598C3);
    dp->~S598C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS598C3(Test_S598C3, "S598C3", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN6S598C3C1Ev();
extern void _ZN6S598C3D1Ev();
Name_Map name_map_S598C3[] = {
  NSPAIR(_ZN6S598C3C1Ev),
  NSPAIR(_ZN6S598C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S598C5;
extern VTBL_ENTRY _ZTI6S598C5[];
extern  VTBL_ENTRY _ZTV6S598C5[];
extern Class_Descriptor cd_S598C4;
extern VTBL_ENTRY _ZTI6S598C4[];
extern  VTBL_ENTRY _ZTV6S598C4[];
extern Class_Descriptor cd_S598C8;
extern VTBL_ENTRY _ZTI6S598C8[];
extern  VTBL_ENTRY _ZTV6S598C8[];
static Base_Class bases_S598C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S598C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S598C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S598C8,    ABISELECT(40,20), //bcp->offset
    19, //bcp->virtual_function_table_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 _ZTI6S598C3[];
extern void _ZN6S598C52v5Ev();
extern void _ZN6S598C52v6Ev();
extern void _ZN6S598C52v7Ev();
extern void _ZN6S598C42v8Ev();
extern void _ZN6S598C42v9Ev();
extern void _ZN6S598C43v10Ev();
extern void _ZN6S598C43v11Ev();
extern void _ZN6S598C3D1Ev();
extern void _ZN6S598C3D0Ev();
extern void _ZN6S598C33v18Ev();
extern void _ZN6S598C33v19Ev();
extern void _ZN6S598C33v20Ev();
extern void _ZN6S598C33v21Ev();
extern void _ZN6S598C33v22Ev();
extern void _ZN6S598C33v23Ev();
extern void _ZN6S598C33v24Ev();
extern void _ZN6S598C33v25Ev();
extern void _ZN6S598C83v12Ev();
extern void _ZN6S598C83v13Ev();
extern void _ZN6S598C83v14Ev();
extern void _ZN6S598C83v15Ev();
extern void _ZN6S598C83v16Ev();
extern void _ZN6S598C83v17Ev();
static  VTBL_ENTRY vtc_S598C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S598C3[0]),
  (VTBL_ENTRY)&_ZN6S598C52v5Ev,
  (VTBL_ENTRY)&_ZN6S598C52v6Ev,
  (VTBL_ENTRY)&_ZN6S598C52v7Ev,
  (VTBL_ENTRY)&_ZN6S598C42v8Ev,
  (VTBL_ENTRY)&_ZN6S598C42v9Ev,
  (VTBL_ENTRY)&_ZN6S598C43v10Ev,
  (VTBL_ENTRY)&_ZN6S598C43v11Ev,
  (VTBL_ENTRY)&_ZN6S598C3D1Ev,
  (VTBL_ENTRY)&_ZN6S598C3D0Ev,
  (VTBL_ENTRY)&_ZN6S598C33v18Ev,
  (VTBL_ENTRY)&_ZN6S598C33v19Ev,
  (VTBL_ENTRY)&_ZN6S598C33v20Ev,
  (VTBL_ENTRY)&_ZN6S598C33v21Ev,
  (VTBL_ENTRY)&_ZN6S598C33v22Ev,
  (VTBL_ENTRY)&_ZN6S598C33v23Ev,
  (VTBL_ENTRY)&_ZN6S598C33v24Ev,
  (VTBL_ENTRY)&_ZN6S598C33v25Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI6S598C3[0]),
  (VTBL_ENTRY)&_ZN6S598C83v12Ev,
  (VTBL_ENTRY)&_ZN6S598C83v13Ev,
  (VTBL_ENTRY)&_ZN6S598C83v14Ev,
  (VTBL_ENTRY)&_ZN6S598C83v15Ev,
  (VTBL_ENTRY)&_ZN6S598C83v16Ev,
  (VTBL_ENTRY)&_ZN6S598C83v17Ev,
};
extern VTBL_ENTRY _ZTI6S598C3[];
extern  VTBL_ENTRY _ZTV6S598C3[];
Class_Descriptor cd_S598C3 = {  "S598C3", // class name
  bases_S598C3, 3,
  &(vtc_S598C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI6S598C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S598C3),27, //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  S598C2  : S598C3 , virtual S598C4 {
  int  :0;
  virtual  ~S598C2(); // _ZN6S598C2D2Ev
  virtual void  v26(); // _ZN6S598C23v26Ev
  S598C2(); // tgen
};
//SIG(-1 S598C2) C1{ BC2{ BC3{ BC4{ v2 v3 v4 FC5{ BC6{ BC7{ v30 v31 v32 v33 v34 v35 Fi} v36} v23 v24 v25 v26 v27 v28 v29}} v5 v6 v7 v8 Fp Fc} BC8{ v9 v10 v11 v12 v13 v14 Fi} vd v15 v16 v17 v18 v19 v20 v21 v22 Fp[2]} VBC3 vd v1 Fi:0}


 S598C2 ::~S598C2(){ note_dtor("S598C2", this);}
void  S598C2 ::v26(){vfunc_called(this, "_ZN6S598C23v26Ev");}
S598C2 ::S598C2(){ note_ctor("S598C2", this);} // tgen

static void Test_S598C2()
{
  extern Class_Descriptor cd_S598C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[15];
    init_test(&cd_S598C2, buf);
    S598C2 *dp, &lv = *(dp=new (buf) S598C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S598C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S598C2)");
    check_base_class_offset(lv, (S598C5*)(S598C4*)(S598C3*), 0, "S598C2");
    check_base_class_offset(lv, (S598C4*)(S598C3*), 0, "S598C2");
    check_base_class_offset(lv, (S598C8*)(S598C3*), ABISELECT(40,20), "S598C2");
    check_base_class_offset(lv, (S598C3*), 0, "S598C2");
    /*is_ambiguous_... S598C2::S598C4 */ AMB_check_base_class_offset(lv, (S598C5*)(S598C4*), ABISELECT(72,36), "S598C2");
    /*is_ambiguous_... S598C2::S598C4 */ AMB_check_base_class_offset(lv, (S598C4*), ABISELECT(72,36), "S598C2");
    test_class_info(&lv, &cd_S598C2);
    dp->~S598C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS598C2(Test_S598C2, "S598C2", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN6S598C2C1Ev();
extern void _ZN6S598C2D2Ev();
Name_Map name_map_S598C2[] = {
  NSPAIR(_ZN6S598C2C1Ev),
  NSPAIR(_ZN6S598C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S598C5;
extern VTBL_ENTRY _ZTI6S598C5[];
extern  VTBL_ENTRY _ZTV6S598C5[];
extern Class_Descriptor cd_S598C4;
extern VTBL_ENTRY _ZTI6S598C4[];
extern  VTBL_ENTRY _ZTV6S598C4[];
extern Class_Descriptor cd_S598C8;
extern VTBL_ENTRY _ZTI6S598C8[];
extern  VTBL_ENTRY _ZTV6S598C8[];
extern Class_Descriptor cd_S598C3;
extern VTBL_ENTRY _ZTI6S598C3[];
extern  VTBL_ENTRY _ZTV6S598C3[];
extern Class_Descriptor cd_S598C5;
extern VTBL_ENTRY _ZTI6S598C5[];
extern  VTBL_ENTRY _ZTV6S598C5[];
extern Class_Descriptor cd_S598C4;
extern VTBL_ENTRY _ZTI6S598C4[];
extern  VTBL_ENTRY _ZTV6S598C4[];
static Base_Class bases_S598C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S598C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S598C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S598C8,    ABISELECT(40,20), //bcp->offset
    21, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S598C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S598C5,    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_S598C4,    ABISELECT(72,36), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI6S598C2[];
extern void _ZN6S598C52v5Ev();
extern void _ZN6S598C52v6Ev();
extern void _ZN6S598C52v7Ev();
extern void _ZN6S598C42v8Ev();
extern void _ZN6S598C42v9Ev();
extern void _ZN6S598C43v10Ev();
extern void _ZN6S598C43v11Ev();
extern void _ZN6S598C2D1Ev();
extern void _ZN6S598C2D0Ev();
extern void _ZN6S598C33v18Ev();
extern void _ZN6S598C33v19Ev();
extern void _ZN6S598C33v20Ev();
extern void _ZN6S598C33v21Ev();
extern void _ZN6S598C33v22Ev();
extern void _ZN6S598C33v23Ev();
extern void _ZN6S598C33v24Ev();
extern void _ZN6S598C33v25Ev();
extern void _ZN6S598C23v26Ev();
extern void _ZN6S598C83v12Ev();
extern void _ZN6S598C83v13Ev();
extern void _ZN6S598C83v14Ev();
extern void _ZN6S598C83v15Ev();
extern void _ZN6S598C83v16Ev();
extern void _ZN6S598C83v17Ev();
extern void _ZN6S598C52v5Ev();
extern void _ZN6S598C52v6Ev();
extern void _ZN6S598C52v7Ev();
extern void _ZN6S598C42v8Ev();
extern void _ZN6S598C42v9Ev();
extern void _ZN6S598C43v10Ev();
extern void _ZN6S598C43v11Ev();
static  VTBL_ENTRY vtc_S598C2[] = {
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI6S598C2[0]),
  (VTBL_ENTRY)&_ZN6S598C52v5Ev,
  (VTBL_ENTRY)&_ZN6S598C52v6Ev,
  (VTBL_ENTRY)&_ZN6S598C52v7Ev,
  (VTBL_ENTRY)&_ZN6S598C42v8Ev,
  (VTBL_ENTRY)&_ZN6S598C42v9Ev,
  (VTBL_ENTRY)&_ZN6S598C43v10Ev,
  (VTBL_ENTRY)&_ZN6S598C43v11Ev,
  (VTBL_ENTRY)&_ZN6S598C2D1Ev,
  (VTBL_ENTRY)&_ZN6S598C2D0Ev,
  (VTBL_ENTRY)&_ZN6S598C33v18Ev,
  (VTBL_ENTRY)&_ZN6S598C33v19Ev,
  (VTBL_ENTRY)&_ZN6S598C33v20Ev,
  (VTBL_ENTRY)&_ZN6S598C33v21Ev,
  (VTBL_ENTRY)&_ZN6S598C33v22Ev,
  (VTBL_ENTRY)&_ZN6S598C33v23Ev,
  (VTBL_ENTRY)&_ZN6S598C33v24Ev,
  (VTBL_ENTRY)&_ZN6S598C33v25Ev,
  (VTBL_ENTRY)&_ZN6S598C23v26Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI6S598C2[0]),
  (VTBL_ENTRY)&_ZN6S598C83v12Ev,
  (VTBL_ENTRY)&_ZN6S598C83v13Ev,
  (VTBL_ENTRY)&_ZN6S598C83v14Ev,
  (VTBL_ENTRY)&_ZN6S598C83v15Ev,
  (VTBL_ENTRY)&_ZN6S598C83v16Ev,
  (VTBL_ENTRY)&_ZN6S598C83v17Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI6S598C2[0]),
  (VTBL_ENTRY)&_ZN6S598C52v5Ev,
  (VTBL_ENTRY)&_ZN6S598C52v6Ev,
  (VTBL_ENTRY)&_ZN6S598C52v7Ev,
  (VTBL_ENTRY)&_ZN6S598C42v8Ev,
  (VTBL_ENTRY)&_ZN6S598C42v9Ev,
  (VTBL_ENTRY)&_ZN6S598C43v10Ev,
  (VTBL_ENTRY)&_ZN6S598C43v11Ev,
};
extern VTBL_ENTRY _ZTV6S598C2[];
static  VTT_ENTRY vtt_S598C2[] = {
  {&(_ZTV6S598C2[3]),  3,45},
  {&(_ZTV6S598C2[38]),  38,45},
};
extern VTBL_ENTRY _ZTI6S598C2[];
extern  VTBL_ENTRY _ZTV6S598C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S598C2[];
Class_Descriptor cd_S598C2 = {  "S598C2", // class name
  bases_S598C2, 6,
  &(vtc_S598C2[0]), // expected_vtbl_contents
  &(vtt_S598C2[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI6S598C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S598C2),45, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S598C2),2, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S598C9  {
  int s598c9f0;
  void *s598c9f1;
  virtual void  v27(); // _ZN6S598C93v27Ev
  virtual void  v28(); // _ZN6S598C93v28Ev
  virtual void  v29(); // _ZN6S598C93v29Ev
  virtual void  v30(); // _ZN6S598C93v30Ev
  ~S598C9(); // tgen
  S598C9(); // tgen
};
//SIG(-1 S598C9) C1{ v1 v2 v3 v4 Fi Fp}


void  S598C9 ::v27(){vfunc_called(this, "_ZN6S598C93v27Ev");}
void  S598C9 ::v28(){vfunc_called(this, "_ZN6S598C93v28Ev");}
void  S598C9 ::v29(){vfunc_called(this, "_ZN6S598C93v29Ev");}
void  S598C9 ::v30(){vfunc_called(this, "_ZN6S598C93v30Ev");}
S598C9 ::~S598C9(){ note_dtor("S598C9", this);} // tgen
S598C9 ::S598C9(){ note_ctor("S598C9", this);} // tgen

static void Test_S598C9()
{
  extern Class_Descriptor cd_S598C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S598C9, buf);
    S598C9 *dp, &lv = *(dp=new (buf) S598C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S598C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S598C9)");
    check_field_offset(lv, s598c9f0, ABISELECT(8,4), "S598C9.s598c9f0");
    check_field_offset(lv, s598c9f1, ABISELECT(16,8), "S598C9.s598c9f1");
    test_class_info(&lv, &cd_S598C9);
    dp->~S598C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS598C9(Test_S598C9, "S598C9", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN6S598C9C1Ev();
extern void _ZN6S598C9D1Ev();
Name_Map name_map_S598C9[] = {
  NSPAIR(_ZN6S598C9C1Ev),
  NSPAIR(_ZN6S598C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI6S598C9[];
extern void _ZN6S598C93v27Ev();
extern void _ZN6S598C93v28Ev();
extern void _ZN6S598C93v29Ev();
extern void _ZN6S598C93v30Ev();
static  VTBL_ENTRY vtc_S598C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI6S598C9[0]),
  (VTBL_ENTRY)&_ZN6S598C93v27Ev,
  (VTBL_ENTRY)&_ZN6S598C93v28Ev,
  (VTBL_ENTRY)&_ZN6S598C93v29Ev,
  (VTBL_ENTRY)&_ZN6S598C93v30Ev,
};
extern VTBL_ENTRY _ZTI6S598C9[];
extern  VTBL_ENTRY _ZTV6S598C9[];
Class_Descriptor cd_S598C9 = {  "S598C9", // class name
  0,0,//no base classes
  &(vtc_S598C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI6S598C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV6S598C9),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  S598C1  : S598C2 , S598C9 {
  virtual  ~S598C1(); // _ZN6S598C1D2Ev
  virtual void  v1(); // _ZN6S598C12v1Ev
  virtual void  v2(); // _ZN6S598C12v2Ev
  virtual void  v3(); // _ZN6S598C12v3Ev
  virtual void  v4(); // _ZN6S598C12v4Ev
  S598C1(); // tgen
};
//SIG(1 S598C1) C1{ BC2{ BC3{ BC4{ BC5{ v5 v6 v7 FC6{ BC7{ BC8{ v38 v39 v40 v41 v42 v43 Fi} v44} v31 v32 v33 v34 v35 v36 v37}} v8 v9 v10 v11 Fp Fc} BC9{ v12 v13 v14 v15 v16 v17 Fi} vd v18 v19 v20 v21 v22 v23 v24 v25 Fp[2]} VBC4 vd v26 Fi:0} BC10{ v27 v28 v29 v30 Fi Fp} vd v1 v2 v3 v4}


 S598C1 ::~S598C1(){ note_dtor("S598C1", this);}
void  S598C1 ::v1(){vfunc_called(this, "_ZN6S598C12v1Ev");}
void  S598C1 ::v2(){vfunc_called(this, "_ZN6S598C12v2Ev");}
void  S598C1 ::v3(){vfunc_called(this, "_ZN6S598C12v3Ev");}
void  S598C1 ::v4(){vfunc_called(this, "_ZN6S598C12v4Ev");}
S598C1 ::S598C1(){ note_ctor("S598C1", this);} // tgen

static void Test_S598C1()
{
  extern Class_Descriptor cd_S598C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[18];
    init_test(&cd_S598C1, buf);
    S598C1 *dp, &lv = *(dp=new (buf) S598C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,68), "sizeof(S598C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S598C1)");
    check_base_class_offset(lv, (S598C5*)(S598C4*)(S598C3*)(S598C2*), 0, "S598C1");
    check_base_class_offset(lv, (S598C4*)(S598C3*)(S598C2*), 0, "S598C1");
    check_base_class_offset(lv, (S598C8*)(S598C3*)(S598C2*), ABISELECT(40,20), "S598C1");
    check_base_class_offset(lv, (S598C3*)(S598C2*), 0, "S598C1");
    /*is_ambiguous_... S598C1::S598C4 */ AMB_check_base_class_offset(lv, (S598C5*)(S598C4*), ABISELECT(96,48), "S598C1");
    /*is_ambiguous_... S598C2::S598C4 */ AMB_check_base_class_offset(lv, (S598C4*)(S598C2*), ABISELECT(96,48), "S598C1");
    check_base_class_offset(lv, (S598C2*), 0, "S598C1");
    check_base_class_offset(lv, (S598C9*), ABISELECT(72,36), "S598C1");
    test_class_info(&lv, &cd_S598C1);
    dp->~S598C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS598C1(Test_S598C1, "S598C1", ABISELECT(136,68));

#else // __cplusplus

extern void _ZN6S598C1C1Ev();
extern void _ZN6S598C1D2Ev();
Name_Map name_map_S598C1[] = {
  NSPAIR(_ZN6S598C1C1Ev),
  NSPAIR(_ZN6S598C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S598C5;
extern VTBL_ENTRY _ZTI6S598C5[];
extern  VTBL_ENTRY _ZTV6S598C5[];
extern Class_Descriptor cd_S598C4;
extern VTBL_ENTRY _ZTI6S598C4[];
extern  VTBL_ENTRY _ZTV6S598C4[];
extern Class_Descriptor cd_S598C8;
extern VTBL_ENTRY _ZTI6S598C8[];
extern  VTBL_ENTRY _ZTV6S598C8[];
extern Class_Descriptor cd_S598C3;
extern VTBL_ENTRY _ZTI6S598C3[];
extern  VTBL_ENTRY _ZTV6S598C3[];
extern Class_Descriptor cd_S598C5;
extern VTBL_ENTRY _ZTI6S598C5[];
extern  VTBL_ENTRY _ZTV6S598C5[];
extern Class_Descriptor cd_S598C4;
extern VTBL_ENTRY _ZTI6S598C4[];
extern  VTBL_ENTRY _ZTV6S598C4[];
extern Class_Descriptor cd_S598C2;
extern VTBL_ENTRY _ZTI6S598C2[];
extern  VTBL_ENTRY _ZTV6S598C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S598C2[];
extern Class_Descriptor cd_S598C9;
extern VTBL_ENTRY _ZTI6S598C9[];
extern  VTBL_ENTRY _ZTV6S598C9[];
static Base_Class bases_S598C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S598C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S598C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S598C8,    ABISELECT(40,20), //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
    5, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S598C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S598C5,    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
    5, //immediately_derived
  0, 0},
  {&cd_S598C4,    ABISELECT(96,48), //bcp->offset
    39, //bcp->virtual_function_table_offset
    9, //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
    6, //immediately_derived
  0, 1},
  {&cd_S598C2,    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_S598C9,    ABISELECT(72,36), //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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI6S598C1[];
extern void _ZN6S598C52v5Ev();
extern void _ZN6S598C52v6Ev();
extern void _ZN6S598C52v7Ev();
extern void _ZN6S598C42v8Ev();
extern void _ZN6S598C42v9Ev();
extern void _ZN6S598C43v10Ev();
extern void _ZN6S598C43v11Ev();
extern void _ZN6S598C1D1Ev();
extern void _ZN6S598C1D0Ev();
extern void _ZN6S598C33v18Ev();
extern void _ZN6S598C33v19Ev();
extern void _ZN6S598C33v20Ev();
extern void _ZN6S598C33v21Ev();
extern void _ZN6S598C33v22Ev();
extern void _ZN6S598C33v23Ev();
extern void _ZN6S598C33v24Ev();
extern void _ZN6S598C33v25Ev();
extern void _ZN6S598C23v26Ev();
extern void _ZN6S598C12v1Ev();
extern void _ZN6S598C12v2Ev();
extern void _ZN6S598C12v3Ev();
extern void _ZN6S598C12v4Ev();
extern void _ZN6S598C83v12Ev();
extern void _ZN6S598C83v13Ev();
extern void _ZN6S598C83v14Ev();
extern void _ZN6S598C83v15Ev();
extern void _ZN6S598C83v16Ev();
extern void _ZN6S598C83v17Ev();
extern void _ZN6S598C93v27Ev();
extern void _ZN6S598C93v28Ev();
extern void _ZN6S598C93v29Ev();
extern void _ZN6S598C93v30Ev();
extern void _ZN6S598C52v5Ev();
extern void _ZN6S598C52v6Ev();
extern void _ZN6S598C52v7Ev();
extern void _ZN6S598C42v8Ev();
extern void _ZN6S598C42v9Ev();
extern void _ZN6S598C43v10Ev();
extern void _ZN6S598C43v11Ev();
static  VTBL_ENTRY vtc_S598C1[] = {
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI6S598C1[0]),
  (VTBL_ENTRY)&_ZN6S598C52v5Ev,
  (VTBL_ENTRY)&_ZN6S598C52v6Ev,
  (VTBL_ENTRY)&_ZN6S598C52v7Ev,
  (VTBL_ENTRY)&_ZN6S598C42v8Ev,
  (VTBL_ENTRY)&_ZN6S598C42v9Ev,
  (VTBL_ENTRY)&_ZN6S598C43v10Ev,
  (VTBL_ENTRY)&_ZN6S598C43v11Ev,
  (VTBL_ENTRY)&_ZN6S598C1D1Ev,
  (VTBL_ENTRY)&_ZN6S598C1D0Ev,
  (VTBL_ENTRY)&_ZN6S598C33v18Ev,
  (VTBL_ENTRY)&_ZN6S598C33v19Ev,
  (VTBL_ENTRY)&_ZN6S598C33v20Ev,
  (VTBL_ENTRY)&_ZN6S598C33v21Ev,
  (VTBL_ENTRY)&_ZN6S598C33v22Ev,
  (VTBL_ENTRY)&_ZN6S598C33v23Ev,
  (VTBL_ENTRY)&_ZN6S598C33v24Ev,
  (VTBL_ENTRY)&_ZN6S598C33v25Ev,
  (VTBL_ENTRY)&_ZN6S598C23v26Ev,
  (VTBL_ENTRY)&_ZN6S598C12v1Ev,
  (VTBL_ENTRY)&_ZN6S598C12v2Ev,
  (VTBL_ENTRY)&_ZN6S598C12v3Ev,
  (VTBL_ENTRY)&_ZN6S598C12v4Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI6S598C1[0]),
  (VTBL_ENTRY)&_ZN6S598C83v12Ev,
  (VTBL_ENTRY)&_ZN6S598C83v13Ev,
  (VTBL_ENTRY)&_ZN6S598C83v14Ev,
  (VTBL_ENTRY)&_ZN6S598C83v15Ev,
  (VTBL_ENTRY)&_ZN6S598C83v16Ev,
  (VTBL_ENTRY)&_ZN6S598C83v17Ev,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI6S598C1[0]),
  (VTBL_ENTRY)&_ZN6S598C93v27Ev,
  (VTBL_ENTRY)&_ZN6S598C93v28Ev,
  (VTBL_ENTRY)&_ZN6S598C93v29Ev,
  (VTBL_ENTRY)&_ZN6S598C93v30Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI6S598C1[0]),
  (VTBL_ENTRY)&_ZN6S598C52v5Ev,
  (VTBL_ENTRY)&_ZN6S598C52v6Ev,
  (VTBL_ENTRY)&_ZN6S598C52v7Ev,
  (VTBL_ENTRY)&_ZN6S598C42v8Ev,
  (VTBL_ENTRY)&_ZN6S598C42v9Ev,
  (VTBL_ENTRY)&_ZN6S598C43v10Ev,
  (VTBL_ENTRY)&_ZN6S598C43v11Ev,
};
extern VTBL_ENTRY _ZTV6S598C1[];
extern void _ZN6S598C52v5Ev();
extern void _ZN6S598C52v6Ev();
extern void _ZN6S598C52v7Ev();
extern void _ZN6S598C42v8Ev();
extern void _ZN6S598C42v9Ev();
extern void _ZN6S598C43v10Ev();
extern void _ZN6S598C43v11Ev();
extern void _ZN6S598C2D1Ev();
extern void _ZN6S598C2D0Ev();
extern void _ZN6S598C33v18Ev();
extern void _ZN6S598C33v19Ev();
extern void _ZN6S598C33v20Ev();
extern void _ZN6S598C33v21Ev();
extern void _ZN6S598C33v22Ev();
extern void _ZN6S598C33v23Ev();
extern void _ZN6S598C33v24Ev();
extern void _ZN6S598C33v25Ev();
extern void _ZN6S598C23v26Ev();
static  VTBL_ENTRY _tg__ZTV6S598C2__6S598C1[] = {
  ABISELECT(96,48),
  0,
  (VTBL_ENTRY)&(_ZTI6S598C2[0]),
  (VTBL_ENTRY)&_ZN6S598C52v5Ev,
  (VTBL_ENTRY)&_ZN6S598C52v6Ev,
  (VTBL_ENTRY)&_ZN6S598C52v7Ev,
  (VTBL_ENTRY)&_ZN6S598C42v8Ev,
  (VTBL_ENTRY)&_ZN6S598C42v9Ev,
  (VTBL_ENTRY)&_ZN6S598C43v10Ev,
  (VTBL_ENTRY)&_ZN6S598C43v11Ev,
  (VTBL_ENTRY)&_ZN6S598C2D1Ev,
  (VTBL_ENTRY)&_ZN6S598C2D0Ev,
  (VTBL_ENTRY)&_ZN6S598C33v18Ev,
  (VTBL_ENTRY)&_ZN6S598C33v19Ev,
  (VTBL_ENTRY)&_ZN6S598C33v20Ev,
  (VTBL_ENTRY)&_ZN6S598C33v21Ev,
  (VTBL_ENTRY)&_ZN6S598C33v22Ev,
  (VTBL_ENTRY)&_ZN6S598C33v23Ev,
  (VTBL_ENTRY)&_ZN6S598C33v24Ev,
  (VTBL_ENTRY)&_ZN6S598C33v25Ev,
  (VTBL_ENTRY)&_ZN6S598C23v26Ev,
};
extern void _ZN6S598C52v5Ev();
extern void _ZN6S598C52v6Ev();
extern void _ZN6S598C52v7Ev();
extern void _ZN6S598C42v8Ev();
extern void _ZN6S598C42v9Ev();
extern void _ZN6S598C43v10Ev();
extern void _ZN6S598C43v11Ev();
static  VTBL_ENTRY _tg__ZTV6S598C4__A1__6S598C2__6S598C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-96,-48),
  (VTBL_ENTRY)&(_ZTI6S598C2[0]),
  (VTBL_ENTRY)&_ZN6S598C52v5Ev,
  (VTBL_ENTRY)&_ZN6S598C52v6Ev,
  (VTBL_ENTRY)&_ZN6S598C52v7Ev,
  (VTBL_ENTRY)&_ZN6S598C42v8Ev,
  (VTBL_ENTRY)&_ZN6S598C42v9Ev,
  (VTBL_ENTRY)&_ZN6S598C43v10Ev,
  (VTBL_ENTRY)&_ZN6S598C43v11Ev,
};
static  VTT_ENTRY vtt_S598C1[] = {
  {&(_ZTV6S598C1[3]),  3,55},
  {&(_tg__ZTV6S598C2__6S598C1[3]),  3,21},
  {&(_tg__ZTV6S598C4__A1__6S598C2__6S598C1[9]),  9,16},
  {&(_ZTV6S598C1[48]),  48,55},
};
extern VTBL_ENTRY _ZTI6S598C1[];
extern  VTBL_ENTRY _ZTV6S598C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT6S598C1[];
Class_Descriptor cd_S598C1 = {  "S598C1", // class name
  bases_S598C1, 8,
  &(vtc_S598C1[0]), // expected_vtbl_contents
  &(vtt_S598C1[0]), // expected_vtt_contents
  ABISELECT(136,68), // object size
  NSPAIRA(_ZTI6S598C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV6S598C1),55, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT6S598C1),4, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20427C4  : S20955C5 , S2264C38 {
};
//SIG(-1 S20427C4) C1{ BC2{ m FL Fc:0} BC3{ m}}



static void Test_S20427C4()
{
  extern Class_Descriptor cd_S20427C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2,3)];
    init_test(&cd_S20427C4, buf);
    S20427C4 &lv = *(new (buf) S20427C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S20427C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20427C4)");
    check_base_class_offset(lv, (S20955C5*), 0, "S20427C4");
    check_base_class_offset(lv, (S2264C38*), 0, "S20427C4");
    test_class_info(&lv, &cd_S20427C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20427C4(Test_S20427C4, "S20427C4", 8);

#else // __cplusplus

extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
static Base_Class bases_S20427C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S20427C4[];
Class_Descriptor cd_S20427C4 = {  "S20427C4", // class name
  bases_S20427C4, 2,
  0, // no vftv
  0, //no vtt
  8, // object size
  NSPAIRA(_ZTI8S20427C4),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  S20427C7  : virtual S2264C38 , S20955C5 {
  ~S20427C7(); // tgen
  S20427C7(); // tgen
};
//SIG(-1 S20427C7) C1{ VBC2{ m} BC3{ m FL Fc:0}}


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

static void Test_S20427C7()
{
  extern Class_Descriptor cd_S20427C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20427C7, buf);
    S20427C7 *dp, &lv = *(dp=new (buf) S20427C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20427C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20427C7)");
    check_base_class_offset(lv, (S2264C38*), 0, "S20427C7");
    check_base_class_offset(lv, (S20955C5*), ABISELECT(8,4), "S20427C7");
    test_class_info(&lv, &cd_S20427C7);
    dp->~S20427C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20427C7(Test_S20427C7, "S20427C7", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S20427C7C1Ev();
extern void _ZN8S20427C7D1Ev();
Name_Map name_map_S20427C7[] = {
  NSPAIR(_ZN8S20427C7C1Ev),
  NSPAIR(_ZN8S20427C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
static Base_Class bases_S20427C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20955C5,    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 _ZTI8S20427C7[];
static  VTBL_ENTRY vtc_S20427C7[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C7[0]),
};
extern VTBL_ENTRY _ZTV8S20427C7[];
static  VTT_ENTRY vtt_S20427C7[] = {
  {&(_ZTV8S20427C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20427C7[];
extern  VTBL_ENTRY _ZTV8S20427C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C7[];
Class_Descriptor cd_S20427C7 = {  "S20427C7", // class name
  bases_S20427C7, 2,
  &(vtc_S20427C7[0]), // expected_vtbl_contents
  &(vtt_S20427C7[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S20427C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20427C7),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20427C7),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  S20427C8  : virtual S2264C28 , S20427C4 , virtual S2264C38 {
  int s20427c8f0;
  ~S20427C8(); // tgen
  S20427C8(); // tgen
};
//SIG(-1 S20427C8) C1{ VBC2{ m} BC3{ BC4{ m FL Fc:0} BC5{ m}} VBC5 Fi}


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

static void Test_S20427C8()
{
  extern Class_Descriptor cd_S20427C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20427C8, buf);
    S20427C8 *dp, &lv = *(dp=new (buf) S20427C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20427C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20427C8)");
    check_base_class_offset(lv, (S2264C28*), 0, "S20427C8");
    check_base_class_offset(lv, (S20955C5*)(S20427C4*), ABISELECT(8,4), "S20427C8");
    check_base_class_offset(lv, (S2264C38*)(S20427C4*), ABISELECT(8,4), "S20427C8");
    check_base_class_offset(lv, (S20427C4*), ABISELECT(8,4), "S20427C8");
    /*is_ambiguous_... S20427C8::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), 0, "S20427C8");
    check_field_offset(lv, s20427c8f0, ABISELECT(16,12), "S20427C8.s20427c8f0");
    test_class_info(&lv, &cd_S20427C8);
    dp->~S20427C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20427C8(Test_S20427C8, "S20427C8", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S20427C8C1Ev();
extern void _ZN8S20427C8D1Ev();
Name_Map name_map_S20427C8[] = {
  NSPAIR(_ZN8S20427C8C1Ev),
  NSPAIR(_ZN8S20427C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
static Base_Class bases_S20427C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20955C5,    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_S2264C38,    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_S20427C4,    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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20427C8[];
static  VTBL_ENTRY vtc_S20427C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C8[0]),
};
extern VTBL_ENTRY _ZTV8S20427C8[];
static  VTT_ENTRY vtt_S20427C8[] = {
  {&(_ZTV8S20427C8[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20427C8[];
extern  VTBL_ENTRY _ZTV8S20427C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C8[];
Class_Descriptor cd_S20427C8 = {  "S20427C8", // class name
  bases_S20427C8, 5,
  &(vtc_S20427C8[0]), // expected_vtbl_contents
  &(vtt_S20427C8[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S20427C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20427C8),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20427C8),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  S20427C3  : S20427C4 , S20427C7 , virtual S20427C8 {
  void *s20427c3f0;
  ~S20427C3(); // tgen
  S20427C3(); // tgen
};
//SIG(-1 S20427C3) C1{ BC2{ BC3{ m FL Fc:0} BC4{ m}} BC5{ VBC4 BC3} VBC6{ VBC7{ m} BC2 VBC4 Fi} Fp}


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

static void Test_S20427C3()
{
  extern Class_Descriptor cd_S20427C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S20427C3, buf);
    S20427C3 *dp, &lv = *(dp=new (buf) S20427C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S20427C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20427C3)");
    /*is_ambiguous_... S20427C3::S20427C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20427C4*), ABISELECT(16,12), "S20427C3");
    /*is_ambiguous_... S20427C3::S20427C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C4*), ABISELECT(16,12), "S20427C3");
    /*is_ambiguous_... S20427C3::S20427C4 */ AMB_check_base_class_offset(lv, (S20427C4*), ABISELECT(16,12), "S20427C3");
    check_base_class_offset(lv, (S2264C38*)(S20427C7*), 0, "S20427C3");
    /*is_ambiguous_... S20427C8::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C8*), 0, "S20427C3");
    check_base_class_offset(lv, (S20955C5*)(S20427C7*), ABISELECT(8,4), "S20427C3");
    check_base_class_offset(lv, (S20427C7*), 0, "S20427C3");
    check_base_class_offset(lv, (S2264C28*)(S20427C8*), 0, "S20427C3");
    check_base_class_offset(lv, (S20955C5*)(S20427C4*)(S20427C8*), ABISELECT(40,28), "S20427C3");
    check_base_class_offset(lv, (S2264C38*)(S20427C4*)(S20427C8*), ABISELECT(40,28), "S20427C3");
    check_base_class_offset(lv, (S20427C4*)(S20427C8*), ABISELECT(40,28), "S20427C3");
    check_base_class_offset(lv, (S20427C8*), ABISELECT(32,24), "S20427C3");
    check_field_offset(lv, s20427c3f0, ABISELECT(24,20), "S20427C3.s20427c3f0");
    test_class_info(&lv, &cd_S20427C3);
    dp->~S20427C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20427C3(Test_S20427C3, "S20427C3", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN8S20427C3C1Ev();
extern void _ZN8S20427C3D1Ev();
Name_Map name_map_S20427C3[] = {
  NSPAIR(_ZN8S20427C3C1Ev),
  NSPAIR(_ZN8S20427C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20427C7;
extern VTBL_ENTRY _ZTI8S20427C7[];
extern  VTBL_ENTRY _ZTV8S20427C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
extern Class_Descriptor cd_S20427C8;
extern VTBL_ENTRY _ZTI8S20427C8[];
extern  VTBL_ENTRY _ZTV8S20427C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C8[];
static Base_Class bases_S20427C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    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_S2264C38,    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_S20427C4,    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, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    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
    5, //immediately_derived
  0, 0},
  {&cd_S20427C7,    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},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    ABISELECT(40,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, 0},
  {&cd_S2264C38,    ABISELECT(40,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, 0},
  {&cd_S20427C4,    ABISELECT(40,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
    10, //immediately_derived
  0, 0},
  {&cd_S20427C8,    ABISELECT(32,24), //bcp->offset
    5, //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
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20427C3[];
static  VTBL_ENTRY vtc_S20427C3[] = {
  0,
  ABISELECT(32,24),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C3[0]),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S20427C3[0]),
};
extern VTBL_ENTRY _ZTV8S20427C3[];
static  VTBL_ENTRY _tg__ZTV8S20427C7__8S20427C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C8__8S20427C3[] = {
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C8[0]),
};
static  VTT_ENTRY vtt_S20427C3[] = {
  {&(_ZTV8S20427C3[5]),  5,9},
  {&(_tg__ZTV8S20427C7__8S20427C3[3]),  3,3},
  {&(_ZTV8S20427C3[9]),  9,9},
  {&(_tg__ZTV8S20427C8__8S20427C3[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20427C3[];
extern  VTBL_ENTRY _ZTV8S20427C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C3[];
Class_Descriptor cd_S20427C3 = {  "S20427C3", // class name
  bases_S20427C3, 11,
  &(vtc_S20427C3[0]), // expected_vtbl_contents
  &(vtt_S20427C3[0]), // expected_vtt_contents
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI8S20427C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20427C3),9, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20427C3),4, //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  S20427C11  : virtual S20955C5 {
  ~S20427C11(); // tgen
  S20427C11(); // tgen
};
//SIG(-1 S20427C11) C1{ VBC2{ m FL Fc:0}}


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

static void Test_S20427C11()
{
  extern Class_Descriptor cd_S20427C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S20427C11, buf);
    S20427C11 *dp, &lv = *(dp=new (buf) S20427C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S20427C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20427C11)");
    check_base_class_offset(lv, (S20955C5*), ABISELECT(8,4), "S20427C11");
    test_class_info(&lv, &cd_S20427C11);
    dp->~S20427C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20427C11(Test_S20427C11, "S20427C11", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN9S20427C11C1Ev();
extern void _ZN9S20427C11D1Ev();
Name_Map name_map_S20427C11[] = {
  NSPAIR(_ZN9S20427C11C1Ev),
  NSPAIR(_ZN9S20427C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
static Base_Class bases_S20427C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    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},
  {0}};
extern VTBL_ENTRY _ZTI9S20427C11[];
static  VTBL_ENTRY vtc_S20427C11[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C11[0]),
};
extern VTBL_ENTRY _ZTV9S20427C11[];
static  VTT_ENTRY vtt_S20427C11[] = {
  {&(_ZTV9S20427C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20427C11[];
extern  VTBL_ENTRY _ZTV9S20427C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C11[];
Class_Descriptor cd_S20427C11 = {  "S20427C11", // class name
  bases_S20427C11, 1,
  &(vtc_S20427C11[0]), // expected_vtbl_contents
  &(vtt_S20427C11[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI9S20427C11),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20427C11),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20427C11),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  S20427C10  : virtual S20427C11 {
  unsigned int s20427c10f0:1;
  ~S20427C10(); // tgen
  S20427C10(); // tgen
};
//SIG(-1 S20427C10) C1{ VBC2{ VBC3{ m FL Fc:0}} Fi:1}


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

static void Test_S20427C10()
{
  extern Class_Descriptor cd_S20427C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20427C10, buf);
    S20427C10 *dp, &lv = *(dp=new (buf) S20427C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20427C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20427C10)");
    check_base_class_offset(lv, (S20955C5*)(S20427C11*), ABISELECT(16,8), "S20427C10");
    check_base_class_offset(lv, (S20427C11*), 0, "S20427C10");
    set_bf_and_test(lv, s20427c10f0, ABISELECT(8,4), 0, 1, 1, "S20427C10");
    test_class_info(&lv, &cd_S20427C10);
    dp->~S20427C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20427C10(Test_S20427C10, "S20427C10", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN9S20427C10C1Ev();
extern void _ZN9S20427C10D1Ev();
Name_Map name_map_S20427C10[] = {
  NSPAIR(_ZN9S20427C10C1Ev),
  NSPAIR(_ZN9S20427C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20427C11;
extern VTBL_ENTRY _ZTI9S20427C11[];
extern  VTBL_ENTRY _ZTV9S20427C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C11[];
static Base_Class bases_S20427C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    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_S20427C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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 _ZTI9S20427C10[];
static  VTBL_ENTRY vtc_S20427C10[] = {
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C10[0]),
};
extern VTBL_ENTRY _ZTV9S20427C10[];
static  VTBL_ENTRY _tg__ZTV9S20427C11__9S20427C10[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C11[0]),
};
static  VTT_ENTRY vtt_S20427C10[] = {
  {&(_ZTV9S20427C10[4]),  4,4},
  {&(_ZTV9S20427C10[4]),  4,4},
  {&(_tg__ZTV9S20427C11__9S20427C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S20427C10[];
extern  VTBL_ENTRY _ZTV9S20427C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C10[];
Class_Descriptor cd_S20427C10 = {  "S20427C10", // class name
  bases_S20427C10, 2,
  &(vtc_S20427C10[0]), // expected_vtbl_contents
  &(vtt_S20427C10[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI9S20427C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20427C10),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20427C10),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  S20427C16  : virtual S20427C4 , virtual S20955C5 , S2264C38 {
  ~S20427C16(); // tgen
  S20427C16(); // tgen
};
//SIG(-1 S20427C16) C1{ VBC2{ BC3{ m FL Fc:0} BC4{ m}} VBC3 BC4}


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

static void Test_S20427C16()
{
  extern Class_Descriptor cd_S20427C16;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S20427C16, buf);
    S20427C16 *dp, &lv = *(dp=new (buf) S20427C16());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S20427C16)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20427C16)");
    check_base_class_offset(lv, (S20955C5*)(S20427C4*), ABISELECT(8,4), "S20427C16");
    check_base_class_offset(lv, (S2264C38*)(S20427C4*), ABISELECT(8,4), "S20427C16");
    check_base_class_offset(lv, (S20427C4*), ABISELECT(8,4), "S20427C16");
    /*is_ambiguous_... S20427C16::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*), ABISELECT(16,12), "S20427C16");
    /*is_ambiguous_... S20427C16::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), 0, "S20427C16");
    test_class_info(&lv, &cd_S20427C16);
    dp->~S20427C16();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20427C16(Test_S20427C16, "S20427C16", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN9S20427C16C1Ev();
extern void _ZN9S20427C16D1Ev();
Name_Map name_map_S20427C16[] = {
  NSPAIR(_ZN9S20427C16C1Ev),
  NSPAIR(_ZN9S20427C16D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
static Base_Class bases_S20427C16[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    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_S2264C38,    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_S20427C4,    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_S20955C5,    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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI9S20427C16[];
static  VTBL_ENTRY vtc_S20427C16[] = {
  ABISELECT(16,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C16[0]),
};
extern VTBL_ENTRY _ZTV9S20427C16[];
static  VTT_ENTRY vtt_S20427C16[] = {
  {&(_ZTV9S20427C16[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20427C16[];
extern  VTBL_ENTRY _ZTV9S20427C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C16[];
Class_Descriptor cd_S20427C16 = {  "S20427C16", // class name
  bases_S20427C16, 5,
  &(vtc_S20427C16[0]), // expected_vtbl_contents
  &(vtt_S20427C16[0]), // expected_vtt_contents
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI9S20427C16),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20427C16),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20427C16),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  S20427C17  : S2264C38 , S20427C4 {
  ::S3052C22_nt s20427c17f0;
  virtual  ~S20427C17(); // _ZN9S20427C17D1Ev
  S20427C17(); // tgen
};
//SIG(-1 S20427C17) C1{ BC2{ m} BC3{ BC4{ m FL Fc:0} BC2} vd FC5{}}


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

static void Test_S20427C17()
{
  extern Class_Descriptor cd_S20427C17;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20427C17, buf);
    S20427C17 *dp, &lv = *(dp=new (buf) S20427C17());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20427C17)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20427C17)");
    /*is_ambiguous_... S20427C17::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), 0, "S20427C17");
    check_base_class_offset(lv, (S20955C5*)(S20427C4*), ABISELECT(8,4), "S20427C17");
    check_base_class_offset(lv, (S2264C38*)(S20427C4*), ABISELECT(8,4), "S20427C17");
    check_base_class_offset(lv, (S20427C4*), ABISELECT(8,4), "S20427C17");
    check_field_offset(lv, s20427c17f0, ABISELECT(16,12), "S20427C17.s20427c17f0");
    test_class_info(&lv, &cd_S20427C17);
    dp->~S20427C17();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20427C17(Test_S20427C17, "S20427C17", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN9S20427C17C1Ev();
extern void _ZN9S20427C17D1Ev();
Name_Map name_map_S20427C17[] = {
  NSPAIR(_ZN9S20427C17C1Ev),
  NSPAIR(_ZN9S20427C17D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
static Base_Class bases_S20427C17[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20955C5,    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_S2264C38,    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_S20427C4,    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 _ZTI9S20427C17[];
extern void _ZN9S20427C17D1Ev();
extern void _ZN9S20427C17D0Ev();
static  VTBL_ENTRY vtc_S20427C17[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C17[0]),
  (VTBL_ENTRY)&_ZN9S20427C17D1Ev,
  (VTBL_ENTRY)&_ZN9S20427C17D0Ev,
};
extern VTBL_ENTRY _ZTI9S20427C17[];
extern  VTBL_ENTRY _ZTV9S20427C17[];
Class_Descriptor cd_S20427C17 = {  "S20427C17", // class name
  bases_S20427C17, 4,
  &(vtc_S20427C17[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI9S20427C17),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20427C17),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  S20427C15  : virtual S20427C16 , S20427C17 {
  int s20427c15f0[8];
  ~S20427C15(); // tgen
  S20427C15(); // tgen
};
//SIG(-1 S20427C15) C1{ VBC2{ VBC3{ BC4{ m FL Fc:0} BC5{ m}} VBC4 BC5} BC6{ BC5 BC3 vd FC7{}} Fi[8]}


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

static void Test_S20427C15()
{
  extern Class_Descriptor cd_S20427C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,18)];
    init_test(&cd_S20427C15, buf);
    S20427C15 *dp, &lv = *(dp=new (buf) S20427C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,68), "sizeof(S20427C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20427C15)");
    /*is_ambiguous_... S20427C15::S20427C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20427C4*), ABISELECT(64,52), "S20427C15");
    /*is_ambiguous_... S20427C15::S20427C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C4*), ABISELECT(64,52), "S20427C15");
    check_base_class_offset(lv, (S20427C4*)(S20427C16*), ABISELECT(64,52), "S20427C15");
    /*is_ambiguous_... S20427C16::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20427C16*), ABISELECT(72,60), "S20427C15");
    /*is_ambiguous_... S20427C16::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C16*), ABISELECT(56,48), "S20427C15");
    check_base_class_offset(lv, (S20427C16*), ABISELECT(56,48), "S20427C15");
    /*is_ambiguous_... S20427C17::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C17*), 0, "S20427C15");
    check_base_class_offset(lv, (S20955C5*)(S20427C4*)(S20427C17*), ABISELECT(8,4), "S20427C15");
    check_base_class_offset(lv, (S2264C38*)(S20427C4*)(S20427C17*), ABISELECT(8,4), "S20427C15");
    check_base_class_offset(lv, (S20427C4*)(S20427C17*), ABISELECT(8,4), "S20427C15");
    check_base_class_offset(lv, (S20427C17*), 0, "S20427C15");
    check_field_offset(lv, s20427c15f0, ABISELECT(20,16), "S20427C15.s20427c15f0");
    test_class_info(&lv, &cd_S20427C15);
    dp->~S20427C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20427C15(Test_S20427C15, "S20427C15", ABISELECT(80,68));

#else // __cplusplus

extern void _ZN9S20427C15C1Ev();
extern void _ZN9S20427C15D1Ev();
Name_Map name_map_S20427C15[] = {
  NSPAIR(_ZN9S20427C15C1Ev),
  NSPAIR(_ZN9S20427C15D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C16;
extern VTBL_ENTRY _ZTI9S20427C16[];
extern  VTBL_ENTRY _ZTV9S20427C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C16[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
extern Class_Descriptor cd_S20427C17;
extern VTBL_ENTRY _ZTI9S20427C17[];
extern  VTBL_ENTRY _ZTV9S20427C17[];
static Base_Class bases_S20427C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(64,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(64,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
    2, //immediately_derived
  0, 0},
  {&cd_S20427C4,    ABISELECT(64,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
    5, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(72,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
    5, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(56,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
    5, //immediately_derived
  0, 0},
  {&cd_S20427C16,    ABISELECT(56,48), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    9, //immediately_derived
  0, 0},
  {&cd_S20427C4,    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
    10, //immediately_derived
  0, 0},
  {&cd_S20427C17,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S20427C15[];
extern void _ZN9S20427C15D1Ev();
extern void _ZN9S20427C15D0Ev();
static  VTBL_ENTRY vtc_S20427C15[] = {
  ABISELECT(72,60),
  ABISELECT(64,52),
  ABISELECT(56,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C15[0]),
  (VTBL_ENTRY)&_ZN9S20427C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20427C15D0Ev,
  ABISELECT(16,12),
  ABISELECT(8,4),
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI9S20427C15[0]),
};
extern VTBL_ENTRY _ZTV9S20427C15[];
static  VTBL_ENTRY _tg__ZTV9S20427C16__9S20427C15[] = {
  ABISELECT(16,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C16[0]),
};
static  VTT_ENTRY vtt_S20427C15[] = {
  {&(_ZTV9S20427C15[5]),  5,11},
  {&(_ZTV9S20427C15[11]),  11,11},
  {&(_tg__ZTV9S20427C16__9S20427C15[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20427C15[];
extern  VTBL_ENTRY _ZTV9S20427C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C15[];
Class_Descriptor cd_S20427C15 = {  "S20427C15", // class name
  bases_S20427C15, 11,
  &(vtc_S20427C15[0]), // expected_vtbl_contents
  &(vtt_S20427C15[0]), // expected_vtt_contents
  ABISELECT(80,68), // object size
  NSPAIRA(_ZTI9S20427C15),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20427C15),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20427C15),3, //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  S20427C14  : virtual S20427C15 {
  virtual  ~S20427C14(); // _ZN9S20427C14D2Ev
  S20427C14(); // tgen
};
//SIG(-1 S20427C14) C1{ VBC2{ VBC3{ VBC4{ BC5{ m FL Fc:0} BC6{ m}} VBC5 BC6} BC7{ BC6 BC4 vd FC8{}} Fi[8]} vd}


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

static void Test_S20427C14()
{
  extern Class_Descriptor cd_S20427C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,18)];
    init_test(&cd_S20427C14, buf);
    S20427C14 *dp, &lv = *(dp=new (buf) S20427C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,68), "sizeof(S20427C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20427C14)");
    /*is_ambiguous_... S20427C14::S20427C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20427C4*), ABISELECT(64,52), "S20427C14");
    /*is_ambiguous_... S20427C14::S20427C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C4*), ABISELECT(64,52), "S20427C14");
    check_base_class_offset(lv, (S20427C4*)(S20427C16*), ABISELECT(64,52), "S20427C14");
    /*is_ambiguous_... S20427C16::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20427C16*), ABISELECT(72,60), "S20427C14");
    /*is_ambiguous_... S20427C16::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C16*), 0, "S20427C14");
    check_base_class_offset(lv, (S20427C16*)(S20427C15*), 0, "S20427C14");
    /*is_ambiguous_... S20427C17::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C17*)(S20427C15*), ABISELECT(8,4), "S20427C14");
    check_base_class_offset(lv, (S20955C5*)(S20427C4*)(S20427C17*)(S20427C15*), ABISELECT(16,8), "S20427C14");
    check_base_class_offset(lv, (S2264C38*)(S20427C4*)(S20427C17*)(S20427C15*), ABISELECT(16,8), "S20427C14");
    check_base_class_offset(lv, (S20427C4*)(S20427C17*)(S20427C15*), ABISELECT(16,8), "S20427C14");
    check_base_class_offset(lv, (S20427C17*)(S20427C15*), ABISELECT(8,4), "S20427C14");
    check_base_class_offset(lv, (S20427C15*), ABISELECT(8,4), "S20427C14");
    test_class_info(&lv, &cd_S20427C14);
    dp->~S20427C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20427C14(Test_S20427C14, "S20427C14", ABISELECT(80,68));

#else // __cplusplus

extern void _ZN9S20427C14C1Ev();
extern void _ZN9S20427C14D2Ev();
Name_Map name_map_S20427C14[] = {
  NSPAIR(_ZN9S20427C14C1Ev),
  NSPAIR(_ZN9S20427C14D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C16;
extern VTBL_ENTRY _ZTI9S20427C16[];
extern  VTBL_ENTRY _ZTV9S20427C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C16[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
extern Class_Descriptor cd_S20427C17;
extern VTBL_ENTRY _ZTI9S20427C17[];
extern  VTBL_ENTRY _ZTV9S20427C17[];
extern Class_Descriptor cd_S20427C15;
extern VTBL_ENTRY _ZTI9S20427C15[];
extern  VTBL_ENTRY _ZTV9S20427C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C15[];
static Base_Class bases_S20427C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(64,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(64,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
    2, //immediately_derived
  0, 0},
  {&cd_S20427C4,    ABISELECT(64,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
    5, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(72,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
    5, //immediately_derived
  0, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20427C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    11, //immediately_derived
  0, 1},
  {&cd_S2264C38,    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
    10, //immediately_derived
  0, 0},
  {&cd_S20955C5,    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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    9, //immediately_derived
  0, 0},
  {&cd_S20427C4,    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
    10, //immediately_derived
  0, 0},
  {&cd_S20427C17,    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
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20427C15,    ABISELECT(8,4), //bcp->offset
    8, //bcp->virtual_function_table_offset
    6, //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},
  {0}};
extern VTBL_ENTRY _ZTI9S20427C14[];
extern void _ZN9S20427C14D1Ev();
extern void _ZN9S20427C14D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S20427C14D1Ev,_ZTv0_n24_N9S20427C14D1Ev)();
extern void ABISELECT(_ZThn8_N9S20427C14D1Ev,_ZThn4_N9S20427C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20427C14D0Ev,_ZTv0_n24_N9S20427C14D0Ev)();
extern void ABISELECT(_ZThn8_N9S20427C14D0Ev,_ZThn4_N9S20427C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20427C14[] = {
  0,
  ABISELECT(8,4),
  ABISELECT(72,60),
  ABISELECT(64,52),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C14[0]),
  (VTBL_ENTRY)&_ZN9S20427C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20427C14D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S20427C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20427C14D1Ev,_ZTv0_n24_N9S20427C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20427C14D0Ev,_ZTv0_n24_N9S20427C14D0Ev),
};
extern VTBL_ENTRY _ZTV9S20427C14[];
extern void _ZN9S20427C15D1Ev();
extern void _ZN9S20427C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20427C15__9S20427C14[] = {
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C15[0]),
  (VTBL_ENTRY)&_ZN9S20427C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20427C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20427C16__9S20427C15__9S20427C14[] = {
  ABISELECT(72,60),
  ABISELECT(64,52),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI9S20427C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20427C16__9S20427C14[] = {
  ABISELECT(72,60),
  ABISELECT(64,52),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C16[0]),
};
static  VTT_ENTRY vtt_S20427C14[] = {
  {&(_ZTV9S20427C14[6]),  6,16},
  {&(_ZTV9S20427C14[14]),  14,16},
  {&(_ZTV9S20427C14[6]),  6,16},
  {&(_tg__ZTV9S20427C15__9S20427C14[5]),  5,7},
  {&(_tg__ZTV9S20427C16__9S20427C15__9S20427C14[4]),  4,4},
  {&(_tg__ZTV9S20427C16__9S20427C14[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20427C14[];
extern  VTBL_ENTRY _ZTV9S20427C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C14[];
static VTBL_ENTRY alt_thunk_names187[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20427C14D0Ev,_ZTv0_n24_N9S20427C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20427C14D0Ev,_ZThn4_N9S20427C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20427C14D1Ev,_ZTv0_n24_N9S20427C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S20427C14D1Ev,_ZThn4_N9S20427C14D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20427C14 = {  "S20427C14", // class name
  bases_S20427C14, 12,
  &(vtc_S20427C14[0]), // expected_vtbl_contents
  &(vtt_S20427C14[0]), // expected_vtt_contents
  ABISELECT(80,68), // object size
  NSPAIRA(_ZTI9S20427C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S20427C14),16, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20427C14),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names187,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20427C13  : virtual S20427C4 , S20427C14 {
  ::S20427C15 s20427c13f0[2];
  virtual  ~S20427C13(); // _ZN9S20427C13D2Ev
  S20427C13(); // tgen
};
//SIG(-1 S20427C13) C1{ VBC2{ BC3{ m FL Fc:0} BC4{ m}} BC5{ VBC6{ VBC7{ VBC2 VBC3 BC4} BC8{ BC4 BC2 vd FC9{}} Fi[8]} vd} vd FC6[2]}


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

static void Test_S20427C13()
{
  extern Class_Descriptor cd_S20427C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(31,52)];
    init_test(&cd_S20427C13, buf);
    S20427C13 *dp, &lv = *(dp=new (buf) S20427C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(240,204), "sizeof(S20427C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20427C13)");
    /*is_ambiguous_... S20427C13::S20427C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20427C4*), ABISELECT(168,140), "S20427C13");
    /*is_ambiguous_... S20427C13::S20427C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C4*), ABISELECT(168,140), "S20427C13");
    /*is_ambiguous_... S20427C13::S20427C4 */ AMB_check_base_class_offset(lv, (S20427C4*), ABISELECT(168,140), "S20427C13");
    check_base_class_offset(lv, (S20427C4*)(S20427C16*), ABISELECT(168,140), "S20427C13");
    /*is_ambiguous_... S20427C16::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20427C16*), ABISELECT(232,196), "S20427C13");
    /*is_ambiguous_... S20427C16::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C16*), 0, "S20427C13");
    check_base_class_offset(lv, (S20427C16*)(S20427C15*), 0, "S20427C13");
    /*is_ambiguous_... S20427C17::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C17*)(S20427C15*), ABISELECT(176,148), "S20427C13");
    check_base_class_offset(lv, (S20955C5*)(S20427C4*)(S20427C17*)(S20427C15*), ABISELECT(184,152), "S20427C13");
    check_base_class_offset(lv, (S2264C38*)(S20427C4*)(S20427C17*)(S20427C15*), ABISELECT(184,152), "S20427C13");
    check_base_class_offset(lv, (S20427C4*)(S20427C17*)(S20427C15*), ABISELECT(184,152), "S20427C13");
    check_base_class_offset(lv, (S20427C17*)(S20427C15*), ABISELECT(176,148), "S20427C13");
    check_base_class_offset(lv, (S20427C15*)(S20427C14*), ABISELECT(176,148), "S20427C13");
    check_base_class_offset(lv, (S20427C14*), 0, "S20427C13");
    check_field_offset(lv, s20427c13f0, ABISELECT(8,4), "S20427C13.s20427c13f0");
    test_class_info(&lv, &cd_S20427C13);
    dp->~S20427C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20427C13(Test_S20427C13, "S20427C13", ABISELECT(240,204));

#else // __cplusplus

extern void _ZN9S20427C13C1Ev();
extern void _ZN9S20427C13D2Ev();
Name_Map name_map_S20427C13[] = {
  NSPAIR(_ZN9S20427C13C1Ev),
  NSPAIR(_ZN9S20427C13D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C16;
extern VTBL_ENTRY _ZTI9S20427C16[];
extern  VTBL_ENTRY _ZTV9S20427C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C16[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
extern Class_Descriptor cd_S20427C17;
extern VTBL_ENTRY _ZTI9S20427C17[];
extern  VTBL_ENTRY _ZTV9S20427C17[];
extern Class_Descriptor cd_S20427C15;
extern VTBL_ENTRY _ZTI9S20427C15[];
extern  VTBL_ENTRY _ZTV9S20427C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C15[];
extern Class_Descriptor cd_S20427C14;
extern VTBL_ENTRY _ZTI9S20427C14[];
extern  VTBL_ENTRY _ZTV9S20427C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C14[];
static Base_Class bases_S20427C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(168,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(168,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
    2, //immediately_derived
  0, 0},
  {&cd_S20427C4,    ABISELECT(168,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
    -1, //immediately_derived
  1, 1},
  {&cd_S20955C5,    ABISELECT(232,196), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20427C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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
    11, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(176,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
    10, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(184,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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(184,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
    9, //immediately_derived
  0, 0},
  {&cd_S20427C4,    ABISELECT(184,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
    10, //immediately_derived
  0, 0},
  {&cd_S20427C17,    ABISELECT(176,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
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20427C15,    ABISELECT(176,148), //bcp->offset
    8, //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
    12, //immediately_derived
  0, 1},
  {&cd_S20427C14,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20427C13[];
extern void _ZN9S20427C13D1Ev();
extern void _ZN9S20427C13D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S20427C13D1Ev,_ZTv0_n24_N9S20427C13D1Ev)();
extern void ABISELECT(_ZThn176_N9S20427C13D1Ev,_ZThn148_N9S20427C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20427C13D0Ev,_ZTv0_n24_N9S20427C13D0Ev)();
extern void ABISELECT(_ZThn176_N9S20427C13D0Ev,_ZThn148_N9S20427C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20427C13[] = {
  0,
  ABISELECT(176,148),
  ABISELECT(232,196),
  ABISELECT(168,140),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C13[0]),
  (VTBL_ENTRY)&_ZN9S20427C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20427C13D0Ev,
  ABISELECT(-176,-148),
  ABISELECT(56,48),
  -8,
  ABISELECT(-176,-148),
  ABISELECT(-176,-148),
  (VTBL_ENTRY)&(_ZTI9S20427C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20427C13D1Ev,_ZTv0_n24_N9S20427C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20427C13D0Ev,_ZTv0_n24_N9S20427C13D0Ev),
};
extern VTBL_ENTRY _ZTV9S20427C13[];
extern void _ZN9S20427C14D1Ev();
extern void _ZN9S20427C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20427C14__9S20427C13[] = {
  0,
  ABISELECT(176,148),
  ABISELECT(232,196),
  ABISELECT(168,140),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C14[0]),
  (VTBL_ENTRY)&_ZN9S20427C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20427C14D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20427C14D1Ev,_ZTv0_n24_N9S20427C14D1Ev)();
extern void ABISELECT(_ZThn176_N9S20427C14D1Ev,_ZThn148_N9S20427C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20427C14D0Ev,_ZTv0_n24_N9S20427C14D0Ev)();
extern void ABISELECT(_ZThn176_N9S20427C14D0Ev,_ZThn148_N9S20427C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20427C15__9S20427C14__9S20427C13[] = {
  ABISELECT(-176,-148),
  ABISELECT(56,48),
  -8,
  ABISELECT(-176,-148),
  ABISELECT(-176,-148),
  (VTBL_ENTRY)&(_ZTI9S20427C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20427C14D1Ev,_ZTv0_n24_N9S20427C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20427C14D0Ev,_ZTv0_n24_N9S20427C14D0Ev),
};
extern void _ZN9S20427C15D1Ev();
extern void _ZN9S20427C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20427C15__9S20427C13[] = {
  ABISELECT(56,48),
  -8,
  ABISELECT(-176,-148),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C15[0]),
  (VTBL_ENTRY)&_ZN9S20427C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20427C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20427C16__9S20427C15__9S20427C13[] = {
  ABISELECT(232,196),
  ABISELECT(168,140),
  ABISELECT(176,148),
  (VTBL_ENTRY)&(_ZTI9S20427C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20427C16__9S20427C13[] = {
  ABISELECT(232,196),
  ABISELECT(168,140),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C16[0]),
};
static  VTT_ENTRY vtt_S20427C13[] = {
  {&(_ZTV9S20427C13[6]),  6,16},
  {&(_tg__ZTV9S20427C14__9S20427C13[6]),  6,8},
  {&(_tg__ZTV9S20427C15__9S20427C14__9S20427C13[6]),  6,8},
  {&(_tg__ZTV9S20427C14__9S20427C13[6]),  6,8},
  {&(_ZTV9S20427C13[14]),  14,16},
  {&(_ZTV9S20427C13[6]),  6,16},
  {&(_tg__ZTV9S20427C15__9S20427C13[5]),  5,7},
  {&(_tg__ZTV9S20427C16__9S20427C15__9S20427C13[4]),  4,4},
  {&(_tg__ZTV9S20427C16__9S20427C13[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20427C13[];
extern  VTBL_ENTRY _ZTV9S20427C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C13[];
static VTBL_ENTRY alt_thunk_names188[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20427C14D0Ev,_ZTv0_n24_N9S20427C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20427C14D0Ev,_ZThn148_N9S20427C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20427C14D1Ev,_ZTv0_n24_N9S20427C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20427C14D1Ev,_ZThn148_N9S20427C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20427C13D0Ev,_ZTv0_n24_N9S20427C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20427C13D0Ev,_ZThn148_N9S20427C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20427C13D1Ev,_ZTv0_n24_N9S20427C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn176_N9S20427C13D1Ev,_ZThn148_N9S20427C13D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20427C13 = {  "S20427C13", // class name
  bases_S20427C13, 13,
  &(vtc_S20427C13[0]), // expected_vtbl_contents
  &(vtt_S20427C13[0]), // expected_vtt_contents
  ABISELECT(240,204), // object size
  NSPAIRA(_ZTI9S20427C13),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S20427C13),16, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20427C13),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names188,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20427C12  : S20427C13 , S20427C3 , S20427C7 {
  ~S20427C12(); // tgen
  S20427C12(); // tgen
};
//SIG(-1 S20427C12) C1{ BC2{ VBC3{ BC4{ m FL Fc:0} BC5{ m}} BC6{ VBC7{ VBC8{ VBC3 VBC4 BC5} BC9{ BC5 BC3 vd FC10{}} Fi[8]} vd} vd FC7[2]} BC11{ BC3 BC12{ VBC5 BC4} VBC13{ VBC14{ m} BC3 VBC5 Fi} Fp} BC12}


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

static void Test_S20427C12()
{
  extern Class_Descriptor cd_S20427C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(40,65)];
    init_test(&cd_S20427C12, buf);
    S20427C12 *dp, &lv = *(dp=new (buf) S20427C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(312,256), "sizeof(S20427C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20427C12)");
    /*is_ambiguous_... S20427C12::S20427C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20427C4*), ABISELECT(216,176), "S20427C12");
    /*is_ambiguous_... S20427C12::S20427C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C4*), ABISELECT(216,176), "S20427C12");
    /*is_ambiguous_... S20427C13::S20427C4 */ AMB_check_base_class_offset(lv, (S20427C4*)(S20427C13*), ABISELECT(216,176), "S20427C12");
    check_base_class_offset(lv, (S20427C4*)(S20427C16*), ABISELECT(216,176), "S20427C12");
    /*is_ambiguous_... S20427C16::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20427C16*), ABISELECT(280,232), "S20427C12");
    /*is_ambiguous_... S20427C16::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C16*), 0, "S20427C12");
    check_base_class_offset(lv, (S20427C16*)(S20427C15*), 0, "S20427C12");
    /*is_ambiguous_... S20427C17::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C17*)(S20427C15*), ABISELECT(224,184), "S20427C12");
    check_base_class_offset(lv, (S20955C5*)(S20427C4*)(S20427C17*)(S20427C15*), ABISELECT(232,188), "S20427C12");
    check_base_class_offset(lv, (S2264C38*)(S20427C4*)(S20427C17*)(S20427C15*), ABISELECT(232,188), "S20427C12");
    check_base_class_offset(lv, (S20427C4*)(S20427C17*)(S20427C15*), ABISELECT(232,188), "S20427C12");
    check_base_class_offset(lv, (S20427C17*)(S20427C15*), ABISELECT(224,184), "S20427C12");
    check_base_class_offset(lv, (S20427C15*)(S20427C14*)(S20427C13*), ABISELECT(224,184), "S20427C12");
    check_base_class_offset(lv, (S20427C14*)(S20427C13*), 0, "S20427C12");
    check_base_class_offset(lv, (S20427C13*), 0, "S20427C12");
    /*is_ambiguous_... S20427C3::S20427C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20427C4*)(S20427C3*), ABISELECT(184,152), "S20427C12");
    /*is_ambiguous_... S20427C3::S20427C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C4*)(S20427C3*), ABISELECT(184,152), "S20427C12");
    /*is_ambiguous_... S20427C3::S20427C4 */ AMB_check_base_class_offset(lv, (S20427C4*)(S20427C3*), ABISELECT(184,152), "S20427C12");
    check_base_class_offset(lv, (S2264C38*)(S20427C7*)(S20427C3*), ABISELECT(288,240), "S20427C12");
    /*is_ambiguous_... S20427C8::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C8*), ABISELECT(288,240), "S20427C12");
    /*is_ambiguous_... S20427C12::S20427C7 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C7*), ABISELECT(288,240), "S20427C12");
    check_base_class_offset(lv, (S20955C5*)(S20427C7*)(S20427C3*), ABISELECT(176,144), "S20427C12");
    check_base_class_offset(lv, (S20427C7*)(S20427C3*), ABISELECT(168,140), "S20427C12");
    check_base_class_offset(lv, (S2264C28*)(S20427C8*), 0, "S20427C12");
    check_base_class_offset(lv, (S20955C5*)(S20427C4*)(S20427C8*), ABISELECT(296,244), "S20427C12");
    check_base_class_offset(lv, (S2264C38*)(S20427C4*)(S20427C8*), ABISELECT(296,244), "S20427C12");
    check_base_class_offset(lv, (S20427C4*)(S20427C8*), ABISELECT(296,244), "S20427C12");
    check_base_class_offset(lv, (S20427C8*)(S20427C3*), ABISELECT(288,240), "S20427C12");
    check_base_class_offset(lv, (S20427C3*), ABISELECT(168,140), "S20427C12");
    /*is_ambiguous_... S20427C12::S20427C7 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20427C7*), ABISELECT(208,168), "S20427C12");
    /*is_ambiguous_... S20427C12::S20427C7 */ AMB_check_base_class_offset(lv, (S20427C7*), ABISELECT(200,164), "S20427C12");
    test_class_info(&lv, &cd_S20427C12);
    dp->~S20427C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20427C12(Test_S20427C12, "S20427C12", ABISELECT(312,256));

#else // __cplusplus

extern void _ZN9S20427C12C1Ev();
extern void _ZN9S20427C12D1Ev();
Name_Map name_map_S20427C12[] = {
  NSPAIR(_ZN9S20427C12C1Ev),
  NSPAIR(_ZN9S20427C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C16;
extern VTBL_ENTRY _ZTI9S20427C16[];
extern  VTBL_ENTRY _ZTV9S20427C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C16[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
extern Class_Descriptor cd_S20427C17;
extern VTBL_ENTRY _ZTI9S20427C17[];
extern  VTBL_ENTRY _ZTV9S20427C17[];
extern Class_Descriptor cd_S20427C15;
extern VTBL_ENTRY _ZTI9S20427C15[];
extern  VTBL_ENTRY _ZTV9S20427C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C15[];
extern Class_Descriptor cd_S20427C14;
extern VTBL_ENTRY _ZTI9S20427C14[];
extern  VTBL_ENTRY _ZTV9S20427C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C14[];
extern Class_Descriptor cd_S20427C13;
extern VTBL_ENTRY _ZTI9S20427C13[];
extern  VTBL_ENTRY _ZTV9S20427C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C13[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20427C7;
extern VTBL_ENTRY _ZTI8S20427C7[];
extern  VTBL_ENTRY _ZTV8S20427C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
extern Class_Descriptor cd_S20427C8;
extern VTBL_ENTRY _ZTI8S20427C8[];
extern  VTBL_ENTRY _ZTV8S20427C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C8[];
extern Class_Descriptor cd_S20427C3;
extern VTBL_ENTRY _ZTI8S20427C3[];
extern  VTBL_ENTRY _ZTV8S20427C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C3[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20427C7;
extern VTBL_ENTRY _ZTI8S20427C7[];
extern  VTBL_ENTRY _ZTV8S20427C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C7[];
static Base_Class bases_S20427C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(216,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(216,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
    2, //immediately_derived
  0, 0},
  {&cd_S20427C4,    ABISELECT(216,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
    5, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(280,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
    5, //immediately_derived
  0, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20427C16,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(224,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
    10, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(232,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, 0},
  {&cd_S2264C38,    ABISELECT(232,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, 0},
  {&cd_S20427C4,    ABISELECT(232,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
    10, //immediately_derived
  0, 0},
  {&cd_S20427C17,    ABISELECT(224,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
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S20427C15,    ABISELECT(224,184), //bcp->offset
    19, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    12, //immediately_derived
  0, 1},
  {&cd_S20427C14,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //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
    13, //immediately_derived
  0, 0},
  {&cd_S20427C13,    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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20955C5,    ABISELECT(184,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
    16, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(184,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
    16, //immediately_derived
  0, 0},
  {&cd_S20427C4,    ABISELECT(184,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
    25, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(288,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    ABISELECT(176,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
    19, //immediately_derived
  0, 0},
  {&cd_S20427C7,    ABISELECT(168,140), //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
    7, //init_seq
    25, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20955C5,    ABISELECT(296,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(296,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20427C4,    ABISELECT(296,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20427C8,    ABISELECT(288,240), //bcp->offset
    27, //bcp->virtual_function_table_offset
    4, //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
    25, //immediately_derived
  0, 1},
  {&cd_S20427C3,    ABISELECT(168,140), //bcp->offset
    11, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S20955C5,    ABISELECT(208,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
    27, //immediately_derived
  0, 0},
  {&cd_S20427C7,    ABISELECT(200,164), //bcp->offset
    16, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S20427C12[];
extern void _ZN9S20427C12D1Ev();
extern void _ZN9S20427C12D0Ev();
extern void ABISELECT(_ZTv0_n48_N9S20427C12D1Ev,_ZTv0_n24_N9S20427C12D1Ev)();
extern void ABISELECT(_ZThn224_N9S20427C12D1Ev,_ZThn184_N9S20427C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20427C12D0Ev,_ZTv0_n24_N9S20427C12D0Ev)();
extern void ABISELECT(_ZThn224_N9S20427C12D0Ev,_ZThn184_N9S20427C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20427C12[] = {
  0,
  ABISELECT(288,240),
  ABISELECT(288,240),
  0,
  ABISELECT(224,184),
  ABISELECT(280,232),
  ABISELECT(216,176),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C12[0]),
  (VTBL_ENTRY)&_ZN9S20427C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20427C12D0Ev,
  ABISELECT(-168,-140),
  ABISELECT(120,100),
  ABISELECT(120,100),
  ABISELECT(-168,-140),
  (VTBL_ENTRY)&(_ZTI9S20427C12[0]),
  ABISELECT(88,76),
  ABISELECT(-200,-164),
  (VTBL_ENTRY)&(_ZTI9S20427C12[0]),
  ABISELECT(-224,-184),
  ABISELECT(56,48),
  -8,
  ABISELECT(-224,-184),
  ABISELECT(-224,-184),
  (VTBL_ENTRY)&(_ZTI9S20427C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20427C12D1Ev,_ZTv0_n24_N9S20427C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20427C12D0Ev,_ZTv0_n24_N9S20427C12D0Ev),
  0,
  ABISELECT(-288,-240),
  ABISELECT(-288,-240),
  (VTBL_ENTRY)&(_ZTI9S20427C12[0]),
};
extern VTBL_ENTRY _ZTV9S20427C12[];
extern void _ZN9S20427C13D1Ev();
extern void _ZN9S20427C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20427C13__9S20427C12[] = {
  0,
  ABISELECT(224,184),
  ABISELECT(280,232),
  ABISELECT(216,176),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C13[0]),
  (VTBL_ENTRY)&_ZN9S20427C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20427C13D0Ev,
};
extern void _ZN9S20427C14D1Ev();
extern void _ZN9S20427C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20427C149S20427C13__9S20427C12[] = {
  0,
  ABISELECT(224,184),
  ABISELECT(280,232),
  ABISELECT(216,176),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C14[0]),
  (VTBL_ENTRY)&_ZN9S20427C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20427C14D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20427C14D1Ev,_ZTv0_n24_N9S20427C14D1Ev)();
extern void ABISELECT(_ZThn224_N9S20427C14D1Ev,_ZThn184_N9S20427C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20427C14D0Ev,_ZTv0_n24_N9S20427C14D0Ev)();
extern void ABISELECT(_ZThn224_N9S20427C14D0Ev,_ZThn184_N9S20427C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20427C15__9S20427C149S20427C13__9S20427C12[] = {
  ABISELECT(-224,-184),
  ABISELECT(56,48),
  -8,
  ABISELECT(-224,-184),
  ABISELECT(-224,-184),
  (VTBL_ENTRY)&(_ZTI9S20427C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20427C14D1Ev,_ZTv0_n24_N9S20427C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20427C14D0Ev,_ZTv0_n24_N9S20427C14D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20427C13D1Ev,_ZTv0_n24_N9S20427C13D1Ev)();
extern void ABISELECT(_ZThn224_N9S20427C13D1Ev,_ZThn184_N9S20427C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20427C13D0Ev,_ZTv0_n24_N9S20427C13D0Ev)();
extern void ABISELECT(_ZThn224_N9S20427C13D0Ev,_ZThn184_N9S20427C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20427C15__9S20427C13__9S20427C12[] = {
  ABISELECT(-224,-184),
  ABISELECT(56,48),
  -8,
  ABISELECT(-224,-184),
  ABISELECT(-224,-184),
  (VTBL_ENTRY)&(_ZTI9S20427C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20427C13D1Ev,_ZTv0_n24_N9S20427C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20427C13D0Ev,_ZTv0_n24_N9S20427C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20427C3__9S20427C12[] = {
  ABISELECT(-168,-140),
  ABISELECT(120,100),
  ABISELECT(120,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C78S20427C3__9S20427C12[] = {
  ABISELECT(120,100),
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C8__8S20427C3__9S20427C12[] = {
  0,
  ABISELECT(-288,-240),
  ABISELECT(-120,-100),
  (VTBL_ENTRY)&(_ZTI8S20427C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C7__A1__9S20427C12[] = {
  ABISELECT(88,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C7[0]),
};
extern void _ZN9S20427C15D1Ev();
extern void _ZN9S20427C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20427C15__9S20427C12[] = {
  ABISELECT(56,48),
  -8,
  ABISELECT(-224,-184),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C15[0]),
  (VTBL_ENTRY)&_ZN9S20427C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20427C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20427C16__9S20427C15__9S20427C12[] = {
  ABISELECT(280,232),
  ABISELECT(216,176),
  ABISELECT(224,184),
  (VTBL_ENTRY)&(_ZTI9S20427C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20427C16__9S20427C12[] = {
  ABISELECT(280,232),
  ABISELECT(216,176),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C16[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C8__9S20427C12[] = {
  0,
  ABISELECT(-288,-240),
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C8[0]),
};
static  VTT_ENTRY vtt_S20427C12[] = {
  {&(_ZTV9S20427C12[9]),  9,31},
  {&(_tg__ZTV9S20427C13__9S20427C12[6]),  6,8},
  {&(_tg__ZTV9S20427C149S20427C13__9S20427C12[6]),  6,8},
  {&(_tg__ZTV9S20427C15__9S20427C149S20427C13__9S20427C12[6]),  6,8},
  {&(_tg__ZTV9S20427C149S20427C13__9S20427C12[6]),  6,8},
  {&(_tg__ZTV9S20427C15__9S20427C13__9S20427C12[6]),  6,8},
  {&(_tg__ZTV9S20427C13__9S20427C12[6]),  6,8},
  {&(_tg__ZTV8S20427C3__9S20427C12[5]),  5,5},
  {&(_tg__ZTV8S20427C78S20427C3__9S20427C12[3]),  3,3},
  {&(_tg__ZTV8S20427C8__8S20427C3__9S20427C12[4]),  4,4},
  {&(_tg__ZTV8S20427C7__A1__9S20427C12[3]),  3,3},
  {&(_ZTV9S20427C12[25]),  25,31},
  {&(_ZTV9S20427C12[9]),  9,31},
  {&(_ZTV9S20427C12[16]),  16,31},
  {&(_ZTV9S20427C12[31]),  31,31},
  {&(_ZTV9S20427C12[19]),  19,31},
  {&(_tg__ZTV9S20427C15__9S20427C12[5]),  5,7},
  {&(_tg__ZTV9S20427C16__9S20427C15__9S20427C12[4]),  4,4},
  {&(_tg__ZTV9S20427C16__9S20427C12[4]),  4,4},
  {&(_tg__ZTV8S20427C8__9S20427C12[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20427C12[];
extern  VTBL_ENTRY _ZTV9S20427C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C12[];
static VTBL_ENTRY alt_thunk_names189[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20427C13D0Ev,_ZTv0_n24_N9S20427C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20427C13D0Ev,_ZThn184_N9S20427C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20427C13D1Ev,_ZTv0_n24_N9S20427C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20427C13D1Ev,_ZThn184_N9S20427C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20427C14D0Ev,_ZTv0_n24_N9S20427C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20427C14D0Ev,_ZThn184_N9S20427C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20427C14D1Ev,_ZTv0_n24_N9S20427C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20427C14D1Ev,_ZThn184_N9S20427C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20427C12D0Ev,_ZTv0_n24_N9S20427C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20427C12D0Ev,_ZThn184_N9S20427C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20427C12D1Ev,_ZTv0_n24_N9S20427C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn224_N9S20427C12D1Ev,_ZThn184_N9S20427C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20427C12 = {  "S20427C12", // class name
  bases_S20427C12, 28,
  &(vtc_S20427C12[0]), // expected_vtbl_contents
  &(vtt_S20427C12[0]), // expected_vtt_contents
  ABISELECT(312,256), // object size
  NSPAIRA(_ZTI9S20427C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S20427C12),31, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20427C12),20, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names189,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20427C2  : virtual S20427C3 , virtual S20427C4 , virtual S20427C10 , S2264C28 , virtual S20427C12 {
  int s20427c2f0;
  virtual  ~S20427C2(); // _ZN8S20427C2D2Ev
  S20427C2(); // tgen
};
//SIG(-1 S20427C2) C1{ VBC2{ BC3{ BC4{ m FL Fc:0} BC5{ m}} BC6{ VBC5 BC4} VBC7{ VBC8{ m} BC3 VBC5 Fi} Fp} VBC3 VBC9{ VBC10{ VBC4} Fi:1} BC8 VBC11{ BC12{ VBC3 BC13{ VBC14{ VBC15{ VBC3 VBC4 BC5} BC16{ BC5 BC3 vd FC17{}} Fi[8]} vd} vd FC14[2]} BC2 BC6} vd Fi}


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

static void Test_S20427C2()
{
  extern Class_Descriptor cd_S20427C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(48,75)];
    init_test(&cd_S20427C2, buf);
    S20427C2 *dp, &lv = *(dp=new (buf) S20427C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(376,296), "sizeof(S20427C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20427C2)");
    /*is_ambiguous_... S20427C2::S20427C3 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20427C4*)(S20427C3*), ABISELECT(32,20), "S20427C2");
    /*is_ambiguous_... S20427C2::S20427C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C4*)(S20427C3*), ABISELECT(32,20), "S20427C2");
    /*is_ambiguous_... S20427C2::S20427C3 */ AMB_check_base_class_offset(lv, (S20427C4*)(S20427C3*), ABISELECT(32,20), "S20427C2");
    /*is_ambiguous_... S20427C2::S20427C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C7*)(S20427C3*), 0, "S20427C2");
    /*is_ambiguous_... S20427C8::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C8*), 0, "S20427C2");
    check_base_class_offset(lv, (S2264C38*)(S20427C7*)(S20427C3*)(S20427C12*), 0, "S20427C2");
    /*is_ambiguous_... S20427C12::S20427C7 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C7*)(S20427C12*), 0, "S20427C2");
    /*is_ambiguous_... S20427C2::S20427C3 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20427C7*)(S20427C3*), ABISELECT(24,12), "S20427C2");
    /*is_ambiguous_... S20427C2::S20427C3 */ AMB_check_base_class_offset(lv, (S20427C7*)(S20427C3*), ABISELECT(16,8), "S20427C2");
    check_base_class_offset(lv, (S2264C28*)(S20427C8*), ABISELECT(68,48), "S20427C2");
    check_base_class_offset(lv, (S20955C5*)(S20427C4*)(S20427C8*), ABISELECT(56,36), "S20427C2");
    check_base_class_offset(lv, (S2264C38*)(S20427C4*)(S20427C8*), ABISELECT(56,36), "S20427C2");
    check_base_class_offset(lv, (S20427C4*)(S20427C8*), ABISELECT(56,36), "S20427C2");
    /*is_ambiguous_... S20427C2::S20427C3 */ AMB_check_base_class_offset(lv, (S20427C8*)(S20427C3*), ABISELECT(48,32), "S20427C2");
    check_base_class_offset(lv, (S20427C8*)(S20427C3*)(S20427C12*), ABISELECT(48,32), "S20427C2");
    /*is_ambiguous_... S20427C2::S20427C3 */ AMB_check_base_class_offset(lv, (S20427C3*), ABISELECT(16,8), "S20427C2");
    /*is_ambiguous_... S20427C2::S20427C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20427C4*), ABISELECT(72,48), "S20427C2");
    /*is_ambiguous_... S20427C2::S20427C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C4*), ABISELECT(72,48), "S20427C2");
    /*is_ambiguous_... S20427C2::S20427C4 */ AMB_check_base_class_offset(lv, (S20427C4*), ABISELECT(72,48), "S20427C2");
    /*is_ambiguous_... S20427C13::S20427C4 */ AMB_check_base_class_offset(lv, (S20427C4*)(S20427C13*)(S20427C12*), ABISELECT(72,48), "S20427C2");
    check_base_class_offset(lv, (S20427C4*)(S20427C16*), ABISELECT(72,48), "S20427C2");
    check_base_class_offset(lv, (S20955C5*)(S20427C11*), ABISELECT(96,64), "S20427C2");
    /*is_ambiguous_... S20427C16::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20427C16*), ABISELECT(96,64), "S20427C2");
    check_base_class_offset(lv, (S20427C11*)(S20427C10*), 0, "S20427C2");
    check_base_class_offset(lv, (S20427C10*), ABISELECT(80,56), "S20427C2");
    /*is_ambiguous_... S20427C2::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), 0, "S20427C2");
    /*is_ambiguous_... S20427C16::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C16*), ABISELECT(104,72), "S20427C2");
    check_base_class_offset(lv, (S20427C16*)(S20427C15*), ABISELECT(104,72), "S20427C2");
    /*is_ambiguous_... S20427C17::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C17*)(S20427C15*), ABISELECT(320,248), "S20427C2");
    check_base_class_offset(lv, (S20955C5*)(S20427C4*)(S20427C17*)(S20427C15*), ABISELECT(328,252), "S20427C2");
    check_base_class_offset(lv, (S2264C38*)(S20427C4*)(S20427C17*)(S20427C15*), ABISELECT(328,252), "S20427C2");
    check_base_class_offset(lv, (S20427C4*)(S20427C17*)(S20427C15*), ABISELECT(328,252), "S20427C2");
    check_base_class_offset(lv, (S20427C17*)(S20427C15*), ABISELECT(320,248), "S20427C2");
    check_base_class_offset(lv, (S20427C15*)(S20427C14*)(S20427C13*)(S20427C12*), ABISELECT(320,248), "S20427C2");
    check_base_class_offset(lv, (S20427C14*)(S20427C13*)(S20427C12*), ABISELECT(104,72), "S20427C2");
    check_base_class_offset(lv, (S20427C13*)(S20427C12*), ABISELECT(104,72), "S20427C2");
    /*is_ambiguous_... S20427C3::S20427C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20427C4*)(S20427C3*)(S20427C12*), ABISELECT(288,224), "S20427C2");
    /*is_ambiguous_... S20427C3::S20427C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C4*)(S20427C3*)(S20427C12*), ABISELECT(288,224), "S20427C2");
    /*is_ambiguous_... S20427C3::S20427C4 */ AMB_check_base_class_offset(lv, (S20427C4*)(S20427C3*)(S20427C12*), ABISELECT(288,224), "S20427C2");
    check_base_class_offset(lv, (S20955C5*)(S20427C7*)(S20427C3*)(S20427C12*), ABISELECT(280,216), "S20427C2");
    check_base_class_offset(lv, (S20427C7*)(S20427C3*)(S20427C12*), ABISELECT(272,212), "S20427C2");
    check_base_class_offset(lv, (S20427C3*)(S20427C12*), ABISELECT(272,212), "S20427C2");
    /*is_ambiguous_... S20427C12::S20427C7 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20427C7*)(S20427C12*), ABISELECT(312,240), "S20427C2");
    /*is_ambiguous_... S20427C12::S20427C7 */ AMB_check_base_class_offset(lv, (S20427C7*)(S20427C12*), ABISELECT(304,236), "S20427C2");
    check_base_class_offset(lv, (S20427C12*), ABISELECT(104,72), "S20427C2");
    check_field_offset(lv, s20427c2f0, ABISELECT(8,4), "S20427C2.s20427c2f0");
    test_class_info(&lv, &cd_S20427C2);
    dp->~S20427C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20427C2(Test_S20427C2, "S20427C2", ABISELECT(376,296));

#else // __cplusplus

extern void _ZN8S20427C2C1Ev();
extern void _ZN8S20427C2D2Ev();
Name_Map name_map_S20427C2[] = {
  NSPAIR(_ZN8S20427C2C1Ev),
  NSPAIR(_ZN8S20427C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20427C7;
extern VTBL_ENTRY _ZTI8S20427C7[];
extern  VTBL_ENTRY _ZTV8S20427C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
extern Class_Descriptor cd_S20427C8;
extern VTBL_ENTRY _ZTI8S20427C8[];
extern  VTBL_ENTRY _ZTV8S20427C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C8[];
extern Class_Descriptor cd_S20427C3;
extern VTBL_ENTRY _ZTI8S20427C3[];
extern  VTBL_ENTRY _ZTV8S20427C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C3[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20427C11;
extern VTBL_ENTRY _ZTI9S20427C11[];
extern  VTBL_ENTRY _ZTV9S20427C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C11[];
extern Class_Descriptor cd_S20427C10;
extern VTBL_ENTRY _ZTI9S20427C10[];
extern  VTBL_ENTRY _ZTV9S20427C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C10[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C16;
extern VTBL_ENTRY _ZTI9S20427C16[];
extern  VTBL_ENTRY _ZTV9S20427C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C16[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
extern Class_Descriptor cd_S20427C17;
extern VTBL_ENTRY _ZTI9S20427C17[];
extern  VTBL_ENTRY _ZTV9S20427C17[];
extern Class_Descriptor cd_S20427C15;
extern VTBL_ENTRY _ZTI9S20427C15[];
extern  VTBL_ENTRY _ZTV9S20427C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C15[];
extern Class_Descriptor cd_S20427C14;
extern VTBL_ENTRY _ZTI9S20427C14[];
extern  VTBL_ENTRY _ZTV9S20427C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C14[];
extern Class_Descriptor cd_S20427C13;
extern VTBL_ENTRY _ZTI9S20427C13[];
extern  VTBL_ENTRY _ZTV9S20427C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C13[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20427C7;
extern VTBL_ENTRY _ZTI8S20427C7[];
extern  VTBL_ENTRY _ZTV8S20427C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C7[];
extern Class_Descriptor cd_S20427C3;
extern VTBL_ENTRY _ZTI8S20427C3[];
extern  VTBL_ENTRY _ZTV8S20427C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C3[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20427C7;
extern VTBL_ENTRY _ZTI8S20427C7[];
extern  VTBL_ENTRY _ZTV8S20427C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C7[];
extern Class_Descriptor cd_S20427C12;
extern VTBL_ENTRY _ZTI9S20427C12[];
extern  VTBL_ENTRY _ZTV9S20427C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C12[];
static Base_Class bases_S20427C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(32,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(32,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
    2, //immediately_derived
  0, 0},
  {&cd_S20427C4,    ABISELECT(32,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
    11, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    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_S20427C7,    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
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(68,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
    10, //immediately_derived
  0, 1},
  {&cd_S20955C5,    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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    9, //immediately_derived
  0, 0},
  {&cd_S20427C4,    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
    10, //immediately_derived
  0, 0},
  {&cd_S20427C8,    ABISELECT(48,32), //bcp->offset
    20, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20427C3,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    5, //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_S20955C5,    ABISELECT(72,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
    14, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(72,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
    14, //immediately_derived
  0, 0},
  {&cd_S20427C4,    ABISELECT(72,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
  1, 1},
  {&cd_S20955C5,    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
    16, //immediately_derived
  0, 1},
  {&cd_S20427C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S20427C10,    ABISELECT(80,56), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C38,    ABISELECT(104,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
    20, //immediately_derived
  0, 0},
  {&cd_S20427C16,    ABISELECT(104,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(320,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    ABISELECT(328,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(328,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20427C4,    ABISELECT(328,252), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20427C17,    ABISELECT(320,248), //bcp->offset
    -1, //bcp->virtual_function_table_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
    26, //immediately_derived
  0, 0},
  {&cd_S20427C15,    ABISELECT(320,248), //bcp->offset
    48, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S20427C14,    ABISELECT(104,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20427C13,    ABISELECT(104,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(288,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(288,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20427C4,    ABISELECT(288,224), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(280,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20427C7,    ABISELECT(272,212), //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
    11, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S20427C3,    ABISELECT(272,212), //bcp->offset
    40, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(312,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S20427C7,    ABISELECT(304,236), //bcp->offset
    45, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S20427C12,    ABISELECT(104,72), //bcp->offset
    28, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20427C2[];
extern void _ZN8S20427C2D1Ev();
extern void _ZN8S20427C2D0Ev();
extern void ABISELECT(_ZTv0_n80_N8S20427C2D1Ev,_ZTv0_n40_N8S20427C2D1Ev)();
extern void ABISELECT(_ZThn104_N8S20427C2D1Ev,_ZThn72_N8S20427C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20427C2D0Ev,_ZTv0_n40_N8S20427C2D0Ev)();
extern void ABISELECT(_ZThn104_N8S20427C2D0Ev,_ZThn72_N8S20427C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20427C2D1Ev,_ZTv0_n24_N8S20427C2D1Ev)();
extern void ABISELECT(_ZThn320_N8S20427C2D1Ev,_ZThn248_N8S20427C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20427C2D0Ev,_ZTv0_n24_N8S20427C2D0Ev)();
extern void ABISELECT(_ZThn320_N8S20427C2D0Ev,_ZThn248_N8S20427C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20427C2[] = {
  ABISELECT(104,72),
  ABISELECT(320,248),
  ABISELECT(104,72),
  0,
  ABISELECT(80,56),
  ABISELECT(72,48),
  ABISELECT(68,48),
  ABISELECT(48,32),
  0,
  ABISELECT(16,8),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C2[0]),
  (VTBL_ENTRY)&_ZN8S20427C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20427C2D0Ev,
  ABISELECT(52,40),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20427C2[0]),
  ABISELECT(-48,-32),
  ABISELECT(20,16),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20427C2[0]),
  ABISELECT(-80,-56),
  ABISELECT(16,8),
  ABISELECT(-80,-56),
  (VTBL_ENTRY)&(_ZTI8S20427C2[0]),
  ABISELECT(-104,-72),
  ABISELECT(-36,-24),
  ABISELECT(-56,-40),
  ABISELECT(-104,-72),
  0,
  ABISELECT(216,176),
  -8,
  ABISELECT(-32,-24),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI8S20427C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20427C2D1Ev,_ZTv0_n40_N8S20427C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20427C2D0Ev,_ZTv0_n40_N8S20427C2D0Ev),
  ABISELECT(-204,-164),
  ABISELECT(-224,-180),
  ABISELECT(-272,-212),
  ABISELECT(-272,-212),
  (VTBL_ENTRY)&(_ZTI8S20427C2[0]),
  ABISELECT(-304,-236),
  ABISELECT(-304,-236),
  (VTBL_ENTRY)&(_ZTI8S20427C2[0]),
  ABISELECT(-320,-248),
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  ABISELECT(-320,-248),
  (VTBL_ENTRY)&(_ZTI8S20427C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20427C2D1Ev,_ZTv0_n24_N8S20427C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20427C2D0Ev,_ZTv0_n24_N8S20427C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S20427C2[];
static  VTBL_ENTRY _tg__ZTV8S20427C3__8S20427C2[] = {
  ABISELECT(52,40),
  ABISELECT(32,24),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C78S20427C3__8S20427C2[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C8__8S20427C3__8S20427C2[] = {
  ABISELECT(-48,-32),
  ABISELECT(20,16),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S20427C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C8__8S20427C2[] = {
  ABISELECT(-48,-32),
  ABISELECT(20,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20427C10__8S20427C2[] = {
  ABISELECT(-80,-56),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20427C11__9S20427C10__8S20427C2[] = {
  ABISELECT(96,64),
  ABISELECT(80,56),
  (VTBL_ENTRY)&(_ZTI9S20427C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20427C11__8S20427C2[] = {
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C11[0]),
};
extern void _ZN9S20427C12D1Ev();
extern void _ZN9S20427C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20427C12__8S20427C2[] = {
  ABISELECT(-36,-24),
  ABISELECT(-56,-40),
  ABISELECT(-104,-72),
  0,
  ABISELECT(216,176),
  -8,
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C12[0]),
  (VTBL_ENTRY)&_ZN9S20427C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20427C12D0Ev,
};
extern void _ZN9S20427C13D1Ev();
extern void _ZN9S20427C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20427C139S20427C12__8S20427C2[] = {
  0,
  ABISELECT(216,176),
  -8,
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C13[0]),
  (VTBL_ENTRY)&_ZN9S20427C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20427C13D0Ev,
};
extern void _ZN9S20427C14D1Ev();
extern void _ZN9S20427C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20427C149S20427C139S20427C12__8S20427C2[] = {
  0,
  ABISELECT(216,176),
  -8,
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C14[0]),
  (VTBL_ENTRY)&_ZN9S20427C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20427C14D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20427C14D1Ev,_ZTv0_n24_N9S20427C14D1Ev)();
extern void ABISELECT(_ZThn216_N9S20427C14D1Ev,_ZThn176_N9S20427C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20427C14D0Ev,_ZTv0_n24_N9S20427C14D0Ev)();
extern void ABISELECT(_ZThn216_N9S20427C14D0Ev,_ZThn176_N9S20427C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20427C15__9S20427C149S20427C139S20427C12__8S20427C2[] = {
  ABISELECT(-216,-176),
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  ABISELECT(-216,-176),
  (VTBL_ENTRY)&(_ZTI9S20427C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20427C14D1Ev,_ZTv0_n24_N9S20427C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20427C14D0Ev,_ZTv0_n24_N9S20427C14D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20427C13D1Ev,_ZTv0_n24_N9S20427C13D1Ev)();
extern void ABISELECT(_ZThn216_N9S20427C13D1Ev,_ZThn176_N9S20427C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20427C13D0Ev,_ZTv0_n24_N9S20427C13D0Ev)();
extern void ABISELECT(_ZThn216_N9S20427C13D0Ev,_ZThn176_N9S20427C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20427C15__9S20427C139S20427C12__8S20427C2[] = {
  ABISELECT(-216,-176),
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  ABISELECT(-216,-176),
  (VTBL_ENTRY)&(_ZTI9S20427C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20427C13D1Ev,_ZTv0_n24_N9S20427C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20427C13D0Ev,_ZTv0_n24_N9S20427C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20427C39S20427C12__A1__8S20427C2[] = {
  ABISELECT(-204,-164),
  ABISELECT(-224,-180),
  ABISELECT(-272,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C78S20427C39S20427C12__A1__8S20427C2[] = {
  ABISELECT(-272,-212),
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C8__8S20427C39S20427C12__A1__8S20427C2[] = {
  ABISELECT(-48,-32),
  ABISELECT(20,16),
  ABISELECT(224,180),
  (VTBL_ENTRY)&(_ZTI8S20427C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C79S20427C12__A2__8S20427C2[] = {
  ABISELECT(-304,-236),
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20427C12D1Ev,_ZTv0_n24_N9S20427C12D1Ev)();
extern void ABISELECT(_ZThn216_N9S20427C12D1Ev,_ZThn176_N9S20427C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20427C12D0Ev,_ZTv0_n24_N9S20427C12D0Ev)();
extern void ABISELECT(_ZThn216_N9S20427C12D0Ev,_ZThn176_N9S20427C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20427C15__9S20427C12__8S20427C2[] = {
  ABISELECT(-216,-176),
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  ABISELECT(-216,-176),
  (VTBL_ENTRY)&(_ZTI9S20427C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20427C12D1Ev,_ZTv0_n24_N9S20427C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20427C12D0Ev,_ZTv0_n24_N9S20427C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20427C3__9S20427C12__8S20427C2[] = {
  ABISELECT(-204,-164),
  ABISELECT(-224,-180),
  ABISELECT(-272,-212),
  ABISELECT(-168,-140),
  (VTBL_ENTRY)&(_ZTI9S20427C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C8__9S20427C12__8S20427C2[] = {
  ABISELECT(-48,-32),
  ABISELECT(20,16),
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI9S20427C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C7__A1__9S20427C12__8S20427C2[] = {
  ABISELECT(-304,-236),
  ABISELECT(-200,-164),
  (VTBL_ENTRY)&(_ZTI9S20427C12[0]),
};
extern void _ZN9S20427C15D1Ev();
extern void _ZN9S20427C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20427C15__8S20427C2[] = {
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C15[0]),
  (VTBL_ENTRY)&_ZN9S20427C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20427C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20427C16__9S20427C15__8S20427C2[] = {
  -8,
  ABISELECT(-32,-24),
  ABISELECT(216,176),
  (VTBL_ENTRY)&(_ZTI9S20427C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20427C16__8S20427C2[] = {
  -8,
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C16[0]),
};
static  VTT_ENTRY vtt_S20427C2[] = {
  {&(_ZTV8S20427C2[13]),  13,56},
  {&(_ZTV8S20427C2[20]),  20,56},
  {&(_ZTV8S20427C2[24]),  24,56},
  {&(_ZTV8S20427C2[28]),  28,56},
  {&(_ZTV8S20427C2[13]),  13,56},
  {&(_ZTV8S20427C2[38]),  38,56},
  {&(_ZTV8S20427C2[54]),  54,56},
  {&(_ZTV8S20427C2[38]),  38,56},
  {&(_ZTV8S20427C2[45]),  45,56},
  {&(_ZTV8S20427C2[48]),  48,56},
  {&(_tg__ZTV8S20427C3__8S20427C2[5]),  5,5},
  {&(_tg__ZTV8S20427C78S20427C3__8S20427C2[3]),  3,3},
  {&(_tg__ZTV8S20427C8__8S20427C3__8S20427C2[4]),  4,4},
  {&(_tg__ZTV8S20427C8__8S20427C2[4]),  4,4},
  {&(_tg__ZTV9S20427C10__8S20427C2[4]),  4,4},
  {&(_tg__ZTV9S20427C11__9S20427C10__8S20427C2[3]),  3,3},
  {&(_tg__ZTV9S20427C11__8S20427C2[3]),  3,3},
  {&(_tg__ZTV9S20427C12__8S20427C2[9]),  9,11},
  {&(_tg__ZTV9S20427C139S20427C12__8S20427C2[6]),  6,8},
  {&(_tg__ZTV9S20427C149S20427C139S20427C12__8S20427C2[6]),  6,8},
  {&(_tg__ZTV9S20427C15__9S20427C149S20427C139S20427C12__8S20427C2[6]),  6,8},
  {&(_tg__ZTV9S20427C149S20427C139S20427C12__8S20427C2[6]),  6,8},
  {&(_tg__ZTV9S20427C15__9S20427C139S20427C12__8S20427C2[6]),  6,8},
  {&(_tg__ZTV9S20427C139S20427C12__8S20427C2[6]),  6,8},
  {&(_tg__ZTV8S20427C39S20427C12__A1__8S20427C2[5]),  5,5},
  {&(_tg__ZTV8S20427C78S20427C39S20427C12__A1__8S20427C2[3]),  3,3},
  {&(_tg__ZTV8S20427C8__8S20427C39S20427C12__A1__8S20427C2[4]),  4,4},
  {&(_tg__ZTV8S20427C79S20427C12__A2__8S20427C2[3]),  3,3},
  {&(_tg__ZTV9S20427C15__9S20427C12__8S20427C2[6]),  6,8},
  {&(_tg__ZTV9S20427C12__8S20427C2[9]),  9,11},
  {&(_tg__ZTV8S20427C3__9S20427C12__8S20427C2[5]),  5,5},
  {&(_tg__ZTV8S20427C8__9S20427C12__8S20427C2[4]),  4,4},
  {&(_tg__ZTV8S20427C7__A1__9S20427C12__8S20427C2[3]),  3,3},
  {&(_tg__ZTV9S20427C15__8S20427C2[5]),  5,7},
  {&(_tg__ZTV9S20427C16__9S20427C15__8S20427C2[4]),  4,4},
  {&(_tg__ZTV9S20427C16__8S20427C2[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20427C2[];
extern  VTBL_ENTRY _ZTV8S20427C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C2[];
static VTBL_ENTRY alt_thunk_names190[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20427C12D0Ev,_ZTv0_n24_N9S20427C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S20427C12D0Ev,_ZThn176_N9S20427C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20427C12D1Ev,_ZTv0_n24_N9S20427C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S20427C12D1Ev,_ZThn176_N9S20427C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20427C13D0Ev,_ZTv0_n24_N9S20427C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S20427C13D0Ev,_ZThn176_N9S20427C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20427C13D1Ev,_ZTv0_n24_N9S20427C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S20427C13D1Ev,_ZThn176_N9S20427C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20427C14D0Ev,_ZTv0_n24_N9S20427C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S20427C14D0Ev,_ZThn176_N9S20427C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20427C14D1Ev,_ZTv0_n24_N9S20427C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S20427C14D1Ev,_ZThn176_N9S20427C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20427C2D0Ev,_ZTv0_n24_N8S20427C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S20427C2D0Ev,_ZThn248_N8S20427C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20427C2D1Ev,_ZTv0_n24_N8S20427C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S20427C2D1Ev,_ZThn248_N8S20427C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20427C2D0Ev,_ZTv0_n40_N8S20427C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20427C2D0Ev,_ZThn72_N8S20427C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20427C2D1Ev,_ZTv0_n40_N8S20427C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20427C2D1Ev,_ZThn72_N8S20427C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20427C2 = {  "S20427C2", // class name
  bases_S20427C2, 38,
  &(vtc_S20427C2[0]), // expected_vtbl_contents
  &(vtt_S20427C2[0]), // expected_vtt_contents
  ABISELECT(376,296), // object size
  NSPAIRA(_ZTI8S20427C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20427C2),56, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20427C2),36, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names190,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20427C1  : virtual S20427C2 , S20427C3 {
  __tsi64 s20427c1f0;
  virtual  ~S20427C1(); // _ZN8S20427C1D2Ev
  S20427C1(); // tgen
};
//SIG(1 S20427C1) C1{ VBC2{ VBC3{ BC4{ BC5{ m FL Fc:0} BC6{ m}} BC7{ VBC6 BC5} VBC8{ VBC9{ m} BC4 VBC6 Fi} Fp} VBC4 VBC10{ VBC11{ VBC5} Fi:1} BC9 VBC12{ BC13{ VBC4 BC14{ VBC15{ VBC16{ VBC4 VBC5 BC6} BC17{ BC6 BC4 vd FC18{}} Fi[8]} vd} vd FC15[2]} BC3 BC7} vd Fi} BC3 vd FL}


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

static void Test_S20427C1()
{
  extern Class_Descriptor cd_S20427C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(53,83)];
    init_test(&cd_S20427C1, buf);
    S20427C1 *dp, &lv = *(dp=new (buf) S20427C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(416,328), "sizeof(S20427C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20427C1)");
    /*is_ambiguous_... S20427C1::S20427C3 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20427C4*)(S20427C3*), ABISELECT(72,52), "S20427C1");
    /*is_ambiguous_... S20427C1::S20427C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C4*)(S20427C3*), ABISELECT(72,52), "S20427C1");
    /*is_ambiguous_... S20427C1::S20427C3 */ AMB_check_base_class_offset(lv, (S20427C4*)(S20427C3*), ABISELECT(72,52), "S20427C1");
    /*is_ambiguous_... S20427C1::S20427C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C7*)(S20427C3*), 0, "S20427C1");
    /*is_ambiguous_... S20427C8::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C8*), 0, "S20427C1");
    check_base_class_offset(lv, (S2264C38*)(S20427C7*)(S20427C3*)(S20427C12*), 0, "S20427C1");
    /*is_ambiguous_... S20427C12::S20427C7 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C7*)(S20427C12*), 0, "S20427C1");
    /*is_ambiguous_... S20427C1::S20427C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C7*)(S20427C3*), 0, "S20427C1");
    /*is_ambiguous_... S20427C1::S20427C3 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20427C7*)(S20427C3*), ABISELECT(64,44), "S20427C1");
    /*is_ambiguous_... S20427C1::S20427C3 */ AMB_check_base_class_offset(lv, (S20427C7*)(S20427C3*), ABISELECT(56,40), "S20427C1");
    check_base_class_offset(lv, (S2264C28*)(S20427C8*), 0, "S20427C1");
    check_base_class_offset(lv, (S20955C5*)(S20427C4*)(S20427C8*), ABISELECT(96,68), "S20427C1");
    check_base_class_offset(lv, (S2264C38*)(S20427C4*)(S20427C8*), ABISELECT(96,68), "S20427C1");
    check_base_class_offset(lv, (S20427C4*)(S20427C8*), ABISELECT(96,68), "S20427C1");
    /*is_ambiguous_... S20427C1::S20427C3 */ AMB_check_base_class_offset(lv, (S20427C8*)(S20427C3*), ABISELECT(88,64), "S20427C1");
    check_base_class_offset(lv, (S20427C8*)(S20427C3*)(S20427C12*), ABISELECT(88,64), "S20427C1");
    /*is_ambiguous_... S20427C1::S20427C3 */ AMB_check_base_class_offset(lv, (S20427C8*)(S20427C3*), ABISELECT(88,64), "S20427C1");
    /*is_ambiguous_... S20427C2::S20427C3 */ AMB_check_base_class_offset(lv, (S20427C3*)(S20427C2*), ABISELECT(56,40), "S20427C1");
    /*is_ambiguous_... S20427C1::S20427C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20427C4*), ABISELECT(112,80), "S20427C1");
    /*is_ambiguous_... S20427C1::S20427C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C4*), ABISELECT(112,80), "S20427C1");
    /*is_ambiguous_... S20427C2::S20427C4 */ AMB_check_base_class_offset(lv, (S20427C4*)(S20427C2*), ABISELECT(112,80), "S20427C1");
    /*is_ambiguous_... S20427C13::S20427C4 */ AMB_check_base_class_offset(lv, (S20427C4*)(S20427C13*)(S20427C12*), ABISELECT(112,80), "S20427C1");
    check_base_class_offset(lv, (S20427C4*)(S20427C16*), ABISELECT(112,80), "S20427C1");
    check_base_class_offset(lv, (S20955C5*)(S20427C11*), ABISELECT(136,96), "S20427C1");
    /*is_ambiguous_... S20427C16::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20427C16*), ABISELECT(136,96), "S20427C1");
    check_base_class_offset(lv, (S20427C11*)(S20427C10*), ABISELECT(40,32), "S20427C1");
    check_base_class_offset(lv, (S20427C10*)(S20427C2*), ABISELECT(120,88), "S20427C1");
    /*is_ambiguous_... S20427C2::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20427C2*), ABISELECT(40,32), "S20427C1");
    /*is_ambiguous_... S20427C16::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C16*), ABISELECT(144,104), "S20427C1");
    check_base_class_offset(lv, (S20427C16*)(S20427C15*), ABISELECT(144,104), "S20427C1");
    /*is_ambiguous_... S20427C17::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C17*)(S20427C15*), ABISELECT(360,280), "S20427C1");
    check_base_class_offset(lv, (S20955C5*)(S20427C4*)(S20427C17*)(S20427C15*), ABISELECT(368,284), "S20427C1");
    check_base_class_offset(lv, (S2264C38*)(S20427C4*)(S20427C17*)(S20427C15*), ABISELECT(368,284), "S20427C1");
    check_base_class_offset(lv, (S20427C4*)(S20427C17*)(S20427C15*), ABISELECT(368,284), "S20427C1");
    check_base_class_offset(lv, (S20427C17*)(S20427C15*), ABISELECT(360,280), "S20427C1");
    check_base_class_offset(lv, (S20427C15*)(S20427C14*)(S20427C13*)(S20427C12*), ABISELECT(360,280), "S20427C1");
    check_base_class_offset(lv, (S20427C14*)(S20427C13*)(S20427C12*), ABISELECT(144,104), "S20427C1");
    check_base_class_offset(lv, (S20427C13*)(S20427C12*), ABISELECT(144,104), "S20427C1");
    /*is_ambiguous_... S20427C3::S20427C4 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20427C4*)(S20427C3*)(S20427C12*), ABISELECT(328,256), "S20427C1");
    /*is_ambiguous_... S20427C3::S20427C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C4*)(S20427C3*)(S20427C12*), ABISELECT(328,256), "S20427C1");
    /*is_ambiguous_... S20427C3::S20427C4 */ AMB_check_base_class_offset(lv, (S20427C4*)(S20427C3*)(S20427C12*), ABISELECT(328,256), "S20427C1");
    check_base_class_offset(lv, (S20955C5*)(S20427C7*)(S20427C3*)(S20427C12*), ABISELECT(320,248), "S20427C1");
    check_base_class_offset(lv, (S20427C7*)(S20427C3*)(S20427C12*), ABISELECT(312,244), "S20427C1");
    check_base_class_offset(lv, (S20427C3*)(S20427C12*), ABISELECT(312,244), "S20427C1");
    /*is_ambiguous_... S20427C12::S20427C7 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20427C7*)(S20427C12*), ABISELECT(352,272), "S20427C1");
    /*is_ambiguous_... S20427C12::S20427C7 */ AMB_check_base_class_offset(lv, (S20427C7*)(S20427C12*), ABISELECT(344,268), "S20427C1");
    check_base_class_offset(lv, (S20427C12*)(S20427C2*), ABISELECT(144,104), "S20427C1");
    check_base_class_offset(lv, (S20427C2*), ABISELECT(40,32), "S20427C1");
    /*is_ambiguous_... S20427C1::S20427C3 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20427C4*)(S20427C3*), ABISELECT(16,12), "S20427C1");
    /*is_ambiguous_... S20427C1::S20427C3 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20427C4*)(S20427C3*), ABISELECT(16,12), "S20427C1");
    /*is_ambiguous_... S20427C1::S20427C3 */ AMB_check_base_class_offset(lv, (S20427C4*)(S20427C3*), ABISELECT(16,12), "S20427C1");
    /*is_ambiguous_... S20427C1::S20427C3 */ AMB_check_base_class_offset(lv, (S20955C5*)(S20427C7*)(S20427C3*), ABISELECT(8,4), "S20427C1");
    /*is_ambiguous_... S20427C1::S20427C3 */ AMB_check_base_class_offset(lv, (S20427C7*)(S20427C3*), 0, "S20427C1");
    /*is_ambiguous_... S20427C1::S20427C3 */ AMB_check_base_class_offset(lv, (S20427C3*), 0, "S20427C1");
    check_field_offset(lv, s20427c1f0, ABISELECT(32,24), "S20427C1.s20427c1f0");
    test_class_info(&lv, &cd_S20427C1);
    dp->~S20427C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20427C1(Test_S20427C1, "S20427C1", ABISELECT(416,328));

#else // __cplusplus

extern void _ZN8S20427C1C1Ev();
extern void _ZN8S20427C1D2Ev();
Name_Map name_map_S20427C1[] = {
  NSPAIR(_ZN8S20427C1C1Ev),
  NSPAIR(_ZN8S20427C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20427C7;
extern VTBL_ENTRY _ZTI8S20427C7[];
extern  VTBL_ENTRY _ZTV8S20427C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
extern Class_Descriptor cd_S20427C8;
extern VTBL_ENTRY _ZTI8S20427C8[];
extern  VTBL_ENTRY _ZTV8S20427C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C8[];
extern Class_Descriptor cd_S20427C3;
extern VTBL_ENTRY _ZTI8S20427C3[];
extern  VTBL_ENTRY _ZTV8S20427C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C3[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20427C11;
extern VTBL_ENTRY _ZTI9S20427C11[];
extern  VTBL_ENTRY _ZTV9S20427C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C11[];
extern Class_Descriptor cd_S20427C10;
extern VTBL_ENTRY _ZTI9S20427C10[];
extern  VTBL_ENTRY _ZTV9S20427C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C10[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C16;
extern VTBL_ENTRY _ZTI9S20427C16[];
extern  VTBL_ENTRY _ZTV9S20427C16[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C16[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
extern Class_Descriptor cd_S20427C17;
extern VTBL_ENTRY _ZTI9S20427C17[];
extern  VTBL_ENTRY _ZTV9S20427C17[];
extern Class_Descriptor cd_S20427C15;
extern VTBL_ENTRY _ZTI9S20427C15[];
extern  VTBL_ENTRY _ZTV9S20427C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C15[];
extern Class_Descriptor cd_S20427C14;
extern VTBL_ENTRY _ZTI9S20427C14[];
extern  VTBL_ENTRY _ZTV9S20427C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C14[];
extern Class_Descriptor cd_S20427C13;
extern VTBL_ENTRY _ZTI9S20427C13[];
extern  VTBL_ENTRY _ZTV9S20427C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C13[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20427C7;
extern VTBL_ENTRY _ZTI8S20427C7[];
extern  VTBL_ENTRY _ZTV8S20427C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C7[];
extern Class_Descriptor cd_S20427C3;
extern VTBL_ENTRY _ZTI8S20427C3[];
extern  VTBL_ENTRY _ZTV8S20427C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C3[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20427C7;
extern VTBL_ENTRY _ZTI8S20427C7[];
extern  VTBL_ENTRY _ZTV8S20427C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C7[];
extern Class_Descriptor cd_S20427C12;
extern VTBL_ENTRY _ZTI9S20427C12[];
extern  VTBL_ENTRY _ZTV9S20427C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20427C12[];
extern Class_Descriptor cd_S20427C2;
extern VTBL_ENTRY _ZTI8S20427C2[];
extern  VTBL_ENTRY _ZTV8S20427C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C2[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20427C4;
extern VTBL_ENTRY _ZTI8S20427C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S20427C7;
extern VTBL_ENTRY _ZTI8S20427C7[];
extern  VTBL_ENTRY _ZTV8S20427C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C7[];
extern Class_Descriptor cd_S20427C3;
extern VTBL_ENTRY _ZTI8S20427C3[];
extern  VTBL_ENTRY _ZTV8S20427C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C3[];
static Base_Class bases_S20427C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    2, //immediately_derived
  0, 0},
  {&cd_S20427C4,    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
    11, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    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
    5, //immediately_derived
  0, 0},
  {&cd_S20427C7,    ABISELECT(56,40), //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
    2, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    ABISELECT(96,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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(96,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
    9, //immediately_derived
  0, 0},
  {&cd_S20427C4,    ABISELECT(96,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
    10, //immediately_derived
  0, 0},
  {&cd_S20427C8,    ABISELECT(88,64), //bcp->offset
    37, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S20427C3,    ABISELECT(56,40), //bcp->offset
    32, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    38, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(112,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_S2264C38,    ABISELECT(112,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_S20427C4,    ABISELECT(112,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
    20, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(136,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
    16, //immediately_derived
  0, 1},
  {&cd_S20427C11,    ABISELECT(40,32), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S20427C10,    ABISELECT(120,88), //bcp->offset
    41, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    38, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(40,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
    38, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(144,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
    20, //immediately_derived
  0, 0},
  {&cd_S20427C16,    ABISELECT(144,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    50, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    26, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(360,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
    25, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(368,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(368,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20427C4,    ABISELECT(368,284), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20427C17,    ABISELECT(360,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
    7, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S20427C15,    ABISELECT(360,280), //bcp->offset
    65, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    48, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    27, //immediately_derived
  0, 1},
  {&cd_S20427C14,    ABISELECT(144,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    28, //immediately_derived
  0, 0},
  {&cd_S20427C13,    ABISELECT(144,104), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(328,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(328,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20427C4,    ABISELECT(328,256), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(320,248), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20427C7,    ABISELECT(312,244), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    34, //immediately_derived
  0, 0},
  {&cd_S20427C3,    ABISELECT(312,244), //bcp->offset
    57, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(352,272), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S20427C7,    ABISELECT(344,268), //bcp->offset
    62, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    37, //immediately_derived
  0, 0},
  {&cd_S20427C12,    ABISELECT(144,104), //bcp->offset
    45, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    14, //init_seq
    38, //immediately_derived
  0, 1},
  {&cd_S20427C2,    ABISELECT(40,32), //bcp->offset
    16, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    15, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20955C5,    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
    41, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    41, //immediately_derived
  0, 0},
  {&cd_S20427C4,    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
    44, //immediately_derived
  0, 0},
  {&cd_S20955C5,    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
    43, //immediately_derived
  0, 0},
  {&cd_S20427C7,    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
    16, //init_seq
    44, //immediately_derived
  0, 0},
  {&cd_S20427C3,    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
    17, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20427C1[];
extern void _ZN8S20427C1D1Ev();
extern void _ZN8S20427C1D0Ev();
extern void ABISELECT(_ZTv0_n112_N8S20427C1D1Ev,_ZTv0_n56_N8S20427C1D1Ev)();
extern void ABISELECT(_ZThn40_N8S20427C1D1Ev,_ZThn32_N8S20427C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n112_N8S20427C1D0Ev,_ZTv0_n56_N8S20427C1D0Ev)();
extern void ABISELECT(_ZThn40_N8S20427C1D0Ev,_ZThn32_N8S20427C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20427C1D1Ev,_ZTv0_n40_N8S20427C1D1Ev)();
extern void ABISELECT(_ZThn144_N8S20427C1D1Ev,_ZThn104_N8S20427C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20427C1D0Ev,_ZTv0_n40_N8S20427C1D0Ev)();
extern void ABISELECT(_ZThn144_N8S20427C1D0Ev,_ZThn104_N8S20427C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20427C1D1Ev,_ZTv0_n24_N8S20427C1D1Ev)();
extern void ABISELECT(_ZThn360_N8S20427C1D1Ev,_ZThn280_N8S20427C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20427C1D0Ev,_ZTv0_n24_N8S20427C1D0Ev)();
extern void ABISELECT(_ZThn360_N8S20427C1D0Ev,_ZThn280_N8S20427C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20427C1[] = {
  ABISELECT(144,104),
  ABISELECT(360,280),
  ABISELECT(144,104),
  ABISELECT(136,96),
  ABISELECT(40,32),
  ABISELECT(120,88),
  ABISELECT(112,80),
  ABISELECT(56,40),
  ABISELECT(40,32),
  0,
  ABISELECT(88,64),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C1[0]),
  (VTBL_ENTRY)&_ZN8S20427C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20427C1D0Ev,
  ABISELECT(-40,-32),
  ABISELECT(104,72),
  ABISELECT(320,248),
  ABISELECT(104,72),
  0,
  ABISELECT(80,56),
  ABISELECT(72,48),
  ABISELECT(-40,-32),
  ABISELECT(48,32),
  ABISELECT(-40,-32),
  ABISELECT(16,8),
  ABISELECT(96,64),
  ABISELECT(-40,-32),
  (VTBL_ENTRY)&(_ZTI8S20427C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S20427C1D1Ev,_ZTv0_n56_N8S20427C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n112_N8S20427C1D0Ev,_ZTv0_n56_N8S20427C1D0Ev),
  ABISELECT(-56,-40),
  ABISELECT(32,24),
  ABISELECT(-56,-40),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S20427C1[0]),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI8S20427C1[0]),
  ABISELECT(-80,-56),
  ABISELECT(16,8),
  ABISELECT(-120,-88),
  (VTBL_ENTRY)&(_ZTI8S20427C1[0]),
  ABISELECT(-144,-104),
  ABISELECT(-144,-104),
  ABISELECT(-56,-40),
  ABISELECT(-144,-104),
  0,
  ABISELECT(216,176),
  -8,
  ABISELECT(-32,-24),
  ABISELECT(-144,-104),
  (VTBL_ENTRY)&(_ZTI8S20427C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20427C1D1Ev,_ZTv0_n40_N8S20427C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20427C1D0Ev,_ZTv0_n40_N8S20427C1D0Ev),
  ABISELECT(-312,-244),
  ABISELECT(-224,-180),
  ABISELECT(-312,-244),
  ABISELECT(-312,-244),
  (VTBL_ENTRY)&(_ZTI8S20427C1[0]),
  ABISELECT(-344,-268),
  ABISELECT(-344,-268),
  (VTBL_ENTRY)&(_ZTI8S20427C1[0]),
  ABISELECT(-360,-280),
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  ABISELECT(-360,-280),
  (VTBL_ENTRY)&(_ZTI8S20427C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20427C1D1Ev,_ZTv0_n24_N8S20427C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20427C1D0Ev,_ZTv0_n24_N8S20427C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20427C1[];
static  VTBL_ENTRY _tg__ZTV8S20427C3__A__8S20427C1[] = {
  0,
  ABISELECT(88,64),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C78S20427C3__A3__8S20427C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C8__8S20427C3__A__8S20427C1[] = {
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI8S20427C3[0]),
};
extern void _ZN8S20427C2D1Ev();
extern void _ZN8S20427C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20427C2__8S20427C1[] = {
  ABISELECT(104,72),
  ABISELECT(320,248),
  ABISELECT(104,72),
  0,
  ABISELECT(80,56),
  ABISELECT(72,48),
  ABISELECT(-40,-32),
  ABISELECT(48,32),
  ABISELECT(-40,-32),
  ABISELECT(16,8),
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C2[0]),
  (VTBL_ENTRY)&_ZN8S20427C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20427C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20427C3__8S20427C2__8S20427C1[] = {
  ABISELECT(-56,-40),
  ABISELECT(32,24),
  ABISELECT(-56,-40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20427C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C8__8S20427C2__8S20427C1[] = {
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S20427C2[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20427C10__8S20427C2__8S20427C1[] = {
  ABISELECT(-80,-56),
  ABISELECT(16,8),
  ABISELECT(-80,-56),
  (VTBL_ENTRY)&(_ZTI8S20427C2[0]),
};
extern void ABISELECT(_ZTv0_n80_N8S20427C2D1Ev,_ZTv0_n40_N8S20427C2D1Ev)();
extern void ABISELECT(_ZThn104_N8S20427C2D1Ev,_ZThn72_N8S20427C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20427C2D0Ev,_ZTv0_n40_N8S20427C2D0Ev)();
extern void ABISELECT(_ZThn104_N8S20427C2D0Ev,_ZThn72_N8S20427C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20427C12__8S20427C2__8S20427C1[] = {
  ABISELECT(-104,-72),
  ABISELECT(-144,-104),
  ABISELECT(-56,-40),
  ABISELECT(-144,-104),
  0,
  ABISELECT(216,176),
  -8,
  ABISELECT(-32,-24),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI8S20427C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20427C2D1Ev,_ZTv0_n40_N8S20427C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20427C2D0Ev,_ZTv0_n40_N8S20427C2D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N8S20427C2D1Ev,_ZTv0_n24_N8S20427C2D1Ev)();
extern void ABISELECT(_ZThn320_N8S20427C2D1Ev,_ZThn248_N8S20427C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S20427C2D0Ev,_ZTv0_n24_N8S20427C2D0Ev)();
extern void ABISELECT(_ZThn320_N8S20427C2D0Ev,_ZThn248_N8S20427C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20427C15__8S20427C2__8S20427C1[] = {
  ABISELECT(-320,-248),
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  ABISELECT(-320,-248),
  (VTBL_ENTRY)&(_ZTI8S20427C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20427C2D1Ev,_ZTv0_n24_N8S20427C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S20427C2D0Ev,_ZTv0_n24_N8S20427C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20427C39S20427C12__A1__8S20427C2__8S20427C1[] = {
  ABISELECT(-312,-244),
  ABISELECT(-224,-180),
  ABISELECT(-312,-244),
  ABISELECT(-272,-212),
  (VTBL_ENTRY)&(_ZTI8S20427C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C79S20427C12__A2__8S20427C2__8S20427C1[] = {
  ABISELECT(-344,-268),
  ABISELECT(-304,-236),
  (VTBL_ENTRY)&(_ZTI8S20427C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C3__8S20427C1[] = {
  ABISELECT(-56,-40),
  ABISELECT(32,24),
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C78S20427C3__8S20427C1[] = {
  ABISELECT(-56,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C8__8S20427C3__8S20427C1[] = {
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S20427C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C8__8S20427C1[] = {
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C8[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20427C10__8S20427C1[] = {
  ABISELECT(-80,-56),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20427C11__9S20427C10__8S20427C1[] = {
  ABISELECT(96,64),
  ABISELECT(80,56),
  (VTBL_ENTRY)&(_ZTI9S20427C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20427C11__8S20427C1[] = {
  ABISELECT(96,64),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C11[0]),
};
extern void _ZN9S20427C12D1Ev();
extern void _ZN9S20427C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20427C12__8S20427C1[] = {
  ABISELECT(-144,-104),
  ABISELECT(-56,-40),
  ABISELECT(-144,-104),
  0,
  ABISELECT(216,176),
  -8,
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C12[0]),
  (VTBL_ENTRY)&_ZN9S20427C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20427C12D0Ev,
};
extern void _ZN9S20427C13D1Ev();
extern void _ZN9S20427C13D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20427C139S20427C12__8S20427C1[] = {
  0,
  ABISELECT(216,176),
  -8,
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C13[0]),
  (VTBL_ENTRY)&_ZN9S20427C13D1Ev,
  (VTBL_ENTRY)&_ZN9S20427C13D0Ev,
};
extern void _ZN9S20427C14D1Ev();
extern void _ZN9S20427C14D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20427C149S20427C139S20427C12__8S20427C1[] = {
  0,
  ABISELECT(216,176),
  -8,
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C14[0]),
  (VTBL_ENTRY)&_ZN9S20427C14D1Ev,
  (VTBL_ENTRY)&_ZN9S20427C14D0Ev,
};
extern void ABISELECT(_ZTv0_n48_N9S20427C14D1Ev,_ZTv0_n24_N9S20427C14D1Ev)();
extern void ABISELECT(_ZThn216_N9S20427C14D1Ev,_ZThn176_N9S20427C14D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20427C14D0Ev,_ZTv0_n24_N9S20427C14D0Ev)();
extern void ABISELECT(_ZThn216_N9S20427C14D0Ev,_ZThn176_N9S20427C14D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20427C15__9S20427C149S20427C139S20427C12__8S20427C1[] = {
  ABISELECT(-216,-176),
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  ABISELECT(-216,-176),
  (VTBL_ENTRY)&(_ZTI9S20427C14[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20427C14D1Ev,_ZTv0_n24_N9S20427C14D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20427C14D0Ev,_ZTv0_n24_N9S20427C14D0Ev),
};
extern void ABISELECT(_ZTv0_n48_N9S20427C13D1Ev,_ZTv0_n24_N9S20427C13D1Ev)();
extern void ABISELECT(_ZThn216_N9S20427C13D1Ev,_ZThn176_N9S20427C13D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20427C13D0Ev,_ZTv0_n24_N9S20427C13D0Ev)();
extern void ABISELECT(_ZThn216_N9S20427C13D0Ev,_ZThn176_N9S20427C13D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20427C15__9S20427C139S20427C12__8S20427C1[] = {
  ABISELECT(-216,-176),
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  ABISELECT(-216,-176),
  (VTBL_ENTRY)&(_ZTI9S20427C13[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20427C13D1Ev,_ZTv0_n24_N9S20427C13D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20427C13D0Ev,_ZTv0_n24_N9S20427C13D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20427C39S20427C12__A1__8S20427C1[] = {
  ABISELECT(-312,-244),
  ABISELECT(-224,-180),
  ABISELECT(-312,-244),
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C78S20427C39S20427C12__A1__8S20427C1[] = {
  ABISELECT(-312,-244),
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C8__8S20427C39S20427C12__A1__8S20427C1[] = {
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(224,180),
  (VTBL_ENTRY)&(_ZTI8S20427C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C79S20427C12__A2__8S20427C1[] = {
  ABISELECT(-344,-268),
  0,
  (VTBL_ENTRY)&(_ZTI8S20427C7[0]),
};
extern void ABISELECT(_ZTv0_n48_N9S20427C12D1Ev,_ZTv0_n24_N9S20427C12D1Ev)();
extern void ABISELECT(_ZThn216_N9S20427C12D1Ev,_ZThn176_N9S20427C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N9S20427C12D0Ev,_ZTv0_n24_N9S20427C12D0Ev)();
extern void ABISELECT(_ZThn216_N9S20427C12D0Ev,_ZThn176_N9S20427C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20427C15__9S20427C12__8S20427C1[] = {
  ABISELECT(-216,-176),
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  ABISELECT(-216,-176),
  (VTBL_ENTRY)&(_ZTI9S20427C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20427C12D1Ev,_ZTv0_n24_N9S20427C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N9S20427C12D0Ev,_ZTv0_n24_N9S20427C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20427C3__9S20427C12__8S20427C1[] = {
  ABISELECT(-312,-244),
  ABISELECT(-224,-180),
  ABISELECT(-312,-244),
  ABISELECT(-168,-140),
  (VTBL_ENTRY)&(_ZTI9S20427C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C8__9S20427C12__8S20427C1[] = {
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(56,40),
  (VTBL_ENTRY)&(_ZTI9S20427C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20427C7__A1__9S20427C12__8S20427C1[] = {
  ABISELECT(-344,-268),
  ABISELECT(-200,-164),
  (VTBL_ENTRY)&(_ZTI9S20427C12[0]),
};
extern void _ZN9S20427C15D1Ev();
extern void _ZN9S20427C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20427C15__8S20427C1[] = {
  ABISELECT(-224,-184),
  ABISELECT(-248,-200),
  ABISELECT(-216,-176),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C15[0]),
  (VTBL_ENTRY)&_ZN9S20427C15D1Ev,
  (VTBL_ENTRY)&_ZN9S20427C15D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S20427C16__9S20427C15__8S20427C1[] = {
  -8,
  ABISELECT(-32,-24),
  ABISELECT(216,176),
  (VTBL_ENTRY)&(_ZTI9S20427C15[0]),
};
static  VTBL_ENTRY _tg__ZTV9S20427C16__8S20427C1[] = {
  -8,
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S20427C16[0]),
};
static  VTT_ENTRY vtt_S20427C1[] = {
  {&(_ZTV8S20427C1[14]),  14,73},
  {&(_tg__ZTV8S20427C3__A__8S20427C1[5]),  5,5},
  {&(_tg__ZTV8S20427C78S20427C3__A3__8S20427C1[3]),  3,3},
  {&(_tg__ZTV8S20427C8__8S20427C3__A__8S20427C1[4]),  4,4},
  {&(_ZTV8S20427C1[30]),  30,73},
  {&(_ZTV8S20427C1[37]),  37,73},
  {&(_ZTV8S20427C1[41]),  41,73},
  {&(_ZTV8S20427C1[45]),  45,73},
  {&(_ZTV8S20427C1[30]),  30,73},
  {&(_ZTV8S20427C1[55]),  55,73},
  {&(_ZTV8S20427C1[71]),  71,73},
  {&(_ZTV8S20427C1[55]),  55,73},
  {&(_ZTV8S20427C1[62]),  62,73},
  {&(_ZTV8S20427C1[65]),  65,73},
  {&(_tg__ZTV8S20427C2__8S20427C1[13]),  13,15},
  {&(_tg__ZTV8S20427C3__8S20427C2__8S20427C1[5]),  5,5},
  {&(_tg__ZTV8S20427C8__8S20427C2__8S20427C1[4]),  4,4},
  {&(_tg__ZTV9S20427C10__8S20427C2__8S20427C1[4]),  4,4},
  {&(_tg__ZTV8S20427C2__8S20427C1[13]),  13,15},
  {&(_tg__ZTV9S20427C12__8S20427C2__8S20427C1[10]),  10,12},
  {&(_tg__ZTV9S20427C15__8S20427C2__8S20427C1[6]),  6,8},
  {&(_tg__ZTV9S20427C12__8S20427C2__8S20427C1[10]),  10,12},
  {&(_tg__ZTV8S20427C39S20427C12__A1__8S20427C2__8S20427C1[5]),  5,5},
  {&(_tg__ZTV8S20427C79S20427C12__A2__8S20427C2__8S20427C1[3]),  3,3},
  {&(_tg__ZTV8S20427C3__8S20427C1[5]),  5,5},
  {&(_tg__ZTV8S20427C78S20427C3__8S20427C1[3]),  3,3},
  {&(_tg__ZTV8S20427C8__8S20427C3__8S20427C1[4]),  4,4},
  {&(_tg__ZTV8S20427C8__8S20427C1[4]),  4,4},
  {&(_tg__ZTV9S20427C10__8S20427C1[4]),  4,4},
  {&(_tg__ZTV9S20427C11__9S20427C10__8S20427C1[3]),  3,3},
  {&(_tg__ZTV9S20427C11__8S20427C1[3]),  3,3},
  {&(_tg__ZTV9S20427C12__8S20427C1[9]),  9,11},
  {&(_tg__ZTV9S20427C139S20427C12__8S20427C1[6]),  6,8},
  {&(_tg__ZTV9S20427C149S20427C139S20427C12__8S20427C1[6]),  6,8},
  {&(_tg__ZTV9S20427C15__9S20427C149S20427C139S20427C12__8S20427C1[6]),  6,8},
  {&(_tg__ZTV9S20427C149S20427C139S20427C12__8S20427C1[6]),  6,8},
  {&(_tg__ZTV9S20427C15__9S20427C139S20427C12__8S20427C1[6]),  6,8},
  {&(_tg__ZTV9S20427C139S20427C12__8S20427C1[6]),  6,8},
  {&(_tg__ZTV8S20427C39S20427C12__A1__8S20427C1[5]),  5,5},
  {&(_tg__ZTV8S20427C78S20427C39S20427C12__A1__8S20427C1[3]),  3,3},
  {&(_tg__ZTV8S20427C8__8S20427C39S20427C12__A1__8S20427C1[4]),  4,4},
  {&(_tg__ZTV8S20427C79S20427C12__A2__8S20427C1[3]),  3,3},
  {&(_tg__ZTV9S20427C15__9S20427C12__8S20427C1[6]),  6,8},
  {&(_tg__ZTV9S20427C12__8S20427C1[9]),  9,11},
  {&(_tg__ZTV8S20427C3__9S20427C12__8S20427C1[5]),  5,5},
  {&(_tg__ZTV8S20427C8__9S20427C12__8S20427C1[4]),  4,4},
  {&(_tg__ZTV8S20427C7__A1__9S20427C12__8S20427C1[3]),  3,3},
  {&(_tg__ZTV9S20427C15__8S20427C1[5]),  5,7},
  {&(_tg__ZTV9S20427C16__9S20427C15__8S20427C1[4]),  4,4},
  {&(_tg__ZTV9S20427C16__8S20427C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20427C1[];
extern  VTBL_ENTRY _ZTV8S20427C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20427C1[];
static VTBL_ENTRY alt_thunk_names191[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20427C12D0Ev,_ZTv0_n24_N9S20427C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S20427C12D0Ev,_ZThn176_N9S20427C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20427C12D1Ev,_ZTv0_n24_N9S20427C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S20427C12D1Ev,_ZThn176_N9S20427C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20427C13D0Ev,_ZTv0_n24_N9S20427C13D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S20427C13D0Ev,_ZThn176_N9S20427C13D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20427C13D1Ev,_ZTv0_n24_N9S20427C13D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S20427C13D1Ev,_ZThn176_N9S20427C13D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20427C14D0Ev,_ZTv0_n24_N9S20427C14D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S20427C14D0Ev,_ZThn176_N9S20427C14D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N9S20427C14D1Ev,_ZTv0_n24_N9S20427C14D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn216_N9S20427C14D1Ev,_ZThn176_N9S20427C14D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20427C2D0Ev,_ZTv0_n24_N8S20427C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S20427C2D0Ev,_ZThn248_N8S20427C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20427C2D1Ev,_ZTv0_n24_N8S20427C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn320_N8S20427C2D1Ev,_ZThn248_N8S20427C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20427C2D0Ev,_ZTv0_n40_N8S20427C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20427C2D0Ev,_ZThn72_N8S20427C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20427C2D1Ev,_ZTv0_n40_N8S20427C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S20427C2D1Ev,_ZThn72_N8S20427C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20427C1D0Ev,_ZTv0_n24_N8S20427C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn360_N8S20427C1D0Ev,_ZThn280_N8S20427C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S20427C1D1Ev,_ZTv0_n24_N8S20427C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn360_N8S20427C1D1Ev,_ZThn280_N8S20427C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20427C1D0Ev,_ZTv0_n40_N8S20427C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20427C1D0Ev,_ZThn104_N8S20427C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20427C1D1Ev,_ZTv0_n40_N8S20427C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn144_N8S20427C1D1Ev,_ZThn104_N8S20427C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S20427C1D0Ev,_ZTv0_n56_N8S20427C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20427C1D0Ev,_ZThn32_N8S20427C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n112_N8S20427C1D1Ev,_ZTv0_n56_N8S20427C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn40_N8S20427C1D1Ev,_ZThn32_N8S20427C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20427C1 = {  "S20427C1", // class name
  bases_S20427C1, 45,
  &(vtc_S20427C1[0]), // expected_vtbl_contents
  &(vtt_S20427C1[0]), // expected_vtt_contents
  ABISELECT(416,328), // object size
  NSPAIRA(_ZTI8S20427C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20427C1),73, //virtual function table var
  14, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20427C1),50, //virtual table table var
  17, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names191,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16489C1  {
  ::S20846C7 s16489c1f0;
  __tsi64 s16489c1f1;
  ::S3052C13 s16489c1f2;
  ::S3052C13 s16489c1f3;
  int s16489c1f4;
  int s16489c1f5[6];
  int s16489c1f6;
  ::S3052C13 s16489c1f7[5];
  void  mf16489c1(); // _ZN8S16489C19mf16489c1Ev
};
//SIG(1 S16489C1) C1{ m FC2{ VBC3{ vd v1 Fs[6] FL[8] Fi} BC4{ VBC3 BC5{ VBC3 BC6{ VBC3 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC3 Fp[3] FL[5] Fi} VBC6 VBC5 vd Fp[7]} FL FU7{ m Fp Fi Fi Fi Fi:19 Fp Fc FD Fi Fs} FU7 Fi Fi[6] Fi FU7[5]}


void  S16489C1 ::mf16489c1(){}

static void Test_S16489C1()
{
  {
    init_simple_test("S16489C1");
    static S16489C1 lv;
    check2(sizeof(lv), ABISELECT(752,548), "sizeof(S16489C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S16489C1)");
    check_field_offset(lv, s16489c1f0, 0, "S16489C1.s16489c1f0");
    check_field_offset(lv, s16489c1f1, ABISELECT(600,424), "S16489C1.s16489c1f1");
    check_field_offset(lv, s16489c1f2, ABISELECT(608,432), "S16489C1.s16489c1f2");
    check_field_offset(lv, s16489c1f3, ABISELECT(624,444), "S16489C1.s16489c1f3");
    check_field_offset(lv, s16489c1f4, ABISELECT(640,456), "S16489C1.s16489c1f4");
    check_field_offset(lv, s16489c1f5, ABISELECT(644,460), "S16489C1.s16489c1f5");
    check_field_offset(lv, s16489c1f6, ABISELECT(668,484), "S16489C1.s16489c1f6");
    check_field_offset(lv, s16489c1f7, ABISELECT(672,488), "S16489C1.s16489c1f7");
  }
}
static Arrange_To_Call_Me vS16489C1(Test_S16489C1, "S16489C1", ABISELECT(752,548));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18972C6  {
  ::S7218C6 s18972c6f0;
  virtual void  v4(); // _ZN8S18972C62v4Ev
  virtual void  v5(); // _ZN8S18972C62v5Ev
  virtual void  v6(); // _ZN8S18972C62v6Ev
  ~S18972C6(); // tgen
  S18972C6(); // tgen
};
//SIG(-1 S18972C6) C1{ v1 v2 v3 FC2{ BC3{ BC4{ v11 v12 v13 v14 v15 v16 Fi} v17} v4 v5 v6 v7 v8 v9 v10}}


void  S18972C6 ::v4(){vfunc_called(this, "_ZN8S18972C62v4Ev");}
void  S18972C6 ::v5(){vfunc_called(this, "_ZN8S18972C62v5Ev");}
void  S18972C6 ::v6(){vfunc_called(this, "_ZN8S18972C62v6Ev");}
S18972C6 ::~S18972C6(){ note_dtor("S18972C6", this);} // tgen
S18972C6 ::S18972C6(){ note_ctor("S18972C6", this);} // tgen

static void Test_S18972C6()
{
  extern Class_Descriptor cd_S18972C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S18972C6, buf);
    S18972C6 *dp, &lv = *(dp=new (buf) S18972C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18972C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18972C6)");
    check_field_offset(lv, s18972c6f0, ABISELECT(8,4), "S18972C6.s18972c6f0");
    test_class_info(&lv, &cd_S18972C6);
    dp->~S18972C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18972C6(Test_S18972C6, "S18972C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S18972C6C1Ev();
extern void _ZN8S18972C6D1Ev();
Name_Map name_map_S18972C6[] = {
  NSPAIR(_ZN8S18972C6C1Ev),
  NSPAIR(_ZN8S18972C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18972C6[];
extern void _ZN8S18972C62v4Ev();
extern void _ZN8S18972C62v5Ev();
extern void _ZN8S18972C62v6Ev();
static  VTBL_ENTRY vtc_S18972C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18972C6[0]),
  (VTBL_ENTRY)&_ZN8S18972C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v6Ev,
};
extern VTBL_ENTRY _ZTI8S18972C6[];
extern  VTBL_ENTRY _ZTV8S18972C6[];
Class_Descriptor cd_S18972C6 = {  "S18972C6", // class name
  0,0,//no base classes
  &(vtc_S18972C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S18972C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18972C6),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  S18972C5  : S18972C6 {
  void *s18972c5f0;
  char s18972c5f1;
  virtual void  v7(); // _ZN8S18972C52v7Ev
  virtual void  v8(); // _ZN8S18972C52v8Ev
  virtual void  v9(); // _ZN8S18972C52v9Ev
  virtual void  v10(); // _ZN8S18972C53v10Ev
  ~S18972C5(); // tgen
  S18972C5(); // tgen
};
//SIG(-1 S18972C5) C1{ BC2{ v5 v6 v7 FC3{ BC4{ BC5{ v15 v16 v17 v18 v19 v20 Fi} v21} v8 v9 v10 v11 v12 v13 v14}} v1 v2 v3 v4 Fp Fc}


void  S18972C5 ::v7(){vfunc_called(this, "_ZN8S18972C52v7Ev");}
void  S18972C5 ::v8(){vfunc_called(this, "_ZN8S18972C52v8Ev");}
void  S18972C5 ::v9(){vfunc_called(this, "_ZN8S18972C52v9Ev");}
void  S18972C5 ::v10(){vfunc_called(this, "_ZN8S18972C53v10Ev");}
S18972C5 ::~S18972C5(){ note_dtor("S18972C5", this);} // tgen
S18972C5 ::S18972C5(){ note_ctor("S18972C5", this);} // tgen

static void Test_S18972C5()
{
  extern Class_Descriptor cd_S18972C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S18972C5, buf);
    S18972C5 *dp, &lv = *(dp=new (buf) S18972C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S18972C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18972C5)");
    check_base_class_offset(lv, (S18972C6*), 0, "S18972C5");
    check_field_offset(lv, s18972c5f0, ABISELECT(24,12), "S18972C5.s18972c5f0");
    check_field_offset(lv, s18972c5f1, ABISELECT(32,16), "S18972C5.s18972c5f1");
    test_class_info(&lv, &cd_S18972C5);
    dp->~S18972C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18972C5(Test_S18972C5, "S18972C5", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S18972C5C1Ev();
extern void _ZN8S18972C5D1Ev();
Name_Map name_map_S18972C5[] = {
  NSPAIR(_ZN8S18972C5C1Ev),
  NSPAIR(_ZN8S18972C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18972C6;
extern VTBL_ENTRY _ZTI8S18972C6[];
extern  VTBL_ENTRY _ZTV8S18972C6[];
static Base_Class bases_S18972C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18972C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S18972C5[];
extern void _ZN8S18972C62v4Ev();
extern void _ZN8S18972C62v5Ev();
extern void _ZN8S18972C62v6Ev();
extern void _ZN8S18972C52v7Ev();
extern void _ZN8S18972C52v8Ev();
extern void _ZN8S18972C52v9Ev();
extern void _ZN8S18972C53v10Ev();
static  VTBL_ENTRY vtc_S18972C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18972C5[0]),
  (VTBL_ENTRY)&_ZN8S18972C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18972C53v10Ev,
};
extern VTBL_ENTRY _ZTI8S18972C5[];
extern  VTBL_ENTRY _ZTV8S18972C5[];
Class_Descriptor cd_S18972C5 = {  "S18972C5", // class name
  bases_S18972C5, 1,
  &(vtc_S18972C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S18972C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S18972C5),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  S18972C9  {
  int s18972c9f0;
  virtual void  v11(); // _ZN8S18972C93v11Ev
  virtual void  v12(); // _ZN8S18972C93v12Ev
  virtual void  v13(); // _ZN8S18972C93v13Ev
  virtual void  v14(); // _ZN8S18972C93v14Ev
  virtual void  v15(); // _ZN8S18972C93v15Ev
  virtual void  v16(); // _ZN8S18972C93v16Ev
  ~S18972C9(); // tgen
  S18972C9(); // tgen
};
//SIG(-1 S18972C9) C1{ v1 v2 v3 v4 v5 v6 Fi}


void  S18972C9 ::v11(){vfunc_called(this, "_ZN8S18972C93v11Ev");}
void  S18972C9 ::v12(){vfunc_called(this, "_ZN8S18972C93v12Ev");}
void  S18972C9 ::v13(){vfunc_called(this, "_ZN8S18972C93v13Ev");}
void  S18972C9 ::v14(){vfunc_called(this, "_ZN8S18972C93v14Ev");}
void  S18972C9 ::v15(){vfunc_called(this, "_ZN8S18972C93v15Ev");}
void  S18972C9 ::v16(){vfunc_called(this, "_ZN8S18972C93v16Ev");}
S18972C9 ::~S18972C9(){ note_dtor("S18972C9", this);} // tgen
S18972C9 ::S18972C9(){ note_ctor("S18972C9", this);} // tgen

static void Test_S18972C9()
{
  extern Class_Descriptor cd_S18972C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S18972C9, buf);
    S18972C9 *dp, &lv = *(dp=new (buf) S18972C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S18972C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18972C9)");
    check_field_offset(lv, s18972c9f0, ABISELECT(8,4), "S18972C9.s18972c9f0");
    test_class_info(&lv, &cd_S18972C9);
    dp->~S18972C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18972C9(Test_S18972C9, "S18972C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S18972C9C1Ev();
extern void _ZN8S18972C9D1Ev();
Name_Map name_map_S18972C9[] = {
  NSPAIR(_ZN8S18972C9C1Ev),
  NSPAIR(_ZN8S18972C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18972C9[];
extern void _ZN8S18972C93v11Ev();
extern void _ZN8S18972C93v12Ev();
extern void _ZN8S18972C93v13Ev();
extern void _ZN8S18972C93v14Ev();
extern void _ZN8S18972C93v15Ev();
extern void _ZN8S18972C93v16Ev();
static  VTBL_ENTRY vtc_S18972C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18972C9[0]),
  (VTBL_ENTRY)&_ZN8S18972C93v11Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v12Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v13Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v14Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v15Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v16Ev,
};
extern VTBL_ENTRY _ZTI8S18972C9[];
extern  VTBL_ENTRY _ZTV8S18972C9[];
Class_Descriptor cd_S18972C9 = {  "S18972C9", // class name
  0,0,//no base classes
  &(vtc_S18972C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S18972C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18972C9),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  S18972C4  : S18972C5 , S18972C9 {
  void *s18972c4f0[2];
  virtual  ~S18972C4(); // _ZN8S18972C4D1Ev
  virtual void  v17(); // _ZN8S18972C43v17Ev
  virtual void  v18(); // _ZN8S18972C43v18Ev
  virtual void  v19(); // _ZN8S18972C43v19Ev
  virtual void  v20(); // _ZN8S18972C43v20Ev
  virtual void  v21(); // _ZN8S18972C43v21Ev
  virtual void  v22(); // _ZN8S18972C43v22Ev
  virtual void  v23(); // _ZN8S18972C43v23Ev
  virtual void  v24(); // _ZN8S18972C43v24Ev
  S18972C4(); // tgen
};
//SIG(-1 S18972C4) C1{ BC2{ BC3{ v9 v10 v11 FC4{ BC5{ BC6{ v29 v30 v31 v32 v33 v34 Fi} v35} v22 v23 v24 v25 v26 v27 v28}} v12 v13 v14 v15 Fp Fc} BC7{ v16 v17 v18 v19 v20 v21 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[2]}


 S18972C4 ::~S18972C4(){ note_dtor("S18972C4", this);}
void  S18972C4 ::v17(){vfunc_called(this, "_ZN8S18972C43v17Ev");}
void  S18972C4 ::v18(){vfunc_called(this, "_ZN8S18972C43v18Ev");}
void  S18972C4 ::v19(){vfunc_called(this, "_ZN8S18972C43v19Ev");}
void  S18972C4 ::v20(){vfunc_called(this, "_ZN8S18972C43v20Ev");}
void  S18972C4 ::v21(){vfunc_called(this, "_ZN8S18972C43v21Ev");}
void  S18972C4 ::v22(){vfunc_called(this, "_ZN8S18972C43v22Ev");}
void  S18972C4 ::v23(){vfunc_called(this, "_ZN8S18972C43v23Ev");}
void  S18972C4 ::v24(){vfunc_called(this, "_ZN8S18972C43v24Ev");}
S18972C4 ::S18972C4(){ note_ctor("S18972C4", this);} // tgen

static void Test_S18972C4()
{
  extern Class_Descriptor cd_S18972C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S18972C4, buf);
    S18972C4 *dp, &lv = *(dp=new (buf) S18972C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S18972C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18972C4)");
    check_base_class_offset(lv, (S18972C6*)(S18972C5*), 0, "S18972C4");
    check_base_class_offset(lv, (S18972C5*), 0, "S18972C4");
    check_base_class_offset(lv, (S18972C9*), ABISELECT(40,20), "S18972C4");
    check_field_offset(lv, s18972c4f0, ABISELECT(56,28), "S18972C4.s18972c4f0");
    test_class_info(&lv, &cd_S18972C4);
    dp->~S18972C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18972C4(Test_S18972C4, "S18972C4", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S18972C4C1Ev();
extern void _ZN8S18972C4D1Ev();
Name_Map name_map_S18972C4[] = {
  NSPAIR(_ZN8S18972C4C1Ev),
  NSPAIR(_ZN8S18972C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18972C6;
extern VTBL_ENTRY _ZTI8S18972C6[];
extern  VTBL_ENTRY _ZTV8S18972C6[];
extern Class_Descriptor cd_S18972C5;
extern VTBL_ENTRY _ZTI8S18972C5[];
extern  VTBL_ENTRY _ZTV8S18972C5[];
extern Class_Descriptor cd_S18972C9;
extern VTBL_ENTRY _ZTI8S18972C9[];
extern  VTBL_ENTRY _ZTV8S18972C9[];
static Base_Class bases_S18972C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18972C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S18972C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18972C9,    ABISELECT(40,20), //bcp->offset
    19, //bcp->virtual_function_table_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 _ZTI8S18972C4[];
extern void _ZN8S18972C62v4Ev();
extern void _ZN8S18972C62v5Ev();
extern void _ZN8S18972C62v6Ev();
extern void _ZN8S18972C52v7Ev();
extern void _ZN8S18972C52v8Ev();
extern void _ZN8S18972C52v9Ev();
extern void _ZN8S18972C53v10Ev();
extern void _ZN8S18972C4D1Ev();
extern void _ZN8S18972C4D0Ev();
extern void _ZN8S18972C43v17Ev();
extern void _ZN8S18972C43v18Ev();
extern void _ZN8S18972C43v19Ev();
extern void _ZN8S18972C43v20Ev();
extern void _ZN8S18972C43v21Ev();
extern void _ZN8S18972C43v22Ev();
extern void _ZN8S18972C43v23Ev();
extern void _ZN8S18972C43v24Ev();
extern void _ZN8S18972C93v11Ev();
extern void _ZN8S18972C93v12Ev();
extern void _ZN8S18972C93v13Ev();
extern void _ZN8S18972C93v14Ev();
extern void _ZN8S18972C93v15Ev();
extern void _ZN8S18972C93v16Ev();
static  VTBL_ENTRY vtc_S18972C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18972C4[0]),
  (VTBL_ENTRY)&_ZN8S18972C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18972C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18972C4D1Ev,
  (VTBL_ENTRY)&_ZN8S18972C4D0Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v20Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v24Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S18972C4[0]),
  (VTBL_ENTRY)&_ZN8S18972C93v11Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v12Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v13Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v14Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v15Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v16Ev,
};
extern VTBL_ENTRY _ZTI8S18972C4[];
extern  VTBL_ENTRY _ZTV8S18972C4[];
Class_Descriptor cd_S18972C4 = {  "S18972C4", // class name
  bases_S18972C4, 3,
  &(vtc_S18972C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S18972C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18972C4),27, //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  S18972C3  : S18972C4 , virtual S18972C5 {
  __tsi64  :0;
  virtual  ~S18972C3(); // _ZN8S18972C3D2Ev
  virtual void  v25(); // _ZN8S18972C33v25Ev
  S18972C3(); // tgen
};
//SIG(-1 S18972C3) C1{ BC2{ BC3{ BC4{ v2 v3 v4 FC5{ BC6{ BC7{ v30 v31 v32 v33 v34 v35 Fi} v36} v23 v24 v25 v26 v27 v28 v29}} v5 v6 v7 v8 Fp Fc} BC8{ v9 v10 v11 v12 v13 v14 Fi} vd v15 v16 v17 v18 v19 v20 v21 v22 Fp[2]} VBC3 vd v1 FL:0}


 S18972C3 ::~S18972C3(){ note_dtor("S18972C3", this);}
void  S18972C3 ::v25(){vfunc_called(this, "_ZN8S18972C33v25Ev");}
S18972C3 ::S18972C3(){ note_ctor("S18972C3", this);} // tgen

static void Test_S18972C3()
{
  extern Class_Descriptor cd_S18972C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,15)];
    init_test(&cd_S18972C3, buf);
    S18972C3 *dp, &lv = *(dp=new (buf) S18972C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S18972C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18972C3)");
    check_base_class_offset(lv, (S18972C6*)(S18972C5*)(S18972C4*), 0, "S18972C3");
    check_base_class_offset(lv, (S18972C5*)(S18972C4*), 0, "S18972C3");
    check_base_class_offset(lv, (S18972C9*)(S18972C4*), ABISELECT(40,20), "S18972C3");
    check_base_class_offset(lv, (S18972C4*), 0, "S18972C3");
    /*is_ambiguous_... S18972C3::S18972C5 */ AMB_check_base_class_offset(lv, (S18972C6*)(S18972C5*), ABISELECT(72,36), "S18972C3");
    /*is_ambiguous_... S18972C3::S18972C5 */ AMB_check_base_class_offset(lv, (S18972C5*), ABISELECT(72,36), "S18972C3");
    test_class_info(&lv, &cd_S18972C3);
    dp->~S18972C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18972C3(Test_S18972C3, "S18972C3", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN8S18972C3C1Ev();
extern void _ZN8S18972C3D2Ev();
Name_Map name_map_S18972C3[] = {
  NSPAIR(_ZN8S18972C3C1Ev),
  NSPAIR(_ZN8S18972C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18972C6;
extern VTBL_ENTRY _ZTI8S18972C6[];
extern  VTBL_ENTRY _ZTV8S18972C6[];
extern Class_Descriptor cd_S18972C5;
extern VTBL_ENTRY _ZTI8S18972C5[];
extern  VTBL_ENTRY _ZTV8S18972C5[];
extern Class_Descriptor cd_S18972C9;
extern VTBL_ENTRY _ZTI8S18972C9[];
extern  VTBL_ENTRY _ZTV8S18972C9[];
extern Class_Descriptor cd_S18972C4;
extern VTBL_ENTRY _ZTI8S18972C4[];
extern  VTBL_ENTRY _ZTV8S18972C4[];
extern Class_Descriptor cd_S18972C6;
extern VTBL_ENTRY _ZTI8S18972C6[];
extern  VTBL_ENTRY _ZTV8S18972C6[];
extern Class_Descriptor cd_S18972C5;
extern VTBL_ENTRY _ZTI8S18972C5[];
extern  VTBL_ENTRY _ZTV8S18972C5[];
static Base_Class bases_S18972C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18972C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S18972C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S18972C9,    ABISELECT(40,20), //bcp->offset
    21, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S18972C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S18972C6,    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_S18972C5,    ABISELECT(72,36), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S18972C3[];
extern void _ZN8S18972C62v4Ev();
extern void _ZN8S18972C62v5Ev();
extern void _ZN8S18972C62v6Ev();
extern void _ZN8S18972C52v7Ev();
extern void _ZN8S18972C52v8Ev();
extern void _ZN8S18972C52v9Ev();
extern void _ZN8S18972C53v10Ev();
extern void _ZN8S18972C3D1Ev();
extern void _ZN8S18972C3D0Ev();
extern void _ZN8S18972C43v17Ev();
extern void _ZN8S18972C43v18Ev();
extern void _ZN8S18972C43v19Ev();
extern void _ZN8S18972C43v20Ev();
extern void _ZN8S18972C43v21Ev();
extern void _ZN8S18972C43v22Ev();
extern void _ZN8S18972C43v23Ev();
extern void _ZN8S18972C43v24Ev();
extern void _ZN8S18972C33v25Ev();
extern void _ZN8S18972C93v11Ev();
extern void _ZN8S18972C93v12Ev();
extern void _ZN8S18972C93v13Ev();
extern void _ZN8S18972C93v14Ev();
extern void _ZN8S18972C93v15Ev();
extern void _ZN8S18972C93v16Ev();
extern void _ZN8S18972C62v4Ev();
extern void _ZN8S18972C62v5Ev();
extern void _ZN8S18972C62v6Ev();
extern void _ZN8S18972C52v7Ev();
extern void _ZN8S18972C52v8Ev();
extern void _ZN8S18972C52v9Ev();
extern void _ZN8S18972C53v10Ev();
static  VTBL_ENTRY vtc_S18972C3[] = {
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S18972C3[0]),
  (VTBL_ENTRY)&_ZN8S18972C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18972C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18972C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18972C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v20Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18972C33v25Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S18972C3[0]),
  (VTBL_ENTRY)&_ZN8S18972C93v11Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v12Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v13Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v14Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v15Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S18972C3[0]),
  (VTBL_ENTRY)&_ZN8S18972C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18972C53v10Ev,
};
extern VTBL_ENTRY _ZTV8S18972C3[];
static  VTT_ENTRY vtt_S18972C3[] = {
  {&(_ZTV8S18972C3[3]),  3,45},
  {&(_ZTV8S18972C3[38]),  38,45},
};
extern VTBL_ENTRY _ZTI8S18972C3[];
extern  VTBL_ENTRY _ZTV8S18972C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18972C3[];
Class_Descriptor cd_S18972C3 = {  "S18972C3", // class name
  bases_S18972C3, 6,
  &(vtc_S18972C3[0]), // expected_vtbl_contents
  &(vtt_S18972C3[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI8S18972C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18972C3),45, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18972C3),2, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18972C8  : S18972C9 {
  virtual void  v35(); // _ZN8S18972C83v35Ev
  ~S18972C8(); // tgen
  S18972C8(); // tgen
};
//SIG(-1 S18972C8) C1{ BC2{ v2 v3 v4 v5 v6 v7 Fi} v1}


void  S18972C8 ::v35(){vfunc_called(this, "_ZN8S18972C83v35Ev");}
S18972C8 ::~S18972C8(){ note_dtor("S18972C8", this);} // tgen
S18972C8 ::S18972C8(){ note_ctor("S18972C8", this);} // tgen

static void Test_S18972C8()
{
  extern Class_Descriptor cd_S18972C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S18972C8, buf);
    S18972C8 *dp, &lv = *(dp=new (buf) S18972C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S18972C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18972C8)");
    check_base_class_offset(lv, (S18972C9*), 0, "S18972C8");
    test_class_info(&lv, &cd_S18972C8);
    dp->~S18972C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18972C8(Test_S18972C8, "S18972C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S18972C8C1Ev();
extern void _ZN8S18972C8D1Ev();
Name_Map name_map_S18972C8[] = {
  NSPAIR(_ZN8S18972C8C1Ev),
  NSPAIR(_ZN8S18972C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18972C9;
extern VTBL_ENTRY _ZTI8S18972C9[];
extern  VTBL_ENTRY _ZTV8S18972C9[];
static Base_Class bases_S18972C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18972C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S18972C8[];
extern void _ZN8S18972C93v11Ev();
extern void _ZN8S18972C93v12Ev();
extern void _ZN8S18972C93v13Ev();
extern void _ZN8S18972C93v14Ev();
extern void _ZN8S18972C93v15Ev();
extern void _ZN8S18972C93v16Ev();
extern void _ZN8S18972C83v35Ev();
static  VTBL_ENTRY vtc_S18972C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18972C8[0]),
  (VTBL_ENTRY)&_ZN8S18972C93v11Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v12Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v13Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v14Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v15Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v16Ev,
  (VTBL_ENTRY)&_ZN8S18972C83v35Ev,
};
extern VTBL_ENTRY _ZTI8S18972C8[];
extern  VTBL_ENTRY _ZTV8S18972C8[];
Class_Descriptor cd_S18972C8 = {  "S18972C8", // class name
  bases_S18972C8, 1,
  &(vtc_S18972C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S18972C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S18972C8),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18972C2  : S18972C3 {
  ::S18972C8 s18972c2f0;
  ::S18972C9 s18972c2f1;
  virtual  ~S18972C2(); // _ZN8S18972C2D2Ev
  virtual void  v26(); // _ZN8S18972C23v26Ev
  virtual void  v27(); // _ZN8S18972C23v27Ev
  S18972C2(); // tgen
};
//SIG(-1 S18972C2) C1{ BC2{ BC3{ BC4{ BC5{ v3 v4 v5 FC6{ BC7{ BC8{ v32 v33 v34 v35 v36 v37 Fi} v38} v25 v26 v27 v28 v29 v30 v31}} v6 v7 v8 v9 Fp Fc} BC9{ v10 v11 v12 v13 v14 v15 Fi} vd v16 v17 v18 v19 v20 v21 v22 v23 Fp[2]} VBC4 vd v24 FL:0} vd v1 v2 FC10{ BC9 v39} FC9}


 S18972C2 ::~S18972C2(){ note_dtor("S18972C2", this);}
void  S18972C2 ::v26(){vfunc_called(this, "_ZN8S18972C23v26Ev");}
void  S18972C2 ::v27(){vfunc_called(this, "_ZN8S18972C23v27Ev");}
S18972C2 ::S18972C2(){ note_ctor("S18972C2", this);} // tgen

static void Test_S18972C2()
{
  extern Class_Descriptor cd_S18972C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,19)];
    init_test(&cd_S18972C2, buf);
    S18972C2 *dp, &lv = *(dp=new (buf) S18972C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,72), "sizeof(S18972C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18972C2)");
    check_base_class_offset(lv, (S18972C6*)(S18972C5*)(S18972C4*)(S18972C3*), 0, "S18972C2");
    check_base_class_offset(lv, (S18972C5*)(S18972C4*)(S18972C3*), 0, "S18972C2");
    check_base_class_offset(lv, (S18972C9*)(S18972C4*)(S18972C3*), ABISELECT(40,20), "S18972C2");
    check_base_class_offset(lv, (S18972C4*)(S18972C3*), 0, "S18972C2");
    /*is_ambiguous_... S18972C2::S18972C5 */ AMB_check_base_class_offset(lv, (S18972C6*)(S18972C5*), ABISELECT(104,52), "S18972C2");
    /*is_ambiguous_... S18972C3::S18972C5 */ AMB_check_base_class_offset(lv, (S18972C5*)(S18972C3*), ABISELECT(104,52), "S18972C2");
    check_base_class_offset(lv, (S18972C3*), 0, "S18972C2");
    check_field_offset(lv, s18972c2f0, ABISELECT(72,36), "S18972C2.s18972c2f0");
    check_field_offset(lv, s18972c2f1, ABISELECT(88,44), "S18972C2.s18972c2f1");
    test_class_info(&lv, &cd_S18972C2);
    dp->~S18972C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18972C2(Test_S18972C2, "S18972C2", ABISELECT(144,72));

#else // __cplusplus

extern void _ZN8S18972C2C1Ev();
extern void _ZN8S18972C2D2Ev();
Name_Map name_map_S18972C2[] = {
  NSPAIR(_ZN8S18972C2C1Ev),
  NSPAIR(_ZN8S18972C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18972C6;
extern VTBL_ENTRY _ZTI8S18972C6[];
extern  VTBL_ENTRY _ZTV8S18972C6[];
extern Class_Descriptor cd_S18972C5;
extern VTBL_ENTRY _ZTI8S18972C5[];
extern  VTBL_ENTRY _ZTV8S18972C5[];
extern Class_Descriptor cd_S18972C9;
extern VTBL_ENTRY _ZTI8S18972C9[];
extern  VTBL_ENTRY _ZTV8S18972C9[];
extern Class_Descriptor cd_S18972C4;
extern VTBL_ENTRY _ZTI8S18972C4[];
extern  VTBL_ENTRY _ZTV8S18972C4[];
extern Class_Descriptor cd_S18972C6;
extern VTBL_ENTRY _ZTI8S18972C6[];
extern  VTBL_ENTRY _ZTV8S18972C6[];
extern Class_Descriptor cd_S18972C5;
extern VTBL_ENTRY _ZTI8S18972C5[];
extern  VTBL_ENTRY _ZTV8S18972C5[];
extern Class_Descriptor cd_S18972C3;
extern VTBL_ENTRY _ZTI8S18972C3[];
extern  VTBL_ENTRY _ZTV8S18972C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18972C3[];
static Base_Class bases_S18972C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18972C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S18972C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S18972C9,    ABISELECT(40,20), //bcp->offset
    23, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S18972C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S18972C6,    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
    5, //immediately_derived
  0, 0},
  {&cd_S18972C5,    ABISELECT(104,52), //bcp->offset
    31, //bcp->virtual_function_table_offset
    9, //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
    6, //immediately_derived
  0, 1},
  {&cd_S18972C3,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S18972C2[];
extern void _ZN8S18972C62v4Ev();
extern void _ZN8S18972C62v5Ev();
extern void _ZN8S18972C62v6Ev();
extern void _ZN8S18972C52v7Ev();
extern void _ZN8S18972C52v8Ev();
extern void _ZN8S18972C52v9Ev();
extern void _ZN8S18972C53v10Ev();
extern void _ZN8S18972C2D1Ev();
extern void _ZN8S18972C2D0Ev();
extern void _ZN8S18972C43v17Ev();
extern void _ZN8S18972C43v18Ev();
extern void _ZN8S18972C43v19Ev();
extern void _ZN8S18972C43v20Ev();
extern void _ZN8S18972C43v21Ev();
extern void _ZN8S18972C43v22Ev();
extern void _ZN8S18972C43v23Ev();
extern void _ZN8S18972C43v24Ev();
extern void _ZN8S18972C33v25Ev();
extern void _ZN8S18972C23v26Ev();
extern void _ZN8S18972C23v27Ev();
extern void _ZN8S18972C93v11Ev();
extern void _ZN8S18972C93v12Ev();
extern void _ZN8S18972C93v13Ev();
extern void _ZN8S18972C93v14Ev();
extern void _ZN8S18972C93v15Ev();
extern void _ZN8S18972C93v16Ev();
extern void _ZN8S18972C62v4Ev();
extern void _ZN8S18972C62v5Ev();
extern void _ZN8S18972C62v6Ev();
extern void _ZN8S18972C52v7Ev();
extern void _ZN8S18972C52v8Ev();
extern void _ZN8S18972C52v9Ev();
extern void _ZN8S18972C53v10Ev();
static  VTBL_ENTRY vtc_S18972C2[] = {
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S18972C2[0]),
  (VTBL_ENTRY)&_ZN8S18972C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18972C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18972C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18972C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v20Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18972C33v25Ev,
  (VTBL_ENTRY)&_ZN8S18972C23v26Ev,
  (VTBL_ENTRY)&_ZN8S18972C23v27Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S18972C2[0]),
  (VTBL_ENTRY)&_ZN8S18972C93v11Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v12Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v13Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v14Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v15Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S18972C2[0]),
  (VTBL_ENTRY)&_ZN8S18972C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18972C53v10Ev,
};
extern VTBL_ENTRY _ZTV8S18972C2[];
extern void _ZN8S18972C62v4Ev();
extern void _ZN8S18972C62v5Ev();
extern void _ZN8S18972C62v6Ev();
extern void _ZN8S18972C52v7Ev();
extern void _ZN8S18972C52v8Ev();
extern void _ZN8S18972C52v9Ev();
extern void _ZN8S18972C53v10Ev();
extern void _ZN8S18972C3D1Ev();
extern void _ZN8S18972C3D0Ev();
extern void _ZN8S18972C43v17Ev();
extern void _ZN8S18972C43v18Ev();
extern void _ZN8S18972C43v19Ev();
extern void _ZN8S18972C43v20Ev();
extern void _ZN8S18972C43v21Ev();
extern void _ZN8S18972C43v22Ev();
extern void _ZN8S18972C43v23Ev();
extern void _ZN8S18972C43v24Ev();
extern void _ZN8S18972C33v25Ev();
static  VTBL_ENTRY _tg__ZTV8S18972C3__8S18972C2[] = {
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S18972C3[0]),
  (VTBL_ENTRY)&_ZN8S18972C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18972C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18972C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18972C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v20Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18972C33v25Ev,
};
extern void _ZN8S18972C62v4Ev();
extern void _ZN8S18972C62v5Ev();
extern void _ZN8S18972C62v6Ev();
extern void _ZN8S18972C52v7Ev();
extern void _ZN8S18972C52v8Ev();
extern void _ZN8S18972C52v9Ev();
extern void _ZN8S18972C53v10Ev();
static  VTBL_ENTRY _tg__ZTV8S18972C5__A1__8S18972C3__8S18972C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S18972C3[0]),
  (VTBL_ENTRY)&_ZN8S18972C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18972C53v10Ev,
};
static  VTT_ENTRY vtt_S18972C2[] = {
  {&(_ZTV8S18972C2[3]),  3,47},
  {&(_tg__ZTV8S18972C3__8S18972C2[3]),  3,21},
  {&(_tg__ZTV8S18972C5__A1__8S18972C3__8S18972C2[9]),  9,16},
  {&(_ZTV8S18972C2[40]),  40,47},
};
extern VTBL_ENTRY _ZTI8S18972C2[];
extern  VTBL_ENTRY _ZTV8S18972C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18972C2[];
Class_Descriptor cd_S18972C2 = {  "S18972C2", // class name
  bases_S18972C2, 7,
  &(vtc_S18972C2[0]), // expected_vtbl_contents
  &(vtt_S18972C2[0]), // expected_vtt_contents
  ABISELECT(144,72), // object size
  NSPAIRA(_ZTI8S18972C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S18972C2),47, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18972C2),4, //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  S18972C1  : virtual S18972C2 {
  virtual void  v1(); // _ZN8S18972C12v1Ev
  virtual void  v2(); // _ZN8S18972C12v2Ev
  virtual void  v3(); // _ZN8S18972C12v3Ev
  ~S18972C1(); // tgen
  S18972C1(); // tgen
};
//SIG(1 S18972C1) C1{ VBC2{ BC3{ BC4{ BC5{ BC6{ v4 v5 v6 FC7{ BC8{ BC9{ v35 v36 v37 v38 v39 v40 Fi} v41} v28 v29 v30 v31 v32 v33 v34}} v7 v8 v9 v10 Fp Fc} BC10{ v11 v12 v13 v14 v15 v16 Fi} vd v17 v18 v19 v20 v21 v22 v23 v24 Fp[2]} VBC5 vd v25 FL:0} vd v26 v27 FC11{ BC10 v42} FC10} v1 v2 v3}


void  S18972C1 ::v1(){vfunc_called(this, "_ZN8S18972C12v1Ev");}
void  S18972C1 ::v2(){vfunc_called(this, "_ZN8S18972C12v2Ev");}
void  S18972C1 ::v3(){vfunc_called(this, "_ZN8S18972C12v3Ev");}
S18972C1 ::~S18972C1(){ note_dtor("S18972C1", this);} // tgen
S18972C1 ::S18972C1(){ note_ctor("S18972C1", this);} // tgen

static void Test_S18972C1()
{
  extern Class_Descriptor cd_S18972C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,20)];
    init_test(&cd_S18972C1, buf);
    S18972C1 *dp, &lv = *(dp=new (buf) S18972C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,76), "sizeof(S18972C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18972C1)");
    check_base_class_offset(lv, (S18972C6*)(S18972C5*)(S18972C4*)(S18972C3*)(S18972C2*), ABISELECT(8,4), "S18972C1");
    check_base_class_offset(lv, (S18972C5*)(S18972C4*)(S18972C3*)(S18972C2*), ABISELECT(8,4), "S18972C1");
    check_base_class_offset(lv, (S18972C9*)(S18972C4*)(S18972C3*)(S18972C2*), ABISELECT(48,24), "S18972C1");
    check_base_class_offset(lv, (S18972C4*)(S18972C3*)(S18972C2*), ABISELECT(8,4), "S18972C1");
    /*is_ambiguous_... S18972C1::S18972C5 */ AMB_check_base_class_offset(lv, (S18972C6*)(S18972C5*), ABISELECT(112,56), "S18972C1");
    /*is_ambiguous_... S18972C3::S18972C5 */ AMB_check_base_class_offset(lv, (S18972C5*)(S18972C3*)(S18972C2*), ABISELECT(112,56), "S18972C1");
    check_base_class_offset(lv, (S18972C3*)(S18972C2*), ABISELECT(8,4), "S18972C1");
    check_base_class_offset(lv, (S18972C2*), ABISELECT(8,4), "S18972C1");
    test_class_info(&lv, &cd_S18972C1);
    dp->~S18972C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18972C1(Test_S18972C1, "S18972C1", ABISELECT(152,76));

#else // __cplusplus

extern void _ZN8S18972C1C1Ev();
extern void _ZN8S18972C1D1Ev();
Name_Map name_map_S18972C1[] = {
  NSPAIR(_ZN8S18972C1C1Ev),
  NSPAIR(_ZN8S18972C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18972C6;
extern VTBL_ENTRY _ZTI8S18972C6[];
extern  VTBL_ENTRY _ZTV8S18972C6[];
extern Class_Descriptor cd_S18972C5;
extern VTBL_ENTRY _ZTI8S18972C5[];
extern  VTBL_ENTRY _ZTV8S18972C5[];
extern Class_Descriptor cd_S18972C9;
extern VTBL_ENTRY _ZTI8S18972C9[];
extern  VTBL_ENTRY _ZTV8S18972C9[];
extern Class_Descriptor cd_S18972C4;
extern VTBL_ENTRY _ZTI8S18972C4[];
extern  VTBL_ENTRY _ZTV8S18972C4[];
extern Class_Descriptor cd_S18972C6;
extern VTBL_ENTRY _ZTI8S18972C6[];
extern  VTBL_ENTRY _ZTV8S18972C6[];
extern Class_Descriptor cd_S18972C5;
extern VTBL_ENTRY _ZTI8S18972C5[];
extern  VTBL_ENTRY _ZTV8S18972C5[];
extern Class_Descriptor cd_S18972C3;
extern VTBL_ENTRY _ZTI8S18972C3[];
extern  VTBL_ENTRY _ZTV8S18972C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18972C3[];
extern Class_Descriptor cd_S18972C2;
extern VTBL_ENTRY _ZTI8S18972C2[];
extern  VTBL_ENTRY _ZTV8S18972C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18972C2[];
static Base_Class bases_S18972C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18972C6,    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
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S18972C5,    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
    3, //immediately_derived
  0, 0},
  {&cd_S18972C9,    ABISELECT(48,24), //bcp->offset
    57, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S18972C4,    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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S18972C6,    ABISELECT(112,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
    5, //immediately_derived
  0, 0},
  {&cd_S18972C5,    ABISELECT(112,56), //bcp->offset
    65, //bcp->virtual_function_table_offset
    9, //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
    6, //immediately_derived
  0, 1},
  {&cd_S18972C3,    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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S18972C2,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    28, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S18972C1[];
extern void _ZN8S18972C12v1Ev();
extern void _ZN8S18972C12v2Ev();
extern void _ZN8S18972C12v3Ev();
extern void _ZN8S18972C1D1Ev();
extern void _ZN8S18972C1D0Ev();
extern void _ZN8S18972C62v4Ev();
extern void _ZN8S18972C62v5Ev();
extern void _ZN8S18972C62v6Ev();
extern void _ZN8S18972C52v7Ev();
extern void _ZN8S18972C52v8Ev();
extern void _ZN8S18972C52v9Ev();
extern void _ZN8S18972C53v10Ev();
extern void ABISELECT(_ZTv0_n88_N8S18972C1D1Ev,_ZTv0_n44_N8S18972C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S18972C1D1Ev,_ZThn4_N8S18972C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S18972C1D0Ev,_ZTv0_n44_N8S18972C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S18972C1D0Ev,_ZThn4_N8S18972C1D0Ev)() __attribute__((weak));
extern void _ZN8S18972C43v17Ev();
extern void _ZN8S18972C43v18Ev();
extern void _ZN8S18972C43v19Ev();
extern void _ZN8S18972C43v20Ev();
extern void _ZN8S18972C43v21Ev();
extern void _ZN8S18972C43v22Ev();
extern void _ZN8S18972C43v23Ev();
extern void _ZN8S18972C43v24Ev();
extern void _ZN8S18972C33v25Ev();
extern void _ZN8S18972C23v26Ev();
extern void _ZN8S18972C23v27Ev();
extern void _ZN8S18972C93v11Ev();
extern void _ZN8S18972C93v12Ev();
extern void _ZN8S18972C93v13Ev();
extern void _ZN8S18972C93v14Ev();
extern void _ZN8S18972C93v15Ev();
extern void _ZN8S18972C93v16Ev();
extern void _ZN8S18972C62v4Ev();
extern void _ZN8S18972C62v5Ev();
extern void _ZN8S18972C62v6Ev();
extern void _ZN8S18972C52v7Ev();
extern void _ZN8S18972C52v8Ev();
extern void _ZN8S18972C52v9Ev();
extern void _ZN8S18972C53v10Ev();
static  VTBL_ENTRY vtc_S18972C1[] = {
  ABISELECT(112,56),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S18972C1[0]),
  (VTBL_ENTRY)&_ZN8S18972C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18972C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18972C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18972C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18972C1D0Ev,
  0,
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S18972C1[0]),
  (VTBL_ENTRY)&_ZN8S18972C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18972C53v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18972C1D1Ev,_ZTv0_n44_N8S18972C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18972C1D0Ev,_ZTv0_n44_N8S18972C1D0Ev),
  (VTBL_ENTRY)&_ZN8S18972C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v20Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18972C33v25Ev,
  (VTBL_ENTRY)&_ZN8S18972C23v26Ev,
  (VTBL_ENTRY)&_ZN8S18972C23v27Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S18972C1[0]),
  (VTBL_ENTRY)&_ZN8S18972C93v11Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v12Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v13Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v14Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v15Ev,
  (VTBL_ENTRY)&_ZN8S18972C93v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S18972C1[0]),
  (VTBL_ENTRY)&_ZN8S18972C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18972C53v10Ev,
};
extern VTBL_ENTRY _ZTV8S18972C1[];
extern void _ZN8S18972C62v4Ev();
extern void _ZN8S18972C62v5Ev();
extern void _ZN8S18972C62v6Ev();
extern void _ZN8S18972C52v7Ev();
extern void _ZN8S18972C52v8Ev();
extern void _ZN8S18972C52v9Ev();
extern void _ZN8S18972C53v10Ev();
extern void _ZN8S18972C2D1Ev();
extern void _ZN8S18972C2D0Ev();
extern void _ZN8S18972C43v17Ev();
extern void _ZN8S18972C43v18Ev();
extern void _ZN8S18972C43v19Ev();
extern void _ZN8S18972C43v20Ev();
extern void _ZN8S18972C43v21Ev();
extern void _ZN8S18972C43v22Ev();
extern void _ZN8S18972C43v23Ev();
extern void _ZN8S18972C43v24Ev();
extern void _ZN8S18972C33v25Ev();
extern void _ZN8S18972C23v26Ev();
extern void _ZN8S18972C23v27Ev();
static  VTBL_ENTRY _tg__ZTV8S18972C2__8S18972C1[] = {
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S18972C2[0]),
  (VTBL_ENTRY)&_ZN8S18972C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18972C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18972C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18972C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v20Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18972C33v25Ev,
  (VTBL_ENTRY)&_ZN8S18972C23v26Ev,
  (VTBL_ENTRY)&_ZN8S18972C23v27Ev,
};
extern void _ZN8S18972C62v4Ev();
extern void _ZN8S18972C62v5Ev();
extern void _ZN8S18972C62v6Ev();
extern void _ZN8S18972C52v7Ev();
extern void _ZN8S18972C52v8Ev();
extern void _ZN8S18972C52v9Ev();
extern void _ZN8S18972C53v10Ev();
extern void _ZN8S18972C3D1Ev();
extern void _ZN8S18972C3D0Ev();
extern void _ZN8S18972C43v17Ev();
extern void _ZN8S18972C43v18Ev();
extern void _ZN8S18972C43v19Ev();
extern void _ZN8S18972C43v20Ev();
extern void _ZN8S18972C43v21Ev();
extern void _ZN8S18972C43v22Ev();
extern void _ZN8S18972C43v23Ev();
extern void _ZN8S18972C43v24Ev();
extern void _ZN8S18972C33v25Ev();
static  VTBL_ENTRY _tg__ZTV8S18972C38S18972C2__8S18972C1[] = {
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S18972C3[0]),
  (VTBL_ENTRY)&_ZN8S18972C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18972C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18972C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18972C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v20Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18972C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18972C33v25Ev,
};
extern void _ZN8S18972C62v4Ev();
extern void _ZN8S18972C62v5Ev();
extern void _ZN8S18972C62v6Ev();
extern void _ZN8S18972C52v7Ev();
extern void _ZN8S18972C52v8Ev();
extern void _ZN8S18972C52v9Ev();
extern void _ZN8S18972C53v10Ev();
static  VTBL_ENTRY _tg__ZTV8S18972C5__A1__8S18972C38S18972C2__8S18972C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S18972C3[0]),
  (VTBL_ENTRY)&_ZN8S18972C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18972C53v10Ev,
};
extern void _ZN8S18972C62v4Ev();
extern void _ZN8S18972C62v5Ev();
extern void _ZN8S18972C62v6Ev();
extern void _ZN8S18972C52v7Ev();
extern void _ZN8S18972C52v8Ev();
extern void _ZN8S18972C52v9Ev();
extern void _ZN8S18972C53v10Ev();
static  VTBL_ENTRY _tg__ZTV8S18972C5__A1__8S18972C2__8S18972C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S18972C2[0]),
  (VTBL_ENTRY)&_ZN8S18972C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18972C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18972C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18972C53v10Ev,
};
static  VTT_ENTRY vtt_S18972C1[] = {
  {&(_ZTV8S18972C1[4]),  4,81},
  {&(_ZTV8S18972C1[37]),  37,81},
  {&(_ZTV8S18972C1[59]),  59,81},
  {&(_ZTV8S18972C1[74]),  74,81},
  {&(_tg__ZTV8S18972C2__8S18972C1[3]),  3,23},
  {&(_tg__ZTV8S18972C38S18972C2__8S18972C1[3]),  3,21},
  {&(_tg__ZTV8S18972C5__A1__8S18972C38S18972C2__8S18972C1[9]),  9,16},
  {&(_tg__ZTV8S18972C5__A1__8S18972C2__8S18972C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S18972C1[];
extern  VTBL_ENTRY _ZTV8S18972C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18972C1[];
static VTBL_ENTRY alt_thunk_names192[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18972C1D0Ev,_ZTv0_n44_N8S18972C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S18972C1D0Ev,_ZThn4_N8S18972C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18972C1D1Ev,_ZTv0_n44_N8S18972C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S18972C1D1Ev,_ZThn4_N8S18972C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18972C1 = {  "S18972C1", // class name
  bases_S18972C1, 8,
  &(vtc_S18972C1[0]), // expected_vtbl_contents
  &(vtt_S18972C1[0]), // expected_vtt_contents
  ABISELECT(152,76), // object size
  NSPAIRA(_ZTI8S18972C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S18972C1),81, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18972C1),8, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names192,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18971C6  {
  ::S7218C6 s18971c6f0;
  virtual void  v4(); // _ZN8S18971C62v4Ev
  virtual void  v5(); // _ZN8S18971C62v5Ev
  virtual void  v6(); // _ZN8S18971C62v6Ev
  ~S18971C6(); // tgen
  S18971C6(); // tgen
};
//SIG(-1 S18971C6) C1{ v1 v2 v3 FC2{ BC3{ BC4{ v11 v12 v13 v14 v15 v16 Fi} v17} v4 v5 v6 v7 v8 v9 v10}}


void  S18971C6 ::v4(){vfunc_called(this, "_ZN8S18971C62v4Ev");}
void  S18971C6 ::v5(){vfunc_called(this, "_ZN8S18971C62v5Ev");}
void  S18971C6 ::v6(){vfunc_called(this, "_ZN8S18971C62v6Ev");}
S18971C6 ::~S18971C6(){ note_dtor("S18971C6", this);} // tgen
S18971C6 ::S18971C6(){ note_ctor("S18971C6", this);} // tgen

static void Test_S18971C6()
{
  extern Class_Descriptor cd_S18971C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S18971C6, buf);
    S18971C6 *dp, &lv = *(dp=new (buf) S18971C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18971C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18971C6)");
    check_field_offset(lv, s18971c6f0, ABISELECT(8,4), "S18971C6.s18971c6f0");
    test_class_info(&lv, &cd_S18971C6);
    dp->~S18971C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18971C6(Test_S18971C6, "S18971C6", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S18971C6C1Ev();
extern void _ZN8S18971C6D1Ev();
Name_Map name_map_S18971C6[] = {
  NSPAIR(_ZN8S18971C6C1Ev),
  NSPAIR(_ZN8S18971C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18971C6[];
extern void _ZN8S18971C62v4Ev();
extern void _ZN8S18971C62v5Ev();
extern void _ZN8S18971C62v6Ev();
static  VTBL_ENTRY vtc_S18971C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18971C6[0]),
  (VTBL_ENTRY)&_ZN8S18971C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v6Ev,
};
extern VTBL_ENTRY _ZTI8S18971C6[];
extern  VTBL_ENTRY _ZTV8S18971C6[];
Class_Descriptor cd_S18971C6 = {  "S18971C6", // class name
  0,0,//no base classes
  &(vtc_S18971C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S18971C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18971C6),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  S18971C5  : S18971C6 {
  void *s18971c5f0;
  char s18971c5f1;
  virtual void  v7(); // _ZN8S18971C52v7Ev
  virtual void  v8(); // _ZN8S18971C52v8Ev
  virtual void  v9(); // _ZN8S18971C52v9Ev
  virtual void  v10(); // _ZN8S18971C53v10Ev
  ~S18971C5(); // tgen
  S18971C5(); // tgen
};
//SIG(-1 S18971C5) C1{ BC2{ v5 v6 v7 FC3{ BC4{ BC5{ v15 v16 v17 v18 v19 v20 Fi} v21} v8 v9 v10 v11 v12 v13 v14}} v1 v2 v3 v4 Fp Fc}


void  S18971C5 ::v7(){vfunc_called(this, "_ZN8S18971C52v7Ev");}
void  S18971C5 ::v8(){vfunc_called(this, "_ZN8S18971C52v8Ev");}
void  S18971C5 ::v9(){vfunc_called(this, "_ZN8S18971C52v9Ev");}
void  S18971C5 ::v10(){vfunc_called(this, "_ZN8S18971C53v10Ev");}
S18971C5 ::~S18971C5(){ note_dtor("S18971C5", this);} // tgen
S18971C5 ::S18971C5(){ note_ctor("S18971C5", this);} // tgen

static void Test_S18971C5()
{
  extern Class_Descriptor cd_S18971C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S18971C5, buf);
    S18971C5 *dp, &lv = *(dp=new (buf) S18971C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S18971C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18971C5)");
    check_base_class_offset(lv, (S18971C6*), 0, "S18971C5");
    check_field_offset(lv, s18971c5f0, ABISELECT(24,12), "S18971C5.s18971c5f0");
    check_field_offset(lv, s18971c5f1, ABISELECT(32,16), "S18971C5.s18971c5f1");
    test_class_info(&lv, &cd_S18971C5);
    dp->~S18971C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18971C5(Test_S18971C5, "S18971C5", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S18971C5C1Ev();
extern void _ZN8S18971C5D1Ev();
Name_Map name_map_S18971C5[] = {
  NSPAIR(_ZN8S18971C5C1Ev),
  NSPAIR(_ZN8S18971C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18971C6;
extern VTBL_ENTRY _ZTI8S18971C6[];
extern  VTBL_ENTRY _ZTV8S18971C6[];
static Base_Class bases_S18971C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18971C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S18971C5[];
extern void _ZN8S18971C62v4Ev();
extern void _ZN8S18971C62v5Ev();
extern void _ZN8S18971C62v6Ev();
extern void _ZN8S18971C52v7Ev();
extern void _ZN8S18971C52v8Ev();
extern void _ZN8S18971C52v9Ev();
extern void _ZN8S18971C53v10Ev();
static  VTBL_ENTRY vtc_S18971C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18971C5[0]),
  (VTBL_ENTRY)&_ZN8S18971C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18971C53v10Ev,
};
extern VTBL_ENTRY _ZTI8S18971C5[];
extern  VTBL_ENTRY _ZTV8S18971C5[];
Class_Descriptor cd_S18971C5 = {  "S18971C5", // class name
  bases_S18971C5, 1,
  &(vtc_S18971C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S18971C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S18971C5),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  S18971C9  {
  int s18971c9f0;
  virtual void  v11(); // _ZN8S18971C93v11Ev
  virtual void  v12(); // _ZN8S18971C93v12Ev
  virtual void  v13(); // _ZN8S18971C93v13Ev
  virtual void  v14(); // _ZN8S18971C93v14Ev
  virtual void  v15(); // _ZN8S18971C93v15Ev
  virtual void  v16(); // _ZN8S18971C93v16Ev
  ~S18971C9(); // tgen
  S18971C9(); // tgen
};
//SIG(-1 S18971C9) C1{ v1 v2 v3 v4 v5 v6 Fi}


void  S18971C9 ::v11(){vfunc_called(this, "_ZN8S18971C93v11Ev");}
void  S18971C9 ::v12(){vfunc_called(this, "_ZN8S18971C93v12Ev");}
void  S18971C9 ::v13(){vfunc_called(this, "_ZN8S18971C93v13Ev");}
void  S18971C9 ::v14(){vfunc_called(this, "_ZN8S18971C93v14Ev");}
void  S18971C9 ::v15(){vfunc_called(this, "_ZN8S18971C93v15Ev");}
void  S18971C9 ::v16(){vfunc_called(this, "_ZN8S18971C93v16Ev");}
S18971C9 ::~S18971C9(){ note_dtor("S18971C9", this);} // tgen
S18971C9 ::S18971C9(){ note_ctor("S18971C9", this);} // tgen

static void Test_S18971C9()
{
  extern Class_Descriptor cd_S18971C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S18971C9, buf);
    S18971C9 *dp, &lv = *(dp=new (buf) S18971C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S18971C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18971C9)");
    check_field_offset(lv, s18971c9f0, ABISELECT(8,4), "S18971C9.s18971c9f0");
    test_class_info(&lv, &cd_S18971C9);
    dp->~S18971C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18971C9(Test_S18971C9, "S18971C9", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S18971C9C1Ev();
extern void _ZN8S18971C9D1Ev();
Name_Map name_map_S18971C9[] = {
  NSPAIR(_ZN8S18971C9C1Ev),
  NSPAIR(_ZN8S18971C9D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18971C9[];
extern void _ZN8S18971C93v11Ev();
extern void _ZN8S18971C93v12Ev();
extern void _ZN8S18971C93v13Ev();
extern void _ZN8S18971C93v14Ev();
extern void _ZN8S18971C93v15Ev();
extern void _ZN8S18971C93v16Ev();
static  VTBL_ENTRY vtc_S18971C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18971C9[0]),
  (VTBL_ENTRY)&_ZN8S18971C93v11Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v12Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v13Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v14Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v15Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v16Ev,
};
extern VTBL_ENTRY _ZTI8S18971C9[];
extern  VTBL_ENTRY _ZTV8S18971C9[];
Class_Descriptor cd_S18971C9 = {  "S18971C9", // class name
  0,0,//no base classes
  &(vtc_S18971C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S18971C9),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18971C9),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  S18971C4  : S18971C5 , S18971C9 {
  void *s18971c4f0[2];
  virtual  ~S18971C4(); // _ZN8S18971C4D1Ev
  virtual void  v17(); // _ZN8S18971C43v17Ev
  virtual void  v18(); // _ZN8S18971C43v18Ev
  virtual void  v19(); // _ZN8S18971C43v19Ev
  virtual void  v20(); // _ZN8S18971C43v20Ev
  virtual void  v21(); // _ZN8S18971C43v21Ev
  virtual void  v22(); // _ZN8S18971C43v22Ev
  virtual void  v23(); // _ZN8S18971C43v23Ev
  virtual void  v24(); // _ZN8S18971C43v24Ev
  S18971C4(); // tgen
};
//SIG(-1 S18971C4) C1{ BC2{ BC3{ v9 v10 v11 FC4{ BC5{ BC6{ v29 v30 v31 v32 v33 v34 Fi} v35} v22 v23 v24 v25 v26 v27 v28}} v12 v13 v14 v15 Fp Fc} BC7{ v16 v17 v18 v19 v20 v21 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[2]}


 S18971C4 ::~S18971C4(){ note_dtor("S18971C4", this);}
void  S18971C4 ::v17(){vfunc_called(this, "_ZN8S18971C43v17Ev");}
void  S18971C4 ::v18(){vfunc_called(this, "_ZN8S18971C43v18Ev");}
void  S18971C4 ::v19(){vfunc_called(this, "_ZN8S18971C43v19Ev");}
void  S18971C4 ::v20(){vfunc_called(this, "_ZN8S18971C43v20Ev");}
void  S18971C4 ::v21(){vfunc_called(this, "_ZN8S18971C43v21Ev");}
void  S18971C4 ::v22(){vfunc_called(this, "_ZN8S18971C43v22Ev");}
void  S18971C4 ::v23(){vfunc_called(this, "_ZN8S18971C43v23Ev");}
void  S18971C4 ::v24(){vfunc_called(this, "_ZN8S18971C43v24Ev");}
S18971C4 ::S18971C4(){ note_ctor("S18971C4", this);} // tgen

static void Test_S18971C4()
{
  extern Class_Descriptor cd_S18971C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S18971C4, buf);
    S18971C4 *dp, &lv = *(dp=new (buf) S18971C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S18971C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18971C4)");
    check_base_class_offset(lv, (S18971C6*)(S18971C5*), 0, "S18971C4");
    check_base_class_offset(lv, (S18971C5*), 0, "S18971C4");
    check_base_class_offset(lv, (S18971C9*), ABISELECT(40,20), "S18971C4");
    check_field_offset(lv, s18971c4f0, ABISELECT(56,28), "S18971C4.s18971c4f0");
    test_class_info(&lv, &cd_S18971C4);
    dp->~S18971C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18971C4(Test_S18971C4, "S18971C4", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S18971C4C1Ev();
extern void _ZN8S18971C4D1Ev();
Name_Map name_map_S18971C4[] = {
  NSPAIR(_ZN8S18971C4C1Ev),
  NSPAIR(_ZN8S18971C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18971C6;
extern VTBL_ENTRY _ZTI8S18971C6[];
extern  VTBL_ENTRY _ZTV8S18971C6[];
extern Class_Descriptor cd_S18971C5;
extern VTBL_ENTRY _ZTI8S18971C5[];
extern  VTBL_ENTRY _ZTV8S18971C5[];
extern Class_Descriptor cd_S18971C9;
extern VTBL_ENTRY _ZTI8S18971C9[];
extern  VTBL_ENTRY _ZTV8S18971C9[];
static Base_Class bases_S18971C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18971C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S18971C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18971C9,    ABISELECT(40,20), //bcp->offset
    19, //bcp->virtual_function_table_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 _ZTI8S18971C4[];
extern void _ZN8S18971C62v4Ev();
extern void _ZN8S18971C62v5Ev();
extern void _ZN8S18971C62v6Ev();
extern void _ZN8S18971C52v7Ev();
extern void _ZN8S18971C52v8Ev();
extern void _ZN8S18971C52v9Ev();
extern void _ZN8S18971C53v10Ev();
extern void _ZN8S18971C4D1Ev();
extern void _ZN8S18971C4D0Ev();
extern void _ZN8S18971C43v17Ev();
extern void _ZN8S18971C43v18Ev();
extern void _ZN8S18971C43v19Ev();
extern void _ZN8S18971C43v20Ev();
extern void _ZN8S18971C43v21Ev();
extern void _ZN8S18971C43v22Ev();
extern void _ZN8S18971C43v23Ev();
extern void _ZN8S18971C43v24Ev();
extern void _ZN8S18971C93v11Ev();
extern void _ZN8S18971C93v12Ev();
extern void _ZN8S18971C93v13Ev();
extern void _ZN8S18971C93v14Ev();
extern void _ZN8S18971C93v15Ev();
extern void _ZN8S18971C93v16Ev();
static  VTBL_ENTRY vtc_S18971C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18971C4[0]),
  (VTBL_ENTRY)&_ZN8S18971C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18971C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18971C4D1Ev,
  (VTBL_ENTRY)&_ZN8S18971C4D0Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v20Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v24Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S18971C4[0]),
  (VTBL_ENTRY)&_ZN8S18971C93v11Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v12Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v13Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v14Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v15Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v16Ev,
};
extern VTBL_ENTRY _ZTI8S18971C4[];
extern  VTBL_ENTRY _ZTV8S18971C4[];
Class_Descriptor cd_S18971C4 = {  "S18971C4", // class name
  bases_S18971C4, 3,
  &(vtc_S18971C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S18971C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18971C4),27, //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  S18971C3  : S18971C4 , virtual S18971C5 {
  int  :0;
  virtual  ~S18971C3(); // _ZN8S18971C3D2Ev
  virtual void  v25(); // _ZN8S18971C33v25Ev
  S18971C3(); // tgen
};
//SIG(-1 S18971C3) C1{ BC2{ BC3{ BC4{ v2 v3 v4 FC5{ BC6{ BC7{ v30 v31 v32 v33 v34 v35 Fi} v36} v23 v24 v25 v26 v27 v28 v29}} v5 v6 v7 v8 Fp Fc} BC8{ v9 v10 v11 v12 v13 v14 Fi} vd v15 v16 v17 v18 v19 v20 v21 v22 Fp[2]} VBC3 vd v1 Fi:0}


 S18971C3 ::~S18971C3(){ note_dtor("S18971C3", this);}
void  S18971C3 ::v25(){vfunc_called(this, "_ZN8S18971C33v25Ev");}
S18971C3 ::S18971C3(){ note_ctor("S18971C3", this);} // tgen

static void Test_S18971C3()
{
  extern Class_Descriptor cd_S18971C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[15];
    init_test(&cd_S18971C3, buf);
    S18971C3 *dp, &lv = *(dp=new (buf) S18971C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S18971C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18971C3)");
    check_base_class_offset(lv, (S18971C6*)(S18971C5*)(S18971C4*), 0, "S18971C3");
    check_base_class_offset(lv, (S18971C5*)(S18971C4*), 0, "S18971C3");
    check_base_class_offset(lv, (S18971C9*)(S18971C4*), ABISELECT(40,20), "S18971C3");
    check_base_class_offset(lv, (S18971C4*), 0, "S18971C3");
    /*is_ambiguous_... S18971C3::S18971C5 */ AMB_check_base_class_offset(lv, (S18971C6*)(S18971C5*), ABISELECT(72,36), "S18971C3");
    /*is_ambiguous_... S18971C3::S18971C5 */ AMB_check_base_class_offset(lv, (S18971C5*), ABISELECT(72,36), "S18971C3");
    test_class_info(&lv, &cd_S18971C3);
    dp->~S18971C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18971C3(Test_S18971C3, "S18971C3", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN8S18971C3C1Ev();
extern void _ZN8S18971C3D2Ev();
Name_Map name_map_S18971C3[] = {
  NSPAIR(_ZN8S18971C3C1Ev),
  NSPAIR(_ZN8S18971C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18971C6;
extern VTBL_ENTRY _ZTI8S18971C6[];
extern  VTBL_ENTRY _ZTV8S18971C6[];
extern Class_Descriptor cd_S18971C5;
extern VTBL_ENTRY _ZTI8S18971C5[];
extern  VTBL_ENTRY _ZTV8S18971C5[];
extern Class_Descriptor cd_S18971C9;
extern VTBL_ENTRY _ZTI8S18971C9[];
extern  VTBL_ENTRY _ZTV8S18971C9[];
extern Class_Descriptor cd_S18971C4;
extern VTBL_ENTRY _ZTI8S18971C4[];
extern  VTBL_ENTRY _ZTV8S18971C4[];
extern Class_Descriptor cd_S18971C6;
extern VTBL_ENTRY _ZTI8S18971C6[];
extern  VTBL_ENTRY _ZTV8S18971C6[];
extern Class_Descriptor cd_S18971C5;
extern VTBL_ENTRY _ZTI8S18971C5[];
extern  VTBL_ENTRY _ZTV8S18971C5[];
static Base_Class bases_S18971C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18971C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S18971C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S18971C9,    ABISELECT(40,20), //bcp->offset
    21, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S18971C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S18971C6,    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_S18971C5,    ABISELECT(72,36), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S18971C3[];
extern void _ZN8S18971C62v4Ev();
extern void _ZN8S18971C62v5Ev();
extern void _ZN8S18971C62v6Ev();
extern void _ZN8S18971C52v7Ev();
extern void _ZN8S18971C52v8Ev();
extern void _ZN8S18971C52v9Ev();
extern void _ZN8S18971C53v10Ev();
extern void _ZN8S18971C3D1Ev();
extern void _ZN8S18971C3D0Ev();
extern void _ZN8S18971C43v17Ev();
extern void _ZN8S18971C43v18Ev();
extern void _ZN8S18971C43v19Ev();
extern void _ZN8S18971C43v20Ev();
extern void _ZN8S18971C43v21Ev();
extern void _ZN8S18971C43v22Ev();
extern void _ZN8S18971C43v23Ev();
extern void _ZN8S18971C43v24Ev();
extern void _ZN8S18971C33v25Ev();
extern void _ZN8S18971C93v11Ev();
extern void _ZN8S18971C93v12Ev();
extern void _ZN8S18971C93v13Ev();
extern void _ZN8S18971C93v14Ev();
extern void _ZN8S18971C93v15Ev();
extern void _ZN8S18971C93v16Ev();
extern void _ZN8S18971C62v4Ev();
extern void _ZN8S18971C62v5Ev();
extern void _ZN8S18971C62v6Ev();
extern void _ZN8S18971C52v7Ev();
extern void _ZN8S18971C52v8Ev();
extern void _ZN8S18971C52v9Ev();
extern void _ZN8S18971C53v10Ev();
static  VTBL_ENTRY vtc_S18971C3[] = {
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S18971C3[0]),
  (VTBL_ENTRY)&_ZN8S18971C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18971C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18971C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18971C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v20Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18971C33v25Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S18971C3[0]),
  (VTBL_ENTRY)&_ZN8S18971C93v11Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v12Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v13Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v14Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v15Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S18971C3[0]),
  (VTBL_ENTRY)&_ZN8S18971C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18971C53v10Ev,
};
extern VTBL_ENTRY _ZTV8S18971C3[];
static  VTT_ENTRY vtt_S18971C3[] = {
  {&(_ZTV8S18971C3[3]),  3,45},
  {&(_ZTV8S18971C3[38]),  38,45},
};
extern VTBL_ENTRY _ZTI8S18971C3[];
extern  VTBL_ENTRY _ZTV8S18971C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18971C3[];
Class_Descriptor cd_S18971C3 = {  "S18971C3", // class name
  bases_S18971C3, 6,
  &(vtc_S18971C3[0]), // expected_vtbl_contents
  &(vtt_S18971C3[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI8S18971C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18971C3),45, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18971C3),2, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18971C8  : S18971C9 {
  virtual void  v35(); // _ZN8S18971C83v35Ev
  ~S18971C8(); // tgen
  S18971C8(); // tgen
};
//SIG(-1 S18971C8) C1{ BC2{ v2 v3 v4 v5 v6 v7 Fi} v1}


void  S18971C8 ::v35(){vfunc_called(this, "_ZN8S18971C83v35Ev");}
S18971C8 ::~S18971C8(){ note_dtor("S18971C8", this);} // tgen
S18971C8 ::S18971C8(){ note_ctor("S18971C8", this);} // tgen

static void Test_S18971C8()
{
  extern Class_Descriptor cd_S18971C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S18971C8, buf);
    S18971C8 *dp, &lv = *(dp=new (buf) S18971C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S18971C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18971C8)");
    check_base_class_offset(lv, (S18971C9*), 0, "S18971C8");
    test_class_info(&lv, &cd_S18971C8);
    dp->~S18971C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18971C8(Test_S18971C8, "S18971C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S18971C8C1Ev();
extern void _ZN8S18971C8D1Ev();
Name_Map name_map_S18971C8[] = {
  NSPAIR(_ZN8S18971C8C1Ev),
  NSPAIR(_ZN8S18971C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18971C9;
extern VTBL_ENTRY _ZTI8S18971C9[];
extern  VTBL_ENTRY _ZTV8S18971C9[];
static Base_Class bases_S18971C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18971C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S18971C8[];
extern void _ZN8S18971C93v11Ev();
extern void _ZN8S18971C93v12Ev();
extern void _ZN8S18971C93v13Ev();
extern void _ZN8S18971C93v14Ev();
extern void _ZN8S18971C93v15Ev();
extern void _ZN8S18971C93v16Ev();
extern void _ZN8S18971C83v35Ev();
static  VTBL_ENTRY vtc_S18971C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18971C8[0]),
  (VTBL_ENTRY)&_ZN8S18971C93v11Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v12Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v13Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v14Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v15Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v16Ev,
  (VTBL_ENTRY)&_ZN8S18971C83v35Ev,
};
extern VTBL_ENTRY _ZTI8S18971C8[];
extern  VTBL_ENTRY _ZTV8S18971C8[];
Class_Descriptor cd_S18971C8 = {  "S18971C8", // class name
  bases_S18971C8, 1,
  &(vtc_S18971C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S18971C8),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S18971C8),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18971C2  : S18971C3 {
  ::S18971C8 s18971c2f0;
  ::S18971C9 s18971c2f1;
  virtual  ~S18971C2(); // _ZN8S18971C2D2Ev
  virtual void  v26(); // _ZN8S18971C23v26Ev
  virtual void  v27(); // _ZN8S18971C23v27Ev
  S18971C2(); // tgen
};
//SIG(-1 S18971C2) C1{ BC2{ BC3{ BC4{ BC5{ v3 v4 v5 FC6{ BC7{ BC8{ v32 v33 v34 v35 v36 v37 Fi} v38} v25 v26 v27 v28 v29 v30 v31}} v6 v7 v8 v9 Fp Fc} BC9{ v10 v11 v12 v13 v14 v15 Fi} vd v16 v17 v18 v19 v20 v21 v22 v23 Fp[2]} VBC4 vd v24 Fi:0} vd v1 v2 FC10{ BC9 v39} FC9}


 S18971C2 ::~S18971C2(){ note_dtor("S18971C2", this);}
void  S18971C2 ::v26(){vfunc_called(this, "_ZN8S18971C23v26Ev");}
void  S18971C2 ::v27(){vfunc_called(this, "_ZN8S18971C23v27Ev");}
S18971C2 ::S18971C2(){ note_ctor("S18971C2", this);} // tgen

static void Test_S18971C2()
{
  extern Class_Descriptor cd_S18971C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[19];
    init_test(&cd_S18971C2, buf);
    S18971C2 *dp, &lv = *(dp=new (buf) S18971C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,72), "sizeof(S18971C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18971C2)");
    check_base_class_offset(lv, (S18971C6*)(S18971C5*)(S18971C4*)(S18971C3*), 0, "S18971C2");
    check_base_class_offset(lv, (S18971C5*)(S18971C4*)(S18971C3*), 0, "S18971C2");
    check_base_class_offset(lv, (S18971C9*)(S18971C4*)(S18971C3*), ABISELECT(40,20), "S18971C2");
    check_base_class_offset(lv, (S18971C4*)(S18971C3*), 0, "S18971C2");
    /*is_ambiguous_... S18971C2::S18971C5 */ AMB_check_base_class_offset(lv, (S18971C6*)(S18971C5*), ABISELECT(104,52), "S18971C2");
    /*is_ambiguous_... S18971C3::S18971C5 */ AMB_check_base_class_offset(lv, (S18971C5*)(S18971C3*), ABISELECT(104,52), "S18971C2");
    check_base_class_offset(lv, (S18971C3*), 0, "S18971C2");
    check_field_offset(lv, s18971c2f0, ABISELECT(72,36), "S18971C2.s18971c2f0");
    check_field_offset(lv, s18971c2f1, ABISELECT(88,44), "S18971C2.s18971c2f1");
    test_class_info(&lv, &cd_S18971C2);
    dp->~S18971C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18971C2(Test_S18971C2, "S18971C2", ABISELECT(144,72));

#else // __cplusplus

extern void _ZN8S18971C2C1Ev();
extern void _ZN8S18971C2D2Ev();
Name_Map name_map_S18971C2[] = {
  NSPAIR(_ZN8S18971C2C1Ev),
  NSPAIR(_ZN8S18971C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18971C6;
extern VTBL_ENTRY _ZTI8S18971C6[];
extern  VTBL_ENTRY _ZTV8S18971C6[];
extern Class_Descriptor cd_S18971C5;
extern VTBL_ENTRY _ZTI8S18971C5[];
extern  VTBL_ENTRY _ZTV8S18971C5[];
extern Class_Descriptor cd_S18971C9;
extern VTBL_ENTRY _ZTI8S18971C9[];
extern  VTBL_ENTRY _ZTV8S18971C9[];
extern Class_Descriptor cd_S18971C4;
extern VTBL_ENTRY _ZTI8S18971C4[];
extern  VTBL_ENTRY _ZTV8S18971C4[];
extern Class_Descriptor cd_S18971C6;
extern VTBL_ENTRY _ZTI8S18971C6[];
extern  VTBL_ENTRY _ZTV8S18971C6[];
extern Class_Descriptor cd_S18971C5;
extern VTBL_ENTRY _ZTI8S18971C5[];
extern  VTBL_ENTRY _ZTV8S18971C5[];
extern Class_Descriptor cd_S18971C3;
extern VTBL_ENTRY _ZTI8S18971C3[];
extern  VTBL_ENTRY _ZTV8S18971C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18971C3[];
static Base_Class bases_S18971C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18971C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S18971C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S18971C9,    ABISELECT(40,20), //bcp->offset
    23, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S18971C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    6, //immediately_derived
  0, 0},
  {&cd_S18971C6,    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
    5, //immediately_derived
  0, 0},
  {&cd_S18971C5,    ABISELECT(104,52), //bcp->offset
    31, //bcp->virtual_function_table_offset
    9, //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
    6, //immediately_derived
  0, 1},
  {&cd_S18971C3,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S18971C2[];
extern void _ZN8S18971C62v4Ev();
extern void _ZN8S18971C62v5Ev();
extern void _ZN8S18971C62v6Ev();
extern void _ZN8S18971C52v7Ev();
extern void _ZN8S18971C52v8Ev();
extern void _ZN8S18971C52v9Ev();
extern void _ZN8S18971C53v10Ev();
extern void _ZN8S18971C2D1Ev();
extern void _ZN8S18971C2D0Ev();
extern void _ZN8S18971C43v17Ev();
extern void _ZN8S18971C43v18Ev();
extern void _ZN8S18971C43v19Ev();
extern void _ZN8S18971C43v20Ev();
extern void _ZN8S18971C43v21Ev();
extern void _ZN8S18971C43v22Ev();
extern void _ZN8S18971C43v23Ev();
extern void _ZN8S18971C43v24Ev();
extern void _ZN8S18971C33v25Ev();
extern void _ZN8S18971C23v26Ev();
extern void _ZN8S18971C23v27Ev();
extern void _ZN8S18971C93v11Ev();
extern void _ZN8S18971C93v12Ev();
extern void _ZN8S18971C93v13Ev();
extern void _ZN8S18971C93v14Ev();
extern void _ZN8S18971C93v15Ev();
extern void _ZN8S18971C93v16Ev();
extern void _ZN8S18971C62v4Ev();
extern void _ZN8S18971C62v5Ev();
extern void _ZN8S18971C62v6Ev();
extern void _ZN8S18971C52v7Ev();
extern void _ZN8S18971C52v8Ev();
extern void _ZN8S18971C52v9Ev();
extern void _ZN8S18971C53v10Ev();
static  VTBL_ENTRY vtc_S18971C2[] = {
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S18971C2[0]),
  (VTBL_ENTRY)&_ZN8S18971C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18971C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18971C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18971C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v20Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18971C33v25Ev,
  (VTBL_ENTRY)&_ZN8S18971C23v26Ev,
  (VTBL_ENTRY)&_ZN8S18971C23v27Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S18971C2[0]),
  (VTBL_ENTRY)&_ZN8S18971C93v11Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v12Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v13Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v14Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v15Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S18971C2[0]),
  (VTBL_ENTRY)&_ZN8S18971C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18971C53v10Ev,
};
extern VTBL_ENTRY _ZTV8S18971C2[];
extern void _ZN8S18971C62v4Ev();
extern void _ZN8S18971C62v5Ev();
extern void _ZN8S18971C62v6Ev();
extern void _ZN8S18971C52v7Ev();
extern void _ZN8S18971C52v8Ev();
extern void _ZN8S18971C52v9Ev();
extern void _ZN8S18971C53v10Ev();
extern void _ZN8S18971C3D1Ev();
extern void _ZN8S18971C3D0Ev();
extern void _ZN8S18971C43v17Ev();
extern void _ZN8S18971C43v18Ev();
extern void _ZN8S18971C43v19Ev();
extern void _ZN8S18971C43v20Ev();
extern void _ZN8S18971C43v21Ev();
extern void _ZN8S18971C43v22Ev();
extern void _ZN8S18971C43v23Ev();
extern void _ZN8S18971C43v24Ev();
extern void _ZN8S18971C33v25Ev();
static  VTBL_ENTRY _tg__ZTV8S18971C3__8S18971C2[] = {
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S18971C3[0]),
  (VTBL_ENTRY)&_ZN8S18971C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18971C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18971C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18971C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v20Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18971C33v25Ev,
};
extern void _ZN8S18971C62v4Ev();
extern void _ZN8S18971C62v5Ev();
extern void _ZN8S18971C62v6Ev();
extern void _ZN8S18971C52v7Ev();
extern void _ZN8S18971C52v8Ev();
extern void _ZN8S18971C52v9Ev();
extern void _ZN8S18971C53v10Ev();
static  VTBL_ENTRY _tg__ZTV8S18971C5__A1__8S18971C3__8S18971C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S18971C3[0]),
  (VTBL_ENTRY)&_ZN8S18971C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18971C53v10Ev,
};
static  VTT_ENTRY vtt_S18971C2[] = {
  {&(_ZTV8S18971C2[3]),  3,47},
  {&(_tg__ZTV8S18971C3__8S18971C2[3]),  3,21},
  {&(_tg__ZTV8S18971C5__A1__8S18971C3__8S18971C2[9]),  9,16},
  {&(_ZTV8S18971C2[40]),  40,47},
};
extern VTBL_ENTRY _ZTI8S18971C2[];
extern  VTBL_ENTRY _ZTV8S18971C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18971C2[];
Class_Descriptor cd_S18971C2 = {  "S18971C2", // class name
  bases_S18971C2, 7,
  &(vtc_S18971C2[0]), // expected_vtbl_contents
  &(vtt_S18971C2[0]), // expected_vtt_contents
  ABISELECT(144,72), // object size
  NSPAIRA(_ZTI8S18971C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S18971C2),47, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18971C2),4, //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  S18971C1  : virtual S18971C2 {
  virtual void  v1(); // _ZN8S18971C12v1Ev
  virtual void  v2(); // _ZN8S18971C12v2Ev
  virtual void  v3(); // _ZN8S18971C12v3Ev
  ~S18971C1(); // tgen
  S18971C1(); // tgen
};
//SIG(1 S18971C1) C1{ VBC2{ BC3{ BC4{ BC5{ BC6{ v4 v5 v6 FC7{ BC8{ BC9{ v35 v36 v37 v38 v39 v40 Fi} v41} v28 v29 v30 v31 v32 v33 v34}} v7 v8 v9 v10 Fp Fc} BC10{ v11 v12 v13 v14 v15 v16 Fi} vd v17 v18 v19 v20 v21 v22 v23 v24 Fp[2]} VBC5 vd v25 Fi:0} vd v26 v27 FC11{ BC10 v42} FC10} v1 v2 v3}


void  S18971C1 ::v1(){vfunc_called(this, "_ZN8S18971C12v1Ev");}
void  S18971C1 ::v2(){vfunc_called(this, "_ZN8S18971C12v2Ev");}
void  S18971C1 ::v3(){vfunc_called(this, "_ZN8S18971C12v3Ev");}
S18971C1 ::~S18971C1(){ note_dtor("S18971C1", this);} // tgen
S18971C1 ::S18971C1(){ note_ctor("S18971C1", this);} // tgen

static void Test_S18971C1()
{
  extern Class_Descriptor cd_S18971C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[20];
    init_test(&cd_S18971C1, buf);
    S18971C1 *dp, &lv = *(dp=new (buf) S18971C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,76), "sizeof(S18971C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18971C1)");
    check_base_class_offset(lv, (S18971C6*)(S18971C5*)(S18971C4*)(S18971C3*)(S18971C2*), ABISELECT(8,4), "S18971C1");
    check_base_class_offset(lv, (S18971C5*)(S18971C4*)(S18971C3*)(S18971C2*), ABISELECT(8,4), "S18971C1");
    check_base_class_offset(lv, (S18971C9*)(S18971C4*)(S18971C3*)(S18971C2*), ABISELECT(48,24), "S18971C1");
    check_base_class_offset(lv, (S18971C4*)(S18971C3*)(S18971C2*), ABISELECT(8,4), "S18971C1");
    /*is_ambiguous_... S18971C1::S18971C5 */ AMB_check_base_class_offset(lv, (S18971C6*)(S18971C5*), ABISELECT(112,56), "S18971C1");
    /*is_ambiguous_... S18971C3::S18971C5 */ AMB_check_base_class_offset(lv, (S18971C5*)(S18971C3*)(S18971C2*), ABISELECT(112,56), "S18971C1");
    check_base_class_offset(lv, (S18971C3*)(S18971C2*), ABISELECT(8,4), "S18971C1");
    check_base_class_offset(lv, (S18971C2*), ABISELECT(8,4), "S18971C1");
    test_class_info(&lv, &cd_S18971C1);
    dp->~S18971C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18971C1(Test_S18971C1, "S18971C1", ABISELECT(152,76));

#else // __cplusplus

extern void _ZN8S18971C1C1Ev();
extern void _ZN8S18971C1D1Ev();
Name_Map name_map_S18971C1[] = {
  NSPAIR(_ZN8S18971C1C1Ev),
  NSPAIR(_ZN8S18971C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18971C6;
extern VTBL_ENTRY _ZTI8S18971C6[];
extern  VTBL_ENTRY _ZTV8S18971C6[];
extern Class_Descriptor cd_S18971C5;
extern VTBL_ENTRY _ZTI8S18971C5[];
extern  VTBL_ENTRY _ZTV8S18971C5[];
extern Class_Descriptor cd_S18971C9;
extern VTBL_ENTRY _ZTI8S18971C9[];
extern  VTBL_ENTRY _ZTV8S18971C9[];
extern Class_Descriptor cd_S18971C4;
extern VTBL_ENTRY _ZTI8S18971C4[];
extern  VTBL_ENTRY _ZTV8S18971C4[];
extern Class_Descriptor cd_S18971C6;
extern VTBL_ENTRY _ZTI8S18971C6[];
extern  VTBL_ENTRY _ZTV8S18971C6[];
extern Class_Descriptor cd_S18971C5;
extern VTBL_ENTRY _ZTI8S18971C5[];
extern  VTBL_ENTRY _ZTV8S18971C5[];
extern Class_Descriptor cd_S18971C3;
extern VTBL_ENTRY _ZTI8S18971C3[];
extern  VTBL_ENTRY _ZTV8S18971C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18971C3[];
extern Class_Descriptor cd_S18971C2;
extern VTBL_ENTRY _ZTI8S18971C2[];
extern  VTBL_ENTRY _ZTV8S18971C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18971C2[];
static Base_Class bases_S18971C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18971C6,    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
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S18971C5,    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
    3, //immediately_derived
  0, 0},
  {&cd_S18971C9,    ABISELECT(48,24), //bcp->offset
    57, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S18971C4,    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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S18971C6,    ABISELECT(112,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
    5, //immediately_derived
  0, 0},
  {&cd_S18971C5,    ABISELECT(112,56), //bcp->offset
    65, //bcp->virtual_function_table_offset
    9, //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
    6, //immediately_derived
  0, 1},
  {&cd_S18971C3,    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
    7, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S18971C2,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    28, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S18971C1[];
extern void _ZN8S18971C12v1Ev();
extern void _ZN8S18971C12v2Ev();
extern void _ZN8S18971C12v3Ev();
extern void _ZN8S18971C1D1Ev();
extern void _ZN8S18971C1D0Ev();
extern void _ZN8S18971C62v4Ev();
extern void _ZN8S18971C62v5Ev();
extern void _ZN8S18971C62v6Ev();
extern void _ZN8S18971C52v7Ev();
extern void _ZN8S18971C52v8Ev();
extern void _ZN8S18971C52v9Ev();
extern void _ZN8S18971C53v10Ev();
extern void ABISELECT(_ZTv0_n88_N8S18971C1D1Ev,_ZTv0_n44_N8S18971C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S18971C1D1Ev,_ZThn4_N8S18971C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S18971C1D0Ev,_ZTv0_n44_N8S18971C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S18971C1D0Ev,_ZThn4_N8S18971C1D0Ev)() __attribute__((weak));
extern void _ZN8S18971C43v17Ev();
extern void _ZN8S18971C43v18Ev();
extern void _ZN8S18971C43v19Ev();
extern void _ZN8S18971C43v20Ev();
extern void _ZN8S18971C43v21Ev();
extern void _ZN8S18971C43v22Ev();
extern void _ZN8S18971C43v23Ev();
extern void _ZN8S18971C43v24Ev();
extern void _ZN8S18971C33v25Ev();
extern void _ZN8S18971C23v26Ev();
extern void _ZN8S18971C23v27Ev();
extern void _ZN8S18971C93v11Ev();
extern void _ZN8S18971C93v12Ev();
extern void _ZN8S18971C93v13Ev();
extern void _ZN8S18971C93v14Ev();
extern void _ZN8S18971C93v15Ev();
extern void _ZN8S18971C93v16Ev();
extern void _ZN8S18971C62v4Ev();
extern void _ZN8S18971C62v5Ev();
extern void _ZN8S18971C62v6Ev();
extern void _ZN8S18971C52v7Ev();
extern void _ZN8S18971C52v8Ev();
extern void _ZN8S18971C52v9Ev();
extern void _ZN8S18971C53v10Ev();
static  VTBL_ENTRY vtc_S18971C1[] = {
  ABISELECT(112,56),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S18971C1[0]),
  (VTBL_ENTRY)&_ZN8S18971C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18971C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18971C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18971C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18971C1D0Ev,
  0,
  0,
  0,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(104,52),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S18971C1[0]),
  (VTBL_ENTRY)&_ZN8S18971C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18971C53v10Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18971C1D1Ev,_ZTv0_n44_N8S18971C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18971C1D0Ev,_ZTv0_n44_N8S18971C1D0Ev),
  (VTBL_ENTRY)&_ZN8S18971C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v20Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18971C33v25Ev,
  (VTBL_ENTRY)&_ZN8S18971C23v26Ev,
  (VTBL_ENTRY)&_ZN8S18971C23v27Ev,
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S18971C1[0]),
  (VTBL_ENTRY)&_ZN8S18971C93v11Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v12Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v13Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v14Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v15Ev,
  (VTBL_ENTRY)&_ZN8S18971C93v16Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S18971C1[0]),
  (VTBL_ENTRY)&_ZN8S18971C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18971C53v10Ev,
};
extern VTBL_ENTRY _ZTV8S18971C1[];
extern void _ZN8S18971C62v4Ev();
extern void _ZN8S18971C62v5Ev();
extern void _ZN8S18971C62v6Ev();
extern void _ZN8S18971C52v7Ev();
extern void _ZN8S18971C52v8Ev();
extern void _ZN8S18971C52v9Ev();
extern void _ZN8S18971C53v10Ev();
extern void _ZN8S18971C2D1Ev();
extern void _ZN8S18971C2D0Ev();
extern void _ZN8S18971C43v17Ev();
extern void _ZN8S18971C43v18Ev();
extern void _ZN8S18971C43v19Ev();
extern void _ZN8S18971C43v20Ev();
extern void _ZN8S18971C43v21Ev();
extern void _ZN8S18971C43v22Ev();
extern void _ZN8S18971C43v23Ev();
extern void _ZN8S18971C43v24Ev();
extern void _ZN8S18971C33v25Ev();
extern void _ZN8S18971C23v26Ev();
extern void _ZN8S18971C23v27Ev();
static  VTBL_ENTRY _tg__ZTV8S18971C2__8S18971C1[] = {
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S18971C2[0]),
  (VTBL_ENTRY)&_ZN8S18971C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18971C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18971C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18971C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v20Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18971C33v25Ev,
  (VTBL_ENTRY)&_ZN8S18971C23v26Ev,
  (VTBL_ENTRY)&_ZN8S18971C23v27Ev,
};
extern void _ZN8S18971C62v4Ev();
extern void _ZN8S18971C62v5Ev();
extern void _ZN8S18971C62v6Ev();
extern void _ZN8S18971C52v7Ev();
extern void _ZN8S18971C52v8Ev();
extern void _ZN8S18971C52v9Ev();
extern void _ZN8S18971C53v10Ev();
extern void _ZN8S18971C3D1Ev();
extern void _ZN8S18971C3D0Ev();
extern void _ZN8S18971C43v17Ev();
extern void _ZN8S18971C43v18Ev();
extern void _ZN8S18971C43v19Ev();
extern void _ZN8S18971C43v20Ev();
extern void _ZN8S18971C43v21Ev();
extern void _ZN8S18971C43v22Ev();
extern void _ZN8S18971C43v23Ev();
extern void _ZN8S18971C43v24Ev();
extern void _ZN8S18971C33v25Ev();
static  VTBL_ENTRY _tg__ZTV8S18971C38S18971C2__8S18971C1[] = {
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S18971C3[0]),
  (VTBL_ENTRY)&_ZN8S18971C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18971C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18971C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18971C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v17Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v18Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v19Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v20Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v21Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v22Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v23Ev,
  (VTBL_ENTRY)&_ZN8S18971C43v24Ev,
  (VTBL_ENTRY)&_ZN8S18971C33v25Ev,
};
extern void _ZN8S18971C62v4Ev();
extern void _ZN8S18971C62v5Ev();
extern void _ZN8S18971C62v6Ev();
extern void _ZN8S18971C52v7Ev();
extern void _ZN8S18971C52v8Ev();
extern void _ZN8S18971C52v9Ev();
extern void _ZN8S18971C53v10Ev();
static  VTBL_ENTRY _tg__ZTV8S18971C5__A1__8S18971C38S18971C2__8S18971C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S18971C3[0]),
  (VTBL_ENTRY)&_ZN8S18971C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18971C53v10Ev,
};
extern void _ZN8S18971C62v4Ev();
extern void _ZN8S18971C62v5Ev();
extern void _ZN8S18971C62v6Ev();
extern void _ZN8S18971C52v7Ev();
extern void _ZN8S18971C52v8Ev();
extern void _ZN8S18971C52v9Ev();
extern void _ZN8S18971C53v10Ev();
static  VTBL_ENTRY _tg__ZTV8S18971C5__A1__8S18971C2__8S18971C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S18971C2[0]),
  (VTBL_ENTRY)&_ZN8S18971C62v4Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v5Ev,
  (VTBL_ENTRY)&_ZN8S18971C62v6Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v7Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18971C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18971C53v10Ev,
};
static  VTT_ENTRY vtt_S18971C1[] = {
  {&(_ZTV8S18971C1[4]),  4,81},
  {&(_ZTV8S18971C1[37]),  37,81},
  {&(_ZTV8S18971C1[59]),  59,81},
  {&(_ZTV8S18971C1[74]),  74,81},
  {&(_tg__ZTV8S18971C2__8S18971C1[3]),  3,23},
  {&(_tg__ZTV8S18971C38S18971C2__8S18971C1[3]),  3,21},
  {&(_tg__ZTV8S18971C5__A1__8S18971C38S18971C2__8S18971C1[9]),  9,16},
  {&(_tg__ZTV8S18971C5__A1__8S18971C2__8S18971C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S18971C1[];
extern  VTBL_ENTRY _ZTV8S18971C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18971C1[];
static VTBL_ENTRY alt_thunk_names193[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18971C1D0Ev,_ZTv0_n44_N8S18971C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S18971C1D0Ev,_ZThn4_N8S18971C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18971C1D1Ev,_ZTv0_n44_N8S18971C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S18971C1D1Ev,_ZThn4_N8S18971C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18971C1 = {  "S18971C1", // class name
  bases_S18971C1, 8,
  &(vtc_S18971C1[0]), // expected_vtbl_contents
  &(vtt_S18971C1[0]), // expected_vtt_contents
  ABISELECT(152,76), // object size
  NSPAIRA(_ZTI8S18971C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S18971C1),81, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18971C1),8, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names193,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18995C5  {
  ::S7218C6 s18995c5f0;
  virtual void  v8(); // _ZN8S18995C52v8Ev
  virtual void  v9(); // _ZN8S18995C52v9Ev
  virtual void  v10(); // _ZN8S18995C53v10Ev
  ~S18995C5(); // tgen
  S18995C5(); // tgen
};
//SIG(-1 S18995C5) C1{ v1 v2 v3 FC2{ BC3{ BC4{ v11 v12 v13 v14 v15 v16 Fi} v17} v4 v5 v6 v7 v8 v9 v10}}


void  S18995C5 ::v8(){vfunc_called(this, "_ZN8S18995C52v8Ev");}
void  S18995C5 ::v9(){vfunc_called(this, "_ZN8S18995C52v9Ev");}
void  S18995C5 ::v10(){vfunc_called(this, "_ZN8S18995C53v10Ev");}
S18995C5 ::~S18995C5(){ note_dtor("S18995C5", this);} // tgen
S18995C5 ::S18995C5(){ note_ctor("S18995C5", this);} // tgen

static void Test_S18995C5()
{
  extern Class_Descriptor cd_S18995C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S18995C5, buf);
    S18995C5 *dp, &lv = *(dp=new (buf) S18995C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18995C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18995C5)");
    check_field_offset(lv, s18995c5f0, ABISELECT(8,4), "S18995C5.s18995c5f0");
    test_class_info(&lv, &cd_S18995C5);
    dp->~S18995C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18995C5(Test_S18995C5, "S18995C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S18995C5C1Ev();
extern void _ZN8S18995C5D1Ev();
Name_Map name_map_S18995C5[] = {
  NSPAIR(_ZN8S18995C5C1Ev),
  NSPAIR(_ZN8S18995C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18995C5[];
extern void _ZN8S18995C52v8Ev();
extern void _ZN8S18995C52v9Ev();
extern void _ZN8S18995C53v10Ev();
static  VTBL_ENTRY vtc_S18995C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18995C5[0]),
  (VTBL_ENTRY)&_ZN8S18995C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18995C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18995C53v10Ev,
};
extern VTBL_ENTRY _ZTI8S18995C5[];
extern  VTBL_ENTRY _ZTV8S18995C5[];
Class_Descriptor cd_S18995C5 = {  "S18995C5", // class name
  0,0,//no base classes
  &(vtc_S18995C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S18995C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18995C5),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  S18995C4  : S18995C5 {
  void *s18995c4f0;
  char s18995c4f1;
  virtual void  v11(); // _ZN8S18995C43v11Ev
  virtual void  v12(); // _ZN8S18995C43v12Ev
  virtual void  v13(); // _ZN8S18995C43v13Ev
  virtual void  v14(); // _ZN8S18995C43v14Ev
  ~S18995C4(); // tgen
  S18995C4(); // tgen
};
//SIG(-1 S18995C4) C1{ BC2{ v5 v6 v7 FC3{ BC4{ BC5{ v15 v16 v17 v18 v19 v20 Fi} v21} v8 v9 v10 v11 v12 v13 v14}} v1 v2 v3 v4 Fp Fc}


void  S18995C4 ::v11(){vfunc_called(this, "_ZN8S18995C43v11Ev");}
void  S18995C4 ::v12(){vfunc_called(this, "_ZN8S18995C43v12Ev");}
void  S18995C4 ::v13(){vfunc_called(this, "_ZN8S18995C43v13Ev");}
void  S18995C4 ::v14(){vfunc_called(this, "_ZN8S18995C43v14Ev");}
S18995C4 ::~S18995C4(){ note_dtor("S18995C4", this);} // tgen
S18995C4 ::S18995C4(){ note_ctor("S18995C4", this);} // tgen

static void Test_S18995C4()
{
  extern Class_Descriptor cd_S18995C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S18995C4, buf);
    S18995C4 *dp, &lv = *(dp=new (buf) S18995C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S18995C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18995C4)");
    check_base_class_offset(lv, (S18995C5*), 0, "S18995C4");
    check_field_offset(lv, s18995c4f0, ABISELECT(24,12), "S18995C4.s18995c4f0");
    check_field_offset(lv, s18995c4f1, ABISELECT(32,16), "S18995C4.s18995c4f1");
    test_class_info(&lv, &cd_S18995C4);
    dp->~S18995C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18995C4(Test_S18995C4, "S18995C4", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S18995C4C1Ev();
extern void _ZN8S18995C4D1Ev();
Name_Map name_map_S18995C4[] = {
  NSPAIR(_ZN8S18995C4C1Ev),
  NSPAIR(_ZN8S18995C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18995C5;
extern VTBL_ENTRY _ZTI8S18995C5[];
extern  VTBL_ENTRY _ZTV8S18995C5[];
static Base_Class bases_S18995C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18995C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S18995C4[];
extern void _ZN8S18995C52v8Ev();
extern void _ZN8S18995C52v9Ev();
extern void _ZN8S18995C53v10Ev();
extern void _ZN8S18995C43v11Ev();
extern void _ZN8S18995C43v12Ev();
extern void _ZN8S18995C43v13Ev();
extern void _ZN8S18995C43v14Ev();
static  VTBL_ENTRY vtc_S18995C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18995C4[0]),
  (VTBL_ENTRY)&_ZN8S18995C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18995C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18995C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v11Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v12Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v14Ev,
};
extern VTBL_ENTRY _ZTI8S18995C4[];
extern  VTBL_ENTRY _ZTV8S18995C4[];
Class_Descriptor cd_S18995C4 = {  "S18995C4", // class name
  bases_S18995C4, 1,
  &(vtc_S18995C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S18995C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S18995C4),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  S18995C8  {
  int s18995c8f0;
  virtual void  v15(); // _ZN8S18995C83v15Ev
  virtual void  v16(); // _ZN8S18995C83v16Ev
  virtual void  v17(); // _ZN8S18995C83v17Ev
  virtual void  v18(); // _ZN8S18995C83v18Ev
  virtual void  v19(); // _ZN8S18995C83v19Ev
  virtual void  v20(); // _ZN8S18995C83v20Ev
  ~S18995C8(); // tgen
  S18995C8(); // tgen
};
//SIG(-1 S18995C8) C1{ v1 v2 v3 v4 v5 v6 Fi}


void  S18995C8 ::v15(){vfunc_called(this, "_ZN8S18995C83v15Ev");}
void  S18995C8 ::v16(){vfunc_called(this, "_ZN8S18995C83v16Ev");}
void  S18995C8 ::v17(){vfunc_called(this, "_ZN8S18995C83v17Ev");}
void  S18995C8 ::v18(){vfunc_called(this, "_ZN8S18995C83v18Ev");}
void  S18995C8 ::v19(){vfunc_called(this, "_ZN8S18995C83v19Ev");}
void  S18995C8 ::v20(){vfunc_called(this, "_ZN8S18995C83v20Ev");}
S18995C8 ::~S18995C8(){ note_dtor("S18995C8", this);} // tgen
S18995C8 ::S18995C8(){ note_ctor("S18995C8", this);} // tgen

static void Test_S18995C8()
{
  extern Class_Descriptor cd_S18995C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S18995C8, buf);
    S18995C8 *dp, &lv = *(dp=new (buf) S18995C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S18995C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18995C8)");
    check_field_offset(lv, s18995c8f0, ABISELECT(8,4), "S18995C8.s18995c8f0");
    test_class_info(&lv, &cd_S18995C8);
    dp->~S18995C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18995C8(Test_S18995C8, "S18995C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S18995C8C1Ev();
extern void _ZN8S18995C8D1Ev();
Name_Map name_map_S18995C8[] = {
  NSPAIR(_ZN8S18995C8C1Ev),
  NSPAIR(_ZN8S18995C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18995C8[];
extern void _ZN8S18995C83v15Ev();
extern void _ZN8S18995C83v16Ev();
extern void _ZN8S18995C83v17Ev();
extern void _ZN8S18995C83v18Ev();
extern void _ZN8S18995C83v19Ev();
extern void _ZN8S18995C83v20Ev();
static  VTBL_ENTRY vtc_S18995C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18995C8[0]),
  (VTBL_ENTRY)&_ZN8S18995C83v15Ev,
  (VTBL_ENTRY)&_ZN8S18995C83v16Ev,
  (VTBL_ENTRY)&_ZN8S18995C83v17Ev,
  (VTBL_ENTRY)&_ZN8S18995C83v18Ev,
  (VTBL_ENTRY)&_ZN8S18995C83v19Ev,
  (VTBL_ENTRY)&_ZN8S18995C83v20Ev,
};
extern VTBL_ENTRY _ZTI8S18995C8[];
extern  VTBL_ENTRY _ZTV8S18995C8[];
Class_Descriptor cd_S18995C8 = {  "S18995C8", // class name
  0,0,//no base classes
  &(vtc_S18995C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S18995C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18995C8),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  S18995C3  : S18995C4 , S18995C8 {
  void *s18995c3f0[2];
  virtual  ~S18995C3(); // _ZN8S18995C3D1Ev
  virtual void  v21(); // _ZN8S18995C33v21Ev
  virtual void  v22(); // _ZN8S18995C33v22Ev
  virtual void  v23(); // _ZN8S18995C33v23Ev
  virtual void  v24(); // _ZN8S18995C33v24Ev
  virtual void  v25(); // _ZN8S18995C33v25Ev
  virtual void  v26(); // _ZN8S18995C33v26Ev
  virtual void  v27(); // _ZN8S18995C33v27Ev
  virtual void  v28(); // _ZN8S18995C33v28Ev
  S18995C3(); // tgen
};
//SIG(-1 S18995C3) C1{ BC2{ BC3{ v9 v10 v11 FC4{ BC5{ BC6{ v29 v30 v31 v32 v33 v34 Fi} v35} v22 v23 v24 v25 v26 v27 v28}} v12 v13 v14 v15 Fp Fc} BC7{ v16 v17 v18 v19 v20 v21 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[2]}


 S18995C3 ::~S18995C3(){ note_dtor("S18995C3", this);}
void  S18995C3 ::v21(){vfunc_called(this, "_ZN8S18995C33v21Ev");}
void  S18995C3 ::v22(){vfunc_called(this, "_ZN8S18995C33v22Ev");}
void  S18995C3 ::v23(){vfunc_called(this, "_ZN8S18995C33v23Ev");}
void  S18995C3 ::v24(){vfunc_called(this, "_ZN8S18995C33v24Ev");}
void  S18995C3 ::v25(){vfunc_called(this, "_ZN8S18995C33v25Ev");}
void  S18995C3 ::v26(){vfunc_called(this, "_ZN8S18995C33v26Ev");}
void  S18995C3 ::v27(){vfunc_called(this, "_ZN8S18995C33v27Ev");}
void  S18995C3 ::v28(){vfunc_called(this, "_ZN8S18995C33v28Ev");}
S18995C3 ::S18995C3(){ note_ctor("S18995C3", this);} // tgen

static void Test_S18995C3()
{
  extern Class_Descriptor cd_S18995C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S18995C3, buf);
    S18995C3 *dp, &lv = *(dp=new (buf) S18995C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S18995C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18995C3)");
    check_base_class_offset(lv, (S18995C5*)(S18995C4*), 0, "S18995C3");
    check_base_class_offset(lv, (S18995C4*), 0, "S18995C3");
    check_base_class_offset(lv, (S18995C8*), ABISELECT(40,20), "S18995C3");
    check_field_offset(lv, s18995c3f0, ABISELECT(56,28), "S18995C3.s18995c3f0");
    test_class_info(&lv, &cd_S18995C3);
    dp->~S18995C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18995C3(Test_S18995C3, "S18995C3", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S18995C3C1Ev();
extern void _ZN8S18995C3D1Ev();
Name_Map name_map_S18995C3[] = {
  NSPAIR(_ZN8S18995C3C1Ev),
  NSPAIR(_ZN8S18995C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18995C5;
extern VTBL_ENTRY _ZTI8S18995C5[];
extern  VTBL_ENTRY _ZTV8S18995C5[];
extern Class_Descriptor cd_S18995C4;
extern VTBL_ENTRY _ZTI8S18995C4[];
extern  VTBL_ENTRY _ZTV8S18995C4[];
extern Class_Descriptor cd_S18995C8;
extern VTBL_ENTRY _ZTI8S18995C8[];
extern  VTBL_ENTRY _ZTV8S18995C8[];
static Base_Class bases_S18995C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18995C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S18995C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18995C8,    ABISELECT(40,20), //bcp->offset
    19, //bcp->virtual_function_table_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 _ZTI8S18995C3[];
extern void _ZN8S18995C52v8Ev();
extern void _ZN8S18995C52v9Ev();
extern void _ZN8S18995C53v10Ev();
extern void _ZN8S18995C43v11Ev();
extern void _ZN8S18995C43v12Ev();
extern void _ZN8S18995C43v13Ev();
extern void _ZN8S18995C43v14Ev();
extern void _ZN8S18995C3D1Ev();
extern void _ZN8S18995C3D0Ev();
extern void _ZN8S18995C33v21Ev();
extern void _ZN8S18995C33v22Ev();
extern void _ZN8S18995C33v23Ev();
extern void _ZN8S18995C33v24Ev();
extern void _ZN8S18995C33v25Ev();
extern void _ZN8S18995C33v26Ev();
extern void _ZN8S18995C33v27Ev();
extern void _ZN8S18995C33v28Ev();
extern void _ZN8S18995C83v15Ev();
extern void _ZN8S18995C83v16Ev();
extern void _ZN8S18995C83v17Ev();
extern void _ZN8S18995C83v18Ev();
extern void _ZN8S18995C83v19Ev();
extern void _ZN8S18995C83v20Ev();
static  VTBL_ENTRY vtc_S18995C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18995C3[0]),
  (VTBL_ENTRY)&_ZN8S18995C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18995C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18995C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v11Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v12Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18995C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18995C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v21Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v22Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v23Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v24Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v25Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v26Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v27Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v28Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S18995C3[0]),
  (VTBL_ENTRY)&_ZN8S18995C83v15Ev,
  (VTBL_ENTRY)&_ZN8S18995C83v16Ev,
  (VTBL_ENTRY)&_ZN8S18995C83v17Ev,
  (VTBL_ENTRY)&_ZN8S18995C83v18Ev,
  (VTBL_ENTRY)&_ZN8S18995C83v19Ev,
  (VTBL_ENTRY)&_ZN8S18995C83v20Ev,
};
extern VTBL_ENTRY _ZTI8S18995C3[];
extern  VTBL_ENTRY _ZTV8S18995C3[];
Class_Descriptor cd_S18995C3 = {  "S18995C3", // class name
  bases_S18995C3, 3,
  &(vtc_S18995C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S18995C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18995C3),27, //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  S18995C2  : S18995C3 , virtual S18995C4 {
  __tsi64  :0;
  virtual  ~S18995C2(); // _ZN8S18995C2D2Ev
  virtual void  v29(); // _ZN8S18995C23v29Ev
  S18995C2(); // tgen
};
//SIG(-1 S18995C2) C1{ BC2{ BC3{ BC4{ v2 v3 v4 FC5{ BC6{ BC7{ v30 v31 v32 v33 v34 v35 Fi} v36} v23 v24 v25 v26 v27 v28 v29}} v5 v6 v7 v8 Fp Fc} BC8{ v9 v10 v11 v12 v13 v14 Fi} vd v15 v16 v17 v18 v19 v20 v21 v22 Fp[2]} VBC3 vd v1 FL:0}


 S18995C2 ::~S18995C2(){ note_dtor("S18995C2", this);}
void  S18995C2 ::v29(){vfunc_called(this, "_ZN8S18995C23v29Ev");}
S18995C2 ::S18995C2(){ note_ctor("S18995C2", this);} // tgen

static void Test_S18995C2()
{
  extern Class_Descriptor cd_S18995C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,15)];
    init_test(&cd_S18995C2, buf);
    S18995C2 *dp, &lv = *(dp=new (buf) S18995C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S18995C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18995C2)");
    check_base_class_offset(lv, (S18995C5*)(S18995C4*)(S18995C3*), 0, "S18995C2");
    check_base_class_offset(lv, (S18995C4*)(S18995C3*), 0, "S18995C2");
    check_base_class_offset(lv, (S18995C8*)(S18995C3*), ABISELECT(40,20), "S18995C2");
    check_base_class_offset(lv, (S18995C3*), 0, "S18995C2");
    /*is_ambiguous_... S18995C2::S18995C4 */ AMB_check_base_class_offset(lv, (S18995C5*)(S18995C4*), ABISELECT(72,36), "S18995C2");
    /*is_ambiguous_... S18995C2::S18995C4 */ AMB_check_base_class_offset(lv, (S18995C4*), ABISELECT(72,36), "S18995C2");
    test_class_info(&lv, &cd_S18995C2);
    dp->~S18995C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18995C2(Test_S18995C2, "S18995C2", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN8S18995C2C1Ev();
extern void _ZN8S18995C2D2Ev();
Name_Map name_map_S18995C2[] = {
  NSPAIR(_ZN8S18995C2C1Ev),
  NSPAIR(_ZN8S18995C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18995C5;
extern VTBL_ENTRY _ZTI8S18995C5[];
extern  VTBL_ENTRY _ZTV8S18995C5[];
extern Class_Descriptor cd_S18995C4;
extern VTBL_ENTRY _ZTI8S18995C4[];
extern  VTBL_ENTRY _ZTV8S18995C4[];
extern Class_Descriptor cd_S18995C8;
extern VTBL_ENTRY _ZTI8S18995C8[];
extern  VTBL_ENTRY _ZTV8S18995C8[];
extern Class_Descriptor cd_S18995C3;
extern VTBL_ENTRY _ZTI8S18995C3[];
extern  VTBL_ENTRY _ZTV8S18995C3[];
extern Class_Descriptor cd_S18995C5;
extern VTBL_ENTRY _ZTI8S18995C5[];
extern  VTBL_ENTRY _ZTV8S18995C5[];
extern Class_Descriptor cd_S18995C4;
extern VTBL_ENTRY _ZTI8S18995C4[];
extern  VTBL_ENTRY _ZTV8S18995C4[];
static Base_Class bases_S18995C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18995C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S18995C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S18995C8,    ABISELECT(40,20), //bcp->offset
    21, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S18995C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S18995C5,    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_S18995C4,    ABISELECT(72,36), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S18995C2[];
extern void _ZN8S18995C52v8Ev();
extern void _ZN8S18995C52v9Ev();
extern void _ZN8S18995C53v10Ev();
extern void _ZN8S18995C43v11Ev();
extern void _ZN8S18995C43v12Ev();
extern void _ZN8S18995C43v13Ev();
extern void _ZN8S18995C43v14Ev();
extern void _ZN8S18995C2D1Ev();
extern void _ZN8S18995C2D0Ev();
extern void _ZN8S18995C33v21Ev();
extern void _ZN8S18995C33v22Ev();
extern void _ZN8S18995C33v23Ev();
extern void _ZN8S18995C33v24Ev();
extern void _ZN8S18995C33v25Ev();
extern void _ZN8S18995C33v26Ev();
extern void _ZN8S18995C33v27Ev();
extern void _ZN8S18995C33v28Ev();
extern void _ZN8S18995C23v29Ev();
extern void _ZN8S18995C83v15Ev();
extern void _ZN8S18995C83v16Ev();
extern void _ZN8S18995C83v17Ev();
extern void _ZN8S18995C83v18Ev();
extern void _ZN8S18995C83v19Ev();
extern void _ZN8S18995C83v20Ev();
extern void _ZN8S18995C52v8Ev();
extern void _ZN8S18995C52v9Ev();
extern void _ZN8S18995C53v10Ev();
extern void _ZN8S18995C43v11Ev();
extern void _ZN8S18995C43v12Ev();
extern void _ZN8S18995C43v13Ev();
extern void _ZN8S18995C43v14Ev();
static  VTBL_ENTRY vtc_S18995C2[] = {
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S18995C2[0]),
  (VTBL_ENTRY)&_ZN8S18995C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18995C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18995C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v11Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v12Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18995C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18995C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v21Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v22Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v23Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v24Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v25Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v26Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v27Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v28Ev,
  (VTBL_ENTRY)&_ZN8S18995C23v29Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S18995C2[0]),
  (VTBL_ENTRY)&_ZN8S18995C83v15Ev,
  (VTBL_ENTRY)&_ZN8S18995C83v16Ev,
  (VTBL_ENTRY)&_ZN8S18995C83v17Ev,
  (VTBL_ENTRY)&_ZN8S18995C83v18Ev,
  (VTBL_ENTRY)&_ZN8S18995C83v19Ev,
  (VTBL_ENTRY)&_ZN8S18995C83v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S18995C2[0]),
  (VTBL_ENTRY)&_ZN8S18995C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18995C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18995C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v11Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v12Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v14Ev,
};
extern VTBL_ENTRY _ZTV8S18995C2[];
static  VTT_ENTRY vtt_S18995C2[] = {
  {&(_ZTV8S18995C2[3]),  3,45},
  {&(_ZTV8S18995C2[38]),  38,45},
};
extern VTBL_ENTRY _ZTI8S18995C2[];
extern  VTBL_ENTRY _ZTV8S18995C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18995C2[];
Class_Descriptor cd_S18995C2 = {  "S18995C2", // class name
  bases_S18995C2, 6,
  &(vtc_S18995C2[0]), // expected_vtbl_contents
  &(vtt_S18995C2[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI8S18995C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18995C2),45, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18995C2),2, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18995C1  : virtual S18995C2 {
  void *s18995c1f0;
  virtual  ~S18995C1(); // _ZN8S18995C1D2Ev
  virtual void  v1(); // _ZN8S18995C12v1Ev
  virtual void  v2(); // _ZN8S18995C12v2Ev
  virtual void  v3(); // _ZN8S18995C12v3Ev
  virtual void  v4(); // _ZN8S18995C12v4Ev
  virtual void  v5(); // _ZN8S18995C12v5Ev
  virtual void  v6(); // _ZN8S18995C12v6Ev
  virtual void  v7(); // _ZN8S18995C12v7Ev
  S18995C1(); // tgen
};
//SIG(1 S18995C1) C1{ VBC2{ BC3{ BC4{ BC5{ v8 v9 v10 FC6{ BC7{ BC8{ v37 v38 v39 v40 v41 v42 Fi} v43} v30 v31 v32 v33 v34 v35 v36}} v11 v12 v13 v14 Fp Fc} BC9{ v15 v16 v17 v18 v19 v20 Fi} vd v21 v22 v23 v24 v25 v26 v27 v28 Fp[2]} VBC4 vd v29 FL:0} vd v1 v2 v3 v4 v5 v6 v7 Fp}


 S18995C1 ::~S18995C1(){ note_dtor("S18995C1", this);}
void  S18995C1 ::v1(){vfunc_called(this, "_ZN8S18995C12v1Ev");}
void  S18995C1 ::v2(){vfunc_called(this, "_ZN8S18995C12v2Ev");}
void  S18995C1 ::v3(){vfunc_called(this, "_ZN8S18995C12v3Ev");}
void  S18995C1 ::v4(){vfunc_called(this, "_ZN8S18995C12v4Ev");}
void  S18995C1 ::v5(){vfunc_called(this, "_ZN8S18995C12v5Ev");}
void  S18995C1 ::v6(){vfunc_called(this, "_ZN8S18995C12v6Ev");}
void  S18995C1 ::v7(){vfunc_called(this, "_ZN8S18995C12v7Ev");}
S18995C1 ::S18995C1(){ note_ctor("S18995C1", this);} // tgen

static void Test_S18995C1()
{
  extern Class_Descriptor cd_S18995C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,17)];
    init_test(&cd_S18995C1, buf);
    S18995C1 *dp, &lv = *(dp=new (buf) S18995C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S18995C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18995C1)");
    check_base_class_offset(lv, (S18995C5*)(S18995C4*)(S18995C3*)(S18995C2*), ABISELECT(16,8), "S18995C1");
    check_base_class_offset(lv, (S18995C4*)(S18995C3*)(S18995C2*), ABISELECT(16,8), "S18995C1");
    check_base_class_offset(lv, (S18995C8*)(S18995C3*)(S18995C2*), ABISELECT(56,28), "S18995C1");
    check_base_class_offset(lv, (S18995C3*)(S18995C2*), ABISELECT(16,8), "S18995C1");
    /*is_ambiguous_... S18995C1::S18995C4 */ AMB_check_base_class_offset(lv, (S18995C5*)(S18995C4*), ABISELECT(88,44), "S18995C1");
    /*is_ambiguous_... S18995C2::S18995C4 */ AMB_check_base_class_offset(lv, (S18995C4*)(S18995C2*), ABISELECT(88,44), "S18995C1");
    check_base_class_offset(lv, (S18995C2*), ABISELECT(16,8), "S18995C1");
    check_field_offset(lv, s18995c1f0, ABISELECT(8,4), "S18995C1.s18995c1f0");
    test_class_info(&lv, &cd_S18995C1);
    dp->~S18995C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18995C1(Test_S18995C1, "S18995C1", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S18995C1C1Ev();
extern void _ZN8S18995C1D2Ev();
Name_Map name_map_S18995C1[] = {
  NSPAIR(_ZN8S18995C1C1Ev),
  NSPAIR(_ZN8S18995C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18995C5;
extern VTBL_ENTRY _ZTI8S18995C5[];
extern  VTBL_ENTRY _ZTV8S18995C5[];
extern Class_Descriptor cd_S18995C4;
extern VTBL_ENTRY _ZTI8S18995C4[];
extern  VTBL_ENTRY _ZTV8S18995C4[];
extern Class_Descriptor cd_S18995C8;
extern VTBL_ENTRY _ZTI8S18995C8[];
extern  VTBL_ENTRY _ZTV8S18995C8[];
extern Class_Descriptor cd_S18995C3;
extern VTBL_ENTRY _ZTI8S18995C3[];
extern  VTBL_ENTRY _ZTV8S18995C3[];
extern Class_Descriptor cd_S18995C5;
extern VTBL_ENTRY _ZTI8S18995C5[];
extern  VTBL_ENTRY _ZTV8S18995C5[];
extern Class_Descriptor cd_S18995C4;
extern VTBL_ENTRY _ZTI8S18995C4[];
extern  VTBL_ENTRY _ZTV8S18995C4[];
extern Class_Descriptor cd_S18995C2;
extern VTBL_ENTRY _ZTI8S18995C2[];
extern  VTBL_ENTRY _ZTV8S18995C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18995C2[];
static Base_Class bases_S18995C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18995C5,    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
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S18995C4,    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
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S18995C8,    ABISELECT(56,28), //bcp->offset
    57, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S18995C3,    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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S18995C5,    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
    5, //immediately_derived
  0, 0},
  {&cd_S18995C4,    ABISELECT(88,44), //bcp->offset
    65, //bcp->virtual_function_table_offset
    9, //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
    6, //immediately_derived
  0, 1},
  {&cd_S18995C2,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    26, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S18995C1[];
extern void _ZN8S18995C1D1Ev();
extern void _ZN8S18995C1D0Ev();
extern void _ZN8S18995C12v1Ev();
extern void _ZN8S18995C12v2Ev();
extern void _ZN8S18995C12v3Ev();
extern void _ZN8S18995C12v4Ev();
extern void _ZN8S18995C12v5Ev();
extern void _ZN8S18995C12v6Ev();
extern void _ZN8S18995C12v7Ev();
extern void _ZN8S18995C52v8Ev();
extern void _ZN8S18995C52v9Ev();
extern void _ZN8S18995C53v10Ev();
extern void _ZN8S18995C43v11Ev();
extern void _ZN8S18995C43v12Ev();
extern void _ZN8S18995C43v13Ev();
extern void _ZN8S18995C43v14Ev();
extern void ABISELECT(_ZTv0_n88_N8S18995C1D1Ev,_ZTv0_n44_N8S18995C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S18995C1D1Ev,_ZThn8_N8S18995C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S18995C1D0Ev,_ZTv0_n44_N8S18995C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S18995C1D0Ev,_ZThn8_N8S18995C1D0Ev)() __attribute__((weak));
extern void _ZN8S18995C33v21Ev();
extern void _ZN8S18995C33v22Ev();
extern void _ZN8S18995C33v23Ev();
extern void _ZN8S18995C33v24Ev();
extern void _ZN8S18995C33v25Ev();
extern void _ZN8S18995C33v26Ev();
extern void _ZN8S18995C33v27Ev();
extern void _ZN8S18995C33v28Ev();
extern void _ZN8S18995C23v29Ev();
extern void _ZN8S18995C83v15Ev();
extern void _ZN8S18995C83v16Ev();
extern void _ZN8S18995C83v17Ev();
extern void _ZN8S18995C83v18Ev();
extern void _ZN8S18995C83v19Ev();
extern void _ZN8S18995C83v20Ev();
extern void _ZN8S18995C52v8Ev();
extern void _ZN8S18995C52v9Ev();
extern void _ZN8S18995C53v10Ev();
extern void _ZN8S18995C43v11Ev();
extern void _ZN8S18995C43v12Ev();
extern void _ZN8S18995C43v13Ev();
extern void _ZN8S18995C43v14Ev();
static  VTBL_ENTRY vtc_S18995C1[] = {
  ABISELECT(88,44),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S18995C1[0]),
  (VTBL_ENTRY)&_ZN8S18995C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18995C1D0Ev,
  (VTBL_ENTRY)&_ZN8S18995C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18995C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18995C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18995C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18995C12v5Ev,
  (VTBL_ENTRY)&_ZN8S18995C12v6Ev,
  (VTBL_ENTRY)&_ZN8S18995C12v7Ev,
  0,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(72,36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S18995C1[0]),
  (VTBL_ENTRY)&_ZN8S18995C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18995C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18995C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v11Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v12Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18995C1D1Ev,_ZTv0_n44_N8S18995C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18995C1D0Ev,_ZTv0_n44_N8S18995C1D0Ev),
  (VTBL_ENTRY)&_ZN8S18995C33v21Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v22Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v23Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v24Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v25Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v26Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v27Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v28Ev,
  (VTBL_ENTRY)&_ZN8S18995C23v29Ev,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S18995C1[0]),
  (VTBL_ENTRY)&_ZN8S18995C83v15Ev,
  (VTBL_ENTRY)&_ZN8S18995C83v16Ev,
  (VTBL_ENTRY)&_ZN8S18995C83v17Ev,
  (VTBL_ENTRY)&_ZN8S18995C83v18Ev,
  (VTBL_ENTRY)&_ZN8S18995C83v19Ev,
  (VTBL_ENTRY)&_ZN8S18995C83v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S18995C1[0]),
  (VTBL_ENTRY)&_ZN8S18995C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18995C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18995C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v11Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v12Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v14Ev,
};
extern VTBL_ENTRY _ZTV8S18995C1[];
extern void _ZN8S18995C52v8Ev();
extern void _ZN8S18995C52v9Ev();
extern void _ZN8S18995C53v10Ev();
extern void _ZN8S18995C43v11Ev();
extern void _ZN8S18995C43v12Ev();
extern void _ZN8S18995C43v13Ev();
extern void _ZN8S18995C43v14Ev();
extern void _ZN8S18995C2D1Ev();
extern void _ZN8S18995C2D0Ev();
extern void _ZN8S18995C33v21Ev();
extern void _ZN8S18995C33v22Ev();
extern void _ZN8S18995C33v23Ev();
extern void _ZN8S18995C33v24Ev();
extern void _ZN8S18995C33v25Ev();
extern void _ZN8S18995C33v26Ev();
extern void _ZN8S18995C33v27Ev();
extern void _ZN8S18995C33v28Ev();
extern void _ZN8S18995C23v29Ev();
static  VTBL_ENTRY _tg__ZTV8S18995C2__8S18995C1[] = {
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S18995C2[0]),
  (VTBL_ENTRY)&_ZN8S18995C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18995C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18995C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v11Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v12Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18995C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18995C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v21Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v22Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v23Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v24Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v25Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v26Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v27Ev,
  (VTBL_ENTRY)&_ZN8S18995C33v28Ev,
  (VTBL_ENTRY)&_ZN8S18995C23v29Ev,
};
extern void _ZN8S18995C52v8Ev();
extern void _ZN8S18995C52v9Ev();
extern void _ZN8S18995C53v10Ev();
extern void _ZN8S18995C43v11Ev();
extern void _ZN8S18995C43v12Ev();
extern void _ZN8S18995C43v13Ev();
extern void _ZN8S18995C43v14Ev();
static  VTBL_ENTRY _tg__ZTV8S18995C4__A1__8S18995C2__8S18995C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S18995C2[0]),
  (VTBL_ENTRY)&_ZN8S18995C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18995C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18995C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v11Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v12Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18995C43v14Ev,
};
static  VTT_ENTRY vtt_S18995C1[] = {
  {&(_ZTV8S18995C1[4]),  4,81},
  {&(_ZTV8S18995C1[39]),  39,81},
  {&(_ZTV8S18995C1[59]),  59,81},
  {&(_ZTV8S18995C1[74]),  74,81},
  {&(_tg__ZTV8S18995C2__8S18995C1[3]),  3,21},
  {&(_tg__ZTV8S18995C4__A1__8S18995C2__8S18995C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S18995C1[];
extern  VTBL_ENTRY _ZTV8S18995C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18995C1[];
static VTBL_ENTRY alt_thunk_names194[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18995C1D0Ev,_ZTv0_n44_N8S18995C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S18995C1D0Ev,_ZThn8_N8S18995C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18995C1D1Ev,_ZTv0_n44_N8S18995C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S18995C1D1Ev,_ZThn8_N8S18995C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18995C1 = {  "S18995C1", // class name
  bases_S18995C1, 7,
  &(vtc_S18995C1[0]), // expected_vtbl_contents
  &(vtt_S18995C1[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S18995C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S18995C1),81, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18995C1),6, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names194,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18994C5  {
  ::S7218C6 s18994c5f0;
  virtual void  v8(); // _ZN8S18994C52v8Ev
  virtual void  v9(); // _ZN8S18994C52v9Ev
  virtual void  v10(); // _ZN8S18994C53v10Ev
  ~S18994C5(); // tgen
  S18994C5(); // tgen
};
//SIG(-1 S18994C5) C1{ v1 v2 v3 FC2{ BC3{ BC4{ v11 v12 v13 v14 v15 v16 Fi} v17} v4 v5 v6 v7 v8 v9 v10}}


void  S18994C5 ::v8(){vfunc_called(this, "_ZN8S18994C52v8Ev");}
void  S18994C5 ::v9(){vfunc_called(this, "_ZN8S18994C52v9Ev");}
void  S18994C5 ::v10(){vfunc_called(this, "_ZN8S18994C53v10Ev");}
S18994C5 ::~S18994C5(){ note_dtor("S18994C5", this);} // tgen
S18994C5 ::S18994C5(){ note_ctor("S18994C5", this);} // tgen

static void Test_S18994C5()
{
  extern Class_Descriptor cd_S18994C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S18994C5, buf);
    S18994C5 *dp, &lv = *(dp=new (buf) S18994C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18994C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18994C5)");
    check_field_offset(lv, s18994c5f0, ABISELECT(8,4), "S18994C5.s18994c5f0");
    test_class_info(&lv, &cd_S18994C5);
    dp->~S18994C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18994C5(Test_S18994C5, "S18994C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S18994C5C1Ev();
extern void _ZN8S18994C5D1Ev();
Name_Map name_map_S18994C5[] = {
  NSPAIR(_ZN8S18994C5C1Ev),
  NSPAIR(_ZN8S18994C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18994C5[];
extern void _ZN8S18994C52v8Ev();
extern void _ZN8S18994C52v9Ev();
extern void _ZN8S18994C53v10Ev();
static  VTBL_ENTRY vtc_S18994C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18994C5[0]),
  (VTBL_ENTRY)&_ZN8S18994C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18994C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18994C53v10Ev,
};
extern VTBL_ENTRY _ZTI8S18994C5[];
extern  VTBL_ENTRY _ZTV8S18994C5[];
Class_Descriptor cd_S18994C5 = {  "S18994C5", // class name
  0,0,//no base classes
  &(vtc_S18994C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S18994C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18994C5),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  S18994C4  : S18994C5 {
  void *s18994c4f0;
  char s18994c4f1;
  virtual void  v11(); // _ZN8S18994C43v11Ev
  virtual void  v12(); // _ZN8S18994C43v12Ev
  virtual void  v13(); // _ZN8S18994C43v13Ev
  virtual void  v14(); // _ZN8S18994C43v14Ev
  ~S18994C4(); // tgen
  S18994C4(); // tgen
};
//SIG(-1 S18994C4) C1{ BC2{ v5 v6 v7 FC3{ BC4{ BC5{ v15 v16 v17 v18 v19 v20 Fi} v21} v8 v9 v10 v11 v12 v13 v14}} v1 v2 v3 v4 Fp Fc}


void  S18994C4 ::v11(){vfunc_called(this, "_ZN8S18994C43v11Ev");}
void  S18994C4 ::v12(){vfunc_called(this, "_ZN8S18994C43v12Ev");}
void  S18994C4 ::v13(){vfunc_called(this, "_ZN8S18994C43v13Ev");}
void  S18994C4 ::v14(){vfunc_called(this, "_ZN8S18994C43v14Ev");}
S18994C4 ::~S18994C4(){ note_dtor("S18994C4", this);} // tgen
S18994C4 ::S18994C4(){ note_ctor("S18994C4", this);} // tgen

static void Test_S18994C4()
{
  extern Class_Descriptor cd_S18994C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S18994C4, buf);
    S18994C4 *dp, &lv = *(dp=new (buf) S18994C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S18994C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18994C4)");
    check_base_class_offset(lv, (S18994C5*), 0, "S18994C4");
    check_field_offset(lv, s18994c4f0, ABISELECT(24,12), "S18994C4.s18994c4f0");
    check_field_offset(lv, s18994c4f1, ABISELECT(32,16), "S18994C4.s18994c4f1");
    test_class_info(&lv, &cd_S18994C4);
    dp->~S18994C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18994C4(Test_S18994C4, "S18994C4", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S18994C4C1Ev();
extern void _ZN8S18994C4D1Ev();
Name_Map name_map_S18994C4[] = {
  NSPAIR(_ZN8S18994C4C1Ev),
  NSPAIR(_ZN8S18994C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18994C5;
extern VTBL_ENTRY _ZTI8S18994C5[];
extern  VTBL_ENTRY _ZTV8S18994C5[];
static Base_Class bases_S18994C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18994C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S18994C4[];
extern void _ZN8S18994C52v8Ev();
extern void _ZN8S18994C52v9Ev();
extern void _ZN8S18994C53v10Ev();
extern void _ZN8S18994C43v11Ev();
extern void _ZN8S18994C43v12Ev();
extern void _ZN8S18994C43v13Ev();
extern void _ZN8S18994C43v14Ev();
static  VTBL_ENTRY vtc_S18994C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18994C4[0]),
  (VTBL_ENTRY)&_ZN8S18994C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18994C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18994C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v11Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v12Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v14Ev,
};
extern VTBL_ENTRY _ZTI8S18994C4[];
extern  VTBL_ENTRY _ZTV8S18994C4[];
Class_Descriptor cd_S18994C4 = {  "S18994C4", // class name
  bases_S18994C4, 1,
  &(vtc_S18994C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S18994C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S18994C4),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  S18994C8  {
  int s18994c8f0;
  virtual void  v15(); // _ZN8S18994C83v15Ev
  virtual void  v16(); // _ZN8S18994C83v16Ev
  virtual void  v17(); // _ZN8S18994C83v17Ev
  virtual void  v18(); // _ZN8S18994C83v18Ev
  virtual void  v19(); // _ZN8S18994C83v19Ev
  virtual void  v20(); // _ZN8S18994C83v20Ev
  ~S18994C8(); // tgen
  S18994C8(); // tgen
};
//SIG(-1 S18994C8) C1{ v1 v2 v3 v4 v5 v6 Fi}


void  S18994C8 ::v15(){vfunc_called(this, "_ZN8S18994C83v15Ev");}
void  S18994C8 ::v16(){vfunc_called(this, "_ZN8S18994C83v16Ev");}
void  S18994C8 ::v17(){vfunc_called(this, "_ZN8S18994C83v17Ev");}
void  S18994C8 ::v18(){vfunc_called(this, "_ZN8S18994C83v18Ev");}
void  S18994C8 ::v19(){vfunc_called(this, "_ZN8S18994C83v19Ev");}
void  S18994C8 ::v20(){vfunc_called(this, "_ZN8S18994C83v20Ev");}
S18994C8 ::~S18994C8(){ note_dtor("S18994C8", this);} // tgen
S18994C8 ::S18994C8(){ note_ctor("S18994C8", this);} // tgen

static void Test_S18994C8()
{
  extern Class_Descriptor cd_S18994C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S18994C8, buf);
    S18994C8 *dp, &lv = *(dp=new (buf) S18994C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S18994C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18994C8)");
    check_field_offset(lv, s18994c8f0, ABISELECT(8,4), "S18994C8.s18994c8f0");
    test_class_info(&lv, &cd_S18994C8);
    dp->~S18994C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18994C8(Test_S18994C8, "S18994C8", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S18994C8C1Ev();
extern void _ZN8S18994C8D1Ev();
Name_Map name_map_S18994C8[] = {
  NSPAIR(_ZN8S18994C8C1Ev),
  NSPAIR(_ZN8S18994C8D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18994C8[];
extern void _ZN8S18994C83v15Ev();
extern void _ZN8S18994C83v16Ev();
extern void _ZN8S18994C83v17Ev();
extern void _ZN8S18994C83v18Ev();
extern void _ZN8S18994C83v19Ev();
extern void _ZN8S18994C83v20Ev();
static  VTBL_ENTRY vtc_S18994C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18994C8[0]),
  (VTBL_ENTRY)&_ZN8S18994C83v15Ev,
  (VTBL_ENTRY)&_ZN8S18994C83v16Ev,
  (VTBL_ENTRY)&_ZN8S18994C83v17Ev,
  (VTBL_ENTRY)&_ZN8S18994C83v18Ev,
  (VTBL_ENTRY)&_ZN8S18994C83v19Ev,
  (VTBL_ENTRY)&_ZN8S18994C83v20Ev,
};
extern VTBL_ENTRY _ZTI8S18994C8[];
extern  VTBL_ENTRY _ZTV8S18994C8[];
Class_Descriptor cd_S18994C8 = {  "S18994C8", // class name
  0,0,//no base classes
  &(vtc_S18994C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S18994C8),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18994C8),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  S18994C3  : S18994C4 , S18994C8 {
  void *s18994c3f0[2];
  virtual  ~S18994C3(); // _ZN8S18994C3D1Ev
  virtual void  v21(); // _ZN8S18994C33v21Ev
  virtual void  v22(); // _ZN8S18994C33v22Ev
  virtual void  v23(); // _ZN8S18994C33v23Ev
  virtual void  v24(); // _ZN8S18994C33v24Ev
  virtual void  v25(); // _ZN8S18994C33v25Ev
  virtual void  v26(); // _ZN8S18994C33v26Ev
  virtual void  v27(); // _ZN8S18994C33v27Ev
  virtual void  v28(); // _ZN8S18994C33v28Ev
  S18994C3(); // tgen
};
//SIG(-1 S18994C3) C1{ BC2{ BC3{ v9 v10 v11 FC4{ BC5{ BC6{ v29 v30 v31 v32 v33 v34 Fi} v35} v22 v23 v24 v25 v26 v27 v28}} v12 v13 v14 v15 Fp Fc} BC7{ v16 v17 v18 v19 v20 v21 Fi} vd v1 v2 v3 v4 v5 v6 v7 v8 Fp[2]}


 S18994C3 ::~S18994C3(){ note_dtor("S18994C3", this);}
void  S18994C3 ::v21(){vfunc_called(this, "_ZN8S18994C33v21Ev");}
void  S18994C3 ::v22(){vfunc_called(this, "_ZN8S18994C33v22Ev");}
void  S18994C3 ::v23(){vfunc_called(this, "_ZN8S18994C33v23Ev");}
void  S18994C3 ::v24(){vfunc_called(this, "_ZN8S18994C33v24Ev");}
void  S18994C3 ::v25(){vfunc_called(this, "_ZN8S18994C33v25Ev");}
void  S18994C3 ::v26(){vfunc_called(this, "_ZN8S18994C33v26Ev");}
void  S18994C3 ::v27(){vfunc_called(this, "_ZN8S18994C33v27Ev");}
void  S18994C3 ::v28(){vfunc_called(this, "_ZN8S18994C33v28Ev");}
S18994C3 ::S18994C3(){ note_ctor("S18994C3", this);} // tgen

static void Test_S18994C3()
{
  extern Class_Descriptor cd_S18994C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S18994C3, buf);
    S18994C3 *dp, &lv = *(dp=new (buf) S18994C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S18994C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18994C3)");
    check_base_class_offset(lv, (S18994C5*)(S18994C4*), 0, "S18994C3");
    check_base_class_offset(lv, (S18994C4*), 0, "S18994C3");
    check_base_class_offset(lv, (S18994C8*), ABISELECT(40,20), "S18994C3");
    check_field_offset(lv, s18994c3f0, ABISELECT(56,28), "S18994C3.s18994c3f0");
    test_class_info(&lv, &cd_S18994C3);
    dp->~S18994C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18994C3(Test_S18994C3, "S18994C3", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN8S18994C3C1Ev();
extern void _ZN8S18994C3D1Ev();
Name_Map name_map_S18994C3[] = {
  NSPAIR(_ZN8S18994C3C1Ev),
  NSPAIR(_ZN8S18994C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S18994C5;
extern VTBL_ENTRY _ZTI8S18994C5[];
extern  VTBL_ENTRY _ZTV8S18994C5[];
extern Class_Descriptor cd_S18994C4;
extern VTBL_ENTRY _ZTI8S18994C4[];
extern  VTBL_ENTRY _ZTV8S18994C4[];
extern Class_Descriptor cd_S18994C8;
extern VTBL_ENTRY _ZTI8S18994C8[];
extern  VTBL_ENTRY _ZTV8S18994C8[];
static Base_Class bases_S18994C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18994C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S18994C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S18994C8,    ABISELECT(40,20), //bcp->offset
    19, //bcp->virtual_function_table_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 _ZTI8S18994C3[];
extern void _ZN8S18994C52v8Ev();
extern void _ZN8S18994C52v9Ev();
extern void _ZN8S18994C53v10Ev();
extern void _ZN8S18994C43v11Ev();
extern void _ZN8S18994C43v12Ev();
extern void _ZN8S18994C43v13Ev();
extern void _ZN8S18994C43v14Ev();
extern void _ZN8S18994C3D1Ev();
extern void _ZN8S18994C3D0Ev();
extern void _ZN8S18994C33v21Ev();
extern void _ZN8S18994C33v22Ev();
extern void _ZN8S18994C33v23Ev();
extern void _ZN8S18994C33v24Ev();
extern void _ZN8S18994C33v25Ev();
extern void _ZN8S18994C33v26Ev();
extern void _ZN8S18994C33v27Ev();
extern void _ZN8S18994C33v28Ev();
extern void _ZN8S18994C83v15Ev();
extern void _ZN8S18994C83v16Ev();
extern void _ZN8S18994C83v17Ev();
extern void _ZN8S18994C83v18Ev();
extern void _ZN8S18994C83v19Ev();
extern void _ZN8S18994C83v20Ev();
static  VTBL_ENTRY vtc_S18994C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18994C3[0]),
  (VTBL_ENTRY)&_ZN8S18994C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18994C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18994C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v11Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v12Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18994C3D1Ev,
  (VTBL_ENTRY)&_ZN8S18994C3D0Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v21Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v22Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v23Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v24Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v25Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v26Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v27Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v28Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S18994C3[0]),
  (VTBL_ENTRY)&_ZN8S18994C83v15Ev,
  (VTBL_ENTRY)&_ZN8S18994C83v16Ev,
  (VTBL_ENTRY)&_ZN8S18994C83v17Ev,
  (VTBL_ENTRY)&_ZN8S18994C83v18Ev,
  (VTBL_ENTRY)&_ZN8S18994C83v19Ev,
  (VTBL_ENTRY)&_ZN8S18994C83v20Ev,
};
extern VTBL_ENTRY _ZTI8S18994C3[];
extern  VTBL_ENTRY _ZTV8S18994C3[];
Class_Descriptor cd_S18994C3 = {  "S18994C3", // class name
  bases_S18994C3, 3,
  &(vtc_S18994C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI8S18994C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18994C3),27, //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  S18994C2  : S18994C3 , virtual S18994C4 {
  int  :0;
  virtual  ~S18994C2(); // _ZN8S18994C2D2Ev
  virtual void  v29(); // _ZN8S18994C23v29Ev
  S18994C2(); // tgen
};
//SIG(-1 S18994C2) C1{ BC2{ BC3{ BC4{ v2 v3 v4 FC5{ BC6{ BC7{ v30 v31 v32 v33 v34 v35 Fi} v36} v23 v24 v25 v26 v27 v28 v29}} v5 v6 v7 v8 Fp Fc} BC8{ v9 v10 v11 v12 v13 v14 Fi} vd v15 v16 v17 v18 v19 v20 v21 v22 Fp[2]} VBC3 vd v1 Fi:0}


 S18994C2 ::~S18994C2(){ note_dtor("S18994C2", this);}
void  S18994C2 ::v29(){vfunc_called(this, "_ZN8S18994C23v29Ev");}
S18994C2 ::S18994C2(){ note_ctor("S18994C2", this);} // tgen

static void Test_S18994C2()
{
  extern Class_Descriptor cd_S18994C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[15];
    init_test(&cd_S18994C2, buf);
    S18994C2 *dp, &lv = *(dp=new (buf) S18994C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,56), "sizeof(S18994C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18994C2)");
    check_base_class_offset(lv, (S18994C5*)(S18994C4*)(S18994C3*), 0, "S18994C2");
    check_base_class_offset(lv, (S18994C4*)(S18994C3*), 0, "S18994C2");
    check_base_class_offset(lv, (S18994C8*)(S18994C3*), ABISELECT(40,20), "S18994C2");
    check_base_class_offset(lv, (S18994C3*), 0, "S18994C2");
    /*is_ambiguous_... S18994C2::S18994C4 */ AMB_check_base_class_offset(lv, (S18994C5*)(S18994C4*), ABISELECT(72,36), "S18994C2");
    /*is_ambiguous_... S18994C2::S18994C4 */ AMB_check_base_class_offset(lv, (S18994C4*), ABISELECT(72,36), "S18994C2");
    test_class_info(&lv, &cd_S18994C2);
    dp->~S18994C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18994C2(Test_S18994C2, "S18994C2", ABISELECT(112,56));

#else // __cplusplus

extern void _ZN8S18994C2C1Ev();
extern void _ZN8S18994C2D2Ev();
Name_Map name_map_S18994C2[] = {
  NSPAIR(_ZN8S18994C2C1Ev),
  NSPAIR(_ZN8S18994C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18994C5;
extern VTBL_ENTRY _ZTI8S18994C5[];
extern  VTBL_ENTRY _ZTV8S18994C5[];
extern Class_Descriptor cd_S18994C4;
extern VTBL_ENTRY _ZTI8S18994C4[];
extern  VTBL_ENTRY _ZTV8S18994C4[];
extern Class_Descriptor cd_S18994C8;
extern VTBL_ENTRY _ZTI8S18994C8[];
extern  VTBL_ENTRY _ZTV8S18994C8[];
extern Class_Descriptor cd_S18994C3;
extern VTBL_ENTRY _ZTI8S18994C3[];
extern  VTBL_ENTRY _ZTV8S18994C3[];
extern Class_Descriptor cd_S18994C5;
extern VTBL_ENTRY _ZTI8S18994C5[];
extern  VTBL_ENTRY _ZTV8S18994C5[];
extern Class_Descriptor cd_S18994C4;
extern VTBL_ENTRY _ZTI8S18994C4[];
extern  VTBL_ENTRY _ZTV8S18994C4[];
static Base_Class bases_S18994C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18994C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
  0, 0},
  {&cd_S18994C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S18994C8,    ABISELECT(40,20), //bcp->offset
    21, //bcp->virtual_function_table_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
    3, //immediately_derived
  0, 0},
  {&cd_S18994C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S18994C5,    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_S18994C4,    ABISELECT(72,36), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S18994C2[];
extern void _ZN8S18994C52v8Ev();
extern void _ZN8S18994C52v9Ev();
extern void _ZN8S18994C53v10Ev();
extern void _ZN8S18994C43v11Ev();
extern void _ZN8S18994C43v12Ev();
extern void _ZN8S18994C43v13Ev();
extern void _ZN8S18994C43v14Ev();
extern void _ZN8S18994C2D1Ev();
extern void _ZN8S18994C2D0Ev();
extern void _ZN8S18994C33v21Ev();
extern void _ZN8S18994C33v22Ev();
extern void _ZN8S18994C33v23Ev();
extern void _ZN8S18994C33v24Ev();
extern void _ZN8S18994C33v25Ev();
extern void _ZN8S18994C33v26Ev();
extern void _ZN8S18994C33v27Ev();
extern void _ZN8S18994C33v28Ev();
extern void _ZN8S18994C23v29Ev();
extern void _ZN8S18994C83v15Ev();
extern void _ZN8S18994C83v16Ev();
extern void _ZN8S18994C83v17Ev();
extern void _ZN8S18994C83v18Ev();
extern void _ZN8S18994C83v19Ev();
extern void _ZN8S18994C83v20Ev();
extern void _ZN8S18994C52v8Ev();
extern void _ZN8S18994C52v9Ev();
extern void _ZN8S18994C53v10Ev();
extern void _ZN8S18994C43v11Ev();
extern void _ZN8S18994C43v12Ev();
extern void _ZN8S18994C43v13Ev();
extern void _ZN8S18994C43v14Ev();
static  VTBL_ENTRY vtc_S18994C2[] = {
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S18994C2[0]),
  (VTBL_ENTRY)&_ZN8S18994C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18994C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18994C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v11Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v12Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18994C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18994C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v21Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v22Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v23Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v24Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v25Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v26Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v27Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v28Ev,
  (VTBL_ENTRY)&_ZN8S18994C23v29Ev,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S18994C2[0]),
  (VTBL_ENTRY)&_ZN8S18994C83v15Ev,
  (VTBL_ENTRY)&_ZN8S18994C83v16Ev,
  (VTBL_ENTRY)&_ZN8S18994C83v17Ev,
  (VTBL_ENTRY)&_ZN8S18994C83v18Ev,
  (VTBL_ENTRY)&_ZN8S18994C83v19Ev,
  (VTBL_ENTRY)&_ZN8S18994C83v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S18994C2[0]),
  (VTBL_ENTRY)&_ZN8S18994C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18994C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18994C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v11Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v12Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v14Ev,
};
extern VTBL_ENTRY _ZTV8S18994C2[];
static  VTT_ENTRY vtt_S18994C2[] = {
  {&(_ZTV8S18994C2[3]),  3,45},
  {&(_ZTV8S18994C2[38]),  38,45},
};
extern VTBL_ENTRY _ZTI8S18994C2[];
extern  VTBL_ENTRY _ZTV8S18994C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18994C2[];
Class_Descriptor cd_S18994C2 = {  "S18994C2", // class name
  bases_S18994C2, 6,
  &(vtc_S18994C2[0]), // expected_vtbl_contents
  &(vtt_S18994C2[0]), // expected_vtt_contents
  ABISELECT(112,56), // object size
  NSPAIRA(_ZTI8S18994C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S18994C2),45, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18994C2),2, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18994C1  : virtual S18994C2 {
  void *s18994c1f0;
  virtual  ~S18994C1(); // _ZN8S18994C1D2Ev
  virtual void  v1(); // _ZN8S18994C12v1Ev
  virtual void  v2(); // _ZN8S18994C12v2Ev
  virtual void  v3(); // _ZN8S18994C12v3Ev
  virtual void  v4(); // _ZN8S18994C12v4Ev
  virtual void  v5(); // _ZN8S18994C12v5Ev
  virtual void  v6(); // _ZN8S18994C12v6Ev
  virtual void  v7(); // _ZN8S18994C12v7Ev
  S18994C1(); // tgen
};
//SIG(1 S18994C1) C1{ VBC2{ BC3{ BC4{ BC5{ v8 v9 v10 FC6{ BC7{ BC8{ v37 v38 v39 v40 v41 v42 Fi} v43} v30 v31 v32 v33 v34 v35 v36}} v11 v12 v13 v14 Fp Fc} BC9{ v15 v16 v17 v18 v19 v20 Fi} vd v21 v22 v23 v24 v25 v26 v27 v28 Fp[2]} VBC4 vd v29 Fi:0} vd v1 v2 v3 v4 v5 v6 v7 Fp}


 S18994C1 ::~S18994C1(){ note_dtor("S18994C1", this);}
void  S18994C1 ::v1(){vfunc_called(this, "_ZN8S18994C12v1Ev");}
void  S18994C1 ::v2(){vfunc_called(this, "_ZN8S18994C12v2Ev");}
void  S18994C1 ::v3(){vfunc_called(this, "_ZN8S18994C12v3Ev");}
void  S18994C1 ::v4(){vfunc_called(this, "_ZN8S18994C12v4Ev");}
void  S18994C1 ::v5(){vfunc_called(this, "_ZN8S18994C12v5Ev");}
void  S18994C1 ::v6(){vfunc_called(this, "_ZN8S18994C12v6Ev");}
void  S18994C1 ::v7(){vfunc_called(this, "_ZN8S18994C12v7Ev");}
S18994C1 ::S18994C1(){ note_ctor("S18994C1", this);} // tgen

static void Test_S18994C1()
{
  extern Class_Descriptor cd_S18994C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[17];
    init_test(&cd_S18994C1, buf);
    S18994C1 *dp, &lv = *(dp=new (buf) S18994C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S18994C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18994C1)");
    check_base_class_offset(lv, (S18994C5*)(S18994C4*)(S18994C3*)(S18994C2*), ABISELECT(16,8), "S18994C1");
    check_base_class_offset(lv, (S18994C4*)(S18994C3*)(S18994C2*), ABISELECT(16,8), "S18994C1");
    check_base_class_offset(lv, (S18994C8*)(S18994C3*)(S18994C2*), ABISELECT(56,28), "S18994C1");
    check_base_class_offset(lv, (S18994C3*)(S18994C2*), ABISELECT(16,8), "S18994C1");
    /*is_ambiguous_... S18994C1::S18994C4 */ AMB_check_base_class_offset(lv, (S18994C5*)(S18994C4*), ABISELECT(88,44), "S18994C1");
    /*is_ambiguous_... S18994C2::S18994C4 */ AMB_check_base_class_offset(lv, (S18994C4*)(S18994C2*), ABISELECT(88,44), "S18994C1");
    check_base_class_offset(lv, (S18994C2*), ABISELECT(16,8), "S18994C1");
    check_field_offset(lv, s18994c1f0, ABISELECT(8,4), "S18994C1.s18994c1f0");
    test_class_info(&lv, &cd_S18994C1);
    dp->~S18994C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18994C1(Test_S18994C1, "S18994C1", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S18994C1C1Ev();
extern void _ZN8S18994C1D2Ev();
Name_Map name_map_S18994C1[] = {
  NSPAIR(_ZN8S18994C1C1Ev),
  NSPAIR(_ZN8S18994C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S18994C5;
extern VTBL_ENTRY _ZTI8S18994C5[];
extern  VTBL_ENTRY _ZTV8S18994C5[];
extern Class_Descriptor cd_S18994C4;
extern VTBL_ENTRY _ZTI8S18994C4[];
extern  VTBL_ENTRY _ZTV8S18994C4[];
extern Class_Descriptor cd_S18994C8;
extern VTBL_ENTRY _ZTI8S18994C8[];
extern  VTBL_ENTRY _ZTV8S18994C8[];
extern Class_Descriptor cd_S18994C3;
extern VTBL_ENTRY _ZTI8S18994C3[];
extern  VTBL_ENTRY _ZTV8S18994C3[];
extern Class_Descriptor cd_S18994C5;
extern VTBL_ENTRY _ZTI8S18994C5[];
extern  VTBL_ENTRY _ZTV8S18994C5[];
extern Class_Descriptor cd_S18994C4;
extern VTBL_ENTRY _ZTI8S18994C4[];
extern  VTBL_ENTRY _ZTV8S18994C4[];
extern Class_Descriptor cd_S18994C2;
extern VTBL_ENTRY _ZTI8S18994C2[];
extern  VTBL_ENTRY _ZTV8S18994C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18994C2[];
static Base_Class bases_S18994C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S18994C5,    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
    3, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S18994C4,    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
    4, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S18994C8,    ABISELECT(56,28), //bcp->offset
    57, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S18994C3,    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
    6, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S18994C5,    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
    5, //immediately_derived
  0, 0},
  {&cd_S18994C4,    ABISELECT(88,44), //bcp->offset
    65, //bcp->virtual_function_table_offset
    9, //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
    6, //immediately_derived
  0, 1},
  {&cd_S18994C2,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    26, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S18994C1[];
extern void _ZN8S18994C1D1Ev();
extern void _ZN8S18994C1D0Ev();
extern void _ZN8S18994C12v1Ev();
extern void _ZN8S18994C12v2Ev();
extern void _ZN8S18994C12v3Ev();
extern void _ZN8S18994C12v4Ev();
extern void _ZN8S18994C12v5Ev();
extern void _ZN8S18994C12v6Ev();
extern void _ZN8S18994C12v7Ev();
extern void _ZN8S18994C52v8Ev();
extern void _ZN8S18994C52v9Ev();
extern void _ZN8S18994C53v10Ev();
extern void _ZN8S18994C43v11Ev();
extern void _ZN8S18994C43v12Ev();
extern void _ZN8S18994C43v13Ev();
extern void _ZN8S18994C43v14Ev();
extern void ABISELECT(_ZTv0_n88_N8S18994C1D1Ev,_ZTv0_n44_N8S18994C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S18994C1D1Ev,_ZThn8_N8S18994C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S18994C1D0Ev,_ZTv0_n44_N8S18994C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S18994C1D0Ev,_ZThn8_N8S18994C1D0Ev)() __attribute__((weak));
extern void _ZN8S18994C33v21Ev();
extern void _ZN8S18994C33v22Ev();
extern void _ZN8S18994C33v23Ev();
extern void _ZN8S18994C33v24Ev();
extern void _ZN8S18994C33v25Ev();
extern void _ZN8S18994C33v26Ev();
extern void _ZN8S18994C33v27Ev();
extern void _ZN8S18994C33v28Ev();
extern void _ZN8S18994C23v29Ev();
extern void _ZN8S18994C83v15Ev();
extern void _ZN8S18994C83v16Ev();
extern void _ZN8S18994C83v17Ev();
extern void _ZN8S18994C83v18Ev();
extern void _ZN8S18994C83v19Ev();
extern void _ZN8S18994C83v20Ev();
extern void _ZN8S18994C52v8Ev();
extern void _ZN8S18994C52v9Ev();
extern void _ZN8S18994C53v10Ev();
extern void _ZN8S18994C43v11Ev();
extern void _ZN8S18994C43v12Ev();
extern void _ZN8S18994C43v13Ev();
extern void _ZN8S18994C43v14Ev();
static  VTBL_ENTRY vtc_S18994C1[] = {
  ABISELECT(88,44),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S18994C1[0]),
  (VTBL_ENTRY)&_ZN8S18994C1D1Ev,
  (VTBL_ENTRY)&_ZN8S18994C1D0Ev,
  (VTBL_ENTRY)&_ZN8S18994C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18994C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18994C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18994C12v4Ev,
  (VTBL_ENTRY)&_ZN8S18994C12v5Ev,
  (VTBL_ENTRY)&_ZN8S18994C12v6Ev,
  (VTBL_ENTRY)&_ZN8S18994C12v7Ev,
  0,
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(72,36),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S18994C1[0]),
  (VTBL_ENTRY)&_ZN8S18994C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18994C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18994C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v11Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v12Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v14Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18994C1D1Ev,_ZTv0_n44_N8S18994C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S18994C1D0Ev,_ZTv0_n44_N8S18994C1D0Ev),
  (VTBL_ENTRY)&_ZN8S18994C33v21Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v22Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v23Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v24Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v25Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v26Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v27Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v28Ev,
  (VTBL_ENTRY)&_ZN8S18994C23v29Ev,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S18994C1[0]),
  (VTBL_ENTRY)&_ZN8S18994C83v15Ev,
  (VTBL_ENTRY)&_ZN8S18994C83v16Ev,
  (VTBL_ENTRY)&_ZN8S18994C83v17Ev,
  (VTBL_ENTRY)&_ZN8S18994C83v18Ev,
  (VTBL_ENTRY)&_ZN8S18994C83v19Ev,
  (VTBL_ENTRY)&_ZN8S18994C83v20Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-88,-44),
  (VTBL_ENTRY)&(_ZTI8S18994C1[0]),
  (VTBL_ENTRY)&_ZN8S18994C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18994C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18994C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v11Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v12Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v14Ev,
};
extern VTBL_ENTRY _ZTV8S18994C1[];
extern void _ZN8S18994C52v8Ev();
extern void _ZN8S18994C52v9Ev();
extern void _ZN8S18994C53v10Ev();
extern void _ZN8S18994C43v11Ev();
extern void _ZN8S18994C43v12Ev();
extern void _ZN8S18994C43v13Ev();
extern void _ZN8S18994C43v14Ev();
extern void _ZN8S18994C2D1Ev();
extern void _ZN8S18994C2D0Ev();
extern void _ZN8S18994C33v21Ev();
extern void _ZN8S18994C33v22Ev();
extern void _ZN8S18994C33v23Ev();
extern void _ZN8S18994C33v24Ev();
extern void _ZN8S18994C33v25Ev();
extern void _ZN8S18994C33v26Ev();
extern void _ZN8S18994C33v27Ev();
extern void _ZN8S18994C33v28Ev();
extern void _ZN8S18994C23v29Ev();
static  VTBL_ENTRY _tg__ZTV8S18994C2__8S18994C1[] = {
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S18994C2[0]),
  (VTBL_ENTRY)&_ZN8S18994C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18994C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18994C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v11Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v12Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v14Ev,
  (VTBL_ENTRY)&_ZN8S18994C2D1Ev,
  (VTBL_ENTRY)&_ZN8S18994C2D0Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v21Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v22Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v23Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v24Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v25Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v26Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v27Ev,
  (VTBL_ENTRY)&_ZN8S18994C33v28Ev,
  (VTBL_ENTRY)&_ZN8S18994C23v29Ev,
};
extern void _ZN8S18994C52v8Ev();
extern void _ZN8S18994C52v9Ev();
extern void _ZN8S18994C53v10Ev();
extern void _ZN8S18994C43v11Ev();
extern void _ZN8S18994C43v12Ev();
extern void _ZN8S18994C43v13Ev();
extern void _ZN8S18994C43v14Ev();
static  VTBL_ENTRY _tg__ZTV8S18994C4__A1__8S18994C2__8S18994C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S18994C2[0]),
  (VTBL_ENTRY)&_ZN8S18994C52v8Ev,
  (VTBL_ENTRY)&_ZN8S18994C52v9Ev,
  (VTBL_ENTRY)&_ZN8S18994C53v10Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v11Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v12Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v13Ev,
  (VTBL_ENTRY)&_ZN8S18994C43v14Ev,
};
static  VTT_ENTRY vtt_S18994C1[] = {
  {&(_ZTV8S18994C1[4]),  4,81},
  {&(_ZTV8S18994C1[39]),  39,81},
  {&(_ZTV8S18994C1[59]),  59,81},
  {&(_ZTV8S18994C1[74]),  74,81},
  {&(_tg__ZTV8S18994C2__8S18994C1[3]),  3,21},
  {&(_tg__ZTV8S18994C4__A1__8S18994C2__8S18994C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S18994C1[];
extern  VTBL_ENTRY _ZTV8S18994C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S18994C1[];
static VTBL_ENTRY alt_thunk_names195[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18994C1D0Ev,_ZTv0_n44_N8S18994C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S18994C1D0Ev,_ZThn8_N8S18994C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S18994C1D1Ev,_ZTv0_n44_N8S18994C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S18994C1D1Ev,_ZThn8_N8S18994C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S18994C1 = {  "S18994C1", // class name
  bases_S18994C1, 7,
  &(vtc_S18994C1[0]), // expected_vtbl_contents
  &(vtt_S18994C1[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S18994C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S18994C1),81, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S18994C1),6, //virtual table table var
  7, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names195,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7241C3  : S2398C28_nt , S2791C3 {
  long double s7241c3f0;
  int s7241c3f1;
  virtual void  v1(); // _ZN7S7241C32v1Ev
  ~S7241C3(); // tgen
  S7241C3(); // tgen
};
//SIG(-1 S7241C3) C1{ BC2{ m Fc[2]} BC3{ m Fp FL Fi FC2 FC2 Fi} v1 FD Fi}


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

static void Test_S7241C3()
{
  extern Class_Descriptor cd_S7241C3;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,13)];
    init_test(&cd_S7241C3, buf);
    S7241C3 *dp, &lv = *(dp=new (buf) S7241C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S7241C3)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7241C3)");
    check_base_class_offset(lv, (S2398C28_nt*), ABISELECT(8,4), "S7241C3");
    check_base_class_offset(lv, (S2791C3*), ABISELECT(16,8), "S7241C3");
    check_field_offset(lv, s7241c3f0, ABISELECT(48,32), "S7241C3.s7241c3f0");
    check_field_offset(lv, s7241c3f1, ABISELECT(64,44), "S7241C3.s7241c3f1");
    test_class_info(&lv, &cd_S7241C3);
    dp->~S7241C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7241C3(Test_S7241C3, "S7241C3", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S7241C3C1Ev();
extern void _ZN7S7241C3D1Ev();
Name_Map name_map_S7241C3[] = {
  NSPAIR(_ZN7S7241C3C1Ev),
  NSPAIR(_ZN7S7241C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
static Base_Class bases_S7241C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C28_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},
  {&cd_S2791C3,    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 _ZTI7S7241C3[];
extern void _ZN7S7241C32v1Ev();
static  VTBL_ENTRY vtc_S7241C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7241C3[0]),
  (VTBL_ENTRY)&_ZN7S7241C32v1Ev,
};
extern VTBL_ENTRY _ZTI7S7241C3[];
extern  VTBL_ENTRY _ZTV7S7241C3[];
Class_Descriptor cd_S7241C3 = {  "S7241C3", // class name
  bases_S7241C3, 2,
  &(vtc_S7241C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S7241C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7241C3),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7241C2  : virtual S7241C3 {
  void *s7241c2f0;
  long double s7241c2f1;
  void *s7241c2f2;
  short s7241c2f3;
  char s7241c2f4;
  ~S7241C2(); // tgen
  S7241C2(); // tgen
};
//SIG(-1 S7241C2) C1{ VBC2{ BC3{ m Fc[2]} BC4{ m Fp FL Fi FC3 FC3 Fi} v1 FD Fi} Fp FD Fp Fs Fc}


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

static void Test_S7241C2()
{
  extern Class_Descriptor cd_S7241C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,20)];
    init_test(&cd_S7241C2, buf);
    S7241C2 *dp, &lv = *(dp=new (buf) S7241C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,76), "sizeof(S7241C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7241C2)");
    check_base_class_offset(lv, (S2398C28_nt*)(S7241C3*), ABISELECT(56,32), "S7241C2");
    check_base_class_offset(lv, (S2791C3*)(S7241C3*), ABISELECT(64,36), "S7241C2");
    check_base_class_offset(lv, (S7241C3*), ABISELECT(48,28), "S7241C2");
    check_field_offset(lv, s7241c2f0, ABISELECT(8,4), "S7241C2.s7241c2f0");
    check_field_offset(lv, s7241c2f1, ABISELECT(16,8), "S7241C2.s7241c2f1");
    check_field_offset(lv, s7241c2f2, ABISELECT(32,20), "S7241C2.s7241c2f2");
    check_field_offset(lv, s7241c2f3, ABISELECT(40,24), "S7241C2.s7241c2f3");
    check_field_offset(lv, s7241c2f4, ABISELECT(42,26), "S7241C2.s7241c2f4");
    test_class_info(&lv, &cd_S7241C2);
    dp->~S7241C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7241C2(Test_S7241C2, "S7241C2", ABISELECT(128,76));

#else // __cplusplus

extern void _ZN7S7241C2C1Ev();
extern void _ZN7S7241C2D1Ev();
Name_Map name_map_S7241C2[] = {
  NSPAIR(_ZN7S7241C2C1Ev),
  NSPAIR(_ZN7S7241C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7241C3;
extern VTBL_ENTRY _ZTI7S7241C3[];
extern  VTBL_ENTRY _ZTV7S7241C3[];
static Base_Class bases_S7241C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C28_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
    2, //immediately_derived
  0, 0},
  {&cd_S2791C3,    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
    2, //immediately_derived
  0, 0},
  {&cd_S7241C3,    ABISELECT(48,28), //bcp->offset
    3, //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 _ZTI7S7241C2[];
extern void _ZN7S7241C32v1Ev();
static  VTBL_ENTRY vtc_S7241C2[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7241C2[0]),
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7241C2[0]),
  (VTBL_ENTRY)&_ZN7S7241C32v1Ev,
};
extern VTBL_ENTRY _ZTV7S7241C2[];
static  VTT_ENTRY vtt_S7241C2[] = {
  {&(_ZTV7S7241C2[3]),  3,7},
  {&(_ZTV7S7241C2[6]),  6,7},
};
extern VTBL_ENTRY _ZTI7S7241C2[];
extern  VTBL_ENTRY _ZTV7S7241C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7241C2[];
Class_Descriptor cd_S7241C2 = {  "S7241C2", // class name
  bases_S7241C2, 3,
  &(vtc_S7241C2[0]), // expected_vtbl_contents
  &(vtt_S7241C2[0]), // expected_vtt_contents
  ABISELECT(128,76), // object size
  NSPAIRA(_ZTI7S7241C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7241C2),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7241C2),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  S7241C8  : S2791C3 , virtual S7241C2 , S2398C28_nt , S7241C3 {
  __tsi64 s7241c8f0[8];
  int s7241c8f1;
  long s7241c8f2;
  ::S2791C3 s7241c8f3;
  short s7241c8f4;
  ::S7241C3 s7241c8f5[2];
  virtual  ~S7241C8(); // _ZN7S7241C8D2Ev
  S7241C8(); // tgen
};
//SIG(-1 S7241C8) C1{ BC2{ m Fp FL Fi FC3{ m Fc[2]} FC3 Fi} VBC4{ VBC5{ BC3 BC2 v1 FD Fi} Fp FD Fp Fs Fc} BC3 BC5 vd FL[8] Fi Fl FC2 Fs FC5[2]}


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

static void Test_S7241C8()
{
  extern Class_Descriptor cd_S7241C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(34,88)];
    init_test(&cd_S7241C8, buf);
    S7241C8 *dp, &lv = *(dp=new (buf) S7241C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,348), "sizeof(S7241C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7241C8)");
    /*is_ambiguous_... S7241C8::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*), ABISELECT(72,48), "S7241C8");
    /*is_ambiguous_... S7241C8::S7241C3 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7241C3*), ABISELECT(456,304), "S7241C8");
    /*is_ambiguous_... S7241C8::S7241C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7241C3*), ABISELECT(464,308), "S7241C8");
    check_base_class_offset(lv, (S7241C3*)(S7241C2*), ABISELECT(448,300), "S7241C8");
    check_base_class_offset(lv, (S7241C2*), ABISELECT(400,272), "S7241C8");
    /*is_ambiguous_... S7241C8::S2398C28_nt */ AMB_check_base_class_offset(lv, (S2398C28_nt*), ABISELECT(104,72), "S7241C8");
    /*is_ambiguous_... S7241C8::S7241C3 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7241C3*), ABISELECT(8,4), "S7241C8");
    /*is_ambiguous_... S7241C8::S7241C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7241C3*), ABISELECT(16,8), "S7241C8");
    /*is_ambiguous_... S7241C8::S7241C3 */ AMB_check_base_class_offset(lv, (S7241C3*), 0, "S7241C8");
    check_field_offset(lv, s7241c8f0, ABISELECT(112,76), "S7241C8.s7241c8f0");
    check_field_offset(lv, s7241c8f1, ABISELECT(176,140), "S7241C8.s7241c8f1");
    check_field_offset(lv, s7241c8f2, ABISELECT(184,144), "S7241C8.s7241c8f2");
    check_field_offset(lv, s7241c8f3, ABISELECT(192,148), "S7241C8.s7241c8f3");
    check_field_offset(lv, s7241c8f4, ABISELECT(224,172), "S7241C8.s7241c8f4");
    check_field_offset(lv, s7241c8f5, ABISELECT(240,176), "S7241C8.s7241c8f5");
    test_class_info(&lv, &cd_S7241C8);
    dp->~S7241C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7241C8(Test_S7241C8, "S7241C8", ABISELECT(528,348));

#else // __cplusplus

extern void _ZN7S7241C8C1Ev();
extern void _ZN7S7241C8D2Ev();
Name_Map name_map_S7241C8[] = {
  NSPAIR(_ZN7S7241C8C1Ev),
  NSPAIR(_ZN7S7241C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7241C3;
extern VTBL_ENTRY _ZTI7S7241C3[];
extern  VTBL_ENTRY _ZTV7S7241C3[];
extern Class_Descriptor cd_S7241C2;
extern VTBL_ENTRY _ZTI7S7241C2[];
extern  VTBL_ENTRY _ZTV7S7241C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7241C2[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7241C3;
extern VTBL_ENTRY _ZTI7S7241C3[];
extern  VTBL_ENTRY _ZTV7S7241C3[];
static Base_Class bases_S7241C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2791C3,    ABISELECT(72,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
  1, 0},
  {&cd_S2398C28_nt,    ABISELECT(456,304), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2791C3,    ABISELECT(464,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7241C3,    ABISELECT(448,300), //bcp->offset
    10, //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
    4, //immediately_derived
  0, 1},
  {&cd_S7241C2,    ABISELECT(400,272), //bcp->offset
    7, //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_S2398C28_nt,    ABISELECT(104,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
    -1, //immediately_derived
  1, 0},
  {&cd_S2398C28_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
    8, //immediately_derived
  0, 0},
  {&cd_S2791C3,    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
    8, //immediately_derived
  0, 0},
  {&cd_S7241C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7241C8[];
extern void _ZN7S7241C32v1Ev();
extern void _ZN7S7241C8D1Ev();
extern void _ZN7S7241C8D0Ev();
extern void _ZN7S7241C32v1Ev();
static  VTBL_ENTRY vtc_S7241C8[] = {
  ABISELECT(448,300),
  ABISELECT(400,272),
  0,
  (VTBL_ENTRY)&(_ZTI7S7241C8[0]),
  (VTBL_ENTRY)&_ZN7S7241C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7241C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7241C8D0Ev,
  ABISELECT(48,28),
  ABISELECT(-400,-272),
  (VTBL_ENTRY)&(_ZTI7S7241C8[0]),
  0,
  ABISELECT(-448,-300),
  (VTBL_ENTRY)&(_ZTI7S7241C8[0]),
  (VTBL_ENTRY)&_ZN7S7241C32v1Ev,
};
extern VTBL_ENTRY _ZTV7S7241C8[];
static  VTBL_ENTRY _tg__ZTV7S7241C2__7S7241C8[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7241C2[0]),
};
extern void _ZN7S7241C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7241C3__7S7241C2__7S7241C8[] = {
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7241C2[0]),
  (VTBL_ENTRY)&_ZN7S7241C32v1Ev,
};
static  VTT_ENTRY vtt_S7241C8[] = {
  {&(_ZTV7S7241C8[4]),  4,14},
  {&(_ZTV7S7241C8[10]),  10,14},
  {&(_ZTV7S7241C8[13]),  13,14},
  {&(_tg__ZTV7S7241C2__7S7241C8[3]),  3,3},
  {&(_tg__ZTV7S7241C3__7S7241C2__7S7241C8[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7241C8[];
extern  VTBL_ENTRY _ZTV7S7241C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7241C8[];
Class_Descriptor cd_S7241C8 = {  "S7241C8", // class name
  bases_S7241C8, 9,
  &(vtc_S7241C8[0]), // expected_vtbl_contents
  &(vtt_S7241C8[0]), // expected_vtt_contents
  ABISELECT(528,348), // object size
  NSPAIRA(_ZTI7S7241C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7241C8),14, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7241C8),5, //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  S7241C7  {
  void *s7241c7f0[2];
  int s7241c7f1[2];
  ::S7241C8 s7241c7f2;
  virtual void  v2(); // _ZN7S7241C72v2Ev
  ~S7241C7(); // tgen
  S7241C7(); // tgen
};
//SIG(-1 S7241C7) C1{ v1 Fp[2] Fi[2] FC2{ BC3{ m Fp FL Fi FC4{ m Fc[2]} FC4 Fi} VBC5{ VBC6{ BC4 BC3 v2 FD Fi} Fp FD Fp Fs Fc} BC4 BC6 vd FL[8] Fi Fl FC3 Fs FC6[2]}}


void  S7241C7 ::v2(){vfunc_called(this, "_ZN7S7241C72v2Ev");}
S7241C7 ::~S7241C7(){ note_dtor("S7241C7", this);} // tgen
S7241C7 ::S7241C7(){ note_ctor("S7241C7", this);} // tgen

static void Test_S7241C7()
{
  extern Class_Descriptor cd_S7241C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(36,93)];
    init_test(&cd_S7241C7, buf);
    S7241C7 *dp, &lv = *(dp=new (buf) S7241C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,368), "sizeof(S7241C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7241C7)");
    check_field_offset(lv, s7241c7f0, ABISELECT(8,4), "S7241C7.s7241c7f0");
    check_field_offset(lv, s7241c7f1, ABISELECT(24,12), "S7241C7.s7241c7f1");
    check_field_offset(lv, s7241c7f2, ABISELECT(32,20), "S7241C7.s7241c7f2");
    test_class_info(&lv, &cd_S7241C7);
    dp->~S7241C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7241C7(Test_S7241C7, "S7241C7", ABISELECT(560,368));

#else // __cplusplus

extern void _ZN7S7241C7C1Ev();
extern void _ZN7S7241C7D1Ev();
Name_Map name_map_S7241C7[] = {
  NSPAIR(_ZN7S7241C7C1Ev),
  NSPAIR(_ZN7S7241C7D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7241C7[];
extern void _ZN7S7241C72v2Ev();
static  VTBL_ENTRY vtc_S7241C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7241C7[0]),
  (VTBL_ENTRY)&_ZN7S7241C72v2Ev,
};
extern VTBL_ENTRY _ZTI7S7241C7[];
extern  VTBL_ENTRY _ZTV7S7241C7[];
Class_Descriptor cd_S7241C7 = {  "S7241C7", // class name
  0,0,//no base classes
  &(vtc_S7241C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(560,368), // object size
  NSPAIRA(_ZTI7S7241C7),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7241C7),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7241C6  : virtual S7241C7 {
  char s7241c6f0;
  ::S2398C28_nt s7241c6f1[3];
  int s7241c6f2;
  virtual  ~S7241C6(); // _ZN7S7241C6D2Ev
  S7241C6(); // tgen
};
//SIG(-1 S7241C6) C1{ VBC2{ v1 Fp[2] Fi[2] FC3{ BC4{ m Fp FL Fi FC5{ m Fc[2]} FC5 Fi} VBC6{ VBC7{ BC5 BC4 v2 FD Fi} Fp FD Fp Fs Fc} BC5 BC7 vd FL[8] Fi Fl FC4 Fs FC7[2]}} vd Fc FC5[3] Fi}


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

static void Test_S7241C6()
{
  extern Class_Descriptor cd_S7241C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(38,97)];
    init_test(&cd_S7241C6, buf);
    S7241C6 *dp, &lv = *(dp=new (buf) S7241C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(592,384), "sizeof(S7241C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7241C6)");
    check_base_class_offset(lv, (S7241C7*), ABISELECT(32,16), "S7241C6");
    check_field_offset(lv, s7241c6f0, ABISELECT(8,4), "S7241C6.s7241c6f0");
    check_field_offset(lv, s7241c6f1, ABISELECT(9,5), "S7241C6.s7241c6f1");
    check_field_offset(lv, s7241c6f2, ABISELECT(16,12), "S7241C6.s7241c6f2");
    test_class_info(&lv, &cd_S7241C6);
    dp->~S7241C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7241C6(Test_S7241C6, "S7241C6", ABISELECT(592,384));

#else // __cplusplus

extern void _ZN7S7241C6C1Ev();
extern void _ZN7S7241C6D2Ev();
Name_Map name_map_S7241C6[] = {
  NSPAIR(_ZN7S7241C6C1Ev),
  NSPAIR(_ZN7S7241C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7241C7;
extern VTBL_ENTRY _ZTI7S7241C7[];
extern  VTBL_ENTRY _ZTV7S7241C7[];
static Base_Class bases_S7241C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7241C7,    ABISELECT(32,16), //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 _ZTI7S7241C6[];
extern void _ZN7S7241C6D1Ev();
extern void _ZN7S7241C6D0Ev();
extern void _ZN7S7241C72v2Ev();
static  VTBL_ENTRY vtc_S7241C6[] = {
  ABISELECT(32,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7241C6[0]),
  (VTBL_ENTRY)&_ZN7S7241C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7241C6D0Ev,
  0,
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI7S7241C6[0]),
  (VTBL_ENTRY)&_ZN7S7241C72v2Ev,
};
extern VTBL_ENTRY _ZTV7S7241C6[];
static  VTT_ENTRY vtt_S7241C6[] = {
  {&(_ZTV7S7241C6[3]),  3,9},
  {&(_ZTV7S7241C6[8]),  8,9},
};
extern VTBL_ENTRY _ZTI7S7241C6[];
extern  VTBL_ENTRY _ZTV7S7241C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7241C6[];
Class_Descriptor cd_S7241C6 = {  "S7241C6", // class name
  bases_S7241C6, 1,
  &(vtc_S7241C6[0]), // expected_vtbl_contents
  &(vtt_S7241C6[0]), // expected_vtt_contents
  ABISELECT(592,384), // object size
  NSPAIRA(_ZTI7S7241C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7241C6),9, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7241C6),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  S7241C9  : virtual S7241C2 , S7241C3 , virtual S7241C8 , S2791C3 {
  int s7241c9f0;
  void *s7241c9f1[2];
  int s7241c9f2;
  void *s7241c9f3;
  virtual void  v3(); // _ZN7S7241C92v3Ev
  ~S7241C9(); // tgen
  S7241C9(); // tgen
};
//SIG(-1 S7241C9) C1{ VBC2{ VBC3{ BC4{ m Fc[2]} BC5{ m Fp FL Fi FC4 FC4 Fi} v2 FD Fi} Fp FD Fp Fs Fc} BC3 VBC6{ BC5 VBC2 BC4 BC3 vd FL[8] Fi Fl FC5 Fs FC3[2]} BC5 v1 Fi Fp[2] Fi Fp}


void  S7241C9 ::v3(){vfunc_called(this, "_ZN7S7241C92v3Ev");}
S7241C9 ::~S7241C9(){ note_dtor("S7241C9", this);} // tgen
S7241C9 ::S7241C9(){ note_ctor("S7241C9", this);} // tgen

static void Test_S7241C9()
{
  extern Class_Descriptor cd_S7241C9;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(43,111)];
    init_test(&cd_S7241C9, buf);
    S7241C9 *dp, &lv = *(dp=new (buf) S7241C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(672,440), "sizeof(S7241C9)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7241C9)");
    /*is_ambiguous_... S7241C9::S7241C3 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7241C3*), ABISELECT(200,124), "S7241C9");
    /*is_ambiguous_... S7241C9::S7241C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7241C3*), ABISELECT(208,128), "S7241C9");
    check_base_class_offset(lv, (S7241C3*)(S7241C2*), ABISELECT(192,120), "S7241C9");
    check_base_class_offset(lv, (S7241C2*), ABISELECT(144,92), "S7241C9");
    check_base_class_offset(lv, (S7241C2*)(S7241C8*), ABISELECT(144,92), "S7241C9");
    /*is_ambiguous_... S7241C9::S7241C3 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7241C3*), ABISELECT(8,4), "S7241C9");
    /*is_ambiguous_... S7241C9::S7241C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7241C3*), ABISELECT(16,8), "S7241C9");
    /*is_ambiguous_... S7241C9::S7241C3 */ AMB_check_base_class_offset(lv, (S7241C3*), 0, "S7241C9");
    /*is_ambiguous_... S7241C8::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7241C8*), ABISELECT(344,216), "S7241C9");
    /*is_ambiguous_... S7241C8::S2398C28_nt */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7241C8*), ABISELECT(376,240), "S7241C9");
    /*is_ambiguous_... S7241C8::S7241C3 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7241C3*)(S7241C8*), ABISELECT(280,172), "S7241C9");
    /*is_ambiguous_... S7241C8::S7241C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7241C3*)(S7241C8*), ABISELECT(288,176), "S7241C9");
    /*is_ambiguous_... S7241C8::S7241C3 */ AMB_check_base_class_offset(lv, (S7241C3*)(S7241C8*), ABISELECT(272,168), "S7241C9");
    check_base_class_offset(lv, (S7241C8*), ABISELECT(272,168), "S7241C9");
    /*is_ambiguous_... S7241C9::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*), ABISELECT(72,48), "S7241C9");
    check_field_offset(lv, s7241c9f0, ABISELECT(104,72), "S7241C9.s7241c9f0");
    check_field_offset(lv, s7241c9f1, ABISELECT(112,76), "S7241C9.s7241c9f1");
    check_field_offset(lv, s7241c9f2, ABISELECT(128,84), "S7241C9.s7241c9f2");
    check_field_offset(lv, s7241c9f3, ABISELECT(136,88), "S7241C9.s7241c9f3");
    test_class_info(&lv, &cd_S7241C9);
    dp->~S7241C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7241C9(Test_S7241C9, "S7241C9", ABISELECT(672,440));

#else // __cplusplus

extern void _ZN7S7241C9C1Ev();
extern void _ZN7S7241C9D1Ev();
Name_Map name_map_S7241C9[] = {
  NSPAIR(_ZN7S7241C9C1Ev),
  NSPAIR(_ZN7S7241C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7241C3;
extern VTBL_ENTRY _ZTI7S7241C3[];
extern  VTBL_ENTRY _ZTV7S7241C3[];
extern Class_Descriptor cd_S7241C2;
extern VTBL_ENTRY _ZTI7S7241C2[];
extern  VTBL_ENTRY _ZTV7S7241C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7241C2[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7241C3;
extern VTBL_ENTRY _ZTI7S7241C3[];
extern  VTBL_ENTRY _ZTV7S7241C3[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7241C3;
extern VTBL_ENTRY _ZTI7S7241C3[];
extern  VTBL_ENTRY _ZTV7S7241C3[];
extern Class_Descriptor cd_S7241C8;
extern VTBL_ENTRY _ZTI7S7241C8[];
extern  VTBL_ENTRY _ZTV7S7241C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7241C8[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
static Base_Class bases_S7241C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C28_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
    2, //immediately_derived
  0, 0},
  {&cd_S2791C3,    ABISELECT(208,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
    2, //immediately_derived
  0, 0},
  {&cd_S7241C3,    ABISELECT(192,120), //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
    3, //immediately_derived
  0, 1},
  {&cd_S7241C2,    ABISELECT(144,92), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2398C28_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
    6, //immediately_derived
  0, 0},
  {&cd_S2791C3,    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
    6, //immediately_derived
  0, 0},
  {&cd_S7241C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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},
  {&cd_S2791C3,    ABISELECT(344,216), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2398C28_nt,    ABISELECT(376,240), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2398C28_nt,    ABISELECT(280,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
    11, //immediately_derived
  0, 0},
  {&cd_S2791C3,    ABISELECT(288,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
    11, //immediately_derived
  0, 0},
  {&cd_S7241C3,    ABISELECT(272,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
    3, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S7241C8,    ABISELECT(272,168), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2791C3,    ABISELECT(72,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
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7241C9[];
extern void _ZN7S7241C32v1Ev();
extern void _ZN7S7241C92v3Ev();
extern void _ZN7S7241C9D1Ev();
extern void _ZN7S7241C9D0Ev();
extern void _ZN7S7241C32v1Ev();
extern void _ZN7S7241C32v1Ev();
extern void ABISELECT(_ZTv0_n48_N7S7241C9D1Ev,_ZTv0_n24_N7S7241C9D1Ev)();
extern void ABISELECT(_ZThn272_N7S7241C9D1Ev,_ZThn168_N7S7241C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7241C9D0Ev,_ZTv0_n24_N7S7241C9D0Ev)();
extern void ABISELECT(_ZThn272_N7S7241C9D0Ev,_ZThn168_N7S7241C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7241C9[] = {
  ABISELECT(272,168),
  ABISELECT(192,120),
  ABISELECT(144,92),
  0,
  (VTBL_ENTRY)&(_ZTI7S7241C9[0]),
  (VTBL_ENTRY)&_ZN7S7241C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7241C92v3Ev,
  (VTBL_ENTRY)&_ZN7S7241C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7241C9D0Ev,
  ABISELECT(48,28),
  ABISELECT(-144,-92),
  (VTBL_ENTRY)&(_ZTI7S7241C9[0]),
  0,
  ABISELECT(-192,-120),
  (VTBL_ENTRY)&(_ZTI7S7241C9[0]),
  (VTBL_ENTRY)&_ZN7S7241C32v1Ev,
  ABISELECT(-272,-168),
  0,
  ABISELECT(-80,-48),
  ABISELECT(-128,-76),
  ABISELECT(-272,-168),
  (VTBL_ENTRY)&(_ZTI7S7241C9[0]),
  (VTBL_ENTRY)&_ZN7S7241C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7241C9D1Ev,_ZTv0_n24_N7S7241C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7241C9D0Ev,_ZTv0_n24_N7S7241C9D0Ev),
};
extern VTBL_ENTRY _ZTV7S7241C9[];
static  VTBL_ENTRY _tg__ZTV7S7241C2__7S7241C9[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7241C2[0]),
};
extern void _ZN7S7241C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7241C3__7S7241C2__7S7241C9[] = {
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7241C2[0]),
  (VTBL_ENTRY)&_ZN7S7241C32v1Ev,
};
extern void _ZN7S7241C32v1Ev();
extern void _ZN7S7241C8D1Ev();
extern void _ZN7S7241C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7241C8__7S7241C9[] = {
  ABISELECT(-80,-48),
  ABISELECT(-128,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7241C8[0]),
  (VTBL_ENTRY)&_ZN7S7241C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7241C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7241C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7241C2__7S7241C8__7S7241C9[] = {
  ABISELECT(48,28),
  ABISELECT(128,76),
  (VTBL_ENTRY)&(_ZTI7S7241C8[0]),
};
extern void _ZN7S7241C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7241C3__7S7241C8__7S7241C9[] = {
  0,
  ABISELECT(80,48),
  (VTBL_ENTRY)&(_ZTI7S7241C8[0]),
  (VTBL_ENTRY)&_ZN7S7241C32v1Ev,
};
static  VTT_ENTRY vtt_S7241C9[] = {
  {&(_ZTV7S7241C9[5]),  5,25},
  {&(_ZTV7S7241C9[12]),  12,25},
  {&(_ZTV7S7241C9[15]),  15,25},
  {&(_ZTV7S7241C9[22]),  22,25},
  {&(_tg__ZTV7S7241C2__7S7241C9[3]),  3,3},
  {&(_tg__ZTV7S7241C3__7S7241C2__7S7241C9[3]),  3,4},
  {&(_tg__ZTV7S7241C8__7S7241C9[4]),  4,7},
  {&(_tg__ZTV7S7241C2__7S7241C8__7S7241C9[3]),  3,3},
  {&(_tg__ZTV7S7241C3__7S7241C8__7S7241C9[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7241C9[];
extern  VTBL_ENTRY _ZTV7S7241C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7241C9[];
static VTBL_ENTRY alt_thunk_names196[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7241C9D0Ev,_ZTv0_n24_N7S7241C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S7241C9D0Ev,_ZThn168_N7S7241C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7241C9D1Ev,_ZTv0_n24_N7S7241C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn272_N7S7241C9D1Ev,_ZThn168_N7S7241C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7241C9 = {  "S7241C9", // class name
  bases_S7241C9, 14,
  &(vtc_S7241C9[0]), // expected_vtbl_contents
  &(vtt_S7241C9[0]), // expected_vtt_contents
  ABISELECT(672,440), // object size
  NSPAIRA(_ZTI7S7241C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7241C9),25, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7241C9),9, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names196,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7241C1  : S7241C2 , virtual S7241C6 , S7241C9 {
  int s7241c1f0[9];
  ~S7241C1(); // tgen
  S7241C1(); // tgen
};
//SIG(1 S7241C1) C1{ BC2{ VBC3{ BC4{ m Fc[2]} BC5{ m Fp FL Fi FC4 FC4 Fi} v1 FD Fi} Fp FD Fp Fs Fc} VBC6{ VBC7{ v2 Fp[2] Fi[2] FC8{ BC5 VBC2 BC4 BC3 vd FL[8] Fi Fl FC5 Fs FC3[2]}} vd Fc FC4[3] Fi} BC9{ VBC2 BC3 VBC8 BC5 v3 Fi Fp[2] Fi Fp} Fi[9]}


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

static void Test_S7241C1()
{
  extern Class_Descriptor cd_S7241C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(85,223)];
    init_test(&cd_S7241C1, buf);
    S7241C1 *dp, &lv = *(dp=new (buf) S7241C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(1344,888), "sizeof(S7241C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S7241C1)");
    /*is_ambiguous_... S7241C1::S7241C3 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7241C3*), ABISELECT(248,160), "S7241C1");
    /*is_ambiguous_... S7241C1::S7241C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7241C3*), ABISELECT(256,164), "S7241C1");
    /*is_ambiguous_... S7241C1::S7241C2 */ AMB_check_base_class_offset(lv, (S7241C3*)(S7241C2*), ABISELECT(240,156), "S7241C1");
    /*is_ambiguous_... S7241C1::S7241C2 */ AMB_check_base_class_offset(lv, (S7241C3*)(S7241C2*), ABISELECT(240,156), "S7241C1");
    /*is_ambiguous_... S7241C1::S7241C2 */ AMB_check_base_class_offset(lv, (S7241C2*), 0, "S7241C1");
    check_base_class_offset(lv, (S7241C7*)(S7241C6*), ABISELECT(336,220), "S7241C1");
    check_base_class_offset(lv, (S7241C6*), ABISELECT(312,204), "S7241C1");
    check_base_class_offset(lv, (S7241C2*)(S7241C9*), ABISELECT(896,588), "S7241C1");
    check_base_class_offset(lv, (S7241C2*)(S7241C8*), ABISELECT(896,588), "S7241C1");
    /*is_ambiguous_... S7241C9::S7241C3 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7241C3*)(S7241C9*), ABISELECT(56,32), "S7241C1");
    /*is_ambiguous_... S7241C9::S7241C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7241C3*)(S7241C9*), ABISELECT(64,36), "S7241C1");
    /*is_ambiguous_... S7241C9::S7241C3 */ AMB_check_base_class_offset(lv, (S7241C3*)(S7241C9*), ABISELECT(48,28), "S7241C1");
    /*is_ambiguous_... S7241C8::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7241C8*), ABISELECT(1016,664), "S7241C1");
    /*is_ambiguous_... S7241C8::S2398C28_nt */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7241C8*), ABISELECT(1048,688), "S7241C1");
    /*is_ambiguous_... S7241C8::S7241C3 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S7241C3*)(S7241C8*), ABISELECT(952,620), "S7241C1");
    /*is_ambiguous_... S7241C8::S7241C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7241C3*)(S7241C8*), ABISELECT(960,624), "S7241C1");
    /*is_ambiguous_... S7241C8::S7241C3 */ AMB_check_base_class_offset(lv, (S7241C3*)(S7241C8*), ABISELECT(944,616), "S7241C1");
    check_base_class_offset(lv, (S7241C8*)(S7241C9*), ABISELECT(944,616), "S7241C1");
    /*is_ambiguous_... S7241C9::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S7241C9*), ABISELECT(120,76), "S7241C1");
    check_base_class_offset(lv, (S7241C9*), ABISELECT(48,28), "S7241C1");
    check_field_offset(lv, s7241c1f0, ABISELECT(192,120), "S7241C1.s7241c1f0");
    test_class_info(&lv, &cd_S7241C1);
    dp->~S7241C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7241C1(Test_S7241C1, "S7241C1", ABISELECT(1344,888));

#else // __cplusplus

extern void _ZN7S7241C1C1Ev();
extern void _ZN7S7241C1D1Ev();
Name_Map name_map_S7241C1[] = {
  NSPAIR(_ZN7S7241C1C1Ev),
  NSPAIR(_ZN7S7241C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7241C3;
extern VTBL_ENTRY _ZTI7S7241C3[];
extern  VTBL_ENTRY _ZTV7S7241C3[];
extern Class_Descriptor cd_S7241C2;
extern VTBL_ENTRY _ZTI7S7241C2[];
extern  VTBL_ENTRY _ZTV7S7241C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7241C2[];
extern Class_Descriptor cd_S7241C7;
extern VTBL_ENTRY _ZTI7S7241C7[];
extern  VTBL_ENTRY _ZTV7S7241C7[];
extern Class_Descriptor cd_S7241C6;
extern VTBL_ENTRY _ZTI7S7241C6[];
extern  VTBL_ENTRY _ZTV7S7241C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7241C6[];
extern Class_Descriptor cd_S7241C2;
extern VTBL_ENTRY _ZTI7S7241C2[];
extern  VTBL_ENTRY _ZTV7S7241C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7241C2[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7241C3;
extern VTBL_ENTRY _ZTI7S7241C3[];
extern  VTBL_ENTRY _ZTV7S7241C3[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7241C3;
extern VTBL_ENTRY _ZTI7S7241C3[];
extern  VTBL_ENTRY _ZTV7S7241C3[];
extern Class_Descriptor cd_S7241C8;
extern VTBL_ENTRY _ZTI7S7241C8[];
extern  VTBL_ENTRY _ZTV7S7241C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7241C8[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S7241C9;
extern VTBL_ENTRY _ZTI7S7241C9[];
extern  VTBL_ENTRY _ZTV7S7241C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7241C9[];
static Base_Class bases_S7241C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C28_nt,    ABISELECT(248,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
    2, //immediately_derived
  0, 0},
  {&cd_S2791C3,    ABISELECT(256,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
    2, //immediately_derived
  0, 0},
  {&cd_S7241C3,    ABISELECT(240,156), //bcp->offset
    18, //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
    3, //immediately_derived
  0, 1},
  {&cd_S7241C2,    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_S7241C7,    ABISELECT(336,220), //bcp->offset
    28, //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
    2, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S7241C6,    ABISELECT(312,204), //bcp->offset
    22, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7241C2,    ABISELECT(896,588), //bcp->offset
    32, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S2398C28_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
    9, //immediately_derived
  0, 0},
  {&cd_S2791C3,    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
    9, //immediately_derived
  0, 0},
  {&cd_S7241C3,    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
    8, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S2791C3,    ABISELECT(1016,664), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 0},
  {&cd_S2398C28_nt,    ABISELECT(1048,688), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 0},
  {&cd_S2398C28_nt,    ABISELECT(952,620), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2791C3,    ABISELECT(960,624), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7241C3,    ABISELECT(944,616), //bcp->offset
    -1, //bcp->virtual_function_table_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
    15, //immediately_derived
  0, 0},
  {&cd_S7241C8,    ABISELECT(944,616), //bcp->offset
    35, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S2791C3,    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_S7241C9,    ABISELECT(48,28), //bcp->offset
    9, //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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7241C1[];
extern void _ZN7S7241C1D1Ev();
extern void _ZN7S7241C1D0Ev();
extern void _ZN7S7241C32v1Ev();
extern void _ZN7S7241C92v3Ev();
extern void ABISELECT(_ZThn48_N7S7241C1D1Ev,_ZThn28_N7S7241C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S7241C1D0Ev,_ZThn28_N7S7241C1D0Ev)();
extern void _ZN7S7241C32v1Ev();
extern void ABISELECT(_ZTv0_n32_N7S7241C1D1Ev,_ZTv0_n16_N7S7241C1D1Ev)();
extern void ABISELECT(_ZThn312_N7S7241C1D1Ev,_ZThn204_N7S7241C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7241C1D0Ev,_ZTv0_n16_N7S7241C1D0Ev)();
extern void ABISELECT(_ZThn312_N7S7241C1D0Ev,_ZThn204_N7S7241C1D0Ev)() __attribute__((weak));
extern void _ZN7S7241C72v2Ev();
extern void _ZN7S7241C32v1Ev();
extern void ABISELECT(_ZTv0_n48_N7S7241C1D1Ev,_ZTv0_n24_N7S7241C1D1Ev)();
extern void ABISELECT(_ZThn944_N7S7241C1D1Ev,_ZThn616_N7S7241C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7241C1D0Ev,_ZTv0_n24_N7S7241C1D0Ev)();
extern void ABISELECT(_ZThn944_N7S7241C1D0Ev,_ZThn616_N7S7241C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7241C1[] = {
  ABISELECT(944,616),
  ABISELECT(896,588),
  ABISELECT(336,220),
  ABISELECT(312,204),
  ABISELECT(240,156),
  0,
  (VTBL_ENTRY)&(_ZTI7S7241C1[0]),
  (VTBL_ENTRY)&_ZN7S7241C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7241C1D0Ev,
  ABISELECT(896,588),
  ABISELECT(192,128),
  ABISELECT(848,560),
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S7241C1[0]),
  (VTBL_ENTRY)&_ZN7S7241C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7241C92v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7241C1D1Ev,_ZThn28_N7S7241C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn48_N7S7241C1D0Ev,_ZThn28_N7S7241C1D0Ev),
  0,
  ABISELECT(-240,-156),
  (VTBL_ENTRY)&(_ZTI7S7241C1[0]),
  (VTBL_ENTRY)&_ZN7S7241C32v1Ev,
  ABISELECT(-312,-204),
  ABISELECT(24,16),
  ABISELECT(-312,-204),
  (VTBL_ENTRY)&(_ZTI7S7241C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7241C1D1Ev,_ZTv0_n16_N7S7241C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7241C1D0Ev,_ZTv0_n16_N7S7241C1D0Ev),
  0,
  ABISELECT(-336,-220),
  (VTBL_ENTRY)&(_ZTI7S7241C1[0]),
  (VTBL_ENTRY)&_ZN7S7241C72v2Ev,
  ABISELECT(-656,-432),
  ABISELECT(-896,-588),
  (VTBL_ENTRY)&(_ZTI7S7241C1[0]),
  ABISELECT(-944,-616),
  0,
  ABISELECT(-704,-460),
  ABISELECT(-48,-28),
  ABISELECT(-944,-616),
  (VTBL_ENTRY)&(_ZTI7S7241C1[0]),
  (VTBL_ENTRY)&_ZN7S7241C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7241C1D1Ev,_ZTv0_n24_N7S7241C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7241C1D0Ev,_ZTv0_n24_N7S7241C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7241C1[];
static  VTBL_ENTRY _tg__ZTV7S7241C2__A__7S7241C1[] = {
  ABISELECT(240,156),
  0,
  (VTBL_ENTRY)&(_ZTI7S7241C2[0]),
};
extern void _ZN7S7241C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7241C3__7S7241C2__A__7S7241C1[] = {
  0,
  ABISELECT(-240,-156),
  (VTBL_ENTRY)&(_ZTI7S7241C2[0]),
  (VTBL_ENTRY)&_ZN7S7241C32v1Ev,
};
extern void _ZN7S7241C32v1Ev();
extern void _ZN7S7241C92v3Ev();
extern void _ZN7S7241C9D1Ev();
extern void _ZN7S7241C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7241C9__7S7241C1[] = {
  ABISELECT(896,588),
  ABISELECT(192,128),
  ABISELECT(848,560),
  0,
  (VTBL_ENTRY)&(_ZTI7S7241C9[0]),
  (VTBL_ENTRY)&_ZN7S7241C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7241C92v3Ev,
  (VTBL_ENTRY)&_ZN7S7241C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7241C9D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7241C2__7S7241C9__7S7241C1[] = {
  ABISELECT(-656,-432),
  ABISELECT(-848,-560),
  (VTBL_ENTRY)&(_ZTI7S7241C9[0]),
};
extern void _ZN7S7241C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7241C3__7S7241C9__7S7241C1[] = {
  0,
  ABISELECT(-192,-128),
  (VTBL_ENTRY)&(_ZTI7S7241C9[0]),
  (VTBL_ENTRY)&_ZN7S7241C32v1Ev,
};
extern void _ZN7S7241C32v1Ev();
extern void ABISELECT(_ZTv0_n48_N7S7241C9D1Ev,_ZTv0_n24_N7S7241C9D1Ev)();
extern void ABISELECT(_ZThn896_N7S7241C9D1Ev,_ZThn588_N7S7241C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N7S7241C9D0Ev,_ZTv0_n24_N7S7241C9D0Ev)();
extern void ABISELECT(_ZThn896_N7S7241C9D0Ev,_ZThn588_N7S7241C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7241C8__7S7241C9__7S7241C1[] = {
  ABISELECT(-896,-588),
  0,
  ABISELECT(-704,-460),
  ABISELECT(-48,-28),
  ABISELECT(-896,-588),
  (VTBL_ENTRY)&(_ZTI7S7241C9[0]),
  (VTBL_ENTRY)&_ZN7S7241C32v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7241C9D1Ev,_ZTv0_n24_N7S7241C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N7S7241C9D0Ev,_ZTv0_n24_N7S7241C9D0Ev),
};
extern void _ZN7S7241C6D1Ev();
extern void _ZN7S7241C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7241C6__7S7241C1[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI7S7241C6[0]),
  (VTBL_ENTRY)&_ZN7S7241C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7241C6D0Ev,
};
extern void _ZN7S7241C72v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7241C7__7S7241C6__7S7241C1[] = {
  0,
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI7S7241C6[0]),
  (VTBL_ENTRY)&_ZN7S7241C72v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7241C2__A1__7S7241C1[] = {
  ABISELECT(-656,-432),
  0,
  (VTBL_ENTRY)&(_ZTI7S7241C2[0]),
};
extern void _ZN7S7241C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7241C3__7S7241C2__A1__7S7241C1[] = {
  0,
  ABISELECT(656,432),
  (VTBL_ENTRY)&(_ZTI7S7241C2[0]),
  (VTBL_ENTRY)&_ZN7S7241C32v1Ev,
};
extern void _ZN7S7241C32v1Ev();
extern void _ZN7S7241C8D1Ev();
extern void _ZN7S7241C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7241C8__7S7241C1[] = {
  ABISELECT(-704,-460),
  ABISELECT(-48,-28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7241C8[0]),
  (VTBL_ENTRY)&_ZN7S7241C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7241C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7241C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7241C2__7S7241C8__7S7241C1[] = {
  ABISELECT(-656,-432),
  ABISELECT(48,28),
  (VTBL_ENTRY)&(_ZTI7S7241C8[0]),
};
extern void _ZN7S7241C32v1Ev();
static  VTBL_ENTRY _tg__ZTV7S7241C3__7S7241C8__7S7241C1[] = {
  0,
  ABISELECT(704,460),
  (VTBL_ENTRY)&(_ZTI7S7241C8[0]),
  (VTBL_ENTRY)&_ZN7S7241C32v1Ev,
};
static  VTT_ENTRY vtt_S7241C1[] = {
  {&(_ZTV7S7241C1[7]),  7,44},
  {&(_tg__ZTV7S7241C2__A__7S7241C1[3]),  3,3},
  {&(_tg__ZTV7S7241C3__7S7241C2__A__7S7241C1[3]),  3,4},
  {&(_tg__ZTV7S7241C9__7S7241C1[5]),  5,9},
  {&(_tg__ZTV7S7241C2__7S7241C9__7S7241C1[3]),  3,3},
  {&(_tg__ZTV7S7241C3__7S7241C9__7S7241C1[3]),  3,4},
  {&(_tg__ZTV7S7241C8__7S7241C9__7S7241C1[6]),  6,9},
  {&(_ZTV7S7241C1[21]),  21,44},
  {&(_ZTV7S7241C1[26]),  26,44},
  {&(_ZTV7S7241C1[31]),  31,44},
  {&(_ZTV7S7241C1[14]),  14,44},
  {&(_ZTV7S7241C1[35]),  35,44},
  {&(_ZTV7S7241C1[41]),  41,44},
  {&(_tg__ZTV7S7241C6__7S7241C1[3]),  3,5},
  {&(_tg__ZTV7S7241C7__7S7241C6__7S7241C1[3]),  3,4},
  {&(_tg__ZTV7S7241C2__A1__7S7241C1[3]),  3,3},
  {&(_tg__ZTV7S7241C3__7S7241C2__A1__7S7241C1[3]),  3,4},
  {&(_tg__ZTV7S7241C8__7S7241C1[4]),  4,7},
  {&(_tg__ZTV7S7241C2__7S7241C8__7S7241C1[3]),  3,3},
  {&(_tg__ZTV7S7241C3__7S7241C8__7S7241C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S7241C1[];
extern  VTBL_ENTRY _ZTV7S7241C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7241C1[];
static VTBL_ENTRY alt_thunk_names197[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7241C9D0Ev,_ZTv0_n24_N7S7241C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn896_N7S7241C9D0Ev,_ZThn588_N7S7241C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7241C9D1Ev,_ZTv0_n24_N7S7241C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn896_N7S7241C9D1Ev,_ZThn588_N7S7241C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7241C1D0Ev,_ZTv0_n24_N7S7241C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn944_N7S7241C1D0Ev,_ZThn616_N7S7241C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N7S7241C1D1Ev,_ZTv0_n24_N7S7241C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn944_N7S7241C1D1Ev,_ZThn616_N7S7241C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7241C1D0Ev,_ZTv0_n16_N7S7241C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S7241C1D0Ev,_ZThn204_N7S7241C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7241C1D1Ev,_ZTv0_n16_N7S7241C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S7241C1D1Ev,_ZThn204_N7S7241C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7241C1 = {  "S7241C1", // class name
  bases_S7241C1, 18,
  &(vtc_S7241C1[0]), // expected_vtbl_contents
  &(vtt_S7241C1[0]), // expected_vtt_contents
  ABISELECT(1344,888), // object size
  NSPAIRA(_ZTI7S7241C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7241C1),44, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7241C1),20, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names197,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6271C1  : S2264C38 , virtual S2264C28 {
  ::S19750C4 s6271c1f0;
  int s6271c1f1;
  virtual  ~S6271C1(); // _ZN7S6271C1D2Ev
  S6271C1(); // tgen
};
//SIG(1 S6271C1) C1{ BC2{ m} VBC3{ m} vd FC4{ VBC5{ VBC6{ BC3 VBC7{ VBC8{ m} VBC3 Fi[9]} BC9{ VBC8 VBC3 VBC7 vd Fp} BC8 VBC10{ VBC3 BC8 BC9 VBC2 vd} vd} VBC11{ BC3 VBC2} VBC12{ BC9 BC3 VBC11 vd} BC8 v1} FC13{ VBC14{ VBC8 vd} vd FC2}} Fi}


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

static void Test_S6271C1()
{
  extern Class_Descriptor cd_S6271C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,23)];
    init_test(&cd_S6271C1, buf);
    S6271C1 *dp, &lv = *(dp=new (buf) S6271C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,88), "sizeof(S6271C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6271C1)");
    check_base_class_offset(lv, (S2264C38*), 0, "S6271C1");
    check_base_class_offset(lv, (S2264C28*), 0, "S6271C1");
    check_field_offset(lv, s6271c1f0, ABISELECT(8,4), "S6271C1.s6271c1f0");
    check_field_offset(lv, s6271c1f1, ABISELECT(128,84), "S6271C1.s6271c1f1");
    test_class_info(&lv, &cd_S6271C1);
    dp->~S6271C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6271C1(Test_S6271C1, "S6271C1", ABISELECT(136,88));

#else // __cplusplus

extern void _ZN7S6271C1C1Ev();
extern void _ZN7S6271C1D2Ev();
Name_Map name_map_S6271C1[] = {
  NSPAIR(_ZN7S6271C1C1Ev),
  NSPAIR(_ZN7S6271C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S6271C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S6271C1[];
extern void _ZN7S6271C1D1Ev();
extern void _ZN7S6271C1D0Ev();
static  VTBL_ENTRY vtc_S6271C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6271C1[0]),
  (VTBL_ENTRY)&_ZN7S6271C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6271C1D0Ev,
};
extern VTBL_ENTRY _ZTV7S6271C1[];
static  VTT_ENTRY vtt_S6271C1[] = {
  {&(_ZTV7S6271C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI7S6271C1[];
extern  VTBL_ENTRY _ZTV7S6271C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6271C1[];
Class_Descriptor cd_S6271C1 = {  "S6271C1", // class name
  bases_S6271C1, 2,
  &(vtc_S6271C1[0]), // expected_vtbl_contents
  &(vtt_S6271C1[0]), // expected_vtt_contents
  ABISELECT(136,88), // object size
  NSPAIRA(_ZTI7S6271C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6271C1),5, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6271C1),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  S3477C5  {
  int s3477c5f0;
  virtual void  v7(); // _ZN7S3477C52v7Ev
  virtual void  v8(); // _ZN7S3477C52v8Ev
  virtual void  v9(); // _ZN7S3477C52v9Ev
  virtual void  v10(); // _ZN7S3477C53v10Ev
  virtual void  v11(); // _ZN7S3477C53v11Ev
  virtual void  v12(); // _ZN7S3477C53v12Ev
  ~S3477C5(); // tgen
  S3477C5(); // tgen
};
//SIG(-1 S3477C5) C1{ v1 v2 v3 v4 v5 v6 Fi}


void  S3477C5 ::v7(){vfunc_called(this, "_ZN7S3477C52v7Ev");}
void  S3477C5 ::v8(){vfunc_called(this, "_ZN7S3477C52v8Ev");}
void  S3477C5 ::v9(){vfunc_called(this, "_ZN7S3477C52v9Ev");}
void  S3477C5 ::v10(){vfunc_called(this, "_ZN7S3477C53v10Ev");}
void  S3477C5 ::v11(){vfunc_called(this, "_ZN7S3477C53v11Ev");}
void  S3477C5 ::v12(){vfunc_called(this, "_ZN7S3477C53v12Ev");}
S3477C5 ::~S3477C5(){ note_dtor("S3477C5", this);} // tgen
S3477C5 ::S3477C5(){ note_ctor("S3477C5", this);} // tgen

static void Test_S3477C5()
{
  extern Class_Descriptor cd_S3477C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3477C5, buf);
    S3477C5 *dp, &lv = *(dp=new (buf) S3477C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3477C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3477C5)");
    check_field_offset(lv, s3477c5f0, ABISELECT(8,4), "S3477C5.s3477c5f0");
    test_class_info(&lv, &cd_S3477C5);
    dp->~S3477C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3477C5(Test_S3477C5, "S3477C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3477C5C1Ev();
extern void _ZN7S3477C5D1Ev();
Name_Map name_map_S3477C5[] = {
  NSPAIR(_ZN7S3477C5C1Ev),
  NSPAIR(_ZN7S3477C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3477C5[];
extern void _ZN7S3477C52v7Ev();
extern void _ZN7S3477C52v8Ev();
extern void _ZN7S3477C52v9Ev();
extern void _ZN7S3477C53v10Ev();
extern void _ZN7S3477C53v11Ev();
extern void _ZN7S3477C53v12Ev();
static  VTBL_ENTRY vtc_S3477C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3477C5[0]),
  (VTBL_ENTRY)&_ZN7S3477C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3477C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3477C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v12Ev,
};
extern VTBL_ENTRY _ZTI7S3477C5[];
extern  VTBL_ENTRY _ZTV7S3477C5[];
Class_Descriptor cd_S3477C5 = {  "S3477C5", // class name
  0,0,//no base classes
  &(vtc_S3477C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3477C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3477C5),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  S3477C4  : S3477C5 {
  virtual void  v13(); // _ZN7S3477C43v13Ev
  ~S3477C4(); // tgen
  S3477C4(); // tgen
};
//SIG(-1 S3477C4) C1{ BC2{ v2 v3 v4 v5 v6 v7 Fi} v1}


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

static void Test_S3477C4()
{
  extern Class_Descriptor cd_S3477C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3477C4, buf);
    S3477C4 *dp, &lv = *(dp=new (buf) S3477C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3477C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3477C4)");
    check_base_class_offset(lv, (S3477C5*), 0, "S3477C4");
    test_class_info(&lv, &cd_S3477C4);
    dp->~S3477C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3477C4(Test_S3477C4, "S3477C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3477C4C1Ev();
extern void _ZN7S3477C4D1Ev();
Name_Map name_map_S3477C4[] = {
  NSPAIR(_ZN7S3477C4C1Ev),
  NSPAIR(_ZN7S3477C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3477C5;
extern VTBL_ENTRY _ZTI7S3477C5[];
extern  VTBL_ENTRY _ZTV7S3477C5[];
static Base_Class bases_S3477C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3477C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S3477C4[];
extern void _ZN7S3477C52v7Ev();
extern void _ZN7S3477C52v8Ev();
extern void _ZN7S3477C52v9Ev();
extern void _ZN7S3477C53v10Ev();
extern void _ZN7S3477C53v11Ev();
extern void _ZN7S3477C53v12Ev();
extern void _ZN7S3477C43v13Ev();
static  VTBL_ENTRY vtc_S3477C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3477C4[0]),
  (VTBL_ENTRY)&_ZN7S3477C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3477C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3477C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3477C43v13Ev,
};
extern VTBL_ENTRY _ZTI7S3477C4[];
extern  VTBL_ENTRY _ZTV7S3477C4[];
Class_Descriptor cd_S3477C4 = {  "S3477C4", // class name
  bases_S3477C4, 1,
  &(vtc_S3477C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3477C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3477C4),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S3477C3  : virtual S3477C4 {
  int s3477c3f0;
  short s3477c3f1;
  virtual  ~S3477C3(); // _ZN7S3477C3D2Ev
  virtual void  v14(); // _ZN7S3477C33v14Ev
  virtual void  v15(); // _ZN7S3477C33v15Ev
  virtual void  v16(); // _ZN7S3477C33v16Ev
  virtual void  v17(); // _ZN7S3477C33v17Ev
  virtual void  v18(); // _ZN7S3477C33v18Ev
  virtual void  v19(); // _ZN7S3477C33v19Ev
  virtual void  v20(); // _ZN7S3477C33v20Ev
  virtual void  v21(); // _ZN7S3477C33v21Ev
  S3477C3(); // tgen
};
//SIG(-1 S3477C3) C1{ VBC2{ BC3{ v9 v10 v11 v12 v13 v14 Fi} v15} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fs}


 S3477C3 ::~S3477C3(){ note_dtor("S3477C3", this);}
void  S3477C3 ::v14(){vfunc_called(this, "_ZN7S3477C33v14Ev");}
void  S3477C3 ::v15(){vfunc_called(this, "_ZN7S3477C33v15Ev");}
void  S3477C3 ::v16(){vfunc_called(this, "_ZN7S3477C33v16Ev");}
void  S3477C3 ::v17(){vfunc_called(this, "_ZN7S3477C33v17Ev");}
void  S3477C3 ::v18(){vfunc_called(this, "_ZN7S3477C33v18Ev");}
void  S3477C3 ::v19(){vfunc_called(this, "_ZN7S3477C33v19Ev");}
void  S3477C3 ::v20(){vfunc_called(this, "_ZN7S3477C33v20Ev");}
void  S3477C3 ::v21(){vfunc_called(this, "_ZN7S3477C33v21Ev");}
S3477C3 ::S3477C3(){ note_ctor("S3477C3", this);} // tgen

static void Test_S3477C3()
{
  extern Class_Descriptor cd_S3477C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S3477C3, buf);
    S3477C3 *dp, &lv = *(dp=new (buf) S3477C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S3477C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3477C3)");
    check_base_class_offset(lv, (S3477C5*)(S3477C4*), ABISELECT(16,12), "S3477C3");
    check_base_class_offset(lv, (S3477C4*), ABISELECT(16,12), "S3477C3");
    check_field_offset(lv, s3477c3f0, ABISELECT(8,4), "S3477C3.s3477c3f0");
    check_field_offset(lv, s3477c3f1, ABISELECT(12,8), "S3477C3.s3477c3f1");
    test_class_info(&lv, &cd_S3477C3);
    dp->~S3477C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3477C3(Test_S3477C3, "S3477C3", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S3477C3C1Ev();
extern void _ZN7S3477C3D2Ev();
Name_Map name_map_S3477C3[] = {
  NSPAIR(_ZN7S3477C3C1Ev),
  NSPAIR(_ZN7S3477C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3477C5;
extern VTBL_ENTRY _ZTI7S3477C5[];
extern  VTBL_ENTRY _ZTV7S3477C5[];
extern Class_Descriptor cd_S3477C4;
extern VTBL_ENTRY _ZTI7S3477C4[];
extern  VTBL_ENTRY _ZTV7S3477C4[];
static Base_Class bases_S3477C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3477C5,    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
  0, 0},
  {&cd_S3477C4,    ABISELECT(16,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S3477C3[];
extern void _ZN7S3477C3D1Ev();
extern void _ZN7S3477C3D0Ev();
extern void _ZN7S3477C33v14Ev();
extern void _ZN7S3477C33v15Ev();
extern void _ZN7S3477C33v16Ev();
extern void _ZN7S3477C33v17Ev();
extern void _ZN7S3477C33v18Ev();
extern void _ZN7S3477C33v19Ev();
extern void _ZN7S3477C33v20Ev();
extern void _ZN7S3477C33v21Ev();
extern void _ZN7S3477C52v7Ev();
extern void _ZN7S3477C52v8Ev();
extern void _ZN7S3477C52v9Ev();
extern void _ZN7S3477C53v10Ev();
extern void _ZN7S3477C53v11Ev();
extern void _ZN7S3477C53v12Ev();
extern void _ZN7S3477C43v13Ev();
static  VTBL_ENTRY vtc_S3477C3[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S3477C3[0]),
  (VTBL_ENTRY)&_ZN7S3477C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3477C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v21Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3477C3[0]),
  (VTBL_ENTRY)&_ZN7S3477C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3477C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3477C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3477C43v13Ev,
};
extern VTBL_ENTRY _ZTV7S3477C3[];
static  VTT_ENTRY vtt_S3477C3[] = {
  {&(_ZTV7S3477C3[3]),  3,29},
  {&(_ZTV7S3477C3[22]),  22,29},
};
extern VTBL_ENTRY _ZTI7S3477C3[];
extern  VTBL_ENTRY _ZTV7S3477C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3477C3[];
Class_Descriptor cd_S3477C3 = {  "S3477C3", // class name
  bases_S3477C3, 2,
  &(vtc_S3477C3[0]), // expected_vtbl_contents
  &(vtt_S3477C3[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S3477C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S3477C3),29, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3477C3),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  S3477C2  : S3477C3 , S3477C5 {
  virtual void  v22(); // _ZN7S3477C23v22Ev
  virtual void  v23(); // _ZN7S3477C23v23Ev
  virtual void  v24(); // _ZN7S3477C23v24Ev
  virtual void  v25(); // _ZN7S3477C23v25Ev
  ~S3477C2(); // tgen
  S3477C2(); // tgen
};
//SIG(-1 S3477C2) C1{ BC2{ VBC3{ BC4{ v5 v6 v7 v8 v9 v10 Fi} v11} vd v12 v13 v14 v15 v16 v17 v18 v19 Fi Fs} BC4 v1 v2 v3 v4}


void  S3477C2 ::v22(){vfunc_called(this, "_ZN7S3477C23v22Ev");}
void  S3477C2 ::v23(){vfunc_called(this, "_ZN7S3477C23v23Ev");}
void  S3477C2 ::v24(){vfunc_called(this, "_ZN7S3477C23v24Ev");}
void  S3477C2 ::v25(){vfunc_called(this, "_ZN7S3477C23v25Ev");}
S3477C2 ::~S3477C2(){ note_dtor("S3477C2", this);} // tgen
S3477C2 ::S3477C2(){ note_ctor("S3477C2", this);} // tgen

static void Test_S3477C2()
{
  extern Class_Descriptor cd_S3477C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S3477C2, buf);
    S3477C2 *dp, &lv = *(dp=new (buf) S3477C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S3477C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3477C2)");
    check_base_class_offset(lv, (S3477C5*)(S3477C4*), ABISELECT(32,20), "S3477C2");
    check_base_class_offset(lv, (S3477C4*)(S3477C3*), ABISELECT(32,20), "S3477C2");
    check_base_class_offset(lv, (S3477C3*), 0, "S3477C2");
    /*is_ambiguous_... S3477C2::S3477C5 */ AMB_check_base_class_offset(lv, (S3477C5*), ABISELECT(16,12), "S3477C2");
    test_class_info(&lv, &cd_S3477C2);
    dp->~S3477C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3477C2(Test_S3477C2, "S3477C2", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S3477C2C1Ev();
extern void _ZN7S3477C2D1Ev();
Name_Map name_map_S3477C2[] = {
  NSPAIR(_ZN7S3477C2C1Ev),
  NSPAIR(_ZN7S3477C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3477C5;
extern VTBL_ENTRY _ZTI7S3477C5[];
extern  VTBL_ENTRY _ZTV7S3477C5[];
extern Class_Descriptor cd_S3477C4;
extern VTBL_ENTRY _ZTI7S3477C4[];
extern  VTBL_ENTRY _ZTV7S3477C4[];
extern Class_Descriptor cd_S3477C3;
extern VTBL_ENTRY _ZTI7S3477C3[];
extern  VTBL_ENTRY _ZTV7S3477C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3477C3[];
extern Class_Descriptor cd_S3477C5;
extern VTBL_ENTRY _ZTI7S3477C5[];
extern  VTBL_ENTRY _ZTV7S3477C5[];
static Base_Class bases_S3477C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3477C5,    ABISELECT(32,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
  0, 0},
  {&cd_S3477C4,    ABISELECT(32,20), //bcp->offset
    25, //bcp->virtual_function_table_offset
    9, //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
    2, //immediately_derived
  0, 1},
  {&cd_S3477C3,    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_S3477C5,    ABISELECT(16,12), //bcp->offset
    17, //bcp->virtual_function_table_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 _ZTI7S3477C2[];
extern void _ZN7S3477C2D1Ev();
extern void _ZN7S3477C2D0Ev();
extern void _ZN7S3477C33v14Ev();
extern void _ZN7S3477C33v15Ev();
extern void _ZN7S3477C33v16Ev();
extern void _ZN7S3477C33v17Ev();
extern void _ZN7S3477C33v18Ev();
extern void _ZN7S3477C33v19Ev();
extern void _ZN7S3477C33v20Ev();
extern void _ZN7S3477C33v21Ev();
extern void _ZN7S3477C23v22Ev();
extern void _ZN7S3477C23v23Ev();
extern void _ZN7S3477C23v24Ev();
extern void _ZN7S3477C23v25Ev();
extern void _ZN7S3477C52v7Ev();
extern void _ZN7S3477C52v8Ev();
extern void _ZN7S3477C52v9Ev();
extern void _ZN7S3477C53v10Ev();
extern void _ZN7S3477C53v11Ev();
extern void _ZN7S3477C53v12Ev();
extern void _ZN7S3477C52v7Ev();
extern void _ZN7S3477C52v8Ev();
extern void _ZN7S3477C52v9Ev();
extern void _ZN7S3477C53v10Ev();
extern void _ZN7S3477C53v11Ev();
extern void _ZN7S3477C53v12Ev();
extern void _ZN7S3477C43v13Ev();
static  VTBL_ENTRY vtc_S3477C2[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3477C2[0]),
  (VTBL_ENTRY)&_ZN7S3477C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3477C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3477C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3477C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3477C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3477C23v25Ev,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3477C2[0]),
  (VTBL_ENTRY)&_ZN7S3477C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3477C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3477C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v12Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S3477C2[0]),
  (VTBL_ENTRY)&_ZN7S3477C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3477C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3477C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3477C43v13Ev,
};
extern VTBL_ENTRY _ZTV7S3477C2[];
extern void _ZN7S3477C3D1Ev();
extern void _ZN7S3477C3D0Ev();
extern void _ZN7S3477C33v14Ev();
extern void _ZN7S3477C33v15Ev();
extern void _ZN7S3477C33v16Ev();
extern void _ZN7S3477C33v17Ev();
extern void _ZN7S3477C33v18Ev();
extern void _ZN7S3477C33v19Ev();
extern void _ZN7S3477C33v20Ev();
extern void _ZN7S3477C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3477C3__7S3477C2[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S3477C3[0]),
  (VTBL_ENTRY)&_ZN7S3477C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3477C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v21Ev,
};
extern void _ZN7S3477C52v7Ev();
extern void _ZN7S3477C52v8Ev();
extern void _ZN7S3477C52v9Ev();
extern void _ZN7S3477C53v10Ev();
extern void _ZN7S3477C53v11Ev();
extern void _ZN7S3477C53v12Ev();
extern void _ZN7S3477C43v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3477C4__7S3477C3__7S3477C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S3477C3[0]),
  (VTBL_ENTRY)&_ZN7S3477C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3477C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3477C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3477C43v13Ev,
};
static  VTT_ENTRY vtt_S3477C2[] = {
  {&(_ZTV7S3477C2[3]),  3,41},
  {&(_tg__ZTV7S3477C3__7S3477C2[3]),  3,13},
  {&(_tg__ZTV7S3477C4__7S3477C3__7S3477C2[9]),  9,16},
  {&(_ZTV7S3477C2[34]),  34,41},
};
extern VTBL_ENTRY _ZTI7S3477C2[];
extern  VTBL_ENTRY _ZTV7S3477C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3477C2[];
Class_Descriptor cd_S3477C2 = {  "S3477C2", // class name
  bases_S3477C2, 4,
  &(vtc_S3477C2[0]), // expected_vtbl_contents
  &(vtt_S3477C2[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S3477C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S3477C2),41, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3477C2),4, //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  S3477C1  : S3477C2 {
  ::S3477C5 s3477c1f0;
  ::S3052C22_nt s3477c1f1;
  ::S19089C10 s3477c1f2;
  virtual  ~S3477C1(); // _ZN7S3477C1D2Ev
  virtual void  v1(); // _ZN7S3477C12v1Ev
  virtual void  v2(); // _ZN7S3477C12v2Ev
  virtual void  v3(); // _ZN7S3477C12v3Ev
  virtual void  v4(); // _ZN7S3477C12v4Ev
  virtual void  v5(); // _ZN7S3477C12v5Ev
  virtual void  v6(); // _ZN7S3477C12v6Ev
  S3477C1(); // tgen
};
//SIG(1 S3477C1) C1{ BC2{ BC3{ VBC4{ BC5{ v7 v8 v9 v10 v11 v12 Fi} v13} vd v14 v15 v16 v17 v18 v19 v20 v21 Fi Fs} BC5 v22 v23 v24 v25} vd v1 v2 v3 v4 v5 v6 FC5 FC6{} FC7{ v26 v27 v28 FC8{ BC9{ BC10{ v36 v37 v38 v39 v40 v41 Fi} v42} v29 v30 v31 v32 v33 v34 v35}}}


 S3477C1 ::~S3477C1(){ note_dtor("S3477C1", this);}
void  S3477C1 ::v1(){vfunc_called(this, "_ZN7S3477C12v1Ev");}
void  S3477C1 ::v2(){vfunc_called(this, "_ZN7S3477C12v2Ev");}
void  S3477C1 ::v3(){vfunc_called(this, "_ZN7S3477C12v3Ev");}
void  S3477C1 ::v4(){vfunc_called(this, "_ZN7S3477C12v4Ev");}
void  S3477C1 ::v5(){vfunc_called(this, "_ZN7S3477C12v5Ev");}
void  S3477C1 ::v6(){vfunc_called(this, "_ZN7S3477C12v6Ev");}
S3477C1 ::S3477C1(){ note_ctor("S3477C1", this);} // tgen

static void Test_S3477C1()
{
  extern Class_Descriptor cd_S3477C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,14)];
    init_test(&cd_S3477C1, buf);
    S3477C1 *dp, &lv = *(dp=new (buf) S3477C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S3477C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3477C1)");
    check_base_class_offset(lv, (S3477C5*)(S3477C4*), ABISELECT(80,44), "S3477C1");
    check_base_class_offset(lv, (S3477C4*)(S3477C3*)(S3477C2*), ABISELECT(80,44), "S3477C1");
    check_base_class_offset(lv, (S3477C3*)(S3477C2*), 0, "S3477C1");
    /*is_ambiguous_... S3477C2::S3477C5 */ AMB_check_base_class_offset(lv, (S3477C5*)(S3477C2*), ABISELECT(16,12), "S3477C1");
    check_base_class_offset(lv, (S3477C2*), 0, "S3477C1");
    check_field_offset(lv, s3477c1f0, ABISELECT(32,20), "S3477C1.s3477c1f0");
    check_field_offset(lv, s3477c1f1, ABISELECT(48,28), "S3477C1.s3477c1f1");
    check_field_offset(lv, s3477c1f2, ABISELECT(56,32), "S3477C1.s3477c1f2");
    test_class_info(&lv, &cd_S3477C1);
    dp->~S3477C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3477C1(Test_S3477C1, "S3477C1", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN7S3477C1C1Ev();
extern void _ZN7S3477C1D2Ev();
Name_Map name_map_S3477C1[] = {
  NSPAIR(_ZN7S3477C1C1Ev),
  NSPAIR(_ZN7S3477C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3477C5;
extern VTBL_ENTRY _ZTI7S3477C5[];
extern  VTBL_ENTRY _ZTV7S3477C5[];
extern Class_Descriptor cd_S3477C4;
extern VTBL_ENTRY _ZTI7S3477C4[];
extern  VTBL_ENTRY _ZTV7S3477C4[];
extern Class_Descriptor cd_S3477C3;
extern VTBL_ENTRY _ZTI7S3477C3[];
extern  VTBL_ENTRY _ZTV7S3477C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3477C3[];
extern Class_Descriptor cd_S3477C5;
extern VTBL_ENTRY _ZTI7S3477C5[];
extern  VTBL_ENTRY _ZTV7S3477C5[];
extern Class_Descriptor cd_S3477C2;
extern VTBL_ENTRY _ZTI7S3477C2[];
extern  VTBL_ENTRY _ZTV7S3477C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3477C2[];
static Base_Class bases_S3477C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3477C5,    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
    1, //init_seq
    1, //immediately_derived
  0, 0},
  {&cd_S3477C4,    ABISELECT(80,44), //bcp->offset
    31, //bcp->virtual_function_table_offset
    9, //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
    2, //immediately_derived
  0, 1},
  {&cd_S3477C3,    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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S3477C5,    ABISELECT(16,12), //bcp->offset
    23, //bcp->virtual_function_table_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_S3477C2,    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},
  {0}};
extern VTBL_ENTRY _ZTI7S3477C1[];
extern void _ZN7S3477C1D1Ev();
extern void _ZN7S3477C1D0Ev();
extern void _ZN7S3477C33v14Ev();
extern void _ZN7S3477C33v15Ev();
extern void _ZN7S3477C33v16Ev();
extern void _ZN7S3477C33v17Ev();
extern void _ZN7S3477C33v18Ev();
extern void _ZN7S3477C33v19Ev();
extern void _ZN7S3477C33v20Ev();
extern void _ZN7S3477C33v21Ev();
extern void _ZN7S3477C23v22Ev();
extern void _ZN7S3477C23v23Ev();
extern void _ZN7S3477C23v24Ev();
extern void _ZN7S3477C23v25Ev();
extern void _ZN7S3477C12v1Ev();
extern void _ZN7S3477C12v2Ev();
extern void _ZN7S3477C12v3Ev();
extern void _ZN7S3477C12v4Ev();
extern void _ZN7S3477C12v5Ev();
extern void _ZN7S3477C12v6Ev();
extern void _ZN7S3477C52v7Ev();
extern void _ZN7S3477C52v8Ev();
extern void _ZN7S3477C52v9Ev();
extern void _ZN7S3477C53v10Ev();
extern void _ZN7S3477C53v11Ev();
extern void _ZN7S3477C53v12Ev();
extern void _ZN7S3477C52v7Ev();
extern void _ZN7S3477C52v8Ev();
extern void _ZN7S3477C52v9Ev();
extern void _ZN7S3477C53v10Ev();
extern void _ZN7S3477C53v11Ev();
extern void _ZN7S3477C53v12Ev();
extern void _ZN7S3477C43v13Ev();
static  VTBL_ENTRY vtc_S3477C1[] = {
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S3477C1[0]),
  (VTBL_ENTRY)&_ZN7S3477C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3477C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3477C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3477C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3477C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3477C23v25Ev,
  (VTBL_ENTRY)&_ZN7S3477C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3477C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3477C12v3Ev,
  (VTBL_ENTRY)&_ZN7S3477C12v4Ev,
  (VTBL_ENTRY)&_ZN7S3477C12v5Ev,
  (VTBL_ENTRY)&_ZN7S3477C12v6Ev,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S3477C1[0]),
  (VTBL_ENTRY)&_ZN7S3477C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3477C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3477C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v12Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S3477C1[0]),
  (VTBL_ENTRY)&_ZN7S3477C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3477C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3477C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3477C43v13Ev,
};
extern VTBL_ENTRY _ZTV7S3477C1[];
extern void _ZN7S3477C2D1Ev();
extern void _ZN7S3477C2D0Ev();
extern void _ZN7S3477C33v14Ev();
extern void _ZN7S3477C33v15Ev();
extern void _ZN7S3477C33v16Ev();
extern void _ZN7S3477C33v17Ev();
extern void _ZN7S3477C33v18Ev();
extern void _ZN7S3477C33v19Ev();
extern void _ZN7S3477C33v20Ev();
extern void _ZN7S3477C33v21Ev();
extern void _ZN7S3477C23v22Ev();
extern void _ZN7S3477C23v23Ev();
extern void _ZN7S3477C23v24Ev();
extern void _ZN7S3477C23v25Ev();
static  VTBL_ENTRY _tg__ZTV7S3477C2__7S3477C1[] = {
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S3477C2[0]),
  (VTBL_ENTRY)&_ZN7S3477C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3477C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v21Ev,
  (VTBL_ENTRY)&_ZN7S3477C23v22Ev,
  (VTBL_ENTRY)&_ZN7S3477C23v23Ev,
  (VTBL_ENTRY)&_ZN7S3477C23v24Ev,
  (VTBL_ENTRY)&_ZN7S3477C23v25Ev,
};
extern void _ZN7S3477C3D1Ev();
extern void _ZN7S3477C3D0Ev();
extern void _ZN7S3477C33v14Ev();
extern void _ZN7S3477C33v15Ev();
extern void _ZN7S3477C33v16Ev();
extern void _ZN7S3477C33v17Ev();
extern void _ZN7S3477C33v18Ev();
extern void _ZN7S3477C33v19Ev();
extern void _ZN7S3477C33v20Ev();
extern void _ZN7S3477C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S3477C37S3477C2__7S3477C1[] = {
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S3477C3[0]),
  (VTBL_ENTRY)&_ZN7S3477C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3477C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v14Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v15Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v16Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v17Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v18Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v19Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v20Ev,
  (VTBL_ENTRY)&_ZN7S3477C33v21Ev,
};
extern void _ZN7S3477C52v7Ev();
extern void _ZN7S3477C52v8Ev();
extern void _ZN7S3477C52v9Ev();
extern void _ZN7S3477C53v10Ev();
extern void _ZN7S3477C53v11Ev();
extern void _ZN7S3477C53v12Ev();
extern void _ZN7S3477C43v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3477C4__7S3477C37S3477C2__7S3477C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S3477C3[0]),
  (VTBL_ENTRY)&_ZN7S3477C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3477C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3477C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3477C43v13Ev,
};
extern void _ZN7S3477C52v7Ev();
extern void _ZN7S3477C52v8Ev();
extern void _ZN7S3477C52v9Ev();
extern void _ZN7S3477C53v10Ev();
extern void _ZN7S3477C53v11Ev();
extern void _ZN7S3477C53v12Ev();
extern void _ZN7S3477C43v13Ev();
static  VTBL_ENTRY _tg__ZTV7S3477C4__7S3477C2__7S3477C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S3477C2[0]),
  (VTBL_ENTRY)&_ZN7S3477C52v7Ev,
  (VTBL_ENTRY)&_ZN7S3477C52v8Ev,
  (VTBL_ENTRY)&_ZN7S3477C52v9Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v10Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v11Ev,
  (VTBL_ENTRY)&_ZN7S3477C53v12Ev,
  (VTBL_ENTRY)&_ZN7S3477C43v13Ev,
};
static  VTT_ENTRY vtt_S3477C1[] = {
  {&(_ZTV7S3477C1[3]),  3,47},
  {&(_tg__ZTV7S3477C2__7S3477C1[3]),  3,17},
  {&(_tg__ZTV7S3477C37S3477C2__7S3477C1[3]),  3,13},
  {&(_tg__ZTV7S3477C4__7S3477C37S3477C2__7S3477C1[9]),  9,16},
  {&(_tg__ZTV7S3477C4__7S3477C2__7S3477C1[9]),  9,16},
  {&(_ZTV7S3477C1[40]),  40,47},
};
extern VTBL_ENTRY _ZTI7S3477C1[];
extern  VTBL_ENTRY _ZTV7S3477C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S3477C1[];
Class_Descriptor cd_S3477C1 = {  "S3477C1", // class name
  bases_S3477C1, 5,
  &(vtc_S3477C1[0]), // expected_vtbl_contents
  &(vtt_S3477C1[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI7S3477C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3477C1),47, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S3477C1),6, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19828C7  : virtual S2264C38 , virtual S2264C24 {
  int s19828c7f0[9];
  ~S19828C7(); // tgen
  S19828C7(); // tgen
};
//SIG(-1 S19828C7) C1{ VBC2{ m} VBC3{ m} Fi[9]}


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

static void Test_S19828C7()
{
  extern Class_Descriptor cd_S19828C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S19828C7, buf);
    S19828C7 *dp, &lv = *(dp=new (buf) S19828C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S19828C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19828C7)");
    check_base_class_offset(lv, (S2264C38*), 0, "S19828C7");
    check_base_class_offset(lv, (S2264C24*), 0, "S19828C7");
    check_field_offset(lv, s19828c7f0, ABISELECT(8,4), "S19828C7.s19828c7f0");
    test_class_info(&lv, &cd_S19828C7);
    dp->~S19828C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19828C7(Test_S19828C7, "S19828C7", ABISELECT(48,40));

#else // __cplusplus

extern void _ZN8S19828C7C1Ev();
extern void _ZN8S19828C7D1Ev();
Name_Map name_map_S19828C7[] = {
  NSPAIR(_ZN8S19828C7C1Ev),
  NSPAIR(_ZN8S19828C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
static Base_Class bases_S19828C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19828C7[];
static  VTBL_ENTRY vtc_S19828C7[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C7[0]),
};
extern VTBL_ENTRY _ZTV8S19828C7[];
static  VTT_ENTRY vtt_S19828C7[] = {
  {&(_ZTV8S19828C7[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19828C7[];
extern  VTBL_ENTRY _ZTV8S19828C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C7[];
Class_Descriptor cd_S19828C7 = {  "S19828C7", // class name
  bases_S19828C7, 2,
  &(vtc_S19828C7[0]), // expected_vtbl_contents
  &(vtt_S19828C7[0]), // expected_vtt_contents
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI8S19828C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19828C7),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19828C7),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  S19828C5  : virtual S2264C38 , virtual S2264C24 , virtual S19828C7 {
  void *s19828c5f0;
  virtual  ~S19828C5(); // _ZN8S19828C5D2Ev
  S19828C5(); // tgen
};
//SIG(-1 S19828C5) C1{ VBC2{ m} VBC3{ m} VBC4{ VBC2 VBC3 Fi[9]} vd Fp}


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

static void Test_S19828C5()
{
  extern Class_Descriptor cd_S19828C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S19828C5, buf);
    S19828C5 *dp, &lv = *(dp=new (buf) S19828C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S19828C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19828C5)");
    check_base_class_offset(lv, (S2264C38*), 0, "S19828C5");
    check_base_class_offset(lv, (S2264C38*)(S19828C7*), 0, "S19828C5");
    check_base_class_offset(lv, (S2264C24*), 0, "S19828C5");
    check_base_class_offset(lv, (S2264C24*)(S19828C7*), 0, "S19828C5");
    check_base_class_offset(lv, (S19828C7*), ABISELECT(16,8), "S19828C5");
    check_field_offset(lv, s19828c5f0, ABISELECT(8,4), "S19828C5.s19828c5f0");
    test_class_info(&lv, &cd_S19828C5);
    dp->~S19828C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19828C5(Test_S19828C5, "S19828C5", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN8S19828C5C1Ev();
extern void _ZN8S19828C5D2Ev();
Name_Map name_map_S19828C5[] = {
  NSPAIR(_ZN8S19828C5C1Ev),
  NSPAIR(_ZN8S19828C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19828C7;
extern VTBL_ENTRY _ZTI8S19828C7[];
extern  VTBL_ENTRY _ZTV8S19828C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C7[];
static Base_Class bases_S19828C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S19828C7,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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 _ZTI8S19828C5[];
extern void _ZN8S19828C5D1Ev();
extern void _ZN8S19828C5D0Ev();
static  VTBL_ENTRY vtc_S19828C5[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
  (VTBL_ENTRY)&_ZN8S19828C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C5D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
};
extern VTBL_ENTRY _ZTV8S19828C5[];
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C5[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C7[0]),
};
static  VTT_ENTRY vtt_S19828C5[] = {
  {&(_ZTV8S19828C5[5]),  5,11},
  {&(_ZTV8S19828C5[11]),  11,11},
  {&(_tg__ZTV8S19828C7__8S19828C5[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19828C5[];
extern  VTBL_ENTRY _ZTV8S19828C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C5[];
Class_Descriptor cd_S19828C5 = {  "S19828C5", // class name
  bases_S19828C5, 3,
  &(vtc_S19828C5[0]), // expected_vtbl_contents
  &(vtt_S19828C5[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI8S19828C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19828C5),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19828C5),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  S19828C8  : S2264C24 , virtual S2264C28 {
  ~S19828C8(); // tgen
  S19828C8(); // tgen
};
//SIG(-1 S19828C8) C1{ BC2{ m} VBC3{ m}}


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

static void Test_S19828C8()
{
  extern Class_Descriptor cd_S19828C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19828C8, buf);
    S19828C8 *dp, &lv = *(dp=new (buf) S19828C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19828C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19828C8)");
    check_base_class_offset(lv, (S2264C24*), 0, "S19828C8");
    check_base_class_offset(lv, (S2264C28*), 0, "S19828C8");
    test_class_info(&lv, &cd_S19828C8);
    dp->~S19828C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19828C8(Test_S19828C8, "S19828C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19828C8C1Ev();
extern void _ZN8S19828C8D1Ev();
Name_Map name_map_S19828C8[] = {
  NSPAIR(_ZN8S19828C8C1Ev),
  NSPAIR(_ZN8S19828C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S19828C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19828C8[];
static  VTBL_ENTRY vtc_S19828C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C8[0]),
};
extern VTBL_ENTRY _ZTV8S19828C8[];
static  VTT_ENTRY vtt_S19828C8[] = {
  {&(_ZTV8S19828C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19828C8[];
extern  VTBL_ENTRY _ZTV8S19828C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C8[];
Class_Descriptor cd_S19828C8 = {  "S19828C8", // class name
  bases_S19828C8, 2,
  &(vtc_S19828C8[0]), // expected_vtbl_contents
  &(vtt_S19828C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19828C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19828C8),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19828C8),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  S19828C4  : S19828C5 , S2264C24 , virtual S19828C8 {
  virtual  ~S19828C4(); // _ZN8S19828C4D2Ev
  S19828C4(); // tgen
};
//SIG(-1 S19828C4) C1{ BC2{ VBC3{ m} VBC4{ m} VBC5{ VBC3 VBC4 Fi[9]} vd Fp} BC4 VBC6{ BC4 VBC7{ m}} vd}


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

static void Test_S19828C4()
{
  extern Class_Descriptor cd_S19828C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S19828C4, buf);
    S19828C4 *dp, &lv = *(dp=new (buf) S19828C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S19828C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19828C4)");
    check_base_class_offset(lv, (S2264C38*)(S19828C5*), 0, "S19828C4");
    check_base_class_offset(lv, (S2264C38*)(S19828C7*), 0, "S19828C4");
    check_base_class_offset(lv, (S2264C24*)(S19828C5*), ABISELECT(16,8), "S19828C4");
    check_base_class_offset(lv, (S2264C24*)(S19828C7*), ABISELECT(16,8), "S19828C4");
    check_base_class_offset(lv, (S19828C7*)(S19828C5*), ABISELECT(16,8), "S19828C4");
    check_base_class_offset(lv, (S19828C5*), 0, "S19828C4");
    /*is_ambiguous_... S19828C4::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*), 0, "S19828C4");
    check_base_class_offset(lv, (S2264C24*)(S19828C8*), ABISELECT(64,48), "S19828C4");
    check_base_class_offset(lv, (S2264C28*)(S19828C8*), 0, "S19828C4");
    check_base_class_offset(lv, (S19828C8*), ABISELECT(64,48), "S19828C4");
    test_class_info(&lv, &cd_S19828C4);
    dp->~S19828C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19828C4(Test_S19828C4, "S19828C4", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN8S19828C4C1Ev();
extern void _ZN8S19828C4D2Ev();
Name_Map name_map_S19828C4[] = {
  NSPAIR(_ZN8S19828C4C1Ev),
  NSPAIR(_ZN8S19828C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19828C7;
extern VTBL_ENTRY _ZTI8S19828C7[];
extern  VTBL_ENTRY _ZTV8S19828C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C7[];
extern Class_Descriptor cd_S19828C5;
extern VTBL_ENTRY _ZTI8S19828C5[];
extern  VTBL_ENTRY _ZTV8S19828C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C5[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19828C8;
extern VTBL_ENTRY _ZTI8S19828C8[];
extern  VTBL_ENTRY _ZTV8S19828C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C8[];
static Base_Class bases_S19828C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C24,    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, 1},
  {&cd_S19828C7,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19828C5,    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_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C24,    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
    7, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19828C8,    ABISELECT(64,48), //bcp->offset
    13, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19828C4[];
extern void _ZN8S19828C4D1Ev();
extern void _ZN8S19828C4D0Ev();
static  VTBL_ENTRY vtc_S19828C4[] = {
  0,
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C4[0]),
  (VTBL_ENTRY)&_ZN8S19828C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C4D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19828C4[0]),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI8S19828C4[0]),
};
extern VTBL_ENTRY _ZTV8S19828C4[];
extern void _ZN8S19828C5D1Ev();
extern void _ZN8S19828C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19828C5__8S19828C4[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
  (VTBL_ENTRY)&_ZN8S19828C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C5__8S19828C4[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C4[] = {
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C8__8S19828C4[] = {
  ABISELECT(-64,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C8[0]),
};
static  VTT_ENTRY vtt_S19828C4[] = {
  {&(_ZTV8S19828C4[7]),  7,16},
  {&(_tg__ZTV8S19828C5__8S19828C4[5]),  5,7},
  {&(_tg__ZTV8S19828C7__8S19828C5__8S19828C4[4]),  4,4},
  {&(_ZTV8S19828C4[13]),  13,16},
  {&(_ZTV8S19828C4[16]),  16,16},
  {&(_tg__ZTV8S19828C7__8S19828C4[4]),  4,4},
  {&(_tg__ZTV8S19828C8__8S19828C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19828C4[];
extern  VTBL_ENTRY _ZTV8S19828C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C4[];
Class_Descriptor cd_S19828C4 = {  "S19828C4", // class name
  bases_S19828C4, 8,
  &(vtc_S19828C4[0]), // expected_vtbl_contents
  &(vtt_S19828C4[0]), // expected_vtt_contents
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI8S19828C4),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19828C4),16, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19828C4),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19828C11  : virtual S2264C24 , S2264C38 , S19828C5 , virtual S2264C28 {
  virtual  ~S19828C11(); // _ZN9S19828C11D2Ev
  S19828C11(); // tgen
};
//SIG(-1 S19828C11) C1{ VBC2{ m} BC3{ m} BC4{ VBC3 VBC2 VBC5{ VBC3 VBC2 Fi[9]} vd Fp} VBC6{ m} vd}


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

static void Test_S19828C11()
{
  extern Class_Descriptor cd_S19828C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S19828C11, buf);
    S19828C11 *dp, &lv = *(dp=new (buf) S19828C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S19828C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19828C11)");
    check_base_class_offset(lv, (S2264C24*), 0, "S19828C11");
    check_base_class_offset(lv, (S2264C24*)(S19828C5*), 0, "S19828C11");
    check_base_class_offset(lv, (S2264C24*)(S19828C7*), 0, "S19828C11");
    /*is_ambiguous_... S19828C11::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), 0, "S19828C11");
    check_base_class_offset(lv, (S2264C38*)(S19828C5*), ABISELECT(16,8), "S19828C11");
    check_base_class_offset(lv, (S2264C38*)(S19828C7*), ABISELECT(16,8), "S19828C11");
    check_base_class_offset(lv, (S19828C7*)(S19828C5*), ABISELECT(16,8), "S19828C11");
    check_base_class_offset(lv, (S19828C5*), 0, "S19828C11");
    check_base_class_offset(lv, (S2264C28*), 0, "S19828C11");
    test_class_info(&lv, &cd_S19828C11);
    dp->~S19828C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19828C11(Test_S19828C11, "S19828C11", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN9S19828C11C1Ev();
extern void _ZN9S19828C11D2Ev();
Name_Map name_map_S19828C11[] = {
  NSPAIR(_ZN9S19828C11C1Ev),
  NSPAIR(_ZN9S19828C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S19828C7;
extern VTBL_ENTRY _ZTI8S19828C7[];
extern  VTBL_ENTRY _ZTV8S19828C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C7[];
extern Class_Descriptor cd_S19828C5;
extern VTBL_ENTRY _ZTI8S19828C5[];
extern  VTBL_ENTRY _ZTV8S19828C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S19828C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C38,    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, 1},
  {&cd_S19828C7,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19828C5,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S19828C11[];
extern void _ZN9S19828C11D1Ev();
extern void _ZN9S19828C11D0Ev();
static  VTBL_ENTRY vtc_S19828C11[] = {
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19828C11[0]),
  (VTBL_ENTRY)&_ZN9S19828C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19828C11D0Ev,
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19828C11[0]),
};
extern VTBL_ENTRY _ZTV9S19828C11[];
extern void _ZN8S19828C5D1Ev();
extern void _ZN8S19828C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19828C5__9S19828C11[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
  (VTBL_ENTRY)&_ZN8S19828C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C5__9S19828C11[] = {
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__9S19828C11[] = {
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C7[0]),
};
static  VTT_ENTRY vtt_S19828C11[] = {
  {&(_ZTV9S19828C11[6]),  6,12},
  {&(_tg__ZTV8S19828C5__9S19828C11[5]),  5,7},
  {&(_tg__ZTV8S19828C7__8S19828C5__9S19828C11[4]),  4,4},
  {&(_ZTV9S19828C11[12]),  12,12},
  {&(_tg__ZTV8S19828C7__9S19828C11[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19828C11[];
extern  VTBL_ENTRY _ZTV9S19828C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19828C11[];
Class_Descriptor cd_S19828C11 = {  "S19828C11", // class name
  bases_S19828C11, 6,
  &(vtc_S19828C11[0]), // expected_vtbl_contents
  &(vtt_S19828C11[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI9S19828C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S19828C11),12, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19828C11),5, //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  S19828C10  : S2264C24 , virtual S19828C7 , S19828C5 , S2264C38 , virtual S19828C11 {
  virtual  ~S19828C10(); // _ZN9S19828C10D2Ev
  S19828C10(); // tgen
};
//SIG(-1 S19828C10) C1{ BC2{ m} VBC3{ VBC4{ m} VBC2 Fi[9]} BC5{ VBC4 VBC2 VBC3 vd Fp} BC4 VBC6{ VBC2 BC4 BC5 VBC7{ m} vd} vd}


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

static void Test_S19828C10()
{
  extern Class_Descriptor cd_S19828C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,16)];
    init_test(&cd_S19828C10, buf);
    S19828C10 *dp, &lv = *(dp=new (buf) S19828C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S19828C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19828C10)");
    /*is_ambiguous_... S19828C10::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*), 0, "S19828C10");
    check_base_class_offset(lv, (S2264C38*)(S19828C7*), ABISELECT(60,48), "S19828C10");
    /*is_ambiguous_... S19828C10::S19828C5 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C5*), ABISELECT(60,48), "S19828C10");
    check_base_class_offset(lv, (S2264C38*)(S19828C5*)(S19828C11*), ABISELECT(60,48), "S19828C10");
    check_base_class_offset(lv, (S2264C24*)(S19828C7*), ABISELECT(60,48), "S19828C10");
    /*is_ambiguous_... S19828C10::S19828C5 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C5*), ABISELECT(60,48), "S19828C10");
    check_base_class_offset(lv, (S2264C24*)(S19828C11*), ABISELECT(60,48), "S19828C10");
    check_base_class_offset(lv, (S2264C24*)(S19828C5*)(S19828C11*), ABISELECT(60,48), "S19828C10");
    check_base_class_offset(lv, (S19828C7*), ABISELECT(16,8), "S19828C10");
    /*is_ambiguous_... S19828C10::S19828C5 */ AMB_check_base_class_offset(lv, (S19828C7*)(S19828C5*), ABISELECT(16,8), "S19828C10");
    check_base_class_offset(lv, (S19828C7*)(S19828C5*)(S19828C11*), ABISELECT(16,8), "S19828C10");
    /*is_ambiguous_... S19828C10::S19828C5 */ AMB_check_base_class_offset(lv, (S19828C5*), 0, "S19828C10");
    /*is_ambiguous_... S19828C10::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), 0, "S19828C10");
    /*is_ambiguous_... S19828C11::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C11*), ABISELECT(64,52), "S19828C10");
    check_base_class_offset(lv, (S19828C5*)(S19828C11*), ABISELECT(64,52), "S19828C10");
    check_base_class_offset(lv, (S2264C28*)(S19828C11*), 0, "S19828C10");
    check_base_class_offset(lv, (S19828C11*), ABISELECT(64,52), "S19828C10");
    test_class_info(&lv, &cd_S19828C10);
    dp->~S19828C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19828C10(Test_S19828C10, "S19828C10", ABISELECT(80,60));

#else // __cplusplus

extern void _ZN9S19828C10C1Ev();
extern void _ZN9S19828C10D2Ev();
Name_Map name_map_S19828C10[] = {
  NSPAIR(_ZN9S19828C10C1Ev),
  NSPAIR(_ZN9S19828C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19828C7;
extern VTBL_ENTRY _ZTI8S19828C7[];
extern  VTBL_ENTRY _ZTV8S19828C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C7[];
extern Class_Descriptor cd_S19828C5;
extern VTBL_ENTRY _ZTI8S19828C5[];
extern  VTBL_ENTRY _ZTV8S19828C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S19828C5;
extern VTBL_ENTRY _ZTI8S19828C5[];
extern  VTBL_ENTRY _ZTV8S19828C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19828C11;
extern VTBL_ENTRY _ZTI9S19828C11[];
extern  VTBL_ENTRY _ZTV9S19828C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19828C11[];
static Base_Class bases_S19828C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C38,    ABISELECT(60,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_S2264C24,    ABISELECT(60,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_S19828C7,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19828C5,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C38,    ABISELECT(64,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
    9, //immediately_derived
  0, 0},
  {&cd_S19828C5,    ABISELECT(64,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19828C11,    ABISELECT(64,52), //bcp->offset
    13, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19828C10[];
extern void _ZN9S19828C10D1Ev();
extern void _ZN9S19828C10D0Ev();
extern void ABISELECT(_ZTv0_n56_N9S19828C10D1Ev,_ZTv0_n28_N9S19828C10D1Ev)();
extern void ABISELECT(_ZThn64_N9S19828C10D1Ev,_ZThn52_N9S19828C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19828C10D0Ev,_ZTv0_n28_N9S19828C10D0Ev)();
extern void ABISELECT(_ZThn64_N9S19828C10D0Ev,_ZThn52_N9S19828C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19828C10[] = {
  0,
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19828C10[0]),
  (VTBL_ENTRY)&_ZN9S19828C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19828C10D0Ev,
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19828C10[0]),
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI9S19828C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19828C10D1Ev,_ZTv0_n28_N9S19828C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19828C10D0Ev,_ZTv0_n28_N9S19828C10D0Ev),
};
extern VTBL_ENTRY _ZTV9S19828C10[];
extern void _ZN8S19828C5D1Ev();
extern void _ZN8S19828C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19828C5__9S19828C10[] = {
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
  (VTBL_ENTRY)&_ZN8S19828C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C5__9S19828C10[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__9S19828C10[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C7[0]),
};
extern void _ZN9S19828C11D1Ev();
extern void _ZN9S19828C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19828C11__9S19828C10[] = {
  ABISELECT(-64,-52),
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19828C11[0]),
  (VTBL_ENTRY)&_ZN9S19828C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19828C11D0Ev,
};
extern void _ZN8S19828C5D1Ev();
extern void _ZN8S19828C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19828C59S19828C11__A1__9S19828C10[] = {
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
  (VTBL_ENTRY)&_ZN8S19828C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C59S19828C11__A1__9S19828C10[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__9S19828C11__9S19828C10[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI9S19828C11[0]),
};
static  VTT_ENTRY vtt_S19828C10[] = {
  {&(_ZTV9S19828C10[7]),  7,22},
  {&(_tg__ZTV8S19828C5__9S19828C10[5]),  5,7},
  {&(_tg__ZTV8S19828C7__8S19828C5__9S19828C10[4]),  4,4},
  {&(_ZTV9S19828C10[13]),  13,22},
  {&(_ZTV9S19828C10[20]),  20,22},
  {&(_tg__ZTV8S19828C7__9S19828C10[4]),  4,4},
  {&(_tg__ZTV9S19828C11__9S19828C10[6]),  6,8},
  {&(_tg__ZTV8S19828C59S19828C11__A1__9S19828C10[5]),  5,7},
  {&(_tg__ZTV8S19828C7__8S19828C59S19828C11__A1__9S19828C10[4]),  4,4},
  {&(_tg__ZTV8S19828C7__9S19828C11__9S19828C10[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19828C10[];
extern  VTBL_ENTRY _ZTV9S19828C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19828C10[];
static VTBL_ENTRY alt_thunk_names198[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19828C10D0Ev,_ZTv0_n28_N9S19828C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19828C10D0Ev,_ZThn52_N9S19828C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19828C10D1Ev,_ZTv0_n28_N9S19828C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S19828C10D1Ev,_ZThn52_N9S19828C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19828C10 = {  "S19828C10", // class name
  bases_S19828C10, 10,
  &(vtc_S19828C10[0]), // expected_vtbl_contents
  &(vtt_S19828C10[0]), // expected_vtt_contents
  ABISELECT(80,60), // object size
  NSPAIRA(_ZTI9S19828C10),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19828C10),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19828C10),10, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names198,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19828C9  : S19828C10 , S19828C8 , S19828C11 , S2264C38 {
  virtual  ~S19828C9(); // _ZN8S19828C9D2Ev
  S19828C9(); // tgen
};
//SIG(-1 S19828C9) C1{ BC2{ BC3{ m} VBC4{ VBC5{ m} VBC3 Fi[9]} BC6{ VBC5 VBC3 VBC4 vd Fp} BC5 VBC7{ VBC3 BC5 BC6 VBC8{ m} vd} vd} BC9{ BC3 VBC8} BC7 BC5 vd}


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

static void Test_S19828C9()
{
  extern Class_Descriptor cd_S19828C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,19)];
    init_test(&cd_S19828C9, buf);
    S19828C9 *dp, &lv = *(dp=new (buf) S19828C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,72), "sizeof(S19828C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19828C9)");
    /*is_ambiguous_... S19828C10::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C10*), 0, "S19828C9");
    check_base_class_offset(lv, (S2264C38*)(S19828C7*), ABISELECT(84,60), "S19828C9");
    /*is_ambiguous_... S19828C10::S19828C5 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C5*)(S19828C10*), ABISELECT(84,60), "S19828C9");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C5*)(S19828C11*), ABISELECT(84,60), "S19828C9");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C5*)(S19828C11*), ABISELECT(84,60), "S19828C9");
    check_base_class_offset(lv, (S2264C24*)(S19828C7*), ABISELECT(84,60), "S19828C9");
    /*is_ambiguous_... S19828C10::S19828C5 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C5*)(S19828C10*), ABISELECT(84,60), "S19828C9");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C11*), ABISELECT(84,60), "S19828C9");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C5*)(S19828C11*), ABISELECT(84,60), "S19828C9");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C11*), ABISELECT(84,60), "S19828C9");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C5*)(S19828C11*), ABISELECT(84,60), "S19828C9");
    check_base_class_offset(lv, (S19828C7*)(S19828C10*), ABISELECT(40,20), "S19828C9");
    /*is_ambiguous_... S19828C10::S19828C5 */ AMB_check_base_class_offset(lv, (S19828C7*)(S19828C5*)(S19828C10*), ABISELECT(40,20), "S19828C9");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S19828C7*)(S19828C5*)(S19828C11*), ABISELECT(40,20), "S19828C9");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S19828C7*)(S19828C5*)(S19828C11*), ABISELECT(40,20), "S19828C9");
    /*is_ambiguous_... S19828C10::S19828C5 */ AMB_check_base_class_offset(lv, (S19828C5*)(S19828C10*), 0, "S19828C9");
    /*is_ambiguous_... S19828C10::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C10*), 0, "S19828C9");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C11*), ABISELECT(88,64), "S19828C9");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S19828C5*)(S19828C11*), ABISELECT(88,64), "S19828C9");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19828C11*), 0, "S19828C9");
    check_base_class_offset(lv, (S2264C28*)(S19828C8*), 0, "S19828C9");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19828C11*), 0, "S19828C9");
    check_base_class_offset(lv, (S19828C11*)(S19828C10*), ABISELECT(88,64), "S19828C9");
    check_base_class_offset(lv, (S19828C10*), 0, "S19828C9");
    check_base_class_offset(lv, (S2264C24*)(S19828C8*), ABISELECT(16,8), "S19828C9");
    check_base_class_offset(lv, (S19828C8*), ABISELECT(16,8), "S19828C9");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C11*), ABISELECT(24,12), "S19828C9");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S19828C5*)(S19828C11*), ABISELECT(24,12), "S19828C9");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S19828C11*), ABISELECT(24,12), "S19828C9");
    /*is_ambiguous_... S19828C9::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), ABISELECT(40,20), "S19828C9");
    test_class_info(&lv, &cd_S19828C9);
    dp->~S19828C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19828C9(Test_S19828C9, "S19828C9", ABISELECT(104,72));

#else // __cplusplus

extern void _ZN8S19828C9C1Ev();
extern void _ZN8S19828C9D2Ev();
Name_Map name_map_S19828C9[] = {
  NSPAIR(_ZN8S19828C9C1Ev),
  NSPAIR(_ZN8S19828C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19828C7;
extern VTBL_ENTRY _ZTI8S19828C7[];
extern  VTBL_ENTRY _ZTV8S19828C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C7[];
extern Class_Descriptor cd_S19828C5;
extern VTBL_ENTRY _ZTI8S19828C5[];
extern  VTBL_ENTRY _ZTV8S19828C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S19828C5;
extern VTBL_ENTRY _ZTI8S19828C5[];
extern  VTBL_ENTRY _ZTV8S19828C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19828C11;
extern VTBL_ENTRY _ZTI9S19828C11[];
extern  VTBL_ENTRY _ZTV9S19828C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19828C11[];
extern Class_Descriptor cd_S19828C10;
extern VTBL_ENTRY _ZTI9S19828C10[];
extern  VTBL_ENTRY _ZTV9S19828C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19828C10[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19828C8;
extern VTBL_ENTRY _ZTI8S19828C8[];
extern  VTBL_ENTRY _ZTV8S19828C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C8[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S19828C5;
extern VTBL_ENTRY _ZTI8S19828C5[];
extern  VTBL_ENTRY _ZTV8S19828C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C5[];
extern Class_Descriptor cd_S19828C11;
extern VTBL_ENTRY _ZTI9S19828C11[];
extern  VTBL_ENTRY _ZTV9S19828C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19828C11[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
static Base_Class bases_S19828C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(84,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_S2264C24,    ABISELECT(84,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_S19828C7,    ABISELECT(40,20), //bcp->offset
    20, //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
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19828C5,    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
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(88,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
    9, //immediately_derived
  0, 0},
  {&cd_S19828C5,    ABISELECT(88,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19828C11,    ABISELECT(88,64), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S19828C10,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C24,    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
    12, //immediately_derived
  0, 0},
  {&cd_S19828C8,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C38,    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
    15, //immediately_derived
  0, 0},
  {&cd_S19828C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19828C11,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C38,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S19828C9[];
extern void _ZN8S19828C9D1Ev();
extern void _ZN8S19828C9D0Ev();
extern void ABISELECT(_ZThn24_N8S19828C9D1Ev,_ZThn12_N8S19828C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19828C9D0Ev,_ZThn12_N8S19828C9D0Ev)();
extern void ABISELECT(_ZTv0_n56_N8S19828C9D1Ev,_ZTv0_n28_N8S19828C9D1Ev)();
extern void ABISELECT(_ZThn88_N8S19828C9D1Ev,_ZThn64_N8S19828C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19828C9D0Ev,_ZTv0_n28_N8S19828C9D0Ev)();
extern void ABISELECT(_ZThn88_N8S19828C9D0Ev,_ZThn64_N8S19828C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19828C9[] = {
  0,
  ABISELECT(88,64),
  ABISELECT(40,20),
  ABISELECT(84,60),
  ABISELECT(84,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C9[0]),
  (VTBL_ENTRY)&_ZN8S19828C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C9D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19828C9[0]),
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19828C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19828C9D1Ev,_ZThn12_N8S19828C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19828C9D0Ev,_ZThn12_N8S19828C9D0Ev),
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19828C9[0]),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI8S19828C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19828C9D1Ev,_ZTv0_n28_N8S19828C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19828C9D0Ev,_ZTv0_n28_N8S19828C9D0Ev),
};
extern VTBL_ENTRY _ZTV8S19828C9[];
extern void _ZN9S19828C10D1Ev();
extern void _ZN9S19828C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19828C10__8S19828C9[] = {
  0,
  ABISELECT(88,64),
  ABISELECT(40,20),
  ABISELECT(84,60),
  ABISELECT(84,60),
  0,
  (VTBL_ENTRY)&(_ZTI9S19828C10[0]),
  (VTBL_ENTRY)&_ZN9S19828C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19828C10D0Ev,
};
extern void _ZN8S19828C5D1Ev();
extern void _ZN8S19828C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19828C59S19828C10__8S19828C9[] = {
  ABISELECT(40,20),
  ABISELECT(84,60),
  ABISELECT(84,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
  (VTBL_ENTRY)&_ZN8S19828C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C59S19828C10__8S19828C9[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__9S19828C10__8S19828C9[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19828C10[0]),
};
extern void ABISELECT(_ZTv0_n56_N9S19828C10D1Ev,_ZTv0_n28_N9S19828C10D1Ev)();
extern void ABISELECT(_ZThn88_N9S19828C10D1Ev,_ZThn64_N9S19828C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19828C10D0Ev,_ZTv0_n28_N9S19828C10D0Ev)();
extern void ABISELECT(_ZThn88_N9S19828C10D0Ev,_ZThn64_N9S19828C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19828C11__9S19828C10__8S19828C9[] = {
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI9S19828C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19828C10D1Ev,_ZTv0_n28_N9S19828C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19828C10D0Ev,_ZTv0_n28_N9S19828C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19828C8__8S19828C9[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C8[0]),
};
extern void _ZN9S19828C11D1Ev();
extern void _ZN9S19828C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19828C11__A__8S19828C9[] = {
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19828C11[0]),
  (VTBL_ENTRY)&_ZN9S19828C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19828C11D0Ev,
};
extern void _ZN8S19828C5D1Ev();
extern void _ZN8S19828C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19828C59S19828C11__A2__8S19828C9[] = {
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
  (VTBL_ENTRY)&_ZN8S19828C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C59S19828C11__A2__8S19828C9[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__9S19828C11__A__8S19828C9[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19828C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C9[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C7[0]),
};
extern void _ZN9S19828C11D1Ev();
extern void _ZN9S19828C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19828C11__8S19828C9[] = {
  ABISELECT(-88,-64),
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S19828C11[0]),
  (VTBL_ENTRY)&_ZN9S19828C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19828C11D0Ev,
};
extern void _ZN8S19828C5D1Ev();
extern void _ZN8S19828C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19828C59S19828C11__A1__8S19828C9[] = {
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
  (VTBL_ENTRY)&_ZN8S19828C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C59S19828C11__A1__8S19828C9[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__9S19828C11__8S19828C9[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI9S19828C11[0]),
};
static  VTT_ENTRY vtt_S19828C9[] = {
  {&(_ZTV8S19828C9[7]),  7,33},
  {&(_tg__ZTV9S19828C10__8S19828C9[7]),  7,9},
  {&(_tg__ZTV8S19828C59S19828C10__8S19828C9[5]),  5,7},
  {&(_tg__ZTV8S19828C7__8S19828C59S19828C10__8S19828C9[4]),  4,4},
  {&(_tg__ZTV8S19828C7__9S19828C10__8S19828C9[4]),  4,4},
  {&(_tg__ZTV9S19828C11__9S19828C10__8S19828C9[7]),  7,9},
  {&(_tg__ZTV8S19828C8__8S19828C9[3]),  3,3},
  {&(_tg__ZTV9S19828C11__A__8S19828C9[6]),  6,8},
  {&(_tg__ZTV8S19828C59S19828C11__A2__8S19828C9[5]),  5,7},
  {&(_tg__ZTV8S19828C7__8S19828C59S19828C11__A2__8S19828C9[4]),  4,4},
  {&(_tg__ZTV8S19828C7__9S19828C11__A__8S19828C9[4]),  4,4},
  {&(_ZTV8S19828C9[24]),  24,33},
  {&(_ZTV8S19828C9[31]),  31,33},
  {&(_ZTV8S19828C9[12]),  12,33},
  {&(_ZTV8S19828C9[18]),  18,33},
  {&(_tg__ZTV8S19828C7__8S19828C9[4]),  4,4},
  {&(_tg__ZTV9S19828C11__8S19828C9[6]),  6,8},
  {&(_tg__ZTV8S19828C59S19828C11__A1__8S19828C9[5]),  5,7},
  {&(_tg__ZTV8S19828C7__8S19828C59S19828C11__A1__8S19828C9[4]),  4,4},
  {&(_tg__ZTV8S19828C7__9S19828C11__8S19828C9[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19828C9[];
extern  VTBL_ENTRY _ZTV8S19828C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C9[];
static VTBL_ENTRY alt_thunk_names199[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19828C10D0Ev,_ZTv0_n28_N9S19828C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19828C10D0Ev,_ZThn64_N9S19828C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19828C10D1Ev,_ZTv0_n28_N9S19828C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S19828C10D1Ev,_ZThn64_N9S19828C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19828C9D0Ev,_ZTv0_n28_N8S19828C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19828C9D0Ev,_ZThn64_N8S19828C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19828C9D1Ev,_ZTv0_n28_N8S19828C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S19828C9D1Ev,_ZThn64_N8S19828C9D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19828C9 = {  "S19828C9", // class name
  bases_S19828C9, 17,
  &(vtc_S19828C9[0]), // expected_vtbl_contents
  &(vtt_S19828C9[0]), // expected_vtt_contents
  ABISELECT(104,72), // object size
  NSPAIRA(_ZTI8S19828C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19828C9),33, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19828C9),20, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names199,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19828C12  : S2264C38 , virtual S2264C28 , virtual S19828C4 , virtual S19828C11 , S19828C9 {
  virtual  ~S19828C12(); // _ZN9S19828C12D2Ev
  S19828C12(); // tgen
};
//SIG(-1 S19828C12) C1{ BC2{ m} VBC3{ m} VBC4{ BC5{ VBC2 VBC6{ m} VBC7{ VBC2 VBC6 Fi[9]} vd Fp} BC6 VBC8{ BC6 VBC3} vd} VBC9{ VBC6 BC2 BC5 VBC3 vd} BC10{ BC11{ BC6 VBC7 BC5 BC2 VBC9 vd} BC8 BC9 BC2 vd} vd}


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

static void Test_S19828C12()
{
  extern Class_Descriptor cd_S19828C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,22)];
    init_test(&cd_S19828C12, buf);
    S19828C12 *dp, &lv = *(dp=new (buf) S19828C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,84), "sizeof(S19828C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19828C12)");
    /*is_ambiguous_... S19828C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), ABISELECT(41,21), "S19828C12");
    check_base_class_offset(lv, (S2264C28*), 0, "S19828C12");
    /*is_ambiguous_... S19828C12::S19828C8 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19828C8*), 0, "S19828C12");
    /*is_ambiguous_... S19828C12::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19828C11*), 0, "S19828C12");
    check_base_class_offset(lv, (S2264C28*)(S19828C8*)(S19828C9*), 0, "S19828C12");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19828C11*)(S19828C9*), 0, "S19828C12");
    check_base_class_offset(lv, (S2264C38*)(S19828C5*)(S19828C4*), ABISELECT(64,32), "S19828C12");
    check_base_class_offset(lv, (S2264C38*)(S19828C7*), ABISELECT(64,32), "S19828C12");
    /*is_ambiguous_... S19828C12::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C5*)(S19828C11*), ABISELECT(64,32), "S19828C12");
    /*is_ambiguous_... S19828C10::S19828C5 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C5*)(S19828C10*)(S19828C9*), ABISELECT(64,32), "S19828C12");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C5*)(S19828C11*)(S19828C9*), ABISELECT(64,32), "S19828C12");
    check_base_class_offset(lv, (S2264C24*)(S19828C5*)(S19828C4*), ABISELECT(64,32), "S19828C12");
    check_base_class_offset(lv, (S2264C24*)(S19828C7*), ABISELECT(64,32), "S19828C12");
    /*is_ambiguous_... S19828C12::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C11*), ABISELECT(64,32), "S19828C12");
    /*is_ambiguous_... S19828C12::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C5*)(S19828C11*), ABISELECT(64,32), "S19828C12");
    /*is_ambiguous_... S19828C10::S19828C5 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C5*)(S19828C10*)(S19828C9*), ABISELECT(64,32), "S19828C12");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C11*)(S19828C9*), ABISELECT(64,32), "S19828C12");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C5*)(S19828C11*)(S19828C9*), ABISELECT(64,32), "S19828C12");
    check_base_class_offset(lv, (S19828C7*)(S19828C5*)(S19828C4*), ABISELECT(64,32), "S19828C12");
    /*is_ambiguous_... S19828C12::S19828C11 */ AMB_check_base_class_offset(lv, (S19828C7*)(S19828C5*)(S19828C11*), ABISELECT(64,32), "S19828C12");
    check_base_class_offset(lv, (S19828C7*)(S19828C10*)(S19828C9*), ABISELECT(64,32), "S19828C12");
    /*is_ambiguous_... S19828C10::S19828C5 */ AMB_check_base_class_offset(lv, (S19828C7*)(S19828C5*)(S19828C10*)(S19828C9*), ABISELECT(64,32), "S19828C12");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S19828C7*)(S19828C5*)(S19828C11*)(S19828C9*), ABISELECT(64,32), "S19828C12");
    check_base_class_offset(lv, (S19828C5*)(S19828C4*), ABISELECT(48,24), "S19828C12");
    /*is_ambiguous_... S19828C4::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C4*), ABISELECT(48,24), "S19828C12");
    /*is_ambiguous_... S19828C12::S19828C8 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C8*), ABISELECT(112,72), "S19828C12");
    check_base_class_offset(lv, (S19828C8*)(S19828C4*), ABISELECT(112,72), "S19828C12");
    check_base_class_offset(lv, (S19828C4*), ABISELECT(48,24), "S19828C12");
    /*is_ambiguous_... S19828C12::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C11*), ABISELECT(120,76), "S19828C12");
    /*is_ambiguous_... S19828C12::S19828C11 */ AMB_check_base_class_offset(lv, (S19828C5*)(S19828C11*), ABISELECT(120,76), "S19828C12");
    /*is_ambiguous_... S19828C12::S19828C11 */ AMB_check_base_class_offset(lv, (S19828C11*), ABISELECT(120,76), "S19828C12");
    check_base_class_offset(lv, (S19828C11*)(S19828C10*)(S19828C9*), ABISELECT(120,76), "S19828C12");
    /*is_ambiguous_... S19828C10::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C10*)(S19828C9*), 0, "S19828C12");
    /*is_ambiguous_... S19828C10::S19828C5 */ AMB_check_base_class_offset(lv, (S19828C5*)(S19828C10*)(S19828C9*), 0, "S19828C12");
    /*is_ambiguous_... S19828C10::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C10*)(S19828C9*), 0, "S19828C12");
    check_base_class_offset(lv, (S19828C10*)(S19828C9*), 0, "S19828C12");
    check_base_class_offset(lv, (S2264C24*)(S19828C8*)(S19828C9*), ABISELECT(16,8), "S19828C12");
    check_base_class_offset(lv, (S19828C8*)(S19828C9*), ABISELECT(16,8), "S19828C12");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C11*)(S19828C9*), ABISELECT(24,12), "S19828C12");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S19828C5*)(S19828C11*)(S19828C9*), ABISELECT(24,12), "S19828C12");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S19828C11*)(S19828C9*), ABISELECT(24,12), "S19828C12");
    /*is_ambiguous_... S19828C9::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C9*), ABISELECT(40,20), "S19828C12");
    check_base_class_offset(lv, (S19828C9*), 0, "S19828C12");
    test_class_info(&lv, &cd_S19828C12);
    dp->~S19828C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19828C12(Test_S19828C12, "S19828C12", ABISELECT(136,84));

#else // __cplusplus

extern void _ZN9S19828C12C1Ev();
extern void _ZN9S19828C12D2Ev();
Name_Map name_map_S19828C12[] = {
  NSPAIR(_ZN9S19828C12C1Ev),
  NSPAIR(_ZN9S19828C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19828C7;
extern VTBL_ENTRY _ZTI8S19828C7[];
extern  VTBL_ENTRY _ZTV8S19828C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C7[];
extern Class_Descriptor cd_S19828C5;
extern VTBL_ENTRY _ZTI8S19828C5[];
extern  VTBL_ENTRY _ZTV8S19828C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C5[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19828C8;
extern VTBL_ENTRY _ZTI8S19828C8[];
extern  VTBL_ENTRY _ZTV8S19828C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C8[];
extern Class_Descriptor cd_S19828C4;
extern VTBL_ENTRY _ZTI8S19828C4[];
extern  VTBL_ENTRY _ZTV8S19828C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C4[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S19828C5;
extern VTBL_ENTRY _ZTI8S19828C5[];
extern  VTBL_ENTRY _ZTV8S19828C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C5[];
extern Class_Descriptor cd_S19828C11;
extern VTBL_ENTRY _ZTI9S19828C11[];
extern  VTBL_ENTRY _ZTV9S19828C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19828C11[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19828C5;
extern VTBL_ENTRY _ZTI8S19828C5[];
extern  VTBL_ENTRY _ZTV8S19828C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S19828C10;
extern VTBL_ENTRY _ZTI9S19828C10[];
extern  VTBL_ENTRY _ZTV9S19828C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19828C10[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19828C8;
extern VTBL_ENTRY _ZTI8S19828C8[];
extern  VTBL_ENTRY _ZTV8S19828C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C8[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S19828C5;
extern VTBL_ENTRY _ZTI8S19828C5[];
extern  VTBL_ENTRY _ZTV8S19828C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C5[];
extern Class_Descriptor cd_S19828C11;
extern VTBL_ENTRY _ZTI9S19828C11[];
extern  VTBL_ENTRY _ZTV9S19828C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19828C11[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S19828C9;
extern VTBL_ENTRY _ZTI8S19828C9[];
extern  VTBL_ENTRY _ZTV8S19828C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C9[];
static Base_Class bases_S19828C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    ABISELECT(41,21), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C38,    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, 1},
  {&cd_S2264C24,    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, 1},
  {&cd_S19828C7,    ABISELECT(64,32), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S19828C5,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2264C24,    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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C24,    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
    8, //immediately_derived
  0, 0},
  {&cd_S19828C8,    ABISELECT(112,72), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19828C4,    ABISELECT(48,24), //bcp->offset
    22, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C38,    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
    12, //immediately_derived
  0, 0},
  {&cd_S19828C5,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    12, //immediately_derived
  0, 0},
  {&cd_S19828C11,    ABISELECT(120,76), //bcp->offset
    39, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19828C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19828C10,    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
    23, //immediately_derived
  0, 0},
  {&cd_S2264C24,    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
    18, //immediately_derived
  0, 0},
  {&cd_S19828C8,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    21, //immediately_derived
  0, 0},
  {&cd_S19828C5,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19828C11,    ABISELECT(24,12), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    23, //immediately_derived
  0, 0},
  {&cd_S19828C9,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI9S19828C12[];
extern void _ZN9S19828C12D1Ev();
extern void _ZN9S19828C12D0Ev();
extern void ABISELECT(_ZThn24_N9S19828C12D1Ev,_ZThn12_N9S19828C12D1Ev)();
extern void ABISELECT(_ZThn24_N9S19828C12D0Ev,_ZThn12_N9S19828C12D0Ev)();
extern void ABISELECT(_ZTv0_n64_N9S19828C12D1Ev,_ZTv0_n32_N9S19828C12D1Ev)();
extern void ABISELECT(_ZThn48_N9S19828C12D1Ev,_ZThn24_N9S19828C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19828C12D0Ev,_ZTv0_n32_N9S19828C12D0Ev)();
extern void ABISELECT(_ZThn48_N9S19828C12D0Ev,_ZThn24_N9S19828C12D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19828C12D1Ev,_ZTv0_n28_N9S19828C12D1Ev)();
extern void ABISELECT(_ZThn120_N9S19828C12D1Ev,_ZThn76_N9S19828C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19828C12D0Ev,_ZTv0_n28_N9S19828C12D0Ev)();
extern void ABISELECT(_ZThn120_N9S19828C12D0Ev,_ZThn76_N9S19828C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19828C12[] = {
  ABISELECT(112,72),
  ABISELECT(48,24),
  0,
  ABISELECT(120,76),
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S19828C12[0]),
  (VTBL_ENTRY)&_ZN9S19828C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19828C12D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19828C12[0]),
  ABISELECT(-24,-12),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19828C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N9S19828C12D1Ev,_ZThn12_N9S19828C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N9S19828C12D0Ev,_ZThn12_N9S19828C12D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19828C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19828C12D1Ev,_ZTv0_n32_N9S19828C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19828C12D0Ev,_ZTv0_n32_N9S19828C12D0Ev),
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S19828C12[0]),
  ABISELECT(-112,-72),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI9S19828C12[0]),
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI9S19828C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19828C12D1Ev,_ZTv0_n28_N9S19828C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19828C12D0Ev,_ZTv0_n28_N9S19828C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S19828C12[];
extern void _ZN8S19828C9D1Ev();
extern void _ZN8S19828C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19828C9__9S19828C12[] = {
  0,
  ABISELECT(120,76),
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C9[0]),
  (VTBL_ENTRY)&_ZN8S19828C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C9D0Ev,
};
extern void _ZN9S19828C10D1Ev();
extern void _ZN9S19828C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19828C108S19828C9__9S19828C12[] = {
  0,
  ABISELECT(120,76),
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S19828C10[0]),
  (VTBL_ENTRY)&_ZN9S19828C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19828C10D0Ev,
};
extern void _ZN8S19828C5D1Ev();
extern void _ZN8S19828C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19828C59S19828C108S19828C9__A2__9S19828C12[] = {
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
  (VTBL_ENTRY)&_ZN8S19828C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C59S19828C108S19828C9__A2__9S19828C12[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__9S19828C108S19828C9__9S19828C12[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S19828C10[0]),
};
extern void ABISELECT(_ZTv0_n56_N9S19828C10D1Ev,_ZTv0_n28_N9S19828C10D1Ev)();
extern void ABISELECT(_ZThn120_N9S19828C10D1Ev,_ZThn76_N9S19828C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19828C10D0Ev,_ZTv0_n28_N9S19828C10D0Ev)();
extern void ABISELECT(_ZThn120_N9S19828C10D0Ev,_ZThn76_N9S19828C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19828C11__9S19828C108S19828C9__9S19828C12[] = {
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI9S19828C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19828C10D1Ev,_ZTv0_n28_N9S19828C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19828C10D0Ev,_ZTv0_n28_N9S19828C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19828C88S19828C9__A1__9S19828C12[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C8[0]),
};
extern void _ZN9S19828C11D1Ev();
extern void _ZN9S19828C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19828C118S19828C9__A1__9S19828C12[] = {
  ABISELECT(-24,-12),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19828C11[0]),
  (VTBL_ENTRY)&_ZN9S19828C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19828C11D0Ev,
};
extern void _ZN8S19828C5D1Ev();
extern void _ZN8S19828C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19828C59S19828C118S19828C9__A3__9S19828C12[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
  (VTBL_ENTRY)&_ZN8S19828C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C59S19828C118S19828C9__A3__9S19828C12[] = {
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__9S19828C118S19828C9__A1__9S19828C12[] = {
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S19828C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C9__9S19828C12[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19828C9[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S19828C9D1Ev,_ZTv0_n28_N8S19828C9D1Ev)();
extern void ABISELECT(_ZThn120_N8S19828C9D1Ev,_ZThn76_N8S19828C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19828C9D0Ev,_ZTv0_n28_N8S19828C9D0Ev)();
extern void ABISELECT(_ZThn120_N8S19828C9D0Ev,_ZThn76_N8S19828C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19828C11__8S19828C9__9S19828C12[] = {
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S19828C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19828C9D1Ev,_ZTv0_n28_N8S19828C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19828C9D0Ev,_ZTv0_n28_N8S19828C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19828C8__8S19828C9__9S19828C12[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19828C9[0]),
};
extern void ABISELECT(_ZThn24_N8S19828C9D1Ev,_ZThn12_N8S19828C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19828C9D0Ev,_ZThn12_N8S19828C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19828C11__A__8S19828C9__9S19828C12[] = {
  ABISELECT(-24,-12),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19828C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19828C9D1Ev,_ZThn12_N8S19828C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19828C9D0Ev,_ZThn12_N8S19828C9D0Ev),
};
extern void _ZN8S19828C4D1Ev();
extern void _ZN8S19828C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19828C4__9S19828C12[] = {
  ABISELECT(-48,-24),
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C4[0]),
  (VTBL_ENTRY)&_ZN8S19828C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C4D0Ev,
};
extern void _ZN8S19828C5D1Ev();
extern void _ZN8S19828C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19828C58S19828C4__9S19828C12[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
  (VTBL_ENTRY)&_ZN8S19828C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C58S19828C4__9S19828C12[] = {
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C4__9S19828C12[] = {
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19828C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C8__8S19828C4__9S19828C12[] = {
  ABISELECT(-112,-72),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI8S19828C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__9S19828C12[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C8__9S19828C12[] = {
  ABISELECT(-112,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C8[0]),
};
extern void _ZN9S19828C11D1Ev();
extern void _ZN9S19828C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19828C11__9S19828C12[] = {
  ABISELECT(-120,-76),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S19828C11[0]),
  (VTBL_ENTRY)&_ZN9S19828C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19828C11D0Ev,
};
extern void _ZN8S19828C5D1Ev();
extern void _ZN8S19828C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19828C59S19828C11__A1__9S19828C12[] = {
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
  (VTBL_ENTRY)&_ZN8S19828C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C59S19828C11__A1__9S19828C12[] = {
  0,
  0,
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__9S19828C11__9S19828C12[] = {
  0,
  0,
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI9S19828C11[0]),
};
static  VTT_ENTRY vtt_S19828C12[] = {
  {&(_ZTV9S19828C12[9]),  9,48},
  {&(_tg__ZTV8S19828C9__9S19828C12[7]),  7,9},
  {&(_tg__ZTV9S19828C108S19828C9__9S19828C12[7]),  7,9},
  {&(_tg__ZTV8S19828C59S19828C108S19828C9__A2__9S19828C12[5]),  5,7},
  {&(_tg__ZTV8S19828C7__8S19828C59S19828C108S19828C9__A2__9S19828C12[4]),  4,4},
  {&(_tg__ZTV8S19828C7__9S19828C108S19828C9__9S19828C12[4]),  4,4},
  {&(_tg__ZTV9S19828C11__9S19828C108S19828C9__9S19828C12[7]),  7,9},
  {&(_tg__ZTV8S19828C88S19828C9__A1__9S19828C12[3]),  3,3},
  {&(_tg__ZTV9S19828C118S19828C9__A1__9S19828C12[6]),  6,8},
  {&(_tg__ZTV8S19828C59S19828C118S19828C9__A3__9S19828C12[5]),  5,7},
  {&(_tg__ZTV8S19828C7__8S19828C59S19828C118S19828C9__A3__9S19828C12[4]),  4,4},
  {&(_tg__ZTV8S19828C7__9S19828C118S19828C9__A1__9S19828C12[4]),  4,4},
  {&(_tg__ZTV8S19828C7__8S19828C9__9S19828C12[4]),  4,4},
  {&(_tg__ZTV9S19828C11__8S19828C9__9S19828C12[7]),  7,9},
  {&(_tg__ZTV8S19828C8__8S19828C9__9S19828C12[3]),  3,3},
  {&(_tg__ZTV9S19828C11__A__8S19828C9__9S19828C12[6]),  6,8},
  {&(_ZTV9S19828C12[30]),  30,48},
  {&(_ZTV9S19828C12[36]),  36,48},
  {&(_ZTV9S19828C12[39]),  39,48},
  {&(_ZTV9S19828C12[46]),  46,48},
  {&(_ZTV9S19828C12[14]),  14,48},
  {&(_ZTV9S19828C12[20]),  20,48},
  {&(_tg__ZTV8S19828C4__9S19828C12[7]),  7,9},
  {&(_tg__ZTV8S19828C58S19828C4__9S19828C12[5]),  5,7},
  {&(_tg__ZTV8S19828C7__8S19828C58S19828C4__9S19828C12[4]),  4,4},
  {&(_tg__ZTV8S19828C7__8S19828C4__9S19828C12[4]),  4,4},
  {&(_tg__ZTV8S19828C8__8S19828C4__9S19828C12[3]),  3,3},
  {&(_tg__ZTV8S19828C7__9S19828C12[4]),  4,4},
  {&(_tg__ZTV8S19828C8__9S19828C12[3]),  3,3},
  {&(_tg__ZTV9S19828C11__9S19828C12[6]),  6,8},
  {&(_tg__ZTV8S19828C59S19828C11__A1__9S19828C12[5]),  5,7},
  {&(_tg__ZTV8S19828C7__8S19828C59S19828C11__A1__9S19828C12[4]),  4,4},
  {&(_tg__ZTV8S19828C7__9S19828C11__9S19828C12[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19828C12[];
extern  VTBL_ENTRY _ZTV9S19828C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19828C12[];
static VTBL_ENTRY alt_thunk_names200[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19828C9D0Ev,_ZTv0_n28_N8S19828C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19828C9D0Ev,_ZThn76_N8S19828C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19828C9D1Ev,_ZTv0_n28_N8S19828C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19828C9D1Ev,_ZThn76_N8S19828C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19828C10D0Ev,_ZTv0_n28_N9S19828C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19828C10D0Ev,_ZThn76_N9S19828C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19828C10D1Ev,_ZTv0_n28_N9S19828C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19828C10D1Ev,_ZThn76_N9S19828C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19828C12D0Ev,_ZTv0_n28_N9S19828C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19828C12D0Ev,_ZThn76_N9S19828C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19828C12D1Ev,_ZTv0_n28_N9S19828C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19828C12D1Ev,_ZThn76_N9S19828C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19828C12D0Ev,_ZTv0_n32_N9S19828C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19828C12D0Ev,_ZThn24_N9S19828C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19828C12D1Ev,_ZTv0_n32_N9S19828C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19828C12D1Ev,_ZThn24_N9S19828C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19828C12 = {  "S19828C12", // class name
  bases_S19828C12, 24,
  &(vtc_S19828C12[0]), // expected_vtbl_contents
  &(vtt_S19828C12[0]), // expected_vtt_contents
  ABISELECT(136,84), // object size
  NSPAIRA(_ZTI9S19828C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S19828C12),48, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19828C12),33, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names200,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19828C1  : virtual S2264C38 , S2264C28 , S19828C4 , S19828C9 , virtual S19828C12 {
  virtual  ~S19828C1(); // _ZN8S19828C1D2Ev
  S19828C1(); // tgen
};
//SIG(1 S19828C1) C1{ VBC2{ m} BC3{ m} BC4{ BC5{ VBC2 VBC6{ m} VBC7{ VBC2 VBC6 Fi[9]} vd Fp} BC6 VBC8{ BC6 VBC3} vd} BC9{ BC10{ BC6 VBC7 BC5 BC2 VBC11{ VBC6 BC2 BC5 VBC3 vd} vd} BC8 BC11 BC2 vd} VBC12{ BC2 VBC3 VBC4 VBC11 BC9 vd} vd}


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

static void Test_S19828C1()
{
  extern Class_Descriptor cd_S19828C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,30)];
    init_test(&cd_S19828C1, buf);
    S19828C1 *dp, &lv = *(dp=new (buf) S19828C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,116), "sizeof(S19828C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19828C1)");
    /*is_ambiguous_... S19828C1::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), 0, "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C5*)(S19828C4*), 0, "S19828C1");
    check_base_class_offset(lv, (S2264C38*)(S19828C7*), 0, "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C9 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C5*)(S19828C10*)(S19828C9*), 0, "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C5*)(S19828C11*), 0, "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C9 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C5*)(S19828C11*)(S19828C9*), 0, "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C4 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C5*)(S19828C4*), 0, "S19828C1");
    /*is_ambiguous_... S19828C10::S19828C5 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C5*)(S19828C10*)(S19828C9*)(S19828C12*), 0, "S19828C1");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C5*)(S19828C11*)(S19828C9*)(S19828C12*), 0, "S19828C1");
    /*is_ambiguous_... S19828C1::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), 0, "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C4 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C5*)(S19828C4*), ABISELECT(57,29), "S19828C1");
    check_base_class_offset(lv, (S2264C24*)(S19828C7*), ABISELECT(57,29), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C9 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C5*)(S19828C10*)(S19828C9*), ABISELECT(57,29), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C11*), ABISELECT(57,29), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C5*)(S19828C11*), ABISELECT(57,29), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C9 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C11*)(S19828C9*), ABISELECT(57,29), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C9 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C5*)(S19828C11*)(S19828C9*), ABISELECT(57,29), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C4 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C5*)(S19828C4*), ABISELECT(57,29), "S19828C1");
    /*is_ambiguous_... S19828C10::S19828C5 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C5*)(S19828C10*)(S19828C9*)(S19828C12*), ABISELECT(57,29), "S19828C1");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C11*)(S19828C9*)(S19828C12*), ABISELECT(57,29), "S19828C1");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C5*)(S19828C11*)(S19828C9*)(S19828C12*), ABISELECT(57,29), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C4 */ AMB_check_base_class_offset(lv, (S19828C7*)(S19828C5*)(S19828C4*), ABISELECT(64,32), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C9 */ AMB_check_base_class_offset(lv, (S19828C7*)(S19828C10*)(S19828C9*), ABISELECT(64,32), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C9 */ AMB_check_base_class_offset(lv, (S19828C7*)(S19828C5*)(S19828C10*)(S19828C9*), ABISELECT(64,32), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C11 */ AMB_check_base_class_offset(lv, (S19828C7*)(S19828C5*)(S19828C11*), ABISELECT(64,32), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C9 */ AMB_check_base_class_offset(lv, (S19828C7*)(S19828C5*)(S19828C11*)(S19828C9*), ABISELECT(64,32), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C4 */ AMB_check_base_class_offset(lv, (S19828C7*)(S19828C5*)(S19828C4*), ABISELECT(64,32), "S19828C1");
    check_base_class_offset(lv, (S19828C7*)(S19828C10*)(S19828C9*)(S19828C12*), ABISELECT(64,32), "S19828C1");
    /*is_ambiguous_... S19828C10::S19828C5 */ AMB_check_base_class_offset(lv, (S19828C7*)(S19828C5*)(S19828C10*)(S19828C9*)(S19828C12*), ABISELECT(64,32), "S19828C1");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S19828C7*)(S19828C5*)(S19828C11*)(S19828C9*)(S19828C12*), ABISELECT(64,32), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C4 */ AMB_check_base_class_offset(lv, (S19828C5*)(S19828C4*), 0, "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C4 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C4*), 0, "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C8 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C8*), ABISELECT(112,72), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C8 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19828C8*), ABISELECT(120,76), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19828C11*), ABISELECT(120,76), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C9 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19828C8*)(S19828C9*), ABISELECT(120,76), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C9 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19828C11*)(S19828C9*), ABISELECT(120,76), "S19828C1");
    check_base_class_offset(lv, (S2264C28*)(S19828C12*), ABISELECT(120,76), "S19828C1");
    check_base_class_offset(lv, (S2264C28*)(S19828C8*)(S19828C9*)(S19828C12*), ABISELECT(120,76), "S19828C1");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19828C11*)(S19828C9*)(S19828C12*), ABISELECT(120,76), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C4 */ AMB_check_base_class_offset(lv, (S19828C8*)(S19828C4*), ABISELECT(112,72), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C4 */ AMB_check_base_class_offset(lv, (S19828C8*)(S19828C4*), ABISELECT(112,72), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C4 */ AMB_check_base_class_offset(lv, (S19828C4*), 0, "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C9 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C10*)(S19828C9*), ABISELECT(16,8), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C9 */ AMB_check_base_class_offset(lv, (S19828C5*)(S19828C10*)(S19828C9*), ABISELECT(16,8), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C9 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C10*)(S19828C9*), ABISELECT(16,8), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C11*), ABISELECT(120,76), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C11 */ AMB_check_base_class_offset(lv, (S19828C5*)(S19828C11*), ABISELECT(120,76), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C9 */ AMB_check_base_class_offset(lv, (S19828C11*)(S19828C10*)(S19828C9*), ABISELECT(120,76), "S19828C1");
    /*is_ambiguous_... S19828C12::S19828C11 */ AMB_check_base_class_offset(lv, (S19828C11*)(S19828C12*), ABISELECT(120,76), "S19828C1");
    check_base_class_offset(lv, (S19828C11*)(S19828C10*)(S19828C9*)(S19828C12*), ABISELECT(120,76), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C9 */ AMB_check_base_class_offset(lv, (S19828C10*)(S19828C9*), ABISELECT(16,8), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C9 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C8*)(S19828C9*), ABISELECT(32,16), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C9 */ AMB_check_base_class_offset(lv, (S19828C8*)(S19828C9*), ABISELECT(32,16), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C9 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C11*)(S19828C9*), ABISELECT(40,20), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C9 */ AMB_check_base_class_offset(lv, (S19828C5*)(S19828C11*)(S19828C9*), ABISELECT(40,20), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C9 */ AMB_check_base_class_offset(lv, (S19828C11*)(S19828C9*), ABISELECT(40,20), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C9 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C9*), ABISELECT(56,28), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C9 */ AMB_check_base_class_offset(lv, (S19828C9*), ABISELECT(16,8), "S19828C1");
    /*is_ambiguous_... S19828C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C12*), ABISELECT(177,105), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C4 */ AMB_check_base_class_offset(lv, (S19828C5*)(S19828C4*), ABISELECT(184,108), "S19828C1");
    /*is_ambiguous_... S19828C1::S19828C4 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C4*), ABISELECT(184,108), "S19828C1");
    check_base_class_offset(lv, (S19828C4*)(S19828C12*), ABISELECT(184,108), "S19828C1");
    /*is_ambiguous_... S19828C10::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S19828C10*)(S19828C9*)(S19828C12*), ABISELECT(136,84), "S19828C1");
    /*is_ambiguous_... S19828C10::S19828C5 */ AMB_check_base_class_offset(lv, (S19828C5*)(S19828C10*)(S19828C9*)(S19828C12*), ABISELECT(136,84), "S19828C1");
    /*is_ambiguous_... S19828C10::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C10*)(S19828C9*)(S19828C12*), ABISELECT(136,84), "S19828C1");
    check_base_class_offset(lv, (S19828C10*)(S19828C9*)(S19828C12*), ABISELECT(136,84), "S19828C1");
    check_base_class_offset(lv, (S2264C24*)(S19828C8*)(S19828C9*)(S19828C12*), ABISELECT(152,92), "S19828C1");
    check_base_class_offset(lv, (S19828C8*)(S19828C9*)(S19828C12*), ABISELECT(152,92), "S19828C1");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C11*)(S19828C9*)(S19828C12*), ABISELECT(160,96), "S19828C1");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S19828C5*)(S19828C11*)(S19828C9*)(S19828C12*), ABISELECT(160,96), "S19828C1");
    /*is_ambiguous_... S19828C9::S19828C11 */ AMB_check_base_class_offset(lv, (S19828C11*)(S19828C9*)(S19828C12*), ABISELECT(160,96), "S19828C1");
    /*is_ambiguous_... S19828C9::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S19828C9*)(S19828C12*), ABISELECT(176,104), "S19828C1");
    check_base_class_offset(lv, (S19828C9*)(S19828C12*), ABISELECT(136,84), "S19828C1");
    check_base_class_offset(lv, (S19828C12*), ABISELECT(136,84), "S19828C1");
    test_class_info(&lv, &cd_S19828C1);
    dp->~S19828C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19828C1(Test_S19828C1, "S19828C1", ABISELECT(200,116));

#else // __cplusplus

extern void _ZN8S19828C1C1Ev();
extern void _ZN8S19828C1D2Ev();
Name_Map name_map_S19828C1[] = {
  NSPAIR(_ZN8S19828C1C1Ev),
  NSPAIR(_ZN8S19828C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19828C7;
extern VTBL_ENTRY _ZTI8S19828C7[];
extern  VTBL_ENTRY _ZTV8S19828C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C7[];
extern Class_Descriptor cd_S19828C5;
extern VTBL_ENTRY _ZTI8S19828C5[];
extern  VTBL_ENTRY _ZTV8S19828C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C5[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19828C8;
extern VTBL_ENTRY _ZTI8S19828C8[];
extern  VTBL_ENTRY _ZTV8S19828C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C8[];
extern Class_Descriptor cd_S19828C4;
extern VTBL_ENTRY _ZTI8S19828C4[];
extern  VTBL_ENTRY _ZTV8S19828C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C4[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19828C5;
extern VTBL_ENTRY _ZTI8S19828C5[];
extern  VTBL_ENTRY _ZTV8S19828C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S19828C5;
extern VTBL_ENTRY _ZTI8S19828C5[];
extern  VTBL_ENTRY _ZTV8S19828C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C5[];
extern Class_Descriptor cd_S19828C11;
extern VTBL_ENTRY _ZTI9S19828C11[];
extern  VTBL_ENTRY _ZTV9S19828C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19828C11[];
extern Class_Descriptor cd_S19828C10;
extern VTBL_ENTRY _ZTI9S19828C10[];
extern  VTBL_ENTRY _ZTV9S19828C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19828C10[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19828C8;
extern VTBL_ENTRY _ZTI8S19828C8[];
extern  VTBL_ENTRY _ZTV8S19828C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C8[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S19828C5;
extern VTBL_ENTRY _ZTI8S19828C5[];
extern  VTBL_ENTRY _ZTV8S19828C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C5[];
extern Class_Descriptor cd_S19828C11;
extern VTBL_ENTRY _ZTI9S19828C11[];
extern  VTBL_ENTRY _ZTV9S19828C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19828C11[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S19828C9;
extern VTBL_ENTRY _ZTI8S19828C9[];
extern  VTBL_ENTRY _ZTV8S19828C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C9[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S19828C5;
extern VTBL_ENTRY _ZTI8S19828C5[];
extern  VTBL_ENTRY _ZTV8S19828C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C5[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19828C4;
extern VTBL_ENTRY _ZTI8S19828C4[];
extern  VTBL_ENTRY _ZTV8S19828C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C4[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19828C5;
extern VTBL_ENTRY _ZTI8S19828C5[];
extern  VTBL_ENTRY _ZTV8S19828C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S19828C10;
extern VTBL_ENTRY _ZTI9S19828C10[];
extern  VTBL_ENTRY _ZTV9S19828C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19828C10[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19828C8;
extern VTBL_ENTRY _ZTI8S19828C8[];
extern  VTBL_ENTRY _ZTV8S19828C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C8[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S19828C5;
extern VTBL_ENTRY _ZTI8S19828C5[];
extern  VTBL_ENTRY _ZTV8S19828C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C5[];
extern Class_Descriptor cd_S19828C11;
extern VTBL_ENTRY _ZTI9S19828C11[];
extern  VTBL_ENTRY _ZTV9S19828C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19828C11[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S19828C9;
extern VTBL_ENTRY _ZTI8S19828C9[];
extern  VTBL_ENTRY _ZTV8S19828C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C9[];
extern Class_Descriptor cd_S19828C12;
extern VTBL_ENTRY _ZTI9S19828C12[];
extern  VTBL_ENTRY _ZTV9S19828C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19828C12[];
static Base_Class bases_S19828C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C24,    ABISELECT(57,29), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19828C7,    ABISELECT(64,32), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19828C5,    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
    14, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C24,    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
    8, //immediately_derived
  0, 0},
  {&cd_S2264C28,    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_S19828C8,    ABISELECT(112,72), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    23, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S19828C4,    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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C24,    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
    16, //immediately_derived
  0, 0},
  {&cd_S19828C5,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    16, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    16, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    15, //immediately_derived
  0, 0},
  {&cd_S19828C5,    ABISELECT(120,76), //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
    3, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S19828C11,    ABISELECT(120,76), //bcp->offset
    39, //bcp->virtual_function_table_offset
    7, //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
    16, //immediately_derived
  0, 1},
  {&cd_S19828C10,    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
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    17, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2264C24,    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
    18, //immediately_derived
  0, 0},
  {&cd_S19828C8,    ABISELECT(32,16), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    18, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    21, //immediately_derived
  0, 0},
  {&cd_S19828C5,    ABISELECT(40,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    19, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19828C11,    ABISELECT(40,20), //bcp->offset
    24, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    20, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    23, //immediately_derived
  0, 0},
  {&cd_S19828C9,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    21, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C38,    ABISELECT(177,105), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S19828C5,    ABISELECT(184,108), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    61, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    27, //immediately_derived
  0, 0},
  {&cd_S2264C24,    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
    27, //immediately_derived
  0, 0},
  {&cd_S19828C4,    ABISELECT(184,108), //bcp->offset
    71, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    60, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    39, //immediately_derived
  0, 1},
  {&cd_S2264C24,    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
    31, //immediately_derived
  0, 0},
  {&cd_S19828C5,    ABISELECT(136,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    41, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    31, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    31, //immediately_derived
  0, 0},
  {&cd_S19828C10,    ABISELECT(136,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    40, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S2264C24,    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
    33, //immediately_derived
  0, 0},
  {&cd_S19828C8,    ABISELECT(152,92), //bcp->offset
    60, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    45, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    36, //immediately_derived
  0, 0},
  {&cd_S19828C5,    ABISELECT(160,96), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    47, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    36, //immediately_derived
  0, 0},
  {&cd_S19828C11,    ABISELECT(160,96), //bcp->offset
    63, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    31, //bcp->index_in_construction_vtbl_array
    46, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    38, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    38, //immediately_derived
  0, 0},
  {&cd_S19828C9,    ABISELECT(136,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    39, //immediately_derived
  0, 0},
  {&cd_S19828C12,    ABISELECT(136,84), //bcp->offset
    48, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19828C1[];
extern void _ZN8S19828C1D1Ev();
extern void _ZN8S19828C1D0Ev();
extern void ABISELECT(_ZThn16_N8S19828C1D1Ev,_ZThn8_N8S19828C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19828C1D0Ev,_ZThn8_N8S19828C1D0Ev)();
extern void ABISELECT(_ZThn40_N8S19828C1D1Ev,_ZThn20_N8S19828C1D1Ev)();
extern void ABISELECT(_ZThn40_N8S19828C1D0Ev,_ZThn20_N8S19828C1D0Ev)();
extern void ABISELECT(_ZTv0_n56_N8S19828C1D1Ev,_ZTv0_n28_N8S19828C1D1Ev)();
extern void ABISELECT(_ZThn120_N8S19828C1D1Ev,_ZThn76_N8S19828C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19828C1D0Ev,_ZTv0_n28_N8S19828C1D0Ev)();
extern void ABISELECT(_ZThn120_N8S19828C1D0Ev,_ZThn76_N8S19828C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19828C1D1Ev,_ZTv0_n40_N8S19828C1D1Ev)();
extern void ABISELECT(_ZThn136_N8S19828C1D1Ev,_ZThn84_N8S19828C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19828C1D0Ev,_ZTv0_n40_N8S19828C1D0Ev)();
extern void ABISELECT(_ZThn136_N8S19828C1D0Ev,_ZThn84_N8S19828C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn24_n80_N8S19828C1D1Ev,_ZTvn12_n40_N8S19828C1D1Ev)();
extern void ABISELECT(_ZTvn24_n80_N8S19828C1D0Ev,_ZTvn12_n40_N8S19828C1D0Ev)();
extern void ABISELECT(_ZTv0_n64_N8S19828C1D1Ev,_ZTv0_n32_N8S19828C1D1Ev)();
extern void ABISELECT(_ZThn184_N8S19828C1D1Ev,_ZThn108_N8S19828C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S19828C1D0Ev,_ZTv0_n32_N8S19828C1D0Ev)();
extern void ABISELECT(_ZThn184_N8S19828C1D0Ev,_ZThn108_N8S19828C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19828C1[] = {
  ABISELECT(184,108),
  ABISELECT(136,84),
  ABISELECT(120,76),
  ABISELECT(120,76),
  ABISELECT(112,72),
  ABISELECT(64,32),
  ABISELECT(57,29),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C1[0]),
  (VTBL_ENTRY)&_ZN8S19828C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C1D0Ev,
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(48,24),
  ABISELECT(41,21),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19828C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19828C1D1Ev,_ZThn8_N8S19828C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn16_N8S19828C1D0Ev,_ZThn8_N8S19828C1D0Ev),
  ABISELECT(88,60),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S19828C1[0]),
  ABISELECT(80,56),
  ABISELECT(24,12),
  ABISELECT(17,9),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19828C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S19828C1D1Ev,_ZThn20_N8S19828C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn40_N8S19828C1D0Ev,_ZThn20_N8S19828C1D0Ev),
  ABISELECT(-7,-3),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19828C1[0]),
  ABISELECT(8,4),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S19828C1[0]),
  ABISELECT(-120,-76),
  0,
  ABISELECT(-56,-44),
  ABISELECT(-63,-47),
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S19828C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19828C1D1Ev,_ZTv0_n28_N8S19828C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19828C1D0Ev,_ZTv0_n28_N8S19828C1D0Ev),
  ABISELECT(-136,-84),
  ABISELECT(-24,-12),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-72,-52),
  ABISELECT(-79,-55),
  ABISELECT(-136,-84),
  ABISELECT(-136,-84),
  (VTBL_ENTRY)&(_ZTI8S19828C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19828C1D1Ev,_ZTv0_n40_N8S19828C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19828C1D0Ev,_ZTv0_n40_N8S19828C1D0Ev),
  ABISELECT(-32,-16),
  ABISELECT(-152,-92),
  (VTBL_ENTRY)&(_ZTI8S19828C1[0]),
  ABISELECT(-40,-20),
  ABISELECT(-96,-64),
  ABISELECT(-103,-67),
  ABISELECT(-160,-96),
  ABISELECT(-160,-96),
  (VTBL_ENTRY)&(_ZTI8S19828C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n80_N8S19828C1D1Ev,_ZTvn12_n40_N8S19828C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n80_N8S19828C1D0Ev,_ZTvn12_n40_N8S19828C1D0Ev),
  ABISELECT(-184,-108),
  ABISELECT(-64,-32),
  ABISELECT(-72,-36),
  ABISELECT(-120,-76),
  ABISELECT(-127,-79),
  ABISELECT(-184,-108),
  ABISELECT(-184,-108),
  (VTBL_ENTRY)&(_ZTI8S19828C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19828C1D1Ev,_ZTv0_n32_N8S19828C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S19828C1D0Ev,_ZTv0_n32_N8S19828C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19828C1[];
extern void _ZN8S19828C4D1Ev();
extern void _ZN8S19828C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19828C4__A__8S19828C1[] = {
  ABISELECT(120,76),
  ABISELECT(112,72),
  ABISELECT(64,32),
  ABISELECT(57,29),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C4[0]),
  (VTBL_ENTRY)&_ZN8S19828C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C4D0Ev,
};
extern void _ZN8S19828C5D1Ev();
extern void _ZN8S19828C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19828C58S19828C4__8S19828C1[] = {
  ABISELECT(64,32),
  ABISELECT(57,29),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
  (VTBL_ENTRY)&_ZN8S19828C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C58S19828C4__8S19828C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C4__A__8S19828C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-64,-32),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S19828C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C8__8S19828C4__A__8S19828C1[] = {
  ABISELECT(8,4),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S19828C4[0]),
};
extern void _ZN8S19828C9D1Ev();
extern void _ZN8S19828C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19828C9__8S19828C1[] = {
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(48,24),
  ABISELECT(41,21),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C9[0]),
  (VTBL_ENTRY)&_ZN8S19828C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C9D0Ev,
};
extern void _ZN9S19828C10D1Ev();
extern void _ZN9S19828C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19828C108S19828C9__8S19828C1[] = {
  ABISELECT(104,68),
  ABISELECT(104,68),
  ABISELECT(48,24),
  ABISELECT(41,21),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI9S19828C10[0]),
  (VTBL_ENTRY)&_ZN9S19828C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19828C10D0Ev,
};
extern void _ZN8S19828C5D1Ev();
extern void _ZN8S19828C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19828C59S19828C108S19828C9__A1__8S19828C1[] = {
  ABISELECT(48,24),
  ABISELECT(41,21),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
  (VTBL_ENTRY)&_ZN8S19828C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C59S19828C108S19828C9__A1__8S19828C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-64,-32),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__9S19828C108S19828C9__8S19828C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-64,-32),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19828C10[0]),
};
extern void ABISELECT(_ZTv0_n56_N9S19828C10D1Ev,_ZTv0_n28_N9S19828C10D1Ev)();
extern void ABISELECT(_ZThn104_N9S19828C10D1Ev,_ZThn68_N9S19828C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S19828C10D0Ev,_ZTv0_n28_N9S19828C10D0Ev)();
extern void ABISELECT(_ZThn104_N9S19828C10D0Ev,_ZThn68_N9S19828C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19828C11__9S19828C108S19828C9__8S19828C1[] = {
  ABISELECT(-104,-68),
  0,
  ABISELECT(-56,-44),
  ABISELECT(-63,-47),
  ABISELECT(-120,-76),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI9S19828C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19828C10D1Ev,_ZTv0_n28_N9S19828C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19828C10D0Ev,_ZTv0_n28_N9S19828C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19828C88S19828C9__A1__8S19828C1[] = {
  ABISELECT(88,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C8[0]),
};
extern void _ZN9S19828C11D1Ev();
extern void _ZN9S19828C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19828C118S19828C9__A1__8S19828C1[] = {
  ABISELECT(80,56),
  ABISELECT(24,12),
  ABISELECT(17,9),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19828C11[0]),
  (VTBL_ENTRY)&_ZN9S19828C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19828C11D0Ev,
};
extern void _ZN8S19828C5D1Ev();
extern void _ZN8S19828C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19828C59S19828C118S19828C9__A3__8S19828C1[] = {
  ABISELECT(24,12),
  ABISELECT(17,9),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
  (VTBL_ENTRY)&_ZN8S19828C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C59S19828C118S19828C9__A3__8S19828C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-64,-32),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__9S19828C118S19828C9__A1__8S19828C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-64,-32),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19828C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C9__8S19828C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-64,-32),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S19828C9[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S19828C9D1Ev,_ZTv0_n28_N8S19828C9D1Ev)();
extern void ABISELECT(_ZThn104_N8S19828C9D1Ev,_ZThn68_N8S19828C9D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S19828C9D0Ev,_ZTv0_n28_N8S19828C9D0Ev)();
extern void ABISELECT(_ZThn104_N8S19828C9D0Ev,_ZThn68_N8S19828C9D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19828C11__8S19828C9__8S19828C1[] = {
  ABISELECT(-104,-68),
  0,
  ABISELECT(-56,-44),
  ABISELECT(-63,-47),
  ABISELECT(-120,-76),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI8S19828C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19828C9D1Ev,_ZTv0_n28_N8S19828C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19828C9D0Ev,_ZTv0_n28_N8S19828C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19828C8__8S19828C9__8S19828C1[] = {
  ABISELECT(88,60),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19828C9[0]),
};
extern void ABISELECT(_ZThn24_N8S19828C9D1Ev,_ZThn12_N8S19828C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19828C9D0Ev,_ZThn12_N8S19828C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19828C11__A__8S19828C9__8S19828C1[] = {
  ABISELECT(80,56),
  ABISELECT(24,12),
  ABISELECT(17,9),
  ABISELECT(-40,-20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19828C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19828C9D1Ev,_ZThn12_N8S19828C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19828C9D0Ev,_ZThn12_N8S19828C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-64,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C8__8S19828C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C8[0]),
};
extern void _ZN9S19828C11D1Ev();
extern void _ZN9S19828C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19828C11__8S19828C1[] = {
  0,
  ABISELECT(-56,-44),
  ABISELECT(-63,-47),
  ABISELECT(-120,-76),
  0,
  (VTBL_ENTRY)&(_ZTI9S19828C11[0]),
  (VTBL_ENTRY)&_ZN9S19828C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19828C11D0Ev,
};
extern void _ZN8S19828C5D1Ev();
extern void _ZN8S19828C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19828C59S19828C11__A2__8S19828C1[] = {
  ABISELECT(-56,-44),
  ABISELECT(-63,-47),
  ABISELECT(-120,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
  (VTBL_ENTRY)&_ZN8S19828C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C59S19828C11__A2__8S19828C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-64,-32),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__9S19828C11__8S19828C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-64,-32),
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI9S19828C11[0]),
};
extern void _ZN9S19828C12D1Ev();
extern void _ZN9S19828C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19828C12__8S19828C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(48,24),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-72,-52),
  ABISELECT(-79,-55),
  ABISELECT(-136,-84),
  0,
  (VTBL_ENTRY)&(_ZTI9S19828C12[0]),
  (VTBL_ENTRY)&_ZN9S19828C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19828C12D0Ev,
};
extern void _ZN8S19828C9D1Ev();
extern void _ZN8S19828C9D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19828C99S19828C12__A1__8S19828C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-72,-52),
  ABISELECT(-79,-55),
  ABISELECT(-136,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C9[0]),
  (VTBL_ENTRY)&_ZN8S19828C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C9D0Ev,
};
extern void _ZN9S19828C10D1Ev();
extern void _ZN9S19828C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19828C108S19828C99S19828C12__A1__8S19828C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-72,-52),
  ABISELECT(-79,-55),
  ABISELECT(-136,-84),
  0,
  (VTBL_ENTRY)&(_ZTI9S19828C10[0]),
  (VTBL_ENTRY)&_ZN9S19828C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19828C10D0Ev,
};
extern void _ZN8S19828C5D1Ev();
extern void _ZN8S19828C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19828C59S19828C108S19828C99S19828C12__A5__8S19828C1[] = {
  ABISELECT(-72,-52),
  ABISELECT(-79,-55),
  ABISELECT(-136,-84),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
  (VTBL_ENTRY)&_ZN8S19828C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C59S19828C108S19828C99S19828C12__A5__8S19828C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-64,-32),
  ABISELECT(72,52),
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__9S19828C108S19828C99S19828C12__A1__8S19828C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-64,-32),
  ABISELECT(72,52),
  (VTBL_ENTRY)&(_ZTI9S19828C10[0]),
};
extern void ABISELECT(_ZTv0_n56_N9S19828C10D1Ev,_ZTv0_n28_N9S19828C10D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S19828C10D0Ev,_ZTv0_n28_N9S19828C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19828C11__9S19828C108S19828C99S19828C12__A1__8S19828C1[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(-56,-44),
  ABISELECT(-63,-47),
  ABISELECT(-120,-76),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19828C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19828C10D1Ev,_ZTv0_n28_N9S19828C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19828C10D0Ev,_ZTv0_n28_N9S19828C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19828C88S19828C99S19828C12__A2__8S19828C1[] = {
  ABISELECT(-32,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C8[0]),
};
extern void _ZN9S19828C11D1Ev();
extern void _ZN9S19828C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19828C118S19828C99S19828C12__A2__8S19828C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-96,-64),
  ABISELECT(-103,-67),
  ABISELECT(-160,-96),
  0,
  (VTBL_ENTRY)&(_ZTI9S19828C11[0]),
  (VTBL_ENTRY)&_ZN9S19828C11D1Ev,
  (VTBL_ENTRY)&_ZN9S19828C11D0Ev,
};
extern void _ZN8S19828C5D1Ev();
extern void _ZN8S19828C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19828C59S19828C118S19828C99S19828C12__A6__8S19828C1[] = {
  ABISELECT(-96,-64),
  ABISELECT(-103,-67),
  ABISELECT(-160,-96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
  (VTBL_ENTRY)&_ZN8S19828C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C59S19828C118S19828C99S19828C12__A6__8S19828C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-64,-32),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__9S19828C118S19828C99S19828C12__A2__8S19828C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-64,-32),
  ABISELECT(96,64),
  (VTBL_ENTRY)&(_ZTI9S19828C11[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C99S19828C12__A1__8S19828C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-64,-32),
  ABISELECT(72,52),
  (VTBL_ENTRY)&(_ZTI8S19828C9[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S19828C9D1Ev,_ZTv0_n28_N8S19828C9D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S19828C9D0Ev,_ZTv0_n28_N8S19828C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19828C11__8S19828C99S19828C12__A1__8S19828C1[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(-56,-44),
  ABISELECT(-63,-47),
  ABISELECT(-120,-76),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19828C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19828C9D1Ev,_ZTv0_n28_N8S19828C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S19828C9D0Ev,_ZTv0_n28_N8S19828C9D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19828C8__8S19828C99S19828C12__A1__8S19828C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19828C9[0]),
};
extern void ABISELECT(_ZThn24_N8S19828C9D1Ev,_ZThn12_N8S19828C9D1Ev)();
extern void ABISELECT(_ZThn24_N8S19828C9D0Ev,_ZThn12_N8S19828C9D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19828C11__A__8S19828C99S19828C12__A1__8S19828C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-96,-64),
  ABISELECT(-103,-67),
  ABISELECT(-160,-96),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19828C9[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19828C9D1Ev,_ZThn12_N8S19828C9D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S19828C9D0Ev,_ZThn12_N8S19828C9D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N9S19828C12D1Ev,_ZTv0_n32_N9S19828C12D1Ev)();
extern void ABISELECT(_ZThn48_N9S19828C12D1Ev,_ZThn24_N9S19828C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N9S19828C12D0Ev,_ZTv0_n32_N9S19828C12D0Ev)();
extern void ABISELECT(_ZThn48_N9S19828C12D0Ev,_ZThn24_N9S19828C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19828C4__9S19828C12__8S19828C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-64,-32),
  ABISELECT(-72,-36),
  ABISELECT(-120,-76),
  ABISELECT(-127,-79),
  ABISELECT(-184,-108),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI9S19828C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19828C12D1Ev,_ZTv0_n32_N9S19828C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N9S19828C12D0Ev,_ZTv0_n32_N9S19828C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__9S19828C12__8S19828C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-64,-32),
  ABISELECT(72,52),
  (VTBL_ENTRY)&(_ZTI9S19828C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C8__9S19828C12__8S19828C1[] = {
  ABISELECT(8,4),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI9S19828C12[0]),
};
extern void ABISELECT(_ZTv0_n56_N9S19828C12D1Ev,_ZTv0_n28_N9S19828C12D1Ev)();
extern void ABISELECT(_ZTv0_n56_N9S19828C12D0Ev,_ZTv0_n28_N9S19828C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19828C11__9S19828C12__8S19828C1[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(-56,-44),
  ABISELECT(-63,-47),
  ABISELECT(-120,-76),
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI9S19828C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19828C12D1Ev,_ZTv0_n28_N9S19828C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S19828C12D0Ev,_ZTv0_n28_N9S19828C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19828C88S19828C9__A1__9S19828C12__8S19828C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S19828C12[0]),
};
extern void ABISELECT(_ZThn24_N9S19828C12D1Ev,_ZThn12_N9S19828C12D1Ev)();
extern void ABISELECT(_ZThn24_N9S19828C12D0Ev,_ZThn12_N9S19828C12D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S19828C118S19828C9__A1__9S19828C12__8S19828C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-96,-64),
  ABISELECT(-103,-67),
  ABISELECT(-160,-96),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S19828C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N9S19828C12D1Ev,_ZThn12_N9S19828C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N9S19828C12D0Ev,_ZThn12_N9S19828C12D0Ev),
};
extern void _ZN8S19828C4D1Ev();
extern void _ZN8S19828C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19828C4__A1__8S19828C1[] = {
  ABISELECT(-64,-32),
  ABISELECT(-72,-36),
  ABISELECT(-120,-76),
  ABISELECT(-127,-79),
  ABISELECT(-184,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C4[0]),
  (VTBL_ENTRY)&_ZN8S19828C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C4D0Ev,
};
extern void _ZN8S19828C5D1Ev();
extern void _ZN8S19828C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19828C58S19828C4__A4__8S19828C1[] = {
  ABISELECT(-120,-76),
  ABISELECT(-127,-79),
  ABISELECT(-184,-108),
  0,
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
  (VTBL_ENTRY)&_ZN8S19828C5D1Ev,
  (VTBL_ENTRY)&_ZN8S19828C5D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C58S19828C4__A4__8S19828C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-64,-32),
  ABISELECT(120,76),
  (VTBL_ENTRY)&(_ZTI8S19828C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C7__8S19828C4__A1__8S19828C1[] = {
  ABISELECT(-7,-3),
  ABISELECT(-64,-32),
  ABISELECT(120,76),
  (VTBL_ENTRY)&(_ZTI8S19828C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19828C8__8S19828C4__A1__8S19828C1[] = {
  ABISELECT(8,4),
  ABISELECT(72,36),
  (VTBL_ENTRY)&(_ZTI8S19828C4[0]),
};
static  VTT_ENTRY vtt_S19828C1[] = {
  {&(_ZTV8S19828C1[10]),  10,81},
  {&(_tg__ZTV8S19828C4__A__8S19828C1[7]),  7,9},
  {&(_tg__ZTV8S19828C58S19828C4__8S19828C1[5]),  5,7},
  {&(_tg__ZTV8S19828C7__8S19828C58S19828C4__8S19828C1[4]),  4,4},
  {&(_tg__ZTV8S19828C7__8S19828C4__A__8S19828C1[4]),  4,4},
  {&(_tg__ZTV8S19828C8__8S19828C4__A__8S19828C1[3]),  3,3},
  {&(_tg__ZTV8S19828C9__8S19828C1[7]),  7,9},
  {&(_tg__ZTV9S19828C108S19828C9__8S19828C1[7]),  7,9},
  {&(_tg__ZTV8S19828C59S19828C108S19828C9__A1__8S19828C1[5]),  5,7},
  {&(_tg__ZTV8S19828C7__8S19828C59S19828C108S19828C9__A1__8S19828C1[4]),  4,4},
  {&(_tg__ZTV8S19828C7__9S19828C108S19828C9__8S19828C1[4]),  4,4},
  {&(_tg__ZTV9S19828C11__9S19828C108S19828C9__8S19828C1[7]),  7,9},
  {&(_tg__ZTV8S19828C88S19828C9__A1__8S19828C1[3]),  3,3},
  {&(_tg__ZTV9S19828C118S19828C9__A1__8S19828C1[6]),  6,8},
  {&(_tg__ZTV8S19828C59S19828C118S19828C9__A3__8S19828C1[5]),  5,7},
  {&(_tg__ZTV8S19828C7__8S19828C59S19828C118S19828C9__A3__8S19828C1[4]),  4,4},
  {&(_tg__ZTV8S19828C7__9S19828C118S19828C9__A1__8S19828C1[4]),  4,4},
  {&(_tg__ZTV8S19828C7__8S19828C9__8S19828C1[4]),  4,4},
  {&(_tg__ZTV9S19828C11__8S19828C9__8S19828C1[7]),  7,9},
  {&(_tg__ZTV8S19828C8__8S19828C9__8S19828C1[3]),  3,3},
  {&(_tg__ZTV9S19828C11__A__8S19828C9__8S19828C1[6]),  6,8},
  {&(_ZTV8S19828C1[36]),  36,81},
  {&(_ZTV8S19828C1[39]),  39,81},
  {&(_ZTV8S19828C1[19]),  19,81},
  {&(_ZTV8S19828C1[46]),  46,81},
  {&(_ZTV8S19828C1[24]),  24,81},
  {&(_ZTV8S19828C1[30]),  30,81},
  {&(_ZTV8S19828C1[58]),  58,81},
  {&(_ZTV8S19828C1[79]),  79,81},
  {&(_ZTV8S19828C1[63]),  63,81},
  {&(_ZTV8S19828C1[69]),  69,81},
  {&(_tg__ZTV8S19828C7__8S19828C1[4]),  4,4},
  {&(_tg__ZTV8S19828C8__8S19828C1[3]),  3,3},
  {&(_tg__ZTV9S19828C11__8S19828C1[6]),  6,8},
  {&(_tg__ZTV8S19828C59S19828C11__A2__8S19828C1[5]),  5,7},
  {&(_tg__ZTV8S19828C7__8S19828C59S19828C11__A2__8S19828C1[4]),  4,4},
  {&(_tg__ZTV8S19828C7__9S19828C11__8S19828C1[4]),  4,4},
  {&(_tg__ZTV9S19828C12__8S19828C1[9]),  9,11},
  {&(_tg__ZTV8S19828C99S19828C12__A1__8S19828C1[7]),  7,9},
  {&(_tg__ZTV9S19828C108S19828C99S19828C12__A1__8S19828C1[7]),  7,9},
  {&(_tg__ZTV8S19828C59S19828C108S19828C99S19828C12__A5__8S19828C1[5]),  5,7},
  {&(_tg__ZTV8S19828C7__8S19828C59S19828C108S19828C99S19828C12__A5__8S19828C1[4]),  4,4},
  {&(_tg__ZTV8S19828C7__9S19828C108S19828C99S19828C12__A1__8S19828C1[4]),  4,4},
  {&(_tg__ZTV9S19828C11__9S19828C108S19828C99S19828C12__A1__8S19828C1[7]),  7,9},
  {&(_tg__ZTV8S19828C88S19828C99S19828C12__A2__8S19828C1[3]),  3,3},
  {&(_tg__ZTV9S19828C118S19828C99S19828C12__A2__8S19828C1[6]),  6,8},
  {&(_tg__ZTV8S19828C59S19828C118S19828C99S19828C12__A6__8S19828C1[5]),  5,7},
  {&(_tg__ZTV8S19828C7__8S19828C59S19828C118S19828C99S19828C12__A6__8S19828C1[4]),  4,4},
  {&(_tg__ZTV8S19828C7__9S19828C118S19828C99S19828C12__A2__8S19828C1[4]),  4,4},
  {&(_tg__ZTV8S19828C7__8S19828C99S19828C12__A1__8S19828C1[4]),  4,4},
  {&(_tg__ZTV9S19828C11__8S19828C99S19828C12__A1__8S19828C1[7]),  7,9},
  {&(_tg__ZTV8S19828C8__8S19828C99S19828C12__A1__8S19828C1[3]),  3,3},
  {&(_tg__ZTV9S19828C11__A__8S19828C99S19828C12__A1__8S19828C1[6]),  6,8},
  {&(_tg__ZTV8S19828C4__9S19828C12__8S19828C1[8]),  8,10},
  {&(_tg__ZTV8S19828C7__9S19828C12__8S19828C1[4]),  4,4},
  {&(_tg__ZTV8S19828C8__9S19828C12__8S19828C1[3]),  3,3},
  {&(_tg__ZTV9S19828C11__9S19828C12__8S19828C1[7]),  7,9},
  {&(_tg__ZTV8S19828C88S19828C9__A1__9S19828C12__8S19828C1[3]),  3,3},
  {&(_tg__ZTV9S19828C118S19828C9__A1__9S19828C12__8S19828C1[6]),  6,8},
  {&(_tg__ZTV8S19828C4__A1__8S19828C1[7]),  7,9},
  {&(_tg__ZTV8S19828C58S19828C4__A4__8S19828C1[5]),  5,7},
  {&(_tg__ZTV8S19828C7__8S19828C58S19828C4__A4__8S19828C1[4]),  4,4},
  {&(_tg__ZTV8S19828C7__8S19828C4__A1__8S19828C1[4]),  4,4},
  {&(_tg__ZTV8S19828C8__8S19828C4__A1__8S19828C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19828C1[];
extern  VTBL_ENTRY _ZTV8S19828C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19828C1[];
static VTBL_ENTRY alt_thunk_names201[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19828C12D0Ev,_ZTv0_n32_N9S19828C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19828C12D0Ev,_ZThn24_N9S19828C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N9S19828C12D1Ev,_ZTv0_n32_N9S19828C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N9S19828C12D1Ev,_ZThn24_N9S19828C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19828C9D0Ev,_ZTv0_n28_N8S19828C9D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19828C9D0Ev,_ZThn68_N8S19828C9D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19828C9D1Ev,_ZTv0_n28_N8S19828C9D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N8S19828C9D1Ev,_ZThn68_N8S19828C9D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19828C10D0Ev,_ZTv0_n28_N9S19828C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19828C10D0Ev,_ZThn68_N9S19828C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S19828C10D1Ev,_ZTv0_n28_N9S19828C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N9S19828C10D1Ev,_ZThn68_N9S19828C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19828C1D0Ev,_ZTv0_n32_N8S19828C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S19828C1D0Ev,_ZThn108_N8S19828C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S19828C1D1Ev,_ZTv0_n32_N8S19828C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn184_N8S19828C1D1Ev,_ZThn108_N8S19828C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19828C1D0Ev,_ZTv0_n40_N8S19828C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19828C1D0Ev,_ZThn84_N8S19828C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19828C1D1Ev,_ZTv0_n40_N8S19828C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19828C1D1Ev,_ZThn84_N8S19828C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19828C1D0Ev,_ZTv0_n28_N8S19828C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19828C1D0Ev,_ZThn76_N8S19828C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S19828C1D1Ev,_ZTv0_n28_N8S19828C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19828C1D1Ev,_ZThn76_N8S19828C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19828C1 = {  "S19828C1", // class name
  bases_S19828C1, 40,
  &(vtc_S19828C1[0]), // expected_vtbl_contents
  &(vtt_S19828C1[0]), // expected_vtt_contents
  ABISELECT(200,116), // object size
  NSPAIRA(_ZTI8S19828C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19828C1),81, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19828C1),64, //virtual table table var
  21, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names201,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20740C2  : virtual S2264C38 , virtual S2264C28 {
  int s20740c2f0[9];
  ~S20740C2(); // tgen
  S20740C2(); // tgen
};
//SIG(-1 S20740C2) C1{ VBC2{ m} VBC3{ m} Fi[9]}


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

static void Test_S20740C2()
{
  extern Class_Descriptor cd_S20740C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S20740C2, buf);
    S20740C2 *dp, &lv = *(dp=new (buf) S20740C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S20740C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20740C2)");
    check_base_class_offset(lv, (S2264C38*), 0, "S20740C2");
    check_base_class_offset(lv, (S2264C28*), 0, "S20740C2");
    check_field_offset(lv, s20740c2f0, ABISELECT(8,4), "S20740C2.s20740c2f0");
    test_class_info(&lv, &cd_S20740C2);
    dp->~S20740C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20740C2(Test_S20740C2, "S20740C2", ABISELECT(48,40));

#else // __cplusplus

extern void _ZN8S20740C2C1Ev();
extern void _ZN8S20740C2D1Ev();
Name_Map name_map_S20740C2[] = {
  NSPAIR(_ZN8S20740C2C1Ev),
  NSPAIR(_ZN8S20740C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S20740C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20740C2[];
static  VTBL_ENTRY vtc_S20740C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C2[0]),
};
extern VTBL_ENTRY _ZTV8S20740C2[];
static  VTT_ENTRY vtt_S20740C2[] = {
  {&(_ZTV8S20740C2[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20740C2[];
extern  VTBL_ENTRY _ZTV8S20740C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C2[];
Class_Descriptor cd_S20740C2 = {  "S20740C2", // class name
  bases_S20740C2, 2,
  &(vtc_S20740C2[0]), // expected_vtbl_contents
  &(vtt_S20740C2[0]), // expected_vtt_contents
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI8S20740C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20740C2),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20740C2),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  S20740C8  : virtual S2264C38 , virtual S2264C28 , virtual S20740C2 {
  void *s20740c8f0;
  virtual  ~S20740C8(); // _ZN8S20740C8D2Ev
  S20740C8(); // tgen
};
//SIG(-1 S20740C8) C1{ VBC2{ m} VBC3{ m} VBC4{ VBC2 VBC3 Fi[9]} vd Fp}


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

static void Test_S20740C8()
{
  extern Class_Descriptor cd_S20740C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S20740C8, buf);
    S20740C8 *dp, &lv = *(dp=new (buf) S20740C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S20740C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20740C8)");
    check_base_class_offset(lv, (S2264C38*), 0, "S20740C8");
    check_base_class_offset(lv, (S2264C38*)(S20740C2*), 0, "S20740C8");
    check_base_class_offset(lv, (S2264C28*), 0, "S20740C8");
    check_base_class_offset(lv, (S2264C28*)(S20740C2*), 0, "S20740C8");
    check_base_class_offset(lv, (S20740C2*), ABISELECT(16,8), "S20740C8");
    check_field_offset(lv, s20740c8f0, ABISELECT(8,4), "S20740C8.s20740c8f0");
    test_class_info(&lv, &cd_S20740C8);
    dp->~S20740C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20740C8(Test_S20740C8, "S20740C8", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN8S20740C8C1Ev();
extern void _ZN8S20740C8D2Ev();
Name_Map name_map_S20740C8[] = {
  NSPAIR(_ZN8S20740C8C1Ev),
  NSPAIR(_ZN8S20740C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20740C2;
extern VTBL_ENTRY _ZTI8S20740C2[];
extern  VTBL_ENTRY _ZTV8S20740C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C2[];
static Base_Class bases_S20740C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20740C2,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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 _ZTI8S20740C8[];
extern void _ZN8S20740C8D1Ev();
extern void _ZN8S20740C8D0Ev();
static  VTBL_ENTRY vtc_S20740C8[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
  (VTBL_ENTRY)&_ZN8S20740C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20740C8D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
};
extern VTBL_ENTRY _ZTV8S20740C8[];
static  VTBL_ENTRY _tg__ZTV8S20740C2__8S20740C8[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C2[0]),
};
static  VTT_ENTRY vtt_S20740C8[] = {
  {&(_ZTV8S20740C8[5]),  5,11},
  {&(_ZTV8S20740C8[11]),  11,11},
  {&(_tg__ZTV8S20740C2__8S20740C8[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20740C8[];
extern  VTBL_ENTRY _ZTV8S20740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C8[];
Class_Descriptor cd_S20740C8 = {  "S20740C8", // class name
  bases_S20740C8, 3,
  &(vtc_S20740C8[0]), // expected_vtbl_contents
  &(vtt_S20740C8[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI8S20740C8),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20740C8),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20740C8),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  S20740C9  : S2264C28 , virtual S2264C24 {
  ~S20740C9(); // tgen
  S20740C9(); // tgen
};
//SIG(-1 S20740C9) C1{ BC2{ m} VBC3{ m}}


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

static void Test_S20740C9()
{
  extern Class_Descriptor cd_S20740C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20740C9, buf);
    S20740C9 *dp, &lv = *(dp=new (buf) S20740C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20740C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20740C9)");
    check_base_class_offset(lv, (S2264C28*), 0, "S20740C9");
    check_base_class_offset(lv, (S2264C24*), 0, "S20740C9");
    test_class_info(&lv, &cd_S20740C9);
    dp->~S20740C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20740C9(Test_S20740C9, "S20740C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20740C9C1Ev();
extern void _ZN8S20740C9D1Ev();
Name_Map name_map_S20740C9[] = {
  NSPAIR(_ZN8S20740C9C1Ev),
  NSPAIR(_ZN8S20740C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
static Base_Class bases_S20740C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S20740C9[];
static  VTBL_ENTRY vtc_S20740C9[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C9[0]),
};
extern VTBL_ENTRY _ZTV8S20740C9[];
static  VTT_ENTRY vtt_S20740C9[] = {
  {&(_ZTV8S20740C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20740C9[];
extern  VTBL_ENTRY _ZTV8S20740C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C9[];
Class_Descriptor cd_S20740C9 = {  "S20740C9", // class name
  bases_S20740C9, 2,
  &(vtc_S20740C9[0]), // expected_vtbl_contents
  &(vtt_S20740C9[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20740C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20740C9),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20740C9),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  S20740C7  : S20740C8 , S2264C28 , virtual S20740C9 {
  virtual  ~S20740C7(); // _ZN8S20740C7D2Ev
  S20740C7(); // tgen
};
//SIG(-1 S20740C7) C1{ BC2{ VBC3{ m} VBC4{ m} VBC5{ VBC3 VBC4 Fi[9]} vd Fp} BC4 VBC6{ BC4 VBC7{ m}} vd}


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

static void Test_S20740C7()
{
  extern Class_Descriptor cd_S20740C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S20740C7, buf);
    S20740C7 *dp, &lv = *(dp=new (buf) S20740C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S20740C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20740C7)");
    check_base_class_offset(lv, (S2264C38*)(S20740C8*), 0, "S20740C7");
    check_base_class_offset(lv, (S2264C38*)(S20740C2*), 0, "S20740C7");
    check_base_class_offset(lv, (S2264C28*)(S20740C8*), ABISELECT(16,8), "S20740C7");
    check_base_class_offset(lv, (S2264C28*)(S20740C2*), ABISELECT(16,8), "S20740C7");
    check_base_class_offset(lv, (S20740C2*)(S20740C8*), ABISELECT(16,8), "S20740C7");
    check_base_class_offset(lv, (S20740C8*), 0, "S20740C7");
    /*is_ambiguous_... S20740C7::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), 0, "S20740C7");
    check_base_class_offset(lv, (S2264C28*)(S20740C9*), ABISELECT(64,48), "S20740C7");
    check_base_class_offset(lv, (S2264C24*)(S20740C9*), 0, "S20740C7");
    check_base_class_offset(lv, (S20740C9*), ABISELECT(64,48), "S20740C7");
    test_class_info(&lv, &cd_S20740C7);
    dp->~S20740C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20740C7(Test_S20740C7, "S20740C7", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN8S20740C7C1Ev();
extern void _ZN8S20740C7D2Ev();
Name_Map name_map_S20740C7[] = {
  NSPAIR(_ZN8S20740C7C1Ev),
  NSPAIR(_ZN8S20740C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20740C2;
extern VTBL_ENTRY _ZTI8S20740C2[];
extern  VTBL_ENTRY _ZTV8S20740C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C2[];
extern Class_Descriptor cd_S20740C8;
extern VTBL_ENTRY _ZTI8S20740C8[];
extern  VTBL_ENTRY _ZTV8S20740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C8[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S20740C9;
extern VTBL_ENTRY _ZTI8S20740C9[];
extern  VTBL_ENTRY _ZTV8S20740C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C9[];
static Base_Class bases_S20740C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    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, 1},
  {&cd_S20740C2,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20740C8,    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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C28,    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
    7, //immediately_derived
  0, 0},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20740C9,    ABISELECT(64,48), //bcp->offset
    13, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20740C7[];
extern void _ZN8S20740C7D1Ev();
extern void _ZN8S20740C7D0Ev();
static  VTBL_ENTRY vtc_S20740C7[] = {
  0,
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C7[0]),
  (VTBL_ENTRY)&_ZN8S20740C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20740C7D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20740C7[0]),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI8S20740C7[0]),
};
extern VTBL_ENTRY _ZTV8S20740C7[];
extern void _ZN8S20740C8D1Ev();
extern void _ZN8S20740C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20740C8__8S20740C7[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
  (VTBL_ENTRY)&_ZN8S20740C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20740C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__8S20740C8__8S20740C7[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__8S20740C7[] = {
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C9__8S20740C7[] = {
  ABISELECT(-64,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C9[0]),
};
static  VTT_ENTRY vtt_S20740C7[] = {
  {&(_ZTV8S20740C7[7]),  7,16},
  {&(_tg__ZTV8S20740C8__8S20740C7[5]),  5,7},
  {&(_tg__ZTV8S20740C2__8S20740C8__8S20740C7[4]),  4,4},
  {&(_ZTV8S20740C7[13]),  13,16},
  {&(_ZTV8S20740C7[16]),  16,16},
  {&(_tg__ZTV8S20740C2__8S20740C7[4]),  4,4},
  {&(_tg__ZTV8S20740C9__8S20740C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S20740C7[];
extern  VTBL_ENTRY _ZTV8S20740C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C7[];
Class_Descriptor cd_S20740C7 = {  "S20740C7", // class name
  bases_S20740C7, 8,
  &(vtc_S20740C7[0]), // expected_vtbl_contents
  &(vtt_S20740C7[0]), // expected_vtt_contents
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI8S20740C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S20740C7),16, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20740C7),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20740C10  : virtual S2264C28 , S2264C38 , S20740C8 , virtual S2264C24 {
  virtual  ~S20740C10(); // _ZN9S20740C10D2Ev
  S20740C10(); // tgen
};
//SIG(-1 S20740C10) C1{ VBC2{ m} BC3{ m} BC4{ VBC3 VBC2 VBC5{ VBC3 VBC2 Fi[9]} vd Fp} VBC6{ m} vd}


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

static void Test_S20740C10()
{
  extern Class_Descriptor cd_S20740C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S20740C10, buf);
    S20740C10 *dp, &lv = *(dp=new (buf) S20740C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S20740C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20740C10)");
    check_base_class_offset(lv, (S2264C28*), 0, "S20740C10");
    check_base_class_offset(lv, (S2264C28*)(S20740C8*), 0, "S20740C10");
    check_base_class_offset(lv, (S2264C28*)(S20740C2*), 0, "S20740C10");
    /*is_ambiguous_... S20740C10::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), 0, "S20740C10");
    check_base_class_offset(lv, (S2264C38*)(S20740C8*), ABISELECT(16,8), "S20740C10");
    check_base_class_offset(lv, (S2264C38*)(S20740C2*), ABISELECT(16,8), "S20740C10");
    check_base_class_offset(lv, (S20740C2*)(S20740C8*), ABISELECT(16,8), "S20740C10");
    check_base_class_offset(lv, (S20740C8*), 0, "S20740C10");
    check_base_class_offset(lv, (S2264C24*), 0, "S20740C10");
    test_class_info(&lv, &cd_S20740C10);
    dp->~S20740C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20740C10(Test_S20740C10, "S20740C10", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN9S20740C10C1Ev();
extern void _ZN9S20740C10D2Ev();
Name_Map name_map_S20740C10[] = {
  NSPAIR(_ZN9S20740C10C1Ev),
  NSPAIR(_ZN9S20740C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20740C2;
extern VTBL_ENTRY _ZTI8S20740C2[];
extern  VTBL_ENTRY _ZTV8S20740C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C2[];
extern Class_Descriptor cd_S20740C8;
extern VTBL_ENTRY _ZTI8S20740C8[];
extern  VTBL_ENTRY _ZTV8S20740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C8[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
static Base_Class bases_S20740C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C38,    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, 1},
  {&cd_S20740C2,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20740C8,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S20740C10[];
extern void _ZN9S20740C10D1Ev();
extern void _ZN9S20740C10D0Ev();
static  VTBL_ENTRY vtc_S20740C10[] = {
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI9S20740C10[0]),
  (VTBL_ENTRY)&_ZN9S20740C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20740C10D0Ev,
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20740C10[0]),
};
extern VTBL_ENTRY _ZTV9S20740C10[];
extern void _ZN8S20740C8D1Ev();
extern void _ZN8S20740C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20740C8__9S20740C10[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
  (VTBL_ENTRY)&_ZN8S20740C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20740C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__8S20740C8__9S20740C10[] = {
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__9S20740C10[] = {
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C2[0]),
};
static  VTT_ENTRY vtt_S20740C10[] = {
  {&(_ZTV9S20740C10[6]),  6,12},
  {&(_tg__ZTV8S20740C8__9S20740C10[5]),  5,7},
  {&(_tg__ZTV8S20740C2__8S20740C8__9S20740C10[4]),  4,4},
  {&(_ZTV9S20740C10[12]),  12,12},
  {&(_tg__ZTV8S20740C2__9S20740C10[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20740C10[];
extern  VTBL_ENTRY _ZTV9S20740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20740C10[];
Class_Descriptor cd_S20740C10 = {  "S20740C10", // class name
  bases_S20740C10, 6,
  &(vtc_S20740C10[0]), // expected_vtbl_contents
  &(vtt_S20740C10[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI9S20740C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20740C10),12, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20740C10),5, //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  S20740C12  : S2264C28 , virtual S20740C2 , S20740C8 , S2264C38 , virtual S20740C10 {
  virtual  ~S20740C12(); // _ZN9S20740C12D2Ev
  S20740C12(); // tgen
};
//SIG(-1 S20740C12) C1{ BC2{ m} VBC3{ VBC4{ m} VBC2 Fi[9]} BC5{ VBC4 VBC2 VBC3 vd Fp} BC4 VBC6{ VBC2 BC4 BC5 VBC7{ m} vd} vd}


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

static void Test_S20740C12()
{
  extern Class_Descriptor cd_S20740C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,16)];
    init_test(&cd_S20740C12, buf);
    S20740C12 *dp, &lv = *(dp=new (buf) S20740C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S20740C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20740C12)");
    /*is_ambiguous_... S20740C12::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), 0, "S20740C12");
    check_base_class_offset(lv, (S2264C38*)(S20740C2*), ABISELECT(60,48), "S20740C12");
    /*is_ambiguous_... S20740C12::S20740C8 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20740C8*), ABISELECT(60,48), "S20740C12");
    check_base_class_offset(lv, (S2264C38*)(S20740C8*)(S20740C10*), ABISELECT(60,48), "S20740C12");
    check_base_class_offset(lv, (S2264C28*)(S20740C2*), ABISELECT(60,48), "S20740C12");
    /*is_ambiguous_... S20740C12::S20740C8 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20740C8*), ABISELECT(60,48), "S20740C12");
    check_base_class_offset(lv, (S2264C28*)(S20740C10*), ABISELECT(60,48), "S20740C12");
    check_base_class_offset(lv, (S2264C28*)(S20740C8*)(S20740C10*), ABISELECT(60,48), "S20740C12");
    check_base_class_offset(lv, (S20740C2*), ABISELECT(16,8), "S20740C12");
    /*is_ambiguous_... S20740C12::S20740C8 */ AMB_check_base_class_offset(lv, (S20740C2*)(S20740C8*), ABISELECT(16,8), "S20740C12");
    check_base_class_offset(lv, (S20740C2*)(S20740C8*)(S20740C10*), ABISELECT(16,8), "S20740C12");
    /*is_ambiguous_... S20740C12::S20740C8 */ AMB_check_base_class_offset(lv, (S20740C8*), 0, "S20740C12");
    /*is_ambiguous_... S20740C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), 0, "S20740C12");
    /*is_ambiguous_... S20740C10::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20740C10*), ABISELECT(64,52), "S20740C12");
    check_base_class_offset(lv, (S20740C8*)(S20740C10*), ABISELECT(64,52), "S20740C12");
    check_base_class_offset(lv, (S2264C24*)(S20740C10*), 0, "S20740C12");
    check_base_class_offset(lv, (S20740C10*), ABISELECT(64,52), "S20740C12");
    test_class_info(&lv, &cd_S20740C12);
    dp->~S20740C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20740C12(Test_S20740C12, "S20740C12", ABISELECT(80,60));

#else // __cplusplus

extern void _ZN9S20740C12C1Ev();
extern void _ZN9S20740C12D2Ev();
Name_Map name_map_S20740C12[] = {
  NSPAIR(_ZN9S20740C12C1Ev),
  NSPAIR(_ZN9S20740C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20740C2;
extern VTBL_ENTRY _ZTI8S20740C2[];
extern  VTBL_ENTRY _ZTV8S20740C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C2[];
extern Class_Descriptor cd_S20740C8;
extern VTBL_ENTRY _ZTI8S20740C8[];
extern  VTBL_ENTRY _ZTV8S20740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C8[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20740C8;
extern VTBL_ENTRY _ZTI8S20740C8[];
extern  VTBL_ENTRY _ZTV8S20740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C8[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S20740C10;
extern VTBL_ENTRY _ZTI9S20740C10[];
extern  VTBL_ENTRY _ZTV9S20740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20740C10[];
static Base_Class bases_S20740C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C38,    ABISELECT(60,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_S2264C28,    ABISELECT(60,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_S20740C2,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20740C8,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C38,    ABISELECT(64,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
    9, //immediately_derived
  0, 0},
  {&cd_S20740C8,    ABISELECT(64,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20740C10,    ABISELECT(64,52), //bcp->offset
    13, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S20740C12[];
extern void _ZN9S20740C12D1Ev();
extern void _ZN9S20740C12D0Ev();
extern void ABISELECT(_ZTv0_n56_N9S20740C12D1Ev,_ZTv0_n28_N9S20740C12D1Ev)();
extern void ABISELECT(_ZThn64_N9S20740C12D1Ev,_ZThn52_N9S20740C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20740C12D0Ev,_ZTv0_n28_N9S20740C12D0Ev)();
extern void ABISELECT(_ZThn64_N9S20740C12D0Ev,_ZThn52_N9S20740C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20740C12[] = {
  0,
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S20740C12[0]),
  (VTBL_ENTRY)&_ZN9S20740C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20740C12D0Ev,
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20740C12[0]),
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI9S20740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20740C12D1Ev,_ZTv0_n28_N9S20740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20740C12D0Ev,_ZTv0_n28_N9S20740C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S20740C12[];
extern void _ZN8S20740C8D1Ev();
extern void _ZN8S20740C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20740C8__9S20740C12[] = {
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
  (VTBL_ENTRY)&_ZN8S20740C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20740C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__8S20740C8__9S20740C12[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__9S20740C12[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C2[0]),
};
extern void _ZN9S20740C10D1Ev();
extern void _ZN9S20740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20740C10__9S20740C12[] = {
  ABISELECT(-64,-52),
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S20740C10[0]),
  (VTBL_ENTRY)&_ZN9S20740C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20740C10D0Ev,
};
extern void _ZN8S20740C8D1Ev();
extern void _ZN8S20740C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20740C89S20740C10__A1__9S20740C12[] = {
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
  (VTBL_ENTRY)&_ZN8S20740C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20740C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__8S20740C89S20740C10__A1__9S20740C12[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__9S20740C10__9S20740C12[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI9S20740C10[0]),
};
static  VTT_ENTRY vtt_S20740C12[] = {
  {&(_ZTV9S20740C12[7]),  7,22},
  {&(_tg__ZTV8S20740C8__9S20740C12[5]),  5,7},
  {&(_tg__ZTV8S20740C2__8S20740C8__9S20740C12[4]),  4,4},
  {&(_ZTV9S20740C12[13]),  13,22},
  {&(_ZTV9S20740C12[20]),  20,22},
  {&(_tg__ZTV8S20740C2__9S20740C12[4]),  4,4},
  {&(_tg__ZTV9S20740C10__9S20740C12[6]),  6,8},
  {&(_tg__ZTV8S20740C89S20740C10__A1__9S20740C12[5]),  5,7},
  {&(_tg__ZTV8S20740C2__8S20740C89S20740C10__A1__9S20740C12[4]),  4,4},
  {&(_tg__ZTV8S20740C2__9S20740C10__9S20740C12[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20740C12[];
extern  VTBL_ENTRY _ZTV9S20740C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20740C12[];
static VTBL_ENTRY alt_thunk_names202[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20740C12D0Ev,_ZTv0_n28_N9S20740C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20740C12D0Ev,_ZThn52_N9S20740C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20740C12D1Ev,_ZTv0_n28_N9S20740C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N9S20740C12D1Ev,_ZThn52_N9S20740C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20740C12 = {  "S20740C12", // class name
  bases_S20740C12, 10,
  &(vtc_S20740C12[0]), // expected_vtbl_contents
  &(vtt_S20740C12[0]), // expected_vtt_contents
  ABISELECT(80,60), // object size
  NSPAIRA(_ZTI9S20740C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV9S20740C12),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20740C12),10, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names202,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20740C11  : S20740C12 , S20740C9 , S20740C10 , S2264C38 {
  virtual  ~S20740C11(); // _ZN9S20740C11D2Ev
  S20740C11(); // tgen
};
//SIG(-1 S20740C11) C1{ BC2{ BC3{ m} VBC4{ VBC5{ m} VBC3 Fi[9]} BC6{ VBC5 VBC3 VBC4 vd Fp} BC5 VBC7{ VBC3 BC5 BC6 VBC8{ m} vd} vd} BC9{ BC3 VBC8} BC7 BC5 vd}


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

static void Test_S20740C11()
{
  extern Class_Descriptor cd_S20740C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,19)];
    init_test(&cd_S20740C11, buf);
    S20740C11 *dp, &lv = *(dp=new (buf) S20740C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,72), "sizeof(S20740C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20740C11)");
    /*is_ambiguous_... S20740C12::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20740C12*), 0, "S20740C11");
    check_base_class_offset(lv, (S2264C38*)(S20740C2*), ABISELECT(84,60), "S20740C11");
    /*is_ambiguous_... S20740C12::S20740C8 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20740C8*)(S20740C12*), ABISELECT(84,60), "S20740C11");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20740C8*)(S20740C10*), ABISELECT(84,60), "S20740C11");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20740C8*)(S20740C10*), ABISELECT(84,60), "S20740C11");
    check_base_class_offset(lv, (S2264C28*)(S20740C2*), ABISELECT(84,60), "S20740C11");
    /*is_ambiguous_... S20740C12::S20740C8 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20740C8*)(S20740C12*), ABISELECT(84,60), "S20740C11");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20740C10*), ABISELECT(84,60), "S20740C11");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20740C8*)(S20740C10*), ABISELECT(84,60), "S20740C11");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20740C10*), ABISELECT(84,60), "S20740C11");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20740C8*)(S20740C10*), ABISELECT(84,60), "S20740C11");
    check_base_class_offset(lv, (S20740C2*)(S20740C12*), ABISELECT(40,20), "S20740C11");
    /*is_ambiguous_... S20740C12::S20740C8 */ AMB_check_base_class_offset(lv, (S20740C2*)(S20740C8*)(S20740C12*), ABISELECT(40,20), "S20740C11");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S20740C2*)(S20740C8*)(S20740C10*), ABISELECT(40,20), "S20740C11");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S20740C2*)(S20740C8*)(S20740C10*), ABISELECT(40,20), "S20740C11");
    /*is_ambiguous_... S20740C12::S20740C8 */ AMB_check_base_class_offset(lv, (S20740C8*)(S20740C12*), 0, "S20740C11");
    /*is_ambiguous_... S20740C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20740C12*), 0, "S20740C11");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20740C10*), ABISELECT(88,64), "S20740C11");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S20740C8*)(S20740C10*), ABISELECT(88,64), "S20740C11");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S20740C10*), 0, "S20740C11");
    check_base_class_offset(lv, (S2264C24*)(S20740C9*), 0, "S20740C11");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S20740C10*), 0, "S20740C11");
    check_base_class_offset(lv, (S20740C10*)(S20740C12*), ABISELECT(88,64), "S20740C11");
    check_base_class_offset(lv, (S20740C12*), 0, "S20740C11");
    check_base_class_offset(lv, (S2264C28*)(S20740C9*), ABISELECT(16,8), "S20740C11");
    check_base_class_offset(lv, (S20740C9*), ABISELECT(16,8), "S20740C11");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20740C10*), ABISELECT(24,12), "S20740C11");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S20740C8*)(S20740C10*), ABISELECT(24,12), "S20740C11");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S20740C10*), ABISELECT(24,12), "S20740C11");
    /*is_ambiguous_... S20740C11::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), ABISELECT(40,20), "S20740C11");
    test_class_info(&lv, &cd_S20740C11);
    dp->~S20740C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20740C11(Test_S20740C11, "S20740C11", ABISELECT(104,72));

#else // __cplusplus

extern void _ZN9S20740C11C1Ev();
extern void _ZN9S20740C11D2Ev();
Name_Map name_map_S20740C11[] = {
  NSPAIR(_ZN9S20740C11C1Ev),
  NSPAIR(_ZN9S20740C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20740C2;
extern VTBL_ENTRY _ZTI8S20740C2[];
extern  VTBL_ENTRY _ZTV8S20740C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C2[];
extern Class_Descriptor cd_S20740C8;
extern VTBL_ENTRY _ZTI8S20740C8[];
extern  VTBL_ENTRY _ZTV8S20740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C8[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20740C8;
extern VTBL_ENTRY _ZTI8S20740C8[];
extern  VTBL_ENTRY _ZTV8S20740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C8[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S20740C10;
extern VTBL_ENTRY _ZTI9S20740C10[];
extern  VTBL_ENTRY _ZTV9S20740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20740C10[];
extern Class_Descriptor cd_S20740C12;
extern VTBL_ENTRY _ZTI9S20740C12[];
extern  VTBL_ENTRY _ZTV9S20740C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20740C12[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20740C9;
extern VTBL_ENTRY _ZTI8S20740C9[];
extern  VTBL_ENTRY _ZTV8S20740C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C9[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20740C8;
extern VTBL_ENTRY _ZTI8S20740C8[];
extern  VTBL_ENTRY _ZTV8S20740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C8[];
extern Class_Descriptor cd_S20740C10;
extern VTBL_ENTRY _ZTI9S20740C10[];
extern  VTBL_ENTRY _ZTV9S20740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20740C10[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
static Base_Class bases_S20740C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(84,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_S2264C28,    ABISELECT(84,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_S20740C2,    ABISELECT(40,20), //bcp->offset
    20, //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
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20740C8,    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
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(88,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
    9, //immediately_derived
  0, 0},
  {&cd_S20740C8,    ABISELECT(88,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20740C10,    ABISELECT(88,64), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S20740C12,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C28,    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
    12, //immediately_derived
  0, 0},
  {&cd_S20740C9,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C38,    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
    15, //immediately_derived
  0, 0},
  {&cd_S20740C8,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S20740C10,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C38,    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},
  {0}};
extern VTBL_ENTRY _ZTI9S20740C11[];
extern void _ZN9S20740C11D1Ev();
extern void _ZN9S20740C11D0Ev();
extern void ABISELECT(_ZThn24_N9S20740C11D1Ev,_ZThn12_N9S20740C11D1Ev)();
extern void ABISELECT(_ZThn24_N9S20740C11D0Ev,_ZThn12_N9S20740C11D0Ev)();
extern void ABISELECT(_ZTv0_n56_N9S20740C11D1Ev,_ZTv0_n28_N9S20740C11D1Ev)();
extern void ABISELECT(_ZThn88_N9S20740C11D1Ev,_ZThn64_N9S20740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20740C11D0Ev,_ZTv0_n28_N9S20740C11D0Ev)();
extern void ABISELECT(_ZThn88_N9S20740C11D0Ev,_ZThn64_N9S20740C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20740C11[] = {
  0,
  ABISELECT(88,64),
  ABISELECT(40,20),
  ABISELECT(84,60),
  ABISELECT(84,60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20740C11[0]),
  (VTBL_ENTRY)&_ZN9S20740C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20740C11D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20740C11[0]),
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N9S20740C11D1Ev,_ZThn12_N9S20740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N9S20740C11D0Ev,_ZThn12_N9S20740C11D0Ev),
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20740C11[0]),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI9S20740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20740C11D1Ev,_ZTv0_n28_N9S20740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20740C11D0Ev,_ZTv0_n28_N9S20740C11D0Ev),
};
extern VTBL_ENTRY _ZTV9S20740C11[];
extern void _ZN9S20740C12D1Ev();
extern void _ZN9S20740C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20740C12__9S20740C11[] = {
  0,
  ABISELECT(88,64),
  ABISELECT(40,20),
  ABISELECT(84,60),
  ABISELECT(84,60),
  0,
  (VTBL_ENTRY)&(_ZTI9S20740C12[0]),
  (VTBL_ENTRY)&_ZN9S20740C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20740C12D0Ev,
};
extern void _ZN8S20740C8D1Ev();
extern void _ZN8S20740C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20740C89S20740C12__9S20740C11[] = {
  ABISELECT(40,20),
  ABISELECT(84,60),
  ABISELECT(84,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
  (VTBL_ENTRY)&_ZN8S20740C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20740C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__8S20740C89S20740C12__9S20740C11[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__9S20740C12__9S20740C11[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20740C12[0]),
};
extern void ABISELECT(_ZTv0_n56_N9S20740C12D1Ev,_ZTv0_n28_N9S20740C12D1Ev)();
extern void ABISELECT(_ZThn88_N9S20740C12D1Ev,_ZThn64_N9S20740C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20740C12D0Ev,_ZTv0_n28_N9S20740C12D0Ev)();
extern void ABISELECT(_ZThn88_N9S20740C12D0Ev,_ZThn64_N9S20740C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20740C10__9S20740C12__9S20740C11[] = {
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI9S20740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20740C12D1Ev,_ZTv0_n28_N9S20740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20740C12D0Ev,_ZTv0_n28_N9S20740C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20740C9__9S20740C11[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C9[0]),
};
extern void _ZN9S20740C10D1Ev();
extern void _ZN9S20740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20740C10__A__9S20740C11[] = {
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S20740C10[0]),
  (VTBL_ENTRY)&_ZN9S20740C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20740C10D0Ev,
};
extern void _ZN8S20740C8D1Ev();
extern void _ZN8S20740C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20740C89S20740C10__A2__9S20740C11[] = {
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
  (VTBL_ENTRY)&_ZN8S20740C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20740C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__8S20740C89S20740C10__A2__9S20740C11[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__9S20740C10__A__9S20740C11[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20740C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__9S20740C11[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C2[0]),
};
extern void _ZN9S20740C10D1Ev();
extern void _ZN9S20740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20740C10__9S20740C11[] = {
  ABISELECT(-88,-64),
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S20740C10[0]),
  (VTBL_ENTRY)&_ZN9S20740C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20740C10D0Ev,
};
extern void _ZN8S20740C8D1Ev();
extern void _ZN8S20740C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20740C89S20740C10__A1__9S20740C11[] = {
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
  (VTBL_ENTRY)&_ZN8S20740C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20740C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__8S20740C89S20740C10__A1__9S20740C11[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__9S20740C10__9S20740C11[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI9S20740C10[0]),
};
static  VTT_ENTRY vtt_S20740C11[] = {
  {&(_ZTV9S20740C11[7]),  7,33},
  {&(_tg__ZTV9S20740C12__9S20740C11[7]),  7,9},
  {&(_tg__ZTV8S20740C89S20740C12__9S20740C11[5]),  5,7},
  {&(_tg__ZTV8S20740C2__8S20740C89S20740C12__9S20740C11[4]),  4,4},
  {&(_tg__ZTV8S20740C2__9S20740C12__9S20740C11[4]),  4,4},
  {&(_tg__ZTV9S20740C10__9S20740C12__9S20740C11[7]),  7,9},
  {&(_tg__ZTV8S20740C9__9S20740C11[3]),  3,3},
  {&(_tg__ZTV9S20740C10__A__9S20740C11[6]),  6,8},
  {&(_tg__ZTV8S20740C89S20740C10__A2__9S20740C11[5]),  5,7},
  {&(_tg__ZTV8S20740C2__8S20740C89S20740C10__A2__9S20740C11[4]),  4,4},
  {&(_tg__ZTV8S20740C2__9S20740C10__A__9S20740C11[4]),  4,4},
  {&(_ZTV9S20740C11[24]),  24,33},
  {&(_ZTV9S20740C11[31]),  31,33},
  {&(_ZTV9S20740C11[12]),  12,33},
  {&(_ZTV9S20740C11[18]),  18,33},
  {&(_tg__ZTV8S20740C2__9S20740C11[4]),  4,4},
  {&(_tg__ZTV9S20740C10__9S20740C11[6]),  6,8},
  {&(_tg__ZTV8S20740C89S20740C10__A1__9S20740C11[5]),  5,7},
  {&(_tg__ZTV8S20740C2__8S20740C89S20740C10__A1__9S20740C11[4]),  4,4},
  {&(_tg__ZTV8S20740C2__9S20740C10__9S20740C11[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S20740C11[];
extern  VTBL_ENTRY _ZTV9S20740C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20740C11[];
static VTBL_ENTRY alt_thunk_names203[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20740C12D0Ev,_ZTv0_n28_N9S20740C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S20740C12D0Ev,_ZThn64_N9S20740C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20740C12D1Ev,_ZTv0_n28_N9S20740C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S20740C12D1Ev,_ZThn64_N9S20740C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20740C11D0Ev,_ZTv0_n28_N9S20740C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S20740C11D0Ev,_ZThn64_N9S20740C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20740C11D1Ev,_ZTv0_n28_N9S20740C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N9S20740C11D1Ev,_ZThn64_N9S20740C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20740C11 = {  "S20740C11", // class name
  bases_S20740C11, 17,
  &(vtc_S20740C11[0]), // expected_vtbl_contents
  &(vtt_S20740C11[0]), // expected_vtt_contents
  ABISELECT(104,72), // object size
  NSPAIRA(_ZTI9S20740C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV9S20740C11),33, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S20740C11),20, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names203,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20740C5  : S2264C38 , virtual S2264C24 , virtual S20740C7 , virtual S20740C10 , S20740C11 {
  virtual  ~S20740C5(); // _ZN8S20740C5D2Ev
  S20740C5(); // tgen
};
//SIG(-1 S20740C5) C1{ BC2{ m} VBC3{ m} VBC4{ BC5{ VBC2 VBC6{ m} VBC7{ VBC2 VBC6 Fi[9]} vd Fp} BC6 VBC8{ BC6 VBC3} vd} VBC9{ VBC6 BC2 BC5 VBC3 vd} BC10{ BC11{ BC6 VBC7 BC5 BC2 VBC9 vd} BC8 BC9 BC2 vd} vd}


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

static void Test_S20740C5()
{
  extern Class_Descriptor cd_S20740C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,22)];
    init_test(&cd_S20740C5, buf);
    S20740C5 *dp, &lv = *(dp=new (buf) S20740C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,84), "sizeof(S20740C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20740C5)");
    /*is_ambiguous_... S20740C5::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), ABISELECT(41,21), "S20740C5");
    check_base_class_offset(lv, (S2264C24*), 0, "S20740C5");
    /*is_ambiguous_... S20740C5::S20740C9 */ AMB_check_base_class_offset(lv, (S2264C24*)(S20740C9*), 0, "S20740C5");
    /*is_ambiguous_... S20740C5::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S20740C10*), 0, "S20740C5");
    check_base_class_offset(lv, (S2264C24*)(S20740C9*)(S20740C11*), 0, "S20740C5");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S20740C10*)(S20740C11*), 0, "S20740C5");
    check_base_class_offset(lv, (S2264C38*)(S20740C8*)(S20740C7*), ABISELECT(64,32), "S20740C5");
    check_base_class_offset(lv, (S2264C38*)(S20740C2*), ABISELECT(64,32), "S20740C5");
    /*is_ambiguous_... S20740C5::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20740C8*)(S20740C10*), ABISELECT(64,32), "S20740C5");
    /*is_ambiguous_... S20740C12::S20740C8 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20740C8*)(S20740C12*)(S20740C11*), ABISELECT(64,32), "S20740C5");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20740C8*)(S20740C10*)(S20740C11*), ABISELECT(64,32), "S20740C5");
    check_base_class_offset(lv, (S2264C28*)(S20740C8*)(S20740C7*), ABISELECT(64,32), "S20740C5");
    check_base_class_offset(lv, (S2264C28*)(S20740C2*), ABISELECT(64,32), "S20740C5");
    /*is_ambiguous_... S20740C5::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20740C10*), ABISELECT(64,32), "S20740C5");
    /*is_ambiguous_... S20740C5::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20740C8*)(S20740C10*), ABISELECT(64,32), "S20740C5");
    /*is_ambiguous_... S20740C12::S20740C8 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20740C8*)(S20740C12*)(S20740C11*), ABISELECT(64,32), "S20740C5");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20740C10*)(S20740C11*), ABISELECT(64,32), "S20740C5");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20740C8*)(S20740C10*)(S20740C11*), ABISELECT(64,32), "S20740C5");
    check_base_class_offset(lv, (S20740C2*)(S20740C8*)(S20740C7*), ABISELECT(64,32), "S20740C5");
    /*is_ambiguous_... S20740C5::S20740C10 */ AMB_check_base_class_offset(lv, (S20740C2*)(S20740C8*)(S20740C10*), ABISELECT(64,32), "S20740C5");
    check_base_class_offset(lv, (S20740C2*)(S20740C12*)(S20740C11*), ABISELECT(64,32), "S20740C5");
    /*is_ambiguous_... S20740C12::S20740C8 */ AMB_check_base_class_offset(lv, (S20740C2*)(S20740C8*)(S20740C12*)(S20740C11*), ABISELECT(64,32), "S20740C5");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S20740C2*)(S20740C8*)(S20740C10*)(S20740C11*), ABISELECT(64,32), "S20740C5");
    check_base_class_offset(lv, (S20740C8*)(S20740C7*), ABISELECT(48,24), "S20740C5");
    /*is_ambiguous_... S20740C7::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20740C7*), ABISELECT(48,24), "S20740C5");
    /*is_ambiguous_... S20740C5::S20740C9 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20740C9*), ABISELECT(112,72), "S20740C5");
    check_base_class_offset(lv, (S20740C9*)(S20740C7*), ABISELECT(112,72), "S20740C5");
    check_base_class_offset(lv, (S20740C7*), ABISELECT(48,24), "S20740C5");
    /*is_ambiguous_... S20740C5::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20740C10*), ABISELECT(120,76), "S20740C5");
    /*is_ambiguous_... S20740C5::S20740C10 */ AMB_check_base_class_offset(lv, (S20740C8*)(S20740C10*), ABISELECT(120,76), "S20740C5");
    /*is_ambiguous_... S20740C5::S20740C10 */ AMB_check_base_class_offset(lv, (S20740C10*), ABISELECT(120,76), "S20740C5");
    check_base_class_offset(lv, (S20740C10*)(S20740C12*)(S20740C11*), ABISELECT(120,76), "S20740C5");
    /*is_ambiguous_... S20740C12::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20740C12*)(S20740C11*), 0, "S20740C5");
    /*is_ambiguous_... S20740C12::S20740C8 */ AMB_check_base_class_offset(lv, (S20740C8*)(S20740C12*)(S20740C11*), 0, "S20740C5");
    /*is_ambiguous_... S20740C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20740C12*)(S20740C11*), 0, "S20740C5");
    check_base_class_offset(lv, (S20740C12*)(S20740C11*), 0, "S20740C5");
    check_base_class_offset(lv, (S2264C28*)(S20740C9*)(S20740C11*), ABISELECT(16,8), "S20740C5");
    check_base_class_offset(lv, (S20740C9*)(S20740C11*), ABISELECT(16,8), "S20740C5");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20740C10*)(S20740C11*), ABISELECT(24,12), "S20740C5");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S20740C8*)(S20740C10*)(S20740C11*), ABISELECT(24,12), "S20740C5");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S20740C10*)(S20740C11*), ABISELECT(24,12), "S20740C5");
    /*is_ambiguous_... S20740C11::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20740C11*), ABISELECT(40,20), "S20740C5");
    check_base_class_offset(lv, (S20740C11*), 0, "S20740C5");
    test_class_info(&lv, &cd_S20740C5);
    dp->~S20740C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20740C5(Test_S20740C5, "S20740C5", ABISELECT(136,84));

#else // __cplusplus

extern void _ZN8S20740C5C1Ev();
extern void _ZN8S20740C5D2Ev();
Name_Map name_map_S20740C5[] = {
  NSPAIR(_ZN8S20740C5C1Ev),
  NSPAIR(_ZN8S20740C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20740C2;
extern VTBL_ENTRY _ZTI8S20740C2[];
extern  VTBL_ENTRY _ZTV8S20740C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C2[];
extern Class_Descriptor cd_S20740C8;
extern VTBL_ENTRY _ZTI8S20740C8[];
extern  VTBL_ENTRY _ZTV8S20740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C8[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20740C9;
extern VTBL_ENTRY _ZTI8S20740C9[];
extern  VTBL_ENTRY _ZTV8S20740C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C9[];
extern Class_Descriptor cd_S20740C7;
extern VTBL_ENTRY _ZTI8S20740C7[];
extern  VTBL_ENTRY _ZTV8S20740C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C7[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20740C8;
extern VTBL_ENTRY _ZTI8S20740C8[];
extern  VTBL_ENTRY _ZTV8S20740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C8[];
extern Class_Descriptor cd_S20740C10;
extern VTBL_ENTRY _ZTI9S20740C10[];
extern  VTBL_ENTRY _ZTV9S20740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20740C10[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20740C8;
extern VTBL_ENTRY _ZTI8S20740C8[];
extern  VTBL_ENTRY _ZTV8S20740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C8[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20740C12;
extern VTBL_ENTRY _ZTI9S20740C12[];
extern  VTBL_ENTRY _ZTV9S20740C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20740C12[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20740C9;
extern VTBL_ENTRY _ZTI8S20740C9[];
extern  VTBL_ENTRY _ZTV8S20740C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C9[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20740C8;
extern VTBL_ENTRY _ZTI8S20740C8[];
extern  VTBL_ENTRY _ZTV8S20740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C8[];
extern Class_Descriptor cd_S20740C10;
extern VTBL_ENTRY _ZTI9S20740C10[];
extern  VTBL_ENTRY _ZTV9S20740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20740C10[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20740C11;
extern VTBL_ENTRY _ZTI9S20740C11[];
extern  VTBL_ENTRY _ZTV9S20740C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20740C11[];
static Base_Class bases_S20740C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    ABISELECT(41,21), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C38,    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, 1},
  {&cd_S2264C28,    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, 1},
  {&cd_S20740C2,    ABISELECT(64,32), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S20740C8,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2264C28,    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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C28,    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
    8, //immediately_derived
  0, 0},
  {&cd_S20740C9,    ABISELECT(112,72), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20740C7,    ABISELECT(48,24), //bcp->offset
    22, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C38,    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
    12, //immediately_derived
  0, 0},
  {&cd_S20740C8,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    12, //immediately_derived
  0, 0},
  {&cd_S20740C10,    ABISELECT(120,76), //bcp->offset
    39, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20740C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20740C12,    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
    23, //immediately_derived
  0, 0},
  {&cd_S2264C28,    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
    18, //immediately_derived
  0, 0},
  {&cd_S20740C9,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    21, //immediately_derived
  0, 0},
  {&cd_S20740C8,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20740C10,    ABISELECT(24,12), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    23, //immediately_derived
  0, 0},
  {&cd_S20740C11,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20740C5[];
extern void _ZN8S20740C5D1Ev();
extern void _ZN8S20740C5D0Ev();
extern void ABISELECT(_ZThn24_N8S20740C5D1Ev,_ZThn12_N8S20740C5D1Ev)();
extern void ABISELECT(_ZThn24_N8S20740C5D0Ev,_ZThn12_N8S20740C5D0Ev)();
extern void ABISELECT(_ZTv0_n64_N8S20740C5D1Ev,_ZTv0_n32_N8S20740C5D1Ev)();
extern void ABISELECT(_ZThn48_N8S20740C5D1Ev,_ZThn24_N8S20740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20740C5D0Ev,_ZTv0_n32_N8S20740C5D0Ev)();
extern void ABISELECT(_ZThn48_N8S20740C5D0Ev,_ZThn24_N8S20740C5D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20740C5D1Ev,_ZTv0_n28_N8S20740C5D1Ev)();
extern void ABISELECT(_ZThn120_N8S20740C5D1Ev,_ZThn76_N8S20740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20740C5D0Ev,_ZTv0_n28_N8S20740C5D0Ev)();
extern void ABISELECT(_ZThn120_N8S20740C5D0Ev,_ZThn76_N8S20740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20740C5[] = {
  ABISELECT(112,72),
  ABISELECT(48,24),
  0,
  ABISELECT(120,76),
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C5[0]),
  (VTBL_ENTRY)&_ZN8S20740C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20740C5D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20740C5[0]),
  ABISELECT(-24,-12),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S20740C5D1Ev,_ZThn12_N8S20740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S20740C5D0Ev,_ZThn12_N8S20740C5D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20740C5D1Ev,_ZTv0_n32_N8S20740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20740C5D0Ev,_ZTv0_n32_N8S20740C5D0Ev),
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20740C5[0]),
  ABISELECT(-112,-72),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI8S20740C5[0]),
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S20740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20740C5D1Ev,_ZTv0_n28_N8S20740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20740C5D0Ev,_ZTv0_n28_N8S20740C5D0Ev),
};
extern VTBL_ENTRY _ZTV8S20740C5[];
extern void _ZN9S20740C11D1Ev();
extern void _ZN9S20740C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20740C11__8S20740C5[] = {
  0,
  ABISELECT(120,76),
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S20740C11[0]),
  (VTBL_ENTRY)&_ZN9S20740C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20740C11D0Ev,
};
extern void _ZN9S20740C12D1Ev();
extern void _ZN9S20740C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20740C129S20740C11__8S20740C5[] = {
  0,
  ABISELECT(120,76),
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI9S20740C12[0]),
  (VTBL_ENTRY)&_ZN9S20740C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20740C12D0Ev,
};
extern void _ZN8S20740C8D1Ev();
extern void _ZN8S20740C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20740C89S20740C129S20740C11__A2__8S20740C5[] = {
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
  (VTBL_ENTRY)&_ZN8S20740C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20740C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__8S20740C89S20740C129S20740C11__A2__8S20740C5[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__9S20740C129S20740C11__8S20740C5[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S20740C12[0]),
};
extern void ABISELECT(_ZTv0_n56_N9S20740C12D1Ev,_ZTv0_n28_N9S20740C12D1Ev)();
extern void ABISELECT(_ZThn120_N9S20740C12D1Ev,_ZThn76_N9S20740C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20740C12D0Ev,_ZTv0_n28_N9S20740C12D0Ev)();
extern void ABISELECT(_ZThn120_N9S20740C12D0Ev,_ZThn76_N9S20740C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20740C10__9S20740C129S20740C11__8S20740C5[] = {
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI9S20740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20740C12D1Ev,_ZTv0_n28_N9S20740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20740C12D0Ev,_ZTv0_n28_N9S20740C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20740C99S20740C11__A1__8S20740C5[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C9[0]),
};
extern void _ZN9S20740C10D1Ev();
extern void _ZN9S20740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20740C109S20740C11__A1__8S20740C5[] = {
  ABISELECT(-24,-12),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI9S20740C10[0]),
  (VTBL_ENTRY)&_ZN9S20740C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20740C10D0Ev,
};
extern void _ZN8S20740C8D1Ev();
extern void _ZN8S20740C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20740C89S20740C109S20740C11__A3__8S20740C5[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
  (VTBL_ENTRY)&_ZN8S20740C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20740C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__8S20740C89S20740C109S20740C11__A3__8S20740C5[] = {
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__9S20740C109S20740C11__A1__8S20740C5[] = {
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI9S20740C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__9S20740C11__8S20740C5[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI9S20740C11[0]),
};
extern void ABISELECT(_ZTv0_n56_N9S20740C11D1Ev,_ZTv0_n28_N9S20740C11D1Ev)();
extern void ABISELECT(_ZThn120_N9S20740C11D1Ev,_ZThn76_N9S20740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20740C11D0Ev,_ZTv0_n28_N9S20740C11D0Ev)();
extern void ABISELECT(_ZThn120_N9S20740C11D0Ev,_ZThn76_N9S20740C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20740C10__9S20740C11__8S20740C5[] = {
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI9S20740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20740C11D1Ev,_ZTv0_n28_N9S20740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20740C11D0Ev,_ZTv0_n28_N9S20740C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20740C9__9S20740C11__8S20740C5[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20740C11[0]),
};
extern void ABISELECT(_ZThn24_N9S20740C11D1Ev,_ZThn12_N9S20740C11D1Ev)();
extern void ABISELECT(_ZThn24_N9S20740C11D0Ev,_ZThn12_N9S20740C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20740C10__A__9S20740C11__8S20740C5[] = {
  ABISELECT(-24,-12),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N9S20740C11D1Ev,_ZThn12_N9S20740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N9S20740C11D0Ev,_ZThn12_N9S20740C11D0Ev),
};
extern void _ZN8S20740C7D1Ev();
extern void _ZN8S20740C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20740C7__8S20740C5[] = {
  ABISELECT(-48,-24),
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C7[0]),
  (VTBL_ENTRY)&_ZN8S20740C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20740C7D0Ev,
};
extern void _ZN8S20740C8D1Ev();
extern void _ZN8S20740C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20740C88S20740C7__8S20740C5[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
  (VTBL_ENTRY)&_ZN8S20740C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20740C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__8S20740C88S20740C7__8S20740C5[] = {
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__8S20740C7__8S20740C5[] = {
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20740C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C9__8S20740C7__8S20740C5[] = {
  ABISELECT(-112,-72),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI8S20740C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__8S20740C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C9__8S20740C5[] = {
  ABISELECT(-112,-72),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C9[0]),
};
extern void _ZN9S20740C10D1Ev();
extern void _ZN9S20740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20740C10__8S20740C5[] = {
  ABISELECT(-120,-76),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI9S20740C10[0]),
  (VTBL_ENTRY)&_ZN9S20740C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20740C10D0Ev,
};
extern void _ZN8S20740C8D1Ev();
extern void _ZN8S20740C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20740C89S20740C10__A1__8S20740C5[] = {
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
  (VTBL_ENTRY)&_ZN8S20740C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20740C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__8S20740C89S20740C10__A1__8S20740C5[] = {
  0,
  0,
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__9S20740C10__8S20740C5[] = {
  0,
  0,
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI9S20740C10[0]),
};
static  VTT_ENTRY vtt_S20740C5[] = {
  {&(_ZTV8S20740C5[9]),  9,48},
  {&(_tg__ZTV9S20740C11__8S20740C5[7]),  7,9},
  {&(_tg__ZTV9S20740C129S20740C11__8S20740C5[7]),  7,9},
  {&(_tg__ZTV8S20740C89S20740C129S20740C11__A2__8S20740C5[5]),  5,7},
  {&(_tg__ZTV8S20740C2__8S20740C89S20740C129S20740C11__A2__8S20740C5[4]),  4,4},
  {&(_tg__ZTV8S20740C2__9S20740C129S20740C11__8S20740C5[4]),  4,4},
  {&(_tg__ZTV9S20740C10__9S20740C129S20740C11__8S20740C5[7]),  7,9},
  {&(_tg__ZTV8S20740C99S20740C11__A1__8S20740C5[3]),  3,3},
  {&(_tg__ZTV9S20740C109S20740C11__A1__8S20740C5[6]),  6,8},
  {&(_tg__ZTV8S20740C89S20740C109S20740C11__A3__8S20740C5[5]),  5,7},
  {&(_tg__ZTV8S20740C2__8S20740C89S20740C109S20740C11__A3__8S20740C5[4]),  4,4},
  {&(_tg__ZTV8S20740C2__9S20740C109S20740C11__A1__8S20740C5[4]),  4,4},
  {&(_tg__ZTV8S20740C2__9S20740C11__8S20740C5[4]),  4,4},
  {&(_tg__ZTV9S20740C10__9S20740C11__8S20740C5[7]),  7,9},
  {&(_tg__ZTV8S20740C9__9S20740C11__8S20740C5[3]),  3,3},
  {&(_tg__ZTV9S20740C10__A__9S20740C11__8S20740C5[6]),  6,8},
  {&(_ZTV8S20740C5[30]),  30,48},
  {&(_ZTV8S20740C5[36]),  36,48},
  {&(_ZTV8S20740C5[39]),  39,48},
  {&(_ZTV8S20740C5[46]),  46,48},
  {&(_ZTV8S20740C5[14]),  14,48},
  {&(_ZTV8S20740C5[20]),  20,48},
  {&(_tg__ZTV8S20740C7__8S20740C5[7]),  7,9},
  {&(_tg__ZTV8S20740C88S20740C7__8S20740C5[5]),  5,7},
  {&(_tg__ZTV8S20740C2__8S20740C88S20740C7__8S20740C5[4]),  4,4},
  {&(_tg__ZTV8S20740C2__8S20740C7__8S20740C5[4]),  4,4},
  {&(_tg__ZTV8S20740C9__8S20740C7__8S20740C5[3]),  3,3},
  {&(_tg__ZTV8S20740C2__8S20740C5[4]),  4,4},
  {&(_tg__ZTV8S20740C9__8S20740C5[3]),  3,3},
  {&(_tg__ZTV9S20740C10__8S20740C5[6]),  6,8},
  {&(_tg__ZTV8S20740C89S20740C10__A1__8S20740C5[5]),  5,7},
  {&(_tg__ZTV8S20740C2__8S20740C89S20740C10__A1__8S20740C5[4]),  4,4},
  {&(_tg__ZTV8S20740C2__9S20740C10__8S20740C5[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20740C5[];
extern  VTBL_ENTRY _ZTV8S20740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C5[];
static VTBL_ENTRY alt_thunk_names204[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20740C11D0Ev,_ZTv0_n28_N9S20740C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S20740C11D0Ev,_ZThn76_N9S20740C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20740C11D1Ev,_ZTv0_n28_N9S20740C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S20740C11D1Ev,_ZThn76_N9S20740C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20740C12D0Ev,_ZTv0_n28_N9S20740C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S20740C12D0Ev,_ZThn76_N9S20740C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20740C12D1Ev,_ZTv0_n28_N9S20740C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S20740C12D1Ev,_ZThn76_N9S20740C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20740C5D0Ev,_ZTv0_n28_N8S20740C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20740C5D0Ev,_ZThn76_N8S20740C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20740C5D1Ev,_ZTv0_n28_N8S20740C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S20740C5D1Ev,_ZThn76_N8S20740C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20740C5D0Ev,_ZTv0_n32_N8S20740C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20740C5D0Ev,_ZThn24_N8S20740C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20740C5D1Ev,_ZTv0_n32_N8S20740C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20740C5D1Ev,_ZThn24_N8S20740C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20740C5 = {  "S20740C5", // class name
  bases_S20740C5, 24,
  &(vtc_S20740C5[0]), // expected_vtbl_contents
  &(vtt_S20740C5[0]), // expected_vtt_contents
  ABISELECT(136,84), // object size
  NSPAIRA(_ZTI8S20740C5),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S20740C5),48, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20740C5),33, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names204,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20740C1  : virtual S20740C2 , virtual S20740C5 , S2264C24 , S20740C12 {
  virtual  ~S20740C1(); // _ZN8S20740C1D2Ev
  S20740C1(); // tgen
};
//SIG(1 S20740C1) C1{ VBC2{ VBC3{ m} VBC4{ m} Fi[9]} VBC5{ BC3 VBC6{ m} VBC7{ BC8{ VBC3 VBC4 VBC2 vd Fp} BC4 VBC9{ BC4 VBC6} vd} VBC10{ VBC4 BC3 BC8 VBC6 vd} BC11{ BC12{ BC4 VBC2 BC8 BC3 VBC10 vd} BC9 BC10 BC3 vd} vd} BC6 BC12 vd}


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

static void Test_S20740C1()
{
  extern Class_Descriptor cd_S20740C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(20,25)];
    init_test(&cd_S20740C1, buf);
    S20740C1 *dp, &lv = *(dp=new (buf) S20740C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,96), "sizeof(S20740C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20740C1)");
    check_base_class_offset(lv, (S2264C38*)(S20740C2*), ABISELECT(60,48), "S20740C1");
    check_base_class_offset(lv, (S2264C38*)(S20740C8*)(S20740C7*), ABISELECT(60,48), "S20740C1");
    /*is_ambiguous_... S20740C1::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20740C8*)(S20740C10*), ABISELECT(60,48), "S20740C1");
    /*is_ambiguous_... S20740C12::S20740C8 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20740C8*)(S20740C12*)(S20740C11*)(S20740C5*), ABISELECT(60,48), "S20740C1");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20740C8*)(S20740C10*)(S20740C11*)(S20740C5*), ABISELECT(60,48), "S20740C1");
    /*is_ambiguous_... S20740C1::S20740C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20740C8*)(S20740C12*), ABISELECT(60,48), "S20740C1");
    check_base_class_offset(lv, (S2264C28*)(S20740C2*), ABISELECT(60,48), "S20740C1");
    check_base_class_offset(lv, (S2264C28*)(S20740C8*)(S20740C7*), ABISELECT(60,48), "S20740C1");
    /*is_ambiguous_... S20740C1::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20740C10*), ABISELECT(60,48), "S20740C1");
    /*is_ambiguous_... S20740C1::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20740C8*)(S20740C10*), ABISELECT(60,48), "S20740C1");
    /*is_ambiguous_... S20740C12::S20740C8 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20740C8*)(S20740C12*)(S20740C11*)(S20740C5*), ABISELECT(60,48), "S20740C1");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20740C10*)(S20740C11*)(S20740C5*), ABISELECT(60,48), "S20740C1");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20740C8*)(S20740C10*)(S20740C11*)(S20740C5*), ABISELECT(60,48), "S20740C1");
    /*is_ambiguous_... S20740C1::S20740C12 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20740C8*)(S20740C12*), ABISELECT(60,48), "S20740C1");
    check_base_class_offset(lv, (S20740C2*), ABISELECT(16,8), "S20740C1");
    check_base_class_offset(lv, (S20740C2*)(S20740C8*)(S20740C7*), ABISELECT(16,8), "S20740C1");
    /*is_ambiguous_... S20740C1::S20740C10 */ AMB_check_base_class_offset(lv, (S20740C2*)(S20740C8*)(S20740C10*), ABISELECT(16,8), "S20740C1");
    check_base_class_offset(lv, (S20740C2*)(S20740C12*)(S20740C11*)(S20740C5*), ABISELECT(16,8), "S20740C1");
    /*is_ambiguous_... S20740C12::S20740C8 */ AMB_check_base_class_offset(lv, (S20740C2*)(S20740C8*)(S20740C12*)(S20740C11*)(S20740C5*), ABISELECT(16,8), "S20740C1");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S20740C2*)(S20740C8*)(S20740C10*)(S20740C11*)(S20740C5*), ABISELECT(16,8), "S20740C1");
    /*is_ambiguous_... S20740C1::S20740C12 */ AMB_check_base_class_offset(lv, (S20740C2*)(S20740C12*), ABISELECT(16,8), "S20740C1");
    /*is_ambiguous_... S20740C1::S20740C12 */ AMB_check_base_class_offset(lv, (S20740C2*)(S20740C8*)(S20740C12*), ABISELECT(16,8), "S20740C1");
    /*is_ambiguous_... S20740C5::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20740C5*), ABISELECT(105,73), "S20740C1");
    check_base_class_offset(lv, (S2264C24*)(S20740C5*), ABISELECT(106,74), "S20740C1");
    /*is_ambiguous_... S20740C1::S20740C9 */ AMB_check_base_class_offset(lv, (S2264C24*)(S20740C9*), ABISELECT(106,74), "S20740C1");
    /*is_ambiguous_... S20740C1::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S20740C10*), ABISELECT(106,74), "S20740C1");
    check_base_class_offset(lv, (S2264C24*)(S20740C9*)(S20740C11*)(S20740C5*), ABISELECT(106,74), "S20740C1");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S20740C10*)(S20740C11*)(S20740C5*), ABISELECT(106,74), "S20740C1");
    check_base_class_offset(lv, (S20740C8*)(S20740C7*), ABISELECT(112,76), "S20740C1");
    /*is_ambiguous_... S20740C7::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20740C7*), ABISELECT(112,76), "S20740C1");
    /*is_ambiguous_... S20740C1::S20740C9 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20740C9*), ABISELECT(128,84), "S20740C1");
    check_base_class_offset(lv, (S20740C9*)(S20740C7*), ABISELECT(128,84), "S20740C1");
    check_base_class_offset(lv, (S20740C7*)(S20740C5*), ABISELECT(112,76), "S20740C1");
    /*is_ambiguous_... S20740C1::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20740C10*), ABISELECT(136,88), "S20740C1");
    /*is_ambiguous_... S20740C1::S20740C10 */ AMB_check_base_class_offset(lv, (S20740C8*)(S20740C10*), ABISELECT(136,88), "S20740C1");
    /*is_ambiguous_... S20740C5::S20740C10 */ AMB_check_base_class_offset(lv, (S20740C10*)(S20740C5*), ABISELECT(136,88), "S20740C1");
    check_base_class_offset(lv, (S20740C10*)(S20740C12*)(S20740C11*)(S20740C5*), ABISELECT(136,88), "S20740C1");
    /*is_ambiguous_... S20740C1::S20740C12 */ AMB_check_base_class_offset(lv, (S20740C10*)(S20740C12*), ABISELECT(136,88), "S20740C1");
    /*is_ambiguous_... S20740C12::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20740C12*)(S20740C11*)(S20740C5*), ABISELECT(64,52), "S20740C1");
    /*is_ambiguous_... S20740C12::S20740C8 */ AMB_check_base_class_offset(lv, (S20740C8*)(S20740C12*)(S20740C11*)(S20740C5*), ABISELECT(64,52), "S20740C1");
    /*is_ambiguous_... S20740C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20740C12*)(S20740C11*)(S20740C5*), ABISELECT(64,52), "S20740C1");
    check_base_class_offset(lv, (S20740C12*)(S20740C11*)(S20740C5*), ABISELECT(64,52), "S20740C1");
    check_base_class_offset(lv, (S2264C28*)(S20740C9*)(S20740C11*)(S20740C5*), ABISELECT(80,60), "S20740C1");
    check_base_class_offset(lv, (S20740C9*)(S20740C11*)(S20740C5*), ABISELECT(80,60), "S20740C1");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20740C10*)(S20740C11*)(S20740C5*), ABISELECT(88,64), "S20740C1");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S20740C8*)(S20740C10*)(S20740C11*)(S20740C5*), ABISELECT(88,64), "S20740C1");
    /*is_ambiguous_... S20740C11::S20740C10 */ AMB_check_base_class_offset(lv, (S20740C10*)(S20740C11*)(S20740C5*), ABISELECT(88,64), "S20740C1");
    /*is_ambiguous_... S20740C11::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20740C11*)(S20740C5*), ABISELECT(104,72), "S20740C1");
    check_base_class_offset(lv, (S20740C11*)(S20740C5*), ABISELECT(64,52), "S20740C1");
    check_base_class_offset(lv, (S20740C5*), ABISELECT(64,52), "S20740C1");
    /*is_ambiguous_... S20740C1::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*), 0, "S20740C1");
    /*is_ambiguous_... S20740C1::S20740C12 */ AMB_check_base_class_offset(lv, (S2264C28*)(S20740C12*), 0, "S20740C1");
    /*is_ambiguous_... S20740C1::S20740C12 */ AMB_check_base_class_offset(lv, (S20740C8*)(S20740C12*), 0, "S20740C1");
    /*is_ambiguous_... S20740C1::S20740C12 */ AMB_check_base_class_offset(lv, (S2264C38*)(S20740C12*), 0, "S20740C1");
    /*is_ambiguous_... S20740C1::S20740C12 */ AMB_check_base_class_offset(lv, (S20740C12*), 0, "S20740C1");
    test_class_info(&lv, &cd_S20740C1);
    dp->~S20740C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20740C1(Test_S20740C1, "S20740C1", ABISELECT(152,96));

#else // __cplusplus

extern void _ZN8S20740C1C1Ev();
extern void _ZN8S20740C1D2Ev();
Name_Map name_map_S20740C1[] = {
  NSPAIR(_ZN8S20740C1C1Ev),
  NSPAIR(_ZN8S20740C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20740C2;
extern VTBL_ENTRY _ZTI8S20740C2[];
extern  VTBL_ENTRY _ZTV8S20740C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C2[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S20740C8;
extern VTBL_ENTRY _ZTI8S20740C8[];
extern  VTBL_ENTRY _ZTV8S20740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C8[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20740C9;
extern VTBL_ENTRY _ZTI8S20740C9[];
extern  VTBL_ENTRY _ZTV8S20740C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C9[];
extern Class_Descriptor cd_S20740C7;
extern VTBL_ENTRY _ZTI8S20740C7[];
extern  VTBL_ENTRY _ZTV8S20740C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C7[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20740C8;
extern VTBL_ENTRY _ZTI8S20740C8[];
extern  VTBL_ENTRY _ZTV8S20740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C8[];
extern Class_Descriptor cd_S20740C10;
extern VTBL_ENTRY _ZTI9S20740C10[];
extern  VTBL_ENTRY _ZTV9S20740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20740C10[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20740C8;
extern VTBL_ENTRY _ZTI8S20740C8[];
extern  VTBL_ENTRY _ZTV8S20740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C8[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20740C12;
extern VTBL_ENTRY _ZTI9S20740C12[];
extern  VTBL_ENTRY _ZTV9S20740C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20740C12[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20740C9;
extern VTBL_ENTRY _ZTI8S20740C9[];
extern  VTBL_ENTRY _ZTV8S20740C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C9[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20740C8;
extern VTBL_ENTRY _ZTI8S20740C8[];
extern  VTBL_ENTRY _ZTV8S20740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C8[];
extern Class_Descriptor cd_S20740C10;
extern VTBL_ENTRY _ZTI9S20740C10[];
extern  VTBL_ENTRY _ZTV9S20740C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20740C10[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20740C11;
extern VTBL_ENTRY _ZTI9S20740C11[];
extern  VTBL_ENTRY _ZTV9S20740C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20740C11[];
extern Class_Descriptor cd_S20740C5;
extern VTBL_ENTRY _ZTI8S20740C5[];
extern  VTBL_ENTRY _ZTV8S20740C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C5[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20740C8;
extern VTBL_ENTRY _ZTI8S20740C8[];
extern  VTBL_ENTRY _ZTV8S20740C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C8[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20740C12;
extern VTBL_ENTRY _ZTI9S20740C12[];
extern  VTBL_ENTRY _ZTV9S20740C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S20740C12[];
static Base_Class bases_S20740C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    ABISELECT(60,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, 1},
  {&cd_S2264C28,    ABISELECT(60,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, 1},
  {&cd_S20740C2,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C38,    ABISELECT(105,73), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C24,    ABISELECT(106,74), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20740C8,    ABISELECT(112,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(112,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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(128,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_S20740C9,    ABISELECT(128,84), //bcp->offset
    49, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S20740C7,    ABISELECT(112,76), //bcp->offset
    39, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S2264C38,    ABISELECT(136,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
    12, //immediately_derived
  0, 0},
  {&cd_S20740C8,    ABISELECT(136,88), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    44, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S20740C10,    ABISELECT(136,88), //bcp->offset
    52, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(64,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
    16, //immediately_derived
  0, 0},
  {&cd_S20740C8,    ABISELECT(64,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(64,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
    16, //immediately_derived
  0, 0},
  {&cd_S20740C12,    ABISELECT(64,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(80,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
    18, //immediately_derived
  0, 0},
  {&cd_S20740C9,    ABISELECT(80,60), //bcp->offset
    28, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    22, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(88,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
    21, //immediately_derived
  0, 0},
  {&cd_S20740C8,    ABISELECT(88,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S20740C10,    ABISELECT(88,64), //bcp->offset
    31, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(104,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
    23, //immediately_derived
  0, 0},
  {&cd_S20740C11,    ABISELECT(64,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S20740C5,    ABISELECT(64,52), //bcp->offset
    16, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20740C8,    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
    14, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    -1, //init_seq
    29, //immediately_derived
  0, 0},
  {&cd_S20740C12,    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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S20740C1[];
extern void _ZN8S20740C1D1Ev();
extern void _ZN8S20740C1D0Ev();
extern void ABISELECT(_ZTv0_n80_N8S20740C1D1Ev,_ZTv0_n40_N8S20740C1D1Ev)();
extern void ABISELECT(_ZThn64_N8S20740C1D1Ev,_ZThn52_N8S20740C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S20740C1D0Ev,_ZTv0_n40_N8S20740C1D0Ev)();
extern void ABISELECT(_ZThn64_N8S20740C1D0Ev,_ZThn52_N8S20740C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTvn24_n80_N8S20740C1D1Ev,_ZTvn12_n40_N8S20740C1D1Ev)();
extern void ABISELECT(_ZTvn24_n80_N8S20740C1D0Ev,_ZTvn12_n40_N8S20740C1D0Ev)();
extern void ABISELECT(_ZTv0_n64_N8S20740C1D1Ev,_ZTv0_n32_N8S20740C1D1Ev)();
extern void ABISELECT(_ZThn112_N8S20740C1D1Ev,_ZThn76_N8S20740C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20740C1D0Ev,_ZTv0_n32_N8S20740C1D0Ev)();
extern void ABISELECT(_ZThn112_N8S20740C1D0Ev,_ZThn76_N8S20740C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20740C1D1Ev,_ZTv0_n28_N8S20740C1D1Ev)();
extern void ABISELECT(_ZThn136_N8S20740C1D1Ev,_ZThn88_N8S20740C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20740C1D0Ev,_ZTv0_n28_N8S20740C1D0Ev)();
extern void ABISELECT(_ZThn136_N8S20740C1D0Ev,_ZThn88_N8S20740C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20740C1[] = {
  ABISELECT(128,84),
  ABISELECT(112,76),
  ABISELECT(64,52),
  ABISELECT(106,74),
  ABISELECT(136,88),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C1[0]),
  (VTBL_ENTRY)&_ZN8S20740C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20740C1D0Ev,
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20740C1[0]),
  ABISELECT(-64,-52),
  ABISELECT(64,32),
  ABISELECT(48,24),
  ABISELECT(42,22),
  ABISELECT(72,36),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI8S20740C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20740C1D1Ev,_ZTv0_n40_N8S20740C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S20740C1D0Ev,_ZTv0_n40_N8S20740C1D0Ev),
  ABISELECT(26,14),
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI8S20740C1[0]),
  ABISELECT(18,10),
  ABISELECT(-72,-56),
  ABISELECT(-28,-16),
  ABISELECT(-28,-16),
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI8S20740C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n80_N8S20740C1D1Ev,_ZTvn12_n40_N8S20740C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTvn24_n80_N8S20740C1D0Ev,_ZTvn12_n40_N8S20740C1D0Ev),
  ABISELECT(-112,-76),
  ABISELECT(-6,-2),
  ABISELECT(16,8),
  ABISELECT(-96,-68),
  ABISELECT(-52,-28),
  ABISELECT(-52,-28),
  ABISELECT(-112,-76),
  (VTBL_ENTRY)&(_ZTI8S20740C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20740C1D1Ev,_ZTv0_n32_N8S20740C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20740C1D0Ev,_ZTv0_n32_N8S20740C1D0Ev),
  ABISELECT(-22,-10),
  ABISELECT(-128,-84),
  (VTBL_ENTRY)&(_ZTI8S20740C1[0]),
  ABISELECT(-136,-88),
  ABISELECT(-30,-14),
  ABISELECT(-120,-80),
  ABISELECT(-76,-40),
  ABISELECT(-76,-40),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI8S20740C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20740C1D1Ev,_ZTv0_n28_N8S20740C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20740C1D0Ev,_ZTv0_n28_N8S20740C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20740C1[];
extern void _ZN9S20740C12D1Ev();
extern void _ZN9S20740C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20740C12__A1__8S20740C1[] = {
  ABISELECT(106,74),
  ABISELECT(136,88),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S20740C12[0]),
  (VTBL_ENTRY)&_ZN9S20740C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20740C12D0Ev,
};
extern void _ZN8S20740C8D1Ev();
extern void _ZN8S20740C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20740C89S20740C12__A4__8S20740C1[] = {
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
  (VTBL_ENTRY)&_ZN8S20740C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20740C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__8S20740C89S20740C12__A4__8S20740C1[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__9S20740C12__A1__8S20740C1[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20740C12[0]),
};
extern void ABISELECT(_ZTv0_n56_N9S20740C12D1Ev,_ZTv0_n28_N9S20740C12D1Ev)();
extern void ABISELECT(_ZThn136_N9S20740C12D1Ev,_ZThn88_N9S20740C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20740C12D0Ev,_ZTv0_n28_N9S20740C12D0Ev)();
extern void ABISELECT(_ZThn136_N9S20740C12D0Ev,_ZThn88_N9S20740C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20740C10__9S20740C12__A1__8S20740C1[] = {
  ABISELECT(-136,-88),
  ABISELECT(-30,-14),
  ABISELECT(-120,-80),
  ABISELECT(-76,-40),
  ABISELECT(-76,-40),
  ABISELECT(-136,-88),
  (VTBL_ENTRY)&(_ZTI9S20740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20740C12D1Ev,_ZTv0_n28_N9S20740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20740C12D0Ev,_ZTv0_n28_N9S20740C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__8S20740C1[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C2[0]),
};
extern void _ZN8S20740C5D1Ev();
extern void _ZN8S20740C5D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20740C5__8S20740C1[] = {
  ABISELECT(64,32),
  ABISELECT(48,24),
  ABISELECT(42,22),
  ABISELECT(72,36),
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C5[0]),
  (VTBL_ENTRY)&_ZN8S20740C5D1Ev,
  (VTBL_ENTRY)&_ZN8S20740C5D0Ev,
};
extern void _ZN9S20740C11D1Ev();
extern void _ZN9S20740C11D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20740C118S20740C5__8S20740C1[] = {
  ABISELECT(42,22),
  ABISELECT(72,36),
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S20740C11[0]),
  (VTBL_ENTRY)&_ZN9S20740C11D1Ev,
  (VTBL_ENTRY)&_ZN9S20740C11D0Ev,
};
extern void _ZN9S20740C12D1Ev();
extern void _ZN9S20740C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20740C129S20740C118S20740C5__8S20740C1[] = {
  ABISELECT(42,22),
  ABISELECT(72,36),
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI9S20740C12[0]),
  (VTBL_ENTRY)&_ZN9S20740C12D1Ev,
  (VTBL_ENTRY)&_ZN9S20740C12D0Ev,
};
extern void _ZN8S20740C8D1Ev();
extern void _ZN8S20740C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20740C89S20740C129S20740C118S20740C5__A2__8S20740C1[] = {
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
  (VTBL_ENTRY)&_ZN8S20740C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20740C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__8S20740C89S20740C129S20740C118S20740C5__A2__8S20740C1[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__9S20740C129S20740C118S20740C5__8S20740C1[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI9S20740C12[0]),
};
extern void ABISELECT(_ZTv0_n56_N9S20740C12D1Ev,_ZTv0_n28_N9S20740C12D1Ev)();
extern void ABISELECT(_ZThn72_N9S20740C12D1Ev,_ZThn36_N9S20740C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20740C12D0Ev,_ZTv0_n28_N9S20740C12D0Ev)();
extern void ABISELECT(_ZThn72_N9S20740C12D0Ev,_ZThn36_N9S20740C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20740C10__9S20740C129S20740C118S20740C5__8S20740C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(-30,-14),
  ABISELECT(-120,-80),
  ABISELECT(-76,-40),
  ABISELECT(-76,-40),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI9S20740C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20740C12D1Ev,_ZTv0_n28_N9S20740C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20740C12D0Ev,_ZTv0_n28_N9S20740C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20740C99S20740C118S20740C5__A1__8S20740C1[] = {
  ABISELECT(26,14),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C9[0]),
};
extern void _ZN9S20740C10D1Ev();
extern void _ZN9S20740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20740C109S20740C118S20740C5__A1__8S20740C1[] = {
  ABISELECT(18,10),
  ABISELECT(-72,-56),
  ABISELECT(-28,-16),
  ABISELECT(-28,-16),
  0,
  (VTBL_ENTRY)&(_ZTI9S20740C10[0]),
  (VTBL_ENTRY)&_ZN9S20740C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20740C10D0Ev,
};
extern void _ZN8S20740C8D1Ev();
extern void _ZN8S20740C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20740C89S20740C109S20740C118S20740C5__A3__8S20740C1[] = {
  ABISELECT(-72,-56),
  ABISELECT(-28,-16),
  ABISELECT(-28,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
  (VTBL_ENTRY)&_ZN8S20740C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20740C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__8S20740C89S20740C109S20740C118S20740C5__A3__8S20740C1[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(72,56),
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__9S20740C109S20740C118S20740C5__A1__8S20740C1[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(72,56),
  (VTBL_ENTRY)&(_ZTI9S20740C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__9S20740C118S20740C5__8S20740C1[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI9S20740C11[0]),
};
extern void ABISELECT(_ZTv0_n56_N9S20740C11D1Ev,_ZTv0_n28_N9S20740C11D1Ev)();
extern void ABISELECT(_ZThn72_N9S20740C11D1Ev,_ZThn36_N9S20740C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N9S20740C11D0Ev,_ZTv0_n28_N9S20740C11D0Ev)();
extern void ABISELECT(_ZThn72_N9S20740C11D0Ev,_ZThn36_N9S20740C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20740C10__9S20740C118S20740C5__8S20740C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(-30,-14),
  ABISELECT(-120,-80),
  ABISELECT(-76,-40),
  ABISELECT(-76,-40),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI9S20740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20740C11D1Ev,_ZTv0_n28_N9S20740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N9S20740C11D0Ev,_ZTv0_n28_N9S20740C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20740C9__9S20740C118S20740C5__8S20740C1[] = {
  ABISELECT(26,14),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI9S20740C11[0]),
};
extern void ABISELECT(_ZThn24_N9S20740C11D1Ev,_ZThn12_N9S20740C11D1Ev)();
extern void ABISELECT(_ZThn24_N9S20740C11D0Ev,_ZThn12_N9S20740C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20740C10__A__9S20740C118S20740C5__8S20740C1[] = {
  ABISELECT(18,10),
  ABISELECT(-72,-56),
  ABISELECT(-28,-16),
  ABISELECT(-28,-16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI9S20740C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N9S20740C11D1Ev,_ZThn12_N9S20740C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N9S20740C11D0Ev,_ZThn12_N9S20740C11D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S20740C5D1Ev,_ZTv0_n32_N8S20740C5D1Ev)();
extern void ABISELECT(_ZThn48_N8S20740C5D1Ev,_ZThn24_N8S20740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20740C5D0Ev,_ZTv0_n32_N8S20740C5D0Ev)();
extern void ABISELECT(_ZThn48_N8S20740C5D0Ev,_ZThn24_N8S20740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20740C7__8S20740C5__8S20740C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-6,-2),
  ABISELECT(16,8),
  ABISELECT(-96,-68),
  ABISELECT(-52,-28),
  ABISELECT(-52,-28),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI8S20740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20740C5D1Ev,_ZTv0_n32_N8S20740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20740C5D0Ev,_ZTv0_n32_N8S20740C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__8S20740C5__8S20740C1[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI8S20740C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C9__8S20740C5__8S20740C1[] = {
  ABISELECT(-22,-10),
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S20740C5[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S20740C5D1Ev,_ZTv0_n28_N8S20740C5D1Ev)();
extern void ABISELECT(_ZThn72_N8S20740C5D1Ev,_ZThn36_N8S20740C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S20740C5D0Ev,_ZTv0_n28_N8S20740C5D0Ev)();
extern void ABISELECT(_ZThn72_N8S20740C5D0Ev,_ZThn36_N8S20740C5D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S20740C10__8S20740C5__8S20740C1[] = {
  ABISELECT(-72,-36),
  ABISELECT(-30,-14),
  ABISELECT(-120,-80),
  ABISELECT(-76,-40),
  ABISELECT(-76,-40),
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S20740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20740C5D1Ev,_ZTv0_n28_N8S20740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S20740C5D0Ev,_ZTv0_n28_N8S20740C5D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S20740C99S20740C11__A1__8S20740C5__8S20740C1[] = {
  ABISELECT(26,14),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20740C5[0]),
};
extern void ABISELECT(_ZThn24_N8S20740C5D1Ev,_ZThn12_N8S20740C5D1Ev)();
extern void ABISELECT(_ZThn24_N8S20740C5D0Ev,_ZThn12_N8S20740C5D0Ev)();
static  VTBL_ENTRY _tg__ZTV9S20740C109S20740C11__A1__8S20740C5__8S20740C1[] = {
  ABISELECT(18,10),
  ABISELECT(-72,-56),
  ABISELECT(-28,-16),
  ABISELECT(-28,-16),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20740C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S20740C5D1Ev,_ZThn12_N8S20740C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S20740C5D0Ev,_ZThn12_N8S20740C5D0Ev),
};
extern void _ZN8S20740C7D1Ev();
extern void _ZN8S20740C7D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20740C7__8S20740C1[] = {
  ABISELECT(-6,-2),
  ABISELECT(16,8),
  ABISELECT(-96,-68),
  ABISELECT(-52,-28),
  ABISELECT(-52,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C7[0]),
  (VTBL_ENTRY)&_ZN8S20740C7D1Ev,
  (VTBL_ENTRY)&_ZN8S20740C7D0Ev,
};
extern void _ZN8S20740C8D1Ev();
extern void _ZN8S20740C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20740C88S20740C7__8S20740C1[] = {
  ABISELECT(-96,-68),
  ABISELECT(-52,-28),
  ABISELECT(-52,-28),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
  (VTBL_ENTRY)&_ZN8S20740C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20740C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__8S20740C88S20740C7__8S20740C1[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(96,68),
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__8S20740C7__8S20740C1[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(96,68),
  (VTBL_ENTRY)&(_ZTI8S20740C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C9__8S20740C7__8S20740C1[] = {
  ABISELECT(-22,-10),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20740C7[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C9__8S20740C1[] = {
  ABISELECT(-22,-10),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C9[0]),
};
extern void _ZN9S20740C10D1Ev();
extern void _ZN9S20740C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S20740C10__8S20740C1[] = {
  ABISELECT(-30,-14),
  ABISELECT(-120,-80),
  ABISELECT(-76,-40),
  ABISELECT(-76,-40),
  0,
  (VTBL_ENTRY)&(_ZTI9S20740C10[0]),
  (VTBL_ENTRY)&_ZN9S20740C10D1Ev,
  (VTBL_ENTRY)&_ZN9S20740C10D0Ev,
};
extern void _ZN8S20740C8D1Ev();
extern void _ZN8S20740C8D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20740C89S20740C10__A1__8S20740C1[] = {
  ABISELECT(-120,-80),
  ABISELECT(-76,-40),
  ABISELECT(-76,-40),
  0,
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
  (VTBL_ENTRY)&_ZN8S20740C8D1Ev,
  (VTBL_ENTRY)&_ZN8S20740C8D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__8S20740C89S20740C10__A1__8S20740C1[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(120,80),
  (VTBL_ENTRY)&(_ZTI8S20740C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S20740C2__9S20740C10__8S20740C1[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(120,80),
  (VTBL_ENTRY)&(_ZTI9S20740C10[0]),
};
static  VTT_ENTRY vtt_S20740C1[] = {
  {&(_ZTV8S20740C1[10]),  10,61},
  {&(_tg__ZTV9S20740C12__A1__8S20740C1[7]),  7,9},
  {&(_tg__ZTV8S20740C89S20740C12__A4__8S20740C1[5]),  5,7},
  {&(_tg__ZTV8S20740C2__8S20740C89S20740C12__A4__8S20740C1[4]),  4,4},
  {&(_tg__ZTV8S20740C2__9S20740C12__A1__8S20740C1[4]),  4,4},
  {&(_tg__ZTV9S20740C10__9S20740C12__A1__8S20740C1[7]),  7,9},
  {&(_ZTV8S20740C1[16]),  16,61},
  {&(_ZTV8S20740C1[26]),  26,61},
  {&(_ZTV8S20740C1[47]),  47,61},
  {&(_ZTV8S20740C1[52]),  52,61},
  {&(_ZTV8S20740C1[59]),  59,61},
  {&(_ZTV8S20740C1[31]),  31,61},
  {&(_ZTV8S20740C1[37]),  37,61},
  {&(_tg__ZTV8S20740C2__8S20740C1[4]),  4,4},
  {&(_tg__ZTV8S20740C5__8S20740C1[9]),  9,11},
  {&(_tg__ZTV9S20740C118S20740C5__8S20740C1[7]),  7,9},
  {&(_tg__ZTV9S20740C129S20740C118S20740C5__8S20740C1[7]),  7,9},
  {&(_tg__ZTV8S20740C89S20740C129S20740C118S20740C5__A2__8S20740C1[5]),  5,7},
  {&(_tg__ZTV8S20740C2__8S20740C89S20740C129S20740C118S20740C5__A2__8S20740C1[4]),  4,4},
  {&(_tg__ZTV8S20740C2__9S20740C129S20740C118S20740C5__8S20740C1[4]),  4,4},
  {&(_tg__ZTV9S20740C10__9S20740C129S20740C118S20740C5__8S20740C1[7]),  7,9},
  {&(_tg__ZTV8S20740C99S20740C118S20740C5__A1__8S20740C1[3]),  3,3},
  {&(_tg__ZTV9S20740C109S20740C118S20740C5__A1__8S20740C1[6]),  6,8},
  {&(_tg__ZTV8S20740C89S20740C109S20740C118S20740C5__A3__8S20740C1[5]),  5,7},
  {&(_tg__ZTV8S20740C2__8S20740C89S20740C109S20740C118S20740C5__A3__8S20740C1[4]),  4,4},
  {&(_tg__ZTV8S20740C2__9S20740C109S20740C118S20740C5__A1__8S20740C1[4]),  4,4},
  {&(_tg__ZTV8S20740C2__9S20740C118S20740C5__8S20740C1[4]),  4,4},
  {&(_tg__ZTV9S20740C10__9S20740C118S20740C5__8S20740C1[7]),  7,9},
  {&(_tg__ZTV8S20740C9__9S20740C118S20740C5__8S20740C1[3]),  3,3},
  {&(_tg__ZTV9S20740C10__A__9S20740C118S20740C5__8S20740C1[6]),  6,8},
  {&(_tg__ZTV8S20740C7__8S20740C5__8S20740C1[8]),  8,10},
  {&(_tg__ZTV8S20740C2__8S20740C5__8S20740C1[4]),  4,4},
  {&(_tg__ZTV8S20740C9__8S20740C5__8S20740C1[3]),  3,3},
  {&(_tg__ZTV9S20740C10__8S20740C5__8S20740C1[7]),  7,9},
  {&(_tg__ZTV8S20740C99S20740C11__A1__8S20740C5__8S20740C1[3]),  3,3},
  {&(_tg__ZTV9S20740C109S20740C11__A1__8S20740C5__8S20740C1[6]),  6,8},
  {&(_tg__ZTV8S20740C7__8S20740C1[7]),  7,9},
  {&(_tg__ZTV8S20740C88S20740C7__8S20740C1[5]),  5,7},
  {&(_tg__ZTV8S20740C2__8S20740C88S20740C7__8S20740C1[4]),  4,4},
  {&(_tg__ZTV8S20740C2__8S20740C7__8S20740C1[4]),  4,4},
  {&(_tg__ZTV8S20740C9__8S20740C7__8S20740C1[3]),  3,3},
  {&(_tg__ZTV8S20740C9__8S20740C1[3]),  3,3},
  {&(_tg__ZTV9S20740C10__8S20740C1[6]),  6,8},
  {&(_tg__ZTV8S20740C89S20740C10__A1__8S20740C1[5]),  5,7},
  {&(_tg__ZTV8S20740C2__8S20740C89S20740C10__A1__8S20740C1[4]),  4,4},
  {&(_tg__ZTV8S20740C2__9S20740C10__8S20740C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S20740C1[];
extern  VTBL_ENTRY _ZTV8S20740C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20740C1[];
static VTBL_ENTRY alt_thunk_names205[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20740C5D0Ev,_ZTv0_n28_N8S20740C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20740C5D0Ev,_ZThn36_N8S20740C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20740C5D1Ev,_ZTv0_n28_N8S20740C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S20740C5D1Ev,_ZThn36_N8S20740C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20740C5D0Ev,_ZTv0_n32_N8S20740C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20740C5D0Ev,_ZThn24_N8S20740C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20740C5D1Ev,_ZTv0_n32_N8S20740C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S20740C5D1Ev,_ZThn24_N8S20740C5D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20740C11D0Ev,_ZTv0_n28_N9S20740C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20740C11D0Ev,_ZThn36_N9S20740C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20740C11D1Ev,_ZTv0_n28_N9S20740C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20740C11D1Ev,_ZThn36_N9S20740C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20740C12D0Ev,_ZTv0_n28_N9S20740C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20740C12D0Ev,_ZThn36_N9S20740C12D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S20740C12D0Ev,_ZThn88_N9S20740C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N9S20740C12D1Ev,_ZTv0_n28_N9S20740C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N9S20740C12D1Ev,_ZThn36_N9S20740C12D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn136_N9S20740C12D1Ev,_ZThn88_N9S20740C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20740C1D0Ev,_ZTv0_n28_N8S20740C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S20740C1D0Ev,_ZThn88_N8S20740C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S20740C1D1Ev,_ZTv0_n28_N8S20740C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S20740C1D1Ev,_ZThn88_N8S20740C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20740C1D0Ev,_ZTv0_n32_N8S20740C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20740C1D0Ev,_ZThn76_N8S20740C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20740C1D1Ev,_ZTv0_n32_N8S20740C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn112_N8S20740C1D1Ev,_ZThn76_N8S20740C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20740C1D0Ev,_ZTv0_n40_N8S20740C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20740C1D0Ev,_ZThn52_N8S20740C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S20740C1D1Ev,_ZTv0_n40_N8S20740C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S20740C1D1Ev,_ZThn52_N8S20740C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20740C1 = {  "S20740C1", // class name
  bases_S20740C1, 30,
  &(vtc_S20740C1[0]), // expected_vtbl_contents
  &(vtt_S20740C1[0]), // expected_vtt_contents
  ABISELECT(152,96), // object size
  NSPAIRA(_ZTI8S20740C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S20740C1),61, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20740C1),46, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names205,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7490C5  : virtual S2264C38 , virtual S2264C28 {
  int s7490c5f0[9];
  ~S7490C5(); // tgen
  S7490C5(); // tgen
};
//SIG(-1 S7490C5) C1{ VBC2{ m} VBC3{ m} Fi[9]}


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

static void Test_S7490C5()
{
  extern Class_Descriptor cd_S7490C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S7490C5, buf);
    S7490C5 *dp, &lv = *(dp=new (buf) S7490C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S7490C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7490C5)");
    check_base_class_offset(lv, (S2264C38*), 0, "S7490C5");
    check_base_class_offset(lv, (S2264C28*), 0, "S7490C5");
    check_field_offset(lv, s7490c5f0, ABISELECT(8,4), "S7490C5.s7490c5f0");
    test_class_info(&lv, &cd_S7490C5);
    dp->~S7490C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7490C5(Test_S7490C5, "S7490C5", ABISELECT(48,40));

#else // __cplusplus

extern void _ZN7S7490C5C1Ev();
extern void _ZN7S7490C5D1Ev();
Name_Map name_map_S7490C5[] = {
  NSPAIR(_ZN7S7490C5C1Ev),
  NSPAIR(_ZN7S7490C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S7490C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7490C5[];
static  VTBL_ENTRY vtc_S7490C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C5[0]),
};
extern VTBL_ENTRY _ZTV7S7490C5[];
static  VTT_ENTRY vtt_S7490C5[] = {
  {&(_ZTV7S7490C5[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7490C5[];
extern  VTBL_ENTRY _ZTV7S7490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C5[];
Class_Descriptor cd_S7490C5 = {  "S7490C5", // class name
  bases_S7490C5, 2,
  &(vtc_S7490C5[0]), // expected_vtbl_contents
  &(vtt_S7490C5[0]), // expected_vtt_contents
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI7S7490C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7490C5),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7490C5),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  S7490C2  : virtual S2264C38 , virtual S2264C28 , virtual S7490C5 {
  void *s7490c2f0;
  virtual  ~S7490C2(); // _ZN7S7490C2D2Ev
  S7490C2(); // tgen
};
//SIG(-1 S7490C2) C1{ VBC2{ m} VBC3{ m} VBC4{ VBC2 VBC3 Fi[9]} vd Fp}


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

static void Test_S7490C2()
{
  extern Class_Descriptor cd_S7490C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S7490C2, buf);
    S7490C2 *dp, &lv = *(dp=new (buf) S7490C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S7490C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7490C2)");
    check_base_class_offset(lv, (S2264C38*), 0, "S7490C2");
    check_base_class_offset(lv, (S2264C38*)(S7490C5*), 0, "S7490C2");
    check_base_class_offset(lv, (S2264C28*), 0, "S7490C2");
    check_base_class_offset(lv, (S2264C28*)(S7490C5*), 0, "S7490C2");
    check_base_class_offset(lv, (S7490C5*), ABISELECT(16,8), "S7490C2");
    check_field_offset(lv, s7490c2f0, ABISELECT(8,4), "S7490C2.s7490c2f0");
    test_class_info(&lv, &cd_S7490C2);
    dp->~S7490C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7490C2(Test_S7490C2, "S7490C2", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN7S7490C2C1Ev();
extern void _ZN7S7490C2D2Ev();
Name_Map name_map_S7490C2[] = {
  NSPAIR(_ZN7S7490C2C1Ev),
  NSPAIR(_ZN7S7490C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S7490C5;
extern VTBL_ENTRY _ZTI7S7490C5[];
extern  VTBL_ENTRY _ZTV7S7490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C5[];
static Base_Class bases_S7490C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S7490C5,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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 _ZTI7S7490C2[];
extern void _ZN7S7490C2D1Ev();
extern void _ZN7S7490C2D0Ev();
static  VTBL_ENTRY vtc_S7490C2[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
  (VTBL_ENTRY)&_ZN7S7490C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C2D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
};
extern VTBL_ENTRY _ZTV7S7490C2[];
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C5[0]),
};
static  VTT_ENTRY vtt_S7490C2[] = {
  {&(_ZTV7S7490C2[5]),  5,11},
  {&(_ZTV7S7490C2[11]),  11,11},
  {&(_tg__ZTV7S7490C5__7S7490C2[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7490C2[];
extern  VTBL_ENTRY _ZTV7S7490C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C2[];
Class_Descriptor cd_S7490C2 = {  "S7490C2", // class name
  bases_S7490C2, 3,
  &(vtc_S7490C2[0]), // expected_vtbl_contents
  &(vtt_S7490C2[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI7S7490C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7490C2),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7490C2),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  S7490C9  : virtual S2264C28 , S2264C38 , S7490C2 , virtual S2264C24 {
  virtual  ~S7490C9(); // _ZN7S7490C9D2Ev
  S7490C9(); // tgen
};
//SIG(-1 S7490C9) C1{ VBC2{ m} BC3{ m} BC4{ VBC3 VBC2 VBC5{ VBC3 VBC2 Fi[9]} vd Fp} VBC6{ m} vd}


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

static void Test_S7490C9()
{
  extern Class_Descriptor cd_S7490C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S7490C9, buf);
    S7490C9 *dp, &lv = *(dp=new (buf) S7490C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S7490C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7490C9)");
    check_base_class_offset(lv, (S2264C28*), 0, "S7490C9");
    check_base_class_offset(lv, (S2264C28*)(S7490C2*), 0, "S7490C9");
    check_base_class_offset(lv, (S2264C28*)(S7490C5*), 0, "S7490C9");
    /*is_ambiguous_... S7490C9::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), 0, "S7490C9");
    check_base_class_offset(lv, (S2264C38*)(S7490C2*), ABISELECT(16,8), "S7490C9");
    check_base_class_offset(lv, (S2264C38*)(S7490C5*), ABISELECT(16,8), "S7490C9");
    check_base_class_offset(lv, (S7490C5*)(S7490C2*), ABISELECT(16,8), "S7490C9");
    check_base_class_offset(lv, (S7490C2*), 0, "S7490C9");
    check_base_class_offset(lv, (S2264C24*), 0, "S7490C9");
    test_class_info(&lv, &cd_S7490C9);
    dp->~S7490C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7490C9(Test_S7490C9, "S7490C9", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN7S7490C9C1Ev();
extern void _ZN7S7490C9D2Ev();
Name_Map name_map_S7490C9[] = {
  NSPAIR(_ZN7S7490C9C1Ev),
  NSPAIR(_ZN7S7490C9D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7490C5;
extern VTBL_ENTRY _ZTI7S7490C5[];
extern  VTBL_ENTRY _ZTV7S7490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C5[];
extern Class_Descriptor cd_S7490C2;
extern VTBL_ENTRY _ZTI7S7490C2[];
extern  VTBL_ENTRY _ZTV7S7490C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C2[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
static Base_Class bases_S7490C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C38,    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, 1},
  {&cd_S7490C5,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7490C2,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7490C9[];
extern void _ZN7S7490C9D1Ev();
extern void _ZN7S7490C9D0Ev();
static  VTBL_ENTRY vtc_S7490C9[] = {
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C9[0]),
  (VTBL_ENTRY)&_ZN7S7490C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C9D0Ev,
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7490C9[0]),
};
extern VTBL_ENTRY _ZTV7S7490C9[];
extern void _ZN7S7490C2D1Ev();
extern void _ZN7S7490C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7490C2__7S7490C9[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
  (VTBL_ENTRY)&_ZN7S7490C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C2__7S7490C9[] = {
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C9[] = {
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C5[0]),
};
static  VTT_ENTRY vtt_S7490C9[] = {
  {&(_ZTV7S7490C9[6]),  6,12},
  {&(_tg__ZTV7S7490C2__7S7490C9[5]),  5,7},
  {&(_tg__ZTV7S7490C5__7S7490C2__7S7490C9[4]),  4,4},
  {&(_ZTV7S7490C9[12]),  12,12},
  {&(_tg__ZTV7S7490C5__7S7490C9[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7490C9[];
extern  VTBL_ENTRY _ZTV7S7490C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C9[];
Class_Descriptor cd_S7490C9 = {  "S7490C9", // class name
  bases_S7490C9, 6,
  &(vtc_S7490C9[0]), // expected_vtbl_contents
  &(vtt_S7490C9[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI7S7490C9),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7490C9),12, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7490C9),5, //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  S7490C8  : S2264C28 , virtual S7490C5 , S7490C2 , S2264C38 , virtual S7490C9 {
  virtual  ~S7490C8(); // _ZN7S7490C8D2Ev
  S7490C8(); // tgen
};
//SIG(-1 S7490C8) C1{ BC2{ m} VBC3{ VBC4{ m} VBC2 Fi[9]} BC5{ VBC4 VBC2 VBC3 vd Fp} BC4 VBC6{ VBC2 BC4 BC5 VBC7{ m} vd} vd}


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

static void Test_S7490C8()
{
  extern Class_Descriptor cd_S7490C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,16)];
    init_test(&cd_S7490C8, buf);
    S7490C8 *dp, &lv = *(dp=new (buf) S7490C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S7490C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7490C8)");
    /*is_ambiguous_... S7490C8::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), 0, "S7490C8");
    check_base_class_offset(lv, (S2264C38*)(S7490C5*), ABISELECT(60,48), "S7490C8");
    /*is_ambiguous_... S7490C8::S7490C2 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7490C2*), ABISELECT(60,48), "S7490C8");
    check_base_class_offset(lv, (S2264C38*)(S7490C2*)(S7490C9*), ABISELECT(60,48), "S7490C8");
    check_base_class_offset(lv, (S2264C28*)(S7490C5*), ABISELECT(60,48), "S7490C8");
    /*is_ambiguous_... S7490C8::S7490C2 */ AMB_check_base_class_offset(lv, (S2264C28*)(S7490C2*), ABISELECT(60,48), "S7490C8");
    check_base_class_offset(lv, (S2264C28*)(S7490C9*), ABISELECT(60,48), "S7490C8");
    check_base_class_offset(lv, (S2264C28*)(S7490C2*)(S7490C9*), ABISELECT(60,48), "S7490C8");
    check_base_class_offset(lv, (S7490C5*), ABISELECT(16,8), "S7490C8");
    /*is_ambiguous_... S7490C8::S7490C2 */ AMB_check_base_class_offset(lv, (S7490C5*)(S7490C2*), ABISELECT(16,8), "S7490C8");
    check_base_class_offset(lv, (S7490C5*)(S7490C2*)(S7490C9*), ABISELECT(16,8), "S7490C8");
    /*is_ambiguous_... S7490C8::S7490C2 */ AMB_check_base_class_offset(lv, (S7490C2*), 0, "S7490C8");
    /*is_ambiguous_... S7490C8::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), 0, "S7490C8");
    /*is_ambiguous_... S7490C9::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7490C9*), ABISELECT(64,52), "S7490C8");
    check_base_class_offset(lv, (S7490C2*)(S7490C9*), ABISELECT(64,52), "S7490C8");
    check_base_class_offset(lv, (S2264C24*)(S7490C9*), 0, "S7490C8");
    check_base_class_offset(lv, (S7490C9*), ABISELECT(64,52), "S7490C8");
    test_class_info(&lv, &cd_S7490C8);
    dp->~S7490C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7490C8(Test_S7490C8, "S7490C8", ABISELECT(80,60));

#else // __cplusplus

extern void _ZN7S7490C8C1Ev();
extern void _ZN7S7490C8D2Ev();
Name_Map name_map_S7490C8[] = {
  NSPAIR(_ZN7S7490C8C1Ev),
  NSPAIR(_ZN7S7490C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S7490C5;
extern VTBL_ENTRY _ZTI7S7490C5[];
extern  VTBL_ENTRY _ZTV7S7490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C5[];
extern Class_Descriptor cd_S7490C2;
extern VTBL_ENTRY _ZTI7S7490C2[];
extern  VTBL_ENTRY _ZTV7S7490C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C2[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7490C2;
extern VTBL_ENTRY _ZTI7S7490C2[];
extern  VTBL_ENTRY _ZTV7S7490C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C2[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S7490C9;
extern VTBL_ENTRY _ZTI7S7490C9[];
extern  VTBL_ENTRY _ZTV7S7490C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C9[];
static Base_Class bases_S7490C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C38,    ABISELECT(60,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_S2264C28,    ABISELECT(60,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_S7490C5,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7490C2,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C38,    ABISELECT(64,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
    9, //immediately_derived
  0, 0},
  {&cd_S7490C2,    ABISELECT(64,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7490C9,    ABISELECT(64,52), //bcp->offset
    13, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7490C8[];
extern void _ZN7S7490C8D1Ev();
extern void _ZN7S7490C8D0Ev();
extern void ABISELECT(_ZTv0_n56_N7S7490C8D1Ev,_ZTv0_n28_N7S7490C8D1Ev)();
extern void ABISELECT(_ZThn64_N7S7490C8D1Ev,_ZThn52_N7S7490C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7490C8D0Ev,_ZTv0_n28_N7S7490C8D0Ev)();
extern void ABISELECT(_ZThn64_N7S7490C8D0Ev,_ZThn52_N7S7490C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7490C8[] = {
  0,
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C8[0]),
  (VTBL_ENTRY)&_ZN7S7490C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C8D0Ev,
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7490C8[0]),
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI7S7490C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7490C8D1Ev,_ZTv0_n28_N7S7490C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7490C8D0Ev,_ZTv0_n28_N7S7490C8D0Ev),
};
extern VTBL_ENTRY _ZTV7S7490C8[];
extern void _ZN7S7490C2D1Ev();
extern void _ZN7S7490C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7490C2__7S7490C8[] = {
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
  (VTBL_ENTRY)&_ZN7S7490C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C2__7S7490C8[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C8[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C5[0]),
};
extern void _ZN7S7490C9D1Ev();
extern void _ZN7S7490C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7490C9__7S7490C8[] = {
  ABISELECT(-64,-52),
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C9[0]),
  (VTBL_ENTRY)&_ZN7S7490C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C9D0Ev,
};
extern void _ZN7S7490C2D1Ev();
extern void _ZN7S7490C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7490C27S7490C9__A1__7S7490C8[] = {
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
  (VTBL_ENTRY)&_ZN7S7490C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C27S7490C9__A1__7S7490C8[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C9__7S7490C8[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI7S7490C9[0]),
};
static  VTT_ENTRY vtt_S7490C8[] = {
  {&(_ZTV7S7490C8[7]),  7,22},
  {&(_tg__ZTV7S7490C2__7S7490C8[5]),  5,7},
  {&(_tg__ZTV7S7490C5__7S7490C2__7S7490C8[4]),  4,4},
  {&(_ZTV7S7490C8[13]),  13,22},
  {&(_ZTV7S7490C8[20]),  20,22},
  {&(_tg__ZTV7S7490C5__7S7490C8[4]),  4,4},
  {&(_tg__ZTV7S7490C9__7S7490C8[6]),  6,8},
  {&(_tg__ZTV7S7490C27S7490C9__A1__7S7490C8[5]),  5,7},
  {&(_tg__ZTV7S7490C5__7S7490C27S7490C9__A1__7S7490C8[4]),  4,4},
  {&(_tg__ZTV7S7490C5__7S7490C9__7S7490C8[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S7490C8[];
extern  VTBL_ENTRY _ZTV7S7490C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C8[];
static VTBL_ENTRY alt_thunk_names206[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7490C8D0Ev,_ZTv0_n28_N7S7490C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7490C8D0Ev,_ZThn52_N7S7490C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7490C8D1Ev,_ZTv0_n28_N7S7490C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7490C8D1Ev,_ZThn52_N7S7490C8D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7490C8 = {  "S7490C8", // class name
  bases_S7490C8, 10,
  &(vtc_S7490C8[0]), // expected_vtbl_contents
  &(vtt_S7490C8[0]), // expected_vtt_contents
  ABISELECT(80,60), // object size
  NSPAIRA(_ZTI7S7490C8),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S7490C8),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7490C8),10, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names206,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7490C11  : S2264C28 , virtual S2264C24 {
  ~S7490C11(); // tgen
  S7490C11(); // tgen
};
//SIG(-1 S7490C11) C1{ BC2{ m} VBC3{ m}}


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

static void Test_S7490C11()
{
  extern Class_Descriptor cd_S7490C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7490C11, buf);
    S7490C11 *dp, &lv = *(dp=new (buf) S7490C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7490C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7490C11)");
    check_base_class_offset(lv, (S2264C28*), 0, "S7490C11");
    check_base_class_offset(lv, (S2264C24*), 0, "S7490C11");
    test_class_info(&lv, &cd_S7490C11);
    dp->~S7490C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7490C11(Test_S7490C11, "S7490C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S7490C11C1Ev();
extern void _ZN8S7490C11D1Ev();
Name_Map name_map_S7490C11[] = {
  NSPAIR(_ZN8S7490C11C1Ev),
  NSPAIR(_ZN8S7490C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
static Base_Class bases_S7490C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S7490C11[];
static  VTBL_ENTRY vtc_S7490C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7490C11[0]),
};
extern VTBL_ENTRY _ZTV8S7490C11[];
static  VTT_ENTRY vtt_S7490C11[] = {
  {&(_ZTV8S7490C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7490C11[];
extern  VTBL_ENTRY _ZTV8S7490C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7490C11[];
Class_Descriptor cd_S7490C11 = {  "S7490C11", // class name
  bases_S7490C11, 2,
  &(vtc_S7490C11[0]), // expected_vtbl_contents
  &(vtt_S7490C11[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S7490C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S7490C11),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7490C11),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  S7490C12  : S7490C2 , S2264C28 , virtual S7490C11 {
  virtual  ~S7490C12(); // _ZN8S7490C12D2Ev
  S7490C12(); // tgen
};
//SIG(-1 S7490C12) C1{ BC2{ VBC3{ m} VBC4{ m} VBC5{ VBC3 VBC4 Fi[9]} vd Fp} BC4 VBC6{ BC4 VBC7{ m}} vd}


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

static void Test_S7490C12()
{
  extern Class_Descriptor cd_S7490C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S7490C12, buf);
    S7490C12 *dp, &lv = *(dp=new (buf) S7490C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S7490C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7490C12)");
    check_base_class_offset(lv, (S2264C38*)(S7490C2*), 0, "S7490C12");
    check_base_class_offset(lv, (S2264C38*)(S7490C5*), 0, "S7490C12");
    check_base_class_offset(lv, (S2264C28*)(S7490C2*), ABISELECT(16,8), "S7490C12");
    check_base_class_offset(lv, (S2264C28*)(S7490C5*), ABISELECT(16,8), "S7490C12");
    check_base_class_offset(lv, (S7490C5*)(S7490C2*), ABISELECT(16,8), "S7490C12");
    check_base_class_offset(lv, (S7490C2*), 0, "S7490C12");
    /*is_ambiguous_... S7490C12::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), 0, "S7490C12");
    check_base_class_offset(lv, (S2264C28*)(S7490C11*), ABISELECT(64,48), "S7490C12");
    check_base_class_offset(lv, (S2264C24*)(S7490C11*), 0, "S7490C12");
    check_base_class_offset(lv, (S7490C11*), ABISELECT(64,48), "S7490C12");
    test_class_info(&lv, &cd_S7490C12);
    dp->~S7490C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7490C12(Test_S7490C12, "S7490C12", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN8S7490C12C1Ev();
extern void _ZN8S7490C12D2Ev();
Name_Map name_map_S7490C12[] = {
  NSPAIR(_ZN8S7490C12C1Ev),
  NSPAIR(_ZN8S7490C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S7490C5;
extern VTBL_ENTRY _ZTI7S7490C5[];
extern  VTBL_ENTRY _ZTV7S7490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C5[];
extern Class_Descriptor cd_S7490C2;
extern VTBL_ENTRY _ZTI7S7490C2[];
extern  VTBL_ENTRY _ZTV7S7490C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C2[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S7490C11;
extern VTBL_ENTRY _ZTI8S7490C11[];
extern  VTBL_ENTRY _ZTV8S7490C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7490C11[];
static Base_Class bases_S7490C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    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, 1},
  {&cd_S7490C5,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7490C2,    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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C28,    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
    7, //immediately_derived
  0, 0},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7490C11,    ABISELECT(64,48), //bcp->offset
    13, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S7490C12[];
extern void _ZN8S7490C12D1Ev();
extern void _ZN8S7490C12D0Ev();
static  VTBL_ENTRY vtc_S7490C12[] = {
  0,
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7490C12[0]),
  (VTBL_ENTRY)&_ZN8S7490C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7490C12D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S7490C12[0]),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI8S7490C12[0]),
};
extern VTBL_ENTRY _ZTV8S7490C12[];
extern void _ZN7S7490C2D1Ev();
extern void _ZN7S7490C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7490C2__8S7490C12[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
  (VTBL_ENTRY)&_ZN7S7490C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C2__8S7490C12[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__8S7490C12[] = {
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7490C11__8S7490C12[] = {
  ABISELECT(-64,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S7490C11[0]),
};
static  VTT_ENTRY vtt_S7490C12[] = {
  {&(_ZTV8S7490C12[7]),  7,16},
  {&(_tg__ZTV7S7490C2__8S7490C12[5]),  5,7},
  {&(_tg__ZTV7S7490C5__7S7490C2__8S7490C12[4]),  4,4},
  {&(_ZTV8S7490C12[13]),  13,16},
  {&(_ZTV8S7490C12[16]),  16,16},
  {&(_tg__ZTV7S7490C5__8S7490C12[4]),  4,4},
  {&(_tg__ZTV8S7490C11__8S7490C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S7490C12[];
extern  VTBL_ENTRY _ZTV8S7490C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7490C12[];
Class_Descriptor cd_S7490C12 = {  "S7490C12", // class name
  bases_S7490C12, 8,
  &(vtc_S7490C12[0]), // expected_vtbl_contents
  &(vtt_S7490C12[0]), // expected_vtt_contents
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI8S7490C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S7490C12),16, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S7490C12),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7490C7  : virtual S7490C8 , virtual S7490C11 , virtual S7490C12 , S2264C38 {
  virtual void  v1(); // _ZN7S7490C72v1Ev
  ~S7490C7(); // tgen
  S7490C7(); // tgen
};
//SIG(-1 S7490C7) C1{ VBC2{ BC3{ m} VBC4{ VBC5{ m} VBC3 Fi[9]} BC6{ VBC5 VBC3 VBC4 vd Fp} BC5 VBC7{ VBC3 BC5 BC6 VBC8{ m} vd} vd} VBC9{ BC3 VBC8} VBC10{ BC6 BC3 VBC9 vd} BC5 v1}


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

static void Test_S7490C7()
{
  extern Class_Descriptor cd_S7490C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,19)];
    init_test(&cd_S7490C7, buf);
    S7490C7 *dp, &lv = *(dp=new (buf) S7490C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,72), "sizeof(S7490C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7490C7)");
    /*is_ambiguous_... S7490C8::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S7490C8*), ABISELECT(8,4), "S7490C7");
    check_base_class_offset(lv, (S2264C38*)(S7490C5*), ABISELECT(68,52), "S7490C7");
    /*is_ambiguous_... S7490C8::S7490C2 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7490C2*)(S7490C8*), ABISELECT(68,52), "S7490C7");
    check_base_class_offset(lv, (S2264C38*)(S7490C2*)(S7490C9*), ABISELECT(68,52), "S7490C7");
    check_base_class_offset(lv, (S2264C38*)(S7490C2*)(S7490C12*), ABISELECT(68,52), "S7490C7");
    check_base_class_offset(lv, (S2264C28*)(S7490C5*), ABISELECT(68,52), "S7490C7");
    /*is_ambiguous_... S7490C8::S7490C2 */ AMB_check_base_class_offset(lv, (S2264C28*)(S7490C2*)(S7490C8*), ABISELECT(68,52), "S7490C7");
    check_base_class_offset(lv, (S2264C28*)(S7490C9*), ABISELECT(68,52), "S7490C7");
    check_base_class_offset(lv, (S2264C28*)(S7490C2*)(S7490C9*), ABISELECT(68,52), "S7490C7");
    check_base_class_offset(lv, (S2264C28*)(S7490C2*)(S7490C12*), ABISELECT(68,52), "S7490C7");
    check_base_class_offset(lv, (S7490C5*)(S7490C8*), ABISELECT(24,12), "S7490C7");
    /*is_ambiguous_... S7490C8::S7490C2 */ AMB_check_base_class_offset(lv, (S7490C5*)(S7490C2*)(S7490C8*), ABISELECT(24,12), "S7490C7");
    check_base_class_offset(lv, (S7490C5*)(S7490C2*)(S7490C9*), ABISELECT(24,12), "S7490C7");
    check_base_class_offset(lv, (S7490C5*)(S7490C2*)(S7490C12*), ABISELECT(24,12), "S7490C7");
    /*is_ambiguous_... S7490C8::S7490C2 */ AMB_check_base_class_offset(lv, (S7490C2*)(S7490C8*), ABISELECT(8,4), "S7490C7");
    /*is_ambiguous_... S7490C8::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7490C8*), ABISELECT(8,4), "S7490C7");
    /*is_ambiguous_... S7490C9::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7490C9*), ABISELECT(72,56), "S7490C7");
    check_base_class_offset(lv, (S7490C2*)(S7490C9*), ABISELECT(72,56), "S7490C7");
    check_base_class_offset(lv, (S2264C24*)(S7490C9*), 0, "S7490C7");
    check_base_class_offset(lv, (S2264C24*)(S7490C11*), 0, "S7490C7");
    check_base_class_offset(lv, (S7490C9*)(S7490C8*), ABISELECT(72,56), "S7490C7");
    check_base_class_offset(lv, (S7490C8*), ABISELECT(8,4), "S7490C7");
    check_base_class_offset(lv, (S2264C28*)(S7490C11*), 0, "S7490C7");
    check_base_class_offset(lv, (S7490C11*), 0, "S7490C7");
    check_base_class_offset(lv, (S7490C11*)(S7490C12*), 0, "S7490C7");
    check_base_class_offset(lv, (S7490C2*)(S7490C12*), ABISELECT(88,64), "S7490C7");
    /*is_ambiguous_... S7490C12::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S7490C12*), ABISELECT(88,64), "S7490C7");
    check_base_class_offset(lv, (S7490C12*), ABISELECT(88,64), "S7490C7");
    /*is_ambiguous_... S7490C7::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), 0, "S7490C7");
    test_class_info(&lv, &cd_S7490C7);
    dp->~S7490C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7490C7(Test_S7490C7, "S7490C7", ABISELECT(104,72));

#else // __cplusplus

extern void _ZN7S7490C7C1Ev();
extern void _ZN7S7490C7D1Ev();
Name_Map name_map_S7490C7[] = {
  NSPAIR(_ZN7S7490C7C1Ev),
  NSPAIR(_ZN7S7490C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S7490C5;
extern VTBL_ENTRY _ZTI7S7490C5[];
extern  VTBL_ENTRY _ZTV7S7490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C5[];
extern Class_Descriptor cd_S7490C2;
extern VTBL_ENTRY _ZTI7S7490C2[];
extern  VTBL_ENTRY _ZTV7S7490C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C2[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7490C2;
extern VTBL_ENTRY _ZTI7S7490C2[];
extern  VTBL_ENTRY _ZTV7S7490C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C2[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S7490C9;
extern VTBL_ENTRY _ZTI7S7490C9[];
extern  VTBL_ENTRY _ZTV7S7490C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C9[];
extern Class_Descriptor cd_S7490C8;
extern VTBL_ENTRY _ZTI7S7490C8[];
extern  VTBL_ENTRY _ZTV7S7490C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C8[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S7490C11;
extern VTBL_ENTRY _ZTI8S7490C11[];
extern  VTBL_ENTRY _ZTV8S7490C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7490C11[];
extern Class_Descriptor cd_S7490C2;
extern VTBL_ENTRY _ZTI7S7490C2[];
extern  VTBL_ENTRY _ZTV7S7490C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C2[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S7490C12;
extern VTBL_ENTRY _ZTI8S7490C12[];
extern  VTBL_ENTRY _ZTV8S7490C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7490C12[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
static Base_Class bases_S7490C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    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
    10, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(68,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_S2264C28,    ABISELECT(68,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_S7490C5,    ABISELECT(24,12), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7490C2,    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
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    10, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(72,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
    9, //immediately_derived
  0, 0},
  {&cd_S7490C2,    ABISELECT(72,56), //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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7490C9,    ABISELECT(72,56), //bcp->offset
    27, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7490C8,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7490C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S7490C2,    ABISELECT(88,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(88,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
    15, //immediately_derived
  0, 0},
  {&cd_S7490C12,    ABISELECT(88,64), //bcp->offset
    36, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S7490C7[];
extern void _ZN7S7490C72v1Ev();
extern void _ZN7S7490C7D1Ev();
extern void _ZN7S7490C7D0Ev();
extern void ABISELECT(_ZTv0_n64_N7S7490C7D1Ev,_ZTv0_n32_N7S7490C7D1Ev)();
extern void ABISELECT(_ZThn8_N7S7490C7D1Ev,_ZThn4_N7S7490C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7490C7D0Ev,_ZTv0_n32_N7S7490C7D0Ev)();
extern void ABISELECT(_ZThn8_N7S7490C7D0Ev,_ZThn4_N7S7490C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7490C7D1Ev,_ZTv0_n28_N7S7490C7D1Ev)();
extern void ABISELECT(_ZThn72_N7S7490C7D1Ev,_ZThn56_N7S7490C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7490C7D0Ev,_ZTv0_n28_N7S7490C7D0Ev)();
extern void ABISELECT(_ZThn72_N7S7490C7D0Ev,_ZThn56_N7S7490C7D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7490C7D1Ev,_ZTv0_n32_N7S7490C7D1Ev)();
extern void ABISELECT(_ZThn88_N7S7490C7D1Ev,_ZThn64_N7S7490C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7490C7D0Ev,_ZTv0_n32_N7S7490C7D0Ev)();
extern void ABISELECT(_ZThn88_N7S7490C7D0Ev,_ZThn64_N7S7490C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7490C7[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(72,56),
  ABISELECT(68,52),
  ABISELECT(68,52),
  ABISELECT(24,12),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C7[0]),
  (VTBL_ENTRY)&_ZN7S7490C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7490C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C7D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7490C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7490C7D1Ev,_ZTv0_n32_N7S7490C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7490C7D0Ev,_ZTv0_n32_N7S7490C7D0Ev),
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7490C7[0]),
  ABISELECT(-72,-56),
  ABISELECT(-72,-56),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-72,-56),
  (VTBL_ENTRY)&(_ZTI7S7490C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7490C7D1Ev,_ZTv0_n28_N7S7490C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7490C7D0Ev,_ZTv0_n28_N7S7490C7D0Ev),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-64,-52),
  ABISELECT(-20,-12),
  ABISELECT(-20,-12),
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI7S7490C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7490C7D1Ev,_ZTv0_n32_N7S7490C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7490C7D0Ev,_ZTv0_n32_N7S7490C7D0Ev),
};
extern VTBL_ENTRY _ZTV7S7490C7[];
extern void _ZN7S7490C8D1Ev();
extern void _ZN7S7490C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7490C8__7S7490C7[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C8[0]),
  (VTBL_ENTRY)&_ZN7S7490C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C8D0Ev,
};
extern void _ZN7S7490C2D1Ev();
extern void _ZN7S7490C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7490C27S7490C8__7S7490C7[] = {
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
  (VTBL_ENTRY)&_ZN7S7490C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C27S7490C8__7S7490C7[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C8__7S7490C7[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7490C8[0]),
};
extern void ABISELECT(_ZTv0_n56_N7S7490C8D1Ev,_ZTv0_n28_N7S7490C8D1Ev)();
extern void ABISELECT(_ZThn64_N7S7490C8D1Ev,_ZThn52_N7S7490C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7490C8D0Ev,_ZTv0_n28_N7S7490C8D0Ev)();
extern void ABISELECT(_ZThn64_N7S7490C8D0Ev,_ZThn52_N7S7490C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7490C9__7S7490C8__7S7490C7[] = {
  ABISELECT(-64,-52),
  ABISELECT(-72,-56),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI7S7490C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7490C8D1Ev,_ZTv0_n28_N7S7490C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7490C8D0Ev,_ZTv0_n28_N7S7490C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C7[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C5[0]),
};
extern void _ZN7S7490C9D1Ev();
extern void _ZN7S7490C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7490C9__7S7490C7[] = {
  ABISELECT(-72,-56),
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C9[0]),
  (VTBL_ENTRY)&_ZN7S7490C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C9D0Ev,
};
extern void _ZN7S7490C2D1Ev();
extern void _ZN7S7490C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7490C27S7490C9__A1__7S7490C7[] = {
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
  (VTBL_ENTRY)&_ZN7S7490C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C27S7490C9__A1__7S7490C7[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C9__7S7490C7[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI7S7490C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7490C11__7S7490C7[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7490C11[0]),
};
extern void _ZN8S7490C12D1Ev();
extern void _ZN8S7490C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7490C12__7S7490C7[] = {
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-64,-52),
  ABISELECT(-20,-12),
  ABISELECT(-20,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7490C12[0]),
  (VTBL_ENTRY)&_ZN8S7490C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7490C12D0Ev,
};
extern void _ZN7S7490C2D1Ev();
extern void _ZN7S7490C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7490C28S7490C12__A2__7S7490C7[] = {
  ABISELECT(-64,-52),
  ABISELECT(-20,-12),
  ABISELECT(-20,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
  (VTBL_ENTRY)&_ZN7S7490C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C28S7490C12__A2__7S7490C7[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(64,52),
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__8S7490C12__7S7490C7[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(64,52),
  (VTBL_ENTRY)&(_ZTI8S7490C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7490C11__8S7490C12__7S7490C7[] = {
  0,
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI8S7490C12[0]),
};
static  VTT_ENTRY vtt_S7490C7[] = {
  {&(_ZTV7S7490C7[10]),  10,46},
  {&(_ZTV7S7490C7[21]),  21,46},
  {&(_ZTV7S7490C7[27]),  27,46},
  {&(_ZTV7S7490C7[34]),  34,46},
  {&(_ZTV7S7490C7[10]),  10,46},
  {&(_ZTV7S7490C7[44]),  44,46},
  {&(_tg__ZTV7S7490C8__7S7490C7[7]),  7,9},
  {&(_tg__ZTV7S7490C27S7490C8__7S7490C7[5]),  5,7},
  {&(_tg__ZTV7S7490C5__7S7490C27S7490C8__7S7490C7[4]),  4,4},
  {&(_tg__ZTV7S7490C5__7S7490C8__7S7490C7[4]),  4,4},
  {&(_tg__ZTV7S7490C9__7S7490C8__7S7490C7[7]),  7,9},
  {&(_tg__ZTV7S7490C5__7S7490C7[4]),  4,4},
  {&(_tg__ZTV7S7490C9__7S7490C7[6]),  6,8},
  {&(_tg__ZTV7S7490C27S7490C9__A1__7S7490C7[5]),  5,7},
  {&(_tg__ZTV7S7490C5__7S7490C27S7490C9__A1__7S7490C7[4]),  4,4},
  {&(_tg__ZTV7S7490C5__7S7490C9__7S7490C7[4]),  4,4},
  {&(_tg__ZTV8S7490C11__7S7490C7[3]),  3,3},
  {&(_tg__ZTV8S7490C12__7S7490C7[7]),  7,9},
  {&(_tg__ZTV7S7490C28S7490C12__A2__7S7490C7[5]),  5,7},
  {&(_tg__ZTV7S7490C5__7S7490C28S7490C12__A2__7S7490C7[4]),  4,4},
  {&(_tg__ZTV7S7490C5__8S7490C12__7S7490C7[4]),  4,4},
  {&(_tg__ZTV8S7490C11__8S7490C12__7S7490C7[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7490C7[];
extern  VTBL_ENTRY _ZTV7S7490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C7[];
static VTBL_ENTRY alt_thunk_names207[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7490C8D0Ev,_ZTv0_n28_N7S7490C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7490C8D0Ev,_ZThn52_N7S7490C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7490C8D1Ev,_ZTv0_n28_N7S7490C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7490C8D1Ev,_ZThn52_N7S7490C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7490C7D0Ev,_ZTv0_n28_N7S7490C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7490C7D0Ev,_ZThn56_N7S7490C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7490C7D1Ev,_ZTv0_n28_N7S7490C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7490C7D1Ev,_ZThn56_N7S7490C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7490C7D0Ev,_ZTv0_n32_N7S7490C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7490C7D0Ev,_ZThn64_N7S7490C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7490C7D0Ev,_ZThn4_N7S7490C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7490C7D1Ev,_ZTv0_n32_N7S7490C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7490C7D1Ev,_ZThn64_N7S7490C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N7S7490C7D1Ev,_ZThn4_N7S7490C7D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7490C7 = {  "S7490C7", // class name
  bases_S7490C7, 17,
  &(vtc_S7490C7[0]), // expected_vtbl_contents
  &(vtt_S7490C7[0]), // expected_vtt_contents
  ABISELECT(104,72), // object size
  NSPAIRA(_ZTI7S7490C7),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S7490C7),46, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7490C7),22, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names207,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7490C6  : virtual S7490C7 {
  ::S19750C14 s7490c6f0;
  ~S7490C6(); // tgen
  S7490C6(); // tgen
};
//SIG(-1 S7490C6) C1{ VBC2{ VBC3{ BC4{ m} VBC5{ VBC6{ m} VBC4 Fi[9]} BC7{ VBC6 VBC4 VBC5 vd Fp} BC6 VBC8{ VBC4 BC6 BC7 VBC9{ m} vd} vd} VBC10{ BC4 VBC9} VBC11{ BC7 BC4 VBC10 vd} BC6 v1} FC12{ VBC13{ VBC9 vd} vd FC6}}


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

static void Test_S7490C6()
{
  extern Class_Descriptor cd_S7490C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,21)];
    init_test(&cd_S7490C6, buf);
    S7490C6 *dp, &lv = *(dp=new (buf) S7490C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,80), "sizeof(S7490C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7490C6)");
    /*is_ambiguous_... S7490C8::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S7490C8*), ABISELECT(24,12), "S7490C6");
    check_base_class_offset(lv, (S2264C38*)(S7490C5*), ABISELECT(84,60), "S7490C6");
    /*is_ambiguous_... S7490C8::S7490C2 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7490C2*)(S7490C8*), ABISELECT(84,60), "S7490C6");
    check_base_class_offset(lv, (S2264C38*)(S7490C2*)(S7490C9*), ABISELECT(84,60), "S7490C6");
    check_base_class_offset(lv, (S2264C38*)(S7490C2*)(S7490C12*), ABISELECT(84,60), "S7490C6");
    check_base_class_offset(lv, (S2264C28*)(S7490C5*), ABISELECT(84,60), "S7490C6");
    /*is_ambiguous_... S7490C8::S7490C2 */ AMB_check_base_class_offset(lv, (S2264C28*)(S7490C2*)(S7490C8*), ABISELECT(84,60), "S7490C6");
    check_base_class_offset(lv, (S2264C28*)(S7490C9*), ABISELECT(84,60), "S7490C6");
    check_base_class_offset(lv, (S2264C28*)(S7490C2*)(S7490C9*), ABISELECT(84,60), "S7490C6");
    check_base_class_offset(lv, (S2264C28*)(S7490C2*)(S7490C12*), ABISELECT(84,60), "S7490C6");
    check_base_class_offset(lv, (S7490C5*)(S7490C8*), ABISELECT(40,20), "S7490C6");
    /*is_ambiguous_... S7490C8::S7490C2 */ AMB_check_base_class_offset(lv, (S7490C5*)(S7490C2*)(S7490C8*), ABISELECT(40,20), "S7490C6");
    check_base_class_offset(lv, (S7490C5*)(S7490C2*)(S7490C9*), ABISELECT(40,20), "S7490C6");
    check_base_class_offset(lv, (S7490C5*)(S7490C2*)(S7490C12*), ABISELECT(40,20), "S7490C6");
    /*is_ambiguous_... S7490C8::S7490C2 */ AMB_check_base_class_offset(lv, (S7490C2*)(S7490C8*), ABISELECT(24,12), "S7490C6");
    /*is_ambiguous_... S7490C8::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7490C8*), ABISELECT(24,12), "S7490C6");
    /*is_ambiguous_... S7490C9::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7490C9*), ABISELECT(88,64), "S7490C6");
    check_base_class_offset(lv, (S7490C2*)(S7490C9*), ABISELECT(88,64), "S7490C6");
    check_base_class_offset(lv, (S2264C24*)(S7490C9*), 0, "S7490C6");
    check_base_class_offset(lv, (S2264C24*)(S7490C11*), 0, "S7490C6");
    check_base_class_offset(lv, (S7490C9*)(S7490C8*), ABISELECT(88,64), "S7490C6");
    check_base_class_offset(lv, (S7490C8*)(S7490C7*), ABISELECT(24,12), "S7490C6");
    check_base_class_offset(lv, (S2264C28*)(S7490C11*), 0, "S7490C6");
    check_base_class_offset(lv, (S7490C11*)(S7490C7*), 0, "S7490C6");
    check_base_class_offset(lv, (S7490C11*)(S7490C12*), 0, "S7490C6");
    check_base_class_offset(lv, (S7490C2*)(S7490C12*), ABISELECT(104,72), "S7490C6");
    /*is_ambiguous_... S7490C12::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S7490C12*), ABISELECT(104,72), "S7490C6");
    check_base_class_offset(lv, (S7490C12*)(S7490C7*), ABISELECT(104,72), "S7490C6");
    /*is_ambiguous_... S7490C7::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7490C7*), 0, "S7490C6");
    check_base_class_offset(lv, (S7490C7*), 0, "S7490C6");
    check_field_offset(lv, s7490c6f0, ABISELECT(8,4), "S7490C6.s7490c6f0");
    test_class_info(&lv, &cd_S7490C6);
    dp->~S7490C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7490C6(Test_S7490C6, "S7490C6", ABISELECT(120,80));

#else // __cplusplus

extern void _ZN7S7490C6C1Ev();
extern void _ZN7S7490C6D1Ev();
Name_Map name_map_S7490C6[] = {
  NSPAIR(_ZN7S7490C6C1Ev),
  NSPAIR(_ZN7S7490C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S7490C5;
extern VTBL_ENTRY _ZTI7S7490C5[];
extern  VTBL_ENTRY _ZTV7S7490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C5[];
extern Class_Descriptor cd_S7490C2;
extern VTBL_ENTRY _ZTI7S7490C2[];
extern  VTBL_ENTRY _ZTV7S7490C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C2[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7490C2;
extern VTBL_ENTRY _ZTI7S7490C2[];
extern  VTBL_ENTRY _ZTV7S7490C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C2[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S7490C9;
extern VTBL_ENTRY _ZTI7S7490C9[];
extern  VTBL_ENTRY _ZTV7S7490C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C9[];
extern Class_Descriptor cd_S7490C8;
extern VTBL_ENTRY _ZTI7S7490C8[];
extern  VTBL_ENTRY _ZTV7S7490C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C8[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S7490C11;
extern VTBL_ENTRY _ZTI8S7490C11[];
extern  VTBL_ENTRY _ZTV8S7490C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7490C11[];
extern Class_Descriptor cd_S7490C2;
extern VTBL_ENTRY _ZTI7S7490C2[];
extern  VTBL_ENTRY _ZTV7S7490C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C2[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S7490C12;
extern VTBL_ENTRY _ZTI8S7490C12[];
extern  VTBL_ENTRY _ZTV8S7490C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7490C12[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7490C7;
extern VTBL_ENTRY _ZTI7S7490C7[];
extern  VTBL_ENTRY _ZTV7S7490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C7[];
static Base_Class bases_S7490C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    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
    10, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(84,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_S2264C28,    ABISELECT(84,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_S7490C5,    ABISELECT(40,20), //bcp->offset
    26, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S7490C2,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    10, //immediately_derived
  0, 0},
  {&cd_S2264C38,    ABISELECT(88,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
    9, //immediately_derived
  0, 0},
  {&cd_S7490C2,    ABISELECT(88,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7490C9,    ABISELECT(88,64), //bcp->offset
    30, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S7490C8,    ABISELECT(24,12), //bcp->offset
    16, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7490C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    15, //immediately_derived
  0, 1},
  {&cd_S7490C2,    ABISELECT(104,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(104,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
    15, //immediately_derived
  0, 0},
  {&cd_S7490C12,    ABISELECT(104,72), //bcp->offset
    39, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7490C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7490C6[];
extern void _ZN7S7490C72v1Ev();
extern void _ZN7S7490C6D1Ev();
extern void _ZN7S7490C6D0Ev();
extern void ABISELECT(_ZTv0_n64_N7S7490C6D1Ev,_ZTv0_n32_N7S7490C6D1Ev)();
extern void ABISELECT(_ZThn24_N7S7490C6D1Ev,_ZThn12_N7S7490C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7490C6D0Ev,_ZTv0_n32_N7S7490C6D0Ev)();
extern void ABISELECT(_ZThn24_N7S7490C6D0Ev,_ZThn12_N7S7490C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7490C6D1Ev,_ZTv0_n28_N7S7490C6D1Ev)();
extern void ABISELECT(_ZThn88_N7S7490C6D1Ev,_ZThn64_N7S7490C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7490C6D0Ev,_ZTv0_n28_N7S7490C6D0Ev)();
extern void ABISELECT(_ZThn88_N7S7490C6D0Ev,_ZThn64_N7S7490C6D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7490C6D1Ev,_ZTv0_n32_N7S7490C6D1Ev)();
extern void ABISELECT(_ZThn104_N7S7490C6D1Ev,_ZThn72_N7S7490C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7490C6D0Ev,_ZTv0_n32_N7S7490C6D0Ev)();
extern void ABISELECT(_ZThn104_N7S7490C6D0Ev,_ZThn72_N7S7490C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7490C6[] = {
  0,
  0,
  0,
  ABISELECT(104,72),
  0,
  ABISELECT(88,64),
  ABISELECT(84,60),
  ABISELECT(84,60),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C6[0]),
  (VTBL_ENTRY)&_ZN7S7490C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7490C6D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C6D0Ev,
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7490C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7490C6D1Ev,_ZTv0_n32_N7S7490C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7490C6D0Ev,_ZTv0_n32_N7S7490C6D0Ev),
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7490C6[0]),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI7S7490C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7490C6D1Ev,_ZTv0_n28_N7S7490C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7490C6D0Ev,_ZTv0_n28_N7S7490C6D0Ev),
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  ABISELECT(-64,-52),
  ABISELECT(-20,-12),
  ABISELECT(-20,-12),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI7S7490C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7490C6D1Ev,_ZTv0_n32_N7S7490C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7490C6D0Ev,_ZTv0_n32_N7S7490C6D0Ev),
};
extern VTBL_ENTRY _ZTV7S7490C6[];
extern void _ZN7S7490C72v1Ev();
extern void _ZN7S7490C7D1Ev();
extern void _ZN7S7490C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7490C7__7S7490C6[] = {
  ABISELECT(104,72),
  0,
  ABISELECT(88,64),
  ABISELECT(84,60),
  ABISELECT(84,60),
  ABISELECT(40,20),
  ABISELECT(24,12),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C7[0]),
  (VTBL_ENTRY)&_ZN7S7490C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7490C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C7D0Ev,
};
extern void ABISELECT(_ZTv0_n64_N7S7490C7D1Ev,_ZTv0_n32_N7S7490C7D1Ev)();
extern void ABISELECT(_ZThn24_N7S7490C7D1Ev,_ZThn12_N7S7490C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7490C7D0Ev,_ZTv0_n32_N7S7490C7D0Ev)();
extern void ABISELECT(_ZThn24_N7S7490C7D0Ev,_ZThn12_N7S7490C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7490C8__7S7490C7__7S7490C6[] = {
  ABISELECT(-24,-12),
  ABISELECT(-24,-12),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7490C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7490C7D1Ev,_ZTv0_n32_N7S7490C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7490C7D0Ev,_ZTv0_n32_N7S7490C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C7__7S7490C6[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7490C7[0]),
};
extern void ABISELECT(_ZTv0_n56_N7S7490C7D1Ev,_ZTv0_n28_N7S7490C7D1Ev)();
extern void ABISELECT(_ZThn88_N7S7490C7D1Ev,_ZThn64_N7S7490C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7490C7D0Ev,_ZTv0_n28_N7S7490C7D0Ev)();
extern void ABISELECT(_ZThn88_N7S7490C7D0Ev,_ZThn64_N7S7490C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7490C9__7S7490C7__7S7490C6[] = {
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI7S7490C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7490C7D1Ev,_ZTv0_n28_N7S7490C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7490C7D0Ev,_ZTv0_n28_N7S7490C7D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N7S7490C7D1Ev,_ZTv0_n32_N7S7490C7D1Ev)();
extern void ABISELECT(_ZThn104_N7S7490C7D1Ev,_ZThn72_N7S7490C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7490C7D0Ev,_ZTv0_n32_N7S7490C7D0Ev)();
extern void ABISELECT(_ZThn104_N7S7490C7D0Ev,_ZThn72_N7S7490C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7490C12__7S7490C7__7S7490C6[] = {
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  ABISELECT(-64,-52),
  ABISELECT(-20,-12),
  ABISELECT(-20,-12),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI7S7490C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7490C7D1Ev,_ZTv0_n32_N7S7490C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7490C7D0Ev,_ZTv0_n32_N7S7490C7D0Ev),
};
extern void _ZN7S7490C8D1Ev();
extern void _ZN7S7490C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7490C8__7S7490C6[] = {
  ABISELECT(-24,-12),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C8[0]),
  (VTBL_ENTRY)&_ZN7S7490C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C8D0Ev,
};
extern void _ZN7S7490C2D1Ev();
extern void _ZN7S7490C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7490C27S7490C8__7S7490C6[] = {
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
  (VTBL_ENTRY)&_ZN7S7490C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C27S7490C8__7S7490C6[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C8__7S7490C6[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7490C8[0]),
};
extern void ABISELECT(_ZTv0_n56_N7S7490C8D1Ev,_ZTv0_n28_N7S7490C8D1Ev)();
extern void ABISELECT(_ZThn64_N7S7490C8D1Ev,_ZThn52_N7S7490C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7490C8D0Ev,_ZTv0_n28_N7S7490C8D0Ev)();
extern void ABISELECT(_ZThn64_N7S7490C8D0Ev,_ZThn52_N7S7490C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7490C9__7S7490C8__7S7490C6[] = {
  ABISELECT(-64,-52),
  ABISELECT(-88,-64),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI7S7490C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7490C8D1Ev,_ZTv0_n28_N7S7490C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7490C8D0Ev,_ZTv0_n28_N7S7490C8D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C6[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C5[0]),
};
extern void _ZN7S7490C9D1Ev();
extern void _ZN7S7490C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7490C9__7S7490C6[] = {
  ABISELECT(-88,-64),
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C9[0]),
  (VTBL_ENTRY)&_ZN7S7490C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C9D0Ev,
};
extern void _ZN7S7490C2D1Ev();
extern void _ZN7S7490C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7490C27S7490C9__A1__7S7490C6[] = {
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
  (VTBL_ENTRY)&_ZN7S7490C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C27S7490C9__A1__7S7490C6[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C9__7S7490C6[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI7S7490C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7490C11__7S7490C6[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S7490C11[0]),
};
extern void _ZN8S7490C12D1Ev();
extern void _ZN8S7490C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7490C12__7S7490C6[] = {
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  ABISELECT(-64,-52),
  ABISELECT(-20,-12),
  ABISELECT(-20,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S7490C12[0]),
  (VTBL_ENTRY)&_ZN8S7490C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7490C12D0Ev,
};
extern void _ZN7S7490C2D1Ev();
extern void _ZN7S7490C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7490C28S7490C12__A2__7S7490C6[] = {
  ABISELECT(-64,-52),
  ABISELECT(-20,-12),
  ABISELECT(-20,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
  (VTBL_ENTRY)&_ZN7S7490C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C28S7490C12__A2__7S7490C6[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(64,52),
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__8S7490C12__7S7490C6[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(64,52),
  (VTBL_ENTRY)&(_ZTI8S7490C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7490C11__8S7490C12__7S7490C6[] = {
  0,
  ABISELECT(104,72),
  (VTBL_ENTRY)&(_ZTI8S7490C12[0]),
};
static  VTT_ENTRY vtt_S7490C6[] = {
  {&(_ZTV7S7490C6[13]),  13,49},
  {&(_ZTV7S7490C6[13]),  13,49},
  {&(_ZTV7S7490C6[24]),  24,49},
  {&(_ZTV7S7490C6[30]),  30,49},
  {&(_ZTV7S7490C6[37]),  37,49},
  {&(_ZTV7S7490C6[13]),  13,49},
  {&(_ZTV7S7490C6[47]),  47,49},
  {&(_tg__ZTV7S7490C7__7S7490C6[10]),  10,13},
  {&(_tg__ZTV7S7490C8__7S7490C7__7S7490C6[8]),  8,10},
  {&(_tg__ZTV7S7490C5__7S7490C7__7S7490C6[4]),  4,4},
  {&(_tg__ZTV7S7490C9__7S7490C7__7S7490C6[7]),  7,9},
  {&(_tg__ZTV7S7490C7__7S7490C6[10]),  10,13},
  {&(_tg__ZTV8S7490C12__7S7490C7__7S7490C6[8]),  8,10},
  {&(_tg__ZTV7S7490C8__7S7490C6[7]),  7,9},
  {&(_tg__ZTV7S7490C27S7490C8__7S7490C6[5]),  5,7},
  {&(_tg__ZTV7S7490C5__7S7490C27S7490C8__7S7490C6[4]),  4,4},
  {&(_tg__ZTV7S7490C5__7S7490C8__7S7490C6[4]),  4,4},
  {&(_tg__ZTV7S7490C9__7S7490C8__7S7490C6[7]),  7,9},
  {&(_tg__ZTV7S7490C5__7S7490C6[4]),  4,4},
  {&(_tg__ZTV7S7490C9__7S7490C6[6]),  6,8},
  {&(_tg__ZTV7S7490C27S7490C9__A1__7S7490C6[5]),  5,7},
  {&(_tg__ZTV7S7490C5__7S7490C27S7490C9__A1__7S7490C6[4]),  4,4},
  {&(_tg__ZTV7S7490C5__7S7490C9__7S7490C6[4]),  4,4},
  {&(_tg__ZTV8S7490C11__7S7490C6[3]),  3,3},
  {&(_tg__ZTV8S7490C12__7S7490C6[7]),  7,9},
  {&(_tg__ZTV7S7490C28S7490C12__A2__7S7490C6[5]),  5,7},
  {&(_tg__ZTV7S7490C5__7S7490C28S7490C12__A2__7S7490C6[4]),  4,4},
  {&(_tg__ZTV7S7490C5__8S7490C12__7S7490C6[4]),  4,4},
  {&(_tg__ZTV8S7490C11__8S7490C12__7S7490C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7490C6[];
extern  VTBL_ENTRY _ZTV7S7490C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C6[];
static VTBL_ENTRY alt_thunk_names208[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7490C8D0Ev,_ZTv0_n28_N7S7490C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7490C8D0Ev,_ZThn52_N7S7490C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7490C8D1Ev,_ZTv0_n28_N7S7490C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S7490C8D1Ev,_ZThn52_N7S7490C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7490C7D0Ev,_ZTv0_n28_N7S7490C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7490C7D0Ev,_ZThn64_N7S7490C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7490C7D1Ev,_ZTv0_n28_N7S7490C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7490C7D1Ev,_ZThn64_N7S7490C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7490C7D0Ev,_ZTv0_n32_N7S7490C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7490C7D0Ev,_ZThn72_N7S7490C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7490C7D0Ev,_ZThn12_N7S7490C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7490C7D1Ev,_ZTv0_n32_N7S7490C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7490C7D1Ev,_ZThn72_N7S7490C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7490C7D1Ev,_ZThn12_N7S7490C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7490C6D0Ev,_ZTv0_n28_N7S7490C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7490C6D0Ev,_ZThn64_N7S7490C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7490C6D1Ev,_ZTv0_n28_N7S7490C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7490C6D1Ev,_ZThn64_N7S7490C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7490C6D0Ev,_ZTv0_n32_N7S7490C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7490C6D0Ev,_ZThn72_N7S7490C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7490C6D0Ev,_ZThn12_N7S7490C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7490C6D1Ev,_ZTv0_n32_N7S7490C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7490C6D1Ev,_ZThn72_N7S7490C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn24_N7S7490C6D1Ev,_ZThn12_N7S7490C6D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7490C6 = {  "S7490C6", // class name
  bases_S7490C6, 18,
  &(vtc_S7490C6[0]), // expected_vtbl_contents
  &(vtt_S7490C6[0]), // expected_vtt_contents
  ABISELECT(120,80), // object size
  NSPAIRA(_ZTI7S7490C6),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7490C6),49, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7490C6),29, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names208,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7490C1  : S7490C2 , S7490C6 {
  virtual  ~S7490C1(); // _ZN7S7490C1D2Ev
  S7490C1(); // tgen
};
//SIG(1 S7490C1) C1{ BC2{ VBC3{ m} VBC4{ m} VBC5{ VBC3 VBC4 Fi[9]} vd Fp} BC6{ VBC7{ VBC8{ BC4 VBC5 BC2 BC3 VBC9{ VBC4 BC3 BC2 VBC10{ m} vd} vd} VBC11{ BC4 VBC10} VBC12{ BC2 BC4 VBC11 vd} BC3 v1} FC13{ VBC14{ VBC10 vd} vd FC3}} vd}


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

static void Test_S7490C1()
{
  extern Class_Descriptor cd_S7490C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,22)];
    init_test(&cd_S7490C1, buf);
    S7490C1 *dp, &lv = *(dp=new (buf) S7490C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,84), "sizeof(S7490C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7490C1)");
    /*is_ambiguous_... S7490C1::S7490C2 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7490C2*), 0, "S7490C1");
    check_base_class_offset(lv, (S2264C38*)(S7490C5*), 0, "S7490C1");
    /*is_ambiguous_... S7490C8::S7490C2 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7490C2*)(S7490C8*), 0, "S7490C1");
    check_base_class_offset(lv, (S2264C38*)(S7490C2*)(S7490C9*), 0, "S7490C1");
    check_base_class_offset(lv, (S2264C38*)(S7490C2*)(S7490C12*), 0, "S7490C1");
    /*is_ambiguous_... S7490C1::S7490C2 */ AMB_check_base_class_offset(lv, (S2264C28*)(S7490C2*), 0, "S7490C1");
    check_base_class_offset(lv, (S2264C28*)(S7490C5*), 0, "S7490C1");
    /*is_ambiguous_... S7490C8::S7490C2 */ AMB_check_base_class_offset(lv, (S2264C28*)(S7490C2*)(S7490C8*), 0, "S7490C1");
    check_base_class_offset(lv, (S2264C28*)(S7490C9*), 0, "S7490C1");
    check_base_class_offset(lv, (S2264C28*)(S7490C2*)(S7490C9*), 0, "S7490C1");
    check_base_class_offset(lv, (S2264C28*)(S7490C2*)(S7490C12*), 0, "S7490C1");
    /*is_ambiguous_... S7490C1::S7490C2 */ AMB_check_base_class_offset(lv, (S7490C5*)(S7490C2*), ABISELECT(40,20), "S7490C1");
    check_base_class_offset(lv, (S7490C5*)(S7490C8*), ABISELECT(40,20), "S7490C1");
    /*is_ambiguous_... S7490C8::S7490C2 */ AMB_check_base_class_offset(lv, (S7490C5*)(S7490C2*)(S7490C8*), ABISELECT(40,20), "S7490C1");
    check_base_class_offset(lv, (S7490C5*)(S7490C2*)(S7490C9*), ABISELECT(40,20), "S7490C1");
    check_base_class_offset(lv, (S7490C5*)(S7490C2*)(S7490C12*), ABISELECT(40,20), "S7490C1");
    /*is_ambiguous_... S7490C1::S7490C2 */ AMB_check_base_class_offset(lv, (S7490C2*), 0, "S7490C1");
    /*is_ambiguous_... S7490C8::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S7490C8*), ABISELECT(88,60), "S7490C1");
    /*is_ambiguous_... S7490C8::S7490C2 */ AMB_check_base_class_offset(lv, (S7490C2*)(S7490C8*), ABISELECT(88,60), "S7490C1");
    /*is_ambiguous_... S7490C8::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7490C8*), ABISELECT(88,60), "S7490C1");
    /*is_ambiguous_... S7490C9::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7490C9*), ABISELECT(104,68), "S7490C1");
    check_base_class_offset(lv, (S7490C2*)(S7490C9*), ABISELECT(104,68), "S7490C1");
    check_base_class_offset(lv, (S2264C24*)(S7490C9*), 0, "S7490C1");
    check_base_class_offset(lv, (S2264C24*)(S7490C11*), 0, "S7490C1");
    check_base_class_offset(lv, (S7490C9*)(S7490C8*), ABISELECT(104,68), "S7490C1");
    check_base_class_offset(lv, (S7490C8*)(S7490C7*), ABISELECT(88,60), "S7490C1");
    check_base_class_offset(lv, (S2264C28*)(S7490C11*), ABISELECT(16,8), "S7490C1");
    check_base_class_offset(lv, (S7490C11*)(S7490C7*), ABISELECT(16,8), "S7490C1");
    check_base_class_offset(lv, (S7490C11*)(S7490C12*), ABISELECT(16,8), "S7490C1");
    check_base_class_offset(lv, (S7490C2*)(S7490C12*), ABISELECT(120,76), "S7490C1");
    /*is_ambiguous_... S7490C12::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S7490C12*), ABISELECT(120,76), "S7490C1");
    check_base_class_offset(lv, (S7490C12*)(S7490C7*), ABISELECT(120,76), "S7490C1");
    /*is_ambiguous_... S7490C7::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S7490C7*), ABISELECT(16,8), "S7490C1");
    check_base_class_offset(lv, (S7490C7*)(S7490C6*), ABISELECT(16,8), "S7490C1");
    check_base_class_offset(lv, (S7490C6*), ABISELECT(16,8), "S7490C1");
    test_class_info(&lv, &cd_S7490C1);
    dp->~S7490C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7490C1(Test_S7490C1, "S7490C1", ABISELECT(136,84));

#else // __cplusplus

extern void _ZN7S7490C1C1Ev();
extern void _ZN7S7490C1D2Ev();
Name_Map name_map_S7490C1[] = {
  NSPAIR(_ZN7S7490C1C1Ev),
  NSPAIR(_ZN7S7490C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S7490C5;
extern VTBL_ENTRY _ZTI7S7490C5[];
extern  VTBL_ENTRY _ZTV7S7490C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C5[];
extern Class_Descriptor cd_S7490C2;
extern VTBL_ENTRY _ZTI7S7490C2[];
extern  VTBL_ENTRY _ZTV7S7490C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C2[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S7490C2;
extern VTBL_ENTRY _ZTI7S7490C2[];
extern  VTBL_ENTRY _ZTV7S7490C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C2[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7490C2;
extern VTBL_ENTRY _ZTI7S7490C2[];
extern  VTBL_ENTRY _ZTV7S7490C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C2[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S7490C9;
extern VTBL_ENTRY _ZTI7S7490C9[];
extern  VTBL_ENTRY _ZTV7S7490C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C9[];
extern Class_Descriptor cd_S7490C8;
extern VTBL_ENTRY _ZTI7S7490C8[];
extern  VTBL_ENTRY _ZTV7S7490C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C8[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S7490C11;
extern VTBL_ENTRY _ZTI8S7490C11[];
extern  VTBL_ENTRY _ZTV8S7490C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7490C11[];
extern Class_Descriptor cd_S7490C2;
extern VTBL_ENTRY _ZTI7S7490C2[];
extern  VTBL_ENTRY _ZTV7S7490C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C2[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S7490C12;
extern VTBL_ENTRY _ZTI8S7490C12[];
extern  VTBL_ENTRY _ZTV8S7490C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S7490C12[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7490C7;
extern VTBL_ENTRY _ZTI7S7490C7[];
extern  VTBL_ENTRY _ZTV7S7490C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C7[];
extern Class_Descriptor cd_S7490C6;
extern VTBL_ENTRY _ZTI7S7490C6[];
extern  VTBL_ENTRY _ZTV7S7490C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C6[];
static Base_Class bases_S7490C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7490C5,    ABISELECT(40,20), //bcp->offset
    29, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S7490C2,    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_S2264C28,    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
    11, //immediately_derived
  0, 0},
  {&cd_S7490C2,    ABISELECT(88,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    11, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    10, //immediately_derived
  0, 0},
  {&cd_S7490C2,    ABISELECT(104,68), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7490C9,    ABISELECT(104,68), //bcp->offset
    43, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S7490C8,    ABISELECT(88,60), //bcp->offset
    33, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    25, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S2264C28,    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
    13, //immediately_derived
  0, 0},
  {&cd_S7490C11,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    16, //bcp->index_in_construction_vtbl_array
    34, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S7490C2,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    16, //immediately_derived
  0, 0},
  {&cd_S2264C28,    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
    16, //immediately_derived
  0, 0},
  {&cd_S7490C12,    ABISELECT(120,76), //bcp->offset
    52, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    35, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S2264C38,    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
    18, //immediately_derived
  0, 0},
  {&cd_S7490C7,    ABISELECT(16,8), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S7490C6,    ABISELECT(16,8), //bcp->offset
    13, //bcp->virtual_function_table_offset
    13, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7490C1[];
extern void _ZN7S7490C1D1Ev();
extern void _ZN7S7490C1D0Ev();
extern void _ZN7S7490C72v1Ev();
extern void ABISELECT(_ZTv0_n96_N7S7490C1D1Ev,_ZTv0_n48_N7S7490C1D1Ev)();
extern void ABISELECT(_ZThn16_N7S7490C1D1Ev,_ZThn8_N7S7490C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7490C1D0Ev,_ZTv0_n48_N7S7490C1D0Ev)();
extern void ABISELECT(_ZThn16_N7S7490C1D0Ev,_ZThn8_N7S7490C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7490C1D1Ev,_ZTv0_n32_N7S7490C1D1Ev)();
extern void ABISELECT(_ZThn88_N7S7490C1D1Ev,_ZThn60_N7S7490C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7490C1D0Ev,_ZTv0_n32_N7S7490C1D0Ev)();
extern void ABISELECT(_ZThn88_N7S7490C1D0Ev,_ZThn60_N7S7490C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7490C1D1Ev,_ZTv0_n28_N7S7490C1D1Ev)();
extern void ABISELECT(_ZThn104_N7S7490C1D1Ev,_ZThn68_N7S7490C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7490C1D0Ev,_ZTv0_n28_N7S7490C1D0Ev)();
extern void ABISELECT(_ZThn104_N7S7490C1D0Ev,_ZThn68_N7S7490C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7490C1D1Ev,_ZTv0_n32_N7S7490C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S7490C1D1Ev,_ZThn76_N7S7490C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7490C1D0Ev,_ZTv0_n32_N7S7490C1D0Ev)();
extern void ABISELECT(_ZThn120_N7S7490C1D0Ev,_ZThn76_N7S7490C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S7490C1[] = {
  ABISELECT(120,76),
  ABISELECT(16,8),
  0,
  ABISELECT(104,68),
  ABISELECT(88,60),
  ABISELECT(16,8),
  ABISELECT(40,20),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C1[0]),
  (VTBL_ENTRY)&_ZN7S7490C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C1D0Ev,
  0,
  ABISELECT(-16,-8),
  0,
  ABISELECT(104,68),
  0,
  ABISELECT(88,60),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(24,12),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7490C1[0]),
  (VTBL_ENTRY)&_ZN7S7490C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7490C1D1Ev,_ZTv0_n48_N7S7490C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7490C1D0Ev,_ZTv0_n48_N7S7490C1D0Ev),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7490C1[0]),
  ABISELECT(-88,-60),
  ABISELECT(-88,-60),
  ABISELECT(16,8),
  ABISELECT(-48,-40),
  ABISELECT(-88,-60),
  ABISELECT(-88,-60),
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI7S7490C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7490C1D1Ev,_ZTv0_n32_N7S7490C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7490C1D0Ev,_ZTv0_n32_N7S7490C1D0Ev),
  ABISELECT(-104,-68),
  ABISELECT(-104,-68),
  ABISELECT(-64,-48),
  ABISELECT(-104,-68),
  ABISELECT(-104,-68),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI7S7490C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7490C1D1Ev,_ZTv0_n28_N7S7490C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7490C1D0Ev,_ZTv0_n28_N7S7490C1D0Ev),
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  ABISELECT(-104,-68),
  ABISELECT(-80,-56),
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI7S7490C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7490C1D1Ev,_ZTv0_n32_N7S7490C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7490C1D0Ev,_ZTv0_n32_N7S7490C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S7490C1[];
extern void _ZN7S7490C2D1Ev();
extern void _ZN7S7490C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7490C2__7S7490C1[] = {
  ABISELECT(40,20),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
  (VTBL_ENTRY)&_ZN7S7490C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C2__7S7490C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
};
extern void _ZN7S7490C72v1Ev();
extern void ABISELECT(_ZTv0_n96_N7S7490C6D1Ev,_ZTv0_n48_N7S7490C6D1Ev)();
extern void _ZN7S7490C6D1Ev() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S7490C6D0Ev,_ZTv0_n48_N7S7490C6D0Ev)();
extern void _ZN7S7490C6D0Ev() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7490C6__7S7490C1[] = {
  0,
  0,
  0,
  ABISELECT(104,68),
  0,
  ABISELECT(88,60),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(24,12),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C6[0]),
  (VTBL_ENTRY)&_ZN7S7490C72v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7490C6D1Ev,_ZTv0_n48_N7S7490C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S7490C6D0Ev,_ZTv0_n48_N7S7490C6D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N7S7490C6D1Ev,_ZTv0_n32_N7S7490C6D1Ev)();
extern void ABISELECT(_ZThn72_N7S7490C6D1Ev,_ZThn52_N7S7490C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7490C6D0Ev,_ZTv0_n32_N7S7490C6D0Ev)();
extern void ABISELECT(_ZThn72_N7S7490C6D0Ev,_ZThn52_N7S7490C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7490C8__7S7490C6__7S7490C1[] = {
  ABISELECT(-72,-52),
  ABISELECT(-88,-60),
  ABISELECT(16,8),
  ABISELECT(-48,-40),
  ABISELECT(-88,-60),
  ABISELECT(-88,-60),
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S7490C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7490C6D1Ev,_ZTv0_n32_N7S7490C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7490C6D0Ev,_ZTv0_n32_N7S7490C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C6__7S7490C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7490C6[0]),
};
extern void ABISELECT(_ZTv0_n56_N7S7490C6D1Ev,_ZTv0_n28_N7S7490C6D1Ev)();
extern void ABISELECT(_ZThn88_N7S7490C6D1Ev,_ZThn60_N7S7490C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7490C6D0Ev,_ZTv0_n28_N7S7490C6D0Ev)();
extern void ABISELECT(_ZThn88_N7S7490C6D0Ev,_ZThn60_N7S7490C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7490C9__7S7490C6__7S7490C1[] = {
  ABISELECT(-88,-60),
  ABISELECT(-104,-68),
  ABISELECT(-64,-48),
  ABISELECT(-104,-68),
  ABISELECT(-104,-68),
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI7S7490C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7490C6D1Ev,_ZTv0_n28_N7S7490C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7490C6D0Ev,_ZTv0_n28_N7S7490C6D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N7S7490C6D1Ev,_ZTv0_n32_N7S7490C6D1Ev)();
extern void ABISELECT(_ZThn104_N7S7490C6D1Ev,_ZThn68_N7S7490C6D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7490C6D0Ev,_ZTv0_n32_N7S7490C6D0Ev)();
extern void ABISELECT(_ZThn104_N7S7490C6D0Ev,_ZThn68_N7S7490C6D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7490C12__7S7490C6__7S7490C1[] = {
  ABISELECT(-104,-68),
  ABISELECT(-120,-76),
  ABISELECT(-104,-68),
  ABISELECT(-80,-56),
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI7S7490C6[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7490C6D1Ev,_ZTv0_n32_N7S7490C6D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7490C6D0Ev,_ZTv0_n32_N7S7490C6D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C5[0]),
};
extern void _ZN7S7490C72v1Ev();
extern void _ZN7S7490C7D1Ev();
extern void _ZN7S7490C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7490C7__7S7490C1[] = {
  ABISELECT(104,68),
  0,
  ABISELECT(88,60),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(24,12),
  ABISELECT(72,52),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C7[0]),
  (VTBL_ENTRY)&_ZN7S7490C72v1Ev,
  (VTBL_ENTRY)&_ZN7S7490C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C7D0Ev,
};
extern void ABISELECT(_ZTv0_n64_N7S7490C7D1Ev,_ZTv0_n32_N7S7490C7D1Ev)();
extern void ABISELECT(_ZThn72_N7S7490C7D1Ev,_ZThn52_N7S7490C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7490C7D0Ev,_ZTv0_n32_N7S7490C7D0Ev)();
extern void ABISELECT(_ZThn72_N7S7490C7D0Ev,_ZThn52_N7S7490C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7490C8__7S7490C7__7S7490C1[] = {
  ABISELECT(-72,-52),
  ABISELECT(-88,-60),
  ABISELECT(16,8),
  ABISELECT(-48,-40),
  ABISELECT(-88,-60),
  ABISELECT(-88,-60),
  ABISELECT(-72,-52),
  (VTBL_ENTRY)&(_ZTI7S7490C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7490C7D1Ev,_ZTv0_n32_N7S7490C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7490C7D0Ev,_ZTv0_n32_N7S7490C7D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C7__7S7490C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S7490C7[0]),
};
extern void ABISELECT(_ZTv0_n56_N7S7490C7D1Ev,_ZTv0_n28_N7S7490C7D1Ev)();
extern void ABISELECT(_ZThn88_N7S7490C7D1Ev,_ZThn60_N7S7490C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7490C7D0Ev,_ZTv0_n28_N7S7490C7D0Ev)();
extern void ABISELECT(_ZThn88_N7S7490C7D0Ev,_ZThn60_N7S7490C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7490C9__7S7490C7__7S7490C1[] = {
  ABISELECT(-88,-60),
  ABISELECT(-104,-68),
  ABISELECT(-64,-48),
  ABISELECT(-104,-68),
  ABISELECT(-104,-68),
  ABISELECT(-88,-60),
  (VTBL_ENTRY)&(_ZTI7S7490C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7490C7D1Ev,_ZTv0_n28_N7S7490C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7490C7D0Ev,_ZTv0_n28_N7S7490C7D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N7S7490C7D1Ev,_ZTv0_n32_N7S7490C7D1Ev)();
extern void ABISELECT(_ZThn104_N7S7490C7D1Ev,_ZThn68_N7S7490C7D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S7490C7D0Ev,_ZTv0_n32_N7S7490C7D0Ev)();
extern void ABISELECT(_ZThn104_N7S7490C7D0Ev,_ZThn68_N7S7490C7D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S7490C12__7S7490C7__7S7490C1[] = {
  ABISELECT(-104,-68),
  ABISELECT(-120,-76),
  ABISELECT(-104,-68),
  ABISELECT(-80,-56),
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  ABISELECT(-104,-68),
  (VTBL_ENTRY)&(_ZTI7S7490C7[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7490C7D1Ev,_ZTv0_n32_N7S7490C7D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S7490C7D0Ev,_ZTv0_n32_N7S7490C7D0Ev),
};
extern void _ZN7S7490C8D1Ev();
extern void _ZN7S7490C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7490C8__7S7490C1[] = {
  ABISELECT(-88,-60),
  ABISELECT(16,8),
  ABISELECT(-48,-40),
  ABISELECT(-88,-60),
  ABISELECT(-88,-60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C8[0]),
  (VTBL_ENTRY)&_ZN7S7490C8D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C8D0Ev,
};
extern void _ZN7S7490C2D1Ev();
extern void _ZN7S7490C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7490C27S7490C8__A1__7S7490C1[] = {
  ABISELECT(-48,-40),
  ABISELECT(-88,-60),
  ABISELECT(-88,-60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
  (VTBL_ENTRY)&_ZN7S7490C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C27S7490C8__A1__7S7490C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(48,40),
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C8__7S7490C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(48,40),
  (VTBL_ENTRY)&(_ZTI7S7490C8[0]),
};
extern void ABISELECT(_ZTv0_n56_N7S7490C8D1Ev,_ZTv0_n28_N7S7490C8D1Ev)();
extern void ABISELECT(_ZThn16_N7S7490C8D1Ev,_ZThn8_N7S7490C8D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S7490C8D0Ev,_ZTv0_n28_N7S7490C8D0Ev)();
extern void ABISELECT(_ZThn16_N7S7490C8D0Ev,_ZThn8_N7S7490C8D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S7490C9__7S7490C8__7S7490C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-104,-68),
  ABISELECT(-64,-48),
  ABISELECT(-104,-68),
  ABISELECT(-104,-68),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7490C8[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7490C8D1Ev,_ZTv0_n28_N7S7490C8D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S7490C8D0Ev,_ZTv0_n28_N7S7490C8D0Ev),
};
extern void _ZN7S7490C9D1Ev();
extern void _ZN7S7490C9D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7490C9__7S7490C1[] = {
  ABISELECT(-104,-68),
  ABISELECT(-64,-48),
  ABISELECT(-104,-68),
  ABISELECT(-104,-68),
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C9[0]),
  (VTBL_ENTRY)&_ZN7S7490C9D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C9D0Ev,
};
extern void _ZN7S7490C2D1Ev();
extern void _ZN7S7490C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7490C27S7490C9__A2__7S7490C1[] = {
  ABISELECT(-64,-48),
  ABISELECT(-104,-68),
  ABISELECT(-104,-68),
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
  (VTBL_ENTRY)&_ZN7S7490C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C27S7490C9__A2__7S7490C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(64,48),
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C9__7S7490C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(64,48),
  (VTBL_ENTRY)&(_ZTI7S7490C9[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7490C11__7S7490C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S7490C11[0]),
};
extern void _ZN8S7490C12D1Ev();
extern void _ZN8S7490C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S7490C12__7S7490C1[] = {
  ABISELECT(-120,-76),
  ABISELECT(-104,-68),
  ABISELECT(-80,-56),
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  0,
  (VTBL_ENTRY)&(_ZTI8S7490C12[0]),
  (VTBL_ENTRY)&_ZN8S7490C12D1Ev,
  (VTBL_ENTRY)&_ZN8S7490C12D0Ev,
};
extern void _ZN7S7490C2D1Ev();
extern void _ZN7S7490C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7490C28S7490C12__A3__7S7490C1[] = {
  ABISELECT(-80,-56),
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  0,
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
  (VTBL_ENTRY)&_ZN7S7490C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7490C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__7S7490C28S7490C12__A3__7S7490C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(80,56),
  (VTBL_ENTRY)&(_ZTI7S7490C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7490C5__8S7490C12__7S7490C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(-40,-20),
  ABISELECT(80,56),
  (VTBL_ENTRY)&(_ZTI8S7490C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S7490C11__8S7490C12__7S7490C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(104,68),
  (VTBL_ENTRY)&(_ZTI8S7490C12[0]),
};
static  VTT_ENTRY vtt_S7490C1[] = {
  {&(_ZTV7S7490C1[11]),  11,62},
  {&(_tg__ZTV7S7490C2__7S7490C1[5]),  5,7},
  {&(_tg__ZTV7S7490C5__7S7490C2__7S7490C1[4]),  4,4},
  {&(_tg__ZTV7S7490C6__7S7490C1[13]),  13,16},
  {&(_tg__ZTV7S7490C6__7S7490C1[13]),  13,16},
  {&(_tg__ZTV7S7490C8__7S7490C6__7S7490C1[8]),  8,10},
  {&(_tg__ZTV7S7490C5__7S7490C6__7S7490C1[4]),  4,4},
  {&(_tg__ZTV7S7490C9__7S7490C6__7S7490C1[7]),  7,9},
  {&(_tg__ZTV7S7490C6__7S7490C1[13]),  13,16},
  {&(_tg__ZTV8S7490C12__7S7490C6__7S7490C1[8]),  8,10},
  {&(_ZTV7S7490C1[33]),  33,62},
  {&(_ZTV7S7490C1[26]),  26,62},
  {&(_ZTV7S7490C1[26]),  26,62},
  {&(_ZTV7S7490C1[41]),  41,62},
  {&(_ZTV7S7490C1[50]),  50,62},
  {&(_ZTV7S7490C1[26]),  26,62},
  {&(_ZTV7S7490C1[60]),  60,62},
  {&(_tg__ZTV7S7490C5__7S7490C1[4]),  4,4},
  {&(_tg__ZTV7S7490C7__7S7490C1[10]),  10,13},
  {&(_tg__ZTV7S7490C8__7S7490C7__7S7490C1[8]),  8,10},
  {&(_tg__ZTV7S7490C5__7S7490C7__7S7490C1[4]),  4,4},
  {&(_tg__ZTV7S7490C9__7S7490C7__7S7490C1[7]),  7,9},
  {&(_tg__ZTV7S7490C7__7S7490C1[10]),  10,13},
  {&(_tg__ZTV8S7490C12__7S7490C7__7S7490C1[8]),  8,10},
  {&(_tg__ZTV7S7490C8__7S7490C1[7]),  7,9},
  {&(_tg__ZTV7S7490C27S7490C8__A1__7S7490C1[5]),  5,7},
  {&(_tg__ZTV7S7490C5__7S7490C27S7490C8__A1__7S7490C1[4]),  4,4},
  {&(_tg__ZTV7S7490C5__7S7490C8__7S7490C1[4]),  4,4},
  {&(_tg__ZTV7S7490C9__7S7490C8__7S7490C1[7]),  7,9},
  {&(_tg__ZTV7S7490C9__7S7490C1[6]),  6,8},
  {&(_tg__ZTV7S7490C27S7490C9__A2__7S7490C1[5]),  5,7},
  {&(_tg__ZTV7S7490C5__7S7490C27S7490C9__A2__7S7490C1[4]),  4,4},
  {&(_tg__ZTV7S7490C5__7S7490C9__7S7490C1[4]),  4,4},
  {&(_tg__ZTV8S7490C11__7S7490C1[3]),  3,3},
  {&(_tg__ZTV8S7490C12__7S7490C1[7]),  7,9},
  {&(_tg__ZTV7S7490C28S7490C12__A3__7S7490C1[5]),  5,7},
  {&(_tg__ZTV7S7490C5__7S7490C28S7490C12__A3__7S7490C1[4]),  4,4},
  {&(_tg__ZTV7S7490C5__8S7490C12__7S7490C1[4]),  4,4},
  {&(_tg__ZTV8S7490C11__8S7490C12__7S7490C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7490C1[];
extern  VTBL_ENTRY _ZTV7S7490C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7490C1[];
static VTBL_ENTRY alt_thunk_names209[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7490C8D0Ev,_ZTv0_n28_N7S7490C8D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7490C8D0Ev,_ZThn8_N7S7490C8D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7490C8D1Ev,_ZTv0_n28_N7S7490C8D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7490C8D1Ev,_ZThn8_N7S7490C8D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7490C7D0Ev,_ZTv0_n28_N7S7490C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7490C7D0Ev,_ZThn60_N7S7490C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7490C7D1Ev,_ZTv0_n28_N7S7490C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7490C7D1Ev,_ZThn60_N7S7490C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7490C7D0Ev,_ZTv0_n32_N7S7490C7D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7490C7D0Ev,_ZThn68_N7S7490C7D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7490C7D0Ev,_ZThn52_N7S7490C7D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7490C7D1Ev,_ZTv0_n32_N7S7490C7D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7490C7D1Ev,_ZThn68_N7S7490C7D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7490C7D1Ev,_ZThn52_N7S7490C7D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7490C6D0Ev,_ZTv0_n28_N7S7490C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7490C6D0Ev,_ZThn60_N7S7490C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7490C6D1Ev,_ZTv0_n28_N7S7490C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7490C6D1Ev,_ZThn60_N7S7490C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7490C6D0Ev,_ZTv0_n32_N7S7490C6D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7490C6D0Ev,_ZThn68_N7S7490C6D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7490C6D0Ev,_ZThn52_N7S7490C6D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7490C6D1Ev,_ZTv0_n32_N7S7490C6D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7490C6D1Ev,_ZThn68_N7S7490C6D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn72_N7S7490C6D1Ev,_ZThn52_N7S7490C6D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7490C6D0Ev,_ZTv0_n48_N7S7490C6D0Ev), // 
  (VTBL_ENTRY)_ZN7S7490C6D0Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7490C6D1Ev,_ZTv0_n48_N7S7490C6D1Ev), // 
  (VTBL_ENTRY)_ZN7S7490C6D1Ev,
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7490C1D0Ev,_ZTv0_n28_N7S7490C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7490C1D0Ev,_ZThn68_N7S7490C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S7490C1D1Ev,_ZTv0_n28_N7S7490C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7490C1D1Ev,_ZThn68_N7S7490C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7490C1D0Ev,_ZTv0_n32_N7S7490C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7490C1D0Ev,_ZThn76_N7S7490C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7490C1D0Ev,_ZThn60_N7S7490C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S7490C1D1Ev,_ZTv0_n32_N7S7490C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S7490C1D1Ev,_ZThn76_N7S7490C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S7490C1D1Ev,_ZThn60_N7S7490C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7490C1D0Ev,_ZTv0_n48_N7S7490C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7490C1D0Ev,_ZThn8_N7S7490C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S7490C1D1Ev,_ZTv0_n48_N7S7490C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N7S7490C1D1Ev,_ZThn8_N7S7490C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7490C1 = {  "S7490C1", // class name
  bases_S7490C1, 20,
  &(vtc_S7490C1[0]), // expected_vtbl_contents
  &(vtt_S7490C1[0]), // expected_vtt_contents
  ABISELECT(136,84), // object size
  NSPAIRA(_ZTI7S7490C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7490C1),62, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7490C1),39, //virtual table table var
  11, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names209,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7564C3  {
  short s7564c3f0[6];
  __tsi64 s7564c3f1[8];
  int s7564c3f2;
  virtual  ~S7564C3(); // _ZN7S7564C3D1Ev
  virtual void  v2(); // _ZN7S7564C32v2Ev
  S7564C3(); // tgen
};
//SIG(-1 S7564C3) C1{ vd v1 Fs[6] FL[8] Fi}


 S7564C3 ::~S7564C3(){ note_dtor("S7564C3", this);}
void  S7564C3 ::v2(){vfunc_called(this, "_ZN7S7564C32v2Ev");}
S7564C3 ::S7564C3(){ note_ctor("S7564C3", this);} // tgen

static void Test_S7564C3()
{
  extern Class_Descriptor cd_S7564C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,22)];
    init_test(&cd_S7564C3, buf);
    S7564C3 *dp, &lv = *(dp=new (buf) S7564C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,84), "sizeof(S7564C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7564C3)");
    check_field_offset(lv, s7564c3f0, ABISELECT(8,4), "S7564C3.s7564c3f0");
    check_field_offset(lv, s7564c3f1, ABISELECT(24,16), "S7564C3.s7564c3f1");
    check_field_offset(lv, s7564c3f2, ABISELECT(88,80), "S7564C3.s7564c3f2");
    test_class_info(&lv, &cd_S7564C3);
    dp->~S7564C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7564C3(Test_S7564C3, "S7564C3", ABISELECT(96,84));

#else // __cplusplus

extern void _ZN7S7564C3C1Ev();
extern void _ZN7S7564C3D1Ev();
Name_Map name_map_S7564C3[] = {
  NSPAIR(_ZN7S7564C3C1Ev),
  NSPAIR(_ZN7S7564C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7564C3[];
extern void _ZN7S7564C3D1Ev();
extern void _ZN7S7564C3D0Ev();
extern void _ZN7S7564C32v2Ev();
static  VTBL_ENTRY vtc_S7564C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7564C3[0]),
  (VTBL_ENTRY)&_ZN7S7564C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7564C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7564C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S7564C3[];
extern  VTBL_ENTRY _ZTV7S7564C3[];
Class_Descriptor cd_S7564C3 = {  "S7564C3", // class name
  0,0,//no base classes
  &(vtc_S7564C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,84), // object size
  NSPAIRA(_ZTI7S7564C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7564C3),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  S7564C4  : virtual S7564C3 {
  __tsi64 s7564c4f0;
  void *s7564c4f1;
  __tsi64 s7564c4f2:54;
  ~S7564C4(); // tgen
  S7564C4(); // tgen
};
//SIG(-1 S7564C4) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} FL Fp FL:54}


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

static void Test_S7564C4()
{
  extern Class_Descriptor cd_S7564C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,28)];
    init_test(&cd_S7564C4, buf);
    S7564C4 *dp, &lv = *(dp=new (buf) S7564C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,108), "sizeof(S7564C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7564C4)");
    check_base_class_offset(lv, (S7564C3*), ABISELECT(32,24), "S7564C4");
    check_field_offset(lv, s7564c4f0, ABISELECT(8,4), "S7564C4.s7564c4f0");
    check_field_offset(lv, s7564c4f1, ABISELECT(16,12), "S7564C4.s7564c4f1");
    set_bf_and_test(lv, s7564c4f2, ABISELECT(24,16), 0, 54, 1, "S7564C4");
    set_bf_and_test(lv, s7564c4f2, ABISELECT(24,16), 0, 54, hide_sll(1LL<<53), "S7564C4");
    test_class_info(&lv, &cd_S7564C4);
    dp->~S7564C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7564C4(Test_S7564C4, "S7564C4", ABISELECT(128,108));

#else // __cplusplus

extern void _ZN7S7564C4C1Ev();
extern void _ZN7S7564C4D1Ev();
Name_Map name_map_S7564C4[] = {
  NSPAIR(_ZN7S7564C4C1Ev),
  NSPAIR(_ZN7S7564C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7564C3;
extern VTBL_ENTRY _ZTI7S7564C3[];
extern  VTBL_ENTRY _ZTV7S7564C3[];
static Base_Class bases_S7564C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7564C3,    ABISELECT(32,24), //bcp->offset
    5, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S7564C4[];
extern void _ZN7S7564C4D1Ev();
extern void _ZN7S7564C4D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7564C4D1Ev,_ZTv0_n12_N7S7564C4D1Ev)();
extern void ABISELECT(_ZThn32_N7S7564C4D1Ev,_ZThn24_N7S7564C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7564C4D0Ev,_ZTv0_n12_N7S7564C4D0Ev)();
extern void ABISELECT(_ZThn32_N7S7564C4D0Ev,_ZThn24_N7S7564C4D0Ev)() __attribute__((weak));
extern void _ZN7S7564C32v2Ev();
static  VTBL_ENTRY vtc_S7564C4[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7564C4[0]),
  (VTBL_ENTRY)&_ZN7S7564C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7564C4D0Ev,
  0,
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S7564C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7564C4D1Ev,_ZTv0_n12_N7S7564C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7564C4D0Ev,_ZTv0_n12_N7S7564C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7564C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7564C4[];
static  VTT_ENTRY vtt_S7564C4[] = {
  {&(_ZTV7S7564C4[3]),  3,12},
  {&(_ZTV7S7564C4[9]),  9,12},
};
extern VTBL_ENTRY _ZTI7S7564C4[];
extern  VTBL_ENTRY _ZTV7S7564C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7564C4[];
static VTBL_ENTRY alt_thunk_names210[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7564C4D0Ev,_ZTv0_n12_N7S7564C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7564C4D0Ev,_ZThn24_N7S7564C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7564C4D1Ev,_ZTv0_n12_N7S7564C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7564C4D1Ev,_ZThn24_N7S7564C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7564C4 = {  "S7564C4", // class name
  bases_S7564C4, 1,
  &(vtc_S7564C4[0]), // expected_vtbl_contents
  &(vtt_S7564C4[0]), // expected_vtt_contents
  ABISELECT(128,108), // object size
  NSPAIRA(_ZTI7S7564C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7564C4),12, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7564C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names210,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7564C2  : virtual S7564C3 , S7564C4 {
  char  :0;
  void *s7564c2f1[8];
  char s7564c2f2;
  virtual void  v3(); // _ZN7S7564C22v3Ev
  virtual void  v4(); // _ZN7S7564C22v4Ev
  ~S7564C2(); // tgen
  S7564C2(); // tgen
};
//SIG(-1 S7564C2) C1{ VBC2{ vd v3 Fs[6] FL[8] Fi} BC3{ VBC2 FL Fp FL:54} v1 v2 Fc:0 Fp[8] Fc}


void  S7564C2 ::v3(){vfunc_called(this, "_ZN7S7564C22v3Ev");}
void  S7564C2 ::v4(){vfunc_called(this, "_ZN7S7564C22v4Ev");}
S7564C2 ::~S7564C2(){ note_dtor("S7564C2", this);} // tgen
S7564C2 ::S7564C2(){ note_ctor("S7564C2", this);} // tgen

static void Test_S7564C2()
{
  extern Class_Descriptor cd_S7564C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,37)];
    init_test(&cd_S7564C2, buf);
    S7564C2 *dp, &lv = *(dp=new (buf) S7564C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,144), "sizeof(S7564C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7564C2)");
    check_base_class_offset(lv, (S7564C3*), ABISELECT(104,60), "S7564C2");
    check_base_class_offset(lv, (S7564C3*)(S7564C4*), ABISELECT(104,60), "S7564C2");
    check_base_class_offset(lv, (S7564C4*), 0, "S7564C2");
    check_field_offset(lv, s7564c2f1, ABISELECT(32,24), "S7564C2.s7564c2f1");
    check_field_offset(lv, s7564c2f2, ABISELECT(96,56), "S7564C2.s7564c2f2");
    test_class_info(&lv, &cd_S7564C2);
    dp->~S7564C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7564C2(Test_S7564C2, "S7564C2", ABISELECT(200,144));

#else // __cplusplus

extern void _ZN7S7564C2C1Ev();
extern void _ZN7S7564C2D1Ev();
Name_Map name_map_S7564C2[] = {
  NSPAIR(_ZN7S7564C2C1Ev),
  NSPAIR(_ZN7S7564C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7564C3;
extern VTBL_ENTRY _ZTI7S7564C3[];
extern  VTBL_ENTRY _ZTV7S7564C3[];
extern Class_Descriptor cd_S7564C4;
extern VTBL_ENTRY _ZTI7S7564C4[];
extern  VTBL_ENTRY _ZTV7S7564C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7564C4[];
static Base_Class bases_S7564C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7564C3,    ABISELECT(104,60), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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_S7564C4,    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 _ZTI7S7564C2[];
extern void _ZN7S7564C2D1Ev();
extern void _ZN7S7564C2D0Ev();
extern void _ZN7S7564C22v3Ev();
extern void _ZN7S7564C22v4Ev();
extern void ABISELECT(_ZTv0_n24_N7S7564C2D1Ev,_ZTv0_n12_N7S7564C2D1Ev)();
extern void ABISELECT(_ZThn104_N7S7564C2D1Ev,_ZThn60_N7S7564C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7564C2D0Ev,_ZTv0_n12_N7S7564C2D0Ev)();
extern void ABISELECT(_ZThn104_N7S7564C2D0Ev,_ZThn60_N7S7564C2D0Ev)() __attribute__((weak));
extern void _ZN7S7564C32v2Ev();
static  VTBL_ENTRY vtc_S7564C2[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7564C2[0]),
  (VTBL_ENTRY)&_ZN7S7564C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7564C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7564C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7564C22v4Ev,
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S7564C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7564C2D1Ev,_ZTv0_n12_N7S7564C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7564C2D0Ev,_ZTv0_n12_N7S7564C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7564C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7564C2[];
extern void _ZN7S7564C4D1Ev();
extern void _ZN7S7564C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7564C4__7S7564C2[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7564C4[0]),
  (VTBL_ENTRY)&_ZN7S7564C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7564C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7564C4D1Ev,_ZTv0_n12_N7S7564C4D1Ev)();
extern void ABISELECT(_ZThn104_N7S7564C4D1Ev,_ZThn60_N7S7564C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7564C4D0Ev,_ZTv0_n12_N7S7564C4D0Ev)();
extern void ABISELECT(_ZThn104_N7S7564C4D0Ev,_ZThn60_N7S7564C4D0Ev)() __attribute__((weak));
extern void _ZN7S7564C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7564C3__7S7564C4__7S7564C2[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S7564C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7564C4D1Ev,_ZTv0_n12_N7S7564C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7564C4D0Ev,_ZTv0_n12_N7S7564C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7564C32v2Ev,
};
static  VTT_ENTRY vtt_S7564C2[] = {
  {&(_ZTV7S7564C2[3]),  3,14},
  {&(_tg__ZTV7S7564C4__7S7564C2[3]),  3,5},
  {&(_tg__ZTV7S7564C3__7S7564C4__7S7564C2[4]),  4,7},
  {&(_ZTV7S7564C2[11]),  11,14},
};
extern VTBL_ENTRY _ZTI7S7564C2[];
extern  VTBL_ENTRY _ZTV7S7564C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7564C2[];
static VTBL_ENTRY alt_thunk_names211[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7564C4D0Ev,_ZTv0_n12_N7S7564C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7564C4D0Ev,_ZThn60_N7S7564C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7564C4D1Ev,_ZTv0_n12_N7S7564C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7564C4D1Ev,_ZThn60_N7S7564C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7564C2D0Ev,_ZTv0_n12_N7S7564C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7564C2D0Ev,_ZThn60_N7S7564C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7564C2D1Ev,_ZTv0_n12_N7S7564C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7564C2D1Ev,_ZThn60_N7S7564C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7564C2 = {  "S7564C2", // class name
  bases_S7564C2, 2,
  &(vtc_S7564C2[0]), // expected_vtbl_contents
  &(vtt_S7564C2[0]), // expected_vtt_contents
  ABISELECT(200,144), // object size
  NSPAIRA(_ZTI7S7564C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7564C2),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7564C2),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names211,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7564C1  : S7564C2 , S7564C4 {
  void *s7564c1f0;
  int s7564c1f1[4];
  int s7564c1f2:32;
  char s7564c1f3;
  ::S20846C7 s7564c1f4;
  int s7564c1f5;
  virtual  ~S7564C1(); // _ZN7S7564C1D2Ev
  virtual void  v1(); // _ZN7S7564C12v1Ev
  S7564C1(); // tgen
};
//SIG(1 S7564C1) C1{ BC2{ VBC3{ vd v2 Fs[6] FL[8] Fi} BC4{ VBC3 FL Fp FL:54} v3 v4 Fc:0 Fp[8] Fc} BC4 vd v1 Fp Fi[4] Fi:32 Fc FC5{ VBC6{ vd v5 Fs[6] FL[8] Fi} BC7{ VBC6 BC8{ VBC6 BC9{ VBC6 FL Fp FL:54} v6 v7 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC6 Fp[3] FL[5] Fi} VBC9 VBC8 vd Fp[7]} Fi}


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

static void Test_S7564C1()
{
  extern Class_Descriptor cd_S7564C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(110,157)];
    init_test(&cd_S7564C1, buf);
    S7564C1 *dp, &lv = *(dp=new (buf) S7564C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(872,624), "sizeof(S7564C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7564C1)");
    check_base_class_offset(lv, (S7564C3*)(S7564C2*), ABISELECT(776,540), "S7564C1");
    check_base_class_offset(lv, (S7564C3*)(S7564C4*)(S7564C2*), ABISELECT(776,540), "S7564C1");
    /*is_ambiguous_... S7564C1::S7564C4 */ AMB_check_base_class_offset(lv, (S7564C3*)(S7564C4*), ABISELECT(776,540), "S7564C1");
    check_base_class_offset(lv, (S7564C4*)(S7564C2*), 0, "S7564C1");
    check_base_class_offset(lv, (S7564C2*), 0, "S7564C1");
    /*is_ambiguous_... S7564C1::S7564C4 */ AMB_check_base_class_offset(lv, (S7564C4*), ABISELECT(104,60), "S7564C1");
    check_field_offset(lv, s7564c1f0, ABISELECT(136,84), "S7564C1.s7564c1f0");
    check_field_offset(lv, s7564c1f1, ABISELECT(144,88), "S7564C1.s7564c1f1");
    set_bf_and_test(lv, s7564c1f2, ABISELECT(160,104), 0, 32, 1, "S7564C1");
    set_bf_and_test(lv, s7564c1f2, ABISELECT(160,104), 0, 32, hide_sll(1LL<<31), "S7564C1");
    check_field_offset(lv, s7564c1f3, ABISELECT(164,108), "S7564C1.s7564c1f3");
    check_field_offset(lv, s7564c1f4, ABISELECT(168,112), "S7564C1.s7564c1f4");
    check_field_offset(lv, s7564c1f5, ABISELECT(768,536), "S7564C1.s7564c1f5");
    test_class_info(&lv, &cd_S7564C1);
    dp->~S7564C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7564C1(Test_S7564C1, "S7564C1", ABISELECT(872,624));

#else // __cplusplus

extern void _ZN7S7564C1C1Ev();
extern void _ZN7S7564C1D2Ev();
Name_Map name_map_S7564C1[] = {
  NSPAIR(_ZN7S7564C1C1Ev),
  NSPAIR(_ZN7S7564C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7564C3;
extern VTBL_ENTRY _ZTI7S7564C3[];
extern  VTBL_ENTRY _ZTV7S7564C3[];
extern Class_Descriptor cd_S7564C4;
extern VTBL_ENTRY _ZTI7S7564C4[];
extern  VTBL_ENTRY _ZTV7S7564C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7564C4[];
extern Class_Descriptor cd_S7564C2;
extern VTBL_ENTRY _ZTI7S7564C2[];
extern  VTBL_ENTRY _ZTV7S7564C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7564C2[];
extern Class_Descriptor cd_S7564C4;
extern VTBL_ENTRY _ZTI7S7564C4[];
extern  VTBL_ENTRY _ZTV7S7564C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7564C4[];
static Base_Class bases_S7564C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7564C3,    ABISELECT(776,540), //bcp->offset
    13, //bcp->virtual_function_table_offset
    4, //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
    1, //immediately_derived
  0, 1},
  {&cd_S7564C4,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7564C2,    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_S7564C4,    ABISELECT(104,60), //bcp->offset
    8, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7564C1[];
extern void _ZN7S7564C1D1Ev();
extern void _ZN7S7564C1D0Ev();
extern void _ZN7S7564C22v3Ev();
extern void _ZN7S7564C22v4Ev();
extern void _ZN7S7564C12v1Ev();
extern void ABISELECT(_ZThn104_N7S7564C1D1Ev,_ZThn60_N7S7564C1D1Ev)();
extern void ABISELECT(_ZThn104_N7S7564C1D0Ev,_ZThn60_N7S7564C1D0Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7564C1D1Ev,_ZTv0_n12_N7S7564C1D1Ev)();
extern void ABISELECT(_ZThn776_N7S7564C1D1Ev,_ZThn540_N7S7564C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7564C1D0Ev,_ZTv0_n12_N7S7564C1D0Ev)();
extern void ABISELECT(_ZThn776_N7S7564C1D0Ev,_ZThn540_N7S7564C1D0Ev)() __attribute__((weak));
extern void _ZN7S7564C32v2Ev();
static  VTBL_ENTRY vtc_S7564C1[] = {
  ABISELECT(776,540),
  0,
  (VTBL_ENTRY)&(_ZTI7S7564C1[0]),
  (VTBL_ENTRY)&_ZN7S7564C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7564C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7564C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7564C22v4Ev,
  (VTBL_ENTRY)&_ZN7S7564C12v1Ev,
  ABISELECT(672,480),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S7564C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N7S7564C1D1Ev,_ZThn60_N7S7564C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn104_N7S7564C1D0Ev,_ZThn60_N7S7564C1D0Ev),
  0,
  ABISELECT(-776,-540),
  ABISELECT(-776,-540),
  (VTBL_ENTRY)&(_ZTI7S7564C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7564C1D1Ev,_ZTv0_n12_N7S7564C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7564C1D0Ev,_ZTv0_n12_N7S7564C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7564C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7564C1[];
extern void _ZN7S7564C2D1Ev();
extern void _ZN7S7564C2D0Ev();
extern void _ZN7S7564C22v3Ev();
extern void _ZN7S7564C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7564C2__7S7564C1[] = {
  ABISELECT(776,540),
  0,
  (VTBL_ENTRY)&(_ZTI7S7564C2[0]),
  (VTBL_ENTRY)&_ZN7S7564C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7564C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7564C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7564C22v4Ev,
};
extern void _ZN7S7564C4D1Ev();
extern void _ZN7S7564C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7564C47S7564C2__7S7564C1[] = {
  ABISELECT(776,540),
  0,
  (VTBL_ENTRY)&(_ZTI7S7564C4[0]),
  (VTBL_ENTRY)&_ZN7S7564C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7564C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7564C4D1Ev,_ZTv0_n12_N7S7564C4D1Ev)();
extern void ABISELECT(_ZThn776_N7S7564C4D1Ev,_ZThn540_N7S7564C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7564C4D0Ev,_ZTv0_n12_N7S7564C4D0Ev)();
extern void ABISELECT(_ZThn776_N7S7564C4D0Ev,_ZThn540_N7S7564C4D0Ev)() __attribute__((weak));
extern void _ZN7S7564C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7564C3__7S7564C47S7564C2__7S7564C1[] = {
  0,
  ABISELECT(-776,-540),
  ABISELECT(-776,-540),
  (VTBL_ENTRY)&(_ZTI7S7564C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7564C4D1Ev,_ZTv0_n12_N7S7564C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7564C4D0Ev,_ZTv0_n12_N7S7564C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7564C32v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7564C2D1Ev,_ZTv0_n12_N7S7564C2D1Ev)();
extern void ABISELECT(_ZThn776_N7S7564C2D1Ev,_ZThn540_N7S7564C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7564C2D0Ev,_ZTv0_n12_N7S7564C2D0Ev)();
extern void ABISELECT(_ZThn776_N7S7564C2D0Ev,_ZThn540_N7S7564C2D0Ev)() __attribute__((weak));
extern void _ZN7S7564C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7564C3__7S7564C2__7S7564C1[] = {
  0,
  ABISELECT(-776,-540),
  ABISELECT(-776,-540),
  (VTBL_ENTRY)&(_ZTI7S7564C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7564C2D1Ev,_ZTv0_n12_N7S7564C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7564C2D0Ev,_ZTv0_n12_N7S7564C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7564C32v2Ev,
};
extern void _ZN7S7564C4D1Ev();
extern void _ZN7S7564C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7564C4__A1__7S7564C1[] = {
  ABISELECT(672,480),
  0,
  (VTBL_ENTRY)&(_ZTI7S7564C4[0]),
  (VTBL_ENTRY)&_ZN7S7564C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7564C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7564C4D1Ev,_ZTv0_n12_N7S7564C4D1Ev)();
extern void ABISELECT(_ZThn672_N7S7564C4D1Ev,_ZThn480_N7S7564C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7564C4D0Ev,_ZTv0_n12_N7S7564C4D0Ev)();
extern void ABISELECT(_ZThn672_N7S7564C4D0Ev,_ZThn480_N7S7564C4D0Ev)() __attribute__((weak));
extern void _ZN7S7564C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7564C3__7S7564C4__A1__7S7564C1[] = {
  0,
  ABISELECT(-672,-480),
  ABISELECT(-672,-480),
  (VTBL_ENTRY)&(_ZTI7S7564C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7564C4D1Ev,_ZTv0_n12_N7S7564C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7564C4D0Ev,_ZTv0_n12_N7S7564C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7564C32v2Ev,
};
static  VTT_ENTRY vtt_S7564C1[] = {
  {&(_ZTV7S7564C1[3]),  3,20},
  {&(_tg__ZTV7S7564C2__7S7564C1[3]),  3,7},
  {&(_tg__ZTV7S7564C47S7564C2__7S7564C1[3]),  3,5},
  {&(_tg__ZTV7S7564C3__7S7564C47S7564C2__7S7564C1[4]),  4,7},
  {&(_tg__ZTV7S7564C3__7S7564C2__7S7564C1[4]),  4,7},
  {&(_tg__ZTV7S7564C4__A1__7S7564C1[3]),  3,5},
  {&(_tg__ZTV7S7564C3__7S7564C4__A1__7S7564C1[4]),  4,7},
  {&(_ZTV7S7564C1[17]),  17,20},
  {&(_ZTV7S7564C1[11]),  11,20},
};
extern VTBL_ENTRY _ZTI7S7564C1[];
extern  VTBL_ENTRY _ZTV7S7564C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7564C1[];
static VTBL_ENTRY alt_thunk_names212[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7564C2D0Ev,_ZTv0_n12_N7S7564C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn776_N7S7564C2D0Ev,_ZThn540_N7S7564C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7564C2D1Ev,_ZTv0_n12_N7S7564C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn776_N7S7564C2D1Ev,_ZThn540_N7S7564C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7564C4D0Ev,_ZTv0_n12_N7S7564C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N7S7564C4D0Ev,_ZThn480_N7S7564C4D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn776_N7S7564C4D0Ev,_ZThn540_N7S7564C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7564C4D1Ev,_ZTv0_n12_N7S7564C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn672_N7S7564C4D1Ev,_ZThn480_N7S7564C4D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn776_N7S7564C4D1Ev,_ZThn540_N7S7564C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7564C1D0Ev,_ZTv0_n12_N7S7564C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn776_N7S7564C1D0Ev,_ZThn540_N7S7564C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7564C1D1Ev,_ZTv0_n12_N7S7564C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn776_N7S7564C1D1Ev,_ZThn540_N7S7564C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7564C1 = {  "S7564C1", // class name
  bases_S7564C1, 4,
  &(vtc_S7564C1[0]), // expected_vtbl_contents
  &(vtt_S7564C1[0]), // expected_vtt_contents
  ABISELECT(872,624), // object size
  NSPAIRA(_ZTI7S7564C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7564C1),20, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7564C1),9, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names212,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6382C2  {
  void *s6382c2f0[4];
  ::S3052C22_nt s6382c2f1;
  ::S2791C3 s6382c2f2;
  virtual void  v1(); // _ZN7S6382C22v1Ev
  ~S6382C2(); // tgen
  S6382C2(); // tgen
};
//SIG(-1 S6382C2) C1{ v1 Fp[4] FC2{} FC3{ m Fp FL Fi FC4{ m Fc[2]} FC4 Fi}}


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

static void Test_S6382C2()
{
  extern Class_Descriptor cd_S6382C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,13)];
    init_test(&cd_S6382C2, buf);
    S6382C2 *dp, &lv = *(dp=new (buf) S6382C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S6382C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6382C2)");
    check_field_offset(lv, s6382c2f0, ABISELECT(8,4), "S6382C2.s6382c2f0");
    check_field_offset(lv, s6382c2f1, ABISELECT(40,20), "S6382C2.s6382c2f1");
    check_field_offset(lv, s6382c2f2, ABISELECT(48,24), "S6382C2.s6382c2f2");
    test_class_info(&lv, &cd_S6382C2);
    dp->~S6382C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6382C2(Test_S6382C2, "S6382C2", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S6382C2C1Ev();
extern void _ZN7S6382C2D1Ev();
Name_Map name_map_S6382C2[] = {
  NSPAIR(_ZN7S6382C2C1Ev),
  NSPAIR(_ZN7S6382C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6382C2[];
extern void _ZN7S6382C22v1Ev();
static  VTBL_ENTRY vtc_S6382C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6382C2[0]),
  (VTBL_ENTRY)&_ZN7S6382C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S6382C2[];
extern  VTBL_ENTRY _ZTV7S6382C2[];
Class_Descriptor cd_S6382C2 = {  "S6382C2", // class name
  0,0,//no base classes
  &(vtc_S6382C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S6382C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6382C2),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6382C8  : S2398C28_nt , S2791C3 {
  long double s6382c8f0;
  int s6382c8f1;
  virtual void  v2(); // _ZN7S6382C82v2Ev
  ~S6382C8(); // tgen
  S6382C8(); // tgen
};
//SIG(-1 S6382C8) C1{ BC2{ m Fc[2]} BC3{ m Fp FL Fi FC2 FC2 Fi} v1 FD Fi}


void  S6382C8 ::v2(){vfunc_called(this, "_ZN7S6382C82v2Ev");}
S6382C8 ::~S6382C8(){ note_dtor("S6382C8", this);} // tgen
S6382C8 ::S6382C8(){ note_ctor("S6382C8", this);} // tgen

static void Test_S6382C8()
{
  extern Class_Descriptor cd_S6382C8;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,13)];
    init_test(&cd_S6382C8, buf);
    S6382C8 *dp, &lv = *(dp=new (buf) S6382C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,48), "sizeof(S6382C8)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6382C8)");
    check_base_class_offset(lv, (S2398C28_nt*), ABISELECT(8,4), "S6382C8");
    check_base_class_offset(lv, (S2791C3*), ABISELECT(16,8), "S6382C8");
    check_field_offset(lv, s6382c8f0, ABISELECT(48,32), "S6382C8.s6382c8f0");
    check_field_offset(lv, s6382c8f1, ABISELECT(64,44), "S6382C8.s6382c8f1");
    test_class_info(&lv, &cd_S6382C8);
    dp->~S6382C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6382C8(Test_S6382C8, "S6382C8", ABISELECT(80,48));

#else // __cplusplus

extern void _ZN7S6382C8C1Ev();
extern void _ZN7S6382C8D1Ev();
Name_Map name_map_S6382C8[] = {
  NSPAIR(_ZN7S6382C8C1Ev),
  NSPAIR(_ZN7S6382C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
static Base_Class bases_S6382C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C28_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},
  {&cd_S2791C3,    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 _ZTI7S6382C8[];
extern void _ZN7S6382C82v2Ev();
static  VTBL_ENTRY vtc_S6382C8[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6382C8[0]),
  (VTBL_ENTRY)&_ZN7S6382C82v2Ev,
};
extern VTBL_ENTRY _ZTI7S6382C8[];
extern  VTBL_ENTRY _ZTV7S6382C8[];
Class_Descriptor cd_S6382C8 = {  "S6382C8", // class name
  bases_S6382C8, 2,
  &(vtc_S6382C8[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,48), // object size
  NSPAIRA(_ZTI7S6382C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6382C8),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6382C7  : virtual S6382C8 {
  void *s6382c7f0;
  long double s6382c7f1;
  void *s6382c7f2;
  short s6382c7f3;
  char s6382c7f4;
  ~S6382C7(); // tgen
  S6382C7(); // tgen
};
//SIG(-1 S6382C7) C1{ VBC2{ BC3{ m Fc[2]} BC4{ m Fp FL Fi FC3 FC3 Fi} v1 FD Fi} Fp FD Fp Fs Fc}


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

static void Test_S6382C7()
{
  extern Class_Descriptor cd_S6382C7;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(9,20)];
    init_test(&cd_S6382C7, buf);
    S6382C7 *dp, &lv = *(dp=new (buf) S6382C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,76), "sizeof(S6382C7)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6382C7)");
    check_base_class_offset(lv, (S2398C28_nt*)(S6382C8*), ABISELECT(56,32), "S6382C7");
    check_base_class_offset(lv, (S2791C3*)(S6382C8*), ABISELECT(64,36), "S6382C7");
    check_base_class_offset(lv, (S6382C8*), ABISELECT(48,28), "S6382C7");
    check_field_offset(lv, s6382c7f0, ABISELECT(8,4), "S6382C7.s6382c7f0");
    check_field_offset(lv, s6382c7f1, ABISELECT(16,8), "S6382C7.s6382c7f1");
    check_field_offset(lv, s6382c7f2, ABISELECT(32,20), "S6382C7.s6382c7f2");
    check_field_offset(lv, s6382c7f3, ABISELECT(40,24), "S6382C7.s6382c7f3");
    check_field_offset(lv, s6382c7f4, ABISELECT(42,26), "S6382C7.s6382c7f4");
    test_class_info(&lv, &cd_S6382C7);
    dp->~S6382C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6382C7(Test_S6382C7, "S6382C7", ABISELECT(128,76));

#else // __cplusplus

extern void _ZN7S6382C7C1Ev();
extern void _ZN7S6382C7D1Ev();
Name_Map name_map_S6382C7[] = {
  NSPAIR(_ZN7S6382C7C1Ev),
  NSPAIR(_ZN7S6382C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S6382C8;
extern VTBL_ENTRY _ZTI7S6382C8[];
extern  VTBL_ENTRY _ZTV7S6382C8[];
static Base_Class bases_S6382C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C28_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
    2, //immediately_derived
  0, 0},
  {&cd_S2791C3,    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
    2, //immediately_derived
  0, 0},
  {&cd_S6382C8,    ABISELECT(48,28), //bcp->offset
    3, //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 _ZTI7S6382C7[];
extern void _ZN7S6382C82v2Ev();
static  VTBL_ENTRY vtc_S6382C7[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6382C7[0]),
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S6382C7[0]),
  (VTBL_ENTRY)&_ZN7S6382C82v2Ev,
};
extern VTBL_ENTRY _ZTV7S6382C7[];
static  VTT_ENTRY vtt_S6382C7[] = {
  {&(_ZTV7S6382C7[3]),  3,7},
  {&(_ZTV7S6382C7[6]),  6,7},
};
extern VTBL_ENTRY _ZTI7S6382C7[];
extern  VTBL_ENTRY _ZTV7S6382C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6382C7[];
Class_Descriptor cd_S6382C7 = {  "S6382C7", // class name
  bases_S6382C7, 3,
  &(vtc_S6382C7[0]), // expected_vtbl_contents
  &(vtt_S6382C7[0]), // expected_vtt_contents
  ABISELECT(128,76), // object size
  NSPAIRA(_ZTI7S6382C7),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S6382C7),7, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6382C7),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  S6382C6  : S2791C3 , virtual S6382C7 , S2398C28_nt , S6382C8 {
  __tsi64 s6382c6f0[8];
  int s6382c6f1;
  long s6382c6f2;
  ::S2791C3 s6382c6f3;
  short s6382c6f4;
  ::S6382C8 s6382c6f5[2];
  virtual  ~S6382C6(); // _ZN7S6382C6D2Ev
  S6382C6(); // tgen
};
//SIG(-1 S6382C6) C1{ BC2{ m Fp FL Fi FC3{ m Fc[2]} FC3 Fi} VBC4{ VBC5{ BC3 BC2 v1 FD Fi} Fp FD Fp Fs Fc} BC3 BC5 vd FL[8] Fi Fl FC2 Fs FC5[2]}


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

static void Test_S6382C6()
{
  extern Class_Descriptor cd_S6382C6;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(34,88)];
    init_test(&cd_S6382C6, buf);
    S6382C6 *dp, &lv = *(dp=new (buf) S6382C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(528,348), "sizeof(S6382C6)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6382C6)");
    /*is_ambiguous_... S6382C6::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*), ABISELECT(72,48), "S6382C6");
    /*is_ambiguous_... S6382C6::S6382C8 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S6382C8*), ABISELECT(456,304), "S6382C6");
    /*is_ambiguous_... S6382C6::S6382C8 */ AMB_check_base_class_offset(lv, (S2791C3*)(S6382C8*), ABISELECT(464,308), "S6382C6");
    check_base_class_offset(lv, (S6382C8*)(S6382C7*), ABISELECT(448,300), "S6382C6");
    check_base_class_offset(lv, (S6382C7*), ABISELECT(400,272), "S6382C6");
    /*is_ambiguous_... S6382C6::S2398C28_nt */ AMB_check_base_class_offset(lv, (S2398C28_nt*), ABISELECT(104,72), "S6382C6");
    /*is_ambiguous_... S6382C6::S6382C8 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S6382C8*), ABISELECT(8,4), "S6382C6");
    /*is_ambiguous_... S6382C6::S6382C8 */ AMB_check_base_class_offset(lv, (S2791C3*)(S6382C8*), ABISELECT(16,8), "S6382C6");
    /*is_ambiguous_... S6382C6::S6382C8 */ AMB_check_base_class_offset(lv, (S6382C8*), 0, "S6382C6");
    check_field_offset(lv, s6382c6f0, ABISELECT(112,76), "S6382C6.s6382c6f0");
    check_field_offset(lv, s6382c6f1, ABISELECT(176,140), "S6382C6.s6382c6f1");
    check_field_offset(lv, s6382c6f2, ABISELECT(184,144), "S6382C6.s6382c6f2");
    check_field_offset(lv, s6382c6f3, ABISELECT(192,148), "S6382C6.s6382c6f3");
    check_field_offset(lv, s6382c6f4, ABISELECT(224,172), "S6382C6.s6382c6f4");
    check_field_offset(lv, s6382c6f5, ABISELECT(240,176), "S6382C6.s6382c6f5");
    test_class_info(&lv, &cd_S6382C6);
    dp->~S6382C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6382C6(Test_S6382C6, "S6382C6", ABISELECT(528,348));

#else // __cplusplus

extern void _ZN7S6382C6C1Ev();
extern void _ZN7S6382C6D2Ev();
Name_Map name_map_S6382C6[] = {
  NSPAIR(_ZN7S6382C6C1Ev),
  NSPAIR(_ZN7S6382C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S6382C8;
extern VTBL_ENTRY _ZTI7S6382C8[];
extern  VTBL_ENTRY _ZTV7S6382C8[];
extern Class_Descriptor cd_S6382C7;
extern VTBL_ENTRY _ZTI7S6382C7[];
extern  VTBL_ENTRY _ZTV7S6382C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6382C7[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S6382C8;
extern VTBL_ENTRY _ZTI7S6382C8[];
extern  VTBL_ENTRY _ZTV7S6382C8[];
static Base_Class bases_S6382C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2791C3,    ABISELECT(72,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
  1, 0},
  {&cd_S2398C28_nt,    ABISELECT(456,304), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2791C3,    ABISELECT(464,308), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6382C8,    ABISELECT(448,300), //bcp->offset
    10, //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
    4, //immediately_derived
  0, 1},
  {&cd_S6382C7,    ABISELECT(400,272), //bcp->offset
    7, //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_S2398C28_nt,    ABISELECT(104,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
    -1, //immediately_derived
  1, 0},
  {&cd_S2398C28_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
    8, //immediately_derived
  0, 0},
  {&cd_S2791C3,    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
    8, //immediately_derived
  0, 0},
  {&cd_S6382C8,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S6382C6[];
extern void _ZN7S6382C82v2Ev();
extern void _ZN7S6382C6D1Ev();
extern void _ZN7S6382C6D0Ev();
extern void _ZN7S6382C82v2Ev();
static  VTBL_ENTRY vtc_S6382C6[] = {
  ABISELECT(448,300),
  ABISELECT(400,272),
  0,
  (VTBL_ENTRY)&(_ZTI7S6382C6[0]),
  (VTBL_ENTRY)&_ZN7S6382C82v2Ev,
  (VTBL_ENTRY)&_ZN7S6382C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6382C6D0Ev,
  ABISELECT(48,28),
  ABISELECT(-400,-272),
  (VTBL_ENTRY)&(_ZTI7S6382C6[0]),
  0,
  ABISELECT(-448,-300),
  (VTBL_ENTRY)&(_ZTI7S6382C6[0]),
  (VTBL_ENTRY)&_ZN7S6382C82v2Ev,
};
extern VTBL_ENTRY _ZTV7S6382C6[];
static  VTBL_ENTRY _tg__ZTV7S6382C7__7S6382C6[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6382C7[0]),
};
extern void _ZN7S6382C82v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6382C8__7S6382C7__7S6382C6[] = {
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S6382C7[0]),
  (VTBL_ENTRY)&_ZN7S6382C82v2Ev,
};
static  VTT_ENTRY vtt_S6382C6[] = {
  {&(_ZTV7S6382C6[4]),  4,14},
  {&(_ZTV7S6382C6[10]),  10,14},
  {&(_ZTV7S6382C6[13]),  13,14},
  {&(_tg__ZTV7S6382C7__7S6382C6[3]),  3,3},
  {&(_tg__ZTV7S6382C8__7S6382C7__7S6382C6[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6382C6[];
extern  VTBL_ENTRY _ZTV7S6382C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6382C6[];
Class_Descriptor cd_S6382C6 = {  "S6382C6", // class name
  bases_S6382C6, 9,
  &(vtc_S6382C6[0]), // expected_vtbl_contents
  &(vtt_S6382C6[0]), // expected_vtt_contents
  ABISELECT(528,348), // object size
  NSPAIRA(_ZTI7S6382C6),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6382C6),14, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6382C6),5, //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  S6382C1  : S6382C2 , virtual S2791C3 , S6382C6 , virtual S2398C28_nt , S6382C8 {
  ::S3052C22_nt s6382c1f0;
  ::S2398C28_nt s6382c1f1;
  void *s6382c1f2;
  long double s6382c1f3;
  int  :0;
  void *s6382c1f5[3];
  virtual  ~S6382C1(); // _ZN7S6382C1D2Ev
  S6382C1(); // tgen
};
//SIG(1 S6382C1) C1{ BC2{ v1 Fp[4] FC3{} FC4{ m Fp FL Fi FC5{ m Fc[2]} FC5 Fi}} VBC4 BC6{ BC4 VBC7{ VBC8{ BC5 BC4 v2 FD Fi} Fp FD Fp Fs Fc} BC5 BC8 vd FL[8] Fi Fl FC4 Fs FC8[2]} VBC5 BC8 vd FC3 FC5 Fp FD Fi:0 Fp[3]}


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

static void Test_S6382C1()
{
  extern Class_Descriptor cd_S6382C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(49,127)];
    init_test(&cd_S6382C1, buf);
    S6382C1 *dp, &lv = *(dp=new (buf) S6382C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(768,504), "sizeof(S6382C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6382C1)");
    check_base_class_offset(lv, (S6382C2*), 0, "S6382C1");
    /*is_ambiguous_... S6382C1::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*), ABISELECT(600,400), "S6382C1");
    /*is_ambiguous_... S6382C6::S2791C3 */ AMB_check_base_class_offset(lv, (S2791C3*)(S6382C6*), ABISELECT(152,96), "S6382C1");
    /*is_ambiguous_... S6382C1::S6382C8 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S6382C8*), ABISELECT(696,456), "S6382C1");
    /*is_ambiguous_... S6382C1::S6382C8 */ AMB_check_base_class_offset(lv, (S2791C3*)(S6382C8*), ABISELECT(704,460), "S6382C1");
    check_base_class_offset(lv, (S6382C8*)(S6382C7*), ABISELECT(688,452), "S6382C1");
    check_base_class_offset(lv, (S6382C7*)(S6382C6*), ABISELECT(640,424), "S6382C1");
    /*is_ambiguous_... S6382C6::S2398C28_nt */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S6382C6*), ABISELECT(184,120), "S6382C1");
    /*is_ambiguous_... S6382C6::S6382C8 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S6382C8*)(S6382C6*), ABISELECT(88,52), "S6382C1");
    /*is_ambiguous_... S6382C6::S6382C8 */ AMB_check_base_class_offset(lv, (S2791C3*)(S6382C8*)(S6382C6*), ABISELECT(96,56), "S6382C1");
    /*is_ambiguous_... S6382C6::S6382C8 */ AMB_check_base_class_offset(lv, (S6382C8*)(S6382C6*), ABISELECT(80,48), "S6382C1");
    check_base_class_offset(lv, (S6382C6*), ABISELECT(80,48), "S6382C1");
    /*is_ambiguous_... S6382C1::S2398C28_nt */ AMB_check_base_class_offset(lv, (S2398C28_nt*), ABISELECT(756,500), "S6382C1");
    /*is_ambiguous_... S6382C1::S6382C8 */ AMB_check_base_class_offset(lv, (S2398C28_nt*)(S6382C8*), ABISELECT(488,324), "S6382C1");
    /*is_ambiguous_... S6382C1::S6382C8 */ AMB_check_base_class_offset(lv, (S2791C3*)(S6382C8*), ABISELECT(496,328), "S6382C1");
    /*is_ambiguous_... S6382C1::S6382C8 */ AMB_check_base_class_offset(lv, (S6382C8*), ABISELECT(480,320), "S6382C1");
    check_field_offset(lv, s6382c1f0, ABISELECT(548,368), "S6382C1.s6382c1f0");
    check_field_offset(lv, s6382c1f1, ABISELECT(549,369), "S6382C1.s6382c1f1");
    check_field_offset(lv, s6382c1f2, ABISELECT(552,372), "S6382C1.s6382c1f2");
    check_field_offset(lv, s6382c1f3, ABISELECT(560,376), "S6382C1.s6382c1f3");
    check_field_offset(lv, s6382c1f5, ABISELECT(576,388), "S6382C1.s6382c1f5");
    test_class_info(&lv, &cd_S6382C1);
    dp->~S6382C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6382C1(Test_S6382C1, "S6382C1", ABISELECT(768,504));

#else // __cplusplus

extern void _ZN7S6382C1C1Ev();
extern void _ZN7S6382C1D2Ev();
Name_Map name_map_S6382C1[] = {
  NSPAIR(_ZN7S6382C1C1Ev),
  NSPAIR(_ZN7S6382C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S6382C2;
extern VTBL_ENTRY _ZTI7S6382C2[];
extern  VTBL_ENTRY _ZTV7S6382C2[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S6382C8;
extern VTBL_ENTRY _ZTI7S6382C8[];
extern  VTBL_ENTRY _ZTV7S6382C8[];
extern Class_Descriptor cd_S6382C7;
extern VTBL_ENTRY _ZTI7S6382C7[];
extern  VTBL_ENTRY _ZTV7S6382C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6382C7[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S6382C8;
extern VTBL_ENTRY _ZTI7S6382C8[];
extern  VTBL_ENTRY _ZTV7S6382C8[];
extern Class_Descriptor cd_S6382C6;
extern VTBL_ENTRY _ZTI7S6382C6[];
extern  VTBL_ENTRY _ZTV7S6382C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6382C6[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2398C28_nt;
extern VTBL_ENTRY _ZTI11S2398C28_nt[];
extern Class_Descriptor cd_S2791C3;
extern VTBL_ENTRY _ZTI7S2791C3[];
extern Class_Descriptor cd_S6382C8;
extern VTBL_ENTRY _ZTI7S6382C8[];
extern  VTBL_ENTRY _ZTV7S6382C8[];
static Base_Class bases_S6382C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6382C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S2791C3,    ABISELECT(600,400), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2791C3,    ABISELECT(152,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
    11, //immediately_derived
  0, 0},
  {&cd_S2398C28_nt,    ABISELECT(696,456), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2791C3,    ABISELECT(704,460), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6382C8,    ABISELECT(688,452), //bcp->offset
    22, //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
    6, //immediately_derived
  0, 1},
  {&cd_S6382C7,    ABISELECT(640,424), //bcp->offset
    19, //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
    2, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S2398C28_nt,    ABISELECT(184,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
    11, //immediately_derived
  0, 0},
  {&cd_S2398C28_nt,    ABISELECT(88,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
    10, //immediately_derived
  0, 0},
  {&cd_S2791C3,    ABISELECT(96,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
    10, //immediately_derived
  0, 0},
  {&cd_S6382C8,    ABISELECT(80,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
    4, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S6382C6,    ABISELECT(80,48), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    2, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2398C28_nt,    ABISELECT(756,500), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2398C28_nt,    ABISELECT(488,324), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 0},
  {&cd_S2791C3,    ABISELECT(496,328), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 0},
  {&cd_S6382C8,    ABISELECT(480,320), //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
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S6382C1[];
extern void _ZN7S6382C22v1Ev();
extern void _ZN7S6382C1D1Ev();
extern void _ZN7S6382C1D0Ev();
extern void _ZN7S6382C82v2Ev();
extern void ABISELECT(_ZThn80_N7S6382C1D1Ev,_ZThn48_N7S6382C1D1Ev)();
extern void ABISELECT(_ZThn80_N7S6382C1D0Ev,_ZThn48_N7S6382C1D0Ev)();
extern void _ZN7S6382C82v2Ev();
extern void _ZN7S6382C82v2Ev();
static  VTBL_ENTRY vtc_S6382C1[] = {
  ABISELECT(756,500),
  ABISELECT(688,452),
  ABISELECT(640,424),
  ABISELECT(600,400),
  0,
  (VTBL_ENTRY)&(_ZTI7S6382C1[0]),
  (VTBL_ENTRY)&_ZN7S6382C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6382C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6382C1D0Ev,
  ABISELECT(608,404),
  ABISELECT(560,376),
  ABISELECT(-80,-48),
  (VTBL_ENTRY)&(_ZTI7S6382C1[0]),
  (VTBL_ENTRY)&_ZN7S6382C82v2Ev,
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N7S6382C1D1Ev,_ZThn48_N7S6382C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn80_N7S6382C1D0Ev,_ZThn48_N7S6382C1D0Ev),
  ABISELECT(-480,-320),
  (VTBL_ENTRY)&(_ZTI7S6382C1[0]),
  (VTBL_ENTRY)&_ZN7S6382C82v2Ev,
  ABISELECT(48,28),
  ABISELECT(-640,-424),
  (VTBL_ENTRY)&(_ZTI7S6382C1[0]),
  0,
  ABISELECT(-688,-452),
  (VTBL_ENTRY)&(_ZTI7S6382C1[0]),
  (VTBL_ENTRY)&_ZN7S6382C82v2Ev,
};
extern VTBL_ENTRY _ZTV7S6382C1[];
extern void _ZN7S6382C82v2Ev();
extern void _ZN7S6382C6D1Ev();
extern void _ZN7S6382C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6382C6__7S6382C1[] = {
  ABISELECT(608,404),
  ABISELECT(560,376),
  0,
  (VTBL_ENTRY)&(_ZTI7S6382C6[0]),
  (VTBL_ENTRY)&_ZN7S6382C82v2Ev,
  (VTBL_ENTRY)&_ZN7S6382C6D1Ev,
  (VTBL_ENTRY)&_ZN7S6382C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6382C7__7S6382C6__7S6382C1[] = {
  ABISELECT(48,28),
  ABISELECT(-560,-376),
  (VTBL_ENTRY)&(_ZTI7S6382C6[0]),
};
extern void _ZN7S6382C82v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6382C8__7S6382C6__7S6382C1[] = {
  0,
  ABISELECT(-608,-404),
  (VTBL_ENTRY)&(_ZTI7S6382C6[0]),
  (VTBL_ENTRY)&_ZN7S6382C82v2Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6382C7__7S6382C1[] = {
  ABISELECT(48,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S6382C7[0]),
};
extern void _ZN7S6382C82v2Ev();
static  VTBL_ENTRY _tg__ZTV7S6382C8__7S6382C7__7S6382C1[] = {
  0,
  ABISELECT(-48,-28),
  (VTBL_ENTRY)&(_ZTI7S6382C7[0]),
  (VTBL_ENTRY)&_ZN7S6382C82v2Ev,
};
static  VTT_ENTRY vtt_S6382C1[] = {
  {&(_ZTV7S6382C1[6]),  6,26},
  {&(_tg__ZTV7S6382C6__7S6382C1[4]),  4,7},
  {&(_tg__ZTV7S6382C7__7S6382C6__7S6382C1[3]),  3,3},
  {&(_tg__ZTV7S6382C8__7S6382C6__7S6382C1[3]),  3,4},
  {&(_ZTV7S6382C1[13]),  13,26},
  {&(_ZTV7S6382C1[22]),  22,26},
  {&(_ZTV7S6382C1[25]),  25,26},
  {&(_tg__ZTV7S6382C7__7S6382C1[3]),  3,3},
  {&(_tg__ZTV7S6382C8__7S6382C7__7S6382C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI7S6382C1[];
extern  VTBL_ENTRY _ZTV7S6382C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6382C1[];
Class_Descriptor cd_S6382C1 = {  "S6382C1", // class name
  bases_S6382C1, 16,
  &(vtc_S6382C1[0]), // expected_vtbl_contents
  &(vtt_S6382C1[0]), // expected_vtt_contents
  ABISELECT(768,504), // object size
  NSPAIRA(_ZTI7S6382C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6382C1),26, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6382C1),9, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2861C8  : virtual S2264C38 , virtual S2264C24 {
  int s2861c8f0[9];
  ~S2861C8(); // tgen
  S2861C8(); // tgen
};
//SIG(-1 S2861C8) C1{ VBC2{ m} VBC3{ m} Fi[9]}


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

static void Test_S2861C8()
{
  extern Class_Descriptor cd_S2861C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S2861C8, buf);
    S2861C8 *dp, &lv = *(dp=new (buf) S2861C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S2861C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2861C8)");
    check_base_class_offset(lv, (S2264C38*), 0, "S2861C8");
    check_base_class_offset(lv, (S2264C24*), 0, "S2861C8");
    check_field_offset(lv, s2861c8f0, ABISELECT(8,4), "S2861C8.s2861c8f0");
    test_class_info(&lv, &cd_S2861C8);
    dp->~S2861C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2861C8(Test_S2861C8, "S2861C8", ABISELECT(48,40));

#else // __cplusplus

extern void _ZN7S2861C8C1Ev();
extern void _ZN7S2861C8D1Ev();
Name_Map name_map_S2861C8[] = {
  NSPAIR(_ZN7S2861C8C1Ev),
  NSPAIR(_ZN7S2861C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
static Base_Class bases_S2861C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S2861C8[];
static  VTBL_ENTRY vtc_S2861C8[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C8[0]),
};
extern VTBL_ENTRY _ZTV7S2861C8[];
static  VTT_ENTRY vtt_S2861C8[] = {
  {&(_ZTV7S2861C8[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S2861C8[];
extern  VTBL_ENTRY _ZTV7S2861C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C8[];
Class_Descriptor cd_S2861C8 = {  "S2861C8", // class name
  bases_S2861C8, 2,
  &(vtc_S2861C8[0]), // expected_vtbl_contents
  &(vtt_S2861C8[0]), // expected_vtt_contents
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI7S2861C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2861C8),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2861C8),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  S2861C6  : virtual S2264C38 , virtual S2264C24 , virtual S2861C8 {
  void *s2861c6f0;
  virtual  ~S2861C6(); // _ZN7S2861C6D2Ev
  S2861C6(); // tgen
};
//SIG(-1 S2861C6) C1{ VBC2{ m} VBC3{ m} VBC4{ VBC2 VBC3 Fi[9]} vd Fp}


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

static void Test_S2861C6()
{
  extern Class_Descriptor cd_S2861C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S2861C6, buf);
    S2861C6 *dp, &lv = *(dp=new (buf) S2861C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S2861C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2861C6)");
    check_base_class_offset(lv, (S2264C38*), 0, "S2861C6");
    check_base_class_offset(lv, (S2264C38*)(S2861C8*), 0, "S2861C6");
    check_base_class_offset(lv, (S2264C24*), 0, "S2861C6");
    check_base_class_offset(lv, (S2264C24*)(S2861C8*), 0, "S2861C6");
    check_base_class_offset(lv, (S2861C8*), ABISELECT(16,8), "S2861C6");
    check_field_offset(lv, s2861c6f0, ABISELECT(8,4), "S2861C6.s2861c6f0");
    test_class_info(&lv, &cd_S2861C6);
    dp->~S2861C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2861C6(Test_S2861C6, "S2861C6", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN7S2861C6C1Ev();
extern void _ZN7S2861C6D2Ev();
Name_Map name_map_S2861C6[] = {
  NSPAIR(_ZN7S2861C6C1Ev),
  NSPAIR(_ZN7S2861C6D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2861C8;
extern VTBL_ENTRY _ZTI7S2861C8[];
extern  VTBL_ENTRY _ZTV7S2861C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C8[];
static Base_Class bases_S2861C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2861C8,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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 _ZTI7S2861C6[];
extern void _ZN7S2861C6D1Ev();
extern void _ZN7S2861C6D0Ev();
static  VTBL_ENTRY vtc_S2861C6[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
  (VTBL_ENTRY)&_ZN7S2861C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2861C6D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
};
extern VTBL_ENTRY _ZTV7S2861C6[];
static  VTBL_ENTRY _tg__ZTV7S2861C8__7S2861C6[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C8[0]),
};
static  VTT_ENTRY vtt_S2861C6[] = {
  {&(_ZTV7S2861C6[5]),  5,11},
  {&(_ZTV7S2861C6[11]),  11,11},
  {&(_tg__ZTV7S2861C8__7S2861C6[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S2861C6[];
extern  VTBL_ENTRY _ZTV7S2861C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C6[];
Class_Descriptor cd_S2861C6 = {  "S2861C6", // class name
  bases_S2861C6, 3,
  &(vtc_S2861C6[0]), // expected_vtbl_contents
  &(vtt_S2861C6[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI7S2861C6),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2861C6),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2861C6),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  S2861C9  : S2264C24 , virtual S2264C28 {
  ~S2861C9(); // tgen
  S2861C9(); // tgen
};
//SIG(-1 S2861C9) C1{ BC2{ m} VBC3{ m}}


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

static void Test_S2861C9()
{
  extern Class_Descriptor cd_S2861C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S2861C9, buf);
    S2861C9 *dp, &lv = *(dp=new (buf) S2861C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S2861C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2861C9)");
    check_base_class_offset(lv, (S2264C24*), 0, "S2861C9");
    check_base_class_offset(lv, (S2264C28*), 0, "S2861C9");
    test_class_info(&lv, &cd_S2861C9);
    dp->~S2861C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2861C9(Test_S2861C9, "S2861C9", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S2861C9C1Ev();
extern void _ZN7S2861C9D1Ev();
Name_Map name_map_S2861C9[] = {
  NSPAIR(_ZN7S2861C9C1Ev),
  NSPAIR(_ZN7S2861C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S2861C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S2861C9[];
static  VTBL_ENTRY vtc_S2861C9[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C9[0]),
};
extern VTBL_ENTRY _ZTV7S2861C9[];
static  VTT_ENTRY vtt_S2861C9[] = {
  {&(_ZTV7S2861C9[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2861C9[];
extern  VTBL_ENTRY _ZTV7S2861C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C9[];
Class_Descriptor cd_S2861C9 = {  "S2861C9", // class name
  bases_S2861C9, 2,
  &(vtc_S2861C9[0]), // expected_vtbl_contents
  &(vtt_S2861C9[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S2861C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2861C9),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2861C9),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  S2861C5  : S2861C6 , S2264C24 , virtual S2861C9 {
  virtual  ~S2861C5(); // _ZN7S2861C5D2Ev
  S2861C5(); // tgen
};
//SIG(-1 S2861C5) C1{ BC2{ VBC3{ m} VBC4{ m} VBC5{ VBC3 VBC4 Fi[9]} vd Fp} BC4 VBC6{ BC4 VBC7{ m}} vd}


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

static void Test_S2861C5()
{
  extern Class_Descriptor cd_S2861C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S2861C5, buf);
    S2861C5 *dp, &lv = *(dp=new (buf) S2861C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S2861C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2861C5)");
    check_base_class_offset(lv, (S2264C38*)(S2861C6*), 0, "S2861C5");
    check_base_class_offset(lv, (S2264C38*)(S2861C8*), 0, "S2861C5");
    check_base_class_offset(lv, (S2264C24*)(S2861C6*), ABISELECT(16,8), "S2861C5");
    check_base_class_offset(lv, (S2264C24*)(S2861C8*), ABISELECT(16,8), "S2861C5");
    check_base_class_offset(lv, (S2861C8*)(S2861C6*), ABISELECT(16,8), "S2861C5");
    check_base_class_offset(lv, (S2861C6*), 0, "S2861C5");
    /*is_ambiguous_... S2861C5::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*), 0, "S2861C5");
    check_base_class_offset(lv, (S2264C24*)(S2861C9*), ABISELECT(64,48), "S2861C5");
    check_base_class_offset(lv, (S2264C28*)(S2861C9*), 0, "S2861C5");
    check_base_class_offset(lv, (S2861C9*), ABISELECT(64,48), "S2861C5");
    test_class_info(&lv, &cd_S2861C5);
    dp->~S2861C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2861C5(Test_S2861C5, "S2861C5", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S2861C5C1Ev();
extern void _ZN7S2861C5D2Ev();
Name_Map name_map_S2861C5[] = {
  NSPAIR(_ZN7S2861C5C1Ev),
  NSPAIR(_ZN7S2861C5D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2861C8;
extern VTBL_ENTRY _ZTI7S2861C8[];
extern  VTBL_ENTRY _ZTV7S2861C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C8[];
extern Class_Descriptor cd_S2861C6;
extern VTBL_ENTRY _ZTI7S2861C6[];
extern  VTBL_ENTRY _ZTV7S2861C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C6[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2861C9;
extern VTBL_ENTRY _ZTI7S2861C9[];
extern  VTBL_ENTRY _ZTV7S2861C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C9[];
static Base_Class bases_S2861C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C24,    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, 1},
  {&cd_S2861C8,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S2861C6,    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_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C24,    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
    7, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2861C9,    ABISELECT(64,48), //bcp->offset
    13, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2861C5[];
extern void _ZN7S2861C5D1Ev();
extern void _ZN7S2861C5D0Ev();
static  VTBL_ENTRY vtc_S2861C5[] = {
  0,
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C5[0]),
  (VTBL_ENTRY)&_ZN7S2861C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2861C5D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2861C5[0]),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI7S2861C5[0]),
};
extern VTBL_ENTRY _ZTV7S2861C5[];
extern void _ZN7S2861C6D1Ev();
extern void _ZN7S2861C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2861C6__7S2861C5[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
  (VTBL_ENTRY)&_ZN7S2861C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2861C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__7S2861C6__7S2861C5[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__7S2861C5[] = {
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C9__7S2861C5[] = {
  ABISELECT(-64,-48),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C9[0]),
};
static  VTT_ENTRY vtt_S2861C5[] = {
  {&(_ZTV7S2861C5[7]),  7,16},
  {&(_tg__ZTV7S2861C6__7S2861C5[5]),  5,7},
  {&(_tg__ZTV7S2861C8__7S2861C6__7S2861C5[4]),  4,4},
  {&(_ZTV7S2861C5[13]),  13,16},
  {&(_ZTV7S2861C5[16]),  16,16},
  {&(_tg__ZTV7S2861C8__7S2861C5[4]),  4,4},
  {&(_tg__ZTV7S2861C9__7S2861C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S2861C5[];
extern  VTBL_ENTRY _ZTV7S2861C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C5[];
Class_Descriptor cd_S2861C5 = {  "S2861C5", // class name
  bases_S2861C5, 8,
  &(vtc_S2861C5[0]), // expected_vtbl_contents
  &(vtt_S2861C5[0]), // expected_vtt_contents
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S2861C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S2861C5),16, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2861C5),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2861C10  : virtual S2264C24 , S2264C38 , S2861C6 , virtual S2264C28 {
  virtual  ~S2861C10(); // _ZN8S2861C10D2Ev
  S2861C10(); // tgen
};
//SIG(-1 S2861C10) C1{ VBC2{ m} BC3{ m} BC4{ VBC3 VBC2 VBC5{ VBC3 VBC2 Fi[9]} vd Fp} VBC6{ m} vd}


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

static void Test_S2861C10()
{
  extern Class_Descriptor cd_S2861C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S2861C10, buf);
    S2861C10 *dp, &lv = *(dp=new (buf) S2861C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S2861C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2861C10)");
    check_base_class_offset(lv, (S2264C24*), 0, "S2861C10");
    check_base_class_offset(lv, (S2264C24*)(S2861C6*), 0, "S2861C10");
    check_base_class_offset(lv, (S2264C24*)(S2861C8*), 0, "S2861C10");
    /*is_ambiguous_... S2861C10::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), 0, "S2861C10");
    check_base_class_offset(lv, (S2264C38*)(S2861C6*), ABISELECT(16,8), "S2861C10");
    check_base_class_offset(lv, (S2264C38*)(S2861C8*), ABISELECT(16,8), "S2861C10");
    check_base_class_offset(lv, (S2861C8*)(S2861C6*), ABISELECT(16,8), "S2861C10");
    check_base_class_offset(lv, (S2861C6*), 0, "S2861C10");
    check_base_class_offset(lv, (S2264C28*), 0, "S2861C10");
    test_class_info(&lv, &cd_S2861C10);
    dp->~S2861C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2861C10(Test_S2861C10, "S2861C10", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN8S2861C10C1Ev();
extern void _ZN8S2861C10D2Ev();
Name_Map name_map_S2861C10[] = {
  NSPAIR(_ZN8S2861C10C1Ev),
  NSPAIR(_ZN8S2861C10D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2861C8;
extern VTBL_ENTRY _ZTI7S2861C8[];
extern  VTBL_ENTRY _ZTV7S2861C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C8[];
extern Class_Descriptor cd_S2861C6;
extern VTBL_ENTRY _ZTI7S2861C6[];
extern  VTBL_ENTRY _ZTV7S2861C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C6[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S2861C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C38,    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, 1},
  {&cd_S2861C8,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S2861C6,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S2861C10[];
extern void _ZN8S2861C10D1Ev();
extern void _ZN8S2861C10D0Ev();
static  VTBL_ENTRY vtc_S2861C10[] = {
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S2861C10[0]),
  (VTBL_ENTRY)&_ZN8S2861C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2861C10D0Ev,
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2861C10[0]),
};
extern VTBL_ENTRY _ZTV8S2861C10[];
extern void _ZN7S2861C6D1Ev();
extern void _ZN7S2861C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2861C6__8S2861C10[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
  (VTBL_ENTRY)&_ZN7S2861C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2861C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__7S2861C6__8S2861C10[] = {
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__8S2861C10[] = {
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C8[0]),
};
static  VTT_ENTRY vtt_S2861C10[] = {
  {&(_ZTV8S2861C10[6]),  6,12},
  {&(_tg__ZTV7S2861C6__8S2861C10[5]),  5,7},
  {&(_tg__ZTV7S2861C8__7S2861C6__8S2861C10[4]),  4,4},
  {&(_ZTV8S2861C10[12]),  12,12},
  {&(_tg__ZTV7S2861C8__8S2861C10[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S2861C10[];
extern  VTBL_ENTRY _ZTV8S2861C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2861C10[];
Class_Descriptor cd_S2861C10 = {  "S2861C10", // class name
  bases_S2861C10, 6,
  &(vtc_S2861C10[0]), // expected_vtbl_contents
  &(vtt_S2861C10[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI8S2861C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S2861C10),12, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2861C10),5, //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  S2861C12  : S2264C24 , virtual S2861C8 , S2861C6 , S2264C38 , virtual S2861C10 {
  virtual  ~S2861C12(); // _ZN8S2861C12D2Ev
  S2861C12(); // tgen
};
//SIG(-1 S2861C12) C1{ BC2{ m} VBC3{ VBC4{ m} VBC2 Fi[9]} BC5{ VBC4 VBC2 VBC3 vd Fp} BC4 VBC6{ VBC2 BC4 BC5 VBC7{ m} vd} vd}


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

static void Test_S2861C12()
{
  extern Class_Descriptor cd_S2861C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,16)];
    init_test(&cd_S2861C12, buf);
    S2861C12 *dp, &lv = *(dp=new (buf) S2861C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S2861C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2861C12)");
    /*is_ambiguous_... S2861C12::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*), 0, "S2861C12");
    check_base_class_offset(lv, (S2264C38*)(S2861C8*), ABISELECT(60,48), "S2861C12");
    /*is_ambiguous_... S2861C12::S2861C6 */ AMB_check_base_class_offset(lv, (S2264C38*)(S2861C6*), ABISELECT(60,48), "S2861C12");
    check_base_class_offset(lv, (S2264C38*)(S2861C6*)(S2861C10*), ABISELECT(60,48), "S2861C12");
    check_base_class_offset(lv, (S2264C24*)(S2861C8*), ABISELECT(60,48), "S2861C12");
    /*is_ambiguous_... S2861C12::S2861C6 */ AMB_check_base_class_offset(lv, (S2264C24*)(S2861C6*), ABISELECT(60,48), "S2861C12");
    check_base_class_offset(lv, (S2264C24*)(S2861C10*), ABISELECT(60,48), "S2861C12");
    check_base_class_offset(lv, (S2264C24*)(S2861C6*)(S2861C10*), ABISELECT(60,48), "S2861C12");
    check_base_class_offset(lv, (S2861C8*), ABISELECT(16,8), "S2861C12");
    /*is_ambiguous_... S2861C12::S2861C6 */ AMB_check_base_class_offset(lv, (S2861C8*)(S2861C6*), ABISELECT(16,8), "S2861C12");
    check_base_class_offset(lv, (S2861C8*)(S2861C6*)(S2861C10*), ABISELECT(16,8), "S2861C12");
    /*is_ambiguous_... S2861C12::S2861C6 */ AMB_check_base_class_offset(lv, (S2861C6*), 0, "S2861C12");
    /*is_ambiguous_... S2861C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), 0, "S2861C12");
    /*is_ambiguous_... S2861C10::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S2861C10*), ABISELECT(64,52), "S2861C12");
    check_base_class_offset(lv, (S2861C6*)(S2861C10*), ABISELECT(64,52), "S2861C12");
    check_base_class_offset(lv, (S2264C28*)(S2861C10*), 0, "S2861C12");
    check_base_class_offset(lv, (S2861C10*), ABISELECT(64,52), "S2861C12");
    test_class_info(&lv, &cd_S2861C12);
    dp->~S2861C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2861C12(Test_S2861C12, "S2861C12", ABISELECT(80,60));

#else // __cplusplus

extern void _ZN8S2861C12C1Ev();
extern void _ZN8S2861C12D2Ev();
Name_Map name_map_S2861C12[] = {
  NSPAIR(_ZN8S2861C12C1Ev),
  NSPAIR(_ZN8S2861C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2861C8;
extern VTBL_ENTRY _ZTI7S2861C8[];
extern  VTBL_ENTRY _ZTV7S2861C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C8[];
extern Class_Descriptor cd_S2861C6;
extern VTBL_ENTRY _ZTI7S2861C6[];
extern  VTBL_ENTRY _ZTV7S2861C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C6[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2861C6;
extern VTBL_ENTRY _ZTI7S2861C6[];
extern  VTBL_ENTRY _ZTV7S2861C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C6[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2861C10;
extern VTBL_ENTRY _ZTI8S2861C10[];
extern  VTBL_ENTRY _ZTV8S2861C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2861C10[];
static Base_Class bases_S2861C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C38,    ABISELECT(60,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_S2264C24,    ABISELECT(60,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_S2861C8,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2861C6,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C38,    ABISELECT(64,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
    9, //immediately_derived
  0, 0},
  {&cd_S2861C6,    ABISELECT(64,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2861C10,    ABISELECT(64,52), //bcp->offset
    13, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S2861C12[];
extern void _ZN8S2861C12D1Ev();
extern void _ZN8S2861C12D0Ev();
extern void ABISELECT(_ZTv0_n56_N8S2861C12D1Ev,_ZTv0_n28_N8S2861C12D1Ev)();
extern void ABISELECT(_ZThn64_N8S2861C12D1Ev,_ZThn52_N8S2861C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2861C12D0Ev,_ZTv0_n28_N8S2861C12D0Ev)();
extern void ABISELECT(_ZThn64_N8S2861C12D0Ev,_ZThn52_N8S2861C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2861C12[] = {
  0,
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S2861C12[0]),
  (VTBL_ENTRY)&_ZN8S2861C12D1Ev,
  (VTBL_ENTRY)&_ZN8S2861C12D0Ev,
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2861C12[0]),
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI8S2861C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2861C12D1Ev,_ZTv0_n28_N8S2861C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2861C12D0Ev,_ZTv0_n28_N8S2861C12D0Ev),
};
extern VTBL_ENTRY _ZTV8S2861C12[];
extern void _ZN7S2861C6D1Ev();
extern void _ZN7S2861C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2861C6__8S2861C12[] = {
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
  (VTBL_ENTRY)&_ZN7S2861C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2861C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__7S2861C6__8S2861C12[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__8S2861C12[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C8[0]),
};
extern void _ZN8S2861C10D1Ev();
extern void _ZN8S2861C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2861C10__8S2861C12[] = {
  ABISELECT(-64,-52),
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI8S2861C10[0]),
  (VTBL_ENTRY)&_ZN8S2861C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2861C10D0Ev,
};
extern void _ZN7S2861C6D1Ev();
extern void _ZN7S2861C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2861C68S2861C10__A1__8S2861C12[] = {
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
  (VTBL_ENTRY)&_ZN7S2861C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2861C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__7S2861C68S2861C10__A1__8S2861C12[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__8S2861C10__8S2861C12[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI8S2861C10[0]),
};
static  VTT_ENTRY vtt_S2861C12[] = {
  {&(_ZTV8S2861C12[7]),  7,22},
  {&(_tg__ZTV7S2861C6__8S2861C12[5]),  5,7},
  {&(_tg__ZTV7S2861C8__7S2861C6__8S2861C12[4]),  4,4},
  {&(_ZTV8S2861C12[13]),  13,22},
  {&(_ZTV8S2861C12[20]),  20,22},
  {&(_tg__ZTV7S2861C8__8S2861C12[4]),  4,4},
  {&(_tg__ZTV8S2861C10__8S2861C12[6]),  6,8},
  {&(_tg__ZTV7S2861C68S2861C10__A1__8S2861C12[5]),  5,7},
  {&(_tg__ZTV7S2861C8__7S2861C68S2861C10__A1__8S2861C12[4]),  4,4},
  {&(_tg__ZTV7S2861C8__8S2861C10__8S2861C12[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S2861C12[];
extern  VTBL_ENTRY _ZTV8S2861C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2861C12[];
static VTBL_ENTRY alt_thunk_names213[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2861C12D0Ev,_ZTv0_n28_N8S2861C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S2861C12D0Ev,_ZThn52_N8S2861C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2861C12D1Ev,_ZTv0_n28_N8S2861C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N8S2861C12D1Ev,_ZThn52_N8S2861C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2861C12 = {  "S2861C12", // class name
  bases_S2861C12, 10,
  &(vtc_S2861C12[0]), // expected_vtbl_contents
  &(vtt_S2861C12[0]), // expected_vtt_contents
  ABISELECT(80,60), // object size
  NSPAIRA(_ZTI8S2861C12),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S2861C12),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2861C12),10, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names213,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2861C11  : S2861C12 , S2861C9 , S2861C10 , S2264C38 {
  virtual  ~S2861C11(); // _ZN8S2861C11D2Ev
  S2861C11(); // tgen
};
//SIG(-1 S2861C11) C1{ BC2{ BC3{ m} VBC4{ VBC5{ m} VBC3 Fi[9]} BC6{ VBC5 VBC3 VBC4 vd Fp} BC5 VBC7{ VBC3 BC5 BC6 VBC8{ m} vd} vd} BC9{ BC3 VBC8} BC7 BC5 vd}


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

static void Test_S2861C11()
{
  extern Class_Descriptor cd_S2861C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,19)];
    init_test(&cd_S2861C11, buf);
    S2861C11 *dp, &lv = *(dp=new (buf) S2861C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,72), "sizeof(S2861C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2861C11)");
    /*is_ambiguous_... S2861C12::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S2861C12*), 0, "S2861C11");
    check_base_class_offset(lv, (S2264C38*)(S2861C8*), ABISELECT(84,60), "S2861C11");
    /*is_ambiguous_... S2861C12::S2861C6 */ AMB_check_base_class_offset(lv, (S2264C38*)(S2861C6*)(S2861C12*), ABISELECT(84,60), "S2861C11");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S2861C6*)(S2861C10*), ABISELECT(84,60), "S2861C11");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S2861C6*)(S2861C10*), ABISELECT(84,60), "S2861C11");
    check_base_class_offset(lv, (S2264C24*)(S2861C8*), ABISELECT(84,60), "S2861C11");
    /*is_ambiguous_... S2861C12::S2861C6 */ AMB_check_base_class_offset(lv, (S2264C24*)(S2861C6*)(S2861C12*), ABISELECT(84,60), "S2861C11");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S2861C10*), ABISELECT(84,60), "S2861C11");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S2861C6*)(S2861C10*), ABISELECT(84,60), "S2861C11");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S2861C10*), ABISELECT(84,60), "S2861C11");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S2861C6*)(S2861C10*), ABISELECT(84,60), "S2861C11");
    check_base_class_offset(lv, (S2861C8*)(S2861C12*), ABISELECT(40,20), "S2861C11");
    /*is_ambiguous_... S2861C12::S2861C6 */ AMB_check_base_class_offset(lv, (S2861C8*)(S2861C6*)(S2861C12*), ABISELECT(40,20), "S2861C11");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2861C8*)(S2861C6*)(S2861C10*), ABISELECT(40,20), "S2861C11");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2861C8*)(S2861C6*)(S2861C10*), ABISELECT(40,20), "S2861C11");
    /*is_ambiguous_... S2861C12::S2861C6 */ AMB_check_base_class_offset(lv, (S2861C6*)(S2861C12*), 0, "S2861C11");
    /*is_ambiguous_... S2861C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S2861C12*), 0, "S2861C11");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S2861C10*), ABISELECT(88,64), "S2861C11");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2861C6*)(S2861C10*), ABISELECT(88,64), "S2861C11");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S2861C10*), 0, "S2861C11");
    check_base_class_offset(lv, (S2264C28*)(S2861C9*), 0, "S2861C11");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S2861C10*), 0, "S2861C11");
    check_base_class_offset(lv, (S2861C10*)(S2861C12*), ABISELECT(88,64), "S2861C11");
    check_base_class_offset(lv, (S2861C12*), 0, "S2861C11");
    check_base_class_offset(lv, (S2264C24*)(S2861C9*), ABISELECT(16,8), "S2861C11");
    check_base_class_offset(lv, (S2861C9*), ABISELECT(16,8), "S2861C11");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S2861C10*), ABISELECT(24,12), "S2861C11");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2861C6*)(S2861C10*), ABISELECT(24,12), "S2861C11");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2861C10*), ABISELECT(24,12), "S2861C11");
    /*is_ambiguous_... S2861C11::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), ABISELECT(40,20), "S2861C11");
    test_class_info(&lv, &cd_S2861C11);
    dp->~S2861C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2861C11(Test_S2861C11, "S2861C11", ABISELECT(104,72));

#else // __cplusplus

extern void _ZN8S2861C11C1Ev();
extern void _ZN8S2861C11D2Ev();
Name_Map name_map_S2861C11[] = {
  NSPAIR(_ZN8S2861C11C1Ev),
  NSPAIR(_ZN8S2861C11D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2861C8;
extern VTBL_ENTRY _ZTI7S2861C8[];
extern  VTBL_ENTRY _ZTV7S2861C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C8[];
extern Class_Descriptor cd_S2861C6;
extern VTBL_ENTRY _ZTI7S2861C6[];
extern  VTBL_ENTRY _ZTV7S2861C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C6[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2861C6;
extern VTBL_ENTRY _ZTI7S2861C6[];
extern  VTBL_ENTRY _ZTV7S2861C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C6[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2861C10;
extern VTBL_ENTRY _ZTI8S2861C10[];
extern  VTBL_ENTRY _ZTV8S2861C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2861C10[];
extern Class_Descriptor cd_S2861C12;
extern VTBL_ENTRY _ZTI8S2861C12[];
extern  VTBL_ENTRY _ZTV8S2861C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2861C12[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2861C9;
extern VTBL_ENTRY _ZTI7S2861C9[];
extern  VTBL_ENTRY _ZTV7S2861C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C9[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2861C6;
extern VTBL_ENTRY _ZTI7S2861C6[];
extern  VTBL_ENTRY _ZTV7S2861C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C6[];
extern Class_Descriptor cd_S2861C10;
extern VTBL_ENTRY _ZTI8S2861C10[];
extern  VTBL_ENTRY _ZTV8S2861C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2861C10[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
static Base_Class bases_S2861C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(84,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_S2264C24,    ABISELECT(84,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_S2861C8,    ABISELECT(40,20), //bcp->offset
    20, //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
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S2861C6,    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
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    ABISELECT(88,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
    9, //immediately_derived
  0, 0},
  {&cd_S2861C6,    ABISELECT(88,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2861C10,    ABISELECT(88,64), //bcp->offset
    24, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S2861C12,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C24,    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
    12, //immediately_derived
  0, 0},
  {&cd_S2861C9,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C38,    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
    15, //immediately_derived
  0, 0},
  {&cd_S2861C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2861C10,    ABISELECT(24,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    15, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C38,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S2861C11[];
extern void _ZN8S2861C11D1Ev();
extern void _ZN8S2861C11D0Ev();
extern void ABISELECT(_ZThn24_N8S2861C11D1Ev,_ZThn12_N8S2861C11D1Ev)();
extern void ABISELECT(_ZThn24_N8S2861C11D0Ev,_ZThn12_N8S2861C11D0Ev)();
extern void ABISELECT(_ZTv0_n56_N8S2861C11D1Ev,_ZTv0_n28_N8S2861C11D1Ev)();
extern void ABISELECT(_ZThn88_N8S2861C11D1Ev,_ZThn64_N8S2861C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2861C11D0Ev,_ZTv0_n28_N8S2861C11D0Ev)();
extern void ABISELECT(_ZThn88_N8S2861C11D0Ev,_ZThn64_N8S2861C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2861C11[] = {
  0,
  ABISELECT(88,64),
  ABISELECT(40,20),
  ABISELECT(84,60),
  ABISELECT(84,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S2861C11[0]),
  (VTBL_ENTRY)&_ZN8S2861C11D1Ev,
  (VTBL_ENTRY)&_ZN8S2861C11D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2861C11[0]),
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S2861C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S2861C11D1Ev,_ZThn12_N8S2861C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S2861C11D0Ev,_ZThn12_N8S2861C11D0Ev),
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S2861C11[0]),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI8S2861C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2861C11D1Ev,_ZTv0_n28_N8S2861C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2861C11D0Ev,_ZTv0_n28_N8S2861C11D0Ev),
};
extern VTBL_ENTRY _ZTV8S2861C11[];
extern void _ZN8S2861C12D1Ev();
extern void _ZN8S2861C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2861C12__8S2861C11[] = {
  0,
  ABISELECT(88,64),
  ABISELECT(40,20),
  ABISELECT(84,60),
  ABISELECT(84,60),
  0,
  (VTBL_ENTRY)&(_ZTI8S2861C12[0]),
  (VTBL_ENTRY)&_ZN8S2861C12D1Ev,
  (VTBL_ENTRY)&_ZN8S2861C12D0Ev,
};
extern void _ZN7S2861C6D1Ev();
extern void _ZN7S2861C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2861C68S2861C12__8S2861C11[] = {
  ABISELECT(40,20),
  ABISELECT(84,60),
  ABISELECT(84,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
  (VTBL_ENTRY)&_ZN7S2861C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2861C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__7S2861C68S2861C12__8S2861C11[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__8S2861C12__8S2861C11[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S2861C12[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S2861C12D1Ev,_ZTv0_n28_N8S2861C12D1Ev)();
extern void ABISELECT(_ZThn88_N8S2861C12D1Ev,_ZThn64_N8S2861C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2861C12D0Ev,_ZTv0_n28_N8S2861C12D0Ev)();
extern void ABISELECT(_ZThn88_N8S2861C12D0Ev,_ZThn64_N8S2861C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2861C10__8S2861C12__8S2861C11[] = {
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI8S2861C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2861C12D1Ev,_ZTv0_n28_N8S2861C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2861C12D0Ev,_ZTv0_n28_N8S2861C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2861C9__8S2861C11[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C9[0]),
};
extern void _ZN8S2861C10D1Ev();
extern void _ZN8S2861C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2861C10__A__8S2861C11[] = {
  ABISELECT(-24,-12),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S2861C10[0]),
  (VTBL_ENTRY)&_ZN8S2861C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2861C10D0Ev,
};
extern void _ZN7S2861C6D1Ev();
extern void _ZN7S2861C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2861C68S2861C10__A2__8S2861C11[] = {
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
  (VTBL_ENTRY)&_ZN7S2861C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2861C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__7S2861C68S2861C10__A2__8S2861C11[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__8S2861C10__A__8S2861C11[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2861C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__8S2861C11[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C8[0]),
};
extern void _ZN8S2861C10D1Ev();
extern void _ZN8S2861C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2861C10__8S2861C11[] = {
  ABISELECT(-88,-64),
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI8S2861C10[0]),
  (VTBL_ENTRY)&_ZN8S2861C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2861C10D0Ev,
};
extern void _ZN7S2861C6D1Ev();
extern void _ZN7S2861C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2861C68S2861C10__A1__8S2861C11[] = {
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
  (VTBL_ENTRY)&_ZN7S2861C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2861C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__7S2861C68S2861C10__A1__8S2861C11[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__8S2861C10__8S2861C11[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI8S2861C10[0]),
};
static  VTT_ENTRY vtt_S2861C11[] = {
  {&(_ZTV8S2861C11[7]),  7,33},
  {&(_tg__ZTV8S2861C12__8S2861C11[7]),  7,9},
  {&(_tg__ZTV7S2861C68S2861C12__8S2861C11[5]),  5,7},
  {&(_tg__ZTV7S2861C8__7S2861C68S2861C12__8S2861C11[4]),  4,4},
  {&(_tg__ZTV7S2861C8__8S2861C12__8S2861C11[4]),  4,4},
  {&(_tg__ZTV8S2861C10__8S2861C12__8S2861C11[7]),  7,9},
  {&(_tg__ZTV7S2861C9__8S2861C11[3]),  3,3},
  {&(_tg__ZTV8S2861C10__A__8S2861C11[6]),  6,8},
  {&(_tg__ZTV7S2861C68S2861C10__A2__8S2861C11[5]),  5,7},
  {&(_tg__ZTV7S2861C8__7S2861C68S2861C10__A2__8S2861C11[4]),  4,4},
  {&(_tg__ZTV7S2861C8__8S2861C10__A__8S2861C11[4]),  4,4},
  {&(_ZTV8S2861C11[24]),  24,33},
  {&(_ZTV8S2861C11[31]),  31,33},
  {&(_ZTV8S2861C11[12]),  12,33},
  {&(_ZTV8S2861C11[18]),  18,33},
  {&(_tg__ZTV7S2861C8__8S2861C11[4]),  4,4},
  {&(_tg__ZTV8S2861C10__8S2861C11[6]),  6,8},
  {&(_tg__ZTV7S2861C68S2861C10__A1__8S2861C11[5]),  5,7},
  {&(_tg__ZTV7S2861C8__7S2861C68S2861C10__A1__8S2861C11[4]),  4,4},
  {&(_tg__ZTV7S2861C8__8S2861C10__8S2861C11[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S2861C11[];
extern  VTBL_ENTRY _ZTV8S2861C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2861C11[];
static VTBL_ENTRY alt_thunk_names214[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2861C12D0Ev,_ZTv0_n28_N8S2861C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S2861C12D0Ev,_ZThn64_N8S2861C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2861C12D1Ev,_ZTv0_n28_N8S2861C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S2861C12D1Ev,_ZThn64_N8S2861C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2861C11D0Ev,_ZTv0_n28_N8S2861C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S2861C11D0Ev,_ZThn64_N8S2861C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2861C11D1Ev,_ZTv0_n28_N8S2861C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S2861C11D1Ev,_ZThn64_N8S2861C11D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2861C11 = {  "S2861C11", // class name
  bases_S2861C11, 17,
  &(vtc_S2861C11[0]), // expected_vtbl_contents
  &(vtt_S2861C11[0]), // expected_vtt_contents
  ABISELECT(104,72), // object size
  NSPAIRA(_ZTI8S2861C11),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S2861C11),33, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2861C11),20, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names214,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2861C2  : S2264C38 , virtual S2264C28 , virtual S2861C5 , virtual S2861C10 , S2861C11 {
  virtual  ~S2861C2(); // _ZN7S2861C2D2Ev
  S2861C2(); // tgen
};
//SIG(-1 S2861C2) C1{ BC2{ m} VBC3{ m} VBC4{ BC5{ VBC2 VBC6{ m} VBC7{ VBC2 VBC6 Fi[9]} vd Fp} BC6 VBC8{ BC6 VBC3} vd} VBC9{ VBC6 BC2 BC5 VBC3 vd} BC10{ BC11{ BC6 VBC7 BC5 BC2 VBC9 vd} BC8 BC9 BC2 vd} vd}


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

static void Test_S2861C2()
{
  extern Class_Descriptor cd_S2861C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,22)];
    init_test(&cd_S2861C2, buf);
    S2861C2 *dp, &lv = *(dp=new (buf) S2861C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,84), "sizeof(S2861C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2861C2)");
    /*is_ambiguous_... S2861C2::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), ABISELECT(41,21), "S2861C2");
    check_base_class_offset(lv, (S2264C28*), 0, "S2861C2");
    /*is_ambiguous_... S2861C2::S2861C9 */ AMB_check_base_class_offset(lv, (S2264C28*)(S2861C9*), 0, "S2861C2");
    /*is_ambiguous_... S2861C2::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S2861C10*), 0, "S2861C2");
    check_base_class_offset(lv, (S2264C28*)(S2861C9*)(S2861C11*), 0, "S2861C2");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S2861C10*)(S2861C11*), 0, "S2861C2");
    check_base_class_offset(lv, (S2264C38*)(S2861C6*)(S2861C5*), ABISELECT(64,32), "S2861C2");
    check_base_class_offset(lv, (S2264C38*)(S2861C8*), ABISELECT(64,32), "S2861C2");
    /*is_ambiguous_... S2861C2::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S2861C6*)(S2861C10*), ABISELECT(64,32), "S2861C2");
    /*is_ambiguous_... S2861C12::S2861C6 */ AMB_check_base_class_offset(lv, (S2264C38*)(S2861C6*)(S2861C12*)(S2861C11*), ABISELECT(64,32), "S2861C2");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S2861C6*)(S2861C10*)(S2861C11*), ABISELECT(64,32), "S2861C2");
    check_base_class_offset(lv, (S2264C24*)(S2861C6*)(S2861C5*), ABISELECT(64,32), "S2861C2");
    check_base_class_offset(lv, (S2264C24*)(S2861C8*), ABISELECT(64,32), "S2861C2");
    /*is_ambiguous_... S2861C2::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S2861C10*), ABISELECT(64,32), "S2861C2");
    /*is_ambiguous_... S2861C2::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S2861C6*)(S2861C10*), ABISELECT(64,32), "S2861C2");
    /*is_ambiguous_... S2861C12::S2861C6 */ AMB_check_base_class_offset(lv, (S2264C24*)(S2861C6*)(S2861C12*)(S2861C11*), ABISELECT(64,32), "S2861C2");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S2861C10*)(S2861C11*), ABISELECT(64,32), "S2861C2");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S2861C6*)(S2861C10*)(S2861C11*), ABISELECT(64,32), "S2861C2");
    check_base_class_offset(lv, (S2861C8*)(S2861C6*)(S2861C5*), ABISELECT(64,32), "S2861C2");
    /*is_ambiguous_... S2861C2::S2861C10 */ AMB_check_base_class_offset(lv, (S2861C8*)(S2861C6*)(S2861C10*), ABISELECT(64,32), "S2861C2");
    check_base_class_offset(lv, (S2861C8*)(S2861C12*)(S2861C11*), ABISELECT(64,32), "S2861C2");
    /*is_ambiguous_... S2861C12::S2861C6 */ AMB_check_base_class_offset(lv, (S2861C8*)(S2861C6*)(S2861C12*)(S2861C11*), ABISELECT(64,32), "S2861C2");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2861C8*)(S2861C6*)(S2861C10*)(S2861C11*), ABISELECT(64,32), "S2861C2");
    check_base_class_offset(lv, (S2861C6*)(S2861C5*), ABISELECT(48,24), "S2861C2");
    /*is_ambiguous_... S2861C5::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S2861C5*), ABISELECT(48,24), "S2861C2");
    /*is_ambiguous_... S2861C2::S2861C9 */ AMB_check_base_class_offset(lv, (S2264C24*)(S2861C9*), ABISELECT(112,72), "S2861C2");
    check_base_class_offset(lv, (S2861C9*)(S2861C5*), ABISELECT(112,72), "S2861C2");
    check_base_class_offset(lv, (S2861C5*), ABISELECT(48,24), "S2861C2");
    /*is_ambiguous_... S2861C2::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S2861C10*), ABISELECT(120,76), "S2861C2");
    /*is_ambiguous_... S2861C2::S2861C10 */ AMB_check_base_class_offset(lv, (S2861C6*)(S2861C10*), ABISELECT(120,76), "S2861C2");
    /*is_ambiguous_... S2861C2::S2861C10 */ AMB_check_base_class_offset(lv, (S2861C10*), ABISELECT(120,76), "S2861C2");
    check_base_class_offset(lv, (S2861C10*)(S2861C12*)(S2861C11*), ABISELECT(120,76), "S2861C2");
    /*is_ambiguous_... S2861C12::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S2861C12*)(S2861C11*), 0, "S2861C2");
    /*is_ambiguous_... S2861C12::S2861C6 */ AMB_check_base_class_offset(lv, (S2861C6*)(S2861C12*)(S2861C11*), 0, "S2861C2");
    /*is_ambiguous_... S2861C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S2861C12*)(S2861C11*), 0, "S2861C2");
    check_base_class_offset(lv, (S2861C12*)(S2861C11*), 0, "S2861C2");
    check_base_class_offset(lv, (S2264C24*)(S2861C9*)(S2861C11*), ABISELECT(16,8), "S2861C2");
    check_base_class_offset(lv, (S2861C9*)(S2861C11*), ABISELECT(16,8), "S2861C2");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S2861C10*)(S2861C11*), ABISELECT(24,12), "S2861C2");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2861C6*)(S2861C10*)(S2861C11*), ABISELECT(24,12), "S2861C2");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2861C10*)(S2861C11*), ABISELECT(24,12), "S2861C2");
    /*is_ambiguous_... S2861C11::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S2861C11*), ABISELECT(40,20), "S2861C2");
    check_base_class_offset(lv, (S2861C11*), 0, "S2861C2");
    test_class_info(&lv, &cd_S2861C2);
    dp->~S2861C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2861C2(Test_S2861C2, "S2861C2", ABISELECT(136,84));

#else // __cplusplus

extern void _ZN7S2861C2C1Ev();
extern void _ZN7S2861C2D2Ev();
Name_Map name_map_S2861C2[] = {
  NSPAIR(_ZN7S2861C2C1Ev),
  NSPAIR(_ZN7S2861C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2861C8;
extern VTBL_ENTRY _ZTI7S2861C8[];
extern  VTBL_ENTRY _ZTV7S2861C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C8[];
extern Class_Descriptor cd_S2861C6;
extern VTBL_ENTRY _ZTI7S2861C6[];
extern  VTBL_ENTRY _ZTV7S2861C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C6[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2861C9;
extern VTBL_ENTRY _ZTI7S2861C9[];
extern  VTBL_ENTRY _ZTV7S2861C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C9[];
extern Class_Descriptor cd_S2861C5;
extern VTBL_ENTRY _ZTI7S2861C5[];
extern  VTBL_ENTRY _ZTV7S2861C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2861C6;
extern VTBL_ENTRY _ZTI7S2861C6[];
extern  VTBL_ENTRY _ZTV7S2861C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C6[];
extern Class_Descriptor cd_S2861C10;
extern VTBL_ENTRY _ZTI8S2861C10[];
extern  VTBL_ENTRY _ZTV8S2861C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2861C10[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2861C6;
extern VTBL_ENTRY _ZTI7S2861C6[];
extern  VTBL_ENTRY _ZTV7S2861C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C6[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2861C12;
extern VTBL_ENTRY _ZTI8S2861C12[];
extern  VTBL_ENTRY _ZTV8S2861C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2861C12[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2861C9;
extern VTBL_ENTRY _ZTI7S2861C9[];
extern  VTBL_ENTRY _ZTV7S2861C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C9[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2861C6;
extern VTBL_ENTRY _ZTI7S2861C6[];
extern  VTBL_ENTRY _ZTV7S2861C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C6[];
extern Class_Descriptor cd_S2861C10;
extern VTBL_ENTRY _ZTI8S2861C10[];
extern  VTBL_ENTRY _ZTV8S2861C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2861C10[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2861C11;
extern VTBL_ENTRY _ZTI8S2861C11[];
extern  VTBL_ENTRY _ZTV8S2861C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2861C11[];
static Base_Class bases_S2861C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    ABISELECT(41,21), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C38,    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, 1},
  {&cd_S2264C24,    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, 1},
  {&cd_S2861C8,    ABISELECT(64,32), //bcp->offset
    32, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    18, //bcp->index_in_construction_vtbl_array
    28, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2861C6,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2264C24,    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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C24,    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
    8, //immediately_derived
  0, 0},
  {&cd_S2861C9,    ABISELECT(112,72), //bcp->offset
    36, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    19, //bcp->index_in_construction_vtbl_array
    29, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S2861C5,    ABISELECT(48,24), //bcp->offset
    22, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    17, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C38,    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
    12, //immediately_derived
  0, 0},
  {&cd_S2861C6,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    12, //immediately_derived
  0, 0},
  {&cd_S2861C10,    ABISELECT(120,76), //bcp->offset
    39, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    20, //bcp->index_in_construction_vtbl_array
    30, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2861C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2861C12,    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
    23, //immediately_derived
  0, 0},
  {&cd_S2264C24,    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
    18, //immediately_derived
  0, 0},
  {&cd_S2861C9,    ABISELECT(16,8), //bcp->offset
    11, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    21, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    21, //immediately_derived
  0, 0},
  {&cd_S2861C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2861C10,    ABISELECT(24,12), //bcp->offset
    14, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    22, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    23, //immediately_derived
  0, 0},
  {&cd_S2861C11,    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
    12, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S2861C2[];
extern void _ZN7S2861C2D1Ev();
extern void _ZN7S2861C2D0Ev();
extern void ABISELECT(_ZThn24_N7S2861C2D1Ev,_ZThn12_N7S2861C2D1Ev)();
extern void ABISELECT(_ZThn24_N7S2861C2D0Ev,_ZThn12_N7S2861C2D0Ev)();
extern void ABISELECT(_ZTv0_n64_N7S2861C2D1Ev,_ZTv0_n32_N7S2861C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S2861C2D1Ev,_ZThn24_N7S2861C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S2861C2D0Ev,_ZTv0_n32_N7S2861C2D0Ev)();
extern void ABISELECT(_ZThn48_N7S2861C2D0Ev,_ZThn24_N7S2861C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S2861C2D1Ev,_ZTv0_n28_N7S2861C2D1Ev)();
extern void ABISELECT(_ZThn120_N7S2861C2D1Ev,_ZThn76_N7S2861C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S2861C2D0Ev,_ZTv0_n28_N7S2861C2D0Ev)();
extern void ABISELECT(_ZThn120_N7S2861C2D0Ev,_ZThn76_N7S2861C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2861C2[] = {
  ABISELECT(112,72),
  ABISELECT(48,24),
  0,
  ABISELECT(120,76),
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C2[0]),
  (VTBL_ENTRY)&_ZN7S2861C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2861C2D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2861C2[0]),
  ABISELECT(-24,-12),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S2861C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S2861C2D1Ev,_ZThn12_N7S2861C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S2861C2D0Ev,_ZThn12_N7S2861C2D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S2861C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S2861C2D1Ev,_ZTv0_n32_N7S2861C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S2861C2D0Ev,_ZTv0_n32_N7S2861C2D0Ev),
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S2861C2[0]),
  ABISELECT(-112,-72),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI7S2861C2[0]),
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI7S2861C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2861C2D1Ev,_ZTv0_n28_N7S2861C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2861C2D0Ev,_ZTv0_n28_N7S2861C2D0Ev),
};
extern VTBL_ENTRY _ZTV7S2861C2[];
extern void _ZN8S2861C11D1Ev();
extern void _ZN8S2861C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2861C11__7S2861C2[] = {
  0,
  ABISELECT(120,76),
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S2861C11[0]),
  (VTBL_ENTRY)&_ZN8S2861C11D1Ev,
  (VTBL_ENTRY)&_ZN8S2861C11D0Ev,
};
extern void _ZN8S2861C12D1Ev();
extern void _ZN8S2861C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2861C128S2861C11__7S2861C2[] = {
  0,
  ABISELECT(120,76),
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S2861C12[0]),
  (VTBL_ENTRY)&_ZN8S2861C12D1Ev,
  (VTBL_ENTRY)&_ZN8S2861C12D0Ev,
};
extern void _ZN7S2861C6D1Ev();
extern void _ZN7S2861C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2861C68S2861C128S2861C11__A2__7S2861C2[] = {
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
  (VTBL_ENTRY)&_ZN7S2861C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2861C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__7S2861C68S2861C128S2861C11__A2__7S2861C2[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__8S2861C128S2861C11__7S2861C2[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S2861C12[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S2861C12D1Ev,_ZTv0_n28_N8S2861C12D1Ev)();
extern void ABISELECT(_ZThn120_N8S2861C12D1Ev,_ZThn76_N8S2861C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2861C12D0Ev,_ZTv0_n28_N8S2861C12D0Ev)();
extern void ABISELECT(_ZThn120_N8S2861C12D0Ev,_ZThn76_N8S2861C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2861C10__8S2861C128S2861C11__7S2861C2[] = {
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S2861C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2861C12D1Ev,_ZTv0_n28_N8S2861C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2861C12D0Ev,_ZTv0_n28_N8S2861C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2861C98S2861C11__A1__7S2861C2[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C9[0]),
};
extern void _ZN8S2861C10D1Ev();
extern void _ZN8S2861C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2861C108S2861C11__A1__7S2861C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S2861C10[0]),
  (VTBL_ENTRY)&_ZN8S2861C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2861C10D0Ev,
};
extern void _ZN7S2861C6D1Ev();
extern void _ZN7S2861C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2861C68S2861C108S2861C11__A3__7S2861C2[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
  (VTBL_ENTRY)&_ZN7S2861C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2861C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__7S2861C68S2861C108S2861C11__A3__7S2861C2[] = {
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__8S2861C108S2861C11__A1__7S2861C2[] = {
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S2861C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__8S2861C11__7S2861C2[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S2861C11[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S2861C11D1Ev,_ZTv0_n28_N8S2861C11D1Ev)();
extern void ABISELECT(_ZThn120_N8S2861C11D1Ev,_ZThn76_N8S2861C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2861C11D0Ev,_ZTv0_n28_N8S2861C11D0Ev)();
extern void ABISELECT(_ZThn120_N8S2861C11D0Ev,_ZThn76_N8S2861C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2861C10__8S2861C11__7S2861C2[] = {
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S2861C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2861C11D1Ev,_ZTv0_n28_N8S2861C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2861C11D0Ev,_ZTv0_n28_N8S2861C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2861C9__8S2861C11__7S2861C2[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2861C11[0]),
};
extern void ABISELECT(_ZThn24_N8S2861C11D1Ev,_ZThn12_N8S2861C11D1Ev)();
extern void ABISELECT(_ZThn24_N8S2861C11D0Ev,_ZThn12_N8S2861C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2861C10__A__8S2861C11__7S2861C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S2861C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S2861C11D1Ev,_ZThn12_N8S2861C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S2861C11D0Ev,_ZThn12_N8S2861C11D0Ev),
};
extern void _ZN7S2861C5D1Ev();
extern void _ZN7S2861C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2861C5__7S2861C2[] = {
  ABISELECT(-48,-24),
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C5[0]),
  (VTBL_ENTRY)&_ZN7S2861C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2861C5D0Ev,
};
extern void _ZN7S2861C6D1Ev();
extern void _ZN7S2861C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2861C67S2861C5__7S2861C2[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
  (VTBL_ENTRY)&_ZN7S2861C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2861C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__7S2861C67S2861C5__7S2861C2[] = {
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__7S2861C5__7S2861C2[] = {
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2861C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C9__7S2861C5__7S2861C2[] = {
  ABISELECT(-112,-72),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI7S2861C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__7S2861C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C9__7S2861C2[] = {
  ABISELECT(-112,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C9[0]),
};
extern void _ZN8S2861C10D1Ev();
extern void _ZN8S2861C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2861C10__7S2861C2[] = {
  ABISELECT(-120,-76),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S2861C10[0]),
  (VTBL_ENTRY)&_ZN8S2861C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2861C10D0Ev,
};
extern void _ZN7S2861C6D1Ev();
extern void _ZN7S2861C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2861C68S2861C10__A1__7S2861C2[] = {
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
  (VTBL_ENTRY)&_ZN7S2861C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2861C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__7S2861C68S2861C10__A1__7S2861C2[] = {
  0,
  0,
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__8S2861C10__7S2861C2[] = {
  0,
  0,
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI8S2861C10[0]),
};
static  VTT_ENTRY vtt_S2861C2[] = {
  {&(_ZTV7S2861C2[9]),  9,48},
  {&(_tg__ZTV8S2861C11__7S2861C2[7]),  7,9},
  {&(_tg__ZTV8S2861C128S2861C11__7S2861C2[7]),  7,9},
  {&(_tg__ZTV7S2861C68S2861C128S2861C11__A2__7S2861C2[5]),  5,7},
  {&(_tg__ZTV7S2861C8__7S2861C68S2861C128S2861C11__A2__7S2861C2[4]),  4,4},
  {&(_tg__ZTV7S2861C8__8S2861C128S2861C11__7S2861C2[4]),  4,4},
  {&(_tg__ZTV8S2861C10__8S2861C128S2861C11__7S2861C2[7]),  7,9},
  {&(_tg__ZTV7S2861C98S2861C11__A1__7S2861C2[3]),  3,3},
  {&(_tg__ZTV8S2861C108S2861C11__A1__7S2861C2[6]),  6,8},
  {&(_tg__ZTV7S2861C68S2861C108S2861C11__A3__7S2861C2[5]),  5,7},
  {&(_tg__ZTV7S2861C8__7S2861C68S2861C108S2861C11__A3__7S2861C2[4]),  4,4},
  {&(_tg__ZTV7S2861C8__8S2861C108S2861C11__A1__7S2861C2[4]),  4,4},
  {&(_tg__ZTV7S2861C8__8S2861C11__7S2861C2[4]),  4,4},
  {&(_tg__ZTV8S2861C10__8S2861C11__7S2861C2[7]),  7,9},
  {&(_tg__ZTV7S2861C9__8S2861C11__7S2861C2[3]),  3,3},
  {&(_tg__ZTV8S2861C10__A__8S2861C11__7S2861C2[6]),  6,8},
  {&(_ZTV7S2861C2[30]),  30,48},
  {&(_ZTV7S2861C2[36]),  36,48},
  {&(_ZTV7S2861C2[39]),  39,48},
  {&(_ZTV7S2861C2[46]),  46,48},
  {&(_ZTV7S2861C2[14]),  14,48},
  {&(_ZTV7S2861C2[20]),  20,48},
  {&(_tg__ZTV7S2861C5__7S2861C2[7]),  7,9},
  {&(_tg__ZTV7S2861C67S2861C5__7S2861C2[5]),  5,7},
  {&(_tg__ZTV7S2861C8__7S2861C67S2861C5__7S2861C2[4]),  4,4},
  {&(_tg__ZTV7S2861C8__7S2861C5__7S2861C2[4]),  4,4},
  {&(_tg__ZTV7S2861C9__7S2861C5__7S2861C2[3]),  3,3},
  {&(_tg__ZTV7S2861C8__7S2861C2[4]),  4,4},
  {&(_tg__ZTV7S2861C9__7S2861C2[3]),  3,3},
  {&(_tg__ZTV8S2861C10__7S2861C2[6]),  6,8},
  {&(_tg__ZTV7S2861C68S2861C10__A1__7S2861C2[5]),  5,7},
  {&(_tg__ZTV7S2861C8__7S2861C68S2861C10__A1__7S2861C2[4]),  4,4},
  {&(_tg__ZTV7S2861C8__8S2861C10__7S2861C2[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S2861C2[];
extern  VTBL_ENTRY _ZTV7S2861C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C2[];
static VTBL_ENTRY alt_thunk_names215[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2861C11D0Ev,_ZTv0_n28_N8S2861C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S2861C11D0Ev,_ZThn76_N8S2861C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2861C11D1Ev,_ZTv0_n28_N8S2861C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S2861C11D1Ev,_ZThn76_N8S2861C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2861C12D0Ev,_ZTv0_n28_N8S2861C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S2861C12D0Ev,_ZThn76_N8S2861C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2861C12D1Ev,_ZTv0_n28_N8S2861C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S2861C12D1Ev,_ZThn76_N8S2861C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S2861C2D0Ev,_ZTv0_n28_N7S2861C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S2861C2D0Ev,_ZThn76_N7S2861C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S2861C2D1Ev,_ZTv0_n28_N7S2861C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S2861C2D1Ev,_ZThn76_N7S2861C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S2861C2D0Ev,_ZTv0_n32_N7S2861C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S2861C2D0Ev,_ZThn24_N7S2861C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S2861C2D1Ev,_ZTv0_n32_N7S2861C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S2861C2D1Ev,_ZThn24_N7S2861C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2861C2 = {  "S2861C2", // class name
  bases_S2861C2, 24,
  &(vtc_S2861C2[0]), // expected_vtbl_contents
  &(vtt_S2861C2[0]), // expected_vtt_contents
  ABISELECT(136,84), // object size
  NSPAIRA(_ZTI7S2861C2),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S2861C2),48, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2861C2),33, //virtual table table var
  12, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names215,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2861C13  : S2861C8 {
  ~S2861C13(); // tgen
  S2861C13(); // tgen
};
//SIG(-1 S2861C13) C1{ BC2{ VBC3{ m} VBC4{ m} Fi[9]}}


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

static void Test_S2861C13()
{
  extern Class_Descriptor cd_S2861C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S2861C13, buf);
    S2861C13 *dp, &lv = *(dp=new (buf) S2861C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S2861C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2861C13)");
    check_base_class_offset(lv, (S2264C38*)(S2861C8*), 0, "S2861C13");
    check_base_class_offset(lv, (S2264C24*)(S2861C8*), 0, "S2861C13");
    check_base_class_offset(lv, (S2861C8*), 0, "S2861C13");
    test_class_info(&lv, &cd_S2861C13);
    dp->~S2861C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2861C13(Test_S2861C13, "S2861C13", ABISELECT(48,40));

#else // __cplusplus

extern void _ZN8S2861C13C1Ev();
extern void _ZN8S2861C13D1Ev();
Name_Map name_map_S2861C13[] = {
  NSPAIR(_ZN8S2861C13C1Ev),
  NSPAIR(_ZN8S2861C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2861C8;
extern VTBL_ENTRY _ZTI7S2861C8[];
extern  VTBL_ENTRY _ZTV7S2861C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C8[];
static Base_Class bases_S2861C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2861C8,    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
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S2861C13[];
static  VTBL_ENTRY vtc_S2861C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S2861C13[0]),
};
extern VTBL_ENTRY _ZTV8S2861C13[];
static  VTBL_ENTRY _tg__ZTV7S2861C8__8S2861C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C8[0]),
};
static  VTT_ENTRY vtt_S2861C13[] = {
  {&(_ZTV8S2861C13[4]),  4,4},
  {&(_tg__ZTV7S2861C8__8S2861C13[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S2861C13[];
extern  VTBL_ENTRY _ZTV8S2861C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2861C13[];
Class_Descriptor cd_S2861C13 = {  "S2861C13", // class name
  bases_S2861C13, 3,
  &(vtc_S2861C13[0]), // expected_vtbl_contents
  &(vtt_S2861C13[0]), // expected_vtt_contents
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI8S2861C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S2861C13),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S2861C13),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  S2861C1  : S2861C2 , virtual S2861C13 {
  virtual  ~S2861C1(); // _ZN7S2861C1D2Ev
  S2861C1(); // tgen
};
//SIG(1 S2861C1) C1{ BC2{ BC3{ m} VBC4{ m} VBC5{ BC6{ VBC3 VBC7{ m} VBC8{ VBC3 VBC7 Fi[9]} vd Fp} BC7 VBC9{ BC7 VBC4} vd} VBC10{ VBC7 BC3 BC6 VBC4 vd} BC11{ BC12{ BC7 VBC8 BC6 BC3 VBC10 vd} BC9 BC10 BC3 vd} vd} VBC13{ BC8} vd}


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

static void Test_S2861C1()
{
  extern Class_Descriptor cd_S2861C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(24,32)];
    init_test(&cd_S2861C1, buf);
    S2861C1 *dp, &lv = *(dp=new (buf) S2861C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(184,124), "sizeof(S2861C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2861C1)");
    /*is_ambiguous_... S2861C2::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S2861C2*), ABISELECT(41,21), "S2861C1");
    check_base_class_offset(lv, (S2264C28*)(S2861C2*), 0, "S2861C1");
    /*is_ambiguous_... S2861C1::S2861C9 */ AMB_check_base_class_offset(lv, (S2264C28*)(S2861C9*), 0, "S2861C1");
    /*is_ambiguous_... S2861C1::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S2861C10*), 0, "S2861C1");
    check_base_class_offset(lv, (S2264C28*)(S2861C9*)(S2861C11*)(S2861C2*), 0, "S2861C1");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C28*)(S2861C10*)(S2861C11*)(S2861C2*), 0, "S2861C1");
    check_base_class_offset(lv, (S2264C38*)(S2861C6*)(S2861C5*), ABISELECT(64,32), "S2861C1");
    /*is_ambiguous_... S2861C1::S2861C8 */ AMB_check_base_class_offset(lv, (S2264C38*)(S2861C8*), ABISELECT(64,32), "S2861C1");
    /*is_ambiguous_... S2861C1::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S2861C6*)(S2861C10*), ABISELECT(64,32), "S2861C1");
    /*is_ambiguous_... S2861C12::S2861C6 */ AMB_check_base_class_offset(lv, (S2264C38*)(S2861C6*)(S2861C12*)(S2861C11*)(S2861C2*), ABISELECT(64,32), "S2861C1");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S2861C6*)(S2861C10*)(S2861C11*)(S2861C2*), ABISELECT(64,32), "S2861C1");
    check_base_class_offset(lv, (S2264C38*)(S2861C8*)(S2861C13*), ABISELECT(64,32), "S2861C1");
    check_base_class_offset(lv, (S2264C24*)(S2861C6*)(S2861C5*), ABISELECT(64,32), "S2861C1");
    /*is_ambiguous_... S2861C1::S2861C8 */ AMB_check_base_class_offset(lv, (S2264C24*)(S2861C8*), ABISELECT(64,32), "S2861C1");
    /*is_ambiguous_... S2861C1::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S2861C10*), ABISELECT(64,32), "S2861C1");
    /*is_ambiguous_... S2861C1::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S2861C6*)(S2861C10*), ABISELECT(64,32), "S2861C1");
    /*is_ambiguous_... S2861C12::S2861C6 */ AMB_check_base_class_offset(lv, (S2264C24*)(S2861C6*)(S2861C12*)(S2861C11*)(S2861C2*), ABISELECT(64,32), "S2861C1");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S2861C10*)(S2861C11*)(S2861C2*), ABISELECT(64,32), "S2861C1");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C24*)(S2861C6*)(S2861C10*)(S2861C11*)(S2861C2*), ABISELECT(64,32), "S2861C1");
    check_base_class_offset(lv, (S2264C24*)(S2861C8*)(S2861C13*), ABISELECT(64,32), "S2861C1");
    check_base_class_offset(lv, (S2861C8*)(S2861C6*)(S2861C5*), ABISELECT(64,32), "S2861C1");
    /*is_ambiguous_... S2861C1::S2861C10 */ AMB_check_base_class_offset(lv, (S2861C8*)(S2861C6*)(S2861C10*), ABISELECT(64,32), "S2861C1");
    check_base_class_offset(lv, (S2861C8*)(S2861C12*)(S2861C11*)(S2861C2*), ABISELECT(64,32), "S2861C1");
    /*is_ambiguous_... S2861C12::S2861C6 */ AMB_check_base_class_offset(lv, (S2861C8*)(S2861C6*)(S2861C12*)(S2861C11*)(S2861C2*), ABISELECT(64,32), "S2861C1");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2861C8*)(S2861C6*)(S2861C10*)(S2861C11*)(S2861C2*), ABISELECT(64,32), "S2861C1");
    check_base_class_offset(lv, (S2861C6*)(S2861C5*), ABISELECT(48,24), "S2861C1");
    /*is_ambiguous_... S2861C5::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S2861C5*), ABISELECT(48,24), "S2861C1");
    /*is_ambiguous_... S2861C1::S2861C9 */ AMB_check_base_class_offset(lv, (S2264C24*)(S2861C9*), ABISELECT(112,72), "S2861C1");
    check_base_class_offset(lv, (S2861C9*)(S2861C5*), ABISELECT(112,72), "S2861C1");
    check_base_class_offset(lv, (S2861C5*)(S2861C2*), ABISELECT(48,24), "S2861C1");
    /*is_ambiguous_... S2861C1::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S2861C10*), ABISELECT(120,76), "S2861C1");
    /*is_ambiguous_... S2861C1::S2861C10 */ AMB_check_base_class_offset(lv, (S2861C6*)(S2861C10*), ABISELECT(120,76), "S2861C1");
    /*is_ambiguous_... S2861C2::S2861C10 */ AMB_check_base_class_offset(lv, (S2861C10*)(S2861C2*), ABISELECT(120,76), "S2861C1");
    check_base_class_offset(lv, (S2861C10*)(S2861C12*)(S2861C11*)(S2861C2*), ABISELECT(120,76), "S2861C1");
    /*is_ambiguous_... S2861C12::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S2861C12*)(S2861C11*)(S2861C2*), 0, "S2861C1");
    /*is_ambiguous_... S2861C12::S2861C6 */ AMB_check_base_class_offset(lv, (S2861C6*)(S2861C12*)(S2861C11*)(S2861C2*), 0, "S2861C1");
    /*is_ambiguous_... S2861C12::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S2861C12*)(S2861C11*)(S2861C2*), 0, "S2861C1");
    check_base_class_offset(lv, (S2861C12*)(S2861C11*)(S2861C2*), 0, "S2861C1");
    check_base_class_offset(lv, (S2264C24*)(S2861C9*)(S2861C11*)(S2861C2*), ABISELECT(16,8), "S2861C1");
    check_base_class_offset(lv, (S2861C9*)(S2861C11*)(S2861C2*), ABISELECT(16,8), "S2861C1");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2264C38*)(S2861C10*)(S2861C11*)(S2861C2*), ABISELECT(24,12), "S2861C1");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2861C6*)(S2861C10*)(S2861C11*)(S2861C2*), ABISELECT(24,12), "S2861C1");
    /*is_ambiguous_... S2861C11::S2861C10 */ AMB_check_base_class_offset(lv, (S2861C10*)(S2861C11*)(S2861C2*), ABISELECT(24,12), "S2861C1");
    /*is_ambiguous_... S2861C11::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*)(S2861C11*)(S2861C2*), ABISELECT(40,20), "S2861C1");
    check_base_class_offset(lv, (S2861C11*)(S2861C2*), 0, "S2861C1");
    check_base_class_offset(lv, (S2861C2*), 0, "S2861C1");
    check_base_class_offset(lv, (S2861C8*)(S2861C13*), ABISELECT(136,84), "S2861C1");
    check_base_class_offset(lv, (S2861C13*), ABISELECT(136,84), "S2861C1");
    test_class_info(&lv, &cd_S2861C1);
    dp->~S2861C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2861C1(Test_S2861C1, "S2861C1", ABISELECT(184,124));

#else // __cplusplus

extern void _ZN7S2861C1C1Ev();
extern void _ZN7S2861C1D2Ev();
Name_Map name_map_S2861C1[] = {
  NSPAIR(_ZN7S2861C1C1Ev),
  NSPAIR(_ZN7S2861C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2861C8;
extern VTBL_ENTRY _ZTI7S2861C8[];
extern  VTBL_ENTRY _ZTV7S2861C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C8[];
extern Class_Descriptor cd_S2861C6;
extern VTBL_ENTRY _ZTI7S2861C6[];
extern  VTBL_ENTRY _ZTV7S2861C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C6[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2861C9;
extern VTBL_ENTRY _ZTI7S2861C9[];
extern  VTBL_ENTRY _ZTV7S2861C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C9[];
extern Class_Descriptor cd_S2861C5;
extern VTBL_ENTRY _ZTI7S2861C5[];
extern  VTBL_ENTRY _ZTV7S2861C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C5[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2861C6;
extern VTBL_ENTRY _ZTI7S2861C6[];
extern  VTBL_ENTRY _ZTV7S2861C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C6[];
extern Class_Descriptor cd_S2861C10;
extern VTBL_ENTRY _ZTI8S2861C10[];
extern  VTBL_ENTRY _ZTV8S2861C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2861C10[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2861C6;
extern VTBL_ENTRY _ZTI7S2861C6[];
extern  VTBL_ENTRY _ZTV7S2861C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C6[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2861C12;
extern VTBL_ENTRY _ZTI8S2861C12[];
extern  VTBL_ENTRY _ZTV8S2861C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2861C12[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2861C9;
extern VTBL_ENTRY _ZTI7S2861C9[];
extern  VTBL_ENTRY _ZTV7S2861C9[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C9[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2861C6;
extern VTBL_ENTRY _ZTI7S2861C6[];
extern  VTBL_ENTRY _ZTV7S2861C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C6[];
extern Class_Descriptor cd_S2861C10;
extern VTBL_ENTRY _ZTI8S2861C10[];
extern  VTBL_ENTRY _ZTV8S2861C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2861C10[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2861C11;
extern VTBL_ENTRY _ZTI8S2861C11[];
extern  VTBL_ENTRY _ZTV8S2861C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2861C11[];
extern Class_Descriptor cd_S2861C2;
extern VTBL_ENTRY _ZTI7S2861C2[];
extern  VTBL_ENTRY _ZTV7S2861C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C2[];
extern Class_Descriptor cd_S2861C8;
extern VTBL_ENTRY _ZTI7S2861C8[];
extern  VTBL_ENTRY _ZTV7S2861C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C8[];
extern Class_Descriptor cd_S2861C13;
extern VTBL_ENTRY _ZTI8S2861C13[];
extern  VTBL_ENTRY _ZTV8S2861C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S2861C13[];
static Base_Class bases_S2861C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    ABISELECT(41,21), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C38,    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, 1},
  {&cd_S2264C24,    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, 1},
  {&cd_S2861C8,    ABISELECT(64,32), //bcp->offset
    33, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    25, //bcp->index_in_construction_vtbl_array
    36, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S2861C6,    ABISELECT(48,24), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C24,    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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C24,    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
    8, //immediately_derived
  0, 0},
  {&cd_S2861C9,    ABISELECT(112,72), //bcp->offset
    37, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    26, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    9, //immediately_derived
  0, 1},
  {&cd_S2861C5,    ABISELECT(48,24), //bcp->offset
    23, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    24, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S2264C38,    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
    12, //immediately_derived
  0, 0},
  {&cd_S2861C6,    ABISELECT(120,76), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    39, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    12, //immediately_derived
  0, 0},
  {&cd_S2861C10,    ABISELECT(120,76), //bcp->offset
    40, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    27, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    16, //immediately_derived
  0, 1},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2861C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    16, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2861C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    7, //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
    23, //immediately_derived
  0, 0},
  {&cd_S2264C24,    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
    18, //immediately_derived
  0, 0},
  {&cd_S2861C9,    ABISELECT(16,8), //bcp->offset
    12, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    28, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    21, //immediately_derived
  0, 0},
  {&cd_S2861C6,    ABISELECT(24,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S2861C10,    ABISELECT(24,12), //bcp->offset
    15, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    29, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    13, //init_seq
    23, //immediately_derived
  0, 0},
  {&cd_S2264C38,    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
    23, //immediately_derived
  0, 0},
  {&cd_S2861C11,    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
    14, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S2861C2,    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
    15, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2861C8,    ABISELECT(136,84), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    43, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    26, //immediately_derived
  0, 0},
  {&cd_S2861C13,    ABISELECT(136,84), //bcp->offset
    49, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    30, //bcp->index_in_construction_vtbl_array
    42, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S2861C1[];
extern void _ZN7S2861C1D1Ev();
extern void _ZN7S2861C1D0Ev();
extern void ABISELECT(_ZThn24_N7S2861C1D1Ev,_ZThn12_N7S2861C1D1Ev)();
extern void ABISELECT(_ZThn24_N7S2861C1D0Ev,_ZThn12_N7S2861C1D0Ev)();
extern void ABISELECT(_ZTv0_n64_N7S2861C1D1Ev,_ZTv0_n32_N7S2861C1D1Ev)();
extern void ABISELECT(_ZThn48_N7S2861C1D1Ev,_ZThn24_N7S2861C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S2861C1D0Ev,_ZTv0_n32_N7S2861C1D0Ev)();
extern void ABISELECT(_ZThn48_N7S2861C1D0Ev,_ZThn24_N7S2861C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S2861C1D1Ev,_ZTv0_n28_N7S2861C1D1Ev)();
extern void ABISELECT(_ZThn120_N7S2861C1D1Ev,_ZThn76_N7S2861C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S2861C1D0Ev,_ZTv0_n28_N7S2861C1D0Ev)();
extern void ABISELECT(_ZThn120_N7S2861C1D0Ev,_ZThn76_N7S2861C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S2861C1[] = {
  ABISELECT(136,84),
  ABISELECT(112,72),
  ABISELECT(48,24),
  0,
  ABISELECT(120,76),
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C1[0]),
  (VTBL_ENTRY)&_ZN7S2861C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2861C1D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2861C1[0]),
  ABISELECT(-24,-12),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S2861C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S2861C1D1Ev,_ZThn12_N7S2861C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S2861C1D0Ev,_ZThn12_N7S2861C1D0Ev),
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S2861C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S2861C1D1Ev,_ZTv0_n32_N7S2861C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S2861C1D0Ev,_ZTv0_n32_N7S2861C1D0Ev),
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S2861C1[0]),
  ABISELECT(-112,-72),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI7S2861C1[0]),
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI7S2861C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2861C1D1Ev,_ZTv0_n28_N7S2861C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2861C1D0Ev,_ZTv0_n28_N7S2861C1D0Ev),
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  ABISELECT(-136,-84),
  (VTBL_ENTRY)&(_ZTI7S2861C1[0]),
};
extern VTBL_ENTRY _ZTV7S2861C1[];
extern void _ZN7S2861C2D1Ev();
extern void _ZN7S2861C2D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2861C2__7S2861C1[] = {
  ABISELECT(112,72),
  ABISELECT(48,24),
  0,
  ABISELECT(120,76),
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C2[0]),
  (VTBL_ENTRY)&_ZN7S2861C2D1Ev,
  (VTBL_ENTRY)&_ZN7S2861C2D0Ev,
};
extern void _ZN8S2861C11D1Ev();
extern void _ZN8S2861C11D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2861C117S2861C2__7S2861C1[] = {
  0,
  ABISELECT(120,76),
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S2861C11[0]),
  (VTBL_ENTRY)&_ZN8S2861C11D1Ev,
  (VTBL_ENTRY)&_ZN8S2861C11D0Ev,
};
extern void _ZN8S2861C12D1Ev();
extern void _ZN8S2861C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2861C128S2861C117S2861C2__7S2861C1[] = {
  0,
  ABISELECT(120,76),
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI8S2861C12[0]),
  (VTBL_ENTRY)&_ZN8S2861C12D1Ev,
  (VTBL_ENTRY)&_ZN8S2861C12D0Ev,
};
extern void _ZN7S2861C6D1Ev();
extern void _ZN7S2861C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2861C68S2861C128S2861C117S2861C2__A2__7S2861C1[] = {
  ABISELECT(64,32),
  ABISELECT(64,32),
  ABISELECT(64,32),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
  (VTBL_ENTRY)&_ZN7S2861C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2861C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__7S2861C68S2861C128S2861C117S2861C2__A2__7S2861C1[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__8S2861C128S2861C117S2861C2__7S2861C1[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S2861C12[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S2861C12D1Ev,_ZTv0_n28_N8S2861C12D1Ev)();
extern void ABISELECT(_ZThn120_N8S2861C12D1Ev,_ZThn76_N8S2861C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2861C12D0Ev,_ZTv0_n28_N8S2861C12D0Ev)();
extern void ABISELECT(_ZThn120_N8S2861C12D0Ev,_ZThn76_N8S2861C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2861C10__8S2861C128S2861C117S2861C2__7S2861C1[] = {
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S2861C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2861C12D1Ev,_ZTv0_n28_N8S2861C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2861C12D0Ev,_ZTv0_n28_N8S2861C12D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2861C98S2861C117S2861C2__A1__7S2861C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C9[0]),
};
extern void _ZN8S2861C10D1Ev();
extern void _ZN8S2861C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2861C108S2861C117S2861C2__A1__7S2861C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S2861C10[0]),
  (VTBL_ENTRY)&_ZN8S2861C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2861C10D0Ev,
};
extern void _ZN7S2861C6D1Ev();
extern void _ZN7S2861C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2861C68S2861C108S2861C117S2861C2__A3__7S2861C1[] = {
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
  (VTBL_ENTRY)&_ZN7S2861C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2861C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__7S2861C68S2861C108S2861C117S2861C2__A3__7S2861C1[] = {
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__8S2861C108S2861C117S2861C2__A1__7S2861C1[] = {
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S2861C10[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__8S2861C117S2861C2__7S2861C1[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI8S2861C11[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S2861C11D1Ev,_ZTv0_n28_N8S2861C11D1Ev)();
extern void ABISELECT(_ZThn120_N8S2861C11D1Ev,_ZThn76_N8S2861C11D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S2861C11D0Ev,_ZTv0_n28_N8S2861C11D0Ev)();
extern void ABISELECT(_ZThn120_N8S2861C11D0Ev,_ZThn76_N8S2861C11D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2861C10__8S2861C117S2861C2__7S2861C1[] = {
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI8S2861C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2861C11D1Ev,_ZTv0_n28_N8S2861C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S2861C11D0Ev,_ZTv0_n28_N8S2861C11D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2861C9__8S2861C117S2861C2__7S2861C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S2861C11[0]),
};
extern void ABISELECT(_ZThn24_N8S2861C11D1Ev,_ZThn12_N8S2861C11D1Ev)();
extern void ABISELECT(_ZThn24_N8S2861C11D0Ev,_ZThn12_N8S2861C11D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2861C10__A__8S2861C117S2861C2__7S2861C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S2861C11[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S2861C11D1Ev,_ZThn12_N8S2861C11D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N8S2861C11D0Ev,_ZThn12_N8S2861C11D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N7S2861C2D1Ev,_ZTv0_n32_N7S2861C2D1Ev)();
extern void ABISELECT(_ZThn48_N7S2861C2D1Ev,_ZThn24_N7S2861C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S2861C2D0Ev,_ZTv0_n32_N7S2861C2D0Ev)();
extern void ABISELECT(_ZThn48_N7S2861C2D0Ev,_ZThn24_N7S2861C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S2861C5__7S2861C2__7S2861C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(-48,-24),
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(-48,-24),
  (VTBL_ENTRY)&(_ZTI7S2861C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S2861C2D1Ev,_ZTv0_n32_N7S2861C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S2861C2D0Ev,_ZTv0_n32_N7S2861C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__7S2861C2__7S2861C1[] = {
  0,
  0,
  ABISELECT(-64,-32),
  (VTBL_ENTRY)&(_ZTI7S2861C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C9__7S2861C2__7S2861C1[] = {
  ABISELECT(-112,-72),
  ABISELECT(-112,-72),
  (VTBL_ENTRY)&(_ZTI7S2861C2[0]),
};
extern void ABISELECT(_ZTv0_n56_N7S2861C2D1Ev,_ZTv0_n28_N7S2861C2D1Ev)();
extern void ABISELECT(_ZThn120_N7S2861C2D1Ev,_ZThn76_N7S2861C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S2861C2D0Ev,_ZTv0_n28_N7S2861C2D0Ev)();
extern void ABISELECT(_ZThn120_N7S2861C2D0Ev,_ZThn76_N7S2861C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S2861C10__7S2861C2__7S2861C1[] = {
  ABISELECT(-120,-76),
  ABISELECT(-120,-76),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-120,-76),
  (VTBL_ENTRY)&(_ZTI7S2861C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2861C2D1Ev,_ZTv0_n28_N7S2861C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S2861C2D0Ev,_ZTv0_n28_N7S2861C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S2861C98S2861C11__A1__7S2861C2__7S2861C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2861C2[0]),
};
extern void ABISELECT(_ZThn24_N7S2861C2D1Ev,_ZThn12_N7S2861C2D1Ev)();
extern void ABISELECT(_ZThn24_N7S2861C2D0Ev,_ZThn12_N7S2861C2D0Ev)();
static  VTBL_ENTRY _tg__ZTV8S2861C108S2861C11__A1__7S2861C2__7S2861C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(40,20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI7S2861C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S2861C2D1Ev,_ZThn12_N7S2861C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZThn24_N7S2861C2D0Ev,_ZThn12_N7S2861C2D0Ev),
};
extern void _ZN7S2861C5D1Ev();
extern void _ZN7S2861C5D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2861C5__7S2861C1[] = {
  ABISELECT(-48,-24),
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C5[0]),
  (VTBL_ENTRY)&_ZN7S2861C5D1Ev,
  (VTBL_ENTRY)&_ZN7S2861C5D0Ev,
};
extern void _ZN7S2861C6D1Ev();
extern void _ZN7S2861C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2861C67S2861C5__7S2861C1[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
  (VTBL_ENTRY)&_ZN7S2861C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2861C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__7S2861C67S2861C5__7S2861C1[] = {
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__7S2861C5__7S2861C1[] = {
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S2861C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C9__7S2861C5__7S2861C1[] = {
  ABISELECT(-112,-72),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI7S2861C5[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__7S2861C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C9__7S2861C1[] = {
  ABISELECT(-112,-72),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C9[0]),
};
extern void _ZN8S2861C10D1Ev();
extern void _ZN8S2861C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S2861C10__7S2861C1[] = {
  ABISELECT(-120,-76),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI8S2861C10[0]),
  (VTBL_ENTRY)&_ZN8S2861C10D1Ev,
  (VTBL_ENTRY)&_ZN8S2861C10D0Ev,
};
extern void _ZN7S2861C6D1Ev();
extern void _ZN7S2861C6D0Ev();
static  VTBL_ENTRY _tg__ZTV7S2861C68S2861C10__A1__7S2861C1[] = {
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  ABISELECT(-56,-44),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
  (VTBL_ENTRY)&_ZN7S2861C6D1Ev,
  (VTBL_ENTRY)&_ZN7S2861C6D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__7S2861C68S2861C10__A1__7S2861C1[] = {
  0,
  0,
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI7S2861C6[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C8__8S2861C10__7S2861C1[] = {
  0,
  0,
  ABISELECT(56,44),
  (VTBL_ENTRY)&(_ZTI8S2861C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S2861C13__7S2861C1[] = {
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  0,
  (VTBL_ENTRY)&(_ZTI8S2861C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S2861C88S2861C13__A1__7S2861C1[] = {
  ABISELECT(-72,-52),
  ABISELECT(-72,-52),
  0,
  (VTBL_ENTRY)&(_ZTI7S2861C8[0]),
};
static  VTT_ENTRY vtt_S2861C1[] = {
  {&(_ZTV7S2861C1[10]),  10,53},
  {&(_tg__ZTV7S2861C2__7S2861C1[9]),  9,11},
  {&(_tg__ZTV8S2861C117S2861C2__7S2861C1[7]),  7,9},
  {&(_tg__ZTV8S2861C128S2861C117S2861C2__7S2861C1[7]),  7,9},
  {&(_tg__ZTV7S2861C68S2861C128S2861C117S2861C2__A2__7S2861C1[5]),  5,7},
  {&(_tg__ZTV7S2861C8__7S2861C68S2861C128S2861C117S2861C2__A2__7S2861C1[4]),  4,4},
  {&(_tg__ZTV7S2861C8__8S2861C128S2861C117S2861C2__7S2861C1[4]),  4,4},
  {&(_tg__ZTV8S2861C10__8S2861C128S2861C117S2861C2__7S2861C1[7]),  7,9},
  {&(_tg__ZTV7S2861C98S2861C117S2861C2__A1__7S2861C1[3]),  3,3},
  {&(_tg__ZTV8S2861C108S2861C117S2861C2__A1__7S2861C1[6]),  6,8},
  {&(_tg__ZTV7S2861C68S2861C108S2861C117S2861C2__A3__7S2861C1[5]),  5,7},
  {&(_tg__ZTV7S2861C8__7S2861C68S2861C108S2861C117S2861C2__A3__7S2861C1[4]),  4,4},
  {&(_tg__ZTV7S2861C8__8S2861C108S2861C117S2861C2__A1__7S2861C1[4]),  4,4},
  {&(_tg__ZTV7S2861C8__8S2861C117S2861C2__7S2861C1[4]),  4,4},
  {&(_tg__ZTV8S2861C10__8S2861C117S2861C2__7S2861C1[7]),  7,9},
  {&(_tg__ZTV7S2861C9__8S2861C117S2861C2__7S2861C1[3]),  3,3},
  {&(_tg__ZTV8S2861C10__A__8S2861C117S2861C2__7S2861C1[6]),  6,8},
  {&(_tg__ZTV7S2861C5__7S2861C2__7S2861C1[8]),  8,10},
  {&(_tg__ZTV7S2861C8__7S2861C2__7S2861C1[4]),  4,4},
  {&(_tg__ZTV7S2861C9__7S2861C2__7S2861C1[3]),  3,3},
  {&(_tg__ZTV8S2861C10__7S2861C2__7S2861C1[7]),  7,9},
  {&(_tg__ZTV7S2861C98S2861C11__A1__7S2861C2__7S2861C1[3]),  3,3},
  {&(_tg__ZTV8S2861C108S2861C11__A1__7S2861C2__7S2861C1[6]),  6,8},
  {&(_ZTV7S2861C1[31]),  31,53},
  {&(_ZTV7S2861C1[37]),  37,53},
  {&(_ZTV7S2861C1[40]),  40,53},
  {&(_ZTV7S2861C1[47]),  47,53},
  {&(_ZTV7S2861C1[15]),  15,53},
  {&(_ZTV7S2861C1[21]),  21,53},
  {&(_ZTV7S2861C1[53]),  53,53},
  {&(_tg__ZTV7S2861C5__7S2861C1[7]),  7,9},
  {&(_tg__ZTV7S2861C67S2861C5__7S2861C1[5]),  5,7},
  {&(_tg__ZTV7S2861C8__7S2861C67S2861C5__7S2861C1[4]),  4,4},
  {&(_tg__ZTV7S2861C8__7S2861C5__7S2861C1[4]),  4,4},
  {&(_tg__ZTV7S2861C9__7S2861C5__7S2861C1[3]),  3,3},
  {&(_tg__ZTV7S2861C8__7S2861C1[4]),  4,4},
  {&(_tg__ZTV7S2861C9__7S2861C1[3]),  3,3},
  {&(_tg__ZTV8S2861C10__7S2861C1[6]),  6,8},
  {&(_tg__ZTV7S2861C68S2861C10__A1__7S2861C1[5]),  5,7},
  {&(_tg__ZTV7S2861C8__7S2861C68S2861C10__A1__7S2861C1[4]),  4,4},
  {&(_tg__ZTV7S2861C8__8S2861C10__7S2861C1[4]),  4,4},
  {&(_tg__ZTV8S2861C13__7S2861C1[4]),  4,4},
  {&(_tg__ZTV7S2861C88S2861C13__A1__7S2861C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S2861C1[];
extern  VTBL_ENTRY _ZTV7S2861C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S2861C1[];
static VTBL_ENTRY alt_thunk_names216[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S2861C2D0Ev,_ZTv0_n28_N7S2861C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S2861C2D0Ev,_ZThn76_N7S2861C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S2861C2D1Ev,_ZTv0_n28_N7S2861C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S2861C2D1Ev,_ZThn76_N7S2861C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S2861C2D0Ev,_ZTv0_n32_N7S2861C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S2861C2D0Ev,_ZThn24_N7S2861C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S2861C2D1Ev,_ZTv0_n32_N7S2861C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S2861C2D1Ev,_ZThn24_N7S2861C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2861C11D0Ev,_ZTv0_n28_N8S2861C11D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S2861C11D0Ev,_ZThn76_N8S2861C11D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2861C11D1Ev,_ZTv0_n28_N8S2861C11D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S2861C11D1Ev,_ZThn76_N8S2861C11D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2861C12D0Ev,_ZTv0_n28_N8S2861C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S2861C12D0Ev,_ZThn76_N8S2861C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S2861C12D1Ev,_ZTv0_n28_N8S2861C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S2861C12D1Ev,_ZThn76_N8S2861C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S2861C1D0Ev,_ZTv0_n28_N7S2861C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S2861C1D0Ev,_ZThn76_N7S2861C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S2861C1D1Ev,_ZTv0_n28_N7S2861C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N7S2861C1D1Ev,_ZThn76_N7S2861C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S2861C1D0Ev,_ZTv0_n32_N7S2861C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S2861C1D0Ev,_ZThn24_N7S2861C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S2861C1D1Ev,_ZTv0_n32_N7S2861C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N7S2861C1D1Ev,_ZThn24_N7S2861C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S2861C1 = {  "S2861C1", // class name
  bases_S2861C1, 27,
  &(vtc_S2861C1[0]), // expected_vtbl_contents
  &(vtt_S2861C1[0]), // expected_vtt_contents
  ABISELECT(184,124), // object size
  NSPAIRA(_ZTI7S2861C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S2861C1),53, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S2861C1),43, //virtual table table var
  15, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names216,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7565C3  {
  short s7565c3f0[6];
  __tsi64 s7565c3f1[8];
  int s7565c3f2;
  virtual  ~S7565C3(); // _ZN7S7565C3D1Ev
  virtual void  v2(); // _ZN7S7565C32v2Ev
  S7565C3(); // tgen
};
//SIG(-1 S7565C3) C1{ vd v1 Fs[6] FL[8] Fi}


 S7565C3 ::~S7565C3(){ note_dtor("S7565C3", this);}
void  S7565C3 ::v2(){vfunc_called(this, "_ZN7S7565C32v2Ev");}
S7565C3 ::S7565C3(){ note_ctor("S7565C3", this);} // tgen

static void Test_S7565C3()
{
  extern Class_Descriptor cd_S7565C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,22)];
    init_test(&cd_S7565C3, buf);
    S7565C3 *dp, &lv = *(dp=new (buf) S7565C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,84), "sizeof(S7565C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7565C3)");
    check_field_offset(lv, s7565c3f0, ABISELECT(8,4), "S7565C3.s7565c3f0");
    check_field_offset(lv, s7565c3f1, ABISELECT(24,16), "S7565C3.s7565c3f1");
    check_field_offset(lv, s7565c3f2, ABISELECT(88,80), "S7565C3.s7565c3f2");
    test_class_info(&lv, &cd_S7565C3);
    dp->~S7565C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7565C3(Test_S7565C3, "S7565C3", ABISELECT(96,84));

#else // __cplusplus

extern void _ZN7S7565C3C1Ev();
extern void _ZN7S7565C3D1Ev();
Name_Map name_map_S7565C3[] = {
  NSPAIR(_ZN7S7565C3C1Ev),
  NSPAIR(_ZN7S7565C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7565C3[];
extern void _ZN7S7565C3D1Ev();
extern void _ZN7S7565C3D0Ev();
extern void _ZN7S7565C32v2Ev();
static  VTBL_ENTRY vtc_S7565C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7565C3[0]),
  (VTBL_ENTRY)&_ZN7S7565C3D1Ev,
  (VTBL_ENTRY)&_ZN7S7565C3D0Ev,
  (VTBL_ENTRY)&_ZN7S7565C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S7565C3[];
extern  VTBL_ENTRY _ZTV7S7565C3[];
Class_Descriptor cd_S7565C3 = {  "S7565C3", // class name
  0,0,//no base classes
  &(vtc_S7565C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,84), // object size
  NSPAIRA(_ZTI7S7565C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7565C3),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  S7565C4  : virtual S7565C3 {
  __tsi64 s7565c4f0;
  void *s7565c4f1;
  __tsi64 s7565c4f2:54;
  ~S7565C4(); // tgen
  S7565C4(); // tgen
};
//SIG(-1 S7565C4) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} FL Fp FL:54}


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

static void Test_S7565C4()
{
  extern Class_Descriptor cd_S7565C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(17,28)];
    init_test(&cd_S7565C4, buf);
    S7565C4 *dp, &lv = *(dp=new (buf) S7565C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,108), "sizeof(S7565C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7565C4)");
    check_base_class_offset(lv, (S7565C3*), ABISELECT(32,24), "S7565C4");
    check_field_offset(lv, s7565c4f0, ABISELECT(8,4), "S7565C4.s7565c4f0");
    check_field_offset(lv, s7565c4f1, ABISELECT(16,12), "S7565C4.s7565c4f1");
    set_bf_and_test(lv, s7565c4f2, ABISELECT(24,16), 0, 54, 1, "S7565C4");
    set_bf_and_test(lv, s7565c4f2, ABISELECT(24,16), 0, 54, hide_sll(1LL<<53), "S7565C4");
    test_class_info(&lv, &cd_S7565C4);
    dp->~S7565C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7565C4(Test_S7565C4, "S7565C4", ABISELECT(128,108));

#else // __cplusplus

extern void _ZN7S7565C4C1Ev();
extern void _ZN7S7565C4D1Ev();
Name_Map name_map_S7565C4[] = {
  NSPAIR(_ZN7S7565C4C1Ev),
  NSPAIR(_ZN7S7565C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7565C3;
extern VTBL_ENTRY _ZTI7S7565C3[];
extern  VTBL_ENTRY _ZTV7S7565C3[];
static Base_Class bases_S7565C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7565C3,    ABISELECT(32,24), //bcp->offset
    5, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S7565C4[];
extern void _ZN7S7565C4D1Ev();
extern void _ZN7S7565C4D0Ev();
extern void ABISELECT(_ZTv0_n24_N7S7565C4D1Ev,_ZTv0_n12_N7S7565C4D1Ev)();
extern void ABISELECT(_ZThn32_N7S7565C4D1Ev,_ZThn24_N7S7565C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7565C4D0Ev,_ZTv0_n12_N7S7565C4D0Ev)();
extern void ABISELECT(_ZThn32_N7S7565C4D0Ev,_ZThn24_N7S7565C4D0Ev)() __attribute__((weak));
extern void _ZN7S7565C32v2Ev();
static  VTBL_ENTRY vtc_S7565C4[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S7565C4[0]),
  (VTBL_ENTRY)&_ZN7S7565C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7565C4D0Ev,
  0,
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S7565C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7565C4D1Ev,_ZTv0_n12_N7S7565C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7565C4D0Ev,_ZTv0_n12_N7S7565C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7565C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7565C4[];
static  VTT_ENTRY vtt_S7565C4[] = {
  {&(_ZTV7S7565C4[3]),  3,12},
  {&(_ZTV7S7565C4[9]),  9,12},
};
extern VTBL_ENTRY _ZTI7S7565C4[];
extern  VTBL_ENTRY _ZTV7S7565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7565C4[];
static VTBL_ENTRY alt_thunk_names217[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7565C4D0Ev,_ZTv0_n12_N7S7565C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7565C4D0Ev,_ZThn24_N7S7565C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7565C4D1Ev,_ZTv0_n12_N7S7565C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N7S7565C4D1Ev,_ZThn24_N7S7565C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7565C4 = {  "S7565C4", // class name
  bases_S7565C4, 1,
  &(vtc_S7565C4[0]), // expected_vtbl_contents
  &(vtt_S7565C4[0]), // expected_vtt_contents
  ABISELECT(128,108), // object size
  NSPAIRA(_ZTI7S7565C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7565C4),12, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7565C4),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names217,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7565C2  : virtual S7565C3 , S7565C4 {
  char  :0;
  void *s7565c2f1[8];
  char s7565c2f2;
  virtual void  v3(); // _ZN7S7565C22v3Ev
  virtual void  v4(); // _ZN7S7565C22v4Ev
  ~S7565C2(); // tgen
  S7565C2(); // tgen
};
//SIG(-1 S7565C2) C1{ VBC2{ vd v3 Fs[6] FL[8] Fi} BC3{ VBC2 FL Fp FL:54} v1 v2 Fc:0 Fp[8] Fc}


void  S7565C2 ::v3(){vfunc_called(this, "_ZN7S7565C22v3Ev");}
void  S7565C2 ::v4(){vfunc_called(this, "_ZN7S7565C22v4Ev");}
S7565C2 ::~S7565C2(){ note_dtor("S7565C2", this);} // tgen
S7565C2 ::S7565C2(){ note_ctor("S7565C2", this);} // tgen

static void Test_S7565C2()
{
  extern Class_Descriptor cd_S7565C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(26,37)];
    init_test(&cd_S7565C2, buf);
    S7565C2 *dp, &lv = *(dp=new (buf) S7565C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(200,144), "sizeof(S7565C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7565C2)");
    check_base_class_offset(lv, (S7565C3*), ABISELECT(104,60), "S7565C2");
    check_base_class_offset(lv, (S7565C3*)(S7565C4*), ABISELECT(104,60), "S7565C2");
    check_base_class_offset(lv, (S7565C4*), 0, "S7565C2");
    check_field_offset(lv, s7565c2f1, ABISELECT(32,24), "S7565C2.s7565c2f1");
    check_field_offset(lv, s7565c2f2, ABISELECT(96,56), "S7565C2.s7565c2f2");
    test_class_info(&lv, &cd_S7565C2);
    dp->~S7565C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7565C2(Test_S7565C2, "S7565C2", ABISELECT(200,144));

#else // __cplusplus

extern void _ZN7S7565C2C1Ev();
extern void _ZN7S7565C2D1Ev();
Name_Map name_map_S7565C2[] = {
  NSPAIR(_ZN7S7565C2C1Ev),
  NSPAIR(_ZN7S7565C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7565C3;
extern VTBL_ENTRY _ZTI7S7565C3[];
extern  VTBL_ENTRY _ZTV7S7565C3[];
extern Class_Descriptor cd_S7565C4;
extern VTBL_ENTRY _ZTI7S7565C4[];
extern  VTBL_ENTRY _ZTV7S7565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7565C4[];
static Base_Class bases_S7565C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7565C3,    ABISELECT(104,60), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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_S7565C4,    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 _ZTI7S7565C2[];
extern void _ZN7S7565C2D1Ev();
extern void _ZN7S7565C2D0Ev();
extern void _ZN7S7565C22v3Ev();
extern void _ZN7S7565C22v4Ev();
extern void ABISELECT(_ZTv0_n24_N7S7565C2D1Ev,_ZTv0_n12_N7S7565C2D1Ev)();
extern void ABISELECT(_ZThn104_N7S7565C2D1Ev,_ZThn60_N7S7565C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7565C2D0Ev,_ZTv0_n12_N7S7565C2D0Ev)();
extern void ABISELECT(_ZThn104_N7S7565C2D0Ev,_ZThn60_N7S7565C2D0Ev)() __attribute__((weak));
extern void _ZN7S7565C32v2Ev();
static  VTBL_ENTRY vtc_S7565C2[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7565C2[0]),
  (VTBL_ENTRY)&_ZN7S7565C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7565C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7565C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7565C22v4Ev,
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S7565C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7565C2D1Ev,_ZTv0_n12_N7S7565C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7565C2D0Ev,_ZTv0_n12_N7S7565C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7565C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7565C2[];
extern void _ZN7S7565C4D1Ev();
extern void _ZN7S7565C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7565C4__7S7565C2[] = {
  ABISELECT(104,60),
  0,
  (VTBL_ENTRY)&(_ZTI7S7565C4[0]),
  (VTBL_ENTRY)&_ZN7S7565C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7565C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7565C4D1Ev,_ZTv0_n12_N7S7565C4D1Ev)();
extern void ABISELECT(_ZThn104_N7S7565C4D1Ev,_ZThn60_N7S7565C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7565C4D0Ev,_ZTv0_n12_N7S7565C4D0Ev)();
extern void ABISELECT(_ZThn104_N7S7565C4D0Ev,_ZThn60_N7S7565C4D0Ev)() __attribute__((weak));
extern void _ZN7S7565C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7565C3__7S7565C4__7S7565C2[] = {
  0,
  ABISELECT(-104,-60),
  ABISELECT(-104,-60),
  (VTBL_ENTRY)&(_ZTI7S7565C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7565C4D1Ev,_ZTv0_n12_N7S7565C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7565C4D0Ev,_ZTv0_n12_N7S7565C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7565C32v2Ev,
};
static  VTT_ENTRY vtt_S7565C2[] = {
  {&(_ZTV7S7565C2[3]),  3,14},
  {&(_tg__ZTV7S7565C4__7S7565C2[3]),  3,5},
  {&(_tg__ZTV7S7565C3__7S7565C4__7S7565C2[4]),  4,7},
  {&(_ZTV7S7565C2[11]),  11,14},
};
extern VTBL_ENTRY _ZTI7S7565C2[];
extern  VTBL_ENTRY _ZTV7S7565C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7565C2[];
static VTBL_ENTRY alt_thunk_names218[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7565C4D0Ev,_ZTv0_n12_N7S7565C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7565C4D0Ev,_ZThn60_N7S7565C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7565C4D1Ev,_ZTv0_n12_N7S7565C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7565C4D1Ev,_ZThn60_N7S7565C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7565C2D0Ev,_ZTv0_n12_N7S7565C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7565C2D0Ev,_ZThn60_N7S7565C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7565C2D1Ev,_ZTv0_n12_N7S7565C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S7565C2D1Ev,_ZThn60_N7S7565C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7565C2 = {  "S7565C2", // class name
  bases_S7565C2, 2,
  &(vtc_S7565C2[0]), // expected_vtbl_contents
  &(vtt_S7565C2[0]), // expected_vtt_contents
  ABISELECT(200,144), // object size
  NSPAIRA(_ZTI7S7565C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7565C2),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7565C2),4, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names218,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7565C5  : virtual S7565C3 , S7565C2 {
  void *s7565c5f0[3];
  char s7565c5f1:8;
  int s7565c5f2[2];
  char s7565c5f3;
  ::S7565C3 s7565c5f4;
  void *s7565c5f5[3];
  __tsi64 s7565c5f6[5];
  int s7565c5f7;
  ~S7565C5(); // tgen
  S7565C5(); // tgen
};
//SIG(-1 S7565C5) C1{ VBC2{ vd v1 Fs[6] FL[8] Fi} BC3{ VBC2 BC4{ VBC2 FL Fp FL:54} v2 v3 Fc:0 Fp[8] Fc} Fp[3] Fc:8 Fi[2] Fc FC2 Fp[3] FL[5] Fi}


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

static void Test_S7565C5()
{
  extern Class_Descriptor cd_S7565C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(52,79)];
    init_test(&cd_S7565C5, buf);
    S7565C5 *dp, &lv = *(dp=new (buf) S7565C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(408,312), "sizeof(S7565C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7565C5)");
    check_base_class_offset(lv, (S7565C3*), ABISELECT(312,228), "S7565C5");
    check_base_class_offset(lv, (S7565C3*)(S7565C2*), ABISELECT(312,228), "S7565C5");
    check_base_class_offset(lv, (S7565C3*)(S7565C4*)(S7565C2*), ABISELECT(312,228), "S7565C5");
    check_base_class_offset(lv, (S7565C4*)(S7565C2*), 0, "S7565C5");
    check_base_class_offset(lv, (S7565C2*), 0, "S7565C5");
    check_field_offset(lv, s7565c5f0, ABISELECT(104,60), "S7565C5.s7565c5f0");
    set_bf_and_test(lv, s7565c5f1, ABISELECT(128,72), 0, 8, 1, "S7565C5");
    set_bf_and_test(lv, s7565c5f1, ABISELECT(128,72), 0, 8, hide_sll(1LL<<7), "S7565C5");
    check_field_offset(lv, s7565c5f2, ABISELECT(132,76), "S7565C5.s7565c5f2");
    check_field_offset(lv, s7565c5f3, ABISELECT(140,84), "S7565C5.s7565c5f3");
    check_field_offset(lv, s7565c5f4, ABISELECT(144,88), "S7565C5.s7565c5f4");
    check_field_offset(lv, s7565c5f5, ABISELECT(240,172), "S7565C5.s7565c5f5");
    check_field_offset(lv, s7565c5f6, ABISELECT(264,184), "S7565C5.s7565c5f6");
    check_field_offset(lv, s7565c5f7, ABISELECT(304,224), "S7565C5.s7565c5f7");
    test_class_info(&lv, &cd_S7565C5);
    dp->~S7565C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7565C5(Test_S7565C5, "S7565C5", ABISELECT(408,312));

#else // __cplusplus

extern void _ZN7S7565C5C1Ev();
extern void _ZN7S7565C5D1Ev();
Name_Map name_map_S7565C5[] = {
  NSPAIR(_ZN7S7565C5C1Ev),
  NSPAIR(_ZN7S7565C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7565C3;
extern VTBL_ENTRY _ZTI7S7565C3[];
extern  VTBL_ENTRY _ZTV7S7565C3[];
extern Class_Descriptor cd_S7565C4;
extern VTBL_ENTRY _ZTI7S7565C4[];
extern  VTBL_ENTRY _ZTV7S7565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7565C4[];
extern Class_Descriptor cd_S7565C2;
extern VTBL_ENTRY _ZTI7S7565C2[];
extern  VTBL_ENTRY _ZTV7S7565C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7565C2[];
static Base_Class bases_S7565C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7565C3,    ABISELECT(312,228), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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
  1, 1},
  {&cd_S7565C4,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S7565C2,    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 _ZTI7S7565C5[];
extern void _ZN7S7565C5D1Ev();
extern void _ZN7S7565C5D0Ev();
extern void _ZN7S7565C22v3Ev();
extern void _ZN7S7565C22v4Ev();
extern void ABISELECT(_ZTv0_n24_N7S7565C5D1Ev,_ZTv0_n12_N7S7565C5D1Ev)();
extern void ABISELECT(_ZThn312_N7S7565C5D1Ev,_ZThn228_N7S7565C5D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7565C5D0Ev,_ZTv0_n12_N7S7565C5D0Ev)();
extern void ABISELECT(_ZThn312_N7S7565C5D0Ev,_ZThn228_N7S7565C5D0Ev)() __attribute__((weak));
extern void _ZN7S7565C32v2Ev();
static  VTBL_ENTRY vtc_S7565C5[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI7S7565C5[0]),
  (VTBL_ENTRY)&_ZN7S7565C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7565C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7565C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7565C22v4Ev,
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI7S7565C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7565C5D1Ev,_ZTv0_n12_N7S7565C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7565C5D0Ev,_ZTv0_n12_N7S7565C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7565C32v2Ev,
};
extern VTBL_ENTRY _ZTV7S7565C5[];
extern void _ZN7S7565C2D1Ev();
extern void _ZN7S7565C2D0Ev();
extern void _ZN7S7565C22v3Ev();
extern void _ZN7S7565C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7565C2__7S7565C5[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI7S7565C2[0]),
  (VTBL_ENTRY)&_ZN7S7565C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7565C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7565C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7565C22v4Ev,
};
extern void _ZN7S7565C4D1Ev();
extern void _ZN7S7565C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7565C47S7565C2__7S7565C5[] = {
  ABISELECT(312,228),
  0,
  (VTBL_ENTRY)&(_ZTI7S7565C4[0]),
  (VTBL_ENTRY)&_ZN7S7565C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7565C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7565C4D1Ev,_ZTv0_n12_N7S7565C4D1Ev)();
extern void ABISELECT(_ZThn312_N7S7565C4D1Ev,_ZThn228_N7S7565C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7565C4D0Ev,_ZTv0_n12_N7S7565C4D0Ev)();
extern void ABISELECT(_ZThn312_N7S7565C4D0Ev,_ZThn228_N7S7565C4D0Ev)() __attribute__((weak));
extern void _ZN7S7565C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7565C3__7S7565C47S7565C2__7S7565C5[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI7S7565C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7565C4D1Ev,_ZTv0_n12_N7S7565C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7565C4D0Ev,_ZTv0_n12_N7S7565C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7565C32v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7565C2D1Ev,_ZTv0_n12_N7S7565C2D1Ev)();
extern void ABISELECT(_ZThn312_N7S7565C2D1Ev,_ZThn228_N7S7565C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7565C2D0Ev,_ZTv0_n12_N7S7565C2D0Ev)();
extern void ABISELECT(_ZThn312_N7S7565C2D0Ev,_ZThn228_N7S7565C2D0Ev)() __attribute__((weak));
extern void _ZN7S7565C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7565C3__7S7565C2__7S7565C5[] = {
  0,
  ABISELECT(-312,-228),
  ABISELECT(-312,-228),
  (VTBL_ENTRY)&(_ZTI7S7565C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7565C2D1Ev,_ZTv0_n12_N7S7565C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7565C2D0Ev,_ZTv0_n12_N7S7565C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7565C32v2Ev,
};
static  VTT_ENTRY vtt_S7565C5[] = {
  {&(_ZTV7S7565C5[3]),  3,14},
  {&(_tg__ZTV7S7565C2__7S7565C5[3]),  3,7},
  {&(_tg__ZTV7S7565C47S7565C2__7S7565C5[3]),  3,5},
  {&(_tg__ZTV7S7565C3__7S7565C47S7565C2__7S7565C5[4]),  4,7},
  {&(_tg__ZTV7S7565C3__7S7565C2__7S7565C5[4]),  4,7},
  {&(_ZTV7S7565C5[11]),  11,14},
};
extern VTBL_ENTRY _ZTI7S7565C5[];
extern  VTBL_ENTRY _ZTV7S7565C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7565C5[];
static VTBL_ENTRY alt_thunk_names219[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7565C2D0Ev,_ZTv0_n12_N7S7565C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S7565C2D0Ev,_ZThn228_N7S7565C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7565C2D1Ev,_ZTv0_n12_N7S7565C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S7565C2D1Ev,_ZThn228_N7S7565C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7565C4D0Ev,_ZTv0_n12_N7S7565C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S7565C4D0Ev,_ZThn228_N7S7565C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7565C4D1Ev,_ZTv0_n12_N7S7565C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S7565C4D1Ev,_ZThn228_N7S7565C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7565C5D0Ev,_ZTv0_n12_N7S7565C5D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S7565C5D0Ev,_ZThn228_N7S7565C5D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7565C5D1Ev,_ZTv0_n12_N7S7565C5D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn312_N7S7565C5D1Ev,_ZThn228_N7S7565C5D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7565C5 = {  "S7565C5", // class name
  bases_S7565C5, 3,
  &(vtc_S7565C5[0]), // expected_vtbl_contents
  &(vtt_S7565C5[0]), // expected_vtt_contents
  ABISELECT(408,312), // object size
  NSPAIRA(_ZTI7S7565C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7565C5),14, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7565C5),6, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names219,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7565C7  : S7565C3 {
  int s7565c7f0;
  __tsi64 s7565c7f1;
  int s7565c7f2;
  virtual  ~S7565C7(); // _ZN7S7565C7D1Ev
  S7565C7(); // tgen
};
//SIG(-1 S7565C7) C1{ BC2{ vd v1 Fs[6] FL[8] Fi} vd Fi FL Fi}


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

static void Test_S7565C7()
{
  extern Class_Descriptor cd_S7565C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(15,26)];
    init_test(&cd_S7565C7, buf);
    S7565C7 *dp, &lv = *(dp=new (buf) S7565C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(112,100), "sizeof(S7565C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7565C7)");
    check_base_class_offset(lv, (S7565C3*), 0, "S7565C7");
    check_field_offset(lv, s7565c7f0, ABISELECT(92,84), "S7565C7.s7565c7f0");
    check_field_offset(lv, s7565c7f1, ABISELECT(96,88), "S7565C7.s7565c7f1");
    check_field_offset(lv, s7565c7f2, ABISELECT(104,96), "S7565C7.s7565c7f2");
    test_class_info(&lv, &cd_S7565C7);
    dp->~S7565C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7565C7(Test_S7565C7, "S7565C7", ABISELECT(112,100));

#else // __cplusplus

extern void _ZN7S7565C7C1Ev();
extern void _ZN7S7565C7D1Ev();
Name_Map name_map_S7565C7[] = {
  NSPAIR(_ZN7S7565C7C1Ev),
  NSPAIR(_ZN7S7565C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7565C3;
extern VTBL_ENTRY _ZTI7S7565C3[];
extern  VTBL_ENTRY _ZTV7S7565C3[];
static Base_Class bases_S7565C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7565C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S7565C7[];
extern void _ZN7S7565C7D1Ev();
extern void _ZN7S7565C7D0Ev();
extern void _ZN7S7565C32v2Ev();
static  VTBL_ENTRY vtc_S7565C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7565C7[0]),
  (VTBL_ENTRY)&_ZN7S7565C7D1Ev,
  (VTBL_ENTRY)&_ZN7S7565C7D0Ev,
  (VTBL_ENTRY)&_ZN7S7565C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S7565C7[];
extern  VTBL_ENTRY _ZTV7S7565C7[];
Class_Descriptor cd_S7565C7 = {  "S7565C7", // class name
  bases_S7565C7, 1,
  &(vtc_S7565C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(112,100), // object size
  NSPAIRA(_ZTI7S7565C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7565C7),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  S7565C1  : S7565C2 , virtual S7565C5 {
  void *s7565c1f0;
  ::S3052C10 s7565c1f1;
  __tsi64 s7565c1f2;
  ::S7565C7 s7565c1f3;
  int s7565c1f4;
  virtual void  v1(); // _ZN7S7565C12v1Ev
  ~S7565C1(); // tgen
  S7565C1(); // tgen
};
//SIG(1 S7565C1) C1{ BC2{ VBC3{ vd v2 Fs[6] FL[8] Fi} BC4{ VBC3 FL Fp FL:54} v3 v4 Fc:0 Fp[8] Fc} VBC5{ VBC3 BC2 Fp[3] Fc:8 Fi[2] Fc FC3 Fp[3] FL[5] Fi} v1 Fp FC6{ m Fp Fi FL Fp Fi} FL FC7{ BC3 vd Fi FL Fi} Fi}


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

static void Test_S7565C1()
{
  extern Class_Descriptor cd_S7565C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(87,129)];
    init_test(&cd_S7565C1, buf);
    S7565C1 *dp, &lv = *(dp=new (buf) S7565C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(688,512), "sizeof(S7565C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7565C1)");
    /*is_ambiguous_... S7565C1::S7565C2 */ AMB_check_base_class_offset(lv, (S7565C3*)(S7565C2*), ABISELECT(280,200), "S7565C1");
    /*is_ambiguous_... S7565C1::S7565C2 */ AMB_check_base_class_offset(lv, (S7565C3*)(S7565C4*)(S7565C2*), ABISELECT(280,200), "S7565C1");
    check_base_class_offset(lv, (S7565C3*)(S7565C5*), ABISELECT(280,200), "S7565C1");
    check_base_class_offset(lv, (S7565C3*)(S7565C2*)(S7565C5*), ABISELECT(280,200), "S7565C1");
    check_base_class_offset(lv, (S7565C3*)(S7565C4*)(S7565C2*)(S7565C5*), ABISELECT(280,200), "S7565C1");
    /*is_ambiguous_... S7565C1::S7565C2 */ AMB_check_base_class_offset(lv, (S7565C4*)(S7565C2*), 0, "S7565C1");
    /*is_ambiguous_... S7565C1::S7565C2 */ AMB_check_base_class_offset(lv, (S7565C2*), 0, "S7565C1");
    check_base_class_offset(lv, (S7565C4*)(S7565C2*)(S7565C5*), ABISELECT(376,284), "S7565C1");
    check_base_class_offset(lv, (S7565C2*)(S7565C5*), ABISELECT(376,284), "S7565C1");
    check_base_class_offset(lv, (S7565C5*), ABISELECT(376,284), "S7565C1");
    check_field_offset(lv, s7565c1f0, ABISELECT(104,60), "S7565C1.s7565c1f0");
    check_field_offset(lv, s7565c1f1, ABISELECT(112,64), "S7565C1.s7565c1f1");
    check_field_offset(lv, s7565c1f2, ABISELECT(152,88), "S7565C1.s7565c1f2");
    check_field_offset(lv, s7565c1f3, ABISELECT(160,96), "S7565C1.s7565c1f3");
    check_field_offset(lv, s7565c1f4, ABISELECT(272,196), "S7565C1.s7565c1f4");
    test_class_info(&lv, &cd_S7565C1);
    dp->~S7565C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7565C1(Test_S7565C1, "S7565C1", ABISELECT(688,512));

#else // __cplusplus

extern void _ZN7S7565C1C1Ev();
extern void _ZN7S7565C1D1Ev();
Name_Map name_map_S7565C1[] = {
  NSPAIR(_ZN7S7565C1C1Ev),
  NSPAIR(_ZN7S7565C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7565C3;
extern VTBL_ENTRY _ZTI7S7565C3[];
extern  VTBL_ENTRY _ZTV7S7565C3[];
extern Class_Descriptor cd_S7565C4;
extern VTBL_ENTRY _ZTI7S7565C4[];
extern  VTBL_ENTRY _ZTV7S7565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7565C4[];
extern Class_Descriptor cd_S7565C2;
extern VTBL_ENTRY _ZTI7S7565C2[];
extern  VTBL_ENTRY _ZTV7S7565C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7565C2[];
extern Class_Descriptor cd_S7565C4;
extern VTBL_ENTRY _ZTI7S7565C4[];
extern  VTBL_ENTRY _ZTV7S7565C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7565C4[];
extern Class_Descriptor cd_S7565C2;
extern VTBL_ENTRY _ZTI7S7565C2[];
extern  VTBL_ENTRY _ZTV7S7565C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7565C2[];
extern Class_Descriptor cd_S7565C5;
extern VTBL_ENTRY _ZTI7S7565C5[];
extern  VTBL_ENTRY _ZTV7S7565C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7565C5[];
static Base_Class bases_S7565C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7565C3,    ABISELECT(280,200), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //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_S7565C4,    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
    2, //immediately_derived
  0, 0},
  {&cd_S7565C2,    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_S7565C4,    ABISELECT(376,284), //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
    2, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S7565C2,    ABISELECT(376,284), //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
    3, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S7565C5,    ABISELECT(376,284), //bcp->offset
    16, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    7, //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 _ZTI7S7565C1[];
extern void _ZN7S7565C1D1Ev();
extern void _ZN7S7565C1D0Ev();
extern void _ZN7S7565C22v3Ev();
extern void _ZN7S7565C22v4Ev();
extern void _ZN7S7565C12v1Ev();
extern void ABISELECT(_ZTv0_n24_N7S7565C1D1Ev,_ZTv0_n12_N7S7565C1D1Ev)();
extern void ABISELECT(_ZThn280_N7S7565C1D1Ev,_ZThn200_N7S7565C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7565C1D0Ev,_ZTv0_n12_N7S7565C1D0Ev)();
extern void ABISELECT(_ZThn280_N7S7565C1D0Ev,_ZThn200_N7S7565C1D0Ev)() __attribute__((weak));
extern void _ZN7S7565C32v2Ev();
extern void ABISELECT(_ZTv0_n32_N7S7565C1D1Ev,_ZTv0_n16_N7S7565C1D1Ev)();
extern void ABISELECT(_ZThn376_N7S7565C1D1Ev,_ZThn284_N7S7565C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N7S7565C1D0Ev,_ZTv0_n16_N7S7565C1D0Ev)();
extern void ABISELECT(_ZThn376_N7S7565C1D0Ev,_ZThn284_N7S7565C1D0Ev)() __attribute__((weak));
extern void _ZN7S7565C22v3Ev();
extern void _ZN7S7565C22v4Ev();
static  VTBL_ENTRY vtc_S7565C1[] = {
  ABISELECT(376,284),
  ABISELECT(280,200),
  0,
  (VTBL_ENTRY)&(_ZTI7S7565C1[0]),
  (VTBL_ENTRY)&_ZN7S7565C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7565C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7565C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7565C22v4Ev,
  (VTBL_ENTRY)&_ZN7S7565C12v1Ev,
  0,
  ABISELECT(-280,-200),
  ABISELECT(-280,-200),
  (VTBL_ENTRY)&(_ZTI7S7565C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7565C1D1Ev,_ZTv0_n12_N7S7565C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7565C1D0Ev,_ZTv0_n12_N7S7565C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7565C32v2Ev,
  0,
  0,
  ABISELECT(-376,-284),
  ABISELECT(-96,-84),
  ABISELECT(-376,-284),
  (VTBL_ENTRY)&(_ZTI7S7565C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7565C1D1Ev,_ZTv0_n16_N7S7565C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N7S7565C1D0Ev,_ZTv0_n16_N7S7565C1D0Ev),
  (VTBL_ENTRY)&_ZN7S7565C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7565C22v4Ev,
};
extern VTBL_ENTRY _ZTV7S7565C1[];
extern void _ZN7S7565C2D1Ev();
extern void _ZN7S7565C2D0Ev();
extern void _ZN7S7565C22v3Ev();
extern void _ZN7S7565C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7565C2__7S7565C1[] = {
  ABISELECT(280,200),
  0,
  (VTBL_ENTRY)&(_ZTI7S7565C2[0]),
  (VTBL_ENTRY)&_ZN7S7565C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7565C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7565C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7565C22v4Ev,
};
extern void _ZN7S7565C4D1Ev();
extern void _ZN7S7565C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7565C47S7565C2__7S7565C1[] = {
  ABISELECT(280,200),
  0,
  (VTBL_ENTRY)&(_ZTI7S7565C4[0]),
  (VTBL_ENTRY)&_ZN7S7565C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7565C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7565C4D1Ev,_ZTv0_n12_N7S7565C4D1Ev)();
extern void ABISELECT(_ZThn280_N7S7565C4D1Ev,_ZThn200_N7S7565C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7565C4D0Ev,_ZTv0_n12_N7S7565C4D0Ev)();
extern void ABISELECT(_ZThn280_N7S7565C4D0Ev,_ZThn200_N7S7565C4D0Ev)() __attribute__((weak));
extern void _ZN7S7565C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7565C3__7S7565C47S7565C2__7S7565C1[] = {
  0,
  ABISELECT(-280,-200),
  ABISELECT(-280,-200),
  (VTBL_ENTRY)&(_ZTI7S7565C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7565C4D1Ev,_ZTv0_n12_N7S7565C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7565C4D0Ev,_ZTv0_n12_N7S7565C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7565C32v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7565C2D1Ev,_ZTv0_n12_N7S7565C2D1Ev)();
extern void ABISELECT(_ZThn280_N7S7565C2D1Ev,_ZThn200_N7S7565C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S7565C2D0Ev,_ZTv0_n12_N7S7565C2D0Ev)();
extern void ABISELECT(_ZThn280_N7S7565C2D0Ev,_ZThn200_N7S7565C2D0Ev)() __attribute__((weak));
extern void _ZN7S7565C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7565C3__7S7565C2__7S7565C1[] = {
  0,
  ABISELECT(-280,-200),
  ABISELECT(-280,-200),
  (VTBL_ENTRY)&(_ZTI7S7565C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7565C2D1Ev,_ZTv0_n12_N7S7565C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7565C2D0Ev,_ZTv0_n12_N7S7565C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7565C32v2Ev,
};
extern void _ZN7S7565C5D1Ev();
extern void _ZN7S7565C5D0Ev();
extern void _ZN7S7565C22v3Ev();
extern void _ZN7S7565C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7565C5__7S7565C1[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7565C5[0]),
  (VTBL_ENTRY)&_ZN7S7565C5D1Ev,
  (VTBL_ENTRY)&_ZN7S7565C5D0Ev,
  (VTBL_ENTRY)&_ZN7S7565C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7565C22v4Ev,
};
extern void _ZN7S7565C2D1Ev();
extern void _ZN7S7565C2D0Ev();
extern void _ZN7S7565C22v3Ev();
extern void _ZN7S7565C22v4Ev();
static  VTBL_ENTRY _tg__ZTV7S7565C27S7565C5__A1__7S7565C1[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7565C2[0]),
  (VTBL_ENTRY)&_ZN7S7565C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7565C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7565C22v3Ev,
  (VTBL_ENTRY)&_ZN7S7565C22v4Ev,
};
extern void _ZN7S7565C4D1Ev();
extern void _ZN7S7565C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S7565C47S7565C27S7565C5__A1__7S7565C1[] = {
  ABISELECT(-96,-84),
  0,
  (VTBL_ENTRY)&(_ZTI7S7565C4[0]),
  (VTBL_ENTRY)&_ZN7S7565C4D1Ev,
  (VTBL_ENTRY)&_ZN7S7565C4D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7565C4D1Ev,_ZTv0_n12_N7S7565C4D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7565C4D0Ev,_ZTv0_n12_N7S7565C4D0Ev)();
extern void _ZN7S7565C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7565C3__7S7565C47S7565C27S7565C5__A1__7S7565C1[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI7S7565C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7565C4D1Ev,_ZTv0_n12_N7S7565C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7565C4D0Ev,_ZTv0_n12_N7S7565C4D0Ev),
  (VTBL_ENTRY)&_ZN7S7565C32v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7565C2D1Ev,_ZTv0_n12_N7S7565C2D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7565C2D0Ev,_ZTv0_n12_N7S7565C2D0Ev)();
extern void _ZN7S7565C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7565C3__7S7565C27S7565C5__A1__7S7565C1[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI7S7565C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7565C2D1Ev,_ZTv0_n12_N7S7565C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7565C2D0Ev,_ZTv0_n12_N7S7565C2D0Ev),
  (VTBL_ENTRY)&_ZN7S7565C32v2Ev,
};
extern void ABISELECT(_ZTv0_n24_N7S7565C5D1Ev,_ZTv0_n12_N7S7565C5D1Ev)();
extern void ABISELECT(_ZTv0_n24_N7S7565C5D0Ev,_ZTv0_n12_N7S7565C5D0Ev)();
extern void _ZN7S7565C32v2Ev();
static  VTBL_ENTRY _tg__ZTV7S7565C3__7S7565C5__7S7565C1[] = {
  0,
  ABISELECT(96,84),
  ABISELECT(96,84),
  (VTBL_ENTRY)&(_ZTI7S7565C5[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7565C5D1Ev,_ZTv0_n12_N7S7565C5D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S7565C5D0Ev,_ZTv0_n12_N7S7565C5D0Ev),
  (VTBL_ENTRY)&_ZN7S7565C32v2Ev,
};
static  VTT_ENTRY vtt_S7565C1[] = {
  {&(_ZTV7S7565C1[4]),  4,26},
  {&(_tg__ZTV7S7565C2__7S7565C1[3]),  3,7},
  {&(_tg__ZTV7S7565C47S7565C2__7S7565C1[3]),  3,5},
  {&(_tg__ZTV7S7565C3__7S7565C47S7565C2__7S7565C1[4]),  4,7},
  {&(_tg__ZTV7S7565C3__7S7565C2__7S7565C1[4]),  4,7},
  {&(_ZTV7S7565C1[13]),  13,26},
  {&(_ZTV7S7565C1[22]),  22,26},
  {&(_tg__ZTV7S7565C5__7S7565C1[3]),  3,7},
  {&(_tg__ZTV7S7565C27S7565C5__A1__7S7565C1[3]),  3,7},
  {&(_tg__ZTV7S7565C47S7565C27S7565C5__A1__7S7565C1[3]),  3,5},
  {&(_tg__ZTV7S7565C3__7S7565C47S7565C27S7565C5__A1__7S7565C1[4]),  4,7},
  {&(_tg__ZTV7S7565C3__7S7565C27S7565C5__A1__7S7565C1[4]),  4,7},
  {&(_tg__ZTV7S7565C3__7S7565C5__7S7565C1[4]),  4,7},
};
extern VTBL_ENTRY _ZTI7S7565C1[];
extern  VTBL_ENTRY _ZTV7S7565C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7565C1[];
static VTBL_ENTRY alt_thunk_names220[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7565C2D0Ev,_ZTv0_n12_N7S7565C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7565C2D0Ev,_ZThn200_N7S7565C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7565C2D1Ev,_ZTv0_n12_N7S7565C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7565C2D1Ev,_ZThn200_N7S7565C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7565C4D0Ev,_ZTv0_n12_N7S7565C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7565C4D0Ev,_ZThn200_N7S7565C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7565C4D1Ev,_ZTv0_n12_N7S7565C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7565C4D1Ev,_ZThn200_N7S7565C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7565C1D0Ev,_ZTv0_n16_N7S7565C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N7S7565C1D0Ev,_ZThn284_N7S7565C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N7S7565C1D1Ev,_ZTv0_n16_N7S7565C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn376_N7S7565C1D1Ev,_ZThn284_N7S7565C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7565C1D0Ev,_ZTv0_n12_N7S7565C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7565C1D0Ev,_ZThn200_N7S7565C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S7565C1D1Ev,_ZTv0_n12_N7S7565C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn280_N7S7565C1D1Ev,_ZThn200_N7S7565C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S7565C1 = {  "S7565C1", // class name
  bases_S7565C1, 6,
  &(vtc_S7565C1[0]), // expected_vtbl_contents
  &(vtt_S7565C1[0]), // expected_vtt_contents
  ABISELECT(688,512), // object size
  NSPAIRA(_ZTI7S7565C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7565C1),26, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7565C1),13, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names220,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6099C5  : virtual S2264C24 , virtual S2264C28 {
  int s6099c5f0[9];
  ~S6099C5(); // tgen
  S6099C5(); // tgen
};
//SIG(-1 S6099C5) C1{ VBC2{ m} VBC3{ m} Fi[9]}


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

static void Test_S6099C5()
{
  extern Class_Descriptor cd_S6099C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S6099C5, buf);
    S6099C5 *dp, &lv = *(dp=new (buf) S6099C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S6099C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6099C5)");
    check_base_class_offset(lv, (S2264C24*), 0, "S6099C5");
    check_base_class_offset(lv, (S2264C28*), 0, "S6099C5");
    check_field_offset(lv, s6099c5f0, ABISELECT(8,4), "S6099C5.s6099c5f0");
    test_class_info(&lv, &cd_S6099C5);
    dp->~S6099C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6099C5(Test_S6099C5, "S6099C5", ABISELECT(48,40));

#else // __cplusplus

extern void _ZN7S6099C5C1Ev();
extern void _ZN7S6099C5D1Ev();
Name_Map name_map_S6099C5[] = {
  NSPAIR(_ZN7S6099C5C1Ev),
  NSPAIR(_ZN7S6099C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S6099C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S6099C5[];
static  VTBL_ENTRY vtc_S6099C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C5[0]),
};
extern VTBL_ENTRY _ZTV7S6099C5[];
static  VTT_ENTRY vtt_S6099C5[] = {
  {&(_ZTV7S6099C5[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S6099C5[];
extern  VTBL_ENTRY _ZTV7S6099C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C5[];
Class_Descriptor cd_S6099C5 = {  "S6099C5", // class name
  bases_S6099C5, 2,
  &(vtc_S6099C5[0]), // expected_vtbl_contents
  &(vtt_S6099C5[0]), // expected_vtt_contents
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI7S6099C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6099C5),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6099C5),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  S6099C7  : virtual S2264C24 , virtual S2264C28 , virtual S6099C5 {
  void *s6099c7f0;
  virtual  ~S6099C7(); // _ZN7S6099C7D2Ev
  S6099C7(); // tgen
};
//SIG(-1 S6099C7) C1{ VBC2{ m} VBC3{ m} VBC4{ VBC2 VBC3 Fi[9]} vd Fp}


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

static void Test_S6099C7()
{
  extern Class_Descriptor cd_S6099C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S6099C7, buf);
    S6099C7 *dp, &lv = *(dp=new (buf) S6099C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S6099C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6099C7)");
    check_base_class_offset(lv, (S2264C24*), 0, "S6099C7");
    check_base_class_offset(lv, (S2264C24*)(S6099C5*), 0, "S6099C7");
    check_base_class_offset(lv, (S2264C28*), 0, "S6099C7");
    check_base_class_offset(lv, (S2264C28*)(S6099C5*), 0, "S6099C7");
    check_base_class_offset(lv, (S6099C5*), ABISELECT(16,8), "S6099C7");
    check_field_offset(lv, s6099c7f0, ABISELECT(8,4), "S6099C7.s6099c7f0");
    test_class_info(&lv, &cd_S6099C7);
    dp->~S6099C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6099C7(Test_S6099C7, "S6099C7", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN7S6099C7C1Ev();
extern void _ZN7S6099C7D2Ev();
Name_Map name_map_S6099C7[] = {
  NSPAIR(_ZN7S6099C7C1Ev),
  NSPAIR(_ZN7S6099C7D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S6099C5;
extern VTBL_ENTRY _ZTI7S6099C5[];
extern  VTBL_ENTRY _ZTV7S6099C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C5[];
static Base_Class bases_S6099C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S6099C5,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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 _ZTI7S6099C7[];
extern void _ZN7S6099C7D1Ev();
extern void _ZN7S6099C7D0Ev();
static  VTBL_ENTRY vtc_S6099C7[] = {
  ABISELECT(16,8),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C7[0]),
  (VTBL_ENTRY)&_ZN7S6099C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6099C7D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6099C7[0]),
};
extern VTBL_ENTRY _ZTV7S6099C7[];
static  VTBL_ENTRY _tg__ZTV7S6099C5__7S6099C7[] = {
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C5[0]),
};
static  VTT_ENTRY vtt_S6099C7[] = {
  {&(_ZTV7S6099C7[5]),  5,11},
  {&(_ZTV7S6099C7[11]),  11,11},
  {&(_tg__ZTV7S6099C5__7S6099C7[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S6099C7[];
extern  VTBL_ENTRY _ZTV7S6099C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C7[];
Class_Descriptor cd_S6099C7 = {  "S6099C7", // class name
  bases_S6099C7, 3,
  &(vtc_S6099C7[0]), // expected_vtbl_contents
  &(vtt_S6099C7[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI7S6099C7),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S6099C7),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6099C7),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  S6099C8  : virtual S2264C28 , S2264C24 , S6099C7 , virtual S2264C21 {
  virtual  ~S6099C8(); // _ZN7S6099C8D2Ev
  S6099C8(); // tgen
};
//SIG(-1 S6099C8) C1{ VBC2{ m} BC3{ m} BC4{ VBC3 VBC2 VBC5{ VBC3 VBC2 Fi[9]} vd Fp} VBC6{ m} vd}


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

static void Test_S6099C8()
{
  extern Class_Descriptor cd_S6099C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,13)];
    init_test(&cd_S6099C8, buf);
    S6099C8 *dp, &lv = *(dp=new (buf) S6099C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S6099C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6099C8)");
    check_base_class_offset(lv, (S2264C28*), 0, "S6099C8");
    check_base_class_offset(lv, (S2264C28*)(S6099C7*), 0, "S6099C8");
    check_base_class_offset(lv, (S2264C28*)(S6099C5*), 0, "S6099C8");
    /*is_ambiguous_... S6099C8::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*), 0, "S6099C8");
    check_base_class_offset(lv, (S2264C24*)(S6099C7*), ABISELECT(16,8), "S6099C8");
    check_base_class_offset(lv, (S2264C24*)(S6099C5*), ABISELECT(16,8), "S6099C8");
    check_base_class_offset(lv, (S6099C5*)(S6099C7*), ABISELECT(16,8), "S6099C8");
    check_base_class_offset(lv, (S6099C7*), 0, "S6099C8");
    check_base_class_offset(lv, (S2264C21*), 0, "S6099C8");
    test_class_info(&lv, &cd_S6099C8);
    dp->~S6099C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6099C8(Test_S6099C8, "S6099C8", ABISELECT(64,48));

#else // __cplusplus

extern void _ZN7S6099C8C1Ev();
extern void _ZN7S6099C8D2Ev();
Name_Map name_map_S6099C8[] = {
  NSPAIR(_ZN7S6099C8C1Ev),
  NSPAIR(_ZN7S6099C8D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S6099C5;
extern VTBL_ENTRY _ZTI7S6099C5[];
extern  VTBL_ENTRY _ZTV7S6099C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C5[];
extern Class_Descriptor cd_S6099C7;
extern VTBL_ENTRY _ZTI7S6099C7[];
extern  VTBL_ENTRY _ZTV7S6099C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C7[];
extern Class_Descriptor cd_S2264C21;
extern VTBL_ENTRY _ZTI8S2264C21[];
static Base_Class bases_S6099C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C24,    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, 1},
  {&cd_S6099C5,    ABISELECT(16,8), //bcp->offset
    8, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6099C7,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S6099C8[];
extern void _ZN7S6099C8D1Ev();
extern void _ZN7S6099C8D0Ev();
static  VTBL_ENTRY vtc_S6099C8[] = {
  0,
  ABISELECT(16,8),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C8[0]),
  (VTBL_ENTRY)&_ZN7S6099C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6099C8D0Ev,
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6099C8[0]),
};
extern VTBL_ENTRY _ZTV7S6099C8[];
extern void _ZN7S6099C7D1Ev();
extern void _ZN7S6099C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6099C7__7S6099C8[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C7[0]),
  (VTBL_ENTRY)&_ZN7S6099C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6099C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6099C5__7S6099C7__7S6099C8[] = {
  ABISELECT(-16,-8),
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6099C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6099C5__7S6099C8[] = {
  ABISELECT(-16,-8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C5[0]),
};
static  VTT_ENTRY vtt_S6099C8[] = {
  {&(_ZTV7S6099C8[6]),  6,12},
  {&(_tg__ZTV7S6099C7__7S6099C8[5]),  5,7},
  {&(_tg__ZTV7S6099C5__7S6099C7__7S6099C8[4]),  4,4},
  {&(_ZTV7S6099C8[12]),  12,12},
  {&(_tg__ZTV7S6099C5__7S6099C8[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S6099C8[];
extern  VTBL_ENTRY _ZTV7S6099C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C8[];
Class_Descriptor cd_S6099C8 = {  "S6099C8", // class name
  bases_S6099C8, 6,
  &(vtc_S6099C8[0]), // expected_vtbl_contents
  &(vtt_S6099C8[0]), // expected_vtt_contents
  ABISELECT(64,48), // object size
  NSPAIRA(_ZTI7S6099C8),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S6099C8),12, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6099C8),5, //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  S6099C3  : S2264C28 , virtual S6099C5 , S6099C7 , S2264C24 , virtual S6099C8 {
  virtual  ~S6099C3(); // _ZN7S6099C3D2Ev
  S6099C3(); // tgen
};
//SIG(-1 S6099C3) C1{ BC2{ m} VBC3{ VBC4{ m} VBC2 Fi[9]} BC5{ VBC4 VBC2 VBC3 vd Fp} BC4 VBC6{ VBC2 BC4 BC5 VBC7{ m} vd} vd}


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

static void Test_S6099C3()
{
  extern Class_Descriptor cd_S6099C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,16)];
    init_test(&cd_S6099C3, buf);
    S6099C3 *dp, &lv = *(dp=new (buf) S6099C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,60), "sizeof(S6099C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6099C3)");
    /*is_ambiguous_... S6099C3::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), 0, "S6099C3");
    check_base_class_offset(lv, (S2264C24*)(S6099C5*), ABISELECT(60,48), "S6099C3");
    /*is_ambiguous_... S6099C3::S6099C7 */ AMB_check_base_class_offset(lv, (S2264C24*)(S6099C7*), ABISELECT(60,48), "S6099C3");
    check_base_class_offset(lv, (S2264C24*)(S6099C7*)(S6099C8*), ABISELECT(60,48), "S6099C3");
    check_base_class_offset(lv, (S2264C28*)(S6099C5*), ABISELECT(60,48), "S6099C3");
    /*is_ambiguous_... S6099C3::S6099C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S6099C7*), ABISELECT(60,48), "S6099C3");
    check_base_class_offset(lv, (S2264C28*)(S6099C8*), ABISELECT(60,48), "S6099C3");
    check_base_class_offset(lv, (S2264C28*)(S6099C7*)(S6099C8*), ABISELECT(60,48), "S6099C3");
    check_base_class_offset(lv, (S6099C5*), ABISELECT(16,8), "S6099C3");
    /*is_ambiguous_... S6099C3::S6099C7 */ AMB_check_base_class_offset(lv, (S6099C5*)(S6099C7*), ABISELECT(16,8), "S6099C3");
    check_base_class_offset(lv, (S6099C5*)(S6099C7*)(S6099C8*), ABISELECT(16,8), "S6099C3");
    /*is_ambiguous_... S6099C3::S6099C7 */ AMB_check_base_class_offset(lv, (S6099C7*), 0, "S6099C3");
    /*is_ambiguous_... S6099C3::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*), 0, "S6099C3");
    /*is_ambiguous_... S6099C8::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S6099C8*), ABISELECT(64,52), "S6099C3");
    check_base_class_offset(lv, (S6099C7*)(S6099C8*), ABISELECT(64,52), "S6099C3");
    check_base_class_offset(lv, (S2264C21*)(S6099C8*), 0, "S6099C3");
    check_base_class_offset(lv, (S6099C8*), ABISELECT(64,52), "S6099C3");
    test_class_info(&lv, &cd_S6099C3);
    dp->~S6099C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6099C3(Test_S6099C3, "S6099C3", ABISELECT(80,60));

#else // __cplusplus

extern void _ZN7S6099C3C1Ev();
extern void _ZN7S6099C3D2Ev();
Name_Map name_map_S6099C3[] = {
  NSPAIR(_ZN7S6099C3C1Ev),
  NSPAIR(_ZN7S6099C3D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S6099C5;
extern VTBL_ENTRY _ZTI7S6099C5[];
extern  VTBL_ENTRY _ZTV7S6099C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C5[];
extern Class_Descriptor cd_S6099C7;
extern VTBL_ENTRY _ZTI7S6099C7[];
extern  VTBL_ENTRY _ZTV7S6099C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C7[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S6099C7;
extern VTBL_ENTRY _ZTI7S6099C7[];
extern  VTBL_ENTRY _ZTV7S6099C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C7[];
extern Class_Descriptor cd_S2264C21;
extern VTBL_ENTRY _ZTI8S2264C21[];
extern Class_Descriptor cd_S6099C8;
extern VTBL_ENTRY _ZTI7S6099C8[];
extern  VTBL_ENTRY _ZTV7S6099C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C8[];
static Base_Class bases_S6099C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C24,    ABISELECT(60,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_S2264C28,    ABISELECT(60,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_S6099C5,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6099C7,    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
    4, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C24,    ABISELECT(64,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
    9, //immediately_derived
  0, 0},
  {&cd_S6099C7,    ABISELECT(64,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6099C8,    ABISELECT(64,52), //bcp->offset
    13, //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6099C3[];
extern void _ZN7S6099C3D1Ev();
extern void _ZN7S6099C3D0Ev();
extern void ABISELECT(_ZTv0_n56_N7S6099C3D1Ev,_ZTv0_n28_N7S6099C3D1Ev)();
extern void ABISELECT(_ZThn64_N7S6099C3D1Ev,_ZThn52_N7S6099C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S6099C3D0Ev,_ZTv0_n28_N7S6099C3D0Ev)();
extern void ABISELECT(_ZThn64_N7S6099C3D0Ev,_ZThn52_N7S6099C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6099C3[] = {
  0,
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C3[0]),
  (VTBL_ENTRY)&_ZN7S6099C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6099C3D0Ev,
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6099C3[0]),
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI7S6099C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S6099C3D1Ev,_ZTv0_n28_N7S6099C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S6099C3D0Ev,_ZTv0_n28_N7S6099C3D0Ev),
};
extern VTBL_ENTRY _ZTV7S6099C3[];
extern void _ZN7S6099C7D1Ev();
extern void _ZN7S6099C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6099C7__7S6099C3[] = {
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C7[0]),
  (VTBL_ENTRY)&_ZN7S6099C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6099C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6099C5__7S6099C7__7S6099C3[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6099C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6099C5__7S6099C3[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C5[0]),
};
extern void _ZN7S6099C8D1Ev();
extern void _ZN7S6099C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6099C8__7S6099C3[] = {
  ABISELECT(-64,-52),
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C8[0]),
  (VTBL_ENTRY)&_ZN7S6099C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6099C8D0Ev,
};
extern void _ZN7S6099C7D1Ev();
extern void _ZN7S6099C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6099C77S6099C8__A1__7S6099C3[] = {
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C7[0]),
  (VTBL_ENTRY)&_ZN7S6099C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6099C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6099C5__7S6099C77S6099C8__A1__7S6099C3[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI7S6099C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6099C5__7S6099C8__7S6099C3[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI7S6099C8[0]),
};
static  VTT_ENTRY vtt_S6099C3[] = {
  {&(_ZTV7S6099C3[7]),  7,22},
  {&(_tg__ZTV7S6099C7__7S6099C3[5]),  5,7},
  {&(_tg__ZTV7S6099C5__7S6099C7__7S6099C3[4]),  4,4},
  {&(_ZTV7S6099C3[13]),  13,22},
  {&(_ZTV7S6099C3[20]),  20,22},
  {&(_tg__ZTV7S6099C5__7S6099C3[4]),  4,4},
  {&(_tg__ZTV7S6099C8__7S6099C3[6]),  6,8},
  {&(_tg__ZTV7S6099C77S6099C8__A1__7S6099C3[5]),  5,7},
  {&(_tg__ZTV7S6099C5__7S6099C77S6099C8__A1__7S6099C3[4]),  4,4},
  {&(_tg__ZTV7S6099C5__7S6099C8__7S6099C3[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S6099C3[];
extern  VTBL_ENTRY _ZTV7S6099C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C3[];
static VTBL_ENTRY alt_thunk_names221[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S6099C3D0Ev,_ZTv0_n28_N7S6099C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6099C3D0Ev,_ZThn52_N7S6099C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S6099C3D1Ev,_ZTv0_n28_N7S6099C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6099C3D1Ev,_ZThn52_N7S6099C3D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6099C3 = {  "S6099C3", // class name
  bases_S6099C3, 10,
  &(vtc_S6099C3[0]), // expected_vtbl_contents
  &(vtt_S6099C3[0]), // expected_vtt_contents
  ABISELECT(80,60), // object size
  NSPAIRA(_ZTI7S6099C3),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6099C3),22, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6099C3),10, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names221,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6099C11  : S2264C28 , virtual S2264C21 {
  ~S6099C11(); // tgen
  S6099C11(); // tgen
};
//SIG(-1 S6099C11) C1{ BC2{ m} VBC3{ m}}


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

static void Test_S6099C11()
{
  extern Class_Descriptor cd_S6099C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6099C11, buf);
    S6099C11 *dp, &lv = *(dp=new (buf) S6099C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6099C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6099C11)");
    check_base_class_offset(lv, (S2264C28*), 0, "S6099C11");
    check_base_class_offset(lv, (S2264C21*), 0, "S6099C11");
    test_class_info(&lv, &cd_S6099C11);
    dp->~S6099C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6099C11(Test_S6099C11, "S6099C11", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S6099C11C1Ev();
extern void _ZN8S6099C11D1Ev();
Name_Map name_map_S6099C11[] = {
  NSPAIR(_ZN8S6099C11C1Ev),
  NSPAIR(_ZN8S6099C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C21;
extern VTBL_ENTRY _ZTI8S2264C21[];
static Base_Class bases_S6099C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S6099C11[];
static  VTBL_ENTRY vtc_S6099C11[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6099C11[0]),
};
extern VTBL_ENTRY _ZTV8S6099C11[];
static  VTT_ENTRY vtt_S6099C11[] = {
  {&(_ZTV8S6099C11[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6099C11[];
extern  VTBL_ENTRY _ZTV8S6099C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6099C11[];
Class_Descriptor cd_S6099C11 = {  "S6099C11", // class name
  bases_S6099C11, 2,
  &(vtc_S6099C11[0]), // expected_vtbl_contents
  &(vtt_S6099C11[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S6099C11),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S6099C11),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6099C11),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  S6099C12  : S6099C7 , S2264C28 , virtual S6099C11 {
  virtual  ~S6099C12(); // _ZN8S6099C12D2Ev
  S6099C12(); // tgen
};
//SIG(-1 S6099C12) C1{ BC2{ VBC3{ m} VBC4{ m} VBC5{ VBC3 VBC4 Fi[9]} vd Fp} BC4 VBC6{ BC4 VBC7{ m}} vd}


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

static void Test_S6099C12()
{
  extern Class_Descriptor cd_S6099C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S6099C12, buf);
    S6099C12 *dp, &lv = *(dp=new (buf) S6099C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S6099C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6099C12)");
    check_base_class_offset(lv, (S2264C24*)(S6099C7*), 0, "S6099C12");
    check_base_class_offset(lv, (S2264C24*)(S6099C5*), 0, "S6099C12");
    check_base_class_offset(lv, (S2264C28*)(S6099C7*), ABISELECT(16,8), "S6099C12");
    check_base_class_offset(lv, (S2264C28*)(S6099C5*), ABISELECT(16,8), "S6099C12");
    check_base_class_offset(lv, (S6099C5*)(S6099C7*), ABISELECT(16,8), "S6099C12");
    check_base_class_offset(lv, (S6099C7*), 0, "S6099C12");
    /*is_ambiguous_... S6099C12::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), 0, "S6099C12");
    check_base_class_offset(lv, (S2264C28*)(S6099C11*), ABISELECT(64,48), "S6099C12");
    check_base_class_offset(lv, (S2264C21*)(S6099C11*), 0, "S6099C12");
    check_base_class_offset(lv, (S6099C11*), ABISELECT(64,48), "S6099C12");
    test_class_info(&lv, &cd_S6099C12);
    dp->~S6099C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6099C12(Test_S6099C12, "S6099C12", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN8S6099C12C1Ev();
extern void _ZN8S6099C12D2Ev();
Name_Map name_map_S6099C12[] = {
  NSPAIR(_ZN8S6099C12C1Ev),
  NSPAIR(_ZN8S6099C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S6099C5;
extern VTBL_ENTRY _ZTI7S6099C5[];
extern  VTBL_ENTRY _ZTV7S6099C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C5[];
extern Class_Descriptor cd_S6099C7;
extern VTBL_ENTRY _ZTI7S6099C7[];
extern  VTBL_ENTRY _ZTV7S6099C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C21;
extern VTBL_ENTRY _ZTI8S2264C21[];
extern Class_Descriptor cd_S6099C11;
extern VTBL_ENTRY _ZTI8S6099C11[];
extern  VTBL_ENTRY _ZTV8S6099C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6099C11[];
static Base_Class bases_S6099C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    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, 1},
  {&cd_S6099C5,    ABISELECT(16,8), //bcp->offset
    9, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S6099C7,    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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C28,    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
    7, //immediately_derived
  0, 0},
  {&cd_S2264C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6099C11,    ABISELECT(64,48), //bcp->offset
    13, //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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S6099C12[];
extern void _ZN8S6099C12D1Ev();
extern void _ZN8S6099C12D0Ev();
static  VTBL_ENTRY vtc_S6099C12[] = {
  0,
  ABISELECT(64,48),
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6099C12[0]),
  (VTBL_ENTRY)&_ZN8S6099C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6099C12D0Ev,
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S6099C12[0]),
  ABISELECT(-64,-48),
  ABISELECT(-64,-48),
  (VTBL_ENTRY)&(_ZTI8S6099C12[0]),
};
extern VTBL_ENTRY _ZTV8S6099C12[];
extern void _ZN7S6099C7D1Ev();
extern void _ZN7S6099C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6099C7__8S6099C12[] = {
  ABISELECT(16,8),
  ABISELECT(16,8),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C7[0]),
  (VTBL_ENTRY)&_ZN7S6099C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6099C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6099C5__7S6099C7__8S6099C12[] = {
  0,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6099C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6099C5__8S6099C12[] = {
  0,
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6099C11__8S6099C12[] = {
  ABISELECT(-64,-48),
  0,
  (VTBL_ENTRY)&(_ZTI8S6099C11[0]),
};
static  VTT_ENTRY vtt_S6099C12[] = {
  {&(_ZTV8S6099C12[7]),  7,16},
  {&(_tg__ZTV7S6099C7__8S6099C12[5]),  5,7},
  {&(_tg__ZTV7S6099C5__7S6099C7__8S6099C12[4]),  4,4},
  {&(_ZTV8S6099C12[13]),  13,16},
  {&(_ZTV8S6099C12[16]),  16,16},
  {&(_tg__ZTV7S6099C5__8S6099C12[4]),  4,4},
  {&(_tg__ZTV8S6099C11__8S6099C12[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6099C12[];
extern  VTBL_ENTRY _ZTV8S6099C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6099C12[];
Class_Descriptor cd_S6099C12 = {  "S6099C12", // class name
  bases_S6099C12, 8,
  &(vtc_S6099C12[0]), // expected_vtbl_contents
  &(vtt_S6099C12[0]), // expected_vtt_contents
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI8S6099C12),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S6099C12),16, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6099C12),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6099C10  : virtual S6099C3 , virtual S6099C11 , virtual S6099C12 , S2264C24 {
  virtual void  v1(); // _ZN8S6099C102v1Ev
  ~S6099C10(); // tgen
  S6099C10(); // tgen
};
//SIG(-1 S6099C10) C1{ VBC2{ BC3{ m} VBC4{ VBC5{ m} VBC3 Fi[9]} BC6{ VBC5 VBC3 VBC4 vd Fp} BC5 VBC7{ VBC3 BC5 BC6 VBC8{ m} vd} vd} VBC9{ BC3 VBC8} VBC10{ BC6 BC3 VBC9 vd} BC5 v1}


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

static void Test_S6099C10()
{
  extern Class_Descriptor cd_S6099C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,19)];
    init_test(&cd_S6099C10, buf);
    S6099C10 *dp, &lv = *(dp=new (buf) S6099C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,72), "sizeof(S6099C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6099C10)");
    /*is_ambiguous_... S6099C3::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S6099C3*), ABISELECT(8,4), "S6099C10");
    check_base_class_offset(lv, (S2264C24*)(S6099C5*), ABISELECT(68,52), "S6099C10");
    /*is_ambiguous_... S6099C3::S6099C7 */ AMB_check_base_class_offset(lv, (S2264C24*)(S6099C7*)(S6099C3*), ABISELECT(68,52), "S6099C10");
    check_base_class_offset(lv, (S2264C24*)(S6099C7*)(S6099C8*), ABISELECT(68,52), "S6099C10");
    check_base_class_offset(lv, (S2264C24*)(S6099C7*)(S6099C12*), ABISELECT(68,52), "S6099C10");
    check_base_class_offset(lv, (S2264C28*)(S6099C5*), ABISELECT(68,52), "S6099C10");
    /*is_ambiguous_... S6099C3::S6099C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S6099C7*)(S6099C3*), ABISELECT(68,52), "S6099C10");
    check_base_class_offset(lv, (S2264C28*)(S6099C8*), ABISELECT(68,52), "S6099C10");
    check_base_class_offset(lv, (S2264C28*)(S6099C7*)(S6099C8*), ABISELECT(68,52), "S6099C10");
    check_base_class_offset(lv, (S2264C28*)(S6099C7*)(S6099C12*), ABISELECT(68,52), "S6099C10");
    check_base_class_offset(lv, (S6099C5*)(S6099C3*), ABISELECT(24,12), "S6099C10");
    /*is_ambiguous_... S6099C3::S6099C7 */ AMB_check_base_class_offset(lv, (S6099C5*)(S6099C7*)(S6099C3*), ABISELECT(24,12), "S6099C10");
    check_base_class_offset(lv, (S6099C5*)(S6099C7*)(S6099C8*), ABISELECT(24,12), "S6099C10");
    check_base_class_offset(lv, (S6099C5*)(S6099C7*)(S6099C12*), ABISELECT(24,12), "S6099C10");
    /*is_ambiguous_... S6099C3::S6099C7 */ AMB_check_base_class_offset(lv, (S6099C7*)(S6099C3*), ABISELECT(8,4), "S6099C10");
    /*is_ambiguous_... S6099C3::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S6099C3*), ABISELECT(8,4), "S6099C10");
    /*is_ambiguous_... S6099C8::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S6099C8*), ABISELECT(72,56), "S6099C10");
    check_base_class_offset(lv, (S6099C7*)(S6099C8*), ABISELECT(72,56), "S6099C10");
    check_base_class_offset(lv, (S2264C21*)(S6099C8*), 0, "S6099C10");
    check_base_class_offset(lv, (S2264C21*)(S6099C11*), 0, "S6099C10");
    check_base_class_offset(lv, (S6099C8*)(S6099C3*), ABISELECT(72,56), "S6099C10");
    check_base_class_offset(lv, (S6099C3*), ABISELECT(8,4), "S6099C10");
    check_base_class_offset(lv, (S2264C28*)(S6099C11*), 0, "S6099C10");
    check_base_class_offset(lv, (S6099C11*), 0, "S6099C10");
    check_base_class_offset(lv, (S6099C11*)(S6099C12*), 0, "S6099C10");
    check_base_class_offset(lv, (S6099C7*)(S6099C12*), ABISELECT(88,64), "S6099C10");
    /*is_ambiguous_... S6099C12::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S6099C12*), ABISELECT(88,64), "S6099C10");
    check_base_class_offset(lv, (S6099C12*), ABISELECT(88,64), "S6099C10");
    /*is_ambiguous_... S6099C10::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*), 0, "S6099C10");
    test_class_info(&lv, &cd_S6099C10);
    dp->~S6099C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6099C10(Test_S6099C10, "S6099C10", ABISELECT(104,72));

#else // __cplusplus

extern void _ZN8S6099C10C1Ev();
extern void _ZN8S6099C10D1Ev();
Name_Map name_map_S6099C10[] = {
  NSPAIR(_ZN8S6099C10C1Ev),
  NSPAIR(_ZN8S6099C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S6099C5;
extern VTBL_ENTRY _ZTI7S6099C5[];
extern  VTBL_ENTRY _ZTV7S6099C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C5[];
extern Class_Descriptor cd_S6099C7;
extern VTBL_ENTRY _ZTI7S6099C7[];
extern  VTBL_ENTRY _ZTV7S6099C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C7[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S6099C7;
extern VTBL_ENTRY _ZTI7S6099C7[];
extern  VTBL_ENTRY _ZTV7S6099C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C7[];
extern Class_Descriptor cd_S2264C21;
extern VTBL_ENTRY _ZTI8S2264C21[];
extern Class_Descriptor cd_S6099C8;
extern VTBL_ENTRY _ZTI7S6099C8[];
extern  VTBL_ENTRY _ZTV7S6099C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C8[];
extern Class_Descriptor cd_S6099C3;
extern VTBL_ENTRY _ZTI7S6099C3[];
extern  VTBL_ENTRY _ZTV7S6099C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C3[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S6099C11;
extern VTBL_ENTRY _ZTI8S6099C11[];
extern  VTBL_ENTRY _ZTV8S6099C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6099C11[];
extern Class_Descriptor cd_S6099C7;
extern VTBL_ENTRY _ZTI7S6099C7[];
extern  VTBL_ENTRY _ZTV7S6099C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S6099C12;
extern VTBL_ENTRY _ZTI8S6099C12[];
extern  VTBL_ENTRY _ZTV8S6099C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6099C12[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
static Base_Class bases_S6099C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    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
    10, //immediately_derived
  0, 0},
  {&cd_S2264C24,    ABISELECT(68,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_S2264C28,    ABISELECT(68,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_S6099C5,    ABISELECT(24,12), //bcp->offset
    23, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S6099C7,    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
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2264C24,    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
    10, //immediately_derived
  0, 0},
  {&cd_S2264C24,    ABISELECT(72,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
    9, //immediately_derived
  0, 0},
  {&cd_S6099C7,    ABISELECT(72,56), //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
    2, //init_seq
    9, //immediately_derived
  0, 0},
  {&cd_S2264C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6099C8,    ABISELECT(72,56), //bcp->offset
    27, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    10, //immediately_derived
  0, 1},
  {&cd_S6099C3,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6099C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6099C7,    ABISELECT(88,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    19, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(88,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
    15, //immediately_derived
  0, 0},
  {&cd_S6099C12,    ABISELECT(88,64), //bcp->offset
    36, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    18, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S6099C10[];
extern void _ZN8S6099C102v1Ev();
extern void _ZN8S6099C10D1Ev();
extern void _ZN8S6099C10D0Ev();
extern void ABISELECT(_ZTv0_n64_N8S6099C10D1Ev,_ZTv0_n32_N8S6099C10D1Ev)();
extern void ABISELECT(_ZThn8_N8S6099C10D1Ev,_ZThn4_N8S6099C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6099C10D0Ev,_ZTv0_n32_N8S6099C10D0Ev)();
extern void ABISELECT(_ZThn8_N8S6099C10D0Ev,_ZThn4_N8S6099C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S6099C10D1Ev,_ZTv0_n28_N8S6099C10D1Ev)();
extern void ABISELECT(_ZThn72_N8S6099C10D1Ev,_ZThn56_N8S6099C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N8S6099C10D0Ev,_ZTv0_n28_N8S6099C10D0Ev)();
extern void ABISELECT(_ZThn72_N8S6099C10D0Ev,_ZThn56_N8S6099C10D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6099C10D1Ev,_ZTv0_n32_N8S6099C10D1Ev)();
extern void ABISELECT(_ZThn88_N8S6099C10D1Ev,_ZThn64_N8S6099C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6099C10D0Ev,_ZTv0_n32_N8S6099C10D0Ev)();
extern void ABISELECT(_ZThn88_N8S6099C10D0Ev,_ZThn64_N8S6099C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6099C10[] = {
  ABISELECT(88,64),
  0,
  ABISELECT(72,56),
  ABISELECT(68,52),
  ABISELECT(68,52),
  ABISELECT(24,12),
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6099C10[0]),
  (VTBL_ENTRY)&_ZN8S6099C102v1Ev,
  (VTBL_ENTRY)&_ZN8S6099C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6099C10D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6099C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6099C10D1Ev,_ZTv0_n32_N8S6099C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6099C10D0Ev,_ZTv0_n32_N8S6099C10D0Ev),
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S6099C10[0]),
  ABISELECT(-72,-56),
  ABISELECT(-72,-56),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-72,-56),
  (VTBL_ENTRY)&(_ZTI8S6099C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S6099C10D1Ev,_ZTv0_n28_N8S6099C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S6099C10D0Ev,_ZTv0_n28_N8S6099C10D0Ev),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-64,-52),
  ABISELECT(-20,-12),
  ABISELECT(-20,-12),
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI8S6099C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6099C10D1Ev,_ZTv0_n32_N8S6099C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6099C10D0Ev,_ZTv0_n32_N8S6099C10D0Ev),
};
extern VTBL_ENTRY _ZTV8S6099C10[];
extern void _ZN7S6099C3D1Ev();
extern void _ZN7S6099C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6099C3__8S6099C10[] = {
  ABISELECT(-8,-4),
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C3[0]),
  (VTBL_ENTRY)&_ZN7S6099C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6099C3D0Ev,
};
extern void _ZN7S6099C7D1Ev();
extern void _ZN7S6099C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6099C77S6099C3__8S6099C10[] = {
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C7[0]),
  (VTBL_ENTRY)&_ZN7S6099C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6099C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6099C5__7S6099C77S6099C3__8S6099C10[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6099C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6099C5__7S6099C3__8S6099C10[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6099C3[0]),
};
extern void ABISELECT(_ZTv0_n56_N7S6099C3D1Ev,_ZTv0_n28_N7S6099C3D1Ev)();
extern void ABISELECT(_ZThn64_N7S6099C3D1Ev,_ZThn52_N7S6099C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S6099C3D0Ev,_ZTv0_n28_N7S6099C3D0Ev)();
extern void ABISELECT(_ZThn64_N7S6099C3D0Ev,_ZThn52_N7S6099C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S6099C8__7S6099C3__8S6099C10[] = {
  ABISELECT(-64,-52),
  ABISELECT(-72,-56),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI7S6099C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S6099C3D1Ev,_ZTv0_n28_N7S6099C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S6099C3D0Ev,_ZTv0_n28_N7S6099C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6099C5__8S6099C10[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C5[0]),
};
extern void _ZN7S6099C8D1Ev();
extern void _ZN7S6099C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6099C8__8S6099C10[] = {
  ABISELECT(-72,-56),
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C8[0]),
  (VTBL_ENTRY)&_ZN7S6099C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6099C8D0Ev,
};
extern void _ZN7S6099C7D1Ev();
extern void _ZN7S6099C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6099C77S6099C8__A1__8S6099C10[] = {
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C7[0]),
  (VTBL_ENTRY)&_ZN7S6099C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6099C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6099C5__7S6099C77S6099C8__A1__8S6099C10[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI7S6099C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6099C5__7S6099C8__8S6099C10[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI7S6099C8[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6099C11__8S6099C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6099C11[0]),
};
extern void _ZN8S6099C12D1Ev();
extern void _ZN8S6099C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6099C12__8S6099C10[] = {
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-64,-52),
  ABISELECT(-20,-12),
  ABISELECT(-20,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S6099C12[0]),
  (VTBL_ENTRY)&_ZN8S6099C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6099C12D0Ev,
};
extern void _ZN7S6099C7D1Ev();
extern void _ZN7S6099C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6099C78S6099C12__A2__8S6099C10[] = {
  ABISELECT(-64,-52),
  ABISELECT(-20,-12),
  ABISELECT(-20,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C7[0]),
  (VTBL_ENTRY)&_ZN7S6099C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6099C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6099C5__7S6099C78S6099C12__A2__8S6099C10[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(64,52),
  (VTBL_ENTRY)&(_ZTI7S6099C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6099C5__8S6099C12__8S6099C10[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(64,52),
  (VTBL_ENTRY)&(_ZTI8S6099C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6099C11__8S6099C12__8S6099C10[] = {
  0,
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI8S6099C12[0]),
};
static  VTT_ENTRY vtt_S6099C10[] = {
  {&(_ZTV8S6099C10[10]),  10,46},
  {&(_ZTV8S6099C10[21]),  21,46},
  {&(_ZTV8S6099C10[27]),  27,46},
  {&(_ZTV8S6099C10[34]),  34,46},
  {&(_ZTV8S6099C10[10]),  10,46},
  {&(_ZTV8S6099C10[44]),  44,46},
  {&(_tg__ZTV7S6099C3__8S6099C10[7]),  7,9},
  {&(_tg__ZTV7S6099C77S6099C3__8S6099C10[5]),  5,7},
  {&(_tg__ZTV7S6099C5__7S6099C77S6099C3__8S6099C10[4]),  4,4},
  {&(_tg__ZTV7S6099C5__7S6099C3__8S6099C10[4]),  4,4},
  {&(_tg__ZTV7S6099C8__7S6099C3__8S6099C10[7]),  7,9},
  {&(_tg__ZTV7S6099C5__8S6099C10[4]),  4,4},
  {&(_tg__ZTV7S6099C8__8S6099C10[6]),  6,8},
  {&(_tg__ZTV7S6099C77S6099C8__A1__8S6099C10[5]),  5,7},
  {&(_tg__ZTV7S6099C5__7S6099C77S6099C8__A1__8S6099C10[4]),  4,4},
  {&(_tg__ZTV7S6099C5__7S6099C8__8S6099C10[4]),  4,4},
  {&(_tg__ZTV8S6099C11__8S6099C10[3]),  3,3},
  {&(_tg__ZTV8S6099C12__8S6099C10[7]),  7,9},
  {&(_tg__ZTV7S6099C78S6099C12__A2__8S6099C10[5]),  5,7},
  {&(_tg__ZTV7S6099C5__7S6099C78S6099C12__A2__8S6099C10[4]),  4,4},
  {&(_tg__ZTV7S6099C5__8S6099C12__8S6099C10[4]),  4,4},
  {&(_tg__ZTV8S6099C11__8S6099C12__8S6099C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S6099C10[];
extern  VTBL_ENTRY _ZTV8S6099C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6099C10[];
static VTBL_ENTRY alt_thunk_names222[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S6099C3D0Ev,_ZTv0_n28_N7S6099C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6099C3D0Ev,_ZThn52_N7S6099C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S6099C3D1Ev,_ZTv0_n28_N7S6099C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6099C3D1Ev,_ZThn52_N7S6099C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S6099C10D0Ev,_ZTv0_n28_N8S6099C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S6099C10D0Ev,_ZThn56_N8S6099C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N8S6099C10D1Ev,_ZTv0_n28_N8S6099C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn72_N8S6099C10D1Ev,_ZThn56_N8S6099C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6099C10D0Ev,_ZTv0_n32_N8S6099C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S6099C10D0Ev,_ZThn64_N8S6099C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S6099C10D0Ev,_ZThn4_N8S6099C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6099C10D1Ev,_ZTv0_n32_N8S6099C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn88_N8S6099C10D1Ev,_ZThn64_N8S6099C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S6099C10D1Ev,_ZThn4_N8S6099C10D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6099C10 = {  "S6099C10", // class name
  bases_S6099C10, 17,
  &(vtc_S6099C10[0]), // expected_vtbl_contents
  &(vtt_S6099C10[0]), // expected_vtt_contents
  ABISELECT(104,72), // object size
  NSPAIRA(_ZTI8S6099C10),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S6099C10),46, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6099C10),22, //virtual table table var
  8, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names222,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6099C13  : S6099C5 {
  ~S6099C13(); // tgen
  S6099C13(); // tgen
};
//SIG(-1 S6099C13) C1{ BC2{ VBC3{ m} VBC4{ m} Fi[9]}}


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

static void Test_S6099C13()
{
  extern Class_Descriptor cd_S6099C13;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,11)];
    init_test(&cd_S6099C13, buf);
    S6099C13 *dp, &lv = *(dp=new (buf) S6099C13());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,40), "sizeof(S6099C13)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6099C13)");
    check_base_class_offset(lv, (S2264C24*)(S6099C5*), 0, "S6099C13");
    check_base_class_offset(lv, (S2264C28*)(S6099C5*), 0, "S6099C13");
    check_base_class_offset(lv, (S6099C5*), 0, "S6099C13");
    test_class_info(&lv, &cd_S6099C13);
    dp->~S6099C13();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6099C13(Test_S6099C13, "S6099C13", ABISELECT(48,40));

#else // __cplusplus

extern void _ZN8S6099C13C1Ev();
extern void _ZN8S6099C13D1Ev();
Name_Map name_map_S6099C13[] = {
  NSPAIR(_ZN8S6099C13C1Ev),
  NSPAIR(_ZN8S6099C13D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S6099C5;
extern VTBL_ENTRY _ZTI7S6099C5[];
extern  VTBL_ENTRY _ZTV7S6099C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C5[];
static Base_Class bases_S6099C13[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6099C5,    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
    1, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S6099C13[];
static  VTBL_ENTRY vtc_S6099C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S6099C13[0]),
};
extern VTBL_ENTRY _ZTV8S6099C13[];
static  VTBL_ENTRY _tg__ZTV7S6099C5__8S6099C13[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C5[0]),
};
static  VTT_ENTRY vtt_S6099C13[] = {
  {&(_ZTV8S6099C13[4]),  4,4},
  {&(_tg__ZTV7S6099C5__8S6099C13[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S6099C13[];
extern  VTBL_ENTRY _ZTV8S6099C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6099C13[];
Class_Descriptor cd_S6099C13 = {  "S6099C13", // class name
  bases_S6099C13, 3,
  &(vtc_S6099C13[0]), // expected_vtbl_contents
  &(vtt_S6099C13[0]), // expected_vtt_contents
  ABISELECT(48,40), // object size
  NSPAIRA(_ZTI8S6099C13),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S6099C13),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S6099C13),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  S6099C14_nt  {
  void  mf6099c14(); // _ZN11S6099C14_nt9mf6099c14Ev
  virtual  ~S6099C14_nt(); // _ZN11S6099C14_ntD1Ev
  S6099C14_nt(); // tgen
};
//SIG(-1 S6099C14_nt) C1{ vd m}


void  S6099C14_nt ::mf6099c14(){}
 S6099C14_nt ::~S6099C14_nt(){ note_dtor("S6099C14_nt", this);}
S6099C14_nt ::S6099C14_nt(){ note_ctor("S6099C14_nt", this);} // tgen

//skip512 S6099C14_nt

#else // __cplusplus

extern void _ZN11S6099C14_ntC1Ev();
extern void _ZN11S6099C14_ntD1Ev();
Name_Map name_map_S6099C14_nt[] = {
  NSPAIR(_ZN11S6099C14_ntC1Ev),
  NSPAIR(_ZN11S6099C14_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S6099C14_nt[];
extern void _ZN11S6099C14_ntD1Ev();
extern void _ZN11S6099C14_ntD0Ev();
static  VTBL_ENTRY vtc_S6099C14_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S6099C14_nt[0]),
  (VTBL_ENTRY)&_ZN11S6099C14_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S6099C14_ntD0Ev,
};
extern VTBL_ENTRY _ZTI11S6099C14_nt[];
VTBL_ENTRY *P__ZTI11S6099C14_nt = _ZTI11S6099C14_nt; 
extern  VTBL_ENTRY _ZTV11S6099C14_nt[];
Class_Descriptor cd_S6099C14_nt = {  "S6099C14_nt", // class name
  0,0,//no base classes
  &(vtc_S6099C14_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S6099C14_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S6099C14_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  S6099C1  : S2264C38 , S6099C3 , virtual S6099C10 , virtual S6099C13 , virtual S6099C14_nt {
  ~S6099C1(); // tgen
  S6099C1(); // tgen
};
//SIG(1 S6099C1) C1{ BC2{ m} BC3{ BC4{ m} VBC5{ VBC6{ m} VBC4 Fi[9]} BC7{ VBC6 VBC4 VBC5 vd Fp} BC6 VBC8{ VBC4 BC6 BC7 VBC9{ m} vd} vd} VBC10{ VBC3 VBC11{ BC4 VBC9} VBC12{ BC7 BC4 VBC11 vd} BC6 v1} VBC13{ BC5} VBC14{ vd m}}


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

static void Test_S6099C1()
{
  extern Class_Descriptor cd_S6099C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(23,32)];
    init_test(&cd_S6099C1, buf);
    S6099C1 *dp, &lv = *(dp=new (buf) S6099C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(176,124), "sizeof(S6099C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6099C1)");
    check_base_class_offset(lv, (S2264C38*), 0, "S6099C1");
    /*is_ambiguous_... S6099C1::S6099C3 */ AMB_check_base_class_offset(lv, (S2264C28*)(S6099C3*), 0, "S6099C1");
    /*is_ambiguous_... S6099C1::S6099C5 */ AMB_check_base_class_offset(lv, (S2264C24*)(S6099C5*), ABISELECT(60,48), "S6099C1");
    /*is_ambiguous_... S6099C1::S6099C3 */ AMB_check_base_class_offset(lv, (S2264C24*)(S6099C7*)(S6099C3*), ABISELECT(60,48), "S6099C1");
    check_base_class_offset(lv, (S2264C24*)(S6099C7*)(S6099C8*), ABISELECT(60,48), "S6099C1");
    /*is_ambiguous_... S6099C1::S6099C3 */ AMB_check_base_class_offset(lv, (S2264C24*)(S6099C7*)(S6099C3*), ABISELECT(60,48), "S6099C1");
    check_base_class_offset(lv, (S2264C24*)(S6099C7*)(S6099C12*), ABISELECT(60,48), "S6099C1");
    check_base_class_offset(lv, (S2264C24*)(S6099C5*)(S6099C13*), ABISELECT(60,48), "S6099C1");
    /*is_ambiguous_... S6099C1::S6099C5 */ AMB_check_base_class_offset(lv, (S2264C28*)(S6099C5*), ABISELECT(60,48), "S6099C1");
    /*is_ambiguous_... S6099C1::S6099C3 */ AMB_check_base_class_offset(lv, (S2264C28*)(S6099C7*)(S6099C3*), ABISELECT(60,48), "S6099C1");
    check_base_class_offset(lv, (S2264C28*)(S6099C8*), ABISELECT(60,48), "S6099C1");
    check_base_class_offset(lv, (S2264C28*)(S6099C7*)(S6099C8*), ABISELECT(60,48), "S6099C1");
    /*is_ambiguous_... S6099C1::S6099C3 */ AMB_check_base_class_offset(lv, (S2264C28*)(S6099C7*)(S6099C3*), ABISELECT(60,48), "S6099C1");
    check_base_class_offset(lv, (S2264C28*)(S6099C7*)(S6099C12*), ABISELECT(60,48), "S6099C1");
    check_base_class_offset(lv, (S2264C28*)(S6099C5*)(S6099C13*), ABISELECT(60,48), "S6099C1");
    /*is_ambiguous_... S6099C1::S6099C3 */ AMB_check_base_class_offset(lv, (S6099C5*)(S6099C3*), ABISELECT(16,8), "S6099C1");
    /*is_ambiguous_... S6099C1::S6099C3 */ AMB_check_base_class_offset(lv, (S6099C5*)(S6099C7*)(S6099C3*), ABISELECT(16,8), "S6099C1");
    check_base_class_offset(lv, (S6099C5*)(S6099C7*)(S6099C8*), ABISELECT(16,8), "S6099C1");
    /*is_ambiguous_... S6099C1::S6099C3 */ AMB_check_base_class_offset(lv, (S6099C5*)(S6099C3*), ABISELECT(16,8), "S6099C1");
    /*is_ambiguous_... S6099C1::S6099C3 */ AMB_check_base_class_offset(lv, (S6099C5*)(S6099C7*)(S6099C3*), ABISELECT(16,8), "S6099C1");
    check_base_class_offset(lv, (S6099C5*)(S6099C7*)(S6099C12*), ABISELECT(16,8), "S6099C1");
    /*is_ambiguous_... S6099C1::S6099C3 */ AMB_check_base_class_offset(lv, (S6099C7*)(S6099C3*), 0, "S6099C1");
    /*is_ambiguous_... S6099C1::S6099C3 */ AMB_check_base_class_offset(lv, (S2264C24*)(S6099C3*), 0, "S6099C1");
    /*is_ambiguous_... S6099C8::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S6099C8*), ABISELECT(64,52), "S6099C1");
    check_base_class_offset(lv, (S6099C7*)(S6099C8*), ABISELECT(64,52), "S6099C1");
    check_base_class_offset(lv, (S2264C21*)(S6099C8*), 0, "S6099C1");
    check_base_class_offset(lv, (S2264C21*)(S6099C11*), 0, "S6099C1");
    /*is_ambiguous_... S6099C1::S6099C3 */ AMB_check_base_class_offset(lv, (S6099C8*)(S6099C3*), ABISELECT(64,52), "S6099C1");
    /*is_ambiguous_... S6099C1::S6099C3 */ AMB_check_base_class_offset(lv, (S6099C8*)(S6099C3*), ABISELECT(64,52), "S6099C1");
    /*is_ambiguous_... S6099C1::S6099C3 */ AMB_check_base_class_offset(lv, (S6099C3*), 0, "S6099C1");
    /*is_ambiguous_... S6099C1::S6099C3 */ AMB_check_base_class_offset(lv, (S2264C28*)(S6099C3*), ABISELECT(88,64), "S6099C1");
    /*is_ambiguous_... S6099C1::S6099C3 */ AMB_check_base_class_offset(lv, (S6099C7*)(S6099C3*), ABISELECT(88,64), "S6099C1");
    /*is_ambiguous_... S6099C1::S6099C3 */ AMB_check_base_class_offset(lv, (S2264C24*)(S6099C3*), ABISELECT(88,64), "S6099C1");
    check_base_class_offset(lv, (S6099C3*)(S6099C10*), ABISELECT(88,64), "S6099C1");
    check_base_class_offset(lv, (S2264C28*)(S6099C11*), ABISELECT(80,60), "S6099C1");
    check_base_class_offset(lv, (S6099C11*)(S6099C10*), ABISELECT(80,60), "S6099C1");
    check_base_class_offset(lv, (S6099C11*)(S6099C12*), ABISELECT(80,60), "S6099C1");
    check_base_class_offset(lv, (S6099C7*)(S6099C12*), ABISELECT(104,72), "S6099C1");
    /*is_ambiguous_... S6099C12::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S6099C12*), ABISELECT(104,72), "S6099C1");
    check_base_class_offset(lv, (S6099C12*)(S6099C10*), ABISELECT(104,72), "S6099C1");
    /*is_ambiguous_... S6099C10::S2264C24 */ AMB_check_base_class_offset(lv, (S2264C24*)(S6099C10*), ABISELECT(80,60), "S6099C1");
    check_base_class_offset(lv, (S6099C10*), ABISELECT(80,60), "S6099C1");
    check_base_class_offset(lv, (S6099C5*)(S6099C13*), ABISELECT(120,80), "S6099C1");
    check_base_class_offset(lv, (S6099C13*), ABISELECT(120,80), "S6099C1");
    check_base_class_offset(lv, (S6099C14_nt*), ABISELECT(168,120), "S6099C1");
    test_class_info(&lv, &cd_S6099C1);
    dp->~S6099C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6099C1(Test_S6099C1, "S6099C1", ABISELECT(176,124));

#else // __cplusplus

extern void _ZN7S6099C1C1Ev();
extern void _ZN7S6099C1D1Ev();
Name_Map name_map_S6099C1[] = {
  NSPAIR(_ZN7S6099C1C1Ev),
  NSPAIR(_ZN7S6099C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S6099C5;
extern VTBL_ENTRY _ZTI7S6099C5[];
extern  VTBL_ENTRY _ZTV7S6099C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C5[];
extern Class_Descriptor cd_S6099C7;
extern VTBL_ENTRY _ZTI7S6099C7[];
extern  VTBL_ENTRY _ZTV7S6099C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C7[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S6099C7;
extern VTBL_ENTRY _ZTI7S6099C7[];
extern  VTBL_ENTRY _ZTV7S6099C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C7[];
extern Class_Descriptor cd_S2264C21;
extern VTBL_ENTRY _ZTI8S2264C21[];
extern Class_Descriptor cd_S6099C8;
extern VTBL_ENTRY _ZTI7S6099C8[];
extern  VTBL_ENTRY _ZTV7S6099C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C8[];
extern Class_Descriptor cd_S6099C3;
extern VTBL_ENTRY _ZTI7S6099C3[];
extern  VTBL_ENTRY _ZTV7S6099C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C3[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S6099C7;
extern VTBL_ENTRY _ZTI7S6099C7[];
extern  VTBL_ENTRY _ZTV7S6099C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C7[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S6099C3;
extern VTBL_ENTRY _ZTI7S6099C3[];
extern  VTBL_ENTRY _ZTV7S6099C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C3[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S6099C11;
extern VTBL_ENTRY _ZTI8S6099C11[];
extern  VTBL_ENTRY _ZTV8S6099C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6099C11[];
extern Class_Descriptor cd_S6099C7;
extern VTBL_ENTRY _ZTI7S6099C7[];
extern  VTBL_ENTRY _ZTV7S6099C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S6099C12;
extern VTBL_ENTRY _ZTI8S6099C12[];
extern  VTBL_ENTRY _ZTV8S6099C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6099C12[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S6099C10;
extern VTBL_ENTRY _ZTI8S6099C10[];
extern  VTBL_ENTRY _ZTV8S6099C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6099C10[];
extern Class_Descriptor cd_S6099C5;
extern VTBL_ENTRY _ZTI7S6099C5[];
extern  VTBL_ENTRY _ZTV7S6099C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C5[];
extern Class_Descriptor cd_S6099C13;
extern VTBL_ENTRY _ZTI8S6099C13[];
extern  VTBL_ENTRY _ZTV8S6099C13[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S6099C13[];
extern Class_Descriptor cd_S6099C14_nt;
extern VTBL_ENTRY _ZTI11S6099C14_nt[];
extern  VTBL_ENTRY _ZTV11S6099C14_nt[];
static Base_Class bases_S6099C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C24,    ABISELECT(60,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_S2264C28,    ABISELECT(60,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_S6099C5,    ABISELECT(16,8), //bcp->offset
    15, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    5, //immediately_derived
  0, 1},
  {&cd_S6099C7,    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
    13, //init_seq
    11, //immediately_derived
  0, 0},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C24,    ABISELECT(64,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
    10, //immediately_derived
  0, 0},
  {&cd_S6099C7,    ABISELECT(64,52), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    10, //immediately_derived
  0, 0},
  {&cd_S2264C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S6099C8,    ABISELECT(64,52), //bcp->offset
    19, //bcp->virtual_function_table_offset
    7, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    11, //immediately_derived
  0, 1},
  {&cd_S6099C3,    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
    14, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C28,    ABISELECT(88,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
    15, //immediately_derived
  0, 0},
  {&cd_S6099C7,    ABISELECT(88,64), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    27, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    15, //immediately_derived
  0, 0},
  {&cd_S2264C24,    ABISELECT(88,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
    15, //immediately_derived
  0, 0},
  {&cd_S6099C3,    ABISELECT(88,64), //bcp->offset
    43, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    10, //bcp->index_in_construction_vtbl_array
    26, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(80,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
    17, //immediately_derived
  0, 0},
  {&cd_S6099C11,    ABISELECT(80,60), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    11, //bcp->index_in_construction_vtbl_array
    31, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    20, //immediately_derived
  0, 1},
  {&cd_S6099C7,    ABISELECT(104,72), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    33, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    20, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(104,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
    20, //immediately_derived
  0, 0},
  {&cd_S6099C12,    ABISELECT(104,72), //bcp->offset
    53, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    32, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    22, //immediately_derived
  0, 1},
  {&cd_S2264C24,    ABISELECT(80,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
    22, //immediately_derived
  0, 0},
  {&cd_S6099C10,    ABISELECT(80,60), //bcp->offset
    28, //bcp->virtual_function_table_offset
    12, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6099C5,    ABISELECT(120,80), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    38, //bcp->base_subarray_index_in_construction_vtbl_array
    10, //init_seq
    24, //immediately_derived
  0, 0},
  {&cd_S6099C13,    ABISELECT(120,80), //bcp->offset
    63, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    37, //bcp->base_subarray_index_in_construction_vtbl_array
    11, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S6099C14_nt,    ABISELECT(168,120), //bcp->offset
    67, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    12, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6099C1[];
extern void _ZN7S6099C1D1Ev();
extern void _ZN7S6099C1D0Ev();
extern void ABISELECT(_ZTv0_n56_N7S6099C1D1Ev,_ZTv0_n28_N7S6099C1D1Ev)();
extern void ABISELECT(_ZThn64_N7S6099C1D1Ev,_ZThn52_N7S6099C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S6099C1D0Ev,_ZTv0_n28_N7S6099C1D0Ev)();
extern void ABISELECT(_ZThn64_N7S6099C1D0Ev,_ZThn52_N7S6099C1D0Ev)() __attribute__((weak));
extern void _ZN8S6099C102v1Ev();
extern void ABISELECT(_ZTv0_n96_N7S6099C1D1Ev,_ZTv0_n48_N7S6099C1D1Ev)();
extern void ABISELECT(_ZThn80_N7S6099C1D1Ev,_ZThn60_N7S6099C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n96_N7S6099C1D0Ev,_ZTv0_n48_N7S6099C1D0Ev)();
extern void ABISELECT(_ZThn80_N7S6099C1D0Ev,_ZThn60_N7S6099C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6099C1D1Ev,_ZTv0_n32_N7S6099C1D1Ev)();
extern void ABISELECT(_ZThn88_N7S6099C1D1Ev,_ZThn64_N7S6099C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6099C1D0Ev,_ZTv0_n32_N7S6099C1D0Ev)();
extern void ABISELECT(_ZThn88_N7S6099C1D0Ev,_ZThn64_N7S6099C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6099C1D1Ev,_ZTv0_n32_N7S6099C1D1Ev)();
extern void ABISELECT(_ZThn104_N7S6099C1D1Ev,_ZThn72_N7S6099C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N7S6099C1D0Ev,_ZTv0_n32_N7S6099C1D0Ev)();
extern void ABISELECT(_ZThn104_N7S6099C1D0Ev,_ZThn72_N7S6099C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6099C1D1Ev,_ZTv0_n12_N7S6099C1D1Ev)();
extern void ABISELECT(_ZThn168_N7S6099C1D1Ev,_ZThn120_N7S6099C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N7S6099C1D0Ev,_ZTv0_n12_N7S6099C1D0Ev)();
extern void ABISELECT(_ZThn168_N7S6099C1D0Ev,_ZThn120_N7S6099C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S6099C1[] = {
  ABISELECT(168,120),
  ABISELECT(120,80),
  ABISELECT(104,72),
  ABISELECT(80,60),
  ABISELECT(88,64),
  ABISELECT(80,60),
  0,
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C1[0]),
  (VTBL_ENTRY)&_ZN7S6099C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6099C1D0Ev,
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6099C1[0]),
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI7S6099C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S6099C1D1Ev,_ZTv0_n28_N7S6099C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S6099C1D0Ev,_ZTv0_n28_N7S6099C1D0Ev),
  ABISELECT(-80,-60),
  0,
  ABISELECT(24,12),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-20,-12),
  ABISELECT(-20,-12),
  ABISELECT(-64,-52),
  ABISELECT(8,4),
  ABISELECT(-80,-60),
  ABISELECT(-80,-60),
  (VTBL_ENTRY)&(_ZTI7S6099C1[0]),
  (VTBL_ENTRY)&_ZN8S6099C102v1Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S6099C1D1Ev,_ZTv0_n48_N7S6099C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n96_N7S6099C1D0Ev,_ZTv0_n48_N7S6099C1D0Ev),
  ABISELECT(-88,-64),
  ABISELECT(-88,-64),
  ABISELECT(-24,-12),
  ABISELECT(-72,-56),
  ABISELECT(-28,-16),
  ABISELECT(-28,-16),
  ABISELECT(-88,-64),
  (VTBL_ENTRY)&(_ZTI7S6099C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6099C1D1Ev,_ZTv0_n32_N7S6099C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6099C1D0Ev,_ZTv0_n32_N7S6099C1D0Ev),
  ABISELECT(-104,-72),
  ABISELECT(-104,-72),
  ABISELECT(-24,-12),
  ABISELECT(-88,-64),
  ABISELECT(-44,-24),
  ABISELECT(-44,-24),
  ABISELECT(-104,-72),
  (VTBL_ENTRY)&(_ZTI7S6099C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6099C1D1Ev,_ZTv0_n32_N7S6099C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N7S6099C1D0Ev,_ZTv0_n32_N7S6099C1D0Ev),
  ABISELECT(-60,-32),
  ABISELECT(-60,-32),
  ABISELECT(-120,-80),
  (VTBL_ENTRY)&(_ZTI7S6099C1[0]),
  ABISELECT(-168,-120),
  ABISELECT(-168,-120),
  (VTBL_ENTRY)&(_ZTI7S6099C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6099C1D1Ev,_ZTv0_n12_N7S6099C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N7S6099C1D0Ev,_ZTv0_n12_N7S6099C1D0Ev),
};
extern VTBL_ENTRY _ZTV7S6099C1[];
extern void _ZN7S6099C3D1Ev();
extern void _ZN7S6099C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6099C3__A__7S6099C1[] = {
  0,
  ABISELECT(64,52),
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C3[0]),
  (VTBL_ENTRY)&_ZN7S6099C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6099C3D0Ev,
};
extern void _ZN7S6099C7D1Ev();
extern void _ZN7S6099C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6099C77S6099C3__7S6099C1[] = {
  ABISELECT(16,8),
  ABISELECT(60,48),
  ABISELECT(60,48),
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C7[0]),
  (VTBL_ENTRY)&_ZN7S6099C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6099C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6099C5__7S6099C77S6099C3__7S6099C1[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6099C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6099C5__7S6099C3__A__7S6099C1[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S6099C3[0]),
};
extern void ABISELECT(_ZTv0_n56_N7S6099C3D1Ev,_ZTv0_n28_N7S6099C3D1Ev)();
extern void ABISELECT(_ZThn64_N7S6099C3D1Ev,_ZThn52_N7S6099C3D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n56_N7S6099C3D0Ev,_ZTv0_n28_N7S6099C3D0Ev)();
extern void ABISELECT(_ZThn64_N7S6099C3D0Ev,_ZThn52_N7S6099C3D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S6099C8__7S6099C3__A__7S6099C1[] = {
  ABISELECT(-64,-52),
  ABISELECT(-64,-52),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(-64,-52),
  (VTBL_ENTRY)&(_ZTI7S6099C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S6099C3D1Ev,_ZTv0_n28_N7S6099C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S6099C3D0Ev,_ZTv0_n28_N7S6099C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6099C5__7S6099C1[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C5[0]),
};
extern void _ZN7S6099C8D1Ev();
extern void _ZN7S6099C8D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6099C8__7S6099C1[] = {
  ABISELECT(-64,-52),
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C8[0]),
  (VTBL_ENTRY)&_ZN7S6099C8D1Ev,
  (VTBL_ENTRY)&_ZN7S6099C8D0Ev,
};
extern void _ZN7S6099C7D1Ev();
extern void _ZN7S6099C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6099C77S6099C8__A1__7S6099C1[] = {
  ABISELECT(-48,-44),
  -4,
  -4,
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C7[0]),
  (VTBL_ENTRY)&_ZN7S6099C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6099C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6099C5__7S6099C77S6099C8__A1__7S6099C1[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI7S6099C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6099C5__7S6099C8__7S6099C1[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(48,44),
  (VTBL_ENTRY)&(_ZTI7S6099C8[0]),
};
extern void _ZN8S6099C102v1Ev();
extern void _ZN8S6099C10D1Ev();
extern void _ZN8S6099C10D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6099C10__7S6099C1[] = {
  ABISELECT(24,12),
  0,
  ABISELECT(-16,-8),
  ABISELECT(-20,-12),
  ABISELECT(-20,-12),
  ABISELECT(-64,-52),
  ABISELECT(8,4),
  ABISELECT(-80,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S6099C10[0]),
  (VTBL_ENTRY)&_ZN8S6099C102v1Ev,
  (VTBL_ENTRY)&_ZN8S6099C10D1Ev,
  (VTBL_ENTRY)&_ZN8S6099C10D0Ev,
};
extern void ABISELECT(_ZTv0_n64_N8S6099C10D1Ev,_ZTv0_n32_N8S6099C10D1Ev)();
extern void ABISELECT(_ZThn8_N8S6099C10D1Ev,_ZThn4_N8S6099C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6099C10D0Ev,_ZTv0_n32_N8S6099C10D0Ev)();
extern void ABISELECT(_ZThn8_N8S6099C10D0Ev,_ZThn4_N8S6099C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV7S6099C3__8S6099C10__7S6099C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-88,-64),
  ABISELECT(-24,-12),
  ABISELECT(-72,-56),
  ABISELECT(-28,-16),
  ABISELECT(-28,-16),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S6099C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6099C10D1Ev,_ZTv0_n32_N8S6099C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6099C10D0Ev,_ZTv0_n32_N8S6099C10D0Ev),
};
static  VTBL_ENTRY _tg__ZTV7S6099C5__8S6099C10__7S6099C1[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(64,52),
  (VTBL_ENTRY)&(_ZTI8S6099C10[0]),
};
extern void ABISELECT(_ZTv0_n56_N8S6099C10D1Ev,_ZTv0_n28_N8S6099C10D1Ev)();
extern void ABISELECT(_ZTv0_n56_N8S6099C10D0Ev,_ZTv0_n28_N8S6099C10D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6099C8__8S6099C10__7S6099C1[] = {
  ABISELECT(16,8),
  ABISELECT(-64,-52),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S6099C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S6099C10D1Ev,_ZTv0_n28_N8S6099C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N8S6099C10D0Ev,_ZTv0_n28_N8S6099C10D0Ev),
};
extern void ABISELECT(_ZTv0_n64_N8S6099C10D1Ev,_ZTv0_n32_N8S6099C10D1Ev)();
extern void ABISELECT(_ZThn24_N8S6099C10D1Ev,_ZThn12_N8S6099C10D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S6099C10D0Ev,_ZTv0_n32_N8S6099C10D0Ev)();
extern void ABISELECT(_ZThn24_N8S6099C10D0Ev,_ZThn12_N8S6099C10D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S6099C12__8S6099C10__7S6099C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-104,-72),
  ABISELECT(-24,-12),
  ABISELECT(-88,-64),
  ABISELECT(-44,-24),
  ABISELECT(-44,-24),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S6099C10[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6099C10D1Ev,_ZTv0_n32_N8S6099C10D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S6099C10D0Ev,_ZTv0_n32_N8S6099C10D0Ev),
};
extern void _ZN7S6099C3D1Ev();
extern void _ZN7S6099C3D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6099C3__A1__7S6099C1[] = {
  ABISELECT(-88,-64),
  ABISELECT(-24,-12),
  ABISELECT(-72,-56),
  ABISELECT(-28,-16),
  ABISELECT(-28,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C3[0]),
  (VTBL_ENTRY)&_ZN7S6099C3D1Ev,
  (VTBL_ENTRY)&_ZN7S6099C3D0Ev,
};
extern void _ZN7S6099C7D1Ev();
extern void _ZN7S6099C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6099C77S6099C3__A2__7S6099C1[] = {
  ABISELECT(-72,-56),
  ABISELECT(-28,-16),
  ABISELECT(-28,-16),
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C7[0]),
  (VTBL_ENTRY)&_ZN7S6099C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6099C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6099C5__7S6099C77S6099C3__A2__7S6099C1[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(72,56),
  (VTBL_ENTRY)&(_ZTI7S6099C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6099C5__7S6099C3__A1__7S6099C1[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(72,56),
  (VTBL_ENTRY)&(_ZTI7S6099C3[0]),
};
extern void ABISELECT(_ZTv0_n56_N7S6099C3D1Ev,_ZTv0_n28_N7S6099C3D1Ev)();
extern void ABISELECT(_ZTv0_n56_N7S6099C3D0Ev,_ZTv0_n28_N7S6099C3D0Ev)();
static  VTBL_ENTRY _tg__ZTV7S6099C8__7S6099C3__A1__7S6099C1[] = {
  ABISELECT(24,12),
  ABISELECT(-64,-52),
  ABISELECT(-48,-44),
  -4,
  -4,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI7S6099C3[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S6099C3D1Ev,_ZTv0_n28_N7S6099C3D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n56_N7S6099C3D0Ev,_ZTv0_n28_N7S6099C3D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S6099C11__7S6099C1[] = {
  ABISELECT(-80,-60),
  0,
  (VTBL_ENTRY)&(_ZTI8S6099C11[0]),
};
extern void _ZN8S6099C12D1Ev();
extern void _ZN8S6099C12D0Ev();
static  VTBL_ENTRY _tg__ZTV8S6099C12__7S6099C1[] = {
  ABISELECT(-104,-72),
  ABISELECT(-24,-12),
  ABISELECT(-88,-64),
  ABISELECT(-44,-24),
  ABISELECT(-44,-24),
  0,
  (VTBL_ENTRY)&(_ZTI8S6099C12[0]),
  (VTBL_ENTRY)&_ZN8S6099C12D1Ev,
  (VTBL_ENTRY)&_ZN8S6099C12D0Ev,
};
extern void _ZN7S6099C7D1Ev();
extern void _ZN7S6099C7D0Ev();
static  VTBL_ENTRY _tg__ZTV7S6099C78S6099C12__A3__7S6099C1[] = {
  ABISELECT(-88,-64),
  ABISELECT(-44,-24),
  ABISELECT(-44,-24),
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C7[0]),
  (VTBL_ENTRY)&_ZN7S6099C7D1Ev,
  (VTBL_ENTRY)&_ZN7S6099C7D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S6099C5__7S6099C78S6099C12__A3__7S6099C1[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI7S6099C7[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6099C5__8S6099C12__7S6099C1[] = {
  ABISELECT(44,40),
  ABISELECT(44,40),
  ABISELECT(88,64),
  (VTBL_ENTRY)&(_ZTI8S6099C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6099C11__8S6099C12__7S6099C1[] = {
  ABISELECT(-80,-60),
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S6099C12[0]),
};
static  VTBL_ENTRY _tg__ZTV8S6099C13__7S6099C1[] = {
  ABISELECT(-60,-32),
  ABISELECT(-60,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S6099C13[0]),
};
static  VTBL_ENTRY _tg__ZTV7S6099C58S6099C13__A1__7S6099C1[] = {
  ABISELECT(-60,-32),
  ABISELECT(-60,-32),
  0,
  (VTBL_ENTRY)&(_ZTI7S6099C5[0]),
};
static  VTT_ENTRY vtt_S6099C1[] = {
  {&(_ZTV7S6099C1[13]),  13,72},
  {&(_tg__ZTV7S6099C3__A__7S6099C1[7]),  7,9},
  {&(_tg__ZTV7S6099C77S6099C3__7S6099C1[5]),  5,7},
  {&(_tg__ZTV7S6099C5__7S6099C77S6099C3__7S6099C1[4]),  4,4},
  {&(_tg__ZTV7S6099C5__7S6099C3__A__7S6099C1[4]),  4,4},
  {&(_tg__ZTV7S6099C8__7S6099C3__A__7S6099C1[7]),  7,9},
  {&(_ZTV7S6099C1[19]),  19,72},
  {&(_ZTV7S6099C1[26]),  26,72},
  {&(_ZTV7S6099C1[40]),  40,72},
  {&(_ZTV7S6099C1[51]),  51,72},
  {&(_ZTV7S6099C1[40]),  40,72},
  {&(_ZTV7S6099C1[61]),  61,72},
  {&(_ZTV7S6099C1[67]),  67,72},
  {&(_ZTV7S6099C1[70]),  70,72},
  {&(_tg__ZTV7S6099C5__7S6099C1[4]),  4,4},
  {&(_tg__ZTV7S6099C8__7S6099C1[6]),  6,8},
  {&(_tg__ZTV7S6099C77S6099C8__A1__7S6099C1[5]),  5,7},
  {&(_tg__ZTV7S6099C5__7S6099C77S6099C8__A1__7S6099C1[4]),  4,4},
  {&(_tg__ZTV7S6099C5__7S6099C8__7S6099C1[4]),  4,4},
  {&(_tg__ZTV8S6099C10__7S6099C1[10]),  10,13},
  {&(_tg__ZTV7S6099C3__8S6099C10__7S6099C1[8]),  8,10},
  {&(_tg__ZTV7S6099C5__8S6099C10__7S6099C1[4]),  4,4},
  {&(_tg__ZTV7S6099C8__8S6099C10__7S6099C1[7]),  7,9},
  {&(_tg__ZTV8S6099C10__7S6099C1[10]),  10,13},
  {&(_tg__ZTV8S6099C12__8S6099C10__7S6099C1[8]),  8,10},
  {&(_tg__ZTV7S6099C3__A1__7S6099C1[7]),  7,9},
  {&(_tg__ZTV7S6099C77S6099C3__A2__7S6099C1[5]),  5,7},
  {&(_tg__ZTV7S6099C5__7S6099C77S6099C3__A2__7S6099C1[4]),  4,4},
  {&(_tg__ZTV7S6099C5__7S6099C3__A1__7S6099C1[4]),  4,4},
  {&(_tg__ZTV7S6099C8__7S6099C3__A1__7S6099C1[7]),  7,9},
  {&(_tg__ZTV8S6099C11__7S6099C1[3]),  3,3},
  {&(_tg__ZTV8S6099C12__7S6099C1[7]),  7,9},
  {&(_tg__ZTV7S6099C78S6099C12__A3__7S6099C1[5]),  5,7},
  {&(_tg__ZTV7S6099C5__7S6099C78S6099C12__A3__7S6099C1[4]),  4,4},
  {&(_tg__ZTV7S6099C5__8S6099C12__7S6099C1[4]),  4,4},
  {&(_tg__ZTV8S6099C11__8S6099C12__7S6099C1[3]),  3,3},
  {&(_tg__ZTV8S6099C13__7S6099C1[4]),  4,4},
  {&(_tg__ZTV7S6099C58S6099C13__A1__7S6099C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI7S6099C1[];
extern  VTBL_ENTRY _ZTV7S6099C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6099C1[];
static VTBL_ENTRY alt_thunk_names223[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6099C10D0Ev,_ZTv0_n32_N8S6099C10D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S6099C10D0Ev,_ZThn12_N8S6099C10D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S6099C10D0Ev,_ZThn4_N8S6099C10D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S6099C10D1Ev,_ZTv0_n32_N8S6099C10D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S6099C10D1Ev,_ZThn12_N8S6099C10D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S6099C10D1Ev,_ZThn4_N8S6099C10D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S6099C3D0Ev,_ZTv0_n28_N7S6099C3D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6099C3D0Ev,_ZThn52_N7S6099C3D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S6099C3D1Ev,_ZTv0_n28_N7S6099C3D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6099C3D1Ev,_ZThn52_N7S6099C3D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6099C1D0Ev,_ZTv0_n12_N7S6099C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S6099C1D0Ev,_ZThn120_N7S6099C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N7S6099C1D1Ev,_ZTv0_n12_N7S6099C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn168_N7S6099C1D1Ev,_ZThn120_N7S6099C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6099C1D0Ev,_ZTv0_n32_N7S6099C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S6099C1D0Ev,_ZThn72_N7S6099C1D0Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S6099C1D0Ev,_ZThn64_N7S6099C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N7S6099C1D1Ev,_ZTv0_n32_N7S6099C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn104_N7S6099C1D1Ev,_ZThn72_N7S6099C1D1Ev),
  (VTBL_ENTRY)ABISELECT(_ZThn88_N7S6099C1D1Ev,_ZThn64_N7S6099C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S6099C1D0Ev,_ZTv0_n48_N7S6099C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S6099C1D0Ev,_ZThn60_N7S6099C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n96_N7S6099C1D1Ev,_ZTv0_n48_N7S6099C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn80_N7S6099C1D1Ev,_ZThn60_N7S6099C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S6099C1D0Ev,_ZTv0_n28_N7S6099C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6099C1D0Ev,_ZThn52_N7S6099C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n56_N7S6099C1D1Ev,_ZTv0_n28_N7S6099C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn64_N7S6099C1D1Ev,_ZThn52_N7S6099C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S6099C1 = {  "S6099C1", // class name
  bases_S6099C1, 26,
  &(vtc_S6099C1[0]), // expected_vtbl_contents
  &(vtt_S6099C1[0]), // expected_vtt_contents
  ABISELECT(176,124), // object size
  NSPAIRA(_ZTI7S6099C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV7S6099C1),72, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6099C1),38, //virtual table table var
  14, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  alt_thunk_names223,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19378C3  {
  ::S7218C6 s19378c3f0;
  virtual void  v6(); // _ZN8S19378C32v6Ev
  virtual void  v7(); // _ZN8S19378C32v7Ev
  virtual void  v8(); // _ZN8S19378C32v8Ev
  ~S19378C3(); // tgen
  S19378C3(); // tgen
};
//SIG(-1 S19378C3) C1{ v1 v2 v3 FC2{ BC3{ BC4{ v11 v12 v13 v14 v15 v16 Fi} v17} v4 v5 v6 v7 v8 v9 v10}}


void  S19378C3 ::v6(){vfunc_called(this, "_ZN8S19378C32v6Ev");}
void  S19378C3 ::v7(){vfunc_called(this, "_ZN8S19378C32v7Ev");}
void  S19378C3 ::v8(){vfunc_called(this, "_ZN8S19378C32v8Ev");}
S19378C3 ::~S19378C3(){ note_dtor("S19378C3", this);} // tgen
S19378C3 ::S19378C3(){ note_ctor("S19378C3", this);} // tgen

static void Test_S19378C3()
{
  extern Class_Descriptor cd_S19378C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19378C3, buf);
    S19378C3 *dp, &lv = *(dp=new (buf) S19378C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19378C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19378C3)");
    check_field_offset(lv, s19378c3f0, ABISELECT(8,4), "S19378C3.s19378c3f0");
    test_class_info(&lv, &cd_S19378C3);
    dp->~S19378C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19378C3(Test_S19378C3, "S19378C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S19378C3C1Ev();
extern void _ZN8S19378C3D1Ev();
Name_Map name_map_S19378C3[] = {
  NSPAIR(_ZN8S19378C3C1Ev),
  NSPAIR(_ZN8S19378C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19378C3[];
extern void _ZN8S19378C32v6Ev();
extern void _ZN8S19378C32v7Ev();
extern void _ZN8S19378C32v8Ev();
static  VTBL_ENTRY vtc_S19378C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19378C3[0]),
  (VTBL_ENTRY)&_ZN8S19378C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19378C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19378C32v8Ev,
};
extern VTBL_ENTRY _ZTI8S19378C3[];
extern  VTBL_ENTRY _ZTV8S19378C3[];
Class_Descriptor cd_S19378C3 = {  "S19378C3", // class name
  0,0,//no base classes
  &(vtc_S19378C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19378C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19378C3),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  S19378C2  : S19378C3 {
  void *s19378c2f0;
  char s19378c2f1;
  virtual void  v9(); // _ZN8S19378C22v9Ev
  virtual void  v10(); // _ZN8S19378C23v10Ev
  virtual void  v11(); // _ZN8S19378C23v11Ev
  virtual void  v12(); // _ZN8S19378C23v12Ev
  ~S19378C2(); // tgen
  S19378C2(); // tgen
};
//SIG(-1 S19378C2) C1{ BC2{ v5 v6 v7 FC3{ BC4{ BC5{ v15 v16 v17 v18 v19 v20 Fi} v21} v8 v9 v10 v11 v12 v13 v14}} v1 v2 v3 v4 Fp Fc}


void  S19378C2 ::v9(){vfunc_called(this, "_ZN8S19378C22v9Ev");}
void  S19378C2 ::v10(){vfunc_called(this, "_ZN8S19378C23v10Ev");}
void  S19378C2 ::v11(){vfunc_called(this, "_ZN8S19378C23v11Ev");}
void  S19378C2 ::v12(){vfunc_called(this, "_ZN8S19378C23v12Ev");}
S19378C2 ::~S19378C2(){ note_dtor("S19378C2", this);} // tgen
S19378C2 ::S19378C2(){ note_ctor("S19378C2", this);} // tgen

static void Test_S19378C2()
{
  extern Class_Descriptor cd_S19378C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19378C2, buf);
    S19378C2 *dp, &lv = *(dp=new (buf) S19378C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19378C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19378C2)");
    check_base_class_offset(lv, (S19378C3*), 0, "S19378C2");
    check_field_offset(lv, s19378c2f0, ABISELECT(24,12), "S19378C2.s19378c2f0");
    check_field_offset(lv, s19378c2f1, ABISELECT(32,16), "S19378C2.s19378c2f1");
    test_class_info(&lv, &cd_S19378C2);
    dp->~S19378C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19378C2(Test_S19378C2, "S19378C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19378C2C1Ev();
extern void _ZN8S19378C2D1Ev();
Name_Map name_map_S19378C2[] = {
  NSPAIR(_ZN8S19378C2C1Ev),
  NSPAIR(_ZN8S19378C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19378C3;
extern VTBL_ENTRY _ZTI8S19378C3[];
extern  VTBL_ENTRY _ZTV8S19378C3[];
static Base_Class bases_S19378C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19378C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19378C2[];
extern void _ZN8S19378C32v6Ev();
extern void _ZN8S19378C32v7Ev();
extern void _ZN8S19378C32v8Ev();
extern void _ZN8S19378C22v9Ev();
extern void _ZN8S19378C23v10Ev();
extern void _ZN8S19378C23v11Ev();
extern void _ZN8S19378C23v12Ev();
static  VTBL_ENTRY vtc_S19378C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19378C2[0]),
  (VTBL_ENTRY)&_ZN8S19378C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19378C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19378C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19378C22v9Ev,
  (VTBL_ENTRY)&_ZN8S19378C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19378C23v11Ev,
  (VTBL_ENTRY)&_ZN8S19378C23v12Ev,
};
extern VTBL_ENTRY _ZTI8S19378C2[];
extern  VTBL_ENTRY _ZTV8S19378C2[];
Class_Descriptor cd_S19378C2 = {  "S19378C2", // class name
  bases_S19378C2, 1,
  &(vtc_S19378C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19378C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19378C2),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  S19378C7  : virtual S19378C3 , virtual S19378C2 {
  ::S3052C22_nt s19378c7f0;
  virtual void  v13(); // _ZN8S19378C73v13Ev
  virtual void  v14(); // _ZN8S19378C73v14Ev
  virtual void  v15(); // _ZN8S19378C73v15Ev
  virtual void  v16(); // _ZN8S19378C73v16Ev
  virtual void  v17(); // _ZN8S19378C73v17Ev
  ~S19378C7(); // tgen
  S19378C7(); // tgen
};
//SIG(-1 S19378C7) C1{ VBC2{ v6 v7 v8 FC3{ BC4{ BC5{ v20 v21 v22 v23 v24 v25 Fi} v26} v13 v14 v15 v16 v17 v18 v19}} VBC6{ BC2 v9 v10 v11 v12 Fp Fc} v1 v2 v3 v4 v5 FC7{}}


void  S19378C7 ::v13(){vfunc_called(this, "_ZN8S19378C73v13Ev");}
void  S19378C7 ::v14(){vfunc_called(this, "_ZN8S19378C73v14Ev");}
void  S19378C7 ::v15(){vfunc_called(this, "_ZN8S19378C73v15Ev");}
void  S19378C7 ::v16(){vfunc_called(this, "_ZN8S19378C73v16Ev");}
void  S19378C7 ::v17(){vfunc_called(this, "_ZN8S19378C73v17Ev");}
S19378C7 ::~S19378C7(){ note_dtor("S19378C7", this);} // tgen
S19378C7 ::S19378C7(){ note_ctor("S19378C7", this);} // tgen

static void Test_S19378C7()
{
  extern Class_Descriptor cd_S19378C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[11];
    init_test(&cd_S19378C7, buf);
    S19378C7 *dp, &lv = *(dp=new (buf) S19378C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S19378C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19378C7)");
    /*is_ambiguous_... S19378C7::S19378C3 */ AMB_check_base_class_offset(lv, (S19378C3*), ABISELECT(16,8), "S19378C7");
    check_base_class_offset(lv, (S19378C3*)(S19378C2*), ABISELECT(40,20), "S19378C7");
    check_base_class_offset(lv, (S19378C2*), ABISELECT(40,20), "S19378C7");
    check_field_offset(lv, s19378c7f0, ABISELECT(8,4), "S19378C7.s19378c7f0");
    test_class_info(&lv, &cd_S19378C7);
    dp->~S19378C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19378C7(Test_S19378C7, "S19378C7", ABISELECT(80,40));

#else // __cplusplus

extern void _ZN8S19378C7C1Ev();
extern void _ZN8S19378C7D1Ev();
Name_Map name_map_S19378C7[] = {
  NSPAIR(_ZN8S19378C7C1Ev),
  NSPAIR(_ZN8S19378C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19378C3;
extern VTBL_ENTRY _ZTI8S19378C3[];
extern  VTBL_ENTRY _ZTV8S19378C3[];
extern Class_Descriptor cd_S19378C3;
extern VTBL_ENTRY _ZTI8S19378C3[];
extern  VTBL_ENTRY _ZTV8S19378C3[];
extern Class_Descriptor cd_S19378C2;
extern VTBL_ENTRY _ZTI8S19378C2[];
extern  VTBL_ENTRY _ZTV8S19378C2[];
static Base_Class bases_S19378C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19378C3,    ABISELECT(16,8), //bcp->offset
    9, //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},
  {&cd_S19378C3,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19378C2,    ABISELECT(40,20), //bcp->offset
    17, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19378C7[];
extern void _ZN8S19378C73v13Ev();
extern void _ZN8S19378C73v14Ev();
extern void _ZN8S19378C73v15Ev();
extern void _ZN8S19378C73v16Ev();
extern void _ZN8S19378C73v17Ev();
extern void _ZN8S19378C32v6Ev();
extern void _ZN8S19378C32v7Ev();
extern void _ZN8S19378C32v8Ev();
extern void _ZN8S19378C32v6Ev();
extern void _ZN8S19378C32v7Ev();
extern void _ZN8S19378C32v8Ev();
extern void _ZN8S19378C22v9Ev();
extern void _ZN8S19378C23v10Ev();
extern void _ZN8S19378C23v11Ev();
extern void _ZN8S19378C23v12Ev();
static  VTBL_ENTRY vtc_S19378C7[] = {
  ABISELECT(40,20),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19378C7[0]),
  (VTBL_ENTRY)&_ZN8S19378C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19378C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19378C73v15Ev,
  (VTBL_ENTRY)&_ZN8S19378C73v16Ev,
  (VTBL_ENTRY)&_ZN8S19378C73v17Ev,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19378C7[0]),
  (VTBL_ENTRY)&_ZN8S19378C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19378C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19378C32v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S19378C7[0]),
  (VTBL_ENTRY)&_ZN8S19378C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19378C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19378C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19378C22v9Ev,
  (VTBL_ENTRY)&_ZN8S19378C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19378C23v11Ev,
  (VTBL_ENTRY)&_ZN8S19378C23v12Ev,
};
extern VTBL_ENTRY _ZTV8S19378C7[];
static  VTT_ENTRY vtt_S19378C7[] = {
  {&(_ZTV8S19378C7[4]),  4,33},
  {&(_ZTV8S19378C7[14]),  14,33},
  {&(_ZTV8S19378C7[26]),  26,33},
};
extern VTBL_ENTRY _ZTI8S19378C7[];
extern  VTBL_ENTRY _ZTV8S19378C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19378C7[];
Class_Descriptor cd_S19378C7 = {  "S19378C7", // class name
  bases_S19378C7, 3,
  &(vtc_S19378C7[0]), // expected_vtbl_contents
  &(vtt_S19378C7[0]), // expected_vtt_contents
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI8S19378C7),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19378C7),33, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19378C7),3, //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  S19378C6  {
  int s19378c6f0;
  virtual void  v18(); // _ZN8S19378C63v18Ev
  virtual void  v19(); // _ZN8S19378C63v19Ev
  virtual void  v20(); // _ZN8S19378C63v20Ev
  virtual void  v21(); // _ZN8S19378C63v21Ev
  virtual void  v22(); // _ZN8S19378C63v22Ev
  virtual void  v23(); // _ZN8S19378C63v23Ev
  ~S19378C6(); // tgen
  S19378C6(); // tgen
};
//SIG(1 S19378C6) C1{ v1 v2 v3 v4 v5 v6 Fi}


void  S19378C6 ::v18(){vfunc_called(this, "_ZN8S19378C63v18Ev");}
void  S19378C6 ::v19(){vfunc_called(this, "_ZN8S19378C63v19Ev");}
void  S19378C6 ::v20(){vfunc_called(this, "_ZN8S19378C63v20Ev");}
void  S19378C6 ::v21(){vfunc_called(this, "_ZN8S19378C63v21Ev");}
void  S19378C6 ::v22(){vfunc_called(this, "_ZN8S19378C63v22Ev");}
void  S19378C6 ::v23(){vfunc_called(this, "_ZN8S19378C63v23Ev");}
S19378C6 ::~S19378C6(){ note_dtor("S19378C6", this);} // tgen
S19378C6 ::S19378C6(){ note_ctor("S19378C6", this);} // tgen

static void Test_S19378C6()
{
  extern Class_Descriptor cd_S19378C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19378C6, buf);
    S19378C6 *dp, &lv = *(dp=new (buf) S19378C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19378C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19378C6)");
    check_field_offset(lv, s19378c6f0, ABISELECT(8,4), "S19378C6.s19378c6f0");
    test_class_info(&lv, &cd_S19378C6);
    dp->~S19378C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19378C6(Test_S19378C6, "S19378C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19378C6C1Ev();
extern void _ZN8S19378C6D1Ev();
Name_Map name_map_S19378C6[] = {
  NSPAIR(_ZN8S19378C6C1Ev),
  NSPAIR(_ZN8S19378C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19378C6[];
extern void _ZN8S19378C63v18Ev();
extern void _ZN8S19378C63v19Ev();
extern void _ZN8S19378C63v20Ev();
extern void _ZN8S19378C63v21Ev();
extern void _ZN8S19378C63v22Ev();
extern void _ZN8S19378C63v23Ev();
static  VTBL_ENTRY vtc_S19378C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19378C6[0]),
  (VTBL_ENTRY)&_ZN8S19378C63v18Ev,
  (VTBL_ENTRY)&_ZN8S19378C63v19Ev,
  (VTBL_ENTRY)&_ZN8S19378C63v20Ev,
  (VTBL_ENTRY)&_ZN8S19378C63v21Ev,
  (VTBL_ENTRY)&_ZN8S19378C63v22Ev,
  (VTBL_ENTRY)&_ZN8S19378C63v23Ev,
};
extern VTBL_ENTRY _ZTI8S19378C6[];
extern  VTBL_ENTRY _ZTV8S19378C6[];
Class_Descriptor cd_S19378C6 = {  "S19378C6", // class name
  0,0,//no base classes
  &(vtc_S19378C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19378C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19378C6),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  S19378C1  : virtual S19378C2 , virtual S19378C7 {
  ::S19378C6 s19378c1f0[4];
  virtual void  v1(); // _ZN8S19378C12v1Ev
  virtual void  v2(); // _ZN8S19378C12v2Ev
  virtual void  v3(); // _ZN8S19378C12v3Ev
  virtual void  v4(); // _ZN8S19378C12v4Ev
  virtual void  v5(); // _ZN8S19378C12v5Ev
  ~S19378C1(); // tgen
  S19378C1(); // tgen
};
//SIG(1 S19378C1) C1{ VBC2{ BC3{ v6 v7 v8 FC4{ BC5{ BC6{ v31 v32 v33 v34 v35 v36 Fi} v37} v24 v25 v26 v27 v28 v29 v30}} v9 v10 v11 v12 Fp Fc} VBC7{ VBC3 VBC2 v13 v14 v15 v16 v17 FC8{}} v1 v2 v3 v4 v5 FC9{ v18 v19 v20 v21 v22 v23 Fi}[4]}


void  S19378C1 ::v1(){vfunc_called(this, "_ZN8S19378C12v1Ev");}
void  S19378C1 ::v2(){vfunc_called(this, "_ZN8S19378C12v2Ev");}
void  S19378C1 ::v3(){vfunc_called(this, "_ZN8S19378C12v3Ev");}
void  S19378C1 ::v4(){vfunc_called(this, "_ZN8S19378C12v4Ev");}
void  S19378C1 ::v5(){vfunc_called(this, "_ZN8S19378C12v5Ev");}
S19378C1 ::~S19378C1(){ note_dtor("S19378C1", this);} // tgen
S19378C1 ::S19378C1(){ note_ctor("S19378C1", this);} // tgen

static void Test_S19378C1()
{
  extern Class_Descriptor cd_S19378C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[20];
    init_test(&cd_S19378C1, buf);
    S19378C1 *dp, &lv = *(dp=new (buf) S19378C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(152,76), "sizeof(S19378C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19378C1)");
    check_base_class_offset(lv, (S19378C3*)(S19378C2*), ABISELECT(72,36), "S19378C1");
    check_base_class_offset(lv, (S19378C2*), ABISELECT(72,36), "S19378C1");
    check_base_class_offset(lv, (S19378C2*)(S19378C7*), ABISELECT(72,36), "S19378C1");
    /*is_ambiguous_... S19378C7::S19378C3 */ AMB_check_base_class_offset(lv, (S19378C3*)(S19378C7*), ABISELECT(128,64), "S19378C1");
    check_base_class_offset(lv, (S19378C7*), ABISELECT(112,56), "S19378C1");
    check_field_offset(lv, s19378c1f0, ABISELECT(8,4), "S19378C1.s19378c1f0");
    test_class_info(&lv, &cd_S19378C1);
    dp->~S19378C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19378C1(Test_S19378C1, "S19378C1", ABISELECT(152,76));

#else // __cplusplus

extern void _ZN8S19378C1C1Ev();
extern void _ZN8S19378C1D1Ev();
Name_Map name_map_S19378C1[] = {
  NSPAIR(_ZN8S19378C1C1Ev),
  NSPAIR(_ZN8S19378C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19378C3;
extern VTBL_ENTRY _ZTI8S19378C3[];
extern  VTBL_ENTRY _ZTV8S19378C3[];
extern Class_Descriptor cd_S19378C2;
extern VTBL_ENTRY _ZTI8S19378C2[];
extern  VTBL_ENTRY _ZTV8S19378C2[];
extern Class_Descriptor cd_S19378C3;
extern VTBL_ENTRY _ZTI8S19378C3[];
extern  VTBL_ENTRY _ZTV8S19378C3[];
extern Class_Descriptor cd_S19378C7;
extern VTBL_ENTRY _ZTI8S19378C7[];
extern  VTBL_ENTRY _ZTV8S19378C7[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19378C7[];
static Base_Class bases_S19378C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19378C3,    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
    1, //immediately_derived
  0, 0},
  {&cd_S19378C2,    ABISELECT(72,36), //bcp->offset
    10, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19378C3,    ABISELECT(128,64), //bcp->offset
    40, //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
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S19378C7,    ABISELECT(112,56), //bcp->offset
    26, //bcp->virtual_function_table_offset
    9, //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 _ZTI8S19378C1[];
extern void _ZN8S19378C12v1Ev();
extern void _ZN8S19378C12v2Ev();
extern void _ZN8S19378C12v3Ev();
extern void _ZN8S19378C12v4Ev();
extern void _ZN8S19378C12v5Ev();
extern void _ZN8S19378C32v6Ev();
extern void _ZN8S19378C32v7Ev();
extern void _ZN8S19378C32v8Ev();
extern void _ZN8S19378C22v9Ev();
extern void _ZN8S19378C23v10Ev();
extern void _ZN8S19378C23v11Ev();
extern void _ZN8S19378C23v12Ev();
extern void _ZN8S19378C73v13Ev();
extern void _ZN8S19378C73v14Ev();
extern void _ZN8S19378C73v15Ev();
extern void _ZN8S19378C73v16Ev();
extern void _ZN8S19378C73v17Ev();
extern void _ZN8S19378C32v6Ev();
extern void _ZN8S19378C32v7Ev();
extern void _ZN8S19378C32v8Ev();
static  VTBL_ENTRY vtc_S19378C1[] = {
  ABISELECT(128,64),
  ABISELECT(112,56),
  ABISELECT(72,36),
  0,
  (VTBL_ENTRY)&(_ZTI8S19378C1[0]),
  (VTBL_ENTRY)&_ZN8S19378C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19378C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19378C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19378C12v4Ev,
  (VTBL_ENTRY)&_ZN8S19378C12v5Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-72,-36),
  (VTBL_ENTRY)&(_ZTI8S19378C1[0]),
  (VTBL_ENTRY)&_ZN8S19378C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19378C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19378C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19378C22v9Ev,
  (VTBL_ENTRY)&_ZN8S19378C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19378C23v11Ev,
  (VTBL_ENTRY)&_ZN8S19378C23v12Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  ABISELECT(16,8),
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S19378C1[0]),
  (VTBL_ENTRY)&_ZN8S19378C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19378C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19378C73v15Ev,
  (VTBL_ENTRY)&_ZN8S19378C73v16Ev,
  (VTBL_ENTRY)&_ZN8S19378C73v17Ev,
  0,
  0,
  0,
  ABISELECT(-128,-64),
  (VTBL_ENTRY)&(_ZTI8S19378C1[0]),
  (VTBL_ENTRY)&_ZN8S19378C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19378C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19378C32v8Ev,
};
extern VTBL_ENTRY _ZTV8S19378C1[];
extern void _ZN8S19378C73v13Ev();
extern void _ZN8S19378C73v14Ev();
extern void _ZN8S19378C73v15Ev();
extern void _ZN8S19378C73v16Ev();
extern void _ZN8S19378C73v17Ev();
static  VTBL_ENTRY _tg__ZTV8S19378C7__8S19378C1[] = {
  ABISELECT(-40,-20),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19378C7[0]),
  (VTBL_ENTRY)&_ZN8S19378C73v13Ev,
  (VTBL_ENTRY)&_ZN8S19378C73v14Ev,
  (VTBL_ENTRY)&_ZN8S19378C73v15Ev,
  (VTBL_ENTRY)&_ZN8S19378C73v16Ev,
  (VTBL_ENTRY)&_ZN8S19378C73v17Ev,
};
extern void _ZN8S19378C32v6Ev();
extern void _ZN8S19378C32v7Ev();
extern void _ZN8S19378C32v8Ev();
static  VTBL_ENTRY _tg__ZTV8S19378C3__8S19378C7__8S19378C1[] = {
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S19378C7[0]),
  (VTBL_ENTRY)&_ZN8S19378C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19378C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19378C32v8Ev,
};
extern void _ZN8S19378C32v6Ev();
extern void _ZN8S19378C32v7Ev();
extern void _ZN8S19378C32v8Ev();
extern void _ZN8S19378C22v9Ev();
extern void _ZN8S19378C23v10Ev();
extern void _ZN8S19378C23v11Ev();
extern void _ZN8S19378C23v12Ev();
static  VTBL_ENTRY _tg__ZTV8S19378C2__8S19378C7__8S19378C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(40,20),
  (VTBL_ENTRY)&(_ZTI8S19378C7[0]),
  (VTBL_ENTRY)&_ZN8S19378C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19378C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19378C32v8Ev,
  (VTBL_ENTRY)&_ZN8S19378C22v9Ev,
  (VTBL_ENTRY)&_ZN8S19378C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19378C23v11Ev,
  (VTBL_ENTRY)&_ZN8S19378C23v12Ev,
};
static  VTT_ENTRY vtt_S19378C1[] = {
  {&(_ZTV8S19378C1[5]),  5,48},
  {&(_ZTV8S19378C1[19]),  19,48},
  {&(_ZTV8S19378C1[35]),  35,48},
  {&(_ZTV8S19378C1[45]),  45,48},
  {&(_tg__ZTV8S19378C7__8S19378C1[4]),  4,9},
  {&(_tg__ZTV8S19378C3__8S19378C7__8S19378C1[5]),  5,8},
  {&(_tg__ZTV8S19378C2__8S19378C7__8S19378C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S19378C1[];
extern  VTBL_ENTRY _ZTV8S19378C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19378C1[];
Class_Descriptor cd_S19378C1 = {  "S19378C1", // class name
  bases_S19378C1, 4,
  &(vtc_S19378C1[0]), // expected_vtbl_contents
  &(vtt_S19378C1[0]), // expected_vtt_contents
  ABISELECT(152,76), // object size
  NSPAIRA(_ZTI8S19378C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19378C1),48, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19378C1),7, //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  S20340C2  {
  ::S7218C6 s20340c2f0;
  virtual void  v7(); // _ZN8S20340C22v7Ev
  virtual void  v8(); // _ZN8S20340C22v8Ev
  virtual void  v9(); // _ZN8S20340C22v9Ev
  ~S20340C2(); // tgen
  S20340C2(); // tgen
};
//SIG(-1 S20340C2) C1{ v1 v2 v3 FC2{ BC3{ BC4{ v11 v12 v13 v14 v15 v16 Fi} v17} v4 v5 v6 v7 v8 v9 v10}}


void  S20340C2 ::v7(){vfunc_called(this, "_ZN8S20340C22v7Ev");}
void  S20340C2 ::v8(){vfunc_called(this, "_ZN8S20340C22v8Ev");}
void  S20340C2 ::v9(){vfunc_called(this, "_ZN8S20340C22v9Ev");}
S20340C2 ::~S20340C2(){ note_dtor("S20340C2", this);} // tgen
S20340C2 ::S20340C2(){ note_ctor("S20340C2", this);} // tgen

static void Test_S20340C2()
{
  extern Class_Descriptor cd_S20340C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20340C2, buf);
    S20340C2 *dp, &lv = *(dp=new (buf) S20340C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20340C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20340C2)");
    check_field_offset(lv, s20340c2f0, ABISELECT(8,4), "S20340C2.s20340c2f0");
    test_class_info(&lv, &cd_S20340C2);
    dp->~S20340C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20340C2(Test_S20340C2, "S20340C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20340C2C1Ev();
extern void _ZN8S20340C2D1Ev();
Name_Map name_map_S20340C2[] = {
  NSPAIR(_ZN8S20340C2C1Ev),
  NSPAIR(_ZN8S20340C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20340C2[];
extern void _ZN8S20340C22v7Ev();
extern void _ZN8S20340C22v8Ev();
extern void _ZN8S20340C22v9Ev();
static  VTBL_ENTRY vtc_S20340C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20340C2[0]),
  (VTBL_ENTRY)&_ZN8S20340C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20340C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20340C22v9Ev,
};
extern VTBL_ENTRY _ZTI8S20340C2[];
extern  VTBL_ENTRY _ZTV8S20340C2[];
Class_Descriptor cd_S20340C2 = {  "S20340C2", // class name
  0,0,//no base classes
  &(vtc_S20340C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20340C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20340C2),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  S20340C7  : S20340C2 {
  void *s20340c7f0;
  char s20340c7f1;
  virtual void  v10(); // _ZN8S20340C73v10Ev
  virtual void  v11(); // _ZN8S20340C73v11Ev
  virtual void  v12(); // _ZN8S20340C73v12Ev
  virtual void  v13(); // _ZN8S20340C73v13Ev
  ~S20340C7(); // tgen
  S20340C7(); // tgen
};
//SIG(-1 S20340C7) C1{ BC2{ v5 v6 v7 FC3{ BC4{ BC5{ v15 v16 v17 v18 v19 v20 Fi} v21} v8 v9 v10 v11 v12 v13 v14}} v1 v2 v3 v4 Fp Fc}


void  S20340C7 ::v10(){vfunc_called(this, "_ZN8S20340C73v10Ev");}
void  S20340C7 ::v11(){vfunc_called(this, "_ZN8S20340C73v11Ev");}
void  S20340C7 ::v12(){vfunc_called(this, "_ZN8S20340C73v12Ev");}
void  S20340C7 ::v13(){vfunc_called(this, "_ZN8S20340C73v13Ev");}
S20340C7 ::~S20340C7(){ note_dtor("S20340C7", this);} // tgen
S20340C7 ::S20340C7(){ note_ctor("S20340C7", this);} // tgen

static void Test_S20340C7()
{
  extern Class_Descriptor cd_S20340C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S20340C7, buf);
    S20340C7 *dp, &lv = *(dp=new (buf) S20340C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S20340C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20340C7)");
    check_base_class_offset(lv, (S20340C2*), 0, "S20340C7");
    check_field_offset(lv, s20340c7f0, ABISELECT(24,12), "S20340C7.s20340c7f0");
    check_field_offset(lv, s20340c7f1, ABISELECT(32,16), "S20340C7.s20340c7f1");
    test_class_info(&lv, &cd_S20340C7);
    dp->~S20340C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20340C7(Test_S20340C7, "S20340C7", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S20340C7C1Ev();
extern void _ZN8S20340C7D1Ev();
Name_Map name_map_S20340C7[] = {
  NSPAIR(_ZN8S20340C7C1Ev),
  NSPAIR(_ZN8S20340C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20340C2;
extern VTBL_ENTRY _ZTI8S20340C2[];
extern  VTBL_ENTRY _ZTV8S20340C2[];
static Base_Class bases_S20340C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20340C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S20340C7[];
extern void _ZN8S20340C22v7Ev();
extern void _ZN8S20340C22v8Ev();
extern void _ZN8S20340C22v9Ev();
extern void _ZN8S20340C73v10Ev();
extern void _ZN8S20340C73v11Ev();
extern void _ZN8S20340C73v12Ev();
extern void _ZN8S20340C73v13Ev();
static  VTBL_ENTRY vtc_S20340C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20340C7[0]),
  (VTBL_ENTRY)&_ZN8S20340C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20340C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20340C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20340C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20340C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20340C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20340C73v13Ev,
};
extern VTBL_ENTRY _ZTI8S20340C7[];
extern  VTBL_ENTRY _ZTV8S20340C7[];
Class_Descriptor cd_S20340C7 = {  "S20340C7", // class name
  bases_S20340C7, 1,
  &(vtc_S20340C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S20340C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S20340C7),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  S20340C6  : virtual S20340C2 , virtual S20340C7 {
  ::S3052C22_nt s20340c6f0;
  virtual void  v14(); // _ZN8S20340C63v14Ev
  virtual void  v15(); // _ZN8S20340C63v15Ev
  virtual void  v16(); // _ZN8S20340C63v16Ev
  virtual void  v17(); // _ZN8S20340C63v17Ev
  virtual void  v18(); // _ZN8S20340C63v18Ev
  ~S20340C6(); // tgen
  S20340C6(); // tgen
};
//SIG(-1 S20340C6) C1{ VBC2{ v6 v7 v8 FC3{ BC4{ BC5{ v20 v21 v22 v23 v24 v25 Fi} v26} v13 v14 v15 v16 v17 v18 v19}} VBC6{ BC2 v9 v10 v11 v12 Fp Fc} v1 v2 v3 v4 v5 FC7{}}


void  S20340C6 ::v14(){vfunc_called(this, "_ZN8S20340C63v14Ev");}
void  S20340C6 ::v15(){vfunc_called(this, "_ZN8S20340C63v15Ev");}
void  S20340C6 ::v16(){vfunc_called(this, "_ZN8S20340C63v16Ev");}
void  S20340C6 ::v17(){vfunc_called(this, "_ZN8S20340C63v17Ev");}
void  S20340C6 ::v18(){vfunc_called(this, "_ZN8S20340C63v18Ev");}
S20340C6 ::~S20340C6(){ note_dtor("S20340C6", this);} // tgen
S20340C6 ::S20340C6(){ note_ctor("S20340C6", this);} // tgen

static void Test_S20340C6()
{
  extern Class_Descriptor cd_S20340C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[11];
    init_test(&cd_S20340C6, buf);
    S20340C6 *dp, &lv = *(dp=new (buf) S20340C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,40), "sizeof(S20340C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20340C6)");
    /*is_ambiguous_... S20340C6::S20340C2 */ AMB_check_base_class_offset(lv, (S20340C2*), ABISELECT(16,8), "S20340C6");
    check_base_class_offset(lv, (S20340C2*)(S20340C7*), ABISELECT(40,20), "S20340C6");
    check_base_class_offset(lv, (S20340C7*), ABISELECT(40,20), "S20340C6");
    check_field_offset(lv, s20340c6f0, ABISELECT(8,4), "S20340C6.s20340c6f0");
    test_class_info(&lv, &cd_S20340C6);
    dp->~S20340C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20340C6(Test_S20340C6, "S20340C6", ABISELECT(80,40));

#else // __cplusplus

extern void _ZN8S20340C6C1Ev();
extern void _ZN8S20340C6D1Ev();
Name_Map name_map_S20340C6[] = {
  NSPAIR(_ZN8S20340C6C1Ev),
  NSPAIR(_ZN8S20340C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20340C2;
extern VTBL_ENTRY _ZTI8S20340C2[];
extern  VTBL_ENTRY _ZTV8S20340C2[];
extern Class_Descriptor cd_S20340C2;
extern VTBL_ENTRY _ZTI8S20340C2[];
extern  VTBL_ENTRY _ZTV8S20340C2[];
extern Class_Descriptor cd_S20340C7;
extern VTBL_ENTRY _ZTI8S20340C7[];
extern  VTBL_ENTRY _ZTV8S20340C7[];
static Base_Class bases_S20340C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20340C2,    ABISELECT(16,8), //bcp->offset
    9, //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},
  {&cd_S20340C2,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20340C7,    ABISELECT(40,20), //bcp->offset
    17, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20340C6[];
extern void _ZN8S20340C63v14Ev();
extern void _ZN8S20340C63v15Ev();
extern void _ZN8S20340C63v16Ev();
extern void _ZN8S20340C63v17Ev();
extern void _ZN8S20340C63v18Ev();
extern void _ZN8S20340C22v7Ev();
extern void _ZN8S20340C22v8Ev();
extern void _ZN8S20340C22v9Ev();
extern void _ZN8S20340C22v7Ev();
extern void _ZN8S20340C22v8Ev();
extern void _ZN8S20340C22v9Ev();
extern void _ZN8S20340C73v10Ev();
extern void _ZN8S20340C73v11Ev();
extern void _ZN8S20340C73v12Ev();
extern void _ZN8S20340C73v13Ev();
static  VTBL_ENTRY vtc_S20340C6[] = {
  ABISELECT(40,20),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20340C6[0]),
  (VTBL_ENTRY)&_ZN8S20340C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20340C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20340C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20340C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20340C63v18Ev,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20340C6[0]),
  (VTBL_ENTRY)&_ZN8S20340C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20340C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20340C22v9Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20340C6[0]),
  (VTBL_ENTRY)&_ZN8S20340C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20340C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20340C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20340C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20340C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20340C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20340C73v13Ev,
};
extern VTBL_ENTRY _ZTV8S20340C6[];
static  VTT_ENTRY vtt_S20340C6[] = {
  {&(_ZTV8S20340C6[4]),  4,33},
  {&(_ZTV8S20340C6[14]),  14,33},
  {&(_ZTV8S20340C6[26]),  26,33},
};
extern VTBL_ENTRY _ZTI8S20340C6[];
extern  VTBL_ENTRY _ZTV8S20340C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20340C6[];
Class_Descriptor cd_S20340C6 = {  "S20340C6", // class name
  bases_S20340C6, 3,
  &(vtc_S20340C6[0]), // expected_vtbl_contents
  &(vtt_S20340C6[0]), // expected_vtt_contents
  ABISELECT(80,40), // object size
  NSPAIRA(_ZTI8S20340C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20340C6),33, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20340C6),3, //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  S20340C1  : virtual S20340C2 , virtual S20340C6 {
  int s20340c1f0;
  virtual void  v1(); // _ZN8S20340C12v1Ev
  virtual void  v2(); // _ZN8S20340C12v2Ev
  virtual void  v3(); // _ZN8S20340C12v3Ev
  virtual void  v4(); // _ZN8S20340C12v4Ev
  virtual void  v5(); // _ZN8S20340C12v5Ev
  virtual void  v6(); // _ZN8S20340C12v6Ev
  ~S20340C1(); // tgen
  S20340C1(); // tgen
};
//SIG(1 S20340C1) C1{ VBC2{ v7 v8 v9 FC3{ BC4{ BC5{ v26 v27 v28 v29 v30 v31 Fi} v32} v19 v20 v21 v22 v23 v24 v25}} VBC6{ VBC2 VBC7{ BC2 v10 v11 v12 v13 Fp Fc} v14 v15 v16 v17 v18 FC8{}} v1 v2 v3 v4 v5 v6 Fi}


void  S20340C1 ::v1(){vfunc_called(this, "_ZN8S20340C12v1Ev");}
void  S20340C1 ::v2(){vfunc_called(this, "_ZN8S20340C12v2Ev");}
void  S20340C1 ::v3(){vfunc_called(this, "_ZN8S20340C12v3Ev");}
void  S20340C1 ::v4(){vfunc_called(this, "_ZN8S20340C12v4Ev");}
void  S20340C1 ::v5(){vfunc_called(this, "_ZN8S20340C12v5Ev");}
void  S20340C1 ::v6(){vfunc_called(this, "_ZN8S20340C12v6Ev");}
S20340C1 ::~S20340C1(){ note_dtor("S20340C1", this);} // tgen
S20340C1 ::S20340C1(){ note_ctor("S20340C1", this);} // tgen

static void Test_S20340C1()
{
  extern Class_Descriptor cd_S20340C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[13];
    init_test(&cd_S20340C1, buf);
    S20340C1 *dp, &lv = *(dp=new (buf) S20340C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,48), "sizeof(S20340C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20340C1)");
    /*is_ambiguous_... S20340C1::S20340C2 */ AMB_check_base_class_offset(lv, (S20340C2*), ABISELECT(16,8), "S20340C1");
    /*is_ambiguous_... S20340C6::S20340C2 */ AMB_check_base_class_offset(lv, (S20340C2*)(S20340C6*), ABISELECT(16,8), "S20340C1");
    check_base_class_offset(lv, (S20340C2*)(S20340C7*), ABISELECT(56,28), "S20340C1");
    check_base_class_offset(lv, (S20340C7*)(S20340C6*), ABISELECT(56,28), "S20340C1");
    check_base_class_offset(lv, (S20340C6*), ABISELECT(40,20), "S20340C1");
    check_field_offset(lv, s20340c1f0, ABISELECT(8,4), "S20340C1.s20340c1f0");
    test_class_info(&lv, &cd_S20340C1);
    dp->~S20340C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20340C1(Test_S20340C1, "S20340C1", ABISELECT(96,48));

#else // __cplusplus

extern void _ZN8S20340C1C1Ev();
extern void _ZN8S20340C1D1Ev();
Name_Map name_map_S20340C1[] = {
  NSPAIR(_ZN8S20340C1C1Ev),
  NSPAIR(_ZN8S20340C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20340C2;
extern VTBL_ENTRY _ZTI8S20340C2[];
extern  VTBL_ENTRY _ZTV8S20340C2[];
extern Class_Descriptor cd_S20340C2;
extern VTBL_ENTRY _ZTI8S20340C2[];
extern  VTBL_ENTRY _ZTV8S20340C2[];
extern Class_Descriptor cd_S20340C7;
extern VTBL_ENTRY _ZTI8S20340C7[];
extern  VTBL_ENTRY _ZTV8S20340C7[];
extern Class_Descriptor cd_S20340C6;
extern VTBL_ENTRY _ZTI8S20340C6[];
extern  VTBL_ENTRY _ZTV8S20340C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20340C6[];
static Base_Class bases_S20340C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20340C2,    ABISELECT(16,8), //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},
  {&cd_S20340C2,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S20340C7,    ABISELECT(56,28), //bcp->offset
    33, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20340C6,    ABISELECT(40,20), //bcp->offset
    19, //bcp->virtual_function_table_offset
    9, //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 _ZTI8S20340C1[];
extern void _ZN8S20340C12v1Ev();
extern void _ZN8S20340C12v2Ev();
extern void _ZN8S20340C12v3Ev();
extern void _ZN8S20340C12v4Ev();
extern void _ZN8S20340C12v5Ev();
extern void _ZN8S20340C12v6Ev();
extern void _ZN8S20340C22v7Ev();
extern void _ZN8S20340C22v8Ev();
extern void _ZN8S20340C22v9Ev();
extern void _ZN8S20340C63v14Ev();
extern void _ZN8S20340C63v15Ev();
extern void _ZN8S20340C63v16Ev();
extern void _ZN8S20340C63v17Ev();
extern void _ZN8S20340C63v18Ev();
extern void _ZN8S20340C22v7Ev();
extern void _ZN8S20340C22v8Ev();
extern void _ZN8S20340C22v9Ev();
extern void _ZN8S20340C73v10Ev();
extern void _ZN8S20340C73v11Ev();
extern void _ZN8S20340C73v12Ev();
extern void _ZN8S20340C73v13Ev();
static  VTBL_ENTRY vtc_S20340C1[] = {
  ABISELECT(56,28),
  ABISELECT(40,20),
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S20340C1[0]),
  (VTBL_ENTRY)&_ZN8S20340C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20340C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20340C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20340C12v4Ev,
  (VTBL_ENTRY)&_ZN8S20340C12v5Ev,
  (VTBL_ENTRY)&_ZN8S20340C12v6Ev,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20340C1[0]),
  (VTBL_ENTRY)&_ZN8S20340C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20340C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20340C22v9Ev,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI8S20340C1[0]),
  (VTBL_ENTRY)&_ZN8S20340C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20340C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20340C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20340C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20340C63v18Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-56,-28),
  (VTBL_ENTRY)&(_ZTI8S20340C1[0]),
  (VTBL_ENTRY)&_ZN8S20340C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20340C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20340C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20340C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20340C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20340C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20340C73v13Ev,
};
extern VTBL_ENTRY _ZTV8S20340C1[];
extern void _ZN8S20340C63v14Ev();
extern void _ZN8S20340C63v15Ev();
extern void _ZN8S20340C63v16Ev();
extern void _ZN8S20340C63v17Ev();
extern void _ZN8S20340C63v18Ev();
static  VTBL_ENTRY _tg__ZTV8S20340C6__8S20340C1[] = {
  ABISELECT(16,8),
  ABISELECT(-24,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S20340C6[0]),
  (VTBL_ENTRY)&_ZN8S20340C63v14Ev,
  (VTBL_ENTRY)&_ZN8S20340C63v15Ev,
  (VTBL_ENTRY)&_ZN8S20340C63v16Ev,
  (VTBL_ENTRY)&_ZN8S20340C63v17Ev,
  (VTBL_ENTRY)&_ZN8S20340C63v18Ev,
};
extern void _ZN8S20340C22v7Ev();
extern void _ZN8S20340C22v8Ev();
extern void _ZN8S20340C22v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20340C2__8S20340C6__8S20340C1[] = {
  0,
  0,
  0,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S20340C6[0]),
  (VTBL_ENTRY)&_ZN8S20340C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20340C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20340C22v9Ev,
};
extern void _ZN8S20340C22v7Ev();
extern void _ZN8S20340C22v8Ev();
extern void _ZN8S20340C22v9Ev();
extern void _ZN8S20340C73v10Ev();
extern void _ZN8S20340C73v11Ev();
extern void _ZN8S20340C73v12Ev();
extern void _ZN8S20340C73v13Ev();
static  VTBL_ENTRY _tg__ZTV8S20340C7__8S20340C6__8S20340C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI8S20340C6[0]),
  (VTBL_ENTRY)&_ZN8S20340C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20340C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20340C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20340C73v10Ev,
  (VTBL_ENTRY)&_ZN8S20340C73v11Ev,
  (VTBL_ENTRY)&_ZN8S20340C73v12Ev,
  (VTBL_ENTRY)&_ZN8S20340C73v13Ev,
};
static  VTT_ENTRY vtt_S20340C1[] = {
  {&(_ZTV8S20340C1[5]),  5,49},
  {&(_ZTV8S20340C1[16]),  16,49},
  {&(_ZTV8S20340C1[28]),  28,49},
  {&(_ZTV8S20340C1[42]),  42,49},
  {&(_tg__ZTV8S20340C6__8S20340C1[4]),  4,9},
  {&(_tg__ZTV8S20340C2__8S20340C6__8S20340C1[5]),  5,8},
  {&(_tg__ZTV8S20340C7__8S20340C6__8S20340C1[9]),  9,16},
};
extern VTBL_ENTRY _ZTI8S20340C1[];
extern  VTBL_ENTRY _ZTV8S20340C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20340C1[];
Class_Descriptor cd_S20340C1 = {  "S20340C1", // class name
  bases_S20340C1, 4,
  &(vtc_S20340C1[0]), // expected_vtbl_contents
  &(vtt_S20340C1[0]), // expected_vtt_contents
  ABISELECT(96,48), // object size
  NSPAIRA(_ZTI8S20340C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20340C1),49, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20340C1),7, //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  S19152C7  : S20955C5 , S2264C28 {
};
//SIG(-1 S19152C7) C1{ BC2{ m FL Fc:0} BC3{ m}}



static void Test_S19152C7()
{
  extern Class_Descriptor cd_S19152C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2,3)];
    init_test(&cd_S19152C7, buf);
    S19152C7 &lv = *(new (buf) S19152C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S19152C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19152C7)");
    check_base_class_offset(lv, (S20955C5*), 0, "S19152C7");
    check_base_class_offset(lv, (S2264C28*), 0, "S19152C7");
    test_class_info(&lv, &cd_S19152C7);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19152C7(Test_S19152C7, "S19152C7", 8);

#else // __cplusplus

extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S19152C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19152C7[];
Class_Descriptor cd_S19152C7 = {  "S19152C7", // class name
  bases_S19152C7, 2,
  0, // no vftv
  0, //no vtt
  8, // object size
  NSPAIRA(_ZTI8S19152C7),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  S19152C5  : virtual S2264C38 , S19152C7 , virtual S2264C28 {
  int s19152c5f0;
  ~S19152C5(); // tgen
  S19152C5(); // tgen
};
//SIG(-1 S19152C5) C1{ VBC2{ m} BC3{ BC4{ m FL Fc:0} BC5{ m}} VBC5 Fi}


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

static void Test_S19152C5()
{
  extern Class_Descriptor cd_S19152C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S19152C5, buf);
    S19152C5 *dp, &lv = *(dp=new (buf) S19152C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S19152C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19152C5)");
    check_base_class_offset(lv, (S2264C38*), 0, "S19152C5");
    check_base_class_offset(lv, (S20955C5*)(S19152C7*), ABISELECT(8,4), "S19152C5");
    check_base_class_offset(lv, (S2264C28*)(S19152C7*), ABISELECT(8,4), "S19152C5");
    check_base_class_offset(lv, (S19152C7*), ABISELECT(8,4), "S19152C5");
    /*is_ambiguous_... S19152C5::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), 0, "S19152C5");
    check_field_offset(lv, s19152c5f0, ABISELECT(16,12), "S19152C5.s19152c5f0");
    test_class_info(&lv, &cd_S19152C5);
    dp->~S19152C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19152C5(Test_S19152C5, "S19152C5", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S19152C5C1Ev();
extern void _ZN8S19152C5D1Ev();
Name_Map name_map_S19152C5[] = {
  NSPAIR(_ZN8S19152C5C1Ev),
  NSPAIR(_ZN8S19152C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19152C7;
extern VTBL_ENTRY _ZTI8S19152C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S19152C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20955C5,    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_S2264C28,    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_S19152C7,    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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19152C5[];
static  VTBL_ENTRY vtc_S19152C5[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19152C5[0]),
};
extern VTBL_ENTRY _ZTV8S19152C5[];
static  VTT_ENTRY vtt_S19152C5[] = {
  {&(_ZTV8S19152C5[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19152C5[];
extern  VTBL_ENTRY _ZTV8S19152C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19152C5[];
Class_Descriptor cd_S19152C5 = {  "S19152C5", // class name
  bases_S19152C5, 5,
  &(vtc_S19152C5[0]), // expected_vtbl_contents
  &(vtt_S19152C5[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S19152C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19152C5),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19152C5),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  S19152C11  : virtual S19152C7 , virtual S20955C5 , S2264C28 {
  ~S19152C11(); // tgen
  S19152C11(); // tgen
};
//SIG(-1 S19152C11) C1{ VBC2{ BC3{ m FL Fc:0} BC4{ m}} VBC3 BC4}


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

static void Test_S19152C11()
{
  extern Class_Descriptor cd_S19152C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S19152C11, buf);
    S19152C11 *dp, &lv = *(dp=new (buf) S19152C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S19152C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19152C11)");
    check_base_class_offset(lv, (S20955C5*)(S19152C7*), ABISELECT(8,4), "S19152C11");
    check_base_class_offset(lv, (S2264C28*)(S19152C7*), ABISELECT(8,4), "S19152C11");
    check_base_class_offset(lv, (S19152C7*), ABISELECT(8,4), "S19152C11");
    /*is_ambiguous_... S19152C11::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*), ABISELECT(16,12), "S19152C11");
    /*is_ambiguous_... S19152C11::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), 0, "S19152C11");
    test_class_info(&lv, &cd_S19152C11);
    dp->~S19152C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19152C11(Test_S19152C11, "S19152C11", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN9S19152C11C1Ev();
extern void _ZN9S19152C11D1Ev();
Name_Map name_map_S19152C11[] = {
  NSPAIR(_ZN9S19152C11C1Ev),
  NSPAIR(_ZN9S19152C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19152C7;
extern VTBL_ENTRY _ZTI8S19152C7[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S19152C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    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_S2264C28,    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_S19152C7,    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_S20955C5,    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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI9S19152C11[];
static  VTBL_ENTRY vtc_S19152C11[] = {
  ABISELECT(16,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19152C11[0]),
};
extern VTBL_ENTRY _ZTV9S19152C11[];
static  VTT_ENTRY vtt_S19152C11[] = {
  {&(_ZTV9S19152C11[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19152C11[];
extern  VTBL_ENTRY _ZTV9S19152C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19152C11[];
Class_Descriptor cd_S19152C11 = {  "S19152C11", // class name
  bases_S19152C11, 5,
  &(vtc_S19152C11[0]), // expected_vtbl_contents
  &(vtt_S19152C11[0]), // expected_vtt_contents
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI9S19152C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19152C11),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19152C11),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  S19152C12  : S2264C28 , S19152C7 {
  ::S3052C22_nt s19152c12f0;
  virtual  ~S19152C12(); // _ZN9S19152C12D1Ev
  S19152C12(); // tgen
};
//SIG(-1 S19152C12) C1{ BC2{ m} BC3{ BC4{ m FL Fc:0} BC2} vd FC5{}}


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

static void Test_S19152C12()
{
  extern Class_Descriptor cd_S19152C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S19152C12, buf);
    S19152C12 *dp, &lv = *(dp=new (buf) S19152C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S19152C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19152C12)");
    /*is_ambiguous_... S19152C12::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), 0, "S19152C12");
    check_base_class_offset(lv, (S20955C5*)(S19152C7*), ABISELECT(8,4), "S19152C12");
    check_base_class_offset(lv, (S2264C28*)(S19152C7*), ABISELECT(8,4), "S19152C12");
    check_base_class_offset(lv, (S19152C7*), ABISELECT(8,4), "S19152C12");
    check_field_offset(lv, s19152c12f0, ABISELECT(16,12), "S19152C12.s19152c12f0");
    test_class_info(&lv, &cd_S19152C12);
    dp->~S19152C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19152C12(Test_S19152C12, "S19152C12", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN9S19152C12C1Ev();
extern void _ZN9S19152C12D1Ev();
Name_Map name_map_S19152C12[] = {
  NSPAIR(_ZN9S19152C12C1Ev),
  NSPAIR(_ZN9S19152C12D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19152C7;
extern VTBL_ENTRY _ZTI8S19152C7[];
static Base_Class bases_S19152C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20955C5,    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_S2264C28,    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_S19152C7,    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 _ZTI9S19152C12[];
extern void _ZN9S19152C12D1Ev();
extern void _ZN9S19152C12D0Ev();
static  VTBL_ENTRY vtc_S19152C12[] = {
  0,
  (VTBL_ENTRY)&(_ZTI9S19152C12[0]),
  (VTBL_ENTRY)&_ZN9S19152C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19152C12D0Ev,
};
extern VTBL_ENTRY _ZTI9S19152C12[];
extern  VTBL_ENTRY _ZTV9S19152C12[];
Class_Descriptor cd_S19152C12 = {  "S19152C12", // class name
  bases_S19152C12, 4,
  &(vtc_S19152C12[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI9S19152C12),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19152C12),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  S19152C10  : virtual S19152C11 , S19152C12 {
  int s19152c10f0[8];
  ~S19152C10(); // tgen
  S19152C10(); // tgen
};
//SIG(-1 S19152C10) C1{ VBC2{ VBC3{ BC4{ m FL Fc:0} BC5{ m}} VBC4 BC5} BC6{ BC5 BC3 vd FC7{}} Fi[8]}


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

static void Test_S19152C10()
{
  extern Class_Descriptor cd_S19152C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,18)];
    init_test(&cd_S19152C10, buf);
    S19152C10 *dp, &lv = *(dp=new (buf) S19152C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,68), "sizeof(S19152C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19152C10)");
    /*is_ambiguous_... S19152C10::S19152C7 */ AMB_check_base_class_offset(lv, (S20955C5*)(S19152C7*), ABISELECT(64,52), "S19152C10");
    /*is_ambiguous_... S19152C10::S19152C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19152C7*), ABISELECT(64,52), "S19152C10");
    check_base_class_offset(lv, (S19152C7*)(S19152C11*), ABISELECT(64,52), "S19152C10");
    /*is_ambiguous_... S19152C11::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S19152C11*), ABISELECT(72,60), "S19152C10");
    /*is_ambiguous_... S19152C11::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19152C11*), ABISELECT(56,48), "S19152C10");
    check_base_class_offset(lv, (S19152C11*), ABISELECT(56,48), "S19152C10");
    /*is_ambiguous_... S19152C12::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19152C12*), 0, "S19152C10");
    check_base_class_offset(lv, (S20955C5*)(S19152C7*)(S19152C12*), ABISELECT(8,4), "S19152C10");
    check_base_class_offset(lv, (S2264C28*)(S19152C7*)(S19152C12*), ABISELECT(8,4), "S19152C10");
    check_base_class_offset(lv, (S19152C7*)(S19152C12*), ABISELECT(8,4), "S19152C10");
    check_base_class_offset(lv, (S19152C12*), 0, "S19152C10");
    check_field_offset(lv, s19152c10f0, ABISELECT(20,16), "S19152C10.s19152c10f0");
    test_class_info(&lv, &cd_S19152C10);
    dp->~S19152C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19152C10(Test_S19152C10, "S19152C10", ABISELECT(80,68));

#else // __cplusplus

extern void _ZN9S19152C10C1Ev();
extern void _ZN9S19152C10D1Ev();
Name_Map name_map_S19152C10[] = {
  NSPAIR(_ZN9S19152C10C1Ev),
  NSPAIR(_ZN9S19152C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19152C7;
extern VTBL_ENTRY _ZTI8S19152C7[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19152C11;
extern VTBL_ENTRY _ZTI9S19152C11[];
extern  VTBL_ENTRY _ZTV9S19152C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19152C11[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19152C7;
extern VTBL_ENTRY _ZTI8S19152C7[];
extern Class_Descriptor cd_S19152C12;
extern VTBL_ENTRY _ZTI9S19152C12[];
extern  VTBL_ENTRY _ZTV9S19152C12[];
static Base_Class bases_S19152C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(64,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(64,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
    2, //immediately_derived
  0, 0},
  {&cd_S19152C7,    ABISELECT(64,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
    5, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(72,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
    5, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(56,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
    5, //immediately_derived
  0, 0},
  {&cd_S19152C11,    ABISELECT(56,48), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C28,    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
    9, //immediately_derived
  0, 0},
  {&cd_S19152C7,    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
    10, //immediately_derived
  0, 0},
  {&cd_S19152C12,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI9S19152C10[];
extern void _ZN9S19152C10D1Ev();
extern void _ZN9S19152C10D0Ev();
static  VTBL_ENTRY vtc_S19152C10[] = {
  ABISELECT(72,60),
  ABISELECT(64,52),
  ABISELECT(56,48),
  0,
  (VTBL_ENTRY)&(_ZTI9S19152C10[0]),
  (VTBL_ENTRY)&_ZN9S19152C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19152C10D0Ev,
  ABISELECT(16,12),
  ABISELECT(8,4),
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI9S19152C10[0]),
};
extern VTBL_ENTRY _ZTV9S19152C10[];
static  VTBL_ENTRY _tg__ZTV9S19152C11__9S19152C10[] = {
  ABISELECT(16,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19152C11[0]),
};
static  VTT_ENTRY vtt_S19152C10[] = {
  {&(_ZTV9S19152C10[5]),  5,11},
  {&(_ZTV9S19152C10[11]),  11,11},
  {&(_tg__ZTV9S19152C11__9S19152C10[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19152C10[];
extern  VTBL_ENTRY _ZTV9S19152C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19152C10[];
Class_Descriptor cd_S19152C10 = {  "S19152C10", // class name
  bases_S19152C10, 11,
  &(vtc_S19152C10[0]), // expected_vtbl_contents
  &(vtt_S19152C10[0]), // expected_vtt_contents
  ABISELECT(80,68), // object size
  NSPAIRA(_ZTI9S19152C10),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV9S19152C10),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19152C10),3, //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  S19152C4  : virtual S19152C5 , virtual S19152C10 {
  virtual  ~S19152C4(); // _ZN8S19152C4D2Ev
  S19152C4(); // tgen
};
//SIG(-1 S19152C4) C1{ VBC2{ VBC3{ m} BC4{ BC5{ m FL Fc:0} BC6{ m}} VBC6 Fi} VBC7{ VBC8{ VBC4 VBC5 BC6} BC9{ BC6 BC4 vd FC10{}} Fi[8]} vd}


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

static void Test_S19152C4()
{
  extern Class_Descriptor cd_S19152C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,23)];
    init_test(&cd_S19152C4, buf);
    S19152C4 *dp, &lv = *(dp=new (buf) S19152C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,88), "sizeof(S19152C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19152C4)");
    check_base_class_offset(lv, (S2264C38*)(S19152C5*), 0, "S19152C4");
    check_base_class_offset(lv, (S20955C5*)(S19152C7*)(S19152C5*), ABISELECT(16,8), "S19152C4");
    check_base_class_offset(lv, (S2264C28*)(S19152C7*)(S19152C5*), ABISELECT(16,8), "S19152C4");
    check_base_class_offset(lv, (S19152C7*)(S19152C5*), ABISELECT(16,8), "S19152C4");
    /*is_ambiguous_... S19152C5::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19152C5*), ABISELECT(28,20), "S19152C4");
    check_base_class_offset(lv, (S19152C5*), ABISELECT(8,4), "S19152C4");
    /*is_ambiguous_... S19152C4::S19152C7 */ AMB_check_base_class_offset(lv, (S20955C5*)(S19152C7*), ABISELECT(88,72), "S19152C4");
    /*is_ambiguous_... S19152C4::S19152C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19152C7*), ABISELECT(88,72), "S19152C4");
    check_base_class_offset(lv, (S19152C7*)(S19152C11*), ABISELECT(88,72), "S19152C4");
    /*is_ambiguous_... S19152C11::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S19152C11*), ABISELECT(96,80), "S19152C4");
    /*is_ambiguous_... S19152C11::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19152C11*), 0, "S19152C4");
    check_base_class_offset(lv, (S19152C11*)(S19152C10*), 0, "S19152C4");
    /*is_ambiguous_... S19152C12::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19152C12*)(S19152C10*), ABISELECT(32,24), "S19152C4");
    check_base_class_offset(lv, (S20955C5*)(S19152C7*)(S19152C12*)(S19152C10*), ABISELECT(40,28), "S19152C4");
    check_base_class_offset(lv, (S2264C28*)(S19152C7*)(S19152C12*)(S19152C10*), ABISELECT(40,28), "S19152C4");
    check_base_class_offset(lv, (S19152C7*)(S19152C12*)(S19152C10*), ABISELECT(40,28), "S19152C4");
    check_base_class_offset(lv, (S19152C12*)(S19152C10*), ABISELECT(32,24), "S19152C4");
    check_base_class_offset(lv, (S19152C10*), ABISELECT(32,24), "S19152C4");
    test_class_info(&lv, &cd_S19152C4);
    dp->~S19152C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19152C4(Test_S19152C4, "S19152C4", ABISELECT(104,88));

#else // __cplusplus

extern void _ZN8S19152C4C1Ev();
extern void _ZN8S19152C4D2Ev();
Name_Map name_map_S19152C4[] = {
  NSPAIR(_ZN8S19152C4C1Ev),
  NSPAIR(_ZN8S19152C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19152C7;
extern VTBL_ENTRY _ZTI8S19152C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19152C5;
extern VTBL_ENTRY _ZTI8S19152C5[];
extern  VTBL_ENTRY _ZTV8S19152C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19152C5[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19152C7;
extern VTBL_ENTRY _ZTI8S19152C7[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19152C11;
extern VTBL_ENTRY _ZTI9S19152C11[];
extern  VTBL_ENTRY _ZTV9S19152C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19152C11[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19152C7;
extern VTBL_ENTRY _ZTI8S19152C7[];
extern Class_Descriptor cd_S19152C12;
extern VTBL_ENTRY _ZTI9S19152C12[];
extern  VTBL_ENTRY _ZTV9S19152C12[];
extern Class_Descriptor cd_S19152C10;
extern VTBL_ENTRY _ZTI9S19152C10[];
extern  VTBL_ENTRY _ZTV9S19152C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19152C10[];
static Base_Class bases_S19152C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    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_S2264C28,    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_S19152C7,    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_S2264C28,    ABISELECT(28,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, 1},
  {&cd_S19152C5,    ABISELECT(8,4), //bcp->offset
    11, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20955C5,    ABISELECT(88,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
    8, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(88,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
    8, //immediately_derived
  0, 0},
  {&cd_S19152C7,    ABISELECT(88,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
    11, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(96,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
    11, //immediately_derived
  0, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19152C11,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    17, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(32,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
    16, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(40,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
    15, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(40,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
    15, //immediately_derived
  0, 0},
  {&cd_S19152C7,    ABISELECT(40,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
    16, //immediately_derived
  0, 0},
  {&cd_S19152C12,    ABISELECT(32,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
    3, //init_seq
    17, //immediately_derived
  0, 0},
  {&cd_S19152C10,    ABISELECT(32,24), //bcp->offset
    15, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19152C4[];
extern void _ZN8S19152C4D1Ev();
extern void _ZN8S19152C4D0Ev();
extern void ABISELECT(_ZTv0_n48_N8S19152C4D1Ev,_ZTv0_n24_N8S19152C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S19152C4D1Ev,_ZThn24_N8S19152C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19152C4D0Ev,_ZTv0_n24_N8S19152C4D0Ev)();
extern void ABISELECT(_ZThn32_N8S19152C4D0Ev,_ZThn24_N8S19152C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19152C4[] = {
  0,
  ABISELECT(32,24),
  ABISELECT(28,20),
  0,
  ABISELECT(8,4),
  ABISELECT(96,80),
  ABISELECT(88,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19152C4[0]),
  (VTBL_ENTRY)&_ZN8S19152C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19152C4D0Ev,
  ABISELECT(20,16),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19152C4[0]),
  ABISELECT(-32,-24),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S19152C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19152C4D1Ev,_ZTv0_n24_N8S19152C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19152C4D0Ev,_ZTv0_n24_N8S19152C4D0Ev),
};
extern VTBL_ENTRY _ZTV8S19152C4[];
static  VTBL_ENTRY _tg__ZTV8S19152C5__8S19152C4[] = {
  ABISELECT(20,16),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19152C5[0]),
};
extern void _ZN9S19152C10D1Ev();
extern void _ZN9S19152C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19152C10__8S19152C4[] = {
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S19152C10[0]),
  (VTBL_ENTRY)&_ZN9S19152C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19152C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19152C11__9S19152C10__8S19152C4[] = {
  ABISELECT(96,80),
  ABISELECT(88,72),
  ABISELECT(32,24),
  (VTBL_ENTRY)&(_ZTI9S19152C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19152C11__8S19152C4[] = {
  ABISELECT(96,80),
  ABISELECT(88,72),
  0,
  (VTBL_ENTRY)&(_ZTI9S19152C11[0]),
};
static  VTT_ENTRY vtt_S19152C4[] = {
  {&(_ZTV8S19152C4[9]),  9,23},
  {&(_ZTV8S19152C4[15]),  15,23},
  {&(_ZTV8S19152C4[21]),  21,23},
  {&(_ZTV8S19152C4[9]),  9,23},
  {&(_tg__ZTV8S19152C5__8S19152C4[4]),  4,4},
  {&(_tg__ZTV9S19152C10__8S19152C4[5]),  5,7},
  {&(_tg__ZTV9S19152C11__9S19152C10__8S19152C4[4]),  4,4},
  {&(_tg__ZTV9S19152C11__8S19152C4[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19152C4[];
extern  VTBL_ENTRY _ZTV8S19152C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19152C4[];
static VTBL_ENTRY alt_thunk_names224[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19152C4D0Ev,_ZTv0_n24_N8S19152C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19152C4D0Ev,_ZThn24_N8S19152C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19152C4D1Ev,_ZTv0_n24_N8S19152C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19152C4D1Ev,_ZThn24_N8S19152C4D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19152C4 = {  "S19152C4", // class name
  bases_S19152C4, 18,
  &(vtc_S19152C4[0]), // expected_vtbl_contents
  &(vtt_S19152C4[0]), // expected_vtt_contents
  ABISELECT(104,88), // object size
  NSPAIRA(_ZTI8S19152C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19152C4),23, //virtual function table var
  9, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19152C4),8, //virtual table table var
  4, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names224,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19152C14  : virtual S20955C5 {
  ~S19152C14(); // tgen
  S19152C14(); // tgen
};
//SIG(-1 S19152C14) C1{ VBC2{ m FL Fc:0}}


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

static void Test_S19152C14()
{
  extern Class_Descriptor cd_S19152C14;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S19152C14, buf);
    S19152C14 *dp, &lv = *(dp=new (buf) S19152C14());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S19152C14)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19152C14)");
    check_base_class_offset(lv, (S20955C5*), ABISELECT(8,4), "S19152C14");
    test_class_info(&lv, &cd_S19152C14);
    dp->~S19152C14();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19152C14(Test_S19152C14, "S19152C14", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN9S19152C14C1Ev();
extern void _ZN9S19152C14D1Ev();
Name_Map name_map_S19152C14[] = {
  NSPAIR(_ZN9S19152C14C1Ev),
  NSPAIR(_ZN9S19152C14D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
static Base_Class bases_S19152C14[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    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},
  {0}};
extern VTBL_ENTRY _ZTI9S19152C14[];
static  VTBL_ENTRY vtc_S19152C14[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19152C14[0]),
};
extern VTBL_ENTRY _ZTV9S19152C14[];
static  VTT_ENTRY vtt_S19152C14[] = {
  {&(_ZTV9S19152C14[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19152C14[];
extern  VTBL_ENTRY _ZTV9S19152C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19152C14[];
Class_Descriptor cd_S19152C14 = {  "S19152C14", // class name
  bases_S19152C14, 1,
  &(vtc_S19152C14[0]), // expected_vtbl_contents
  &(vtt_S19152C14[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI9S19152C14),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19152C14),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19152C14),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  S19152C2  : S2398C25_nt , virtual S19152C4 , S19152C14 {
  virtual  ~S19152C2(); // _ZN8S19152C2D2Ev
  S19152C2(); // tgen
};
//SIG(-1 S19152C2) C1{ BC2{ m Fi Fc} VBC3{ VBC4{ VBC5{ m} BC6{ BC7{ m FL Fc:0} BC8{ m}} VBC8 Fi} VBC9{ VBC10{ VBC6 VBC7 BC8} BC11{ BC8 BC6 vd FC12{}} Fi[8]} vd} BC13{ VBC7} vd}


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

static void Test_S19152C2()
{
  extern Class_Descriptor cd_S19152C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(16,25)];
    init_test(&cd_S19152C2, buf);
    S19152C2 *dp, &lv = *(dp=new (buf) S19152C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(120,96), "sizeof(S19152C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19152C2)");
    check_base_class_offset(lv, (S2398C25_nt*), ABISELECT(8,4), "S19152C2");
    check_base_class_offset(lv, (S2264C38*)(S19152C5*), 0, "S19152C2");
    check_base_class_offset(lv, (S20955C5*)(S19152C7*)(S19152C5*), ABISELECT(32,20), "S19152C2");
    check_base_class_offset(lv, (S2264C28*)(S19152C7*)(S19152C5*), ABISELECT(32,20), "S19152C2");
    check_base_class_offset(lv, (S19152C7*)(S19152C5*), ABISELECT(32,20), "S19152C2");
    /*is_ambiguous_... S19152C5::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19152C5*), 0, "S19152C2");
    check_base_class_offset(lv, (S19152C5*)(S19152C4*), ABISELECT(24,16), "S19152C2");
    /*is_ambiguous_... S19152C2::S19152C7 */ AMB_check_base_class_offset(lv, (S20955C5*)(S19152C7*), ABISELECT(104,80), "S19152C2");
    /*is_ambiguous_... S19152C2::S19152C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19152C7*), ABISELECT(104,80), "S19152C2");
    check_base_class_offset(lv, (S19152C7*)(S19152C11*), ABISELECT(104,80), "S19152C2");
    /*is_ambiguous_... S19152C11::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S19152C11*), ABISELECT(112,88), "S19152C2");
    check_base_class_offset(lv, (S20955C5*)(S19152C14*), ABISELECT(112,88), "S19152C2");
    /*is_ambiguous_... S19152C11::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19152C11*), ABISELECT(16,12), "S19152C2");
    check_base_class_offset(lv, (S19152C11*)(S19152C10*), ABISELECT(16,12), "S19152C2");
    /*is_ambiguous_... S19152C12::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19152C12*)(S19152C10*), ABISELECT(48,32), "S19152C2");
    check_base_class_offset(lv, (S20955C5*)(S19152C7*)(S19152C12*)(S19152C10*), ABISELECT(56,36), "S19152C2");
    check_base_class_offset(lv, (S2264C28*)(S19152C7*)(S19152C12*)(S19152C10*), ABISELECT(56,36), "S19152C2");
    check_base_class_offset(lv, (S19152C7*)(S19152C12*)(S19152C10*), ABISELECT(56,36), "S19152C2");
    check_base_class_offset(lv, (S19152C12*)(S19152C10*), ABISELECT(48,32), "S19152C2");
    check_base_class_offset(lv, (S19152C10*)(S19152C4*), ABISELECT(48,32), "S19152C2");
    check_base_class_offset(lv, (S19152C4*), ABISELECT(16,12), "S19152C2");
    check_base_class_offset(lv, (S19152C14*), 0, "S19152C2");
    test_class_info(&lv, &cd_S19152C2);
    dp->~S19152C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19152C2(Test_S19152C2, "S19152C2", ABISELECT(120,96));

#else // __cplusplus

extern void _ZN8S19152C2C1Ev();
extern void _ZN8S19152C2D2Ev();
Name_Map name_map_S19152C2[] = {
  NSPAIR(_ZN8S19152C2C1Ev),
  NSPAIR(_ZN8S19152C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C25_nt;
extern VTBL_ENTRY _ZTI11S2398C25_nt[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19152C7;
extern VTBL_ENTRY _ZTI8S19152C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19152C5;
extern VTBL_ENTRY _ZTI8S19152C5[];
extern  VTBL_ENTRY _ZTV8S19152C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19152C5[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19152C7;
extern VTBL_ENTRY _ZTI8S19152C7[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19152C11;
extern VTBL_ENTRY _ZTI9S19152C11[];
extern  VTBL_ENTRY _ZTV9S19152C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19152C11[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19152C7;
extern VTBL_ENTRY _ZTI8S19152C7[];
extern Class_Descriptor cd_S19152C12;
extern VTBL_ENTRY _ZTI9S19152C12[];
extern  VTBL_ENTRY _ZTV9S19152C12[];
extern Class_Descriptor cd_S19152C10;
extern VTBL_ENTRY _ZTI9S19152C10[];
extern  VTBL_ENTRY _ZTV9S19152C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19152C10[];
extern Class_Descriptor cd_S19152C4;
extern VTBL_ENTRY _ZTI8S19152C4[];
extern  VTBL_ENTRY _ZTV8S19152C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19152C4[];
extern Class_Descriptor cd_S19152C14;
extern VTBL_ENTRY _ZTI9S19152C14[];
extern  VTBL_ENTRY _ZTV9S19152C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19152C14[];
static Base_Class bases_S19152C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C25_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},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20955C5,    ABISELECT(32,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, 0},
  {&cd_S2264C28,    ABISELECT(32,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, 0},
  {&cd_S19152C7,    ABISELECT(32,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
    6, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19152C5,    ABISELECT(24,16), //bcp->offset
    24, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(104,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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(104,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
    9, //immediately_derived
  0, 0},
  {&cd_S19152C7,    ABISELECT(104,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
    12, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(112,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
    12, //immediately_derived
  0, 1},
  {&cd_S2264C28,    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
    12, //immediately_derived
  0, 0},
  {&cd_S19152C11,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    14, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(48,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
    17, //immediately_derived
  0, 0},
  {&cd_S20955C5,    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
    16, //immediately_derived
  0, 0},
  {&cd_S2264C28,    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
    16, //immediately_derived
  0, 0},
  {&cd_S19152C7,    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
    17, //immediately_derived
  0, 0},
  {&cd_S19152C12,    ABISELECT(48,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
    3, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19152C10,    ABISELECT(48,32), //bcp->offset
    28, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    12, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19152C4,    ABISELECT(16,12), //bcp->offset
    12, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19152C14,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S19152C2[];
extern void _ZN8S19152C2D1Ev();
extern void _ZN8S19152C2D0Ev();
extern void ABISELECT(_ZTv0_n80_N8S19152C2D1Ev,_ZTv0_n40_N8S19152C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19152C2D1Ev,_ZThn12_N8S19152C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19152C2D0Ev,_ZTv0_n40_N8S19152C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S19152C2D0Ev,_ZThn12_N8S19152C2D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19152C2D1Ev,_ZTv0_n24_N8S19152C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S19152C2D1Ev,_ZThn32_N8S19152C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19152C2D0Ev,_ZTv0_n24_N8S19152C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S19152C2D0Ev,_ZThn32_N8S19152C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19152C2[] = {
  ABISELECT(104,80),
  ABISELECT(16,12),
  ABISELECT(48,32),
  0,
  0,
  ABISELECT(24,16),
  ABISELECT(16,12),
  ABISELECT(112,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S19152C2[0]),
  (VTBL_ENTRY)&_ZN8S19152C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19152C2D0Ev,
  ABISELECT(-16,-12),
  0,
  ABISELECT(32,20),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(8,4),
  ABISELECT(96,76),
  ABISELECT(88,68),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19152C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19152C2D1Ev,_ZTv0_n40_N8S19152C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19152C2D0Ev,_ZTv0_n40_N8S19152C2D0Ev),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19152C2[0]),
  ABISELECT(-48,-32),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-32,-20),
  ABISELECT(-48,-32),
  (VTBL_ENTRY)&(_ZTI8S19152C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19152C2D1Ev,_ZTv0_n24_N8S19152C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19152C2D0Ev,_ZTv0_n24_N8S19152C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S19152C2[];
static  VTBL_ENTRY _tg__ZTV9S19152C14__8S19152C2[] = {
  ABISELECT(112,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S19152C14[0]),
};
extern void _ZN8S19152C4D1Ev();
extern void _ZN8S19152C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19152C4__8S19152C2[] = {
  0,
  ABISELECT(32,20),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(8,4),
  ABISELECT(96,76),
  ABISELECT(88,68),
  0,
  (VTBL_ENTRY)&(_ZTI8S19152C4[0]),
  (VTBL_ENTRY)&_ZN8S19152C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19152C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19152C5__8S19152C4__8S19152C2[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19152C4[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19152C4D1Ev,_ZTv0_n24_N8S19152C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S19152C4D1Ev,_ZThn20_N8S19152C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19152C4D0Ev,_ZTv0_n24_N8S19152C4D0Ev)();
extern void ABISELECT(_ZThn32_N8S19152C4D0Ev,_ZThn20_N8S19152C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19152C10__8S19152C4__8S19152C2[] = {
  ABISELECT(-32,-20),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19152C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19152C4D1Ev,_ZTv0_n24_N8S19152C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19152C4D0Ev,_ZTv0_n24_N8S19152C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19152C5__8S19152C2[] = {
  ABISELECT(-24,-16),
  ABISELECT(-24,-16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19152C5[0]),
};
extern void _ZN9S19152C10D1Ev();
extern void _ZN9S19152C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19152C10__8S19152C2[] = {
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-32,-20),
  0,
  (VTBL_ENTRY)&(_ZTI9S19152C10[0]),
  (VTBL_ENTRY)&_ZN9S19152C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19152C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19152C11__9S19152C10__8S19152C2[] = {
  ABISELECT(96,76),
  ABISELECT(88,68),
  ABISELECT(32,20),
  (VTBL_ENTRY)&(_ZTI9S19152C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19152C11__8S19152C2[] = {
  ABISELECT(96,76),
  ABISELECT(88,68),
  0,
  (VTBL_ENTRY)&(_ZTI9S19152C11[0]),
};
static  VTT_ENTRY vtt_S19152C2[] = {
  {&(_ZTV8S19152C2[10]),  10,36},
  {&(_tg__ZTV9S19152C14__8S19152C2[3]),  3,3},
  {&(_ZTV8S19152C2[22]),  22,36},
  {&(_ZTV8S19152C2[28]),  28,36},
  {&(_ZTV8S19152C2[34]),  34,36},
  {&(_ZTV8S19152C2[22]),  22,36},
  {&(_tg__ZTV8S19152C4__8S19152C2[9]),  9,11},
  {&(_tg__ZTV8S19152C5__8S19152C4__8S19152C2[4]),  4,4},
  {&(_tg__ZTV9S19152C10__8S19152C4__8S19152C2[6]),  6,8},
  {&(_tg__ZTV8S19152C4__8S19152C2[9]),  9,11},
  {&(_tg__ZTV8S19152C5__8S19152C2[4]),  4,4},
  {&(_tg__ZTV9S19152C10__8S19152C2[5]),  5,7},
  {&(_tg__ZTV9S19152C11__9S19152C10__8S19152C2[4]),  4,4},
  {&(_tg__ZTV9S19152C11__8S19152C2[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19152C2[];
extern  VTBL_ENTRY _ZTV8S19152C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19152C2[];
static VTBL_ENTRY alt_thunk_names225[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19152C4D0Ev,_ZTv0_n24_N8S19152C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19152C4D0Ev,_ZThn20_N8S19152C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19152C4D1Ev,_ZTv0_n24_N8S19152C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19152C4D1Ev,_ZThn20_N8S19152C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19152C2D0Ev,_ZTv0_n24_N8S19152C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19152C2D0Ev,_ZThn32_N8S19152C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19152C2D1Ev,_ZTv0_n24_N8S19152C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19152C2D1Ev,_ZThn32_N8S19152C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19152C2D0Ev,_ZTv0_n40_N8S19152C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19152C2D0Ev,_ZThn12_N8S19152C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19152C2D1Ev,_ZTv0_n40_N8S19152C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19152C2D1Ev,_ZThn12_N8S19152C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19152C2 = {  "S19152C2", // class name
  bases_S19152C2, 21,
  &(vtc_S19152C2[0]), // expected_vtbl_contents
  &(vtt_S19152C2[0]), // expected_vtt_contents
  ABISELECT(120,96), // object size
  NSPAIRA(_ZTI8S19152C2),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19152C2),36, //virtual function table var
  10, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19152C2),14, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names225,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19152C15  : virtual S19152C12 {
  virtual  ~S19152C15(); // _ZN9S19152C15D2Ev
  S19152C15(); // tgen
};
//SIG(-1 S19152C15) C1{ VBC2{ BC3{ m} BC4{ BC5{ m FL Fc:0} BC3} vd FC6{}} vd}


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

static void Test_S19152C15()
{
  extern Class_Descriptor cd_S19152C15;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19152C15, buf);
    S19152C15 *dp, &lv = *(dp=new (buf) S19152C15());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19152C15)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19152C15)");
    /*is_ambiguous_... S19152C12::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19152C12*), ABISELECT(8,4), "S19152C15");
    check_base_class_offset(lv, (S20955C5*)(S19152C7*)(S19152C12*), ABISELECT(16,8), "S19152C15");
    check_base_class_offset(lv, (S2264C28*)(S19152C7*)(S19152C12*), ABISELECT(16,8), "S19152C15");
    check_base_class_offset(lv, (S19152C7*)(S19152C12*), ABISELECT(16,8), "S19152C15");
    check_base_class_offset(lv, (S19152C12*), ABISELECT(8,4), "S19152C15");
    test_class_info(&lv, &cd_S19152C15);
    dp->~S19152C15();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19152C15(Test_S19152C15, "S19152C15", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN9S19152C15C1Ev();
extern void _ZN9S19152C15D2Ev();
Name_Map name_map_S19152C15[] = {
  NSPAIR(_ZN9S19152C15C1Ev),
  NSPAIR(_ZN9S19152C15D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19152C7;
extern VTBL_ENTRY _ZTI8S19152C7[];
extern Class_Descriptor cd_S19152C12;
extern VTBL_ENTRY _ZTI9S19152C12[];
extern  VTBL_ENTRY _ZTV9S19152C12[];
static Base_Class bases_S19152C15[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    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
    4, //immediately_derived
  0, 0},
  {&cd_S20955C5,    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_S2264C28,    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_S19152C7,    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, 0},
  {&cd_S19152C12,    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 _ZTI9S19152C15[];
extern void _ZN9S19152C15D1Ev();
extern void _ZN9S19152C15D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19152C15D1Ev,_ZTv0_n12_N9S19152C15D1Ev)();
extern void ABISELECT(_ZThn8_N9S19152C15D1Ev,_ZThn4_N9S19152C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19152C15D0Ev,_ZTv0_n12_N9S19152C15D0Ev)();
extern void ABISELECT(_ZThn8_N9S19152C15D0Ev,_ZThn4_N9S19152C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19152C15[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19152C15[0]),
  (VTBL_ENTRY)&_ZN9S19152C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19152C15D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19152C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19152C15D1Ev,_ZTv0_n12_N9S19152C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19152C15D0Ev,_ZTv0_n12_N9S19152C15D0Ev),
};
extern VTBL_ENTRY _ZTV9S19152C15[];
static  VTT_ENTRY vtt_S19152C15[] = {
  {&(_ZTV9S19152C15[3]),  3,10},
  {&(_ZTV9S19152C15[8]),  8,10},
};
extern VTBL_ENTRY _ZTI9S19152C15[];
extern  VTBL_ENTRY _ZTV9S19152C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19152C15[];
static VTBL_ENTRY alt_thunk_names226[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19152C15D0Ev,_ZTv0_n12_N9S19152C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19152C15D0Ev,_ZThn4_N9S19152C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19152C15D1Ev,_ZTv0_n12_N9S19152C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19152C15D1Ev,_ZThn4_N9S19152C15D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19152C15 = {  "S19152C15", // class name
  bases_S19152C15, 5,
  &(vtc_S19152C15[0]), // expected_vtbl_contents
  &(vtt_S19152C15[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI9S19152C15),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19152C15),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19152C15),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names226,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19152C1  : virtual S19152C2 , S19152C11 , virtual S19152C15 {
  virtual  ~S19152C1(); // _ZN8S19152C1D2Ev
  S19152C1(); // tgen
};
//SIG(1 S19152C1) C1{ VBC2{ BC3{ m Fi Fc} VBC4{ VBC5{ VBC6{ m} BC7{ BC8{ m FL Fc:0} BC9{ m}} VBC9 Fi} VBC10{ VBC11{ VBC7 VBC8 BC9} BC12{ BC9 BC7 vd FC13{}} Fi[8]} vd} BC14{ VBC8} vd} BC11 VBC15{ VBC12 vd} vd}


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

static void Test_S19152C1()
{
  extern Class_Descriptor cd_S19152C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,32)];
    init_test(&cd_S19152C1, buf);
    S19152C1 *dp, &lv = *(dp=new (buf) S19152C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,124), "sizeof(S19152C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19152C1)");
    check_base_class_offset(lv, (S2398C25_nt*)(S19152C2*), ABISELECT(16,8), "S19152C1");
    check_base_class_offset(lv, (S2264C38*)(S19152C5*), 0, "S19152C1");
    check_base_class_offset(lv, (S20955C5*)(S19152C7*)(S19152C5*), ABISELECT(40,24), "S19152C1");
    check_base_class_offset(lv, (S2264C28*)(S19152C7*)(S19152C5*), ABISELECT(40,24), "S19152C1");
    check_base_class_offset(lv, (S19152C7*)(S19152C5*), ABISELECT(40,24), "S19152C1");
    /*is_ambiguous_... S19152C5::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19152C5*), ABISELECT(52,36), "S19152C1");
    check_base_class_offset(lv, (S19152C5*)(S19152C4*), ABISELECT(32,20), "S19152C1");
    /*is_ambiguous_... S19152C1::S19152C7 */ AMB_check_base_class_offset(lv, (S20955C5*)(S19152C7*), ABISELECT(112,88), "S19152C1");
    /*is_ambiguous_... S19152C1::S19152C7 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19152C7*), ABISELECT(112,88), "S19152C1");
    /*is_ambiguous_... S19152C1::S19152C11 */ AMB_check_base_class_offset(lv, (S19152C7*)(S19152C11*), ABISELECT(112,88), "S19152C1");
    /*is_ambiguous_... S19152C1::S19152C11 */ AMB_check_base_class_offset(lv, (S19152C7*)(S19152C11*), ABISELECT(112,88), "S19152C1");
    /*is_ambiguous_... S19152C1::S19152C11 */ AMB_check_base_class_offset(lv, (S20955C5*)(S19152C11*), ABISELECT(120,96), "S19152C1");
    check_base_class_offset(lv, (S20955C5*)(S19152C14*)(S19152C2*), ABISELECT(120,96), "S19152C1");
    /*is_ambiguous_... S19152C1::S19152C11 */ AMB_check_base_class_offset(lv, (S20955C5*)(S19152C11*), ABISELECT(120,96), "S19152C1");
    /*is_ambiguous_... S19152C1::S19152C11 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19152C11*), ABISELECT(24,16), "S19152C1");
    check_base_class_offset(lv, (S19152C11*)(S19152C10*), ABISELECT(24,16), "S19152C1");
    /*is_ambiguous_... S19152C12::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19152C12*)(S19152C10*), ABISELECT(56,40), "S19152C1");
    check_base_class_offset(lv, (S20955C5*)(S19152C7*)(S19152C12*)(S19152C10*), ABISELECT(64,44), "S19152C1");
    check_base_class_offset(lv, (S2264C28*)(S19152C7*)(S19152C12*)(S19152C10*), ABISELECT(64,44), "S19152C1");
    check_base_class_offset(lv, (S19152C7*)(S19152C12*)(S19152C10*), ABISELECT(64,44), "S19152C1");
    check_base_class_offset(lv, (S19152C12*)(S19152C10*), ABISELECT(56,40), "S19152C1");
    check_base_class_offset(lv, (S19152C10*)(S19152C4*), ABISELECT(56,40), "S19152C1");
    check_base_class_offset(lv, (S19152C4*)(S19152C2*), ABISELECT(24,16), "S19152C1");
    check_base_class_offset(lv, (S19152C14*)(S19152C2*), ABISELECT(8,4), "S19152C1");
    check_base_class_offset(lv, (S19152C2*), ABISELECT(8,4), "S19152C1");
    /*is_ambiguous_... S19152C1::S19152C11 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19152C11*), 0, "S19152C1");
    /*is_ambiguous_... S19152C1::S19152C11 */ AMB_check_base_class_offset(lv, (S19152C11*), 0, "S19152C1");
    /*is_ambiguous_... S19152C1::S19152C12 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19152C12*), ABISELECT(136,108), "S19152C1");
    /*is_ambiguous_... S19152C1::S19152C12 */ AMB_check_base_class_offset(lv, (S20955C5*)(S19152C7*)(S19152C12*), ABISELECT(144,112), "S19152C1");
    /*is_ambiguous_... S19152C1::S19152C12 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19152C7*)(S19152C12*), ABISELECT(144,112), "S19152C1");
    /*is_ambiguous_... S19152C1::S19152C12 */ AMB_check_base_class_offset(lv, (S19152C7*)(S19152C12*), ABISELECT(144,112), "S19152C1");
    check_base_class_offset(lv, (S19152C12*)(S19152C15*), ABISELECT(136,108), "S19152C1");
    check_base_class_offset(lv, (S19152C15*), ABISELECT(128,104), "S19152C1");
    test_class_info(&lv, &cd_S19152C1);
    dp->~S19152C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19152C1(Test_S19152C1, "S19152C1", ABISELECT(160,124));

#else // __cplusplus

extern void _ZN8S19152C1C1Ev();
extern void _ZN8S19152C1D2Ev();
Name_Map name_map_S19152C1[] = {
  NSPAIR(_ZN8S19152C1C1Ev),
  NSPAIR(_ZN8S19152C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C25_nt;
extern VTBL_ENTRY _ZTI11S2398C25_nt[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19152C7;
extern VTBL_ENTRY _ZTI8S19152C7[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19152C5;
extern VTBL_ENTRY _ZTI8S19152C5[];
extern  VTBL_ENTRY _ZTV8S19152C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19152C5[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19152C7;
extern VTBL_ENTRY _ZTI8S19152C7[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19152C11;
extern VTBL_ENTRY _ZTI9S19152C11[];
extern  VTBL_ENTRY _ZTV9S19152C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19152C11[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19152C7;
extern VTBL_ENTRY _ZTI8S19152C7[];
extern Class_Descriptor cd_S19152C12;
extern VTBL_ENTRY _ZTI9S19152C12[];
extern  VTBL_ENTRY _ZTV9S19152C12[];
extern Class_Descriptor cd_S19152C10;
extern VTBL_ENTRY _ZTI9S19152C10[];
extern  VTBL_ENTRY _ZTV9S19152C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19152C10[];
extern Class_Descriptor cd_S19152C4;
extern VTBL_ENTRY _ZTI8S19152C4[];
extern  VTBL_ENTRY _ZTV8S19152C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19152C4[];
extern Class_Descriptor cd_S19152C14;
extern VTBL_ENTRY _ZTI9S19152C14[];
extern  VTBL_ENTRY _ZTV9S19152C14[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19152C14[];
extern Class_Descriptor cd_S19152C2;
extern VTBL_ENTRY _ZTI8S19152C2[];
extern  VTBL_ENTRY _ZTV8S19152C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19152C2[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19152C11;
extern VTBL_ENTRY _ZTI9S19152C11[];
extern  VTBL_ENTRY _ZTV9S19152C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19152C11[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19152C7;
extern VTBL_ENTRY _ZTI8S19152C7[];
extern Class_Descriptor cd_S19152C12;
extern VTBL_ENTRY _ZTI9S19152C12[];
extern  VTBL_ENTRY _ZTV9S19152C12[];
extern Class_Descriptor cd_S19152C15;
extern VTBL_ENTRY _ZTI9S19152C15[];
extern  VTBL_ENTRY _ZTV9S19152C15[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19152C15[];
static Base_Class bases_S19152C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C25_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
    21, //immediately_derived
  0, 0},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S20955C5,    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, 0},
  {&cd_S2264C28,    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, 0},
  {&cd_S19152C7,    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
    6, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(52,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
    6, //immediately_derived
  0, 1},
  {&cd_S19152C5,    ABISELECT(32,20), //bcp->offset
    40, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    20, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(112,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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(112,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
    9, //immediately_derived
  0, 0},
  {&cd_S19152C7,    ABISELECT(112,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
    12, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(120,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
    12, //immediately_derived
  0, 1},
  {&cd_S2264C28,    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
    12, //immediately_derived
  0, 0},
  {&cd_S19152C11,    ABISELECT(24,16), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    7, //bcp->index_in_construction_vtbl_array
    23, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    18, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(56,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
    17, //immediately_derived
  0, 0},
  {&cd_S20955C5,    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
    16, //immediately_derived
  0, 0},
  {&cd_S2264C28,    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
    16, //immediately_derived
  0, 0},
  {&cd_S19152C7,    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
    17, //immediately_derived
  0, 0},
  {&cd_S19152C12,    ABISELECT(56,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
    3, //init_seq
    18, //immediately_derived
  0, 0},
  {&cd_S19152C10,    ABISELECT(56,40), //bcp->offset
    44, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    21, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    19, //immediately_derived
  0, 1},
  {&cd_S19152C4,    ABISELECT(24,16), //bcp->offset
    28, //bcp->virtual_function_table_offset
    10, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    16, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    21, //immediately_derived
  0, 1},
  {&cd_S19152C14,    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
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    6, //init_seq
    21, //immediately_derived
  0, 0},
  {&cd_S19152C2,    ABISELECT(8,4), //bcp->offset
    15, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19152C11,    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
    10, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C28,    ABISELECT(136,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
    28, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(144,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
    27, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(144,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
    27, //immediately_derived
  0, 0},
  {&cd_S19152C7,    ABISELECT(144,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
    28, //immediately_derived
  0, 0},
  {&cd_S19152C12,    ABISELECT(136,108), //bcp->offset
    58, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    8, //init_seq
    29, //immediately_derived
  0, 1},
  {&cd_S19152C15,    ABISELECT(128,104), //bcp->offset
    52, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    24, //bcp->base_subarray_index_in_construction_vtbl_array
    9, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19152C1[];
extern void _ZN8S19152C1D1Ev();
extern void _ZN8S19152C1D0Ev();
extern void ABISELECT(_ZTv0_n88_N8S19152C1D1Ev,_ZTv0_n44_N8S19152C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S19152C1D1Ev,_ZThn4_N8S19152C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n88_N8S19152C1D0Ev,_ZTv0_n44_N8S19152C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S19152C1D0Ev,_ZThn4_N8S19152C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19152C1D1Ev,_ZTv0_n40_N8S19152C1D1Ev)();
extern void ABISELECT(_ZThn24_N8S19152C1D1Ev,_ZThn16_N8S19152C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19152C1D0Ev,_ZTv0_n40_N8S19152C1D0Ev)();
extern void ABISELECT(_ZThn24_N8S19152C1D0Ev,_ZThn16_N8S19152C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19152C1D1Ev,_ZTv0_n24_N8S19152C1D1Ev)();
extern void ABISELECT(_ZThn56_N8S19152C1D1Ev,_ZThn40_N8S19152C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19152C1D0Ev,_ZTv0_n24_N8S19152C1D0Ev)();
extern void ABISELECT(_ZThn56_N8S19152C1D0Ev,_ZThn40_N8S19152C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19152C1D1Ev,_ZTv0_n16_N8S19152C1D1Ev)();
extern void ABISELECT(_ZThn128_N8S19152C1D1Ev,_ZThn104_N8S19152C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n32_N8S19152C1D0Ev,_ZTv0_n16_N8S19152C1D0Ev)();
extern void ABISELECT(_ZThn128_N8S19152C1D0Ev,_ZThn104_N8S19152C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19152C1D1Ev,_ZTv0_n12_N8S19152C1D1Ev)();
extern void ABISELECT(_ZThn136_N8S19152C1D1Ev,_ZThn108_N8S19152C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19152C1D0Ev,_ZTv0_n12_N8S19152C1D0Ev)();
extern void ABISELECT(_ZThn136_N8S19152C1D0Ev,_ZThn108_N8S19152C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19152C1[] = {
  ABISELECT(136,108),
  ABISELECT(128,104),
  ABISELECT(24,16),
  ABISELECT(56,40),
  ABISELECT(52,36),
  0,
  ABISELECT(32,20),
  ABISELECT(24,16),
  ABISELECT(8,4),
  ABISELECT(120,96),
  ABISELECT(112,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S19152C1[0]),
  (VTBL_ENTRY)&_ZN8S19152C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19152C1D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(104,84),
  ABISELECT(16,12),
  ABISELECT(48,36),
  ABISELECT(44,32),
  ABISELECT(-8,-4),
  ABISELECT(24,16),
  ABISELECT(16,12),
  ABISELECT(112,92),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19152C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19152C1D1Ev,_ZTv0_n44_N8S19152C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n88_N8S19152C1D0Ev,_ZTv0_n44_N8S19152C1D0Ev),
  ABISELECT(-24,-16),
  0,
  ABISELECT(32,24),
  ABISELECT(28,20),
  ABISELECT(-24,-16),
  ABISELECT(8,4),
  ABISELECT(96,80),
  ABISELECT(88,72),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19152C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19152C1D1Ev,_ZTv0_n40_N8S19152C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19152C1D0Ev,_ZTv0_n40_N8S19152C1D0Ev),
  ABISELECT(20,16),
  ABISELECT(-32,-20),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S19152C1[0]),
  ABISELECT(-56,-40),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-32,-24),
  ABISELECT(-56,-40),
  (VTBL_ENTRY)&(_ZTI8S19152C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19152C1D1Ev,_ZTv0_n24_N8S19152C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19152C1D0Ev,_ZTv0_n24_N8S19152C1D0Ev),
  ABISELECT(-128,-104),
  ABISELECT(8,4),
  ABISELECT(-128,-104),
  (VTBL_ENTRY)&(_ZTI8S19152C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19152C1D1Ev,_ZTv0_n16_N8S19152C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n32_N8S19152C1D0Ev,_ZTv0_n16_N8S19152C1D0Ev),
  ABISELECT(-136,-108),
  ABISELECT(-136,-108),
  (VTBL_ENTRY)&(_ZTI8S19152C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19152C1D1Ev,_ZTv0_n12_N8S19152C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19152C1D0Ev,_ZTv0_n12_N8S19152C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19152C1[];
static  VTBL_ENTRY _tg__ZTV9S19152C11__A__8S19152C1[] = {
  ABISELECT(120,96),
  ABISELECT(112,88),
  0,
  (VTBL_ENTRY)&(_ZTI9S19152C11[0]),
};
extern void _ZN8S19152C2D1Ev();
extern void _ZN8S19152C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19152C2__8S19152C1[] = {
  ABISELECT(104,84),
  ABISELECT(16,12),
  ABISELECT(48,36),
  ABISELECT(44,32),
  ABISELECT(-8,-4),
  ABISELECT(24,16),
  ABISELECT(16,12),
  ABISELECT(112,92),
  0,
  (VTBL_ENTRY)&(_ZTI8S19152C2[0]),
  (VTBL_ENTRY)&_ZN8S19152C2D1Ev,
  (VTBL_ENTRY)&_ZN8S19152C2D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19152C148S19152C2__8S19152C1[] = {
  ABISELECT(112,92),
  0,
  (VTBL_ENTRY)&(_ZTI9S19152C14[0]),
};
extern void ABISELECT(_ZTv0_n80_N8S19152C2D1Ev,_ZTv0_n40_N8S19152C2D1Ev)();
extern void ABISELECT(_ZThn16_N8S19152C2D1Ev,_ZThn12_N8S19152C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n80_N8S19152C2D0Ev,_ZTv0_n40_N8S19152C2D0Ev)();
extern void ABISELECT(_ZThn16_N8S19152C2D0Ev,_ZThn12_N8S19152C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19152C4__8S19152C2__8S19152C1[] = {
  ABISELECT(-16,-12),
  0,
  ABISELECT(32,24),
  ABISELECT(28,20),
  ABISELECT(-24,-16),
  ABISELECT(8,4),
  ABISELECT(96,80),
  ABISELECT(88,72),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19152C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19152C2D1Ev,_ZTv0_n40_N8S19152C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n80_N8S19152C2D0Ev,_ZTv0_n40_N8S19152C2D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19152C5__8S19152C2__8S19152C1[] = {
  ABISELECT(20,16),
  ABISELECT(-32,-20),
  ABISELECT(-24,-16),
  (VTBL_ENTRY)&(_ZTI8S19152C2[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19152C2D1Ev,_ZTv0_n24_N8S19152C2D1Ev)();
extern void ABISELECT(_ZThn48_N8S19152C2D1Ev,_ZThn36_N8S19152C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19152C2D0Ev,_ZTv0_n24_N8S19152C2D0Ev)();
extern void ABISELECT(_ZThn48_N8S19152C2D0Ev,_ZThn36_N8S19152C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19152C10__8S19152C2__8S19152C1[] = {
  ABISELECT(-48,-36),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-32,-24),
  ABISELECT(-48,-36),
  (VTBL_ENTRY)&(_ZTI8S19152C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19152C2D1Ev,_ZTv0_n24_N8S19152C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19152C2D0Ev,_ZTv0_n24_N8S19152C2D0Ev),
};
extern void _ZN8S19152C4D1Ev();
extern void _ZN8S19152C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19152C4__8S19152C1[] = {
  0,
  ABISELECT(32,24),
  ABISELECT(28,20),
  ABISELECT(-24,-16),
  ABISELECT(8,4),
  ABISELECT(96,80),
  ABISELECT(88,72),
  0,
  (VTBL_ENTRY)&(_ZTI8S19152C4[0]),
  (VTBL_ENTRY)&_ZN8S19152C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19152C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19152C5__8S19152C4__8S19152C1[] = {
  ABISELECT(20,16),
  ABISELECT(-32,-20),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19152C4[0]),
};
extern void ABISELECT(_ZTv0_n48_N8S19152C4D1Ev,_ZTv0_n24_N8S19152C4D1Ev)();
extern void ABISELECT(_ZThn32_N8S19152C4D1Ev,_ZThn24_N8S19152C4D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19152C4D0Ev,_ZTv0_n24_N8S19152C4D0Ev)();
extern void ABISELECT(_ZThn32_N8S19152C4D0Ev,_ZThn24_N8S19152C4D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19152C10__8S19152C4__8S19152C1[] = {
  ABISELECT(-32,-24),
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-32,-24),
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI8S19152C4[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19152C4D1Ev,_ZTv0_n24_N8S19152C4D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19152C4D0Ev,_ZTv0_n24_N8S19152C4D0Ev),
};
static  VTBL_ENTRY _tg__ZTV8S19152C5__8S19152C1[] = {
  ABISELECT(20,16),
  ABISELECT(-32,-20),
  0,
  (VTBL_ENTRY)&(_ZTI8S19152C5[0]),
};
extern void _ZN9S19152C10D1Ev();
extern void _ZN9S19152C10D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19152C10__8S19152C1[] = {
  ABISELECT(64,56),
  ABISELECT(56,48),
  ABISELECT(-32,-24),
  0,
  (VTBL_ENTRY)&(_ZTI9S19152C10[0]),
  (VTBL_ENTRY)&_ZN9S19152C10D1Ev,
  (VTBL_ENTRY)&_ZN9S19152C10D0Ev,
};
static  VTBL_ENTRY _tg__ZTV9S19152C11__9S19152C10__8S19152C1[] = {
  ABISELECT(96,80),
  ABISELECT(88,72),
  ABISELECT(32,24),
  (VTBL_ENTRY)&(_ZTI9S19152C10[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19152C11__8S19152C1[] = {
  ABISELECT(96,80),
  ABISELECT(88,72),
  0,
  (VTBL_ENTRY)&(_ZTI9S19152C11[0]),
};
extern void _ZN9S19152C15D1Ev();
extern void _ZN9S19152C15D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19152C15__8S19152C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19152C15[0]),
  (VTBL_ENTRY)&_ZN9S19152C15D1Ev,
  (VTBL_ENTRY)&_ZN9S19152C15D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19152C15D1Ev,_ZTv0_n12_N9S19152C15D1Ev)();
extern void ABISELECT(_ZThn8_N9S19152C15D1Ev,_ZThn4_N9S19152C15D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19152C15D0Ev,_ZTv0_n12_N9S19152C15D0Ev)();
extern void ABISELECT(_ZThn8_N9S19152C15D0Ev,_ZThn4_N9S19152C15D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV9S19152C12__9S19152C15__8S19152C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19152C15[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19152C15D1Ev,_ZTv0_n12_N9S19152C15D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19152C15D0Ev,_ZTv0_n12_N9S19152C15D0Ev),
};
static  VTT_ENTRY vtt_S19152C1[] = {
  {&(_ZTV8S19152C1[13]),  13,63},
  {&(_tg__ZTV9S19152C11__A__8S19152C1[4]),  4,4},
  {&(_ZTV8S19152C1[26]),  26,63},
  {&(_ZTV8S19152C1[38]),  38,63},
  {&(_ZTV8S19152C1[44]),  44,63},
  {&(_ZTV8S19152C1[50]),  50,63},
  {&(_ZTV8S19152C1[38]),  38,63},
  {&(_ZTV8S19152C1[56]),  56,63},
  {&(_ZTV8S19152C1[61]),  61,63},
  {&(_tg__ZTV8S19152C2__8S19152C1[10]),  10,12},
  {&(_tg__ZTV9S19152C148S19152C2__8S19152C1[3]),  3,3},
  {&(_tg__ZTV8S19152C4__8S19152C2__8S19152C1[10]),  10,12},
  {&(_tg__ZTV8S19152C5__8S19152C2__8S19152C1[4]),  4,4},
  {&(_tg__ZTV9S19152C10__8S19152C2__8S19152C1[6]),  6,8},
  {&(_tg__ZTV8S19152C4__8S19152C2__8S19152C1[10]),  10,12},
  {&(_tg__ZTV8S19152C4__8S19152C1[9]),  9,11},
  {&(_tg__ZTV8S19152C5__8S19152C4__8S19152C1[4]),  4,4},
  {&(_tg__ZTV9S19152C10__8S19152C4__8S19152C1[6]),  6,8},
  {&(_tg__ZTV8S19152C4__8S19152C1[9]),  9,11},
  {&(_tg__ZTV8S19152C5__8S19152C1[4]),  4,4},
  {&(_tg__ZTV9S19152C10__8S19152C1[5]),  5,7},
  {&(_tg__ZTV9S19152C11__9S19152C10__8S19152C1[4]),  4,4},
  {&(_tg__ZTV9S19152C11__8S19152C1[4]),  4,4},
  {&(_tg__ZTV9S19152C15__8S19152C1[3]),  3,5},
  {&(_tg__ZTV9S19152C12__9S19152C15__8S19152C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S19152C1[];
extern  VTBL_ENTRY _ZTV8S19152C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19152C1[];
static VTBL_ENTRY alt_thunk_names227[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19152C15D0Ev,_ZTv0_n12_N9S19152C15D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19152C15D0Ev,_ZThn4_N9S19152C15D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19152C15D1Ev,_ZTv0_n12_N9S19152C15D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19152C15D1Ev,_ZThn4_N9S19152C15D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19152C4D0Ev,_ZTv0_n24_N8S19152C4D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19152C4D0Ev,_ZThn24_N8S19152C4D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19152C4D1Ev,_ZTv0_n24_N8S19152C4D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn32_N8S19152C4D1Ev,_ZThn24_N8S19152C4D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19152C2D0Ev,_ZTv0_n24_N8S19152C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19152C2D0Ev,_ZThn36_N8S19152C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19152C2D1Ev,_ZTv0_n24_N8S19152C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn48_N8S19152C2D1Ev,_ZThn36_N8S19152C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19152C2D0Ev,_ZTv0_n40_N8S19152C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19152C2D0Ev,_ZThn12_N8S19152C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19152C2D1Ev,_ZTv0_n40_N8S19152C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19152C2D1Ev,_ZThn12_N8S19152C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19152C1D0Ev,_ZTv0_n12_N8S19152C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19152C1D0Ev,_ZThn108_N8S19152C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19152C1D1Ev,_ZTv0_n12_N8S19152C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn136_N8S19152C1D1Ev,_ZThn108_N8S19152C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19152C1D0Ev,_ZTv0_n16_N8S19152C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19152C1D0Ev,_ZThn104_N8S19152C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n32_N8S19152C1D1Ev,_ZTv0_n16_N8S19152C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn128_N8S19152C1D1Ev,_ZThn104_N8S19152C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19152C1D0Ev,_ZTv0_n24_N8S19152C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19152C1D0Ev,_ZThn40_N8S19152C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19152C1D1Ev,_ZTv0_n24_N8S19152C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn56_N8S19152C1D1Ev,_ZThn40_N8S19152C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19152C1D0Ev,_ZTv0_n40_N8S19152C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19152C1D0Ev,_ZThn16_N8S19152C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n80_N8S19152C1D1Ev,_ZTv0_n40_N8S19152C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn24_N8S19152C1D1Ev,_ZThn16_N8S19152C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19152C1D0Ev,_ZTv0_n44_N8S19152C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19152C1D0Ev,_ZThn4_N8S19152C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n88_N8S19152C1D1Ev,_ZTv0_n44_N8S19152C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S19152C1D1Ev,_ZThn4_N8S19152C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19152C1 = {  "S19152C1", // class name
  bases_S19152C1, 30,
  &(vtc_S19152C1[0]), // expected_vtbl_contents
  &(vtt_S19152C1[0]), // expected_vtt_contents
  ABISELECT(160,124), // object size
  NSPAIRA(_ZTI8S19152C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19152C1),63, //virtual function table var
  13, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19152C1),25, //virtual table table var
  10, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names227,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7053C2_nt  {
  virtual void  v6(); // _ZN10S7053C2_nt2v6Ev
  virtual void  v7(); // _ZN10S7053C2_nt2v7Ev
  virtual void  v8(); // _ZN10S7053C2_nt2v8Ev
  ~S7053C2_nt(); // tgen
  S7053C2_nt(); // tgen
};
//SIG(-1 S7053C2_nt) C1{ v1 v2 v3}


void  S7053C2_nt ::v6(){vfunc_called(this, "_ZN10S7053C2_nt2v6Ev");}
void  S7053C2_nt ::v7(){vfunc_called(this, "_ZN10S7053C2_nt2v7Ev");}
void  S7053C2_nt ::v8(){vfunc_called(this, "_ZN10S7053C2_nt2v8Ev");}
S7053C2_nt ::~S7053C2_nt(){ note_dtor("S7053C2_nt", this);} // tgen
S7053C2_nt ::S7053C2_nt(){ note_ctor("S7053C2_nt", this);} // tgen

//skip512 S7053C2_nt

#else // __cplusplus

extern void _ZN10S7053C2_ntC1Ev();
extern void _ZN10S7053C2_ntD1Ev();
Name_Map name_map_S7053C2_nt[] = {
  NSPAIR(_ZN10S7053C2_ntC1Ev),
  NSPAIR(_ZN10S7053C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7053C2_nt[];
extern void _ZN10S7053C2_nt2v6Ev();
extern void _ZN10S7053C2_nt2v7Ev();
extern void _ZN10S7053C2_nt2v8Ev();
static  VTBL_ENTRY vtc_S7053C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7053C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7053C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7053C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7053C2_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI10S7053C2_nt[];
VTBL_ENTRY *P__ZTI10S7053C2_nt = _ZTI10S7053C2_nt; 
extern  VTBL_ENTRY _ZTV10S7053C2_nt[];
Class_Descriptor cd_S7053C2_nt = {  "S7053C2_nt", // class name
  0,0,//no base classes
  &(vtc_S7053C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7053C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7053C2_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  S7053C1  : S7053C2_nt {
  ::S3052C22_nt s7053c1f0;
  ::S19089C3 s7053c1f1;
  int s7053c1f2[2];
  virtual  ~S7053C1(); // _ZN7S7053C1D1Ev
  virtual void  v1(); // _ZN7S7053C12v1Ev
  virtual void  v2(); // _ZN7S7053C12v2Ev
  virtual void  v3(); // _ZN7S7053C12v3Ev
  virtual void  v4(); // _ZN7S7053C12v4Ev
  virtual void  v5(); // _ZN7S7053C12v5Ev
  S7053C1(); // tgen
};
//SIG(1 S7053C1) C1{ BC2{ v6 v7 v8} vd v1 v2 v3 v4 v5 FC3{} FC4{ BC5{ VBC6{ BC7{ v13 v14 v15 v16 v17 v18 Fi} v19} vd v20 v21 v22 v23 v24 v25 v26 v27 Fi Fs} BC7 v9 v10 v11 v12} Fi[2]}


 S7053C1 ::~S7053C1(){ note_dtor("S7053C1", this);}
void  S7053C1 ::v1(){vfunc_called(this, "_ZN7S7053C12v1Ev");}
void  S7053C1 ::v2(){vfunc_called(this, "_ZN7S7053C12v2Ev");}
void  S7053C1 ::v3(){vfunc_called(this, "_ZN7S7053C12v3Ev");}
void  S7053C1 ::v4(){vfunc_called(this, "_ZN7S7053C12v4Ev");}
void  S7053C1 ::v5(){vfunc_called(this, "_ZN7S7053C12v5Ev");}
S7053C1 ::S7053C1(){ note_ctor("S7053C1", this);} // tgen

static void Test_S7053C1()
{
  extern Class_Descriptor cd_S7053C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,12)];
    init_test(&cd_S7053C1, buf);
    S7053C1 *dp, &lv = *(dp=new (buf) S7053C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S7053C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7053C1)");
    check_base_class_offset(lv, (S7053C2_nt*), 0, "S7053C1");
    check_field_offset(lv, s7053c1f0, ABISELECT(8,4), "S7053C1.s7053c1f0");
    check_field_offset(lv, s7053c1f1, ABISELECT(16,8), "S7053C1.s7053c1f1");
    check_field_offset(lv, s7053c1f2, ABISELECT(64,36), "S7053C1.s7053c1f2");
    test_class_info(&lv, &cd_S7053C1);
    dp->~S7053C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7053C1(Test_S7053C1, "S7053C1", ABISELECT(72,44));

#else // __cplusplus

extern void _ZN7S7053C1C1Ev();
extern void _ZN7S7053C1D1Ev();
Name_Map name_map_S7053C1[] = {
  NSPAIR(_ZN7S7053C1C1Ev),
  NSPAIR(_ZN7S7053C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7053C2_nt;
extern VTBL_ENTRY _ZTI10S7053C2_nt[];
extern  VTBL_ENTRY _ZTV10S7053C2_nt[];
static Base_Class bases_S7053C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7053C2_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 _ZTI7S7053C1[];
extern void _ZN10S7053C2_nt2v6Ev();
extern void _ZN10S7053C2_nt2v7Ev();
extern void _ZN10S7053C2_nt2v8Ev();
extern void _ZN7S7053C1D1Ev();
extern void _ZN7S7053C1D0Ev();
extern void _ZN7S7053C12v1Ev();
extern void _ZN7S7053C12v2Ev();
extern void _ZN7S7053C12v3Ev();
extern void _ZN7S7053C12v4Ev();
extern void _ZN7S7053C12v5Ev();
static  VTBL_ENTRY vtc_S7053C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7053C1[0]),
  (VTBL_ENTRY)&_ZN10S7053C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7053C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7053C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN7S7053C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7053C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7053C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7053C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7053C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7053C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7053C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S7053C1[];
extern  VTBL_ENTRY _ZTV7S7053C1[];
Class_Descriptor cd_S7053C1 = {  "S7053C1", // class name
  bases_S7053C1, 1,
  &(vtc_S7053C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,44), // object size
  NSPAIRA(_ZTI7S7053C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7053C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18572C1  {
  int s18572c1f0;
  char s18572c1f1;
  void *s18572c1f2;
  ::S19089C2 s18572c1f3;
  virtual void  v1(); // _ZN8S18572C12v1Ev
  virtual void  v2(); // _ZN8S18572C12v2Ev
  ~S18572C1(); // tgen
  S18572C1(); // tgen
};
//SIG(1 S18572C1) C1{ v1 v2 Fi Fc Fp FC2{ BC3{ BC4{ VBC5{ BC6{ v7 v8 v9 v10 v11 v12 Fi} v13} vd v14 v15 v16 v17 v18 v19 v20 v21 Fi Fs} BC6 v22 v23 v24 v25} vd v3 v4 v5 v6 FC7{}}}


void  S18572C1 ::v1(){vfunc_called(this, "_ZN8S18572C12v1Ev");}
void  S18572C1 ::v2(){vfunc_called(this, "_ZN8S18572C12v2Ev");}
S18572C1 ::~S18572C1(){ note_dtor("S18572C1", this);} // tgen
S18572C1 ::S18572C1(){ note_ctor("S18572C1", this);} // tgen

static void Test_S18572C1()
{
  extern Class_Descriptor cd_S18572C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,13)];
    init_test(&cd_S18572C1, buf);
    S18572C1 *dp, &lv = *(dp=new (buf) S18572C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,48), "sizeof(S18572C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18572C1)");
    check_field_offset(lv, s18572c1f0, ABISELECT(8,4), "S18572C1.s18572c1f0");
    check_field_offset(lv, s18572c1f1, ABISELECT(12,8), "S18572C1.s18572c1f1");
    check_field_offset(lv, s18572c1f2, ABISELECT(16,12), "S18572C1.s18572c1f2");
    check_field_offset(lv, s18572c1f3, ABISELECT(24,16), "S18572C1.s18572c1f3");
    test_class_info(&lv, &cd_S18572C1);
    dp->~S18572C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18572C1(Test_S18572C1, "S18572C1", ABISELECT(72,48));

#else // __cplusplus

extern void _ZN8S18572C1C1Ev();
extern void _ZN8S18572C1D1Ev();
Name_Map name_map_S18572C1[] = {
  NSPAIR(_ZN8S18572C1C1Ev),
  NSPAIR(_ZN8S18572C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18572C1[];
extern void _ZN8S18572C12v1Ev();
extern void _ZN8S18572C12v2Ev();
static  VTBL_ENTRY vtc_S18572C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18572C1[0]),
  (VTBL_ENTRY)&_ZN8S18572C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18572C12v2Ev,
};
extern VTBL_ENTRY _ZTI8S18572C1[];
extern  VTBL_ENTRY _ZTV8S18572C1[];
Class_Descriptor cd_S18572C1 = {  "S18572C1", // class name
  0,0,//no base classes
  &(vtc_S18572C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI8S18572C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18572C1),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  S1610C6  {
  int s1610c6f0;
  virtual void  v3(); // _ZN7S1610C62v3Ev
  virtual void  v4(); // _ZN7S1610C62v4Ev
  virtual void  v5(); // _ZN7S1610C62v5Ev
  virtual void  v6(); // _ZN7S1610C62v6Ev
  virtual void  v7(); // _ZN7S1610C62v7Ev
  virtual void  v8(); // _ZN7S1610C62v8Ev
  ~S1610C6(); // tgen
  S1610C6(); // tgen
};
//SIG(-1 S1610C6) C1{ v1 v2 v3 v4 v5 v6 Fi}


void  S1610C6 ::v3(){vfunc_called(this, "_ZN7S1610C62v3Ev");}
void  S1610C6 ::v4(){vfunc_called(this, "_ZN7S1610C62v4Ev");}
void  S1610C6 ::v5(){vfunc_called(this, "_ZN7S1610C62v5Ev");}
void  S1610C6 ::v6(){vfunc_called(this, "_ZN7S1610C62v6Ev");}
void  S1610C6 ::v7(){vfunc_called(this, "_ZN7S1610C62v7Ev");}
void  S1610C6 ::v8(){vfunc_called(this, "_ZN7S1610C62v8Ev");}
S1610C6 ::~S1610C6(){ note_dtor("S1610C6", this);} // tgen
S1610C6 ::S1610C6(){ note_ctor("S1610C6", this);} // tgen

static void Test_S1610C6()
{
  extern Class_Descriptor cd_S1610C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1610C6, buf);
    S1610C6 *dp, &lv = *(dp=new (buf) S1610C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1610C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1610C6)");
    check_field_offset(lv, s1610c6f0, ABISELECT(8,4), "S1610C6.s1610c6f0");
    test_class_info(&lv, &cd_S1610C6);
    dp->~S1610C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1610C6(Test_S1610C6, "S1610C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1610C6C1Ev();
extern void _ZN7S1610C6D1Ev();
Name_Map name_map_S1610C6[] = {
  NSPAIR(_ZN7S1610C6C1Ev),
  NSPAIR(_ZN7S1610C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S1610C6[];
extern void _ZN7S1610C62v3Ev();
extern void _ZN7S1610C62v4Ev();
extern void _ZN7S1610C62v5Ev();
extern void _ZN7S1610C62v6Ev();
extern void _ZN7S1610C62v7Ev();
extern void _ZN7S1610C62v8Ev();
static  VTBL_ENTRY vtc_S1610C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1610C6[0]),
  (VTBL_ENTRY)&_ZN7S1610C62v3Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v4Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v5Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v6Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v7Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v8Ev,
};
extern VTBL_ENTRY _ZTI7S1610C6[];
extern  VTBL_ENTRY _ZTV7S1610C6[];
Class_Descriptor cd_S1610C6 = {  "S1610C6", // class name
  0,0,//no base classes
  &(vtc_S1610C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1610C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S1610C6),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  S1610C5  : S1610C6 {
  virtual void  v9(); // _ZN7S1610C52v9Ev
  ~S1610C5(); // tgen
  S1610C5(); // tgen
};
//SIG(-1 S1610C5) C1{ BC2{ v2 v3 v4 v5 v6 v7 Fi} v1}


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

static void Test_S1610C5()
{
  extern Class_Descriptor cd_S1610C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S1610C5, buf);
    S1610C5 *dp, &lv = *(dp=new (buf) S1610C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S1610C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1610C5)");
    check_base_class_offset(lv, (S1610C6*), 0, "S1610C5");
    test_class_info(&lv, &cd_S1610C5);
    dp->~S1610C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1610C5(Test_S1610C5, "S1610C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S1610C5C1Ev();
extern void _ZN7S1610C5D1Ev();
Name_Map name_map_S1610C5[] = {
  NSPAIR(_ZN7S1610C5C1Ev),
  NSPAIR(_ZN7S1610C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1610C6;
extern VTBL_ENTRY _ZTI7S1610C6[];
extern  VTBL_ENTRY _ZTV7S1610C6[];
static Base_Class bases_S1610C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1610C6,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S1610C5[];
extern void _ZN7S1610C62v3Ev();
extern void _ZN7S1610C62v4Ev();
extern void _ZN7S1610C62v5Ev();
extern void _ZN7S1610C62v6Ev();
extern void _ZN7S1610C62v7Ev();
extern void _ZN7S1610C62v8Ev();
extern void _ZN7S1610C52v9Ev();
static  VTBL_ENTRY vtc_S1610C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S1610C5[0]),
  (VTBL_ENTRY)&_ZN7S1610C62v3Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v4Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v5Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v6Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v7Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v8Ev,
  (VTBL_ENTRY)&_ZN7S1610C52v9Ev,
};
extern VTBL_ENTRY _ZTI7S1610C5[];
extern  VTBL_ENTRY _ZTV7S1610C5[];
Class_Descriptor cd_S1610C5 = {  "S1610C5", // class name
  bases_S1610C5, 1,
  &(vtc_S1610C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S1610C5),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1610C5),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1610C4  : virtual S1610C5 {
  int s1610c4f0;
  short s1610c4f1;
  virtual  ~S1610C4(); // _ZN7S1610C4D2Ev
  virtual void  v10(); // _ZN7S1610C43v10Ev
  virtual void  v11(); // _ZN7S1610C43v11Ev
  virtual void  v12(); // _ZN7S1610C43v12Ev
  virtual void  v13(); // _ZN7S1610C43v13Ev
  virtual void  v14(); // _ZN7S1610C43v14Ev
  virtual void  v15(); // _ZN7S1610C43v15Ev
  virtual void  v16(); // _ZN7S1610C43v16Ev
  virtual void  v17(); // _ZN7S1610C43v17Ev
  S1610C4(); // tgen
};
//SIG(-1 S1610C4) C1{ VBC2{ BC3{ v9 v10 v11 v12 v13 v14 Fi} v15} vd v1 v2 v3 v4 v5 v6 v7 v8 Fi Fs}


 S1610C4 ::~S1610C4(){ note_dtor("S1610C4", this);}
void  S1610C4 ::v10(){vfunc_called(this, "_ZN7S1610C43v10Ev");}
void  S1610C4 ::v11(){vfunc_called(this, "_ZN7S1610C43v11Ev");}
void  S1610C4 ::v12(){vfunc_called(this, "_ZN7S1610C43v12Ev");}
void  S1610C4 ::v13(){vfunc_called(this, "_ZN7S1610C43v13Ev");}
void  S1610C4 ::v14(){vfunc_called(this, "_ZN7S1610C43v14Ev");}
void  S1610C4 ::v15(){vfunc_called(this, "_ZN7S1610C43v15Ev");}
void  S1610C4 ::v16(){vfunc_called(this, "_ZN7S1610C43v16Ev");}
void  S1610C4 ::v17(){vfunc_called(this, "_ZN7S1610C43v17Ev");}
S1610C4 ::S1610C4(){ note_ctor("S1610C4", this);} // tgen

static void Test_S1610C4()
{
  extern Class_Descriptor cd_S1610C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S1610C4, buf);
    S1610C4 *dp, &lv = *(dp=new (buf) S1610C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S1610C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1610C4)");
    check_base_class_offset(lv, (S1610C6*)(S1610C5*), ABISELECT(16,12), "S1610C4");
    check_base_class_offset(lv, (S1610C5*), ABISELECT(16,12), "S1610C4");
    check_field_offset(lv, s1610c4f0, ABISELECT(8,4), "S1610C4.s1610c4f0");
    check_field_offset(lv, s1610c4f1, ABISELECT(12,8), "S1610C4.s1610c4f1");
    test_class_info(&lv, &cd_S1610C4);
    dp->~S1610C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1610C4(Test_S1610C4, "S1610C4", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S1610C4C1Ev();
extern void _ZN7S1610C4D2Ev();
Name_Map name_map_S1610C4[] = {
  NSPAIR(_ZN7S1610C4C1Ev),
  NSPAIR(_ZN7S1610C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1610C6;
extern VTBL_ENTRY _ZTI7S1610C6[];
extern  VTBL_ENTRY _ZTV7S1610C6[];
extern Class_Descriptor cd_S1610C5;
extern VTBL_ENTRY _ZTI7S1610C5[];
extern  VTBL_ENTRY _ZTV7S1610C5[];
static Base_Class bases_S1610C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1610C6,    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
  0, 0},
  {&cd_S1610C5,    ABISELECT(16,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI7S1610C4[];
extern void _ZN7S1610C4D1Ev();
extern void _ZN7S1610C4D0Ev();
extern void _ZN7S1610C43v10Ev();
extern void _ZN7S1610C43v11Ev();
extern void _ZN7S1610C43v12Ev();
extern void _ZN7S1610C43v13Ev();
extern void _ZN7S1610C43v14Ev();
extern void _ZN7S1610C43v15Ev();
extern void _ZN7S1610C43v16Ev();
extern void _ZN7S1610C43v17Ev();
extern void _ZN7S1610C62v3Ev();
extern void _ZN7S1610C62v4Ev();
extern void _ZN7S1610C62v5Ev();
extern void _ZN7S1610C62v6Ev();
extern void _ZN7S1610C62v7Ev();
extern void _ZN7S1610C62v8Ev();
extern void _ZN7S1610C52v9Ev();
static  VTBL_ENTRY vtc_S1610C4[] = {
  ABISELECT(16,12),
  0,
  (VTBL_ENTRY)&(_ZTI7S1610C4[0]),
  (VTBL_ENTRY)&_ZN7S1610C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1610C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v17Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S1610C4[0]),
  (VTBL_ENTRY)&_ZN7S1610C62v3Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v4Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v5Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v6Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v7Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v8Ev,
  (VTBL_ENTRY)&_ZN7S1610C52v9Ev,
};
extern VTBL_ENTRY _ZTV7S1610C4[];
static  VTT_ENTRY vtt_S1610C4[] = {
  {&(_ZTV7S1610C4[3]),  3,29},
  {&(_ZTV7S1610C4[22]),  22,29},
};
extern VTBL_ENTRY _ZTI7S1610C4[];
extern  VTBL_ENTRY _ZTV7S1610C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1610C4[];
Class_Descriptor cd_S1610C4 = {  "S1610C4", // class name
  bases_S1610C4, 2,
  &(vtc_S1610C4[0]), // expected_vtbl_contents
  &(vtt_S1610C4[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S1610C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S1610C4),29, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1610C4),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  S1610C3  : S1610C4 , S1610C6 {
  virtual void  v18(); // _ZN7S1610C33v18Ev
  virtual void  v19(); // _ZN7S1610C33v19Ev
  virtual void  v20(); // _ZN7S1610C33v20Ev
  virtual void  v21(); // _ZN7S1610C33v21Ev
  ~S1610C3(); // tgen
  S1610C3(); // tgen
};
//SIG(-1 S1610C3) C1{ BC2{ VBC3{ BC4{ v5 v6 v7 v8 v9 v10 Fi} v11} vd v12 v13 v14 v15 v16 v17 v18 v19 Fi Fs} BC4 v1 v2 v3 v4}


void  S1610C3 ::v18(){vfunc_called(this, "_ZN7S1610C33v18Ev");}
void  S1610C3 ::v19(){vfunc_called(this, "_ZN7S1610C33v19Ev");}
void  S1610C3 ::v20(){vfunc_called(this, "_ZN7S1610C33v20Ev");}
void  S1610C3 ::v21(){vfunc_called(this, "_ZN7S1610C33v21Ev");}
S1610C3 ::~S1610C3(){ note_dtor("S1610C3", this);} // tgen
S1610C3 ::S1610C3(){ note_ctor("S1610C3", this);} // tgen

static void Test_S1610C3()
{
  extern Class_Descriptor cd_S1610C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S1610C3, buf);
    S1610C3 *dp, &lv = *(dp=new (buf) S1610C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S1610C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1610C3)");
    check_base_class_offset(lv, (S1610C6*)(S1610C5*), ABISELECT(32,20), "S1610C3");
    check_base_class_offset(lv, (S1610C5*)(S1610C4*), ABISELECT(32,20), "S1610C3");
    check_base_class_offset(lv, (S1610C4*), 0, "S1610C3");
    /*is_ambiguous_... S1610C3::S1610C6 */ AMB_check_base_class_offset(lv, (S1610C6*), ABISELECT(16,12), "S1610C3");
    test_class_info(&lv, &cd_S1610C3);
    dp->~S1610C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1610C3(Test_S1610C3, "S1610C3", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S1610C3C1Ev();
extern void _ZN7S1610C3D1Ev();
Name_Map name_map_S1610C3[] = {
  NSPAIR(_ZN7S1610C3C1Ev),
  NSPAIR(_ZN7S1610C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S1610C6;
extern VTBL_ENTRY _ZTI7S1610C6[];
extern  VTBL_ENTRY _ZTV7S1610C6[];
extern Class_Descriptor cd_S1610C5;
extern VTBL_ENTRY _ZTI7S1610C5[];
extern  VTBL_ENTRY _ZTV7S1610C5[];
extern Class_Descriptor cd_S1610C4;
extern VTBL_ENTRY _ZTI7S1610C4[];
extern  VTBL_ENTRY _ZTV7S1610C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1610C4[];
extern Class_Descriptor cd_S1610C6;
extern VTBL_ENTRY _ZTI7S1610C6[];
extern  VTBL_ENTRY _ZTV7S1610C6[];
static Base_Class bases_S1610C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1610C6,    ABISELECT(32,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
  0, 0},
  {&cd_S1610C5,    ABISELECT(32,20), //bcp->offset
    25, //bcp->virtual_function_table_offset
    9, //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
    2, //immediately_derived
  0, 1},
  {&cd_S1610C4,    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_S1610C6,    ABISELECT(16,12), //bcp->offset
    17, //bcp->virtual_function_table_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 _ZTI7S1610C3[];
extern void _ZN7S1610C3D1Ev();
extern void _ZN7S1610C3D0Ev();
extern void _ZN7S1610C43v10Ev();
extern void _ZN7S1610C43v11Ev();
extern void _ZN7S1610C43v12Ev();
extern void _ZN7S1610C43v13Ev();
extern void _ZN7S1610C43v14Ev();
extern void _ZN7S1610C43v15Ev();
extern void _ZN7S1610C43v16Ev();
extern void _ZN7S1610C43v17Ev();
extern void _ZN7S1610C33v18Ev();
extern void _ZN7S1610C33v19Ev();
extern void _ZN7S1610C33v20Ev();
extern void _ZN7S1610C33v21Ev();
extern void _ZN7S1610C62v3Ev();
extern void _ZN7S1610C62v4Ev();
extern void _ZN7S1610C62v5Ev();
extern void _ZN7S1610C62v6Ev();
extern void _ZN7S1610C62v7Ev();
extern void _ZN7S1610C62v8Ev();
extern void _ZN7S1610C62v3Ev();
extern void _ZN7S1610C62v4Ev();
extern void _ZN7S1610C62v5Ev();
extern void _ZN7S1610C62v6Ev();
extern void _ZN7S1610C62v7Ev();
extern void _ZN7S1610C62v8Ev();
extern void _ZN7S1610C52v9Ev();
static  VTBL_ENTRY vtc_S1610C3[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S1610C3[0]),
  (VTBL_ENTRY)&_ZN7S1610C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1610C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1610C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1610C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1610C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1610C33v21Ev,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S1610C3[0]),
  (VTBL_ENTRY)&_ZN7S1610C62v3Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v4Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v5Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v6Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v7Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S1610C3[0]),
  (VTBL_ENTRY)&_ZN7S1610C62v3Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v4Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v5Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v6Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v7Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v8Ev,
  (VTBL_ENTRY)&_ZN7S1610C52v9Ev,
};
extern VTBL_ENTRY _ZTV7S1610C3[];
extern void _ZN7S1610C4D1Ev();
extern void _ZN7S1610C4D0Ev();
extern void _ZN7S1610C43v10Ev();
extern void _ZN7S1610C43v11Ev();
extern void _ZN7S1610C43v12Ev();
extern void _ZN7S1610C43v13Ev();
extern void _ZN7S1610C43v14Ev();
extern void _ZN7S1610C43v15Ev();
extern void _ZN7S1610C43v16Ev();
extern void _ZN7S1610C43v17Ev();
static  VTBL_ENTRY _tg__ZTV7S1610C4__7S1610C3[] = {
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S1610C4[0]),
  (VTBL_ENTRY)&_ZN7S1610C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1610C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v17Ev,
};
extern void _ZN7S1610C62v3Ev();
extern void _ZN7S1610C62v4Ev();
extern void _ZN7S1610C62v5Ev();
extern void _ZN7S1610C62v6Ev();
extern void _ZN7S1610C62v7Ev();
extern void _ZN7S1610C62v8Ev();
extern void _ZN7S1610C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S1610C5__7S1610C4__7S1610C3[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI7S1610C4[0]),
  (VTBL_ENTRY)&_ZN7S1610C62v3Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v4Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v5Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v6Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v7Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v8Ev,
  (VTBL_ENTRY)&_ZN7S1610C52v9Ev,
};
static  VTT_ENTRY vtt_S1610C3[] = {
  {&(_ZTV7S1610C3[3]),  3,41},
  {&(_tg__ZTV7S1610C4__7S1610C3[3]),  3,13},
  {&(_tg__ZTV7S1610C5__7S1610C4__7S1610C3[9]),  9,16},
  {&(_ZTV7S1610C3[34]),  34,41},
};
extern VTBL_ENTRY _ZTI7S1610C3[];
extern  VTBL_ENTRY _ZTV7S1610C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1610C3[];
Class_Descriptor cd_S1610C3 = {  "S1610C3", // class name
  bases_S1610C3, 4,
  &(vtc_S1610C3[0]), // expected_vtbl_contents
  &(vtt_S1610C3[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S1610C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S1610C3),41, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1610C3),4, //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  S1610C2  : S1610C3 {
  ::S3052C22_nt s1610c2f0;
  virtual  ~S1610C2(); // _ZN7S1610C2D2Ev
  virtual void  v22(); // _ZN7S1610C23v22Ev
  virtual void  v23(); // _ZN7S1610C23v23Ev
  virtual void  v24(); // _ZN7S1610C23v24Ev
  virtual void  v25(); // _ZN7S1610C23v25Ev
  S1610C2(); // tgen
};
//SIG(-1 S1610C2) C1{ BC2{ BC3{ VBC4{ BC5{ v5 v6 v7 v8 v9 v10 Fi} v11} vd v12 v13 v14 v15 v16 v17 v18 v19 Fi Fs} BC5 v20 v21 v22 v23} vd v1 v2 v3 v4 FC6{}}


 S1610C2 ::~S1610C2(){ note_dtor("S1610C2", this);}
void  S1610C2 ::v22(){vfunc_called(this, "_ZN7S1610C23v22Ev");}
void  S1610C2 ::v23(){vfunc_called(this, "_ZN7S1610C23v23Ev");}
void  S1610C2 ::v24(){vfunc_called(this, "_ZN7S1610C23v24Ev");}
void  S1610C2 ::v25(){vfunc_called(this, "_ZN7S1610C23v25Ev");}
S1610C2 ::S1610C2(){ note_ctor("S1610C2", this);} // tgen

static void Test_S1610C2()
{
  extern Class_Descriptor cd_S1610C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S1610C2, buf);
    S1610C2 *dp, &lv = *(dp=new (buf) S1610C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S1610C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1610C2)");
    check_base_class_offset(lv, (S1610C6*)(S1610C5*), ABISELECT(32,24), "S1610C2");
    check_base_class_offset(lv, (S1610C5*)(S1610C4*)(S1610C3*), ABISELECT(32,24), "S1610C2");
    check_base_class_offset(lv, (S1610C4*)(S1610C3*), 0, "S1610C2");
    /*is_ambiguous_... S1610C3::S1610C6 */ AMB_check_base_class_offset(lv, (S1610C6*)(S1610C3*), ABISELECT(16,12), "S1610C2");
    check_base_class_offset(lv, (S1610C3*), 0, "S1610C2");
    check_field_offset(lv, s1610c2f0, ABISELECT(28,20), "S1610C2.s1610c2f0");
    test_class_info(&lv, &cd_S1610C2);
    dp->~S1610C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1610C2(Test_S1610C2, "S1610C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S1610C2C1Ev();
extern void _ZN7S1610C2D2Ev();
Name_Map name_map_S1610C2[] = {
  NSPAIR(_ZN7S1610C2C1Ev),
  NSPAIR(_ZN7S1610C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1610C6;
extern VTBL_ENTRY _ZTI7S1610C6[];
extern  VTBL_ENTRY _ZTV7S1610C6[];
extern Class_Descriptor cd_S1610C5;
extern VTBL_ENTRY _ZTI7S1610C5[];
extern  VTBL_ENTRY _ZTV7S1610C5[];
extern Class_Descriptor cd_S1610C4;
extern VTBL_ENTRY _ZTI7S1610C4[];
extern  VTBL_ENTRY _ZTV7S1610C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1610C4[];
extern Class_Descriptor cd_S1610C6;
extern VTBL_ENTRY _ZTI7S1610C6[];
extern  VTBL_ENTRY _ZTV7S1610C6[];
extern Class_Descriptor cd_S1610C3;
extern VTBL_ENTRY _ZTI7S1610C3[];
extern  VTBL_ENTRY _ZTV7S1610C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1610C3[];
static Base_Class bases_S1610C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1610C6,    ABISELECT(32,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
  0, 0},
  {&cd_S1610C5,    ABISELECT(32,24), //bcp->offset
    29, //bcp->virtual_function_table_offset
    9, //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
    2, //immediately_derived
  0, 1},
  {&cd_S1610C4,    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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1610C6,    ABISELECT(16,12), //bcp->offset
    21, //bcp->virtual_function_table_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_S1610C3,    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},
  {0}};
extern VTBL_ENTRY _ZTI7S1610C2[];
extern void _ZN7S1610C2D1Ev();
extern void _ZN7S1610C2D0Ev();
extern void _ZN7S1610C43v10Ev();
extern void _ZN7S1610C43v11Ev();
extern void _ZN7S1610C43v12Ev();
extern void _ZN7S1610C43v13Ev();
extern void _ZN7S1610C43v14Ev();
extern void _ZN7S1610C43v15Ev();
extern void _ZN7S1610C43v16Ev();
extern void _ZN7S1610C43v17Ev();
extern void _ZN7S1610C33v18Ev();
extern void _ZN7S1610C33v19Ev();
extern void _ZN7S1610C33v20Ev();
extern void _ZN7S1610C33v21Ev();
extern void _ZN7S1610C23v22Ev();
extern void _ZN7S1610C23v23Ev();
extern void _ZN7S1610C23v24Ev();
extern void _ZN7S1610C23v25Ev();
extern void _ZN7S1610C62v3Ev();
extern void _ZN7S1610C62v4Ev();
extern void _ZN7S1610C62v5Ev();
extern void _ZN7S1610C62v6Ev();
extern void _ZN7S1610C62v7Ev();
extern void _ZN7S1610C62v8Ev();
extern void _ZN7S1610C62v3Ev();
extern void _ZN7S1610C62v4Ev();
extern void _ZN7S1610C62v5Ev();
extern void _ZN7S1610C62v6Ev();
extern void _ZN7S1610C62v7Ev();
extern void _ZN7S1610C62v8Ev();
extern void _ZN7S1610C52v9Ev();
static  VTBL_ENTRY vtc_S1610C2[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S1610C2[0]),
  (VTBL_ENTRY)&_ZN7S1610C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1610C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1610C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1610C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1610C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1610C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1610C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1610C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1610C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1610C23v25Ev,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S1610C2[0]),
  (VTBL_ENTRY)&_ZN7S1610C62v3Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v4Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v5Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v6Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v7Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S1610C2[0]),
  (VTBL_ENTRY)&_ZN7S1610C62v3Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v4Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v5Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v6Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v7Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v8Ev,
  (VTBL_ENTRY)&_ZN7S1610C52v9Ev,
};
extern VTBL_ENTRY _ZTV7S1610C2[];
extern void _ZN7S1610C3D1Ev();
extern void _ZN7S1610C3D0Ev();
extern void _ZN7S1610C43v10Ev();
extern void _ZN7S1610C43v11Ev();
extern void _ZN7S1610C43v12Ev();
extern void _ZN7S1610C43v13Ev();
extern void _ZN7S1610C43v14Ev();
extern void _ZN7S1610C43v15Ev();
extern void _ZN7S1610C43v16Ev();
extern void _ZN7S1610C43v17Ev();
extern void _ZN7S1610C33v18Ev();
extern void _ZN7S1610C33v19Ev();
extern void _ZN7S1610C33v20Ev();
extern void _ZN7S1610C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1610C3__7S1610C2[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S1610C3[0]),
  (VTBL_ENTRY)&_ZN7S1610C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1610C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1610C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1610C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1610C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1610C33v21Ev,
};
extern void _ZN7S1610C4D1Ev();
extern void _ZN7S1610C4D0Ev();
extern void _ZN7S1610C43v10Ev();
extern void _ZN7S1610C43v11Ev();
extern void _ZN7S1610C43v12Ev();
extern void _ZN7S1610C43v13Ev();
extern void _ZN7S1610C43v14Ev();
extern void _ZN7S1610C43v15Ev();
extern void _ZN7S1610C43v16Ev();
extern void _ZN7S1610C43v17Ev();
static  VTBL_ENTRY _tg__ZTV7S1610C47S1610C3__7S1610C2[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S1610C4[0]),
  (VTBL_ENTRY)&_ZN7S1610C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1610C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v17Ev,
};
extern void _ZN7S1610C62v3Ev();
extern void _ZN7S1610C62v4Ev();
extern void _ZN7S1610C62v5Ev();
extern void _ZN7S1610C62v6Ev();
extern void _ZN7S1610C62v7Ev();
extern void _ZN7S1610C62v8Ev();
extern void _ZN7S1610C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S1610C5__7S1610C47S1610C3__7S1610C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S1610C4[0]),
  (VTBL_ENTRY)&_ZN7S1610C62v3Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v4Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v5Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v6Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v7Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v8Ev,
  (VTBL_ENTRY)&_ZN7S1610C52v9Ev,
};
extern void _ZN7S1610C62v3Ev();
extern void _ZN7S1610C62v4Ev();
extern void _ZN7S1610C62v5Ev();
extern void _ZN7S1610C62v6Ev();
extern void _ZN7S1610C62v7Ev();
extern void _ZN7S1610C62v8Ev();
extern void _ZN7S1610C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S1610C5__7S1610C3__7S1610C2[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S1610C3[0]),
  (VTBL_ENTRY)&_ZN7S1610C62v3Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v4Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v5Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v6Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v7Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v8Ev,
  (VTBL_ENTRY)&_ZN7S1610C52v9Ev,
};
static  VTT_ENTRY vtt_S1610C2[] = {
  {&(_ZTV7S1610C2[3]),  3,45},
  {&(_tg__ZTV7S1610C3__7S1610C2[3]),  3,17},
  {&(_tg__ZTV7S1610C47S1610C3__7S1610C2[3]),  3,13},
  {&(_tg__ZTV7S1610C5__7S1610C47S1610C3__7S1610C2[9]),  9,16},
  {&(_tg__ZTV7S1610C5__7S1610C3__7S1610C2[9]),  9,16},
  {&(_ZTV7S1610C2[38]),  38,45},
};
extern VTBL_ENTRY _ZTI7S1610C2[];
extern  VTBL_ENTRY _ZTV7S1610C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1610C2[];
Class_Descriptor cd_S1610C2 = {  "S1610C2", // class name
  bases_S1610C2, 5,
  &(vtc_S1610C2[0]), // expected_vtbl_contents
  &(vtt_S1610C2[0]), // expected_vtt_contents
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S1610C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1610C2),45, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1610C2),6, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S1610C1  : S1610C2 {
  virtual  ~S1610C1(); // _ZN7S1610C1D2Ev
  virtual void  v1(); // _ZN7S1610C12v1Ev
  virtual void  v2(); // _ZN7S1610C12v2Ev
  S1610C1(); // tgen
};
//SIG(1 S1610C1) C1{ BC2{ BC3{ BC4{ VBC5{ BC6{ v3 v4 v5 v6 v7 v8 Fi} v9} vd v10 v11 v12 v13 v14 v15 v16 v17 Fi Fs} BC6 v18 v19 v20 v21} vd v22 v23 v24 v25 FC7{}} vd v1 v2}


 S1610C1 ::~S1610C1(){ note_dtor("S1610C1", this);}
void  S1610C1 ::v1(){vfunc_called(this, "_ZN7S1610C12v1Ev");}
void  S1610C1 ::v2(){vfunc_called(this, "_ZN7S1610C12v2Ev");}
S1610C1 ::S1610C1(){ note_ctor("S1610C1", this);} // tgen

static void Test_S1610C1()
{
  extern Class_Descriptor cd_S1610C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S1610C1, buf);
    S1610C1 *dp, &lv = *(dp=new (buf) S1610C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S1610C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S1610C1)");
    check_base_class_offset(lv, (S1610C6*)(S1610C5*), ABISELECT(32,24), "S1610C1");
    check_base_class_offset(lv, (S1610C5*)(S1610C4*)(S1610C3*)(S1610C2*), ABISELECT(32,24), "S1610C1");
    check_base_class_offset(lv, (S1610C4*)(S1610C3*)(S1610C2*), 0, "S1610C1");
    /*is_ambiguous_... S1610C3::S1610C6 */ AMB_check_base_class_offset(lv, (S1610C6*)(S1610C3*)(S1610C2*), ABISELECT(16,12), "S1610C1");
    check_base_class_offset(lv, (S1610C3*)(S1610C2*), 0, "S1610C1");
    check_base_class_offset(lv, (S1610C2*), 0, "S1610C1");
    test_class_info(&lv, &cd_S1610C1);
    dp->~S1610C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS1610C1(Test_S1610C1, "S1610C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S1610C1C1Ev();
extern void _ZN7S1610C1D2Ev();
Name_Map name_map_S1610C1[] = {
  NSPAIR(_ZN7S1610C1C1Ev),
  NSPAIR(_ZN7S1610C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S1610C6;
extern VTBL_ENTRY _ZTI7S1610C6[];
extern  VTBL_ENTRY _ZTV7S1610C6[];
extern Class_Descriptor cd_S1610C5;
extern VTBL_ENTRY _ZTI7S1610C5[];
extern  VTBL_ENTRY _ZTV7S1610C5[];
extern Class_Descriptor cd_S1610C4;
extern VTBL_ENTRY _ZTI7S1610C4[];
extern  VTBL_ENTRY _ZTV7S1610C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1610C4[];
extern Class_Descriptor cd_S1610C6;
extern VTBL_ENTRY _ZTI7S1610C6[];
extern  VTBL_ENTRY _ZTV7S1610C6[];
extern Class_Descriptor cd_S1610C3;
extern VTBL_ENTRY _ZTI7S1610C3[];
extern  VTBL_ENTRY _ZTV7S1610C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1610C3[];
extern Class_Descriptor cd_S1610C2;
extern VTBL_ENTRY _ZTI7S1610C2[];
extern  VTBL_ENTRY _ZTV7S1610C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1610C2[];
static Base_Class bases_S1610C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S1610C6,    ABISELECT(32,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
  0, 0},
  {&cd_S1610C5,    ABISELECT(32,24), //bcp->offset
    31, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S1610C4,    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
    3, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S1610C6,    ABISELECT(16,12), //bcp->offset
    23, //bcp->virtual_function_table_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_S1610C3,    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
    5, //immediately_derived
  0, 0},
  {&cd_S1610C2,    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},
  {0}};
extern VTBL_ENTRY _ZTI7S1610C1[];
extern void _ZN7S1610C1D1Ev();
extern void _ZN7S1610C1D0Ev();
extern void _ZN7S1610C43v10Ev();
extern void _ZN7S1610C43v11Ev();
extern void _ZN7S1610C43v12Ev();
extern void _ZN7S1610C43v13Ev();
extern void _ZN7S1610C43v14Ev();
extern void _ZN7S1610C43v15Ev();
extern void _ZN7S1610C43v16Ev();
extern void _ZN7S1610C43v17Ev();
extern void _ZN7S1610C33v18Ev();
extern void _ZN7S1610C33v19Ev();
extern void _ZN7S1610C33v20Ev();
extern void _ZN7S1610C33v21Ev();
extern void _ZN7S1610C23v22Ev();
extern void _ZN7S1610C23v23Ev();
extern void _ZN7S1610C23v24Ev();
extern void _ZN7S1610C23v25Ev();
extern void _ZN7S1610C12v1Ev();
extern void _ZN7S1610C12v2Ev();
extern void _ZN7S1610C62v3Ev();
extern void _ZN7S1610C62v4Ev();
extern void _ZN7S1610C62v5Ev();
extern void _ZN7S1610C62v6Ev();
extern void _ZN7S1610C62v7Ev();
extern void _ZN7S1610C62v8Ev();
extern void _ZN7S1610C62v3Ev();
extern void _ZN7S1610C62v4Ev();
extern void _ZN7S1610C62v5Ev();
extern void _ZN7S1610C62v6Ev();
extern void _ZN7S1610C62v7Ev();
extern void _ZN7S1610C62v8Ev();
extern void _ZN7S1610C52v9Ev();
static  VTBL_ENTRY vtc_S1610C1[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S1610C1[0]),
  (VTBL_ENTRY)&_ZN7S1610C1D1Ev,
  (VTBL_ENTRY)&_ZN7S1610C1D0Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1610C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1610C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1610C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1610C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1610C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1610C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1610C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1610C23v25Ev,
  (VTBL_ENTRY)&_ZN7S1610C12v1Ev,
  (VTBL_ENTRY)&_ZN7S1610C12v2Ev,
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S1610C1[0]),
  (VTBL_ENTRY)&_ZN7S1610C62v3Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v4Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v5Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v6Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v7Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v8Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S1610C1[0]),
  (VTBL_ENTRY)&_ZN7S1610C62v3Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v4Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v5Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v6Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v7Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v8Ev,
  (VTBL_ENTRY)&_ZN7S1610C52v9Ev,
};
extern VTBL_ENTRY _ZTV7S1610C1[];
extern void _ZN7S1610C2D1Ev();
extern void _ZN7S1610C2D0Ev();
extern void _ZN7S1610C43v10Ev();
extern void _ZN7S1610C43v11Ev();
extern void _ZN7S1610C43v12Ev();
extern void _ZN7S1610C43v13Ev();
extern void _ZN7S1610C43v14Ev();
extern void _ZN7S1610C43v15Ev();
extern void _ZN7S1610C43v16Ev();
extern void _ZN7S1610C43v17Ev();
extern void _ZN7S1610C33v18Ev();
extern void _ZN7S1610C33v19Ev();
extern void _ZN7S1610C33v20Ev();
extern void _ZN7S1610C33v21Ev();
extern void _ZN7S1610C23v22Ev();
extern void _ZN7S1610C23v23Ev();
extern void _ZN7S1610C23v24Ev();
extern void _ZN7S1610C23v25Ev();
static  VTBL_ENTRY _tg__ZTV7S1610C2__7S1610C1[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S1610C2[0]),
  (VTBL_ENTRY)&_ZN7S1610C2D1Ev,
  (VTBL_ENTRY)&_ZN7S1610C2D0Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1610C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1610C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1610C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1610C33v21Ev,
  (VTBL_ENTRY)&_ZN7S1610C23v22Ev,
  (VTBL_ENTRY)&_ZN7S1610C23v23Ev,
  (VTBL_ENTRY)&_ZN7S1610C23v24Ev,
  (VTBL_ENTRY)&_ZN7S1610C23v25Ev,
};
extern void _ZN7S1610C3D1Ev();
extern void _ZN7S1610C3D0Ev();
extern void _ZN7S1610C43v10Ev();
extern void _ZN7S1610C43v11Ev();
extern void _ZN7S1610C43v12Ev();
extern void _ZN7S1610C43v13Ev();
extern void _ZN7S1610C43v14Ev();
extern void _ZN7S1610C43v15Ev();
extern void _ZN7S1610C43v16Ev();
extern void _ZN7S1610C43v17Ev();
extern void _ZN7S1610C33v18Ev();
extern void _ZN7S1610C33v19Ev();
extern void _ZN7S1610C33v20Ev();
extern void _ZN7S1610C33v21Ev();
static  VTBL_ENTRY _tg__ZTV7S1610C37S1610C2__7S1610C1[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S1610C3[0]),
  (VTBL_ENTRY)&_ZN7S1610C3D1Ev,
  (VTBL_ENTRY)&_ZN7S1610C3D0Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v17Ev,
  (VTBL_ENTRY)&_ZN7S1610C33v18Ev,
  (VTBL_ENTRY)&_ZN7S1610C33v19Ev,
  (VTBL_ENTRY)&_ZN7S1610C33v20Ev,
  (VTBL_ENTRY)&_ZN7S1610C33v21Ev,
};
extern void _ZN7S1610C4D1Ev();
extern void _ZN7S1610C4D0Ev();
extern void _ZN7S1610C43v10Ev();
extern void _ZN7S1610C43v11Ev();
extern void _ZN7S1610C43v12Ev();
extern void _ZN7S1610C43v13Ev();
extern void _ZN7S1610C43v14Ev();
extern void _ZN7S1610C43v15Ev();
extern void _ZN7S1610C43v16Ev();
extern void _ZN7S1610C43v17Ev();
static  VTBL_ENTRY _tg__ZTV7S1610C47S1610C37S1610C2__7S1610C1[] = {
  ABISELECT(32,24),
  0,
  (VTBL_ENTRY)&(_ZTI7S1610C4[0]),
  (VTBL_ENTRY)&_ZN7S1610C4D1Ev,
  (VTBL_ENTRY)&_ZN7S1610C4D0Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v10Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v11Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v12Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v13Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v14Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v15Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v16Ev,
  (VTBL_ENTRY)&_ZN7S1610C43v17Ev,
};
extern void _ZN7S1610C62v3Ev();
extern void _ZN7S1610C62v4Ev();
extern void _ZN7S1610C62v5Ev();
extern void _ZN7S1610C62v6Ev();
extern void _ZN7S1610C62v7Ev();
extern void _ZN7S1610C62v8Ev();
extern void _ZN7S1610C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S1610C5__7S1610C47S1610C37S1610C2__7S1610C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S1610C4[0]),
  (VTBL_ENTRY)&_ZN7S1610C62v3Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v4Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v5Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v6Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v7Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v8Ev,
  (VTBL_ENTRY)&_ZN7S1610C52v9Ev,
};
extern void _ZN7S1610C62v3Ev();
extern void _ZN7S1610C62v4Ev();
extern void _ZN7S1610C62v5Ev();
extern void _ZN7S1610C62v6Ev();
extern void _ZN7S1610C62v7Ev();
extern void _ZN7S1610C62v8Ev();
extern void _ZN7S1610C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S1610C5__7S1610C37S1610C2__7S1610C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S1610C3[0]),
  (VTBL_ENTRY)&_ZN7S1610C62v3Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v4Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v5Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v6Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v7Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v8Ev,
  (VTBL_ENTRY)&_ZN7S1610C52v9Ev,
};
extern void _ZN7S1610C62v3Ev();
extern void _ZN7S1610C62v4Ev();
extern void _ZN7S1610C62v5Ev();
extern void _ZN7S1610C62v6Ev();
extern void _ZN7S1610C62v7Ev();
extern void _ZN7S1610C62v8Ev();
extern void _ZN7S1610C52v9Ev();
static  VTBL_ENTRY _tg__ZTV7S1610C5__7S1610C2__7S1610C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-24),
  (VTBL_ENTRY)&(_ZTI7S1610C2[0]),
  (VTBL_ENTRY)&_ZN7S1610C62v3Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v4Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v5Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v6Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v7Ev,
  (VTBL_ENTRY)&_ZN7S1610C62v8Ev,
  (VTBL_ENTRY)&_ZN7S1610C52v9Ev,
};
static  VTT_ENTRY vtt_S1610C1[] = {
  {&(_ZTV7S1610C1[3]),  3,47},
  {&(_tg__ZTV7S1610C2__7S1610C1[3]),  3,21},
  {&(_tg__ZTV7S1610C37S1610C2__7S1610C1[3]),  3,17},
  {&(_tg__ZTV7S1610C47S1610C37S1610C2__7S1610C1[3]),  3,13},
  {&(_tg__ZTV7S1610C5__7S1610C47S1610C37S1610C2__7S1610C1[9]),  9,16},
  {&(_tg__ZTV7S1610C5__7S1610C37S1610C2__7S1610C1[9]),  9,16},
  {&(_tg__ZTV7S1610C5__7S1610C2__7S1610C1[9]),  9,16},
  {&(_ZTV7S1610C1[40]),  40,47},
};
extern VTBL_ENTRY _ZTI7S1610C1[];
extern  VTBL_ENTRY _ZTV7S1610C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S1610C1[];
Class_Descriptor cd_S1610C1 = {  "S1610C1", // class name
  bases_S1610C1, 6,
  &(vtc_S1610C1[0]), // expected_vtbl_contents
  &(vtt_S1610C1[0]), // expected_vtt_contents
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S1610C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S1610C1),47, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S1610C1),8, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19694C6  : S20955C5 , S2264C28 {
};
//SIG(-1 S19694C6) C1{ BC2{ m FL Fc:0} BC3{ m}}



static void Test_S19694C6()
{
  extern Class_Descriptor cd_S19694C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2,3)];
    init_test(&cd_S19694C6, buf);
    S19694C6 &lv = *(new (buf) S19694C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S19694C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19694C6)");
    check_base_class_offset(lv, (S20955C5*), 0, "S19694C6");
    check_base_class_offset(lv, (S2264C28*), 0, "S19694C6");
    test_class_info(&lv, &cd_S19694C6);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19694C6(Test_S19694C6, "S19694C6", 8);

#else // __cplusplus

extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S19694C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19694C6[];
Class_Descriptor cd_S19694C6 = {  "S19694C6", // class name
  bases_S19694C6, 2,
  0, // no vftv
  0, //no vtt
  8, // object size
  NSPAIRA(_ZTI8S19694C6),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  S19694C5  : virtual S19694C6 , virtual S20955C5 , S2264C28 {
  ~S19694C5(); // tgen
  S19694C5(); // tgen
};
//SIG(-1 S19694C5) C1{ VBC2{ BC3{ m FL Fc:0} BC4{ m}} VBC3 BC4}


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

static void Test_S19694C5()
{
  extern Class_Descriptor cd_S19694C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,6)];
    init_test(&cd_S19694C5, buf);
    S19694C5 *dp, &lv = *(dp=new (buf) S19694C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S19694C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19694C5)");
    check_base_class_offset(lv, (S20955C5*)(S19694C6*), ABISELECT(8,4), "S19694C5");
    check_base_class_offset(lv, (S2264C28*)(S19694C6*), ABISELECT(8,4), "S19694C5");
    check_base_class_offset(lv, (S19694C6*), ABISELECT(8,4), "S19694C5");
    /*is_ambiguous_... S19694C5::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*), ABISELECT(16,12), "S19694C5");
    /*is_ambiguous_... S19694C5::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), 0, "S19694C5");
    test_class_info(&lv, &cd_S19694C5);
    dp->~S19694C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19694C5(Test_S19694C5, "S19694C5", ABISELECT(24,20));

#else // __cplusplus

extern void _ZN8S19694C5C1Ev();
extern void _ZN8S19694C5D1Ev();
Name_Map name_map_S19694C5[] = {
  NSPAIR(_ZN8S19694C5C1Ev),
  NSPAIR(_ZN8S19694C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19694C6;
extern VTBL_ENTRY _ZTI8S19694C6[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S19694C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    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_S2264C28,    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_S19694C6,    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_S20955C5,    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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19694C5[];
static  VTBL_ENTRY vtc_S19694C5[] = {
  ABISELECT(16,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19694C5[0]),
};
extern VTBL_ENTRY _ZTV8S19694C5[];
static  VTT_ENTRY vtt_S19694C5[] = {
  {&(_ZTV8S19694C5[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19694C5[];
extern  VTBL_ENTRY _ZTV8S19694C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19694C5[];
Class_Descriptor cd_S19694C5 = {  "S19694C5", // class name
  bases_S19694C5, 5,
  &(vtc_S19694C5[0]), // expected_vtbl_contents
  &(vtt_S19694C5[0]), // expected_vtt_contents
  ABISELECT(24,20), // object size
  NSPAIRA(_ZTI8S19694C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19694C5),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19694C5),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  S19694C9  : S2264C28 , S19694C6 {
  ::S3052C22_nt s19694c9f0;
  virtual  ~S19694C9(); // _ZN8S19694C9D1Ev
  S19694C9(); // tgen
};
//SIG(-1 S19694C9) C1{ BC2{ m} BC3{ BC4{ m FL Fc:0} BC2} vd FC5{}}


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

static void Test_S19694C9()
{
  extern Class_Descriptor cd_S19694C9;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S19694C9, buf);
    S19694C9 *dp, &lv = *(dp=new (buf) S19694C9());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S19694C9)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19694C9)");
    /*is_ambiguous_... S19694C9::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), 0, "S19694C9");
    check_base_class_offset(lv, (S20955C5*)(S19694C6*), ABISELECT(8,4), "S19694C9");
    check_base_class_offset(lv, (S2264C28*)(S19694C6*), ABISELECT(8,4), "S19694C9");
    check_base_class_offset(lv, (S19694C6*), ABISELECT(8,4), "S19694C9");
    check_field_offset(lv, s19694c9f0, ABISELECT(16,12), "S19694C9.s19694c9f0");
    test_class_info(&lv, &cd_S19694C9);
    dp->~S19694C9();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19694C9(Test_S19694C9, "S19694C9", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S19694C9C1Ev();
extern void _ZN8S19694C9D1Ev();
Name_Map name_map_S19694C9[] = {
  NSPAIR(_ZN8S19694C9C1Ev),
  NSPAIR(_ZN8S19694C9D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19694C6;
extern VTBL_ENTRY _ZTI8S19694C6[];
static Base_Class bases_S19694C9[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S20955C5,    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_S2264C28,    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_S19694C6,    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 _ZTI8S19694C9[];
extern void _ZN8S19694C9D1Ev();
extern void _ZN8S19694C9D0Ev();
static  VTBL_ENTRY vtc_S19694C9[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19694C9[0]),
  (VTBL_ENTRY)&_ZN8S19694C9D1Ev,
  (VTBL_ENTRY)&_ZN8S19694C9D0Ev,
};
extern VTBL_ENTRY _ZTI8S19694C9[];
extern  VTBL_ENTRY _ZTV8S19694C9[];
Class_Descriptor cd_S19694C9 = {  "S19694C9", // class name
  bases_S19694C9, 4,
  &(vtc_S19694C9[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S19694C9),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19694C9),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  S19694C4  : virtual S19694C5 , S19694C9 {
  int s19694c4f0[8];
  ~S19694C4(); // tgen
  S19694C4(); // tgen
};
//SIG(-1 S19694C4) C1{ VBC2{ VBC3{ BC4{ m FL Fc:0} BC5{ m}} VBC4 BC5} BC6{ BC5 BC3 vd FC7{}} Fi[8]}


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

static void Test_S19694C4()
{
  extern Class_Descriptor cd_S19694C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,18)];
    init_test(&cd_S19694C4, buf);
    S19694C4 *dp, &lv = *(dp=new (buf) S19694C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,68), "sizeof(S19694C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19694C4)");
    /*is_ambiguous_... S19694C4::S19694C6 */ AMB_check_base_class_offset(lv, (S20955C5*)(S19694C6*), ABISELECT(64,52), "S19694C4");
    /*is_ambiguous_... S19694C4::S19694C6 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19694C6*), ABISELECT(64,52), "S19694C4");
    check_base_class_offset(lv, (S19694C6*)(S19694C5*), ABISELECT(64,52), "S19694C4");
    /*is_ambiguous_... S19694C5::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S19694C5*), ABISELECT(72,60), "S19694C4");
    /*is_ambiguous_... S19694C5::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19694C5*), ABISELECT(56,48), "S19694C4");
    check_base_class_offset(lv, (S19694C5*), ABISELECT(56,48), "S19694C4");
    /*is_ambiguous_... S19694C9::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19694C9*), 0, "S19694C4");
    check_base_class_offset(lv, (S20955C5*)(S19694C6*)(S19694C9*), ABISELECT(8,4), "S19694C4");
    check_base_class_offset(lv, (S2264C28*)(S19694C6*)(S19694C9*), ABISELECT(8,4), "S19694C4");
    check_base_class_offset(lv, (S19694C6*)(S19694C9*), ABISELECT(8,4), "S19694C4");
    check_base_class_offset(lv, (S19694C9*), 0, "S19694C4");
    check_field_offset(lv, s19694c4f0, ABISELECT(20,16), "S19694C4.s19694c4f0");
    test_class_info(&lv, &cd_S19694C4);
    dp->~S19694C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19694C4(Test_S19694C4, "S19694C4", ABISELECT(80,68));

#else // __cplusplus

extern void _ZN8S19694C4C1Ev();
extern void _ZN8S19694C4D1Ev();
Name_Map name_map_S19694C4[] = {
  NSPAIR(_ZN8S19694C4C1Ev),
  NSPAIR(_ZN8S19694C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19694C6;
extern VTBL_ENTRY _ZTI8S19694C6[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19694C5;
extern VTBL_ENTRY _ZTI8S19694C5[];
extern  VTBL_ENTRY _ZTV8S19694C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19694C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19694C6;
extern VTBL_ENTRY _ZTI8S19694C6[];
extern Class_Descriptor cd_S19694C9;
extern VTBL_ENTRY _ZTI8S19694C9[];
extern  VTBL_ENTRY _ZTV8S19694C9[];
static Base_Class bases_S19694C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    ABISELECT(64,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
    2, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(64,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
    2, //immediately_derived
  0, 0},
  {&cd_S19694C6,    ABISELECT(64,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
    5, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(72,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
    5, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(56,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
    5, //immediately_derived
  0, 0},
  {&cd_S19694C5,    ABISELECT(56,48), //bcp->offset
    7, //bcp->virtual_function_table_offset
    4, //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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S20955C5,    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
    9, //immediately_derived
  0, 0},
  {&cd_S2264C28,    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
    9, //immediately_derived
  0, 0},
  {&cd_S19694C6,    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
    10, //immediately_derived
  0, 0},
  {&cd_S19694C9,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI8S19694C4[];
extern void _ZN8S19694C4D1Ev();
extern void _ZN8S19694C4D0Ev();
static  VTBL_ENTRY vtc_S19694C4[] = {
  ABISELECT(72,60),
  ABISELECT(64,52),
  ABISELECT(56,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19694C4[0]),
  (VTBL_ENTRY)&_ZN8S19694C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19694C4D0Ev,
  ABISELECT(16,12),
  ABISELECT(8,4),
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI8S19694C4[0]),
};
extern VTBL_ENTRY _ZTV8S19694C4[];
static  VTBL_ENTRY _tg__ZTV8S19694C5__8S19694C4[] = {
  ABISELECT(16,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19694C5[0]),
};
static  VTT_ENTRY vtt_S19694C4[] = {
  {&(_ZTV8S19694C4[5]),  5,11},
  {&(_ZTV8S19694C4[11]),  11,11},
  {&(_tg__ZTV8S19694C5__8S19694C4[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19694C4[];
extern  VTBL_ENTRY _ZTV8S19694C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19694C4[];
Class_Descriptor cd_S19694C4 = {  "S19694C4", // class name
  bases_S19694C4, 11,
  &(vtc_S19694C4[0]), // expected_vtbl_contents
  &(vtt_S19694C4[0]), // expected_vtt_contents
  ABISELECT(80,68), // object size
  NSPAIRA(_ZTI8S19694C4),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19694C4),11, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19694C4),3, //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  S19694C11  : virtual S2264C38 , S19694C6 , virtual S2264C28 {
  int s19694c11f0;
  ~S19694C11(); // tgen
  S19694C11(); // tgen
};
//SIG(-1 S19694C11) C1{ VBC2{ m} BC3{ BC4{ m FL Fc:0} BC5{ m}} VBC5 Fi}


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

static void Test_S19694C11()
{
  extern Class_Descriptor cd_S19694C11;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S19694C11, buf);
    S19694C11 *dp, &lv = *(dp=new (buf) S19694C11());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S19694C11)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19694C11)");
    check_base_class_offset(lv, (S2264C38*), 0, "S19694C11");
    check_base_class_offset(lv, (S20955C5*)(S19694C6*), ABISELECT(8,4), "S19694C11");
    check_base_class_offset(lv, (S2264C28*)(S19694C6*), ABISELECT(8,4), "S19694C11");
    check_base_class_offset(lv, (S19694C6*), ABISELECT(8,4), "S19694C11");
    /*is_ambiguous_... S19694C11::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), 0, "S19694C11");
    check_field_offset(lv, s19694c11f0, ABISELECT(16,12), "S19694C11.s19694c11f0");
    test_class_info(&lv, &cd_S19694C11);
    dp->~S19694C11();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19694C11(Test_S19694C11, "S19694C11", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN9S19694C11C1Ev();
extern void _ZN9S19694C11D1Ev();
Name_Map name_map_S19694C11[] = {
  NSPAIR(_ZN9S19694C11C1Ev),
  NSPAIR(_ZN9S19694C11D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19694C6;
extern VTBL_ENTRY _ZTI8S19694C6[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S19694C11[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20955C5,    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_S2264C28,    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_S19694C6,    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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI9S19694C11[];
static  VTBL_ENTRY vtc_S19694C11[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19694C11[0]),
};
extern VTBL_ENTRY _ZTV9S19694C11[];
static  VTT_ENTRY vtt_S19694C11[] = {
  {&(_ZTV9S19694C11[4]),  4,4},
};
extern VTBL_ENTRY _ZTI9S19694C11[];
extern  VTBL_ENTRY _ZTV9S19694C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19694C11[];
Class_Descriptor cd_S19694C11 = {  "S19694C11", // class name
  bases_S19694C11, 5,
  &(vtc_S19694C11[0]), // expected_vtbl_contents
  &(vtt_S19694C11[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI9S19694C11),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV9S19694C11),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19694C11),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  S19694C12  : virtual S19694C9 {
  virtual  ~S19694C12(); // _ZN9S19694C12D2Ev
  S19694C12(); // tgen
};
//SIG(-1 S19694C12) C1{ VBC2{ BC3{ m} BC4{ BC5{ m FL Fc:0} BC3} vd FC6{}} vd}


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

static void Test_S19694C12()
{
  extern Class_Descriptor cd_S19694C12;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19694C12, buf);
    S19694C12 *dp, &lv = *(dp=new (buf) S19694C12());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19694C12)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19694C12)");
    /*is_ambiguous_... S19694C9::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19694C9*), ABISELECT(8,4), "S19694C12");
    check_base_class_offset(lv, (S20955C5*)(S19694C6*)(S19694C9*), ABISELECT(16,8), "S19694C12");
    check_base_class_offset(lv, (S2264C28*)(S19694C6*)(S19694C9*), ABISELECT(16,8), "S19694C12");
    check_base_class_offset(lv, (S19694C6*)(S19694C9*), ABISELECT(16,8), "S19694C12");
    check_base_class_offset(lv, (S19694C9*), ABISELECT(8,4), "S19694C12");
    test_class_info(&lv, &cd_S19694C12);
    dp->~S19694C12();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19694C12(Test_S19694C12, "S19694C12", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN9S19694C12C1Ev();
extern void _ZN9S19694C12D2Ev();
Name_Map name_map_S19694C12[] = {
  NSPAIR(_ZN9S19694C12C1Ev),
  NSPAIR(_ZN9S19694C12D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19694C6;
extern VTBL_ENTRY _ZTI8S19694C6[];
extern Class_Descriptor cd_S19694C9;
extern VTBL_ENTRY _ZTI8S19694C9[];
extern  VTBL_ENTRY _ZTV8S19694C9[];
static Base_Class bases_S19694C12[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    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
    4, //immediately_derived
  0, 0},
  {&cd_S20955C5,    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_S2264C28,    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_S19694C6,    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, 0},
  {&cd_S19694C9,    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 _ZTI9S19694C12[];
extern void _ZN9S19694C12D1Ev();
extern void _ZN9S19694C12D0Ev();
extern void ABISELECT(_ZTv0_n24_N9S19694C12D1Ev,_ZTv0_n12_N9S19694C12D1Ev)();
extern void ABISELECT(_ZThn8_N9S19694C12D1Ev,_ZThn4_N9S19694C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19694C12D0Ev,_ZTv0_n12_N9S19694C12D0Ev)();
extern void ABISELECT(_ZThn8_N9S19694C12D0Ev,_ZThn4_N9S19694C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19694C12[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI9S19694C12[0]),
  (VTBL_ENTRY)&_ZN9S19694C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19694C12D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI9S19694C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19694C12D1Ev,_ZTv0_n12_N9S19694C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19694C12D0Ev,_ZTv0_n12_N9S19694C12D0Ev),
};
extern VTBL_ENTRY _ZTV9S19694C12[];
static  VTT_ENTRY vtt_S19694C12[] = {
  {&(_ZTV9S19694C12[3]),  3,10},
  {&(_ZTV9S19694C12[8]),  8,10},
};
extern VTBL_ENTRY _ZTI9S19694C12[];
extern  VTBL_ENTRY _ZTV9S19694C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19694C12[];
static VTBL_ENTRY alt_thunk_names228[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19694C12D0Ev,_ZTv0_n12_N9S19694C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19694C12D0Ev,_ZThn4_N9S19694C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19694C12D1Ev,_ZTv0_n12_N9S19694C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N9S19694C12D1Ev,_ZThn4_N9S19694C12D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19694C12 = {  "S19694C12", // class name
  bases_S19694C12, 5,
  &(vtc_S19694C12[0]), // expected_vtbl_contents
  &(vtt_S19694C12[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI9S19694C12),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19694C12),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19694C12),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names228,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19694C1  : virtual S2398C25_nt , virtual S2264C38 , virtual S19694C4 , virtual S19694C11 , S19694C12 {
  virtual  ~S19694C1(); // _ZN8S19694C1D2Ev
  S19694C1(); // tgen
};
//SIG(1 S19694C1) C1{ VBC2{ m Fi Fc} VBC3{ m} VBC4{ VBC5{ VBC6{ BC7{ m FL Fc:0} BC8{ m}} VBC7 BC8} BC9{ BC8 BC6 vd FC10{}} Fi[8]} VBC11{ VBC3 BC6 VBC8 Fi} BC12{ VBC9 vd} vd}


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

static void Test_S19694C1()
{
  extern Class_Descriptor cd_S19694C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,29)];
    init_test(&cd_S19694C1, buf);
    S19694C1 *dp, &lv = *(dp=new (buf) S19694C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,112), "sizeof(S19694C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19694C1)");
    check_base_class_offset(lv, (S2398C25_nt*), ABISELECT(8,4), "S19694C1");
    check_base_class_offset(lv, (S2264C38*), 0, "S19694C1");
    check_base_class_offset(lv, (S2264C38*)(S19694C11*), 0, "S19694C1");
    /*is_ambiguous_... S19694C1::S19694C6 */ AMB_check_base_class_offset(lv, (S20955C5*)(S19694C6*), ABISELECT(80,64), "S19694C1");
    /*is_ambiguous_... S19694C1::S19694C6 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19694C6*), ABISELECT(80,64), "S19694C1");
    check_base_class_offset(lv, (S19694C6*)(S19694C5*), ABISELECT(80,64), "S19694C1");
    /*is_ambiguous_... S19694C5::S20955C5 */ AMB_check_base_class_offset(lv, (S20955C5*)(S19694C5*), ABISELECT(88,72), "S19694C1");
    /*is_ambiguous_... S19694C5::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19694C5*), ABISELECT(72,60), "S19694C1");
    check_base_class_offset(lv, (S19694C5*)(S19694C4*), ABISELECT(72,60), "S19694C1");
    /*is_ambiguous_... S19694C9::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19694C9*)(S19694C4*), ABISELECT(16,12), "S19694C1");
    check_base_class_offset(lv, (S20955C5*)(S19694C6*)(S19694C9*)(S19694C4*), ABISELECT(24,16), "S19694C1");
    check_base_class_offset(lv, (S2264C28*)(S19694C6*)(S19694C9*)(S19694C4*), ABISELECT(24,16), "S19694C1");
    check_base_class_offset(lv, (S19694C6*)(S19694C9*)(S19694C4*), ABISELECT(24,16), "S19694C1");
    check_base_class_offset(lv, (S19694C9*)(S19694C4*), ABISELECT(16,12), "S19694C1");
    check_base_class_offset(lv, (S19694C4*), ABISELECT(16,12), "S19694C1");
    check_base_class_offset(lv, (S20955C5*)(S19694C6*)(S19694C11*), ABISELECT(104,84), "S19694C1");
    check_base_class_offset(lv, (S2264C28*)(S19694C6*)(S19694C11*), ABISELECT(104,84), "S19694C1");
    check_base_class_offset(lv, (S19694C6*)(S19694C11*), ABISELECT(104,84), "S19694C1");
    /*is_ambiguous_... S19694C11::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19694C11*), 0, "S19694C1");
    check_base_class_offset(lv, (S19694C11*), ABISELECT(96,80), "S19694C1");
    /*is_ambiguous_... S19694C1::S19694C9 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19694C9*), ABISELECT(120,96), "S19694C1");
    /*is_ambiguous_... S19694C1::S19694C9 */ AMB_check_base_class_offset(lv, (S20955C5*)(S19694C6*)(S19694C9*), ABISELECT(128,100), "S19694C1");
    /*is_ambiguous_... S19694C1::S19694C9 */ AMB_check_base_class_offset(lv, (S2264C28*)(S19694C6*)(S19694C9*), ABISELECT(128,100), "S19694C1");
    /*is_ambiguous_... S19694C1::S19694C9 */ AMB_check_base_class_offset(lv, (S19694C6*)(S19694C9*), ABISELECT(128,100), "S19694C1");
    check_base_class_offset(lv, (S19694C9*)(S19694C12*), ABISELECT(120,96), "S19694C1");
    check_base_class_offset(lv, (S19694C12*), 0, "S19694C1");
    test_class_info(&lv, &cd_S19694C1);
    dp->~S19694C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19694C1(Test_S19694C1, "S19694C1", ABISELECT(144,112));

#else // __cplusplus

extern void _ZN8S19694C1C1Ev();
extern void _ZN8S19694C1D2Ev();
Name_Map name_map_S19694C1[] = {
  NSPAIR(_ZN8S19694C1C1Ev),
  NSPAIR(_ZN8S19694C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C25_nt;
extern VTBL_ENTRY _ZTI11S2398C25_nt[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19694C6;
extern VTBL_ENTRY _ZTI8S19694C6[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19694C5;
extern VTBL_ENTRY _ZTI8S19694C5[];
extern  VTBL_ENTRY _ZTV8S19694C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19694C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19694C6;
extern VTBL_ENTRY _ZTI8S19694C6[];
extern Class_Descriptor cd_S19694C9;
extern VTBL_ENTRY _ZTI8S19694C9[];
extern  VTBL_ENTRY _ZTV8S19694C9[];
extern Class_Descriptor cd_S19694C4;
extern VTBL_ENTRY _ZTI8S19694C4[];
extern  VTBL_ENTRY _ZTV8S19694C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19694C4[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19694C6;
extern VTBL_ENTRY _ZTI8S19694C6[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19694C11;
extern VTBL_ENTRY _ZTI9S19694C11[];
extern  VTBL_ENTRY _ZTV9S19694C11[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19694C11[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S19694C6;
extern VTBL_ENTRY _ZTI8S19694C6[];
extern Class_Descriptor cd_S19694C9;
extern VTBL_ENTRY _ZTI8S19694C9[];
extern  VTBL_ENTRY _ZTV8S19694C9[];
extern Class_Descriptor cd_S19694C12;
extern VTBL_ENTRY _ZTI9S19694C12[];
extern  VTBL_ENTRY _ZTV9S19694C12[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19694C12[];
static Base_Class bases_S19694C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C25_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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S20955C5,    ABISELECT(80,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
    4, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(80,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
    4, //immediately_derived
  0, 0},
  {&cd_S19694C6,    ABISELECT(80,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
    7, //immediately_derived
  0, 1},
  {&cd_S20955C5,    ABISELECT(88,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
    7, //immediately_derived
  0, 1},
  {&cd_S2264C28,    ABISELECT(72,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
    7, //immediately_derived
  0, 0},
  {&cd_S19694C5,    ABISELECT(72,60), //bcp->offset
    21, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    13, //immediately_derived
  0, 1},
  {&cd_S2264C28,    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
    12, //immediately_derived
  0, 0},
  {&cd_S20955C5,    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
    11, //immediately_derived
  0, 0},
  {&cd_S2264C28,    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
    11, //immediately_derived
  0, 0},
  {&cd_S19694C6,    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
    12, //immediately_derived
  0, 0},
  {&cd_S19694C9,    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
    2, //init_seq
    13, //immediately_derived
  0, 0},
  {&cd_S19694C4,    ABISELECT(16,12), //bcp->offset
    13, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S20955C5,    ABISELECT(104,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
    16, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(104,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
    16, //immediately_derived
  0, 0},
  {&cd_S19694C6,    ABISELECT(104,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
    18, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19694C11,    ABISELECT(96,80), //bcp->offset
    25, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    6, //bcp->index_in_construction_vtbl_array
    11, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S2264C28,    ABISELECT(120,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
    23, //immediately_derived
  0, 0},
  {&cd_S20955C5,    ABISELECT(128,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
    22, //immediately_derived
  0, 0},
  {&cd_S2264C28,    ABISELECT(128,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
    22, //immediately_derived
  0, 0},
  {&cd_S19694C6,    ABISELECT(128,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
    23, //immediately_derived
  0, 0},
  {&cd_S19694C9,    ABISELECT(120,96), //bcp->offset
    29, //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
    5, //init_seq
    24, //immediately_derived
  0, 1},
  {&cd_S19694C12,    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},
  {0}};
extern VTBL_ENTRY _ZTI8S19694C1[];
extern void _ZN8S19694C1D1Ev();
extern void _ZN8S19694C1D0Ev();
extern void ABISELECT(_ZTv0_n48_N8S19694C1D1Ev,_ZTv0_n24_N8S19694C1D1Ev)();
extern void ABISELECT(_ZThn16_N8S19694C1D1Ev,_ZThn12_N8S19694C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n48_N8S19694C1D0Ev,_ZTv0_n24_N8S19694C1D0Ev)();
extern void ABISELECT(_ZThn16_N8S19694C1D0Ev,_ZThn12_N8S19694C1D0Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19694C1D1Ev,_ZTv0_n12_N8S19694C1D1Ev)();
extern void ABISELECT(_ZThn120_N8S19694C1D1Ev,_ZThn96_N8S19694C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S19694C1D0Ev,_ZTv0_n12_N8S19694C1D0Ev)();
extern void ABISELECT(_ZThn120_N8S19694C1D0Ev,_ZThn96_N8S19694C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S19694C1[] = {
  0,
  ABISELECT(96,80),
  ABISELECT(88,72),
  ABISELECT(80,64),
  ABISELECT(72,60),
  ABISELECT(16,12),
  0,
  ABISELECT(8,4),
  ABISELECT(120,96),
  0,
  (VTBL_ENTRY)&(_ZTI8S19694C1[0]),
  (VTBL_ENTRY)&_ZN8S19694C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19694C1D0Ev,
  ABISELECT(-16,-12),
  ABISELECT(72,60),
  ABISELECT(64,52),
  ABISELECT(56,48),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19694C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19694C1D1Ev,_ZTv0_n24_N8S19694C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n48_N8S19694C1D0Ev,_ZTv0_n24_N8S19694C1D0Ev),
  ABISELECT(16,12),
  ABISELECT(8,4),
  ABISELECT(-72,-60),
  (VTBL_ENTRY)&(_ZTI8S19694C1[0]),
  ABISELECT(-96,-80),
  ABISELECT(-96,-80),
  ABISELECT(-96,-80),
  (VTBL_ENTRY)&(_ZTI8S19694C1[0]),
  ABISELECT(-120,-96),
  ABISELECT(-120,-96),
  (VTBL_ENTRY)&(_ZTI8S19694C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19694C1D1Ev,_ZTv0_n12_N8S19694C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S19694C1D0Ev,_ZTv0_n12_N8S19694C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S19694C1[];
extern void _ZN9S19694C12D1Ev();
extern void _ZN9S19694C12D0Ev();
static  VTBL_ENTRY _tg__ZTV9S19694C12__8S19694C1[] = {
  ABISELECT(120,96),
  0,
  (VTBL_ENTRY)&(_ZTI9S19694C12[0]),
  (VTBL_ENTRY)&_ZN9S19694C12D1Ev,
  (VTBL_ENTRY)&_ZN9S19694C12D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N9S19694C12D1Ev,_ZTv0_n12_N9S19694C12D1Ev)();
extern void ABISELECT(_ZThn120_N9S19694C12D1Ev,_ZThn96_N9S19694C12D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N9S19694C12D0Ev,_ZTv0_n12_N9S19694C12D0Ev)();
extern void ABISELECT(_ZThn120_N9S19694C12D0Ev,_ZThn96_N9S19694C12D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S19694C9__9S19694C12__8S19694C1[] = {
  ABISELECT(-120,-96),
  ABISELECT(-120,-96),
  (VTBL_ENTRY)&(_ZTI9S19694C12[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19694C12D1Ev,_ZTv0_n12_N9S19694C12D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N9S19694C12D0Ev,_ZTv0_n12_N9S19694C12D0Ev),
};
extern void _ZN8S19694C4D1Ev();
extern void _ZN8S19694C4D0Ev();
static  VTBL_ENTRY _tg__ZTV8S19694C4__8S19694C1[] = {
  ABISELECT(72,60),
  ABISELECT(64,52),
  ABISELECT(56,48),
  0,
  (VTBL_ENTRY)&(_ZTI8S19694C4[0]),
  (VTBL_ENTRY)&_ZN8S19694C4D1Ev,
  (VTBL_ENTRY)&_ZN8S19694C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19694C5__8S19694C4__8S19694C1[] = {
  ABISELECT(16,12),
  ABISELECT(8,4),
  ABISELECT(-56,-48),
  (VTBL_ENTRY)&(_ZTI8S19694C4[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19694C5__8S19694C1[] = {
  ABISELECT(16,12),
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19694C5[0]),
};
static  VTBL_ENTRY _tg__ZTV9S19694C11__8S19694C1[] = {
  ABISELECT(-96,-80),
  ABISELECT(-96,-80),
  0,
  (VTBL_ENTRY)&(_ZTI9S19694C11[0]),
};
static  VTT_ENTRY vtt_S19694C1[] = {
  {&(_ZTV8S19694C1[11]),  11,34},
  {&(_tg__ZTV9S19694C12__8S19694C1[3]),  3,5},
  {&(_tg__ZTV8S19694C9__9S19694C12__8S19694C1[3]),  3,5},
  {&(_ZTV8S19694C1[19]),  19,34},
  {&(_ZTV8S19694C1[25]),  25,34},
  {&(_ZTV8S19694C1[29]),  29,34},
  {&(_ZTV8S19694C1[32]),  32,34},
  {&(_tg__ZTV8S19694C4__8S19694C1[5]),  5,7},
  {&(_tg__ZTV8S19694C5__8S19694C4__8S19694C1[4]),  4,4},
  {&(_tg__ZTV8S19694C5__8S19694C1[4]),  4,4},
  {&(_tg__ZTV9S19694C11__8S19694C1[4]),  4,4},
};
extern VTBL_ENTRY _ZTI8S19694C1[];
extern  VTBL_ENTRY _ZTV8S19694C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19694C1[];
static VTBL_ENTRY alt_thunk_names229[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19694C12D0Ev,_ZTv0_n12_N9S19694C12D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19694C12D0Ev,_ZThn96_N9S19694C12D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N9S19694C12D1Ev,_ZTv0_n12_N9S19694C12D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N9S19694C12D1Ev,_ZThn96_N9S19694C12D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19694C1D0Ev,_ZTv0_n12_N8S19694C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19694C1D0Ev,_ZThn96_N8S19694C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S19694C1D1Ev,_ZTv0_n12_N8S19694C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn120_N8S19694C1D1Ev,_ZThn96_N8S19694C1D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19694C1D0Ev,_ZTv0_n24_N8S19694C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19694C1D0Ev,_ZThn12_N8S19694C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n48_N8S19694C1D1Ev,_ZTv0_n24_N8S19694C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn16_N8S19694C1D1Ev,_ZThn12_N8S19694C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S19694C1 = {  "S19694C1", // class name
  bases_S19694C1, 25,
  &(vtc_S19694C1[0]), // expected_vtbl_contents
  &(vtt_S19694C1[0]), // expected_vtt_contents
  ABISELECT(144,112), // object size
  NSPAIRA(_ZTI8S19694C1),ABISELECT(104,56), //typeinfo_var
  NSPAIRA(_ZTV8S19694C1),34, //virtual function table var
  11, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19694C1),11, //virtual table table var
  6, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names229,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19357C3  {
  ::S7218C6 s19357c3f0;
  virtual void  v5(); // _ZN8S19357C32v5Ev
  virtual void  v6(); // _ZN8S19357C32v6Ev
  virtual void  v7(); // _ZN8S19357C32v7Ev
  ~S19357C3(); // tgen
  S19357C3(); // tgen
};
//SIG(-1 S19357C3) C1{ v1 v2 v3 FC2{ BC3{ BC4{ v11 v12 v13 v14 v15 v16 Fi} v17} v4 v5 v6 v7 v8 v9 v10}}


void  S19357C3 ::v5(){vfunc_called(this, "_ZN8S19357C32v5Ev");}
void  S19357C3 ::v6(){vfunc_called(this, "_ZN8S19357C32v6Ev");}
void  S19357C3 ::v7(){vfunc_called(this, "_ZN8S19357C32v7Ev");}
S19357C3 ::~S19357C3(){ note_dtor("S19357C3", this);} // tgen
S19357C3 ::S19357C3(){ note_ctor("S19357C3", this);} // tgen

static void Test_S19357C3()
{
  extern Class_Descriptor cd_S19357C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19357C3, buf);
    S19357C3 *dp, &lv = *(dp=new (buf) S19357C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19357C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19357C3)");
    check_field_offset(lv, s19357c3f0, ABISELECT(8,4), "S19357C3.s19357c3f0");
    test_class_info(&lv, &cd_S19357C3);
    dp->~S19357C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19357C3(Test_S19357C3, "S19357C3", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S19357C3C1Ev();
extern void _ZN8S19357C3D1Ev();
Name_Map name_map_S19357C3[] = {
  NSPAIR(_ZN8S19357C3C1Ev),
  NSPAIR(_ZN8S19357C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19357C3[];
extern void _ZN8S19357C32v5Ev();
extern void _ZN8S19357C32v6Ev();
extern void _ZN8S19357C32v7Ev();
static  VTBL_ENTRY vtc_S19357C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19357C3[0]),
  (VTBL_ENTRY)&_ZN8S19357C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19357C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19357C32v7Ev,
};
extern VTBL_ENTRY _ZTI8S19357C3[];
extern  VTBL_ENTRY _ZTV8S19357C3[];
Class_Descriptor cd_S19357C3 = {  "S19357C3", // class name
  0,0,//no base classes
  &(vtc_S19357C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19357C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19357C3),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  S19357C2  : S19357C3 {
  void *s19357c2f0;
  char s19357c2f1;
  virtual void  v8(); // _ZN8S19357C22v8Ev
  virtual void  v9(); // _ZN8S19357C22v9Ev
  virtual void  v10(); // _ZN8S19357C23v10Ev
  virtual void  v11(); // _ZN8S19357C23v11Ev
  ~S19357C2(); // tgen
  S19357C2(); // tgen
};
//SIG(-1 S19357C2) C1{ BC2{ v5 v6 v7 FC3{ BC4{ BC5{ v15 v16 v17 v18 v19 v20 Fi} v21} v8 v9 v10 v11 v12 v13 v14}} v1 v2 v3 v4 Fp Fc}


void  S19357C2 ::v8(){vfunc_called(this, "_ZN8S19357C22v8Ev");}
void  S19357C2 ::v9(){vfunc_called(this, "_ZN8S19357C22v9Ev");}
void  S19357C2 ::v10(){vfunc_called(this, "_ZN8S19357C23v10Ev");}
void  S19357C2 ::v11(){vfunc_called(this, "_ZN8S19357C23v11Ev");}
S19357C2 ::~S19357C2(){ note_dtor("S19357C2", this);} // tgen
S19357C2 ::S19357C2(){ note_ctor("S19357C2", this);} // tgen

static void Test_S19357C2()
{
  extern Class_Descriptor cd_S19357C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S19357C2, buf);
    S19357C2 *dp, &lv = *(dp=new (buf) S19357C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S19357C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19357C2)");
    check_base_class_offset(lv, (S19357C3*), 0, "S19357C2");
    check_field_offset(lv, s19357c2f0, ABISELECT(24,12), "S19357C2.s19357c2f0");
    check_field_offset(lv, s19357c2f1, ABISELECT(32,16), "S19357C2.s19357c2f1");
    test_class_info(&lv, &cd_S19357C2);
    dp->~S19357C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19357C2(Test_S19357C2, "S19357C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN8S19357C2C1Ev();
extern void _ZN8S19357C2D1Ev();
Name_Map name_map_S19357C2[] = {
  NSPAIR(_ZN8S19357C2C1Ev),
  NSPAIR(_ZN8S19357C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19357C3;
extern VTBL_ENTRY _ZTI8S19357C3[];
extern  VTBL_ENTRY _ZTV8S19357C3[];
static Base_Class bases_S19357C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19357C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI8S19357C2[];
extern void _ZN8S19357C32v5Ev();
extern void _ZN8S19357C32v6Ev();
extern void _ZN8S19357C32v7Ev();
extern void _ZN8S19357C22v8Ev();
extern void _ZN8S19357C22v9Ev();
extern void _ZN8S19357C23v10Ev();
extern void _ZN8S19357C23v11Ev();
static  VTBL_ENTRY vtc_S19357C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19357C2[0]),
  (VTBL_ENTRY)&_ZN8S19357C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19357C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19357C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19357C22v8Ev,
  (VTBL_ENTRY)&_ZN8S19357C22v9Ev,
  (VTBL_ENTRY)&_ZN8S19357C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19357C23v11Ev,
};
extern VTBL_ENTRY _ZTI8S19357C2[];
extern  VTBL_ENTRY _ZTV8S19357C2[];
Class_Descriptor cd_S19357C2 = {  "S19357C2", // class name
  bases_S19357C2, 1,
  &(vtc_S19357C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI8S19357C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19357C2),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  S19357C6  {
  int s19357c6f0;
  virtual void  v12(); // _ZN8S19357C63v12Ev
  virtual void  v13(); // _ZN8S19357C63v13Ev
  virtual void  v14(); // _ZN8S19357C63v14Ev
  virtual void  v15(); // _ZN8S19357C63v15Ev
  virtual void  v16(); // _ZN8S19357C63v16Ev
  virtual void  v17(); // _ZN8S19357C63v17Ev
  ~S19357C6(); // tgen
  S19357C6(); // tgen
};
//SIG(-1 S19357C6) C1{ v1 v2 v3 v4 v5 v6 Fi}


void  S19357C6 ::v12(){vfunc_called(this, "_ZN8S19357C63v12Ev");}
void  S19357C6 ::v13(){vfunc_called(this, "_ZN8S19357C63v13Ev");}
void  S19357C6 ::v14(){vfunc_called(this, "_ZN8S19357C63v14Ev");}
void  S19357C6 ::v15(){vfunc_called(this, "_ZN8S19357C63v15Ev");}
void  S19357C6 ::v16(){vfunc_called(this, "_ZN8S19357C63v16Ev");}
void  S19357C6 ::v17(){vfunc_called(this, "_ZN8S19357C63v17Ev");}
S19357C6 ::~S19357C6(){ note_dtor("S19357C6", this);} // tgen
S19357C6 ::S19357C6(){ note_ctor("S19357C6", this);} // tgen

static void Test_S19357C6()
{
  extern Class_Descriptor cd_S19357C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19357C6, buf);
    S19357C6 *dp, &lv = *(dp=new (buf) S19357C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19357C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19357C6)");
    check_field_offset(lv, s19357c6f0, ABISELECT(8,4), "S19357C6.s19357c6f0");
    test_class_info(&lv, &cd_S19357C6);
    dp->~S19357C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19357C6(Test_S19357C6, "S19357C6", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19357C6C1Ev();
extern void _ZN8S19357C6D1Ev();
Name_Map name_map_S19357C6[] = {
  NSPAIR(_ZN8S19357C6C1Ev),
  NSPAIR(_ZN8S19357C6D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19357C6[];
extern void _ZN8S19357C63v12Ev();
extern void _ZN8S19357C63v13Ev();
extern void _ZN8S19357C63v14Ev();
extern void _ZN8S19357C63v15Ev();
extern void _ZN8S19357C63v16Ev();
extern void _ZN8S19357C63v17Ev();
static  VTBL_ENTRY vtc_S19357C6[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19357C6[0]),
  (VTBL_ENTRY)&_ZN8S19357C63v12Ev,
  (VTBL_ENTRY)&_ZN8S19357C63v13Ev,
  (VTBL_ENTRY)&_ZN8S19357C63v14Ev,
  (VTBL_ENTRY)&_ZN8S19357C63v15Ev,
  (VTBL_ENTRY)&_ZN8S19357C63v16Ev,
  (VTBL_ENTRY)&_ZN8S19357C63v17Ev,
};
extern VTBL_ENTRY _ZTI8S19357C6[];
extern  VTBL_ENTRY _ZTV8S19357C6[];
Class_Descriptor cd_S19357C6 = {  "S19357C6", // class name
  0,0,//no base classes
  &(vtc_S19357C6[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19357C6),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19357C6),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  S19357C1  : virtual S19357C2 {
  ::S19357C6 s19357c1f0;
  virtual  ~S19357C1(); // _ZN8S19357C1D2Ev
  virtual void  v1(); // _ZN8S19357C12v1Ev
  virtual void  v2(); // _ZN8S19357C12v2Ev
  virtual void  v3(); // _ZN8S19357C12v3Ev
  virtual void  v4(); // _ZN8S19357C12v4Ev
  S19357C1(); // tgen
};
//SIG(1 S19357C1) C1{ VBC2{ BC3{ v5 v6 v7 FC4{ BC5{ BC6{ v25 v26 v27 v28 v29 v30 Fi} v31} v18 v19 v20 v21 v22 v23 v24}} v8 v9 v10 v11 Fp Fc} vd v1 v2 v3 v4 FC7{ v12 v13 v14 v15 v16 v17 Fi}}


 S19357C1 ::~S19357C1(){ note_dtor("S19357C1", this);}
void  S19357C1 ::v1(){vfunc_called(this, "_ZN8S19357C12v1Ev");}
void  S19357C1 ::v2(){vfunc_called(this, "_ZN8S19357C12v2Ev");}
void  S19357C1 ::v3(){vfunc_called(this, "_ZN8S19357C12v3Ev");}
void  S19357C1 ::v4(){vfunc_called(this, "_ZN8S19357C12v4Ev");}
S19357C1 ::S19357C1(){ note_ctor("S19357C1", this);} // tgen

static void Test_S19357C1()
{
  extern Class_Descriptor cd_S19357C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[9];
    init_test(&cd_S19357C1, buf);
    S19357C1 *dp, &lv = *(dp=new (buf) S19357C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,32), "sizeof(S19357C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19357C1)");
    check_base_class_offset(lv, (S19357C3*)(S19357C2*), ABISELECT(24,12), "S19357C1");
    check_base_class_offset(lv, (S19357C2*), ABISELECT(24,12), "S19357C1");
    check_field_offset(lv, s19357c1f0, ABISELECT(8,4), "S19357C1.s19357c1f0");
    test_class_info(&lv, &cd_S19357C1);
    dp->~S19357C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19357C1(Test_S19357C1, "S19357C1", ABISELECT(64,32));

#else // __cplusplus

extern void _ZN8S19357C1C1Ev();
extern void _ZN8S19357C1D2Ev();
Name_Map name_map_S19357C1[] = {
  NSPAIR(_ZN8S19357C1C1Ev),
  NSPAIR(_ZN8S19357C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S19357C3;
extern VTBL_ENTRY _ZTI8S19357C3[];
extern  VTBL_ENTRY _ZTV8S19357C3[];
extern Class_Descriptor cd_S19357C2;
extern VTBL_ENTRY _ZTI8S19357C2[];
extern  VTBL_ENTRY _ZTV8S19357C2[];
static Base_Class bases_S19357C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19357C3,    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
  0, 0},
  {&cd_S19357C2,    ABISELECT(24,12), //bcp->offset
    9, //bcp->virtual_function_table_offset
    9, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S19357C1[];
extern void _ZN8S19357C1D1Ev();
extern void _ZN8S19357C1D0Ev();
extern void _ZN8S19357C12v1Ev();
extern void _ZN8S19357C12v2Ev();
extern void _ZN8S19357C12v3Ev();
extern void _ZN8S19357C12v4Ev();
extern void _ZN8S19357C32v5Ev();
extern void _ZN8S19357C32v6Ev();
extern void _ZN8S19357C32v7Ev();
extern void _ZN8S19357C22v8Ev();
extern void _ZN8S19357C22v9Ev();
extern void _ZN8S19357C23v10Ev();
extern void _ZN8S19357C23v11Ev();
static  VTBL_ENTRY vtc_S19357C1[] = {
  ABISELECT(24,12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19357C1[0]),
  (VTBL_ENTRY)&_ZN8S19357C1D1Ev,
  (VTBL_ENTRY)&_ZN8S19357C1D0Ev,
  (VTBL_ENTRY)&_ZN8S19357C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19357C12v2Ev,
  (VTBL_ENTRY)&_ZN8S19357C12v3Ev,
  (VTBL_ENTRY)&_ZN8S19357C12v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19357C1[0]),
  (VTBL_ENTRY)&_ZN8S19357C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19357C32v6Ev,
  (VTBL_ENTRY)&_ZN8S19357C32v7Ev,
  (VTBL_ENTRY)&_ZN8S19357C22v8Ev,
  (VTBL_ENTRY)&_ZN8S19357C22v9Ev,
  (VTBL_ENTRY)&_ZN8S19357C23v10Ev,
  (VTBL_ENTRY)&_ZN8S19357C23v11Ev,
};
extern VTBL_ENTRY _ZTV8S19357C1[];
static  VTT_ENTRY vtt_S19357C1[] = {
  {&(_ZTV8S19357C1[3]),  3,25},
  {&(_ZTV8S19357C1[18]),  18,25},
};
extern VTBL_ENTRY _ZTI8S19357C1[];
extern  VTBL_ENTRY _ZTV8S19357C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19357C1[];
Class_Descriptor cd_S19357C1 = {  "S19357C1", // class name
  bases_S19357C1, 2,
  &(vtc_S19357C1[0]), // expected_vtbl_contents
  &(vtt_S19357C1[0]), // expected_vtt_contents
  ABISELECT(64,32), // object size
  NSPAIRA(_ZTI8S19357C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19357C1),25, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19357C1),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  S4789C3  {
  ::S2264C20_nt s4789c3f0;
  int s4789c3f1[2];
  char s4789c3f2;
  virtual  ~S4789C3(); // _ZN7S4789C3D1Ev
  virtual void  v3(); // _ZN7S4789C32v3Ev
  virtual void  v4(); // _ZN7S4789C32v4Ev
  virtual void  v5(); // _ZN7S4789C32v5Ev
  S4789C3(); // tgen
};
//SIG(-1 S4789C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4789C3 ::~S4789C3(){ note_dtor("S4789C3", this);}
void  S4789C3 ::v3(){vfunc_called(this, "_ZN7S4789C32v3Ev");}
void  S4789C3 ::v4(){vfunc_called(this, "_ZN7S4789C32v4Ev");}
void  S4789C3 ::v5(){vfunc_called(this, "_ZN7S4789C32v5Ev");}
S4789C3 ::S4789C3(){ note_ctor("S4789C3", this);} // tgen

static void Test_S4789C3()
{
  extern Class_Descriptor cd_S4789C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4789C3, buf);
    S4789C3 *dp, &lv = *(dp=new (buf) S4789C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4789C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4789C3)");
    check_field_offset(lv, s4789c3f0, ABISELECT(8,4), "S4789C3.s4789c3f0");
    check_field_offset(lv, s4789c3f1, ABISELECT(24,16), "S4789C3.s4789c3f1");
    check_field_offset(lv, s4789c3f2, ABISELECT(32,24), "S4789C3.s4789c3f2");
    test_class_info(&lv, &cd_S4789C3);
    dp->~S4789C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4789C3(Test_S4789C3, "S4789C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4789C3C1Ev();
extern void _ZN7S4789C3D1Ev();
Name_Map name_map_S4789C3[] = {
  NSPAIR(_ZN7S4789C3C1Ev),
  NSPAIR(_ZN7S4789C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4789C3[];
extern void _ZN7S4789C3D1Ev();
extern void _ZN7S4789C3D0Ev();
extern void _ZN7S4789C32v3Ev();
extern void _ZN7S4789C32v4Ev();
extern void _ZN7S4789C32v5Ev();
static  VTBL_ENTRY vtc_S4789C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4789C3[0]),
  (VTBL_ENTRY)&_ZN7S4789C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4789C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4789C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4789C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4789C32v5Ev,
};
extern VTBL_ENTRY _ZTI7S4789C3[];
extern  VTBL_ENTRY _ZTV7S4789C3[];
Class_Descriptor cd_S4789C3 = {  "S4789C3", // class name
  0,0,//no base classes
  &(vtc_S4789C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4789C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4789C3),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  S4789C2  : S4789C3 {
  void *s4789c2f0;
  virtual void  v6(); // _ZN7S4789C22v6Ev
  virtual void  v7(); // _ZN7S4789C22v7Ev
  ~S4789C2(); // tgen
  S4789C2(); // tgen
};
//SIG(-1 S4789C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4789C2 ::v6(){vfunc_called(this, "_ZN7S4789C22v6Ev");}
void  S4789C2 ::v7(){vfunc_called(this, "_ZN7S4789C22v7Ev");}
S4789C2 ::~S4789C2(){ note_dtor("S4789C2", this);} // tgen
S4789C2 ::S4789C2(){ note_ctor("S4789C2", this);} // tgen

static void Test_S4789C2()
{
  extern Class_Descriptor cd_S4789C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4789C2, buf);
    S4789C2 *dp, &lv = *(dp=new (buf) S4789C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4789C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4789C2)");
    check_base_class_offset(lv, (S4789C3*), 0, "S4789C2");
    check_field_offset(lv, s4789c2f0, ABISELECT(40,28), "S4789C2.s4789c2f0");
    test_class_info(&lv, &cd_S4789C2);
    dp->~S4789C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4789C2(Test_S4789C2, "S4789C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4789C2C1Ev();
extern void _ZN7S4789C2D1Ev();
Name_Map name_map_S4789C2[] = {
  NSPAIR(_ZN7S4789C2C1Ev),
  NSPAIR(_ZN7S4789C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4789C3;
extern VTBL_ENTRY _ZTI7S4789C3[];
extern  VTBL_ENTRY _ZTV7S4789C3[];
static Base_Class bases_S4789C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4789C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S4789C2[];
extern void _ZN7S4789C2D1Ev();
extern void _ZN7S4789C2D0Ev();
extern void _ZN7S4789C32v3Ev();
extern void _ZN7S4789C32v4Ev();
extern void _ZN7S4789C32v5Ev();
extern void _ZN7S4789C22v6Ev();
extern void _ZN7S4789C22v7Ev();
static  VTBL_ENTRY vtc_S4789C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4789C2[0]),
  (VTBL_ENTRY)&_ZN7S4789C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4789C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4789C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4789C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4789C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4789C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4789C22v7Ev,
};
extern VTBL_ENTRY _ZTI7S4789C2[];
extern  VTBL_ENTRY _ZTV7S4789C2[];
Class_Descriptor cd_S4789C2 = {  "S4789C2", // class name
  bases_S4789C2, 1,
  &(vtc_S4789C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4789C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4789C2),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  S4789C1  : S4789C2 {
  __tsi64 s4789c1f0;
  ::S2264C20_nt s4789c1f1;
  ::S2264C20_nt s4789c1f2;
  int s4789c1f3[2];
  ::S8549C9 s4789c1f4;
  virtual  ~S4789C1(); // _ZN7S4789C1D1Ev
  virtual void  v1(); // _ZN7S4789C12v1Ev
  virtual void  v2(); // _ZN7S4789C12v2Ev
  S4789C1(); // tgen
};
//SIG(1 S4789C1) C1{ BC2{ BC3{ vd v3 v4 v5 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v6 v7 Fp} vd v1 v2 FL FC4 FC4 Fi[2] FC6{ m FL Fc FC7{ m Fp Fi[2] FC8{ m}} Fi}}


 S4789C1 ::~S4789C1(){ note_dtor("S4789C1", this);}
void  S4789C1 ::v1(){vfunc_called(this, "_ZN7S4789C12v1Ev");}
void  S4789C1 ::v2(){vfunc_called(this, "_ZN7S4789C12v2Ev");}
S4789C1 ::S4789C1(){ note_ctor("S4789C1", this);} // tgen

static void Test_S4789C1()
{
  extern Class_Descriptor cd_S4789C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,27)];
    init_test(&cd_S4789C1, buf);
    S4789C1 *dp, &lv = *(dp=new (buf) S4789C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,104), "sizeof(S4789C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4789C1)");
    check_base_class_offset(lv, (S4789C3*)(S4789C2*), 0, "S4789C1");
    check_base_class_offset(lv, (S4789C2*), 0, "S4789C1");
    check_field_offset(lv, s4789c1f0, ABISELECT(48,32), "S4789C1.s4789c1f0");
    check_field_offset(lv, s4789c1f1, ABISELECT(56,40), "S4789C1.s4789c1f1");
    check_field_offset(lv, s4789c1f2, ABISELECT(72,52), "S4789C1.s4789c1f2");
    check_field_offset(lv, s4789c1f3, ABISELECT(88,64), "S4789C1.s4789c1f3");
    check_field_offset(lv, s4789c1f4, ABISELECT(96,72), "S4789C1.s4789c1f4");
    test_class_info(&lv, &cd_S4789C1);
    dp->~S4789C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4789C1(Test_S4789C1, "S4789C1", ABISELECT(144,104));

#else // __cplusplus

extern void _ZN7S4789C1C1Ev();
extern void _ZN7S4789C1D1Ev();
Name_Map name_map_S4789C1[] = {
  NSPAIR(_ZN7S4789C1C1Ev),
  NSPAIR(_ZN7S4789C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4789C3;
extern VTBL_ENTRY _ZTI7S4789C3[];
extern  VTBL_ENTRY _ZTV7S4789C3[];
extern Class_Descriptor cd_S4789C2;
extern VTBL_ENTRY _ZTI7S4789C2[];
extern  VTBL_ENTRY _ZTV7S4789C2[];
static Base_Class bases_S4789C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4789C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4789C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4789C1[];
extern void _ZN7S4789C1D1Ev();
extern void _ZN7S4789C1D0Ev();
extern void _ZN7S4789C32v3Ev();
extern void _ZN7S4789C32v4Ev();
extern void _ZN7S4789C32v5Ev();
extern void _ZN7S4789C22v6Ev();
extern void _ZN7S4789C22v7Ev();
extern void _ZN7S4789C12v1Ev();
extern void _ZN7S4789C12v2Ev();
static  VTBL_ENTRY vtc_S4789C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4789C1[0]),
  (VTBL_ENTRY)&_ZN7S4789C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4789C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4789C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4789C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4789C32v5Ev,
  (VTBL_ENTRY)&_ZN7S4789C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4789C22v7Ev,
  (VTBL_ENTRY)&_ZN7S4789C12v1Ev,
  (VTBL_ENTRY)&_ZN7S4789C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S4789C1[];
extern  VTBL_ENTRY _ZTV7S4789C1[];
Class_Descriptor cd_S4789C1 = {  "S4789C1", // class name
  bases_S4789C1, 2,
  &(vtc_S4789C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,104), // object size
  NSPAIRA(_ZTI7S4789C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4789C1),11, //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  S13557C3  {
  void *s13557c3f0;
  void *s13557c3f1;
  void *s13557c3f2;
  void *s13557c3f3;
  void *s13557c3f4;
  void *s13557c3f5;
  void *s13557c3f6;
  void *s13557c3f7;
  void *s13557c3f8;
  void *s13557c3f9;
  void *s13557c3f10;
  void *s13557c3f11;
  void *s13557c3f12;
  void *s13557c3f13;
  void *s13557c3f14;
  void *s13557c3f15;
};
//SIG(1 S13557C3) C1{ Fp[16]}



static void Test_S13557C3()
{
  {
    init_simple_test("S13557C3");
    S13557C3 lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S13557C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13557C3)");
    check_field_offset(lv, s13557c3f0, 0, "S13557C3.s13557c3f0");
    check_field_offset(lv, s13557c3f1, ABISELECT(8,4), "S13557C3.s13557c3f1");
    check_field_offset(lv, s13557c3f2, ABISELECT(16,8), "S13557C3.s13557c3f2");
    check_field_offset(lv, s13557c3f3, ABISELECT(24,12), "S13557C3.s13557c3f3");
    check_field_offset(lv, s13557c3f4, ABISELECT(32,16), "S13557C3.s13557c3f4");
    check_field_offset(lv, s13557c3f5, ABISELECT(40,20), "S13557C3.s13557c3f5");
    check_field_offset(lv, s13557c3f6, ABISELECT(48,24), "S13557C3.s13557c3f6");
    check_field_offset(lv, s13557c3f7, ABISELECT(56,28), "S13557C3.s13557c3f7");
    check_field_offset(lv, s13557c3f8, ABISELECT(64,32), "S13557C3.s13557c3f8");
    check_field_offset(lv, s13557c3f9, ABISELECT(72,36), "S13557C3.s13557c3f9");
    check_field_offset(lv, s13557c3f10, ABISELECT(80,40), "S13557C3.s13557c3f10");
    check_field_offset(lv, s13557c3f11, ABISELECT(88,44), "S13557C3.s13557c3f11");
    check_field_offset(lv, s13557c3f12, ABISELECT(96,48), "S13557C3.s13557c3f12");
    check_field_offset(lv, s13557c3f13, ABISELECT(104,52), "S13557C3.s13557c3f13");
    check_field_offset(lv, s13557c3f14, ABISELECT(112,56), "S13557C3.s13557c3f14");
    check_field_offset(lv, s13557c3f15, ABISELECT(120,60), "S13557C3.s13557c3f15");
  }
}
static Arrange_To_Call_Me vS13557C3(Test_S13557C3, "S13557C3", ABISELECT(128,64));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

union  S13557C2  {
  ::S13557C3 s13557c2f0;
  void *s13557c2f1[16];
};
//SIG(1 S13557C2) U1{ FC2{ Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp} Fp[16]}

#endif // __cplusplus
#ifdef __cplusplus

struct  S13557C4_nt  {
  __tsi64 s13557c4f0[4];
};
//SIG(-1 S13557C4_nt) C1{ FL[4]}



//skip512 S13557C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13557C1  {
  int s13557c1f0[5];
  void *s13557c1f1[2];
  ::S13557C2 s13557c1f2;
  ::S13557C4_nt s13557c1f3;
  int s13557c1f4;
  int s13557c1f5;
  int s13557c1f6;
  int s13557c1f7;
  int s13557c1f8;
  int s13557c1f9;
  int s13557c1f10;
  char s13557c1f11[6];
};
//SIG(1 S13557C1) C1{ Fi[5] Fp[2] FU2{ FC3{ Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp} Fp[16]} FC4{ FL[4]} Fi Fi Fi Fi Fi Fi Fi Fc[6]}



static void Test_S13557C1()
{
  {
    init_simple_test("S13557C1");
    S13557C1 lv;
    check2(sizeof(lv), ABISELECT(240,160), "sizeof(S13557C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13557C1)");
    check_field_offset(lv, s13557c1f0, 0, "S13557C1.s13557c1f0");
    check_field_offset(lv, s13557c1f1, ABISELECT(24,20), "S13557C1.s13557c1f1");
    check_field_offset(lv, s13557c1f2, ABISELECT(40,28), "S13557C1.s13557c1f2");
    check_field_offset(lv, s13557c1f3, ABISELECT(168,92), "S13557C1.s13557c1f3");
    check_field_offset(lv, s13557c1f4, ABISELECT(200,124), "S13557C1.s13557c1f4");
    check_field_offset(lv, s13557c1f5, ABISELECT(204,128), "S13557C1.s13557c1f5");
    check_field_offset(lv, s13557c1f6, ABISELECT(208,132), "S13557C1.s13557c1f6");
    check_field_offset(lv, s13557c1f7, ABISELECT(212,136), "S13557C1.s13557c1f7");
    check_field_offset(lv, s13557c1f8, ABISELECT(216,140), "S13557C1.s13557c1f8");
    check_field_offset(lv, s13557c1f9, ABISELECT(220,144), "S13557C1.s13557c1f9");
    check_field_offset(lv, s13557c1f10, ABISELECT(224,148), "S13557C1.s13557c1f10");
    check_field_offset(lv, s13557c1f11, ABISELECT(228,152), "S13557C1.s13557c1f11");
  }
}
static Arrange_To_Call_Me vS13557C1(Test_S13557C1, "S13557C1", ABISELECT(240,160));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13556C4_nt  {
  long s13556c4f0[4];
};
//SIG(-1 S13556C4_nt) C1{ Fl[4]}



//skip512 S13556C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13556C1  {
  int s13556c1f0[5];
  void *s13556c1f1[2];
  ::S13557C2 s13556c1f2;
  ::S13556C4_nt s13556c1f3;
  int s13556c1f4;
  int s13556c1f5;
  int s13556c1f6;
  int s13556c1f7;
  int s13556c1f8;
  int s13556c1f9;
  int s13556c1f10;
  char s13556c1f11[6];
};
//SIG(1 S13556C1) C1{ Fi[5] Fp[2] FU2{ FC3{ Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp Fp} Fp[16]} FC4{ Fl[4]} Fi Fi Fi Fi Fi Fi Fi Fc[6]}



static void Test_S13556C1()
{
  {
    init_simple_test("S13556C1");
    S13556C1 lv;
    check2(sizeof(lv), ABISELECT(240,144), "sizeof(S13556C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13556C1)");
    check_field_offset(lv, s13556c1f0, 0, "S13556C1.s13556c1f0");
    check_field_offset(lv, s13556c1f1, ABISELECT(24,20), "S13556C1.s13556c1f1");
    check_field_offset(lv, s13556c1f2, ABISELECT(40,28), "S13556C1.s13556c1f2");
    check_field_offset(lv, s13556c1f3, ABISELECT(168,92), "S13556C1.s13556c1f3");
    check_field_offset(lv, s13556c1f4, ABISELECT(200,108), "S13556C1.s13556c1f4");
    check_field_offset(lv, s13556c1f5, ABISELECT(204,112), "S13556C1.s13556c1f5");
    check_field_offset(lv, s13556c1f6, ABISELECT(208,116), "S13556C1.s13556c1f6");
    check_field_offset(lv, s13556c1f7, ABISELECT(212,120), "S13556C1.s13556c1f7");
    check_field_offset(lv, s13556c1f8, ABISELECT(216,124), "S13556C1.s13556c1f8");
    check_field_offset(lv, s13556c1f9, ABISELECT(220,128), "S13556C1.s13556c1f9");
    check_field_offset(lv, s13556c1f10, ABISELECT(224,132), "S13556C1.s13556c1f10");
    check_field_offset(lv, s13556c1f11, ABISELECT(228,136), "S13556C1.s13556c1f11");
  }
}
static Arrange_To_Call_Me vS13556C1(Test_S13556C1, "S13556C1", ABISELECT(240,144));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2640C2_nt  : S3351C8_nt {
};
//SIG(-1 S2640C2_nt) C1{ BC2{ m Fi}}



//skip512 S2640C2_nt

#else // __cplusplus

extern Class_Descriptor cd_S3351C8_nt;
extern VTBL_ENTRY _ZTI10S3351C8_nt[];
static Base_Class bases_S2640C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3351C8_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_S2640C2_nt = {  "S2640C2_nt", // class name
  bases_S2640C2_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  S2640C6_nt  {
  void *s2640c6f0;
  int s2640c6f1;
  void  mf2640c6(); // _ZN10S2640C6_nt8mf2640c6Ev
};
//SIG(-1 S2640C6_nt) C1{ m Fp Fi}


void  S2640C6_nt ::mf2640c6(){}

//skip512 S2640C6_nt

#else // __cplusplus

Class_Descriptor cd_S2640C6_nt = {  "S2640C6_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(16,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  S2640C7_nt  {
  int s2640c7f0[2];
};
//SIG(-1 S2640C7_nt) C1{ Fi[2]}



//skip512 S2640C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2640C5  : S2640C6_nt {
  ::S2640C7_nt s2640c5f0;
};
//SIG(-1 S2640C5) C1{ BC2{ m Fp Fi} FC3{ Fi[2]}}



static void Test_S2640C5()
{
  extern Class_Descriptor cd_S2640C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S2640C5, buf);
    S2640C5 &lv = *(new (buf) S2640C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S2640C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2640C5)");
    check_base_class_offset(lv, (S2640C6_nt*), 0, "S2640C5");
    check_field_offset(lv, s2640c5f0, ABISELECT(16,8), "S2640C5.s2640c5f0");
    test_class_info(&lv, &cd_S2640C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2640C5(Test_S2640C5, "S2640C5", ABISELECT(24,16));

#else // __cplusplus

extern Class_Descriptor cd_S2640C6_nt;
static Base_Class bases_S2640C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2640C6_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_S2640C5 = {  "S2640C5", // class name
  bases_S2640C5, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(24,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  S2640C4  {
  int s2640c4f0;
  ::S2640C5 s2640c4f1;
  void  mf2640c4(); // _ZN7S2640C48mf2640c4Ev
};
//SIG(-1 S2640C4) C1{ m Fi FC2{ BC3{ m Fp Fi} FC4{ Fi[2]}}}


void  S2640C4 ::mf2640c4(){}

static void Test_S2640C4()
{
  {
    init_simple_test("S2640C4");
    S2640C4 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S2640C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2640C4)");
    check_field_offset(lv, s2640c4f0, 0, "S2640C4.s2640c4f0");
    check_field_offset(lv, s2640c4f1, ABISELECT(8,4), "S2640C4.s2640c4f1");
  }
}
static Arrange_To_Call_Me vS2640C4(Test_S2640C4, "S2640C4", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2640C9_nt  {
  void *s2640c9f0;
  int s2640c9f1[4];
  void  mf2640c9(); // _ZN10S2640C9_nt8mf2640c9Ev
};
//SIG(-1 S2640C9_nt) C1{ m Fp Fi[4]}


void  S2640C9_nt ::mf2640c9(){}

//skip512 S2640C9_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2640C8_nt  {
  ::S2640C9_nt s2640c8f0;
  void  mf2640c8(); // _ZN10S2640C8_nt8mf2640c8Ev
};
//SIG(-1 S2640C8_nt) C1{ m FC2{ m Fp Fi[4]}}


void  S2640C8_nt ::mf2640c8(){}

//skip512 S2640C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2640C1  : S2640C2_nt {
  ::S2640C4 s2640c1f0;
  ::S2640C8_nt s2640c1f1;
  void *s2640c1f2[2];
  ::S5635C32 s2640c1f3;
  int s2640c1f4[2];
  short s2640c1f5;
  int s2640c1f6:3;
  unsigned char s2640c1f7:1;
};
//SIG(1 S2640C1) C1{ BC2{ BC3{ m Fi}} FC4{ m Fi FC5{ BC6{ m Fp Fi} FC7{ Fi[2]}}} FC8{ m FC9{ m Fp Fi[4]}} Fp[2] FC10{ m Fp} Fi[2] Fs Fi:3 Fc:1}



static void Test_S2640C1()
{
  extern Class_Descriptor cd_S2640C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,18)];
    init_test(&cd_S2640C1, buf);
    S2640C1 &lv = *(new (buf) S2640C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,68), "sizeof(S2640C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2640C1)");
    check_base_class_offset(lv, (S3351C8_nt*)(S2640C2_nt*), 0, "S2640C1");
    check_base_class_offset(lv, (S2640C2_nt*), 0, "S2640C1");
    check_field_offset(lv, s2640c1f0, ABISELECT(8,4), "S2640C1.s2640c1f0");
    check_field_offset(lv, s2640c1f1, ABISELECT(40,24), "S2640C1.s2640c1f1");
    check_field_offset(lv, s2640c1f2, ABISELECT(64,44), "S2640C1.s2640c1f2");
    check_field_offset(lv, s2640c1f3, ABISELECT(80,52), "S2640C1.s2640c1f3");
    check_field_offset(lv, s2640c1f4, ABISELECT(88,56), "S2640C1.s2640c1f4");
    check_field_offset(lv, s2640c1f5, ABISELECT(96,64), "S2640C1.s2640c1f5");
    set_bf_and_test(lv, s2640c1f6, ABISELECT(98,66), 0, 3, 1, "S2640C1");
    set_bf_and_test(lv, s2640c1f6, ABISELECT(98,66), 0, 3, hide_sll(1LL<<2), "S2640C1");
    set_bf_and_test(lv, s2640c1f7, ABISELECT(98,66), 3, 1, 1, "S2640C1");
    test_class_info(&lv, &cd_S2640C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2640C1(Test_S2640C1, "S2640C1", ABISELECT(104,68));

#else // __cplusplus

extern Class_Descriptor cd_S3351C8_nt;
extern VTBL_ENTRY _ZTI10S3351C8_nt[];
extern Class_Descriptor cd_S2640C2_nt;
static Base_Class bases_S2640C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3351C8_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_S2640C2_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_S2640C1 = {  "S2640C1", // class name
  bases_S2640C1, 2,
  0, // no vftv
  0, //no vtt
  ABISELECT(104,68), // 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  S6420C2  {
  virtual void  v1(); // _ZN7S6420C22v1Ev
  virtual void  v2(); // _ZN7S6420C22v2Ev
  ~S6420C2(); // tgen
  S6420C2(); // tgen
};
//SIG(-1 S6420C2) C1{ v1 v2}


void  S6420C2 ::v1(){vfunc_called(this, "_ZN7S6420C22v1Ev");}
void  S6420C2 ::v2(){vfunc_called(this, "_ZN7S6420C22v2Ev");}
S6420C2 ::~S6420C2(){ note_dtor("S6420C2", this);} // tgen
S6420C2 ::S6420C2(){ note_ctor("S6420C2", this);} // tgen

static void Test_S6420C2()
{
  extern Class_Descriptor cd_S6420C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S6420C2, buf);
    S6420C2 *dp, &lv = *(dp=new (buf) S6420C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S6420C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6420C2)");
    test_class_info(&lv, &cd_S6420C2);
    dp->~S6420C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6420C2(Test_S6420C2, "S6420C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S6420C2C1Ev();
extern void _ZN7S6420C2D1Ev();
Name_Map name_map_S6420C2[] = {
  NSPAIR(_ZN7S6420C2C1Ev),
  NSPAIR(_ZN7S6420C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6420C2[];
extern void _ZN7S6420C22v1Ev();
extern void _ZN7S6420C22v2Ev();
static  VTBL_ENTRY vtc_S6420C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6420C2[0]),
  (VTBL_ENTRY)&_ZN7S6420C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6420C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S6420C2[];
extern  VTBL_ENTRY _ZTV7S6420C2[];
Class_Descriptor cd_S6420C2 = {  "S6420C2", // class name
  0,0,//no base classes
  &(vtc_S6420C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S6420C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6420C2),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  S6420C5  {
  int s6420c5f0;
  virtual void  v3(); // _ZN7S6420C52v3Ev
  virtual void  v4(); // _ZN7S6420C52v4Ev
  virtual void  v5(); // _ZN7S6420C52v5Ev
  virtual void  v6(); // _ZN7S6420C52v6Ev
  virtual void  v7(); // _ZN7S6420C52v7Ev
  virtual void  v8(); // _ZN7S6420C52v8Ev
  ~S6420C5(); // tgen
  S6420C5(); // tgen
};
//SIG(-1 S6420C5) C1{ v1 v2 v3 v4 v5 v6 Fi}


void  S6420C5 ::v3(){vfunc_called(this, "_ZN7S6420C52v3Ev");}
void  S6420C5 ::v4(){vfunc_called(this, "_ZN7S6420C52v4Ev");}
void  S6420C5 ::v5(){vfunc_called(this, "_ZN7S6420C52v5Ev");}
void  S6420C5 ::v6(){vfunc_called(this, "_ZN7S6420C52v6Ev");}
void  S6420C5 ::v7(){vfunc_called(this, "_ZN7S6420C52v7Ev");}
void  S6420C5 ::v8(){vfunc_called(this, "_ZN7S6420C52v8Ev");}
S6420C5 ::~S6420C5(){ note_dtor("S6420C5", this);} // tgen
S6420C5 ::S6420C5(){ note_ctor("S6420C5", this);} // tgen

static void Test_S6420C5()
{
  extern Class_Descriptor cd_S6420C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6420C5, buf);
    S6420C5 *dp, &lv = *(dp=new (buf) S6420C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6420C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6420C5)");
    check_field_offset(lv, s6420c5f0, ABISELECT(8,4), "S6420C5.s6420c5f0");
    test_class_info(&lv, &cd_S6420C5);
    dp->~S6420C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6420C5(Test_S6420C5, "S6420C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6420C5C1Ev();
extern void _ZN7S6420C5D1Ev();
Name_Map name_map_S6420C5[] = {
  NSPAIR(_ZN7S6420C5C1Ev),
  NSPAIR(_ZN7S6420C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6420C5[];
extern void _ZN7S6420C52v3Ev();
extern void _ZN7S6420C52v4Ev();
extern void _ZN7S6420C52v5Ev();
extern void _ZN7S6420C52v6Ev();
extern void _ZN7S6420C52v7Ev();
extern void _ZN7S6420C52v8Ev();
static  VTBL_ENTRY vtc_S6420C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6420C5[0]),
  (VTBL_ENTRY)&_ZN7S6420C52v3Ev,
  (VTBL_ENTRY)&_ZN7S6420C52v4Ev,
  (VTBL_ENTRY)&_ZN7S6420C52v5Ev,
  (VTBL_ENTRY)&_ZN7S6420C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6420C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6420C52v8Ev,
};
extern VTBL_ENTRY _ZTI7S6420C5[];
extern  VTBL_ENTRY _ZTV7S6420C5[];
Class_Descriptor cd_S6420C5 = {  "S6420C5", // class name
  0,0,//no base classes
  &(vtc_S6420C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6420C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6420C5),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  S6420C4  : S6420C5 {
  virtual void  v9(); // _ZN7S6420C42v9Ev
  ~S6420C4(); // tgen
  S6420C4(); // tgen
};
//SIG(-1 S6420C4) C1{ BC2{ v2 v3 v4 v5 v6 v7 Fi} v1}


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

static void Test_S6420C4()
{
  extern Class_Descriptor cd_S6420C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6420C4, buf);
    S6420C4 *dp, &lv = *(dp=new (buf) S6420C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6420C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6420C4)");
    check_base_class_offset(lv, (S6420C5*), 0, "S6420C4");
    test_class_info(&lv, &cd_S6420C4);
    dp->~S6420C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6420C4(Test_S6420C4, "S6420C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6420C4C1Ev();
extern void _ZN7S6420C4D1Ev();
Name_Map name_map_S6420C4[] = {
  NSPAIR(_ZN7S6420C4C1Ev),
  NSPAIR(_ZN7S6420C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6420C5;
extern VTBL_ENTRY _ZTI7S6420C5[];
extern  VTBL_ENTRY _ZTV7S6420C5[];
static Base_Class bases_S6420C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6420C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S6420C4[];
extern void _ZN7S6420C52v3Ev();
extern void _ZN7S6420C52v4Ev();
extern void _ZN7S6420C52v5Ev();
extern void _ZN7S6420C52v6Ev();
extern void _ZN7S6420C52v7Ev();
extern void _ZN7S6420C52v8Ev();
extern void _ZN7S6420C42v9Ev();
static  VTBL_ENTRY vtc_S6420C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6420C4[0]),
  (VTBL_ENTRY)&_ZN7S6420C52v3Ev,
  (VTBL_ENTRY)&_ZN7S6420C52v4Ev,
  (VTBL_ENTRY)&_ZN7S6420C52v5Ev,
  (VTBL_ENTRY)&_ZN7S6420C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6420C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6420C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6420C42v9Ev,
};
extern VTBL_ENTRY _ZTI7S6420C4[];
extern  VTBL_ENTRY _ZTV7S6420C4[];
Class_Descriptor cd_S6420C4 = {  "S6420C4", // class name
  bases_S6420C4, 1,
  &(vtc_S6420C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6420C4),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6420C4),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6420C3  : S6420C4 {
  virtual void  v10(); // _ZN7S6420C33v10Ev
  virtual void  v11(); // _ZN7S6420C33v11Ev
  virtual void  v12(); // _ZN7S6420C33v12Ev
  virtual void  v13(); // _ZN7S6420C33v13Ev
  virtual void  v14(); // _ZN7S6420C33v14Ev
  virtual void  v15(); // _ZN7S6420C33v15Ev
  virtual void  v16(); // _ZN7S6420C33v16Ev
  ~S6420C3(); // tgen
  S6420C3(); // tgen
};
//SIG(-1 S6420C3) C1{ BC2{ BC3{ v8 v9 v10 v11 v12 v13 Fi} v14} v1 v2 v3 v4 v5 v6 v7}


void  S6420C3 ::v10(){vfunc_called(this, "_ZN7S6420C33v10Ev");}
void  S6420C3 ::v11(){vfunc_called(this, "_ZN7S6420C33v11Ev");}
void  S6420C3 ::v12(){vfunc_called(this, "_ZN7S6420C33v12Ev");}
void  S6420C3 ::v13(){vfunc_called(this, "_ZN7S6420C33v13Ev");}
void  S6420C3 ::v14(){vfunc_called(this, "_ZN7S6420C33v14Ev");}
void  S6420C3 ::v15(){vfunc_called(this, "_ZN7S6420C33v15Ev");}
void  S6420C3 ::v16(){vfunc_called(this, "_ZN7S6420C33v16Ev");}
S6420C3 ::~S6420C3(){ note_dtor("S6420C3", this);} // tgen
S6420C3 ::S6420C3(){ note_ctor("S6420C3", this);} // tgen

static void Test_S6420C3()
{
  extern Class_Descriptor cd_S6420C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6420C3, buf);
    S6420C3 *dp, &lv = *(dp=new (buf) S6420C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6420C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6420C3)");
    check_base_class_offset(lv, (S6420C5*)(S6420C4*), 0, "S6420C3");
    check_base_class_offset(lv, (S6420C4*), 0, "S6420C3");
    test_class_info(&lv, &cd_S6420C3);
    dp->~S6420C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6420C3(Test_S6420C3, "S6420C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6420C3C1Ev();
extern void _ZN7S6420C3D1Ev();
Name_Map name_map_S6420C3[] = {
  NSPAIR(_ZN7S6420C3C1Ev),
  NSPAIR(_ZN7S6420C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6420C5;
extern VTBL_ENTRY _ZTI7S6420C5[];
extern  VTBL_ENTRY _ZTV7S6420C5[];
extern Class_Descriptor cd_S6420C4;
extern VTBL_ENTRY _ZTI7S6420C4[];
extern  VTBL_ENTRY _ZTV7S6420C4[];
static Base_Class bases_S6420C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6420C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S6420C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S6420C3[];
extern void _ZN7S6420C52v3Ev();
extern void _ZN7S6420C52v4Ev();
extern void _ZN7S6420C52v5Ev();
extern void _ZN7S6420C52v6Ev();
extern void _ZN7S6420C52v7Ev();
extern void _ZN7S6420C52v8Ev();
extern void _ZN7S6420C42v9Ev();
extern void _ZN7S6420C33v10Ev();
extern void _ZN7S6420C33v11Ev();
extern void _ZN7S6420C33v12Ev();
extern void _ZN7S6420C33v13Ev();
extern void _ZN7S6420C33v14Ev();
extern void _ZN7S6420C33v15Ev();
extern void _ZN7S6420C33v16Ev();
static  VTBL_ENTRY vtc_S6420C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6420C3[0]),
  (VTBL_ENTRY)&_ZN7S6420C52v3Ev,
  (VTBL_ENTRY)&_ZN7S6420C52v4Ev,
  (VTBL_ENTRY)&_ZN7S6420C52v5Ev,
  (VTBL_ENTRY)&_ZN7S6420C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6420C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6420C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6420C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6420C33v10Ev,
  (VTBL_ENTRY)&_ZN7S6420C33v11Ev,
  (VTBL_ENTRY)&_ZN7S6420C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6420C33v13Ev,
  (VTBL_ENTRY)&_ZN7S6420C33v14Ev,
  (VTBL_ENTRY)&_ZN7S6420C33v15Ev,
  (VTBL_ENTRY)&_ZN7S6420C33v16Ev,
};
extern VTBL_ENTRY _ZTI7S6420C3[];
extern  VTBL_ENTRY _ZTV7S6420C3[];
Class_Descriptor cd_S6420C3 = {  "S6420C3", // class name
  bases_S6420C3, 2,
  &(vtc_S6420C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6420C3),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6420C3),16, //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  S6420C1  : S6420C2 , virtual S6420C3 {
  short s6420c1f0[3];
  void *s6420c1f1[5];
  ::S20340C2 s6420c1f2;
  ~S6420C1(); // tgen
  S6420C1(); // tgen
};
//SIG(1 S6420C1) C1{ BC2{ v1 v2} VBC3{ BC4{ BC5{ v3 v4 v5 v6 v7 v8 Fi} v9} v10 v11 v12 v13 v14 v15 v16} Fs[3] Fp[5] FC6{ v17 v18 v19 FC7{ BC8{ BC9{ v27 v28 v29 v30 v31 v32 Fi} v33} v20 v21 v22 v23 v24 v25 v26}}}


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

static void Test_S6420C1()
{
  extern Class_Descriptor cd_S6420C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,14)];
    init_test(&cd_S6420C1, buf);
    S6420C1 *dp, &lv = *(dp=new (buf) S6420C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,52), "sizeof(S6420C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6420C1)");
    check_base_class_offset(lv, (S6420C2*), 0, "S6420C1");
    check_base_class_offset(lv, (S6420C5*)(S6420C4*)(S6420C3*), ABISELECT(80,44), "S6420C1");
    check_base_class_offset(lv, (S6420C4*)(S6420C3*), ABISELECT(80,44), "S6420C1");
    check_base_class_offset(lv, (S6420C3*), ABISELECT(80,44), "S6420C1");
    check_field_offset(lv, s6420c1f0, ABISELECT(8,4), "S6420C1.s6420c1f0");
    check_field_offset(lv, s6420c1f1, ABISELECT(16,12), "S6420C1.s6420c1f1");
    check_field_offset(lv, s6420c1f2, ABISELECT(56,32), "S6420C1.s6420c1f2");
    test_class_info(&lv, &cd_S6420C1);
    dp->~S6420C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6420C1(Test_S6420C1, "S6420C1", ABISELECT(96,52));

#else // __cplusplus

extern void _ZN7S6420C1C1Ev();
extern void _ZN7S6420C1D1Ev();
Name_Map name_map_S6420C1[] = {
  NSPAIR(_ZN7S6420C1C1Ev),
  NSPAIR(_ZN7S6420C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6420C2;
extern VTBL_ENTRY _ZTI7S6420C2[];
extern  VTBL_ENTRY _ZTV7S6420C2[];
extern Class_Descriptor cd_S6420C5;
extern VTBL_ENTRY _ZTI7S6420C5[];
extern  VTBL_ENTRY _ZTV7S6420C5[];
extern Class_Descriptor cd_S6420C4;
extern VTBL_ENTRY _ZTI7S6420C4[];
extern  VTBL_ENTRY _ZTV7S6420C4[];
extern Class_Descriptor cd_S6420C3;
extern VTBL_ENTRY _ZTI7S6420C3[];
extern  VTBL_ENTRY _ZTV7S6420C3[];
static Base_Class bases_S6420C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6420C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S6420C5,    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
    1, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S6420C4,    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
    2, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S6420C3,    ABISELECT(80,44), //bcp->offset
    5, //bcp->virtual_function_table_offset
    16, //num_negative_vtable_entries(t, bcp)
    2, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S6420C1[];
extern void _ZN7S6420C22v1Ev();
extern void _ZN7S6420C22v2Ev();
extern void _ZN7S6420C52v3Ev();
extern void _ZN7S6420C52v4Ev();
extern void _ZN7S6420C52v5Ev();
extern void _ZN7S6420C52v6Ev();
extern void _ZN7S6420C52v7Ev();
extern void _ZN7S6420C52v8Ev();
extern void _ZN7S6420C42v9Ev();
extern void _ZN7S6420C33v10Ev();
extern void _ZN7S6420C33v11Ev();
extern void _ZN7S6420C33v12Ev();
extern void _ZN7S6420C33v13Ev();
extern void _ZN7S6420C33v14Ev();
extern void _ZN7S6420C33v15Ev();
extern void _ZN7S6420C33v16Ev();
static  VTBL_ENTRY vtc_S6420C1[] = {
  ABISELECT(80,44),
  0,
  (VTBL_ENTRY)&(_ZTI7S6420C1[0]),
  (VTBL_ENTRY)&_ZN7S6420C22v1Ev,
  (VTBL_ENTRY)&_ZN7S6420C22v2Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-80,-44),
  (VTBL_ENTRY)&(_ZTI7S6420C1[0]),
  (VTBL_ENTRY)&_ZN7S6420C52v3Ev,
  (VTBL_ENTRY)&_ZN7S6420C52v4Ev,
  (VTBL_ENTRY)&_ZN7S6420C52v5Ev,
  (VTBL_ENTRY)&_ZN7S6420C52v6Ev,
  (VTBL_ENTRY)&_ZN7S6420C52v7Ev,
  (VTBL_ENTRY)&_ZN7S6420C52v8Ev,
  (VTBL_ENTRY)&_ZN7S6420C42v9Ev,
  (VTBL_ENTRY)&_ZN7S6420C33v10Ev,
  (VTBL_ENTRY)&_ZN7S6420C33v11Ev,
  (VTBL_ENTRY)&_ZN7S6420C33v12Ev,
  (VTBL_ENTRY)&_ZN7S6420C33v13Ev,
  (VTBL_ENTRY)&_ZN7S6420C33v14Ev,
  (VTBL_ENTRY)&_ZN7S6420C33v15Ev,
  (VTBL_ENTRY)&_ZN7S6420C33v16Ev,
};
extern VTBL_ENTRY _ZTV7S6420C1[];
static  VTT_ENTRY vtt_S6420C1[] = {
  {&(_ZTV7S6420C1[3]),  3,35},
  {&(_ZTV7S6420C1[21]),  21,35},
};
extern VTBL_ENTRY _ZTI7S6420C1[];
extern  VTBL_ENTRY _ZTV7S6420C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S6420C1[];
Class_Descriptor cd_S6420C1 = {  "S6420C1", // class name
  bases_S6420C1, 4,
  &(vtc_S6420C1[0]), // expected_vtbl_contents
  &(vtt_S6420C1[0]), // expected_vtt_contents
  ABISELECT(96,52), // object size
  NSPAIRA(_ZTI7S6420C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S6420C1),35, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S6420C1),2, //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  S19953C2_nt  {
  void *s19953c2f0;
  virtual void  v1(); // _ZN11S19953C2_nt2v1Ev
  virtual void  v2(); // _ZN11S19953C2_nt2v2Ev
  virtual void  v3(); // _ZN11S19953C2_nt2v3Ev
  ~S19953C2_nt(); // tgen
  S19953C2_nt(); // tgen
};
//SIG(-1 S19953C2_nt) C1{ v1 v2 v3 Fp}


void  S19953C2_nt ::v1(){vfunc_called(this, "_ZN11S19953C2_nt2v1Ev");}
void  S19953C2_nt ::v2(){vfunc_called(this, "_ZN11S19953C2_nt2v2Ev");}
void  S19953C2_nt ::v3(){vfunc_called(this, "_ZN11S19953C2_nt2v3Ev");}
S19953C2_nt ::~S19953C2_nt(){ note_dtor("S19953C2_nt", this);} // tgen
S19953C2_nt ::S19953C2_nt(){ note_ctor("S19953C2_nt", this);} // tgen

//skip512 S19953C2_nt

#else // __cplusplus

extern void _ZN11S19953C2_ntC1Ev();
extern void _ZN11S19953C2_ntD1Ev();
Name_Map name_map_S19953C2_nt[] = {
  NSPAIR(_ZN11S19953C2_ntC1Ev),
  NSPAIR(_ZN11S19953C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S19953C2_nt[];
extern void _ZN11S19953C2_nt2v1Ev();
extern void _ZN11S19953C2_nt2v2Ev();
extern void _ZN11S19953C2_nt2v3Ev();
static  VTBL_ENTRY vtc_S19953C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S19953C2_nt[0]),
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v3Ev,
};
extern VTBL_ENTRY _ZTI11S19953C2_nt[];
VTBL_ENTRY *P__ZTI11S19953C2_nt = _ZTI11S19953C2_nt; 
extern  VTBL_ENTRY _ZTV11S19953C2_nt[];
Class_Descriptor cd_S19953C2_nt = {  "S19953C2_nt", // class name
  0,0,//no base classes
  &(vtc_S19953C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S19953C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S19953C2_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  S19953C4  : virtual S19953C2_nt {
  ~S19953C4(); // tgen
  S19953C4(); // tgen
};
//SIG(-1 S19953C4) C1{ VBC2{ v1 v2 v3 Fp}}


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

static void Test_S19953C4()
{
  extern Class_Descriptor cd_S19953C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19953C4, buf);
    S19953C4 *dp, &lv = *(dp=new (buf) S19953C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19953C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19953C4)");
    check_base_class_offset(lv, (S19953C2_nt*), ABISELECT(8,4), "S19953C4");
    test_class_info(&lv, &cd_S19953C4);
    dp->~S19953C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19953C4(Test_S19953C4, "S19953C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S19953C4C1Ev();
extern void _ZN8S19953C4D1Ev();
Name_Map name_map_S19953C4[] = {
  NSPAIR(_ZN8S19953C4C1Ev),
  NSPAIR(_ZN8S19953C4D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19953C2_nt;
extern VTBL_ENTRY _ZTI11S19953C2_nt[];
extern  VTBL_ENTRY _ZTV11S19953C2_nt[];
static Base_Class bases_S19953C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19953C2_nt,    ABISELECT(8,4), //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 _ZTI8S19953C4[];
extern void _ZN11S19953C2_nt2v1Ev();
extern void _ZN11S19953C2_nt2v2Ev();
extern void _ZN11S19953C2_nt2v3Ev();
static  VTBL_ENTRY vtc_S19953C4[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19953C4[0]),
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19953C4[0]),
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v3Ev,
};
extern VTBL_ENTRY _ZTV8S19953C4[];
static  VTT_ENTRY vtt_S19953C4[] = {
  {&(_ZTV8S19953C4[3]),  3,11},
  {&(_ZTV8S19953C4[8]),  8,11},
};
extern VTBL_ENTRY _ZTI8S19953C4[];
extern  VTBL_ENTRY _ZTV8S19953C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19953C4[];
Class_Descriptor cd_S19953C4 = {  "S19953C4", // class name
  bases_S19953C4, 1,
  &(vtc_S19953C4[0]), // expected_vtbl_contents
  &(vtt_S19953C4[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19953C4),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19953C4),11, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19953C4),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  S19953C5  : virtual S19953C4 , S19953C2_nt {
  void *s19953c5f0;
  ::S19953C4 s19953c5f1;
  void *s19953c5f2;
  ::S19953C2_nt s19953c5f3;
  int s19953c5f4;
  ::S19953C4 s19953c5f5;
  virtual void  v4(); // _ZN8S19953C52v4Ev
  ~S19953C5(); // tgen
  S19953C5(); // tgen
};
//SIG(-1 S19953C5) C1{ VBC2{ VBC3{ v2 v3 v4 Fp}} BC3 v1 Fp FC2 Fp FC3 Fi FC2}


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

static void Test_S19953C5()
{
  extern Class_Descriptor cd_S19953C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[17];
    init_test(&cd_S19953C5, buf);
    S19953C5 *dp, &lv = *(dp=new (buf) S19953C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(128,64), "sizeof(S19953C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19953C5)");
    check_base_class_offset(lv, (S19953C2_nt*)(S19953C4*), ABISELECT(112,56), "S19953C5");
    check_base_class_offset(lv, (S19953C4*), ABISELECT(104,52), "S19953C5");
    /*is_ambiguous_... S19953C5::S19953C2_nt */ AMB_check_base_class_offset(lv, (S19953C2_nt*), 0, "S19953C5");
    check_field_offset(lv, s19953c5f0, ABISELECT(16,8), "S19953C5.s19953c5f0");
    check_field_offset(lv, s19953c5f1, ABISELECT(24,12), "S19953C5.s19953c5f1");
    check_field_offset(lv, s19953c5f2, ABISELECT(48,24), "S19953C5.s19953c5f2");
    check_field_offset(lv, s19953c5f3, ABISELECT(56,28), "S19953C5.s19953c5f3");
    check_field_offset(lv, s19953c5f4, ABISELECT(72,36), "S19953C5.s19953c5f4");
    check_field_offset(lv, s19953c5f5, ABISELECT(80,40), "S19953C5.s19953c5f5");
    test_class_info(&lv, &cd_S19953C5);
    dp->~S19953C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19953C5(Test_S19953C5, "S19953C5", ABISELECT(128,64));

#else // __cplusplus

extern void _ZN8S19953C5C1Ev();
extern void _ZN8S19953C5D1Ev();
Name_Map name_map_S19953C5[] = {
  NSPAIR(_ZN8S19953C5C1Ev),
  NSPAIR(_ZN8S19953C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19953C2_nt;
extern VTBL_ENTRY _ZTI11S19953C2_nt[];
extern  VTBL_ENTRY _ZTV11S19953C2_nt[];
extern Class_Descriptor cd_S19953C4;
extern VTBL_ENTRY _ZTI8S19953C4[];
extern  VTBL_ENTRY _ZTV8S19953C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19953C4[];
extern Class_Descriptor cd_S19953C2_nt;
extern VTBL_ENTRY _ZTI11S19953C2_nt[];
extern  VTBL_ENTRY _ZTV11S19953C2_nt[];
static Base_Class bases_S19953C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19953C2_nt,    ABISELECT(112,56), //bcp->offset
    11, //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
    1, //immediately_derived
  0, 1},
  {&cd_S19953C4,    ABISELECT(104,52), //bcp->offset
    8, //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_S19953C2_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 _ZTI8S19953C5[];
extern void _ZN11S19953C2_nt2v1Ev();
extern void _ZN11S19953C2_nt2v2Ev();
extern void _ZN11S19953C2_nt2v3Ev();
extern void _ZN8S19953C52v4Ev();
extern void _ZN11S19953C2_nt2v1Ev();
extern void _ZN11S19953C2_nt2v2Ev();
extern void _ZN11S19953C2_nt2v3Ev();
static  VTBL_ENTRY vtc_S19953C5[] = {
  ABISELECT(112,56),
  ABISELECT(104,52),
  0,
  (VTBL_ENTRY)&(_ZTI8S19953C5[0]),
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN8S19953C52v4Ev,
  ABISELECT(8,4),
  ABISELECT(-104,-52),
  (VTBL_ENTRY)&(_ZTI8S19953C5[0]),
  0,
  0,
  0,
  ABISELECT(-112,-56),
  (VTBL_ENTRY)&(_ZTI8S19953C5[0]),
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v3Ev,
};
extern VTBL_ENTRY _ZTV8S19953C5[];
static  VTBL_ENTRY _tg__ZTV8S19953C4__8S19953C5[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19953C4[0]),
};
extern void _ZN11S19953C2_nt2v1Ev();
extern void _ZN11S19953C2_nt2v2Ev();
extern void _ZN11S19953C2_nt2v3Ev();
static  VTBL_ENTRY _tg__ZTV11S19953C2_nt__8S19953C4__8S19953C5[] = {
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19953C4[0]),
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v3Ev,
};
static  VTT_ENTRY vtt_S19953C5[] = {
  {&(_ZTV8S19953C5[4]),  4,19},
  {&(_ZTV8S19953C5[11]),  11,19},
  {&(_ZTV8S19953C5[16]),  16,19},
  {&(_tg__ZTV8S19953C4__8S19953C5[3]),  3,3},
  {&(_tg__ZTV11S19953C2_nt__8S19953C4__8S19953C5[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S19953C5[];
extern  VTBL_ENTRY _ZTV8S19953C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19953C5[];
Class_Descriptor cd_S19953C5 = {  "S19953C5", // class name
  bases_S19953C5, 3,
  &(vtc_S19953C5[0]), // expected_vtbl_contents
  &(vtt_S19953C5[0]), // expected_vtt_contents
  ABISELECT(128,64), // object size
  NSPAIRA(_ZTI8S19953C5),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19953C5),19, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19953C5),5, //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  S19953C3  : virtual S19953C2_nt , S19953C4 , S19953C5 {
  int s19953c3f0[5];
  virtual void  v5(); // _ZN8S19953C32v5Ev
  ~S19953C3(); // tgen
  S19953C3(); // tgen
};
//SIG(-1 S19953C3) C1{ VBC2{ v2 v3 v4 Fp} BC3{ VBC2} BC4{ VBC3 BC2 v5 Fp FC3 Fp FC2 Fi FC3} v1 Fi[5]}


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

static void Test_S19953C3()
{
  extern Class_Descriptor cd_S19953C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(21,23)];
    init_test(&cd_S19953C3, buf);
    S19953C3 *dp, &lv = *(dp=new (buf) S19953C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(160,88), "sizeof(S19953C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19953C3)");
    /*is_ambiguous_... S19953C3::S19953C2_nt */ AMB_check_base_class_offset(lv, (S19953C2_nt*), ABISELECT(136,76), "S19953C3");
    /*is_ambiguous_... S19953C3::S19953C4 */ AMB_check_base_class_offset(lv, (S19953C2_nt*)(S19953C4*), ABISELECT(136,76), "S19953C3");
    /*is_ambiguous_... S19953C3::S19953C4 */ AMB_check_base_class_offset(lv, (S19953C2_nt*)(S19953C4*), ABISELECT(136,76), "S19953C3");
    /*is_ambiguous_... S19953C3::S19953C4 */ AMB_check_base_class_offset(lv, (S19953C4*), 0, "S19953C3");
    check_base_class_offset(lv, (S19953C4*)(S19953C5*), ABISELECT(152,84), "S19953C3");
    /*is_ambiguous_... S19953C5::S19953C2_nt */ AMB_check_base_class_offset(lv, (S19953C2_nt*)(S19953C5*), ABISELECT(8,4), "S19953C3");
    check_base_class_offset(lv, (S19953C5*), ABISELECT(8,4), "S19953C3");
    check_field_offset(lv, s19953c3f0, ABISELECT(112,56), "S19953C3.s19953c3f0");
    test_class_info(&lv, &cd_S19953C3);
    dp->~S19953C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19953C3(Test_S19953C3, "S19953C3", ABISELECT(160,88));

#else // __cplusplus

extern void _ZN8S19953C3C1Ev();
extern void _ZN8S19953C3D1Ev();
Name_Map name_map_S19953C3[] = {
  NSPAIR(_ZN8S19953C3C1Ev),
  NSPAIR(_ZN8S19953C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19953C2_nt;
extern VTBL_ENTRY _ZTI11S19953C2_nt[];
extern  VTBL_ENTRY _ZTV11S19953C2_nt[];
extern Class_Descriptor cd_S19953C4;
extern VTBL_ENTRY _ZTI8S19953C4[];
extern  VTBL_ENTRY _ZTV8S19953C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19953C4[];
extern Class_Descriptor cd_S19953C4;
extern VTBL_ENTRY _ZTI8S19953C4[];
extern  VTBL_ENTRY _ZTV8S19953C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19953C4[];
extern Class_Descriptor cd_S19953C2_nt;
extern VTBL_ENTRY _ZTI11S19953C2_nt[];
extern  VTBL_ENTRY _ZTV11S19953C2_nt[];
extern Class_Descriptor cd_S19953C5;
extern VTBL_ENTRY _ZTI8S19953C5[];
extern  VTBL_ENTRY _ZTV8S19953C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19953C5[];
static Base_Class bases_S19953C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19953C2_nt,    ABISELECT(136,76), //bcp->offset
    13, //bcp->virtual_function_table_offset
    5, //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
  1, 1},
  {&cd_S19953C4,    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_S19953C4,    ABISELECT(152,84), //bcp->offset
    21, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    9, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19953C2_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
    4, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19953C5,    ABISELECT(8,4), //bcp->offset
    5, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    8, //bcp->index_in_construction_vtbl_array
    4, //bcp->base_subarray_index_in_construction_vtbl_array
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19953C3[];
extern void _ZN8S19953C32v5Ev();
extern void _ZN11S19953C2_nt2v1Ev();
extern void _ZN11S19953C2_nt2v2Ev();
extern void _ZN11S19953C2_nt2v3Ev();
extern void _ZN8S19953C52v4Ev();
extern void _ZN11S19953C2_nt2v1Ev();
extern void _ZN11S19953C2_nt2v2Ev();
extern void _ZN11S19953C2_nt2v3Ev();
static  VTBL_ENTRY vtc_S19953C3[] = {
  ABISELECT(152,84),
  ABISELECT(136,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19953C3[0]),
  (VTBL_ENTRY)&_ZN8S19953C32v5Ev,
  ABISELECT(128,72),
  ABISELECT(144,80),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19953C3[0]),
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN8S19953C52v4Ev,
  0,
  0,
  0,
  ABISELECT(-136,-76),
  (VTBL_ENTRY)&(_ZTI8S19953C3[0]),
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v3Ev,
  ABISELECT(-16,-8),
  ABISELECT(-152,-84),
  (VTBL_ENTRY)&(_ZTI8S19953C3[0]),
};
extern VTBL_ENTRY _ZTV8S19953C3[];
static  VTBL_ENTRY _tg__ZTV8S19953C4__A__8S19953C3[] = {
  ABISELECT(136,76),
  0,
  (VTBL_ENTRY)&(_ZTI8S19953C4[0]),
};
extern void _ZN11S19953C2_nt2v1Ev();
extern void _ZN11S19953C2_nt2v2Ev();
extern void _ZN11S19953C2_nt2v3Ev();
static  VTBL_ENTRY _tg__ZTV11S19953C2_nt__8S19953C4__A__8S19953C3[] = {
  0,
  0,
  0,
  ABISELECT(-136,-76),
  (VTBL_ENTRY)&(_ZTI8S19953C4[0]),
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v3Ev,
};
extern void _ZN11S19953C2_nt2v1Ev();
extern void _ZN11S19953C2_nt2v2Ev();
extern void _ZN11S19953C2_nt2v3Ev();
extern void _ZN8S19953C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19953C5__8S19953C3[] = {
  ABISELECT(128,72),
  ABISELECT(144,80),
  0,
  (VTBL_ENTRY)&(_ZTI8S19953C5[0]),
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN8S19953C52v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19953C4__8S19953C5__8S19953C3[] = {
  ABISELECT(-16,-8),
  ABISELECT(-144,-80),
  (VTBL_ENTRY)&(_ZTI8S19953C5[0]),
};
extern void _ZN11S19953C2_nt2v1Ev();
extern void _ZN11S19953C2_nt2v2Ev();
extern void _ZN11S19953C2_nt2v3Ev();
static  VTBL_ENTRY _tg__ZTV11S19953C2_nt__8S19953C5__8S19953C3[] = {
  0,
  0,
  0,
  ABISELECT(-128,-72),
  (VTBL_ENTRY)&(_ZTI8S19953C5[0]),
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v3Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19953C4__A1__8S19953C3[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19953C4[0]),
};
extern void _ZN11S19953C2_nt2v1Ev();
extern void _ZN11S19953C2_nt2v2Ev();
extern void _ZN11S19953C2_nt2v3Ev();
static  VTBL_ENTRY _tg__ZTV11S19953C2_nt__8S19953C4__A1__8S19953C3[] = {
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19953C4[0]),
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v3Ev,
};
static  VTT_ENTRY vtt_S19953C3[] = {
  {&(_ZTV8S19953C3[4]),  4,24},
  {&(_tg__ZTV8S19953C4__A__8S19953C3[3]),  3,3},
  {&(_tg__ZTV11S19953C2_nt__8S19953C4__A__8S19953C3[5]),  5,8},
  {&(_tg__ZTV8S19953C5__8S19953C3[4]),  4,8},
  {&(_tg__ZTV8S19953C4__8S19953C5__8S19953C3[3]),  3,3},
  {&(_tg__ZTV11S19953C2_nt__8S19953C5__8S19953C3[5]),  5,8},
  {&(_ZTV8S19953C3[18]),  18,24},
  {&(_ZTV8S19953C3[9]),  9,24},
  {&(_ZTV8S19953C3[24]),  24,24},
  {&(_tg__ZTV8S19953C4__A1__8S19953C3[3]),  3,3},
  {&(_tg__ZTV11S19953C2_nt__8S19953C4__A1__8S19953C3[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S19953C3[];
extern  VTBL_ENTRY _ZTV8S19953C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19953C3[];
Class_Descriptor cd_S19953C3 = {  "S19953C3", // class name
  bases_S19953C3, 5,
  &(vtc_S19953C3[0]), // expected_vtbl_contents
  &(vtt_S19953C3[0]), // expected_vtt_contents
  ABISELECT(160,88), // object size
  NSPAIRA(_ZTI8S19953C3),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19953C3),24, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19953C3),11, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19953C6_nt  {
  int s19953c6f0;
  virtual void  v6(); // _ZN11S19953C6_nt2v6Ev
  virtual void  v7(); // _ZN11S19953C6_nt2v7Ev
  virtual void  v8(); // _ZN11S19953C6_nt2v8Ev
  ~S19953C6_nt(); // tgen
  S19953C6_nt(); // tgen
};
//SIG(-1 S19953C6_nt) C1{ v1 v2 v3 Fi}


void  S19953C6_nt ::v6(){vfunc_called(this, "_ZN11S19953C6_nt2v6Ev");}
void  S19953C6_nt ::v7(){vfunc_called(this, "_ZN11S19953C6_nt2v7Ev");}
void  S19953C6_nt ::v8(){vfunc_called(this, "_ZN11S19953C6_nt2v8Ev");}
S19953C6_nt ::~S19953C6_nt(){ note_dtor("S19953C6_nt", this);} // tgen
S19953C6_nt ::S19953C6_nt(){ note_ctor("S19953C6_nt", this);} // tgen

//skip512 S19953C6_nt

#else // __cplusplus

extern void _ZN11S19953C6_ntC1Ev();
extern void _ZN11S19953C6_ntD1Ev();
Name_Map name_map_S19953C6_nt[] = {
  NSPAIR(_ZN11S19953C6_ntC1Ev),
  NSPAIR(_ZN11S19953C6_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S19953C6_nt[];
extern void _ZN11S19953C6_nt2v6Ev();
extern void _ZN11S19953C6_nt2v7Ev();
extern void _ZN11S19953C6_nt2v8Ev();
static  VTBL_ENTRY vtc_S19953C6_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S19953C6_nt[0]),
  (VTBL_ENTRY)&_ZN11S19953C6_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19953C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19953C6_nt2v8Ev,
};
extern VTBL_ENTRY _ZTI11S19953C6_nt[];
VTBL_ENTRY *P__ZTI11S19953C6_nt = _ZTI11S19953C6_nt; 
extern  VTBL_ENTRY _ZTV11S19953C6_nt[];
Class_Descriptor cd_S19953C6_nt = {  "S19953C6_nt", // class name
  0,0,//no base classes
  &(vtc_S19953C6_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI11S19953C6_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S19953C6_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  S19953C1  : virtual S19953C2_nt , S19953C3 , S19953C6_nt , virtual S19953C5 {
  int s19953c1f0;
  ~S19953C1(); // tgen
  S19953C1(); // tgen
};
//SIG(1 S19953C1) C1{ VBC2{ v1 v2 v3 Fp} BC3{ VBC2 BC4{ VBC2} BC5{ VBC4 BC2 v4 Fp FC4 Fp FC2 Fi FC4} v5 Fi[5]} BC6{ v6 v7 v8 Fi} VBC5 Fi}


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

static void Test_S19953C1()
{
  extern Class_Descriptor cd_S19953C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(36,39)];
    init_test(&cd_S19953C1, buf);
    S19953C1 *dp, &lv = *(dp=new (buf) S19953C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(280,152), "sizeof(S19953C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19953C1)");
    /*is_ambiguous_... S19953C1::S19953C2_nt */ AMB_check_base_class_offset(lv, (S19953C2_nt*), ABISELECT(152,88), "S19953C1");
    /*is_ambiguous_... S19953C3::S19953C2_nt */ AMB_check_base_class_offset(lv, (S19953C2_nt*)(S19953C3*), ABISELECT(152,88), "S19953C1");
    /*is_ambiguous_... S19953C3::S19953C4 */ AMB_check_base_class_offset(lv, (S19953C2_nt*)(S19953C4*)(S19953C3*), ABISELECT(152,88), "S19953C1");
    /*is_ambiguous_... S19953C1::S19953C4 */ AMB_check_base_class_offset(lv, (S19953C2_nt*)(S19953C4*), ABISELECT(152,88), "S19953C1");
    /*is_ambiguous_... S19953C3::S19953C4 */ AMB_check_base_class_offset(lv, (S19953C4*)(S19953C3*), 0, "S19953C1");
    check_base_class_offset(lv, (S19953C4*)(S19953C5*)(S19953C3*), ABISELECT(168,96), "S19953C1");
    /*is_ambiguous_... S19953C1::S19953C5 */ AMB_check_base_class_offset(lv, (S19953C4*)(S19953C5*), ABISELECT(168,96), "S19953C1");
    /*is_ambiguous_... S19953C5::S19953C2_nt */ AMB_check_base_class_offset(lv, (S19953C2_nt*)(S19953C5*)(S19953C3*), ABISELECT(8,4), "S19953C1");
    check_base_class_offset(lv, (S19953C5*)(S19953C3*), ABISELECT(8,4), "S19953C1");
    check_base_class_offset(lv, (S19953C3*), 0, "S19953C1");
    check_base_class_offset(lv, (S19953C6_nt*), ABISELECT(136,76), "S19953C1");
    /*is_ambiguous_... S19953C1::S19953C5 */ AMB_check_base_class_offset(lv, (S19953C2_nt*)(S19953C5*), ABISELECT(176,100), "S19953C1");
    /*is_ambiguous_... S19953C1::S19953C5 */ AMB_check_base_class_offset(lv, (S19953C5*), ABISELECT(176,100), "S19953C1");
    check_field_offset(lv, s19953c1f0, ABISELECT(148,84), "S19953C1.s19953c1f0");
    test_class_info(&lv, &cd_S19953C1);
    dp->~S19953C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19953C1(Test_S19953C1, "S19953C1", ABISELECT(280,152));

#else // __cplusplus

extern void _ZN8S19953C1C1Ev();
extern void _ZN8S19953C1D1Ev();
Name_Map name_map_S19953C1[] = {
  NSPAIR(_ZN8S19953C1C1Ev),
  NSPAIR(_ZN8S19953C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19953C2_nt;
extern VTBL_ENTRY _ZTI11S19953C2_nt[];
extern  VTBL_ENTRY _ZTV11S19953C2_nt[];
extern Class_Descriptor cd_S19953C4;
extern VTBL_ENTRY _ZTI8S19953C4[];
extern  VTBL_ENTRY _ZTV8S19953C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19953C4[];
extern Class_Descriptor cd_S19953C4;
extern VTBL_ENTRY _ZTI8S19953C4[];
extern  VTBL_ENTRY _ZTV8S19953C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19953C4[];
extern Class_Descriptor cd_S19953C2_nt;
extern VTBL_ENTRY _ZTI11S19953C2_nt[];
extern  VTBL_ENTRY _ZTV11S19953C2_nt[];
extern Class_Descriptor cd_S19953C5;
extern VTBL_ENTRY _ZTI8S19953C5[];
extern  VTBL_ENTRY _ZTV8S19953C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19953C5[];
extern Class_Descriptor cd_S19953C3;
extern VTBL_ENTRY _ZTI8S19953C3[];
extern  VTBL_ENTRY _ZTV8S19953C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19953C3[];
extern Class_Descriptor cd_S19953C6_nt;
extern VTBL_ENTRY _ZTI11S19953C6_nt[];
extern  VTBL_ENTRY _ZTV11S19953C6_nt[];
extern Class_Descriptor cd_S19953C2_nt;
extern VTBL_ENTRY _ZTI11S19953C2_nt[];
extern  VTBL_ENTRY _ZTV11S19953C2_nt[];
extern Class_Descriptor cd_S19953C5;
extern VTBL_ENTRY _ZTI8S19953C5[];
extern  VTBL_ENTRY _ZTV8S19953C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19953C5[];
static Base_Class bases_S19953C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19953C2_nt,    ABISELECT(152,88), //bcp->offset
    19, //bcp->virtual_function_table_offset
    5, //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_S19953C4,    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
    5, //immediately_derived
  0, 0},
  {&cd_S19953C4,    ABISELECT(168,96), //bcp->offset
    27, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    13, //bcp->index_in_construction_vtbl_array
    15, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S19953C2_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
    6, //init_seq
    4, //immediately_derived
  0, 0},
  {&cd_S19953C5,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    12, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    7, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S19953C3,    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
    8, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19953C6_nt,    ABISELECT(136,76), //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
    9, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S19953C2_nt,    ABISELECT(176,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
    3, //init_seq
    8, //immediately_derived
  0, 0},
  {&cd_S19953C5,    ABISELECT(176,100), //bcp->offset
    30, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    14, //bcp->index_in_construction_vtbl_array
    17, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19953C1[];
extern void _ZN8S19953C32v5Ev();
extern void _ZN11S19953C2_nt2v1Ev();
extern void _ZN11S19953C2_nt2v2Ev();
extern void _ZN11S19953C2_nt2v3Ev();
extern void _ZN8S19953C52v4Ev();
extern void _ZN11S19953C6_nt2v6Ev();
extern void _ZN11S19953C6_nt2v7Ev();
extern void _ZN11S19953C6_nt2v8Ev();
extern void _ZN11S19953C2_nt2v1Ev();
extern void _ZN11S19953C2_nt2v2Ev();
extern void _ZN11S19953C2_nt2v3Ev();
extern void _ZN11S19953C2_nt2v1Ev();
extern void _ZN11S19953C2_nt2v2Ev();
extern void _ZN11S19953C2_nt2v3Ev();
extern void _ZN8S19953C52v4Ev();
static  VTBL_ENTRY vtc_S19953C1[] = {
  ABISELECT(176,100),
  ABISELECT(168,96),
  ABISELECT(152,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S19953C1[0]),
  (VTBL_ENTRY)&_ZN8S19953C32v5Ev,
  ABISELECT(144,84),
  ABISELECT(160,92),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19953C1[0]),
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN8S19953C52v4Ev,
  ABISELECT(-136,-76),
  (VTBL_ENTRY)&(_ZTI8S19953C1[0]),
  (VTBL_ENTRY)&_ZN11S19953C6_nt2v6Ev,
  (VTBL_ENTRY)&_ZN11S19953C6_nt2v7Ev,
  (VTBL_ENTRY)&_ZN11S19953C6_nt2v8Ev,
  0,
  0,
  0,
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI8S19953C1[0]),
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v3Ev,
  ABISELECT(-16,-8),
  ABISELECT(-168,-96),
  (VTBL_ENTRY)&(_ZTI8S19953C1[0]),
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(-8,-4),
  ABISELECT(-176,-100),
  (VTBL_ENTRY)&(_ZTI8S19953C1[0]),
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN8S19953C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S19953C1[];
extern void _ZN8S19953C32v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19953C3__8S19953C1[] = {
  ABISELECT(168,96),
  ABISELECT(152,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S19953C3[0]),
  (VTBL_ENTRY)&_ZN8S19953C32v5Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19953C48S19953C3__8S19953C1[] = {
  ABISELECT(152,88),
  0,
  (VTBL_ENTRY)&(_ZTI8S19953C4[0]),
};
extern void _ZN11S19953C2_nt2v1Ev();
extern void _ZN11S19953C2_nt2v2Ev();
extern void _ZN11S19953C2_nt2v3Ev();
static  VTBL_ENTRY _tg__ZTV11S19953C2_nt__8S19953C48S19953C3__8S19953C1[] = {
  0,
  0,
  0,
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI8S19953C4[0]),
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v3Ev,
};
extern void _ZN11S19953C2_nt2v1Ev();
extern void _ZN11S19953C2_nt2v2Ev();
extern void _ZN11S19953C2_nt2v3Ev();
extern void _ZN8S19953C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19953C58S19953C3__8S19953C1[] = {
  ABISELECT(144,84),
  ABISELECT(160,92),
  0,
  (VTBL_ENTRY)&(_ZTI8S19953C5[0]),
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN8S19953C52v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19953C4__8S19953C58S19953C3__8S19953C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-160,-92),
  (VTBL_ENTRY)&(_ZTI8S19953C5[0]),
};
extern void _ZN11S19953C2_nt2v1Ev();
extern void _ZN11S19953C2_nt2v2Ev();
extern void _ZN11S19953C2_nt2v3Ev();
static  VTBL_ENTRY _tg__ZTV11S19953C2_nt__8S19953C58S19953C3__8S19953C1[] = {
  0,
  0,
  0,
  ABISELECT(-144,-84),
  (VTBL_ENTRY)&(_ZTI8S19953C5[0]),
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v3Ev,
};
extern void _ZN11S19953C2_nt2v1Ev();
extern void _ZN11S19953C2_nt2v2Ev();
extern void _ZN11S19953C2_nt2v3Ev();
static  VTBL_ENTRY _tg__ZTV11S19953C2_nt__8S19953C3__8S19953C1[] = {
  0,
  0,
  0,
  ABISELECT(-152,-88),
  (VTBL_ENTRY)&(_ZTI8S19953C3[0]),
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v3Ev,
};
extern void _ZN11S19953C2_nt2v1Ev();
extern void _ZN11S19953C2_nt2v2Ev();
extern void _ZN11S19953C2_nt2v3Ev();
extern void _ZN8S19953C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19953C5__8S19953C3__8S19953C1[] = {
  ABISELECT(144,84),
  ABISELECT(160,92),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19953C3[0]),
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN8S19953C52v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19953C4__A1__8S19953C3__8S19953C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(-168,-96),
  (VTBL_ENTRY)&(_ZTI8S19953C3[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19953C4__A1__8S19953C1[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19953C4[0]),
};
extern void _ZN11S19953C2_nt2v1Ev();
extern void _ZN11S19953C2_nt2v2Ev();
extern void _ZN11S19953C2_nt2v3Ev();
static  VTBL_ENTRY _tg__ZTV11S19953C2_nt__8S19953C4__A1__8S19953C1[] = {
  0,
  0,
  0,
  ABISELECT(16,8),
  (VTBL_ENTRY)&(_ZTI8S19953C4[0]),
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v3Ev,
};
extern void _ZN11S19953C2_nt2v1Ev();
extern void _ZN11S19953C2_nt2v2Ev();
extern void _ZN11S19953C2_nt2v3Ev();
extern void _ZN8S19953C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19953C5__A1__8S19953C1[] = {
  ABISELECT(-24,-12),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19953C5[0]),
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v3Ev,
  (VTBL_ENTRY)&_ZN8S19953C52v4Ev,
};
static  VTBL_ENTRY _tg__ZTV8S19953C4__8S19953C5__A1__8S19953C1[] = {
  ABISELECT(-16,-8),
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19953C5[0]),
};
extern void _ZN11S19953C2_nt2v1Ev();
extern void _ZN11S19953C2_nt2v2Ev();
extern void _ZN11S19953C2_nt2v3Ev();
static  VTBL_ENTRY _tg__ZTV11S19953C2_nt__8S19953C5__A1__8S19953C1[] = {
  0,
  0,
  0,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S19953C5[0]),
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v1Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v2Ev,
  (VTBL_ENTRY)&_ZN11S19953C2_nt2v3Ev,
};
static  VTT_ENTRY vtt_S19953C1[] = {
  {&(_ZTV8S19953C1[5]),  5,42},
  {&(_tg__ZTV8S19953C3__8S19953C1[4]),  4,5},
  {&(_tg__ZTV8S19953C48S19953C3__8S19953C1[3]),  3,3},
  {&(_tg__ZTV11S19953C2_nt__8S19953C48S19953C3__8S19953C1[5]),  5,8},
  {&(_tg__ZTV8S19953C58S19953C3__8S19953C1[4]),  4,8},
  {&(_tg__ZTV8S19953C4__8S19953C58S19953C3__8S19953C1[3]),  3,3},
  {&(_tg__ZTV11S19953C2_nt__8S19953C58S19953C3__8S19953C1[5]),  5,8},
  {&(_tg__ZTV11S19953C2_nt__8S19953C3__8S19953C1[5]),  5,8},
  {&(_tg__ZTV8S19953C5__8S19953C3__8S19953C1[4]),  4,8},
  {&(_tg__ZTV8S19953C4__A1__8S19953C3__8S19953C1[3]),  3,3},
  {&(_ZTV8S19953C1[24]),  24,42},
  {&(_ZTV8S19953C1[10]),  10,42},
  {&(_ZTV8S19953C1[30]),  30,42},
  {&(_ZTV8S19953C1[38]),  38,42},
  {&(_tg__ZTV8S19953C4__A1__8S19953C1[3]),  3,3},
  {&(_tg__ZTV11S19953C2_nt__8S19953C4__A1__8S19953C1[5]),  5,8},
  {&(_tg__ZTV8S19953C5__A1__8S19953C1[4]),  4,8},
  {&(_tg__ZTV8S19953C4__8S19953C5__A1__8S19953C1[3]),  3,3},
  {&(_tg__ZTV11S19953C2_nt__8S19953C5__A1__8S19953C1[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S19953C1[];
extern  VTBL_ENTRY _ZTV8S19953C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19953C1[];
Class_Descriptor cd_S19953C1 = {  "S19953C1", // class name
  bases_S19953C1, 9,
  &(vtc_S19953C1[0]), // expected_vtbl_contents
  &(vtt_S19953C1[0]), // expected_vtt_contents
  ABISELECT(280,152), // object size
  NSPAIRA(_ZTI8S19953C1),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV8S19953C1),42, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19953C1),19, //virtual table table var
  9, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9902C3_nt  {
  ::S5634C23 s9902c3f0;
  void  mf9902c3(); // _ZN10S9902C3_nt8mf9902c3Ev
};
//SIG(-1 S9902C3_nt) C1{ m FC2{ m Fp[2]}}


void  S9902C3_nt ::mf9902c3(){}

//skip512 S9902C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9902C2  {
  ::S9902C3_nt s9902c2f0;
  virtual  ~S9902C2(); // _ZN7S9902C2D1Ev
  virtual void  v5(); // _ZN7S9902C22v5Ev
  virtual void  v6(); // _ZN7S9902C22v6Ev
  virtual void  v7(); // _ZN7S9902C22v7Ev
  virtual void  v8(); // _ZN7S9902C22v8Ev
  virtual void  v9(); // _ZN7S9902C22v9Ev
  virtual void  v10(); // _ZN7S9902C23v10Ev
  virtual void  v11(); // _ZN7S9902C23v11Ev
  virtual void  v12(); // _ZN7S9902C23v12Ev
  virtual void  v13(); // _ZN7S9902C23v13Ev
  S9902C2(); // tgen
};
//SIG(-1 S9902C2) C1{ vd v1 v2 v3 v4 v5 v6 v7 v8 v9 FC2{ m FC3{ m Fp[2]}}}


 S9902C2 ::~S9902C2(){ note_dtor("S9902C2", this);}
void  S9902C2 ::v5(){vfunc_called(this, "_ZN7S9902C22v5Ev");}
void  S9902C2 ::v6(){vfunc_called(this, "_ZN7S9902C22v6Ev");}
void  S9902C2 ::v7(){vfunc_called(this, "_ZN7S9902C22v7Ev");}
void  S9902C2 ::v8(){vfunc_called(this, "_ZN7S9902C22v8Ev");}
void  S9902C2 ::v9(){vfunc_called(this, "_ZN7S9902C22v9Ev");}
void  S9902C2 ::v10(){vfunc_called(this, "_ZN7S9902C23v10Ev");}
void  S9902C2 ::v11(){vfunc_called(this, "_ZN7S9902C23v11Ev");}
void  S9902C2 ::v12(){vfunc_called(this, "_ZN7S9902C23v12Ev");}
void  S9902C2 ::v13(){vfunc_called(this, "_ZN7S9902C23v13Ev");}
S9902C2 ::S9902C2(){ note_ctor("S9902C2", this);} // tgen

static void Test_S9902C2()
{
  extern Class_Descriptor cd_S9902C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S9902C2, buf);
    S9902C2 *dp, &lv = *(dp=new (buf) S9902C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S9902C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9902C2)");
    check_field_offset(lv, s9902c2f0, ABISELECT(8,4), "S9902C2.s9902c2f0");
    test_class_info(&lv, &cd_S9902C2);
    dp->~S9902C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9902C2(Test_S9902C2, "S9902C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S9902C2C1Ev();
extern void _ZN7S9902C2D1Ev();
Name_Map name_map_S9902C2[] = {
  NSPAIR(_ZN7S9902C2C1Ev),
  NSPAIR(_ZN7S9902C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9902C2[];
extern void _ZN7S9902C2D1Ev();
extern void _ZN7S9902C2D0Ev();
extern void _ZN7S9902C22v5Ev();
extern void _ZN7S9902C22v6Ev();
extern void _ZN7S9902C22v7Ev();
extern void _ZN7S9902C22v8Ev();
extern void _ZN7S9902C22v9Ev();
extern void _ZN7S9902C23v10Ev();
extern void _ZN7S9902C23v11Ev();
extern void _ZN7S9902C23v12Ev();
extern void _ZN7S9902C23v13Ev();
static  VTBL_ENTRY vtc_S9902C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9902C2[0]),
  (VTBL_ENTRY)&_ZN7S9902C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9902C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9902C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9902C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9902C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9902C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9902C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9902C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9902C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9902C23v12Ev,
  (VTBL_ENTRY)&_ZN7S9902C23v13Ev,
};
extern VTBL_ENTRY _ZTI7S9902C2[];
extern  VTBL_ENTRY _ZTV7S9902C2[];
Class_Descriptor cd_S9902C2 = {  "S9902C2", // class name
  0,0,//no base classes
  &(vtc_S9902C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S9902C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9902C2),13, //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  S9902C1  : S9902C2 {
  void *s9902c1f0;
  ::S2264C20_nt s9902c1f1;
  ::S2264C20_nt s9902c1f2;
  ::S2264C20_nt s9902c1f3;
  virtual  ~S9902C1(); // _ZN7S9902C1D1Ev
  virtual void  v1(); // _ZN7S9902C12v1Ev
  virtual void  v2(); // _ZN7S9902C12v2Ev
  virtual void  v3(); // _ZN7S9902C12v3Ev
  virtual void  v4(); // _ZN7S9902C12v4Ev
  S9902C1(); // tgen
};
//SIG(1 S9902C1) C1{ BC2{ vd v5 v6 v7 v8 v9 v10 v11 v12 v13 FC3{ m FC4{ m Fp[2]}}} vd v1 v2 v3 v4 Fp FC5{ m Fp Fi FC6{ m}} FC5 FC5}


 S9902C1 ::~S9902C1(){ note_dtor("S9902C1", this);}
void  S9902C1 ::v1(){vfunc_called(this, "_ZN7S9902C12v1Ev");}
void  S9902C1 ::v2(){vfunc_called(this, "_ZN7S9902C12v2Ev");}
void  S9902C1 ::v3(){vfunc_called(this, "_ZN7S9902C12v3Ev");}
void  S9902C1 ::v4(){vfunc_called(this, "_ZN7S9902C12v4Ev");}
S9902C1 ::S9902C1(){ note_ctor("S9902C1", this);} // tgen

static void Test_S9902C1()
{
  extern Class_Descriptor cd_S9902C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,14)];
    init_test(&cd_S9902C1, buf);
    S9902C1 *dp, &lv = *(dp=new (buf) S9902C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S9902C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9902C1)");
    check_base_class_offset(lv, (S9902C2*), 0, "S9902C1");
    check_field_offset(lv, s9902c1f0, ABISELECT(24,12), "S9902C1.s9902c1f0");
    check_field_offset(lv, s9902c1f1, ABISELECT(32,16), "S9902C1.s9902c1f1");
    check_field_offset(lv, s9902c1f2, ABISELECT(48,28), "S9902C1.s9902c1f2");
    check_field_offset(lv, s9902c1f3, ABISELECT(64,40), "S9902C1.s9902c1f3");
    test_class_info(&lv, &cd_S9902C1);
    dp->~S9902C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9902C1(Test_S9902C1, "S9902C1", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S9902C1C1Ev();
extern void _ZN7S9902C1D1Ev();
Name_Map name_map_S9902C1[] = {
  NSPAIR(_ZN7S9902C1C1Ev),
  NSPAIR(_ZN7S9902C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9902C2;
extern VTBL_ENTRY _ZTI7S9902C2[];
extern  VTBL_ENTRY _ZTV7S9902C2[];
static Base_Class bases_S9902C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9902C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S9902C1[];
extern void _ZN7S9902C1D1Ev();
extern void _ZN7S9902C1D0Ev();
extern void _ZN7S9902C22v5Ev();
extern void _ZN7S9902C22v6Ev();
extern void _ZN7S9902C22v7Ev();
extern void _ZN7S9902C22v8Ev();
extern void _ZN7S9902C22v9Ev();
extern void _ZN7S9902C23v10Ev();
extern void _ZN7S9902C23v11Ev();
extern void _ZN7S9902C23v12Ev();
extern void _ZN7S9902C23v13Ev();
extern void _ZN7S9902C12v1Ev();
extern void _ZN7S9902C12v2Ev();
extern void _ZN7S9902C12v3Ev();
extern void _ZN7S9902C12v4Ev();
static  VTBL_ENTRY vtc_S9902C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9902C1[0]),
  (VTBL_ENTRY)&_ZN7S9902C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9902C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9902C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9902C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9902C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9902C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9902C22v9Ev,
  (VTBL_ENTRY)&_ZN7S9902C23v10Ev,
  (VTBL_ENTRY)&_ZN7S9902C23v11Ev,
  (VTBL_ENTRY)&_ZN7S9902C23v12Ev,
  (VTBL_ENTRY)&_ZN7S9902C23v13Ev,
  (VTBL_ENTRY)&_ZN7S9902C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9902C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9902C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9902C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9902C1[];
extern  VTBL_ENTRY _ZTV7S9902C1[];
Class_Descriptor cd_S9902C1 = {  "S9902C1", // class name
  bases_S9902C1, 1,
  &(vtc_S9902C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S9902C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9902C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20523C4  {
  virtual void  v2(); // _ZN8S20523C42v2Ev
  virtual void  v3(); // _ZN8S20523C42v3Ev
  ~S20523C4(); // tgen
  S20523C4(); // tgen
};
//SIG(-1 S20523C4) C1{ v1 v2}


void  S20523C4 ::v2(){vfunc_called(this, "_ZN8S20523C42v2Ev");}
void  S20523C4 ::v3(){vfunc_called(this, "_ZN8S20523C42v3Ev");}
S20523C4 ::~S20523C4(){ note_dtor("S20523C4", this);} // tgen
S20523C4 ::S20523C4(){ note_ctor("S20523C4", this);} // tgen

static void Test_S20523C4()
{
  extern Class_Descriptor cd_S20523C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S20523C4, buf);
    S20523C4 *dp, &lv = *(dp=new (buf) S20523C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S20523C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20523C4)");
    test_class_info(&lv, &cd_S20523C4);
    dp->~S20523C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20523C4(Test_S20523C4, "S20523C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S20523C4C1Ev();
extern void _ZN8S20523C4D1Ev();
Name_Map name_map_S20523C4[] = {
  NSPAIR(_ZN8S20523C4C1Ev),
  NSPAIR(_ZN8S20523C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20523C4[];
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
static  VTBL_ENTRY vtc_S20523C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20523C4[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
};
extern VTBL_ENTRY _ZTI8S20523C4[];
extern  VTBL_ENTRY _ZTV8S20523C4[];
Class_Descriptor cd_S20523C4 = {  "S20523C4", // class name
  0,0,//no base classes
  &(vtc_S20523C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S20523C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20523C4),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  S20523C5  : virtual S20523C4 {
  void *s20523c5f0;
  virtual void  v4(); // _ZN8S20523C52v4Ev
  ~S20523C5(); // tgen
  S20523C5(); // tgen
};
//SIG(-1 S20523C5) C1{ VBC2{ v2 v3} v1 Fp}


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

static void Test_S20523C5()
{
  extern Class_Descriptor cd_S20523C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20523C5, buf);
    S20523C5 *dp, &lv = *(dp=new (buf) S20523C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20523C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20523C5)");
    check_base_class_offset(lv, (S20523C4*), 0, "S20523C5");
    check_field_offset(lv, s20523c5f0, ABISELECT(8,4), "S20523C5.s20523c5f0");
    test_class_info(&lv, &cd_S20523C5);
    dp->~S20523C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20523C5(Test_S20523C5, "S20523C5", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20523C5C1Ev();
extern void _ZN8S20523C5D1Ev();
Name_Map name_map_S20523C5[] = {
  NSPAIR(_ZN8S20523C5C1Ev),
  NSPAIR(_ZN8S20523C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20523C4;
extern VTBL_ENTRY _ZTI8S20523C4[];
extern  VTBL_ENTRY _ZTV8S20523C4[];
static Base_Class bases_S20523C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20523C4,    0, //bcp->offset
    -1, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S20523C5[];
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
extern void _ZN8S20523C52v4Ev();
static  VTBL_ENTRY vtc_S20523C5[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20523C5[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20523C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S20523C5[];
static  VTT_ENTRY vtt_S20523C5[] = {
  {&(_ZTV8S20523C5[5]),  5,8},
  {&(_ZTV8S20523C5[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S20523C5[];
extern  VTBL_ENTRY _ZTV8S20523C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20523C5[];
Class_Descriptor cd_S20523C5 = {  "S20523C5", // class name
  bases_S20523C5, 1,
  &(vtc_S20523C5[0]), // expected_vtbl_contents
  &(vtt_S20523C5[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20523C5),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20523C5),8, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20523C5),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  S20523C3  : S20523C4 , virtual S20523C5 {
  int s20523c3f0;
  ::S3052C22_nt s20523c3f1;
  ::S20523C5 s20523c3f2;
  virtual void  v5(); // _ZN8S20523C32v5Ev
  virtual void  v6(); // _ZN8S20523C32v6Ev
  virtual void  v7(); // _ZN8S20523C32v7Ev
  virtual void  v8(); // _ZN8S20523C32v8Ev
  virtual void  v9(); // _ZN8S20523C32v9Ev
  ~S20523C3(); // tgen
  S20523C3(); // tgen
};
//SIG(-1 S20523C3) C1{ BC2{ v6 v7} VBC3{ VBC2 v8 Fp} v1 v2 v3 v4 v5 Fi FC4{} FC3}


void  S20523C3 ::v5(){vfunc_called(this, "_ZN8S20523C32v5Ev");}
void  S20523C3 ::v6(){vfunc_called(this, "_ZN8S20523C32v6Ev");}
void  S20523C3 ::v7(){vfunc_called(this, "_ZN8S20523C32v7Ev");}
void  S20523C3 ::v8(){vfunc_called(this, "_ZN8S20523C32v8Ev");}
void  S20523C3 ::v9(){vfunc_called(this, "_ZN8S20523C32v9Ev");}
S20523C3 ::~S20523C3(){ note_dtor("S20523C3", this);} // tgen
S20523C3 ::S20523C3(){ note_ctor("S20523C3", this);} // tgen

static void Test_S20523C3()
{
  extern Class_Descriptor cd_S20523C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S20523C3, buf);
    S20523C3 *dp, &lv = *(dp=new (buf) S20523C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S20523C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20523C3)");
    /*is_ambiguous_... S20523C3::S20523C4 */ AMB_check_base_class_offset(lv, (S20523C4*), 0, "S20523C3");
    check_base_class_offset(lv, (S20523C4*)(S20523C5*), ABISELECT(32,20), "S20523C3");
    check_base_class_offset(lv, (S20523C5*), ABISELECT(32,20), "S20523C3");
    check_field_offset(lv, s20523c3f0, ABISELECT(8,4), "S20523C3.s20523c3f0");
    check_field_offset(lv, s20523c3f1, ABISELECT(12,8), "S20523C3.s20523c3f1");
    check_field_offset(lv, s20523c3f2, ABISELECT(16,12), "S20523C3.s20523c3f2");
    test_class_info(&lv, &cd_S20523C3);
    dp->~S20523C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20523C3(Test_S20523C3, "S20523C3", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN8S20523C3C1Ev();
extern void _ZN8S20523C3D1Ev();
Name_Map name_map_S20523C3[] = {
  NSPAIR(_ZN8S20523C3C1Ev),
  NSPAIR(_ZN8S20523C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20523C4;
extern VTBL_ENTRY _ZTI8S20523C4[];
extern  VTBL_ENTRY _ZTV8S20523C4[];
extern Class_Descriptor cd_S20523C4;
extern VTBL_ENTRY _ZTI8S20523C4[];
extern  VTBL_ENTRY _ZTV8S20523C4[];
extern Class_Descriptor cd_S20523C5;
extern VTBL_ENTRY _ZTI8S20523C5[];
extern  VTBL_ENTRY _ZTV8S20523C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20523C5[];
static Base_Class bases_S20523C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20523C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S20523C4,    ABISELECT(32,20), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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_S20523C5,    ABISELECT(32,20), //bcp->offset
    11, //bcp->virtual_function_table_offset
    6, //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 _ZTI8S20523C3[];
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
extern void _ZN8S20523C32v5Ev();
extern void _ZN8S20523C32v6Ev();
extern void _ZN8S20523C32v7Ev();
extern void _ZN8S20523C32v8Ev();
extern void _ZN8S20523C32v9Ev();
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
extern void _ZN8S20523C52v4Ev();
static  VTBL_ENTRY vtc_S20523C3[] = {
  ABISELECT(32,20),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20523C3[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v9Ev,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20523C3[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20523C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S20523C3[];
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
extern void _ZN8S20523C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20523C5__8S20523C3[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20523C5[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20523C52v4Ev,
};
static  VTT_ENTRY vtt_S20523C3[] = {
  {&(_ZTV8S20523C3[4]),  4,20},
  {&(_ZTV8S20523C3[17]),  17,20},
  {&(_ZTV8S20523C3[17]),  17,20},
  {&(_tg__ZTV8S20523C5__8S20523C3[5]),  5,8},
  {&(_tg__ZTV8S20523C5__8S20523C3[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S20523C3[];
extern  VTBL_ENTRY _ZTV8S20523C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20523C3[];
Class_Descriptor cd_S20523C3 = {  "S20523C3", // class name
  bases_S20523C3, 3,
  &(vtc_S20523C3[0]), // expected_vtbl_contents
  &(vtt_S20523C3[0]), // expected_vtt_contents
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI8S20523C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20523C3),20, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20523C3),5, //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  S20523C2  : virtual S20523C3 {
  void *s20523c2f0[2];
  virtual  ~S20523C2(); // _ZN8S20523C2D2Ev
  virtual void  v10(); // _ZN8S20523C23v10Ev
  virtual void  v11(); // _ZN8S20523C23v11Ev
  virtual void  v12(); // _ZN8S20523C23v12Ev
  virtual void  v13(); // _ZN8S20523C23v13Ev
  virtual void  v14(); // _ZN8S20523C23v14Ev
  virtual void  v15(); // _ZN8S20523C23v15Ev
  S20523C2(); // tgen
};
//SIG(-1 S20523C2) C1{ VBC2{ BC3{ v7 v8} VBC4{ VBC3 v9 Fp} v10 v11 v12 v13 v14 Fi FC5{} FC4} vd v1 v2 v3 v4 v5 v6 Fp[2]}


 S20523C2 ::~S20523C2(){ note_dtor("S20523C2", this);}
void  S20523C2 ::v10(){vfunc_called(this, "_ZN8S20523C23v10Ev");}
void  S20523C2 ::v11(){vfunc_called(this, "_ZN8S20523C23v11Ev");}
void  S20523C2 ::v12(){vfunc_called(this, "_ZN8S20523C23v12Ev");}
void  S20523C2 ::v13(){vfunc_called(this, "_ZN8S20523C23v13Ev");}
void  S20523C2 ::v14(){vfunc_called(this, "_ZN8S20523C23v14Ev");}
void  S20523C2 ::v15(){vfunc_called(this, "_ZN8S20523C23v15Ev");}
S20523C2 ::S20523C2(){ note_ctor("S20523C2", this);} // tgen

static void Test_S20523C2()
{
  extern Class_Descriptor cd_S20523C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,11)];
    init_test(&cd_S20523C2, buf);
    S20523C2 *dp, &lv = *(dp=new (buf) S20523C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,40), "sizeof(S20523C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20523C2)");
    /*is_ambiguous_... S20523C3::S20523C4 */ AMB_check_base_class_offset(lv, (S20523C4*)(S20523C3*), ABISELECT(24,12), "S20523C2");
    check_base_class_offset(lv, (S20523C4*)(S20523C5*), 0, "S20523C2");
    check_base_class_offset(lv, (S20523C5*)(S20523C3*), ABISELECT(56,32), "S20523C2");
    check_base_class_offset(lv, (S20523C3*), ABISELECT(24,12), "S20523C2");
    check_field_offset(lv, s20523c2f0, ABISELECT(8,4), "S20523C2.s20523c2f0");
    test_class_info(&lv, &cd_S20523C2);
    dp->~S20523C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20523C2(Test_S20523C2, "S20523C2", ABISELECT(72,40));

#else // __cplusplus

extern void _ZN8S20523C2C1Ev();
extern void _ZN8S20523C2D2Ev();
Name_Map name_map_S20523C2[] = {
  NSPAIR(_ZN8S20523C2C1Ev),
  NSPAIR(_ZN8S20523C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20523C4;
extern VTBL_ENTRY _ZTI8S20523C4[];
extern  VTBL_ENTRY _ZTV8S20523C4[];
extern Class_Descriptor cd_S20523C4;
extern VTBL_ENTRY _ZTI8S20523C4[];
extern  VTBL_ENTRY _ZTV8S20523C4[];
extern Class_Descriptor cd_S20523C5;
extern VTBL_ENTRY _ZTI8S20523C5[];
extern  VTBL_ENTRY _ZTV8S20523C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20523C5[];
extern Class_Descriptor cd_S20523C3;
extern VTBL_ENTRY _ZTI8S20523C3[];
extern  VTBL_ENTRY _ZTV8S20523C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20523C3[];
static Base_Class bases_S20523C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20523C4,    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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20523C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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_S20523C5,    ABISELECT(56,32), //bcp->offset
    35, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    8, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20523C3,    ABISELECT(24,12), //bcp->offset
    17, //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
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S20523C2[];
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
extern void _ZN8S20523C2D1Ev();
extern void _ZN8S20523C2D0Ev();
extern void _ZN8S20523C23v10Ev();
extern void _ZN8S20523C23v11Ev();
extern void _ZN8S20523C23v12Ev();
extern void _ZN8S20523C23v13Ev();
extern void _ZN8S20523C23v14Ev();
extern void _ZN8S20523C23v15Ev();
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
extern void _ZN8S20523C32v5Ev();
extern void _ZN8S20523C32v6Ev();
extern void _ZN8S20523C32v7Ev();
extern void _ZN8S20523C32v8Ev();
extern void _ZN8S20523C32v9Ev();
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
extern void _ZN8S20523C52v4Ev();
static  VTBL_ENTRY vtc_S20523C2[] = {
  0,
  ABISELECT(56,32),
  ABISELECT(24,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20523C2[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20523C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20523C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20523C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20523C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20523C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20523C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20523C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20523C23v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20523C2[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v9Ev,
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S20523C2[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20523C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S20523C2[];
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
extern void _ZN8S20523C32v5Ev();
extern void _ZN8S20523C32v6Ev();
extern void _ZN8S20523C32v7Ev();
extern void _ZN8S20523C32v8Ev();
extern void _ZN8S20523C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20523C3__8S20523C2[] = {
  ABISELECT(-24,-12),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20523C3[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v9Ev,
};
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
extern void _ZN8S20523C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20523C5__8S20523C3__8S20523C2[] = {
  0,
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20523C3[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20523C52v4Ev,
};
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20523C4__A1__8S20523C3__8S20523C2[] = {
  0,
  0,
  ABISELECT(24,12),
  (VTBL_ENTRY)&(_ZTI8S20523C3[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
};
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
extern void _ZN8S20523C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20523C5__8S20523C2[] = {
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  ABISELECT(-56,-32),
  0,
  (VTBL_ENTRY)&(_ZTI8S20523C5[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20523C52v4Ev,
};
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20523C4__8S20523C5__8S20523C2[] = {
  0,
  0,
  ABISELECT(56,32),
  (VTBL_ENTRY)&(_ZTI8S20523C5[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
};
static  VTT_ENTRY vtt_S20523C2[] = {
  {&(_ZTV8S20523C2[7]),  7,44},
  {&(_ZTV8S20523C2[28]),  28,44},
  {&(_ZTV8S20523C2[41]),  41,44},
  {&(_ZTV8S20523C2[7]),  7,44},
  {&(_tg__ZTV8S20523C3__8S20523C2[4]),  4,11},
  {&(_tg__ZTV8S20523C5__8S20523C3__8S20523C2[6]),  6,9},
  {&(_tg__ZTV8S20523C4__A1__8S20523C3__8S20523C2[4]),  4,6},
  {&(_tg__ZTV8S20523C5__8S20523C2[5]),  5,8},
  {&(_tg__ZTV8S20523C4__8S20523C5__8S20523C2[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20523C2[];
extern  VTBL_ENTRY _ZTV8S20523C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20523C2[];
Class_Descriptor cd_S20523C2 = {  "S20523C2", // class name
  bases_S20523C2, 4,
  &(vtc_S20523C2[0]), // expected_vtbl_contents
  &(vtt_S20523C2[0]), // expected_vtt_contents
  ABISELECT(72,40), // object size
  NSPAIRA(_ZTI8S20523C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20523C2),44, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20523C2),9, //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  S20523C1  : virtual S20523C2 {
  virtual  ~S20523C1(); // _ZN8S20523C1D2Ev
  virtual void  v1(); // _ZN8S20523C12v1Ev
  S20523C1(); // tgen
};
//SIG(1 S20523C1) C1{ VBC2{ VBC3{ BC4{ v2 v3} VBC5{ VBC4 v4 Fp} v5 v6 v7 v8 v9 Fi FC6{} FC5} vd v10 v11 v12 v13 v14 v15 Fp[2]} vd v1}


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

static void Test_S20523C1()
{
  extern Class_Descriptor cd_S20523C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,12)];
    init_test(&cd_S20523C1, buf);
    S20523C1 *dp, &lv = *(dp=new (buf) S20523C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,44), "sizeof(S20523C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20523C1)");
    /*is_ambiguous_... S20523C3::S20523C4 */ AMB_check_base_class_offset(lv, (S20523C4*)(S20523C3*), ABISELECT(32,16), "S20523C1");
    check_base_class_offset(lv, (S20523C4*)(S20523C5*), 0, "S20523C1");
    check_base_class_offset(lv, (S20523C5*)(S20523C3*), ABISELECT(64,36), "S20523C1");
    check_base_class_offset(lv, (S20523C3*)(S20523C2*), ABISELECT(32,16), "S20523C1");
    check_base_class_offset(lv, (S20523C2*), ABISELECT(8,4), "S20523C1");
    test_class_info(&lv, &cd_S20523C1);
    dp->~S20523C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20523C1(Test_S20523C1, "S20523C1", ABISELECT(80,44));

#else // __cplusplus

extern void _ZN8S20523C1C1Ev();
extern void _ZN8S20523C1D2Ev();
Name_Map name_map_S20523C1[] = {
  NSPAIR(_ZN8S20523C1C1Ev),
  NSPAIR(_ZN8S20523C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20523C4;
extern VTBL_ENTRY _ZTI8S20523C4[];
extern  VTBL_ENTRY _ZTV8S20523C4[];
extern Class_Descriptor cd_S20523C4;
extern VTBL_ENTRY _ZTI8S20523C4[];
extern  VTBL_ENTRY _ZTV8S20523C4[];
extern Class_Descriptor cd_S20523C5;
extern VTBL_ENTRY _ZTI8S20523C5[];
extern  VTBL_ENTRY _ZTV8S20523C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20523C5[];
extern Class_Descriptor cd_S20523C3;
extern VTBL_ENTRY _ZTI8S20523C3[];
extern  VTBL_ENTRY _ZTV8S20523C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20523C3[];
extern Class_Descriptor cd_S20523C2;
extern VTBL_ENTRY _ZTI8S20523C2[];
extern  VTBL_ENTRY _ZTV8S20523C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20523C2[];
static Base_Class bases_S20523C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20523C4,    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
    3, //init_seq
    3, //immediately_derived
  0, 0},
  {&cd_S20523C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    2, //immediately_derived
  0, 1},
  {&cd_S20523C5,    ABISELECT(64,36), //bcp->offset
    55, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    13, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    3, //immediately_derived
  0, 1},
  {&cd_S20523C3,    ABISELECT(32,16), //bcp->offset
    37, //bcp->virtual_function_table_offset
    11, //num_negative_vtable_entries(t, bcp)
    3, //bcp->index_in_construction_vtbl_array
    10, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    4, //immediately_derived
  0, 1},
  {&cd_S20523C2,    ABISELECT(8,4), //bcp->offset
    13, //bcp->virtual_function_table_offset
    14, //num_negative_vtable_entries(t, bcp)
    2, //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 _ZTI8S20523C1[];
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
extern void _ZN8S20523C1D1Ev();
extern void _ZN8S20523C1D0Ev();
extern void _ZN8S20523C12v1Ev();
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
extern void ABISELECT(_ZTv0_n64_N8S20523C1D1Ev,_ZTv0_n32_N8S20523C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20523C1D1Ev,_ZThn4_N8S20523C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n64_N8S20523C1D0Ev,_ZTv0_n32_N8S20523C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S20523C1D0Ev,_ZThn4_N8S20523C1D0Ev)() __attribute__((weak));
extern void _ZN8S20523C23v10Ev();
extern void _ZN8S20523C23v11Ev();
extern void _ZN8S20523C23v12Ev();
extern void _ZN8S20523C23v13Ev();
extern void _ZN8S20523C23v14Ev();
extern void _ZN8S20523C23v15Ev();
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
extern void _ZN8S20523C32v5Ev();
extern void _ZN8S20523C32v6Ev();
extern void _ZN8S20523C32v7Ev();
extern void _ZN8S20523C32v8Ev();
extern void _ZN8S20523C32v9Ev();
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
extern void _ZN8S20523C52v4Ev();
static  VTBL_ENTRY vtc_S20523C1[] = {
  0,
  ABISELECT(64,36),
  ABISELECT(32,16),
  ABISELECT(8,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S20523C1[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20523C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20523C1D0Ev,
  (VTBL_ENTRY)&_ZN8S20523C12v1Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(56,32),
  ABISELECT(24,12),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20523C1[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20523C1D1Ev,_ZTv0_n32_N8S20523C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n64_N8S20523C1D0Ev,_ZTv0_n32_N8S20523C1D0Ev),
  (VTBL_ENTRY)&_ZN8S20523C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20523C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20523C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20523C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20523C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20523C23v15Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(32,20),
  ABISELECT(-32,-16),
  (VTBL_ENTRY)&(_ZTI8S20523C1[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v9Ev,
  0,
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  (VTBL_ENTRY)&(_ZTI8S20523C1[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20523C52v4Ev,
};
extern VTBL_ENTRY _ZTV8S20523C1[];
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
extern void _ZN8S20523C2D1Ev();
extern void _ZN8S20523C2D0Ev();
extern void _ZN8S20523C23v10Ev();
extern void _ZN8S20523C23v11Ev();
extern void _ZN8S20523C23v12Ev();
extern void _ZN8S20523C23v13Ev();
extern void _ZN8S20523C23v14Ev();
extern void _ZN8S20523C23v15Ev();
static  VTBL_ENTRY _tg__ZTV8S20523C2__8S20523C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(56,32),
  ABISELECT(24,12),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20523C2[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20523C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20523C2D0Ev,
  (VTBL_ENTRY)&_ZN8S20523C23v10Ev,
  (VTBL_ENTRY)&_ZN8S20523C23v11Ev,
  (VTBL_ENTRY)&_ZN8S20523C23v12Ev,
  (VTBL_ENTRY)&_ZN8S20523C23v13Ev,
  (VTBL_ENTRY)&_ZN8S20523C23v14Ev,
  (VTBL_ENTRY)&_ZN8S20523C23v15Ev,
};
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
extern void _ZN8S20523C32v5Ev();
extern void _ZN8S20523C32v6Ev();
extern void _ZN8S20523C32v7Ev();
extern void _ZN8S20523C32v8Ev();
extern void _ZN8S20523C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20523C3__8S20523C2__8S20523C1[] = {
  0,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-32,-16),
  ABISELECT(32,20),
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S20523C2[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v9Ev,
};
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
extern void _ZN8S20523C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20523C5__8S20523C2__8S20523C1[] = {
  0,
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-56,-32),
  (VTBL_ENTRY)&(_ZTI8S20523C2[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20523C52v4Ev,
};
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20523C4__A1__8S20523C2__8S20523C1[] = {
  0,
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S20523C2[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
};
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
extern void _ZN8S20523C32v5Ev();
extern void _ZN8S20523C32v6Ev();
extern void _ZN8S20523C32v7Ev();
extern void _ZN8S20523C32v8Ev();
extern void _ZN8S20523C32v9Ev();
static  VTBL_ENTRY _tg__ZTV8S20523C3__8S20523C1[] = {
  ABISELECT(-32,-16),
  ABISELECT(32,20),
  0,
  (VTBL_ENTRY)&(_ZTI8S20523C3[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v5Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v6Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v7Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v8Ev,
  (VTBL_ENTRY)&_ZN8S20523C32v9Ev,
};
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
extern void _ZN8S20523C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20523C5__8S20523C3__8S20523C1[] = {
  0,
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-32,-20),
  (VTBL_ENTRY)&(_ZTI8S20523C3[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20523C52v4Ev,
};
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20523C4__A1__8S20523C3__8S20523C1[] = {
  0,
  0,
  ABISELECT(32,16),
  (VTBL_ENTRY)&(_ZTI8S20523C3[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
};
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
extern void _ZN8S20523C52v4Ev();
static  VTBL_ENTRY _tg__ZTV8S20523C5__8S20523C1[] = {
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  ABISELECT(-64,-36),
  0,
  (VTBL_ENTRY)&(_ZTI8S20523C5[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
  (VTBL_ENTRY)&_ZN8S20523C52v4Ev,
};
extern void _ZN8S20523C42v2Ev();
extern void _ZN8S20523C42v3Ev();
static  VTBL_ENTRY _tg__ZTV8S20523C4__8S20523C5__8S20523C1[] = {
  0,
  0,
  ABISELECT(64,36),
  (VTBL_ENTRY)&(_ZTI8S20523C5[0]),
  (VTBL_ENTRY)&_ZN8S20523C42v2Ev,
  (VTBL_ENTRY)&_ZN8S20523C42v3Ev,
};
static  VTT_ENTRY vtt_S20523C1[] = {
  {&(_ZTV8S20523C1[8]),  8,64},
  {&(_ZTV8S20523C1[27]),  27,64},
  {&(_ZTV8S20523C1[48]),  48,64},
  {&(_ZTV8S20523C1[61]),  61,64},
  {&(_ZTV8S20523C1[8]),  8,64},
  {&(_tg__ZTV8S20523C2__8S20523C1[7]),  7,17},
  {&(_tg__ZTV8S20523C3__8S20523C2__8S20523C1[11]),  11,18},
  {&(_tg__ZTV8S20523C5__8S20523C2__8S20523C1[6]),  6,9},
  {&(_tg__ZTV8S20523C4__A1__8S20523C2__8S20523C1[4]),  4,6},
  {&(_tg__ZTV8S20523C3__8S20523C1[4]),  4,11},
  {&(_tg__ZTV8S20523C5__8S20523C3__8S20523C1[6]),  6,9},
  {&(_tg__ZTV8S20523C4__A1__8S20523C3__8S20523C1[4]),  4,6},
  {&(_tg__ZTV8S20523C5__8S20523C1[5]),  5,8},
  {&(_tg__ZTV8S20523C4__8S20523C5__8S20523C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S20523C1[];
extern  VTBL_ENTRY _ZTV8S20523C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20523C1[];
static VTBL_ENTRY alt_thunk_names230[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20523C1D0Ev,_ZTv0_n32_N8S20523C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20523C1D0Ev,_ZThn4_N8S20523C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n64_N8S20523C1D1Ev,_ZTv0_n32_N8S20523C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20523C1D1Ev,_ZThn4_N8S20523C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20523C1 = {  "S20523C1", // class name
  bases_S20523C1, 5,
  &(vtc_S20523C1[0]), // expected_vtbl_contents
  &(vtt_S20523C1[0]), // expected_vtt_contents
  ABISELECT(80,44), // object size
  NSPAIRA(_ZTI8S20523C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20523C1),64, //virtual function table var
  8, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20523C1),14, //virtual table table var
  5, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names230,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9332C2  {
  ::S2264C20_nt s9332c2f0;
  int s9332c2f1[2];
  char s9332c2f2;
  virtual  ~S9332C2(); // _ZN7S9332C2D1Ev
  virtual void  v3(); // _ZN7S9332C22v3Ev
  virtual void  v4(); // _ZN7S9332C22v4Ev
  virtual void  v5(); // _ZN7S9332C22v5Ev
  S9332C2(); // tgen
};
//SIG(-1 S9332C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9332C2 ::~S9332C2(){ note_dtor("S9332C2", this);}
void  S9332C2 ::v3(){vfunc_called(this, "_ZN7S9332C22v3Ev");}
void  S9332C2 ::v4(){vfunc_called(this, "_ZN7S9332C22v4Ev");}
void  S9332C2 ::v5(){vfunc_called(this, "_ZN7S9332C22v5Ev");}
S9332C2 ::S9332C2(){ note_ctor("S9332C2", this);} // tgen

static void Test_S9332C2()
{
  extern Class_Descriptor cd_S9332C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9332C2, buf);
    S9332C2 *dp, &lv = *(dp=new (buf) S9332C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9332C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9332C2)");
    check_field_offset(lv, s9332c2f0, ABISELECT(8,4), "S9332C2.s9332c2f0");
    check_field_offset(lv, s9332c2f1, ABISELECT(24,16), "S9332C2.s9332c2f1");
    check_field_offset(lv, s9332c2f2, ABISELECT(32,24), "S9332C2.s9332c2f2");
    test_class_info(&lv, &cd_S9332C2);
    dp->~S9332C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9332C2(Test_S9332C2, "S9332C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9332C2C1Ev();
extern void _ZN7S9332C2D1Ev();
Name_Map name_map_S9332C2[] = {
  NSPAIR(_ZN7S9332C2C1Ev),
  NSPAIR(_ZN7S9332C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9332C2[];
extern void _ZN7S9332C2D1Ev();
extern void _ZN7S9332C2D0Ev();
extern void _ZN7S9332C22v3Ev();
extern void _ZN7S9332C22v4Ev();
extern void _ZN7S9332C22v5Ev();
static  VTBL_ENTRY vtc_S9332C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9332C2[0]),
  (VTBL_ENTRY)&_ZN7S9332C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9332C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9332C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9332C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9332C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9332C2[];
extern  VTBL_ENTRY _ZTV7S9332C2[];
Class_Descriptor cd_S9332C2 = {  "S9332C2", // class name
  0,0,//no base classes
  &(vtc_S9332C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9332C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9332C2),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  S9332C1  : S9332C2 {
  int s9332c1f0[2];
  char s9332c1f1[3];
  int s9332c1f2[2];
  void *s9332c1f3;
  ::S2264C20_nt s9332c1f4;
  ::S2264C20_nt s9332c1f5;
  void *s9332c1f6;
  int s9332c1f7[3];
  void *s9332c1f8[2];
  int s9332c1f9;
  virtual  ~S9332C1(); // _ZN7S9332C1D1Ev
  virtual void  v1(); // _ZN7S9332C12v1Ev
  virtual void  v2(); // _ZN7S9332C12v2Ev
  S9332C1(); // tgen
};
//SIG(1 S9332C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fi[2] Fc[3] Fi[2] Fp FC3 FC3 Fp Fi[3] Fp[2] Fi}


 S9332C1 ::~S9332C1(){ note_dtor("S9332C1", this);}
void  S9332C1 ::v1(){vfunc_called(this, "_ZN7S9332C12v1Ev");}
void  S9332C1 ::v2(){vfunc_called(this, "_ZN7S9332C12v2Ev");}
S9332C1 ::S9332C1(){ note_ctor("S9332C1", this);} // tgen

static void Test_S9332C1()
{
  extern Class_Descriptor cd_S9332C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(19,27)];
    init_test(&cd_S9332C1, buf);
    S9332C1 *dp, &lv = *(dp=new (buf) S9332C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(144,104), "sizeof(S9332C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9332C1)");
    check_base_class_offset(lv, (S9332C2*), 0, "S9332C1");
    check_field_offset(lv, s9332c1f0, ABISELECT(36,28), "S9332C1.s9332c1f0");
    check_field_offset(lv, s9332c1f1, ABISELECT(44,36), "S9332C1.s9332c1f1");
    check_field_offset(lv, s9332c1f2, ABISELECT(48,40), "S9332C1.s9332c1f2");
    check_field_offset(lv, s9332c1f3, ABISELECT(56,48), "S9332C1.s9332c1f3");
    check_field_offset(lv, s9332c1f4, ABISELECT(64,52), "S9332C1.s9332c1f4");
    check_field_offset(lv, s9332c1f5, ABISELECT(80,64), "S9332C1.s9332c1f5");
    check_field_offset(lv, s9332c1f6, ABISELECT(96,76), "S9332C1.s9332c1f6");
    check_field_offset(lv, s9332c1f7, ABISELECT(104,80), "S9332C1.s9332c1f7");
    check_field_offset(lv, s9332c1f8, ABISELECT(120,92), "S9332C1.s9332c1f8");
    check_field_offset(lv, s9332c1f9, ABISELECT(136,100), "S9332C1.s9332c1f9");
    test_class_info(&lv, &cd_S9332C1);
    dp->~S9332C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9332C1(Test_S9332C1, "S9332C1", ABISELECT(144,104));

#else // __cplusplus

extern void _ZN7S9332C1C1Ev();
extern void _ZN7S9332C1D1Ev();
Name_Map name_map_S9332C1[] = {
  NSPAIR(_ZN7S9332C1C1Ev),
  NSPAIR(_ZN7S9332C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9332C2;
extern VTBL_ENTRY _ZTI7S9332C2[];
extern  VTBL_ENTRY _ZTV7S9332C2[];
static Base_Class bases_S9332C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9332C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S9332C1[];
extern void _ZN7S9332C1D1Ev();
extern void _ZN7S9332C1D0Ev();
extern void _ZN7S9332C22v3Ev();
extern void _ZN7S9332C22v4Ev();
extern void _ZN7S9332C22v5Ev();
extern void _ZN7S9332C12v1Ev();
extern void _ZN7S9332C12v2Ev();
static  VTBL_ENTRY vtc_S9332C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9332C1[0]),
  (VTBL_ENTRY)&_ZN7S9332C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9332C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9332C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9332C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9332C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9332C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9332C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9332C1[];
extern  VTBL_ENTRY _ZTV7S9332C1[];
Class_Descriptor cd_S9332C1 = {  "S9332C1", // class name
  bases_S9332C1, 1,
  &(vtc_S9332C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(144,104), // object size
  NSPAIRA(_ZTI7S9332C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9332C1),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  S15230C2_nt  {
  void *s15230c2f0;
  int s15230c2f1[2];
};
//SIG(-1 S15230C2_nt) C1{ Fp Fi[2]}



//skip512 S15230C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15230C1  {
  char s15230c1f0[3];
  int s15230c1f1[3];
  char s15230c1f2[2];
  int s15230c1f3;
  char s15230c1f4;
  int s15230c1f5;
  void *s15230c1f6;
  int s15230c1f7[2];
  char s15230c1f8;
  ::S15230C2_nt s15230c1f9;
  ::S15230C2_nt s15230c1f10;
  ::S15230C2_nt s15230c1f11;
  char s15230c1f12;
  void *s15230c1f13[3];
  int s15230c1f14;
  void *s15230c1f15;
  int s15230c1f16;
  void *s15230c1f17;
  int s15230c1f18;
  void *s15230c1f19[8];
  int s15230c1f20;
  char s15230c1f21;
  void  mf15230c1(); // _ZN8S15230C19mf15230c1Ev
};
//SIG(1 S15230C1) C1{ m Fc[3] Fi[3] Fc[2] Fi Fc Fi Fp Fi[2] Fc FC2{ Fp Fi[2]} FC2 FC2 Fc Fp[3] Fi Fp Fi Fp Fi Fp[8] Fi Fc}


void  S15230C1 ::mf15230c1(){}

static void Test_S15230C1()
{
  {
    init_simple_test("S15230C1");
    S15230C1 lv;
    check2(sizeof(lv), ABISELECT(248,160), "sizeof(S15230C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15230C1)");
    check_field_offset(lv, s15230c1f0, 0, "S15230C1.s15230c1f0");
    check_field_offset(lv, s15230c1f1, 4, "S15230C1.s15230c1f1");
    check_field_offset(lv, s15230c1f2, 16, "S15230C1.s15230c1f2");
    check_field_offset(lv, s15230c1f3, 20, "S15230C1.s15230c1f3");
    check_field_offset(lv, s15230c1f4, 24, "S15230C1.s15230c1f4");
    check_field_offset(lv, s15230c1f5, 28, "S15230C1.s15230c1f5");
    check_field_offset(lv, s15230c1f6, 32, "S15230C1.s15230c1f6");
    check_field_offset(lv, s15230c1f7, ABISELECT(40,36), "S15230C1.s15230c1f7");
    check_field_offset(lv, s15230c1f8, ABISELECT(48,44), "S15230C1.s15230c1f8");
    check_field_offset(lv, s15230c1f9, ABISELECT(56,48), "S15230C1.s15230c1f9");
    check_field_offset(lv, s15230c1f10, ABISELECT(72,60), "S15230C1.s15230c1f10");
    check_field_offset(lv, s15230c1f11, ABISELECT(88,72), "S15230C1.s15230c1f11");
    check_field_offset(lv, s15230c1f12, ABISELECT(104,84), "S15230C1.s15230c1f12");
    check_field_offset(lv, s15230c1f13, ABISELECT(112,88), "S15230C1.s15230c1f13");
    check_field_offset(lv, s15230c1f14, ABISELECT(136,100), "S15230C1.s15230c1f14");
    check_field_offset(lv, s15230c1f15, ABISELECT(144,104), "S15230C1.s15230c1f15");
    check_field_offset(lv, s15230c1f16, ABISELECT(152,108), "S15230C1.s15230c1f16");
    check_field_offset(lv, s15230c1f17, ABISELECT(160,112), "S15230C1.s15230c1f17");
    check_field_offset(lv, s15230c1f18, ABISELECT(168,116), "S15230C1.s15230c1f18");
    check_field_offset(lv, s15230c1f19, ABISELECT(176,120), "S15230C1.s15230c1f19");
    check_field_offset(lv, s15230c1f20, ABISELECT(240,152), "S15230C1.s15230c1f20");
    check_field_offset(lv, s15230c1f21, ABISELECT(244,156), "S15230C1.s15230c1f21");
  }
}
static Arrange_To_Call_Me vS15230C1(Test_S15230C1, "S15230C1", ABISELECT(248,160));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2314C4_nt  {
  char s2314c4f0;
  int s2314c4f1;
  virtual  ~S2314C4_nt(); // _ZN10S2314C4_ntD1Ev
  virtual void  v5(); // _ZN10S2314C4_nt2v5Ev
  S2314C4_nt(); // tgen
};
//SIG(-1 S2314C4_nt) C1{ vd v1 Fc Fi}


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

//skip512 S2314C4_nt

#else // __cplusplus

extern void _ZN10S2314C4_ntC1Ev();
extern void _ZN10S2314C4_ntD1Ev();
Name_Map name_map_S2314C4_nt[] = {
  NSPAIR(_ZN10S2314C4_ntC1Ev),
  NSPAIR(_ZN10S2314C4_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S2314C4_nt[];
extern void _ZN10S2314C4_ntD1Ev();
extern void _ZN10S2314C4_ntD0Ev();
extern void _ZN10S2314C4_nt2v5Ev();
static  VTBL_ENTRY vtc_S2314C4_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2314C4_nt[0]),
  (VTBL_ENTRY)&_ZN10S2314C4_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2314C4_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2314C4_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S2314C4_nt[];
VTBL_ENTRY *P__ZTI10S2314C4_nt = _ZTI10S2314C4_nt; 
extern  VTBL_ENTRY _ZTV10S2314C4_nt[];
Class_Descriptor cd_S2314C4_nt = {  "S2314C4_nt", // class name
  0,0,//no base classes
  &(vtc_S2314C4_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI10S2314C4_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S2314C4_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  S2314C3_nt  : S2314C4_nt {
  void *s2314c3f0;
  char s2314c3f1[2];
  virtual  ~S2314C3_nt(); // _ZN10S2314C3_ntD1Ev
  virtual void  v6(); // _ZN10S2314C3_nt2v6Ev
  S2314C3_nt(); // tgen
};
//SIG(-1 S2314C3_nt) C1{ BC2{ vd v2 Fc Fi} vd v1 Fp Fc[2]}


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

//skip512 S2314C3_nt

#else // __cplusplus

extern void _ZN10S2314C3_ntC1Ev();
extern void _ZN10S2314C3_ntD1Ev();
Name_Map name_map_S2314C3_nt[] = {
  NSPAIR(_ZN10S2314C3_ntC1Ev),
  NSPAIR(_ZN10S2314C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2314C4_nt;
extern VTBL_ENTRY _ZTI10S2314C4_nt[];
extern  VTBL_ENTRY _ZTV10S2314C4_nt[];
static Base_Class bases_S2314C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2314C4_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 _ZTI10S2314C3_nt[];
extern void _ZN10S2314C3_ntD1Ev();
extern void _ZN10S2314C3_ntD0Ev();
extern void _ZN10S2314C4_nt2v5Ev();
extern void _ZN10S2314C3_nt2v6Ev();
static  VTBL_ENTRY vtc_S2314C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2314C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S2314C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2314C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2314C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2314C3_nt2v6Ev,
};
extern VTBL_ENTRY _ZTI10S2314C3_nt[];
VTBL_ENTRY *P__ZTI10S2314C3_nt = _ZTI10S2314C3_nt; 
extern  VTBL_ENTRY _ZTV10S2314C3_nt[];
Class_Descriptor cd_S2314C3_nt = {  "S2314C3_nt", // class name
  bases_S2314C3_nt, 1,
  &(vtc_S2314C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI10S2314C3_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2314C3_nt),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S2314C2_nt  : S2314C3_nt {
  void *s2314c2f0[2];
  int s2314c2f1[3];
  char s2314c2f2[2];
  void *s2314c2f3;
  virtual  ~S2314C2_nt(); // _ZN10S2314C2_ntD1Ev
  virtual void  v7(); // _ZN10S2314C2_nt2v7Ev
  virtual void  v8(); // _ZN10S2314C2_nt2v8Ev
  virtual void  v9(); // _ZN10S2314C2_nt2v9Ev
  virtual void  v10(); // _ZN10S2314C2_nt3v10Ev
  S2314C2_nt(); // tgen
};
//SIG(-1 S2314C2_nt) C1{ BC2{ BC3{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v1 v2 v3 v4 Fp[2] Fi[3] Fc[2] Fp}


 S2314C2_nt ::~S2314C2_nt(){ note_dtor("S2314C2_nt", this);}
void  S2314C2_nt ::v7(){vfunc_called(this, "_ZN10S2314C2_nt2v7Ev");}
void  S2314C2_nt ::v8(){vfunc_called(this, "_ZN10S2314C2_nt2v8Ev");}
void  S2314C2_nt ::v9(){vfunc_called(this, "_ZN10S2314C2_nt2v9Ev");}
void  S2314C2_nt ::v10(){vfunc_called(this, "_ZN10S2314C2_nt3v10Ev");}
S2314C2_nt ::S2314C2_nt(){ note_ctor("S2314C2_nt", this);} // tgen

//skip512 S2314C2_nt

#else // __cplusplus

extern void _ZN10S2314C2_ntC1Ev();
extern void _ZN10S2314C2_ntD1Ev();
Name_Map name_map_S2314C2_nt[] = {
  NSPAIR(_ZN10S2314C2_ntC1Ev),
  NSPAIR(_ZN10S2314C2_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2314C4_nt;
extern VTBL_ENTRY _ZTI10S2314C4_nt[];
extern  VTBL_ENTRY _ZTV10S2314C4_nt[];
extern Class_Descriptor cd_S2314C3_nt;
extern VTBL_ENTRY _ZTI10S2314C3_nt[];
extern  VTBL_ENTRY _ZTV10S2314C3_nt[];
static Base_Class bases_S2314C2_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2314C4_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_S2314C3_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 _ZTI10S2314C2_nt[];
extern void _ZN10S2314C2_ntD1Ev();
extern void _ZN10S2314C2_ntD0Ev();
extern void _ZN10S2314C4_nt2v5Ev();
extern void _ZN10S2314C3_nt2v6Ev();
extern void _ZN10S2314C2_nt2v7Ev();
extern void _ZN10S2314C2_nt2v8Ev();
extern void _ZN10S2314C2_nt2v9Ev();
extern void _ZN10S2314C2_nt3v10Ev();
static  VTBL_ENTRY vtc_S2314C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S2314C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S2314C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S2314C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S2314C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2314C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2314C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2314C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2314C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2314C2_nt3v10Ev,
};
extern VTBL_ENTRY _ZTI10S2314C2_nt[];
VTBL_ENTRY *P__ZTI10S2314C2_nt = _ZTI10S2314C2_nt; 
extern  VTBL_ENTRY _ZTV10S2314C2_nt[];
Class_Descriptor cd_S2314C2_nt = {  "S2314C2_nt", // class name
  bases_S2314C2_nt, 2,
  &(vtc_S2314C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,48), // object size
  NSPAIRA(_ZTI10S2314C2_nt),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV10S2314C2_nt),10, //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  S2314C1  : S2314C2_nt {
  int s2314c1f0[6];
  virtual  ~S2314C1(); // _ZN7S2314C1D1Ev
  virtual void  v1(); // _ZN7S2314C12v1Ev
  virtual void  v2(); // _ZN7S2314C12v2Ev
  virtual void  v3(); // _ZN7S2314C12v3Ev
  virtual void  v4(); // _ZN7S2314C12v4Ev
  S2314C1(); // tgen
};
//SIG(1 S2314C1) C1{ BC2{ BC3{ BC4{ vd v5 Fc Fi} vd v6 Fp Fc[2]} vd v7 v8 v9 v10 Fp[2] Fi[3] Fc[2] Fp} vd v1 v2 v3 v4 Fi[6]}


 S2314C1 ::~S2314C1(){ note_dtor("S2314C1", this);}
void  S2314C1 ::v1(){vfunc_called(this, "_ZN7S2314C12v1Ev");}
void  S2314C1 ::v2(){vfunc_called(this, "_ZN7S2314C12v2Ev");}
void  S2314C1 ::v3(){vfunc_called(this, "_ZN7S2314C12v3Ev");}
void  S2314C1 ::v4(){vfunc_called(this, "_ZN7S2314C12v4Ev");}
S2314C1 ::S2314C1(){ note_ctor("S2314C1", this);} // tgen

static void Test_S2314C1()
{
  extern Class_Descriptor cd_S2314C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,19)];
    init_test(&cd_S2314C1, buf);
    S2314C1 *dp, &lv = *(dp=new (buf) S2314C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,72), "sizeof(S2314C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S2314C1)");
    check_base_class_offset(lv, (S2314C4_nt*)(S2314C3_nt*)(S2314C2_nt*), 0, "S2314C1");
    check_base_class_offset(lv, (S2314C3_nt*)(S2314C2_nt*), 0, "S2314C1");
    check_base_class_offset(lv, (S2314C2_nt*), 0, "S2314C1");
    check_field_offset(lv, s2314c1f0, ABISELECT(72,48), "S2314C1.s2314c1f0");
    test_class_info(&lv, &cd_S2314C1);
    dp->~S2314C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS2314C1(Test_S2314C1, "S2314C1", ABISELECT(96,72));

#else // __cplusplus

extern void _ZN7S2314C1C1Ev();
extern void _ZN7S2314C1D1Ev();
Name_Map name_map_S2314C1[] = {
  NSPAIR(_ZN7S2314C1C1Ev),
  NSPAIR(_ZN7S2314C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2314C4_nt;
extern VTBL_ENTRY _ZTI10S2314C4_nt[];
extern  VTBL_ENTRY _ZTV10S2314C4_nt[];
extern Class_Descriptor cd_S2314C3_nt;
extern VTBL_ENTRY _ZTI10S2314C3_nt[];
extern  VTBL_ENTRY _ZTV10S2314C3_nt[];
extern Class_Descriptor cd_S2314C2_nt;
extern VTBL_ENTRY _ZTI10S2314C2_nt[];
extern  VTBL_ENTRY _ZTV10S2314C2_nt[];
static Base_Class bases_S2314C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2314C4_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_S2314C3_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_S2314C2_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 _ZTI7S2314C1[];
extern void _ZN7S2314C1D1Ev();
extern void _ZN7S2314C1D0Ev();
extern void _ZN10S2314C4_nt2v5Ev();
extern void _ZN10S2314C3_nt2v6Ev();
extern void _ZN10S2314C2_nt2v7Ev();
extern void _ZN10S2314C2_nt2v8Ev();
extern void _ZN10S2314C2_nt2v9Ev();
extern void _ZN10S2314C2_nt3v10Ev();
extern void _ZN7S2314C12v1Ev();
extern void _ZN7S2314C12v2Ev();
extern void _ZN7S2314C12v3Ev();
extern void _ZN7S2314C12v4Ev();
static  VTBL_ENTRY vtc_S2314C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S2314C1[0]),
  (VTBL_ENTRY)&_ZN7S2314C1D1Ev,
  (VTBL_ENTRY)&_ZN7S2314C1D0Ev,
  (VTBL_ENTRY)&_ZN10S2314C4_nt2v5Ev,
  (VTBL_ENTRY)&_ZN10S2314C3_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S2314C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S2314C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S2314C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S2314C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN7S2314C12v1Ev,
  (VTBL_ENTRY)&_ZN7S2314C12v2Ev,
  (VTBL_ENTRY)&_ZN7S2314C12v3Ev,
  (VTBL_ENTRY)&_ZN7S2314C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S2314C1[];
extern  VTBL_ENTRY _ZTV7S2314C1[];
Class_Descriptor cd_S2314C1 = {  "S2314C1", // class name
  bases_S2314C1, 3,
  &(vtc_S2314C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,72), // object size
  NSPAIRA(_ZTI7S2314C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S2314C1),14, //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  S8119C2_nt  {
  int s8119c2f0;
  void  mf8119c2(); // _ZN10S8119C2_nt8mf8119c2Ev
  virtual  ~S8119C2_nt(); // _ZN10S8119C2_ntD1Ev
  S8119C2_nt(); // tgen
};
//SIG(-1 S8119C2_nt) C1{ vd m Fi}


void  S8119C2_nt ::mf8119c2(){}
 S8119C2_nt ::~S8119C2_nt(){ note_dtor("S8119C2_nt", this);}
S8119C2_nt ::S8119C2_nt(){ note_ctor("S8119C2_nt", this);} // tgen

//skip512 S8119C2_nt

#else // __cplusplus

extern void _ZN10S8119C2_ntC1Ev();
extern void _ZN10S8119C2_ntD1Ev();
Name_Map name_map_S8119C2_nt[] = {
  NSPAIR(_ZN10S8119C2_ntC1Ev),
  NSPAIR(_ZN10S8119C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8119C2_nt[];
extern void _ZN10S8119C2_ntD1Ev();
extern void _ZN10S8119C2_ntD0Ev();
static  VTBL_ENTRY vtc_S8119C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8119C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8119C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8119C2_ntD0Ev,
};
extern VTBL_ENTRY _ZTI10S8119C2_nt[];
VTBL_ENTRY *P__ZTI10S8119C2_nt = _ZTI10S8119C2_nt; 
extern  VTBL_ENTRY _ZTV10S8119C2_nt[];
Class_Descriptor cd_S8119C2_nt = {  "S8119C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8119C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S8119C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8119C2_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  S8119C5_nt  {
  ::S13556C4_nt s8119c5f0;
  void  mf8119c5(); // _ZN10S8119C5_nt8mf8119c5Ev
};
//SIG(-1 S8119C5_nt) C1{ m FC2{ Fl[4]}}


void  S8119C5_nt ::mf8119c5(){}

//skip512 S8119C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8119C8_nt  {
  int s8119c8f0[4];
};
//SIG(-1 S8119C8_nt) C1{ Fi[4]}



//skip512 S8119C8_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8119C7_nt  {
  void *s8119c7f0;
  ::S8119C8_nt s8119c7f1;
  void  mf8119c7(); // _ZN10S8119C7_nt8mf8119c7Ev
};
//SIG(-1 S8119C7_nt) C1{ m Fp FC2{ Fi[4]}}


void  S8119C7_nt ::mf8119c7(){}

//skip512 S8119C7_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8119C1  : S8119C2_nt {
  int s8119c1f0;
  char s8119c1f1;
  int s8119c1f2[2];
  ::S2264C37 s8119c1f3;
  ::S8119C5_nt s8119c1f4;
  ::S8119C7_nt s8119c1f5;
  int s8119c1f6;
  __tsi64 s8119c1f7;
  int s8119c1f8;
  virtual  ~S8119C1(); // _ZN7S8119C1D1Ev
  S8119C1(); // tgen
};
//SIG(1 S8119C1) C1{ BC2{ vd m Fi} vd Fi Fc Fi[2] FC3{ m Fp Fi[2] FC4{ m}} FC5{ m FC6{ Fl[4]}} FC7{ m Fp FC8{ Fi[4]}} Fi FL Fi}


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

static void Test_S8119C1()
{
  extern Class_Descriptor cd_S8119C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,24)];
    init_test(&cd_S8119C1, buf);
    S8119C1 *dp, &lv = *(dp=new (buf) S8119C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,92), "sizeof(S8119C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8119C1)");
    check_base_class_offset(lv, (S8119C2_nt*), 0, "S8119C1");
    check_field_offset(lv, s8119c1f0, ABISELECT(12,8), "S8119C1.s8119c1f0");
    check_field_offset(lv, s8119c1f1, ABISELECT(16,12), "S8119C1.s8119c1f1");
    check_field_offset(lv, s8119c1f2, ABISELECT(20,16), "S8119C1.s8119c1f2");
    check_field_offset(lv, s8119c1f3, ABISELECT(32,24), "S8119C1.s8119c1f3");
    check_field_offset(lv, s8119c1f4, ABISELECT(56,40), "S8119C1.s8119c1f4");
    check_field_offset(lv, s8119c1f5, ABISELECT(88,56), "S8119C1.s8119c1f5");
    check_field_offset(lv, s8119c1f6, ABISELECT(112,76), "S8119C1.s8119c1f6");
    check_field_offset(lv, s8119c1f7, ABISELECT(120,80), "S8119C1.s8119c1f7");
    check_field_offset(lv, s8119c1f8, ABISELECT(128,88), "S8119C1.s8119c1f8");
    test_class_info(&lv, &cd_S8119C1);
    dp->~S8119C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8119C1(Test_S8119C1, "S8119C1", ABISELECT(136,92));

#else // __cplusplus

extern void _ZN7S8119C1C1Ev();
extern void _ZN7S8119C1D1Ev();
Name_Map name_map_S8119C1[] = {
  NSPAIR(_ZN7S8119C1C1Ev),
  NSPAIR(_ZN7S8119C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8119C2_nt;
extern VTBL_ENTRY _ZTI10S8119C2_nt[];
extern  VTBL_ENTRY _ZTV10S8119C2_nt[];
static Base_Class bases_S8119C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8119C2_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 _ZTI7S8119C1[];
extern void _ZN7S8119C1D1Ev();
extern void _ZN7S8119C1D0Ev();
static  VTBL_ENTRY vtc_S8119C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8119C1[0]),
  (VTBL_ENTRY)&_ZN7S8119C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8119C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8119C1[];
extern  VTBL_ENTRY _ZTV7S8119C1[];
Class_Descriptor cd_S8119C1 = {  "S8119C1", // class name
  bases_S8119C1, 1,
  &(vtc_S8119C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,92), // object size
  NSPAIRA(_ZTI7S8119C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8119C1),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  S8560C2_nt  {
  virtual  ~S8560C2_nt(); // _ZN10S8560C2_ntD1Ev
  virtual void  v11(); // _ZN10S8560C2_nt3v11Ev
  virtual void  v12(); // _ZN10S8560C2_nt3v12Ev
  virtual void  v13(); // _ZN10S8560C2_nt3v13Ev
  virtual void  v14(); // _ZN10S8560C2_nt3v14Ev
  virtual void  v15(); // _ZN10S8560C2_nt3v15Ev
  virtual void  v16(); // _ZN10S8560C2_nt3v16Ev
  virtual void  v17(); // _ZN10S8560C2_nt3v17Ev
  S8560C2_nt(); // tgen
};
//SIG(-1 S8560C2_nt) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S8560C2_nt ::~S8560C2_nt(){ note_dtor("S8560C2_nt", this);}
void  S8560C2_nt ::v11(){vfunc_called(this, "_ZN10S8560C2_nt3v11Ev");}
void  S8560C2_nt ::v12(){vfunc_called(this, "_ZN10S8560C2_nt3v12Ev");}
void  S8560C2_nt ::v13(){vfunc_called(this, "_ZN10S8560C2_nt3v13Ev");}
void  S8560C2_nt ::v14(){vfunc_called(this, "_ZN10S8560C2_nt3v14Ev");}
void  S8560C2_nt ::v15(){vfunc_called(this, "_ZN10S8560C2_nt3v15Ev");}
void  S8560C2_nt ::v16(){vfunc_called(this, "_ZN10S8560C2_nt3v16Ev");}
void  S8560C2_nt ::v17(){vfunc_called(this, "_ZN10S8560C2_nt3v17Ev");}
S8560C2_nt ::S8560C2_nt(){ note_ctor("S8560C2_nt", this);} // tgen

//skip512 S8560C2_nt

#else // __cplusplus

extern void _ZN10S8560C2_ntC1Ev();
extern void _ZN10S8560C2_ntD1Ev();
Name_Map name_map_S8560C2_nt[] = {
  NSPAIR(_ZN10S8560C2_ntC1Ev),
  NSPAIR(_ZN10S8560C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S8560C2_nt[];
extern void _ZN10S8560C2_ntD1Ev();
extern void _ZN10S8560C2_ntD0Ev();
extern void _ZN10S8560C2_nt3v11Ev();
extern void _ZN10S8560C2_nt3v12Ev();
extern void _ZN10S8560C2_nt3v13Ev();
extern void _ZN10S8560C2_nt3v14Ev();
extern void _ZN10S8560C2_nt3v15Ev();
extern void _ZN10S8560C2_nt3v16Ev();
extern void _ZN10S8560C2_nt3v17Ev();
static  VTBL_ENTRY vtc_S8560C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S8560C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S8560C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S8560C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S8560C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S8560C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S8560C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S8560C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S8560C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S8560C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S8560C2_nt3v17Ev,
};
extern VTBL_ENTRY _ZTI10S8560C2_nt[];
VTBL_ENTRY *P__ZTI10S8560C2_nt = _ZTI10S8560C2_nt; 
extern  VTBL_ENTRY _ZTV10S8560C2_nt[];
Class_Descriptor cd_S8560C2_nt = {  "S8560C2_nt", // class name
  0,0,//no base classes
  &(vtc_S8560C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S8560C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S8560C2_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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8560C1  : S8560C2_nt {
  ::S3351C29 s8560c1f0[50];
  virtual  ~S8560C1(); // _ZN7S8560C1D1Ev
  virtual void  v1(); // _ZN7S8560C12v1Ev
  virtual void  v2(); // _ZN7S8560C12v2Ev
  virtual void  v3(); // _ZN7S8560C12v3Ev
  virtual void  v4(); // _ZN7S8560C12v4Ev
  virtual void  v5(); // _ZN7S8560C12v5Ev
  virtual void  v6(); // _ZN7S8560C12v6Ev
  virtual void  v7(); // _ZN7S8560C12v7Ev
  virtual void  v8(); // _ZN7S8560C12v8Ev
  virtual void  v9(); // _ZN7S8560C12v9Ev
  virtual void  v10(); // _ZN7S8560C13v10Ev
  S8560C1(); // tgen
};
//SIG(1 S8560C1) C1{ BC2{ vd v11 v12 v13 v14 v15 v16 v17} vd v1 v2 v3 v4 v5 v6 v7 v8 v9 v10 FC3{ BC4{ m Fp Fi[2]}}[50]}


 S8560C1 ::~S8560C1(){ note_dtor("S8560C1", this);}
void  S8560C1 ::v1(){vfunc_called(this, "_ZN7S8560C12v1Ev");}
void  S8560C1 ::v2(){vfunc_called(this, "_ZN7S8560C12v2Ev");}
void  S8560C1 ::v3(){vfunc_called(this, "_ZN7S8560C12v3Ev");}
void  S8560C1 ::v4(){vfunc_called(this, "_ZN7S8560C12v4Ev");}
void  S8560C1 ::v5(){vfunc_called(this, "_ZN7S8560C12v5Ev");}
void  S8560C1 ::v6(){vfunc_called(this, "_ZN7S8560C12v6Ev");}
void  S8560C1 ::v7(){vfunc_called(this, "_ZN7S8560C12v7Ev");}
void  S8560C1 ::v8(){vfunc_called(this, "_ZN7S8560C12v8Ev");}
void  S8560C1 ::v9(){vfunc_called(this, "_ZN7S8560C12v9Ev");}
void  S8560C1 ::v10(){vfunc_called(this, "_ZN7S8560C13v10Ev");}
S8560C1 ::S8560C1(){ note_ctor("S8560C1", this);} // tgen

static void Test_S8560C1()
{
  extern Class_Descriptor cd_S8560C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(102,152)];
    init_test(&cd_S8560C1, buf);
    S8560C1 *dp, &lv = *(dp=new (buf) S8560C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(808,604), "sizeof(S8560C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8560C1)");
    check_base_class_offset(lv, (S8560C2_nt*), 0, "S8560C1");
    check_field_offset(lv, s8560c1f0, ABISELECT(8,4), "S8560C1.s8560c1f0");
    test_class_info(&lv, &cd_S8560C1);
    dp->~S8560C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8560C1(Test_S8560C1, "S8560C1", ABISELECT(808,604));

#else // __cplusplus

extern void _ZN7S8560C1C1Ev();
extern void _ZN7S8560C1D1Ev();
Name_Map name_map_S8560C1[] = {
  NSPAIR(_ZN7S8560C1C1Ev),
  NSPAIR(_ZN7S8560C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8560C2_nt;
extern VTBL_ENTRY _ZTI10S8560C2_nt[];
extern  VTBL_ENTRY _ZTV10S8560C2_nt[];
static Base_Class bases_S8560C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8560C2_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 _ZTI7S8560C1[];
extern void _ZN7S8560C1D1Ev();
extern void _ZN7S8560C1D0Ev();
extern void _ZN10S8560C2_nt3v11Ev();
extern void _ZN10S8560C2_nt3v12Ev();
extern void _ZN10S8560C2_nt3v13Ev();
extern void _ZN10S8560C2_nt3v14Ev();
extern void _ZN10S8560C2_nt3v15Ev();
extern void _ZN10S8560C2_nt3v16Ev();
extern void _ZN10S8560C2_nt3v17Ev();
extern void _ZN7S8560C12v1Ev();
extern void _ZN7S8560C12v2Ev();
extern void _ZN7S8560C12v3Ev();
extern void _ZN7S8560C12v4Ev();
extern void _ZN7S8560C12v5Ev();
extern void _ZN7S8560C12v6Ev();
extern void _ZN7S8560C12v7Ev();
extern void _ZN7S8560C12v8Ev();
extern void _ZN7S8560C12v9Ev();
extern void _ZN7S8560C13v10Ev();
static  VTBL_ENTRY vtc_S8560C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8560C1[0]),
  (VTBL_ENTRY)&_ZN7S8560C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8560C1D0Ev,
  (VTBL_ENTRY)&_ZN10S8560C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN10S8560C2_nt3v12Ev,
  (VTBL_ENTRY)&_ZN10S8560C2_nt3v13Ev,
  (VTBL_ENTRY)&_ZN10S8560C2_nt3v14Ev,
  (VTBL_ENTRY)&_ZN10S8560C2_nt3v15Ev,
  (VTBL_ENTRY)&_ZN10S8560C2_nt3v16Ev,
  (VTBL_ENTRY)&_ZN10S8560C2_nt3v17Ev,
  (VTBL_ENTRY)&_ZN7S8560C12v1Ev,
  (VTBL_ENTRY)&_ZN7S8560C12v2Ev,
  (VTBL_ENTRY)&_ZN7S8560C12v3Ev,
  (VTBL_ENTRY)&_ZN7S8560C12v4Ev,
  (VTBL_ENTRY)&_ZN7S8560C12v5Ev,
  (VTBL_ENTRY)&_ZN7S8560C12v6Ev,
  (VTBL_ENTRY)&_ZN7S8560C12v7Ev,
  (VTBL_ENTRY)&_ZN7S8560C12v8Ev,
  (VTBL_ENTRY)&_ZN7S8560C12v9Ev,
  (VTBL_ENTRY)&_ZN7S8560C13v10Ev,
};
extern VTBL_ENTRY _ZTI7S8560C1[];
extern  VTBL_ENTRY _ZTV7S8560C1[];
Class_Descriptor cd_S8560C1 = {  "S8560C1", // class name
  bases_S8560C1, 1,
  &(vtc_S8560C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(808,604), // object size
  NSPAIRA(_ZTI7S8560C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8560C1),21, //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  S16199C4_nt  {
  void *s16199c4f0;
  int s16199c4f1;
  ::S2264C38 s16199c4f2;
  void  mf16199c4(); // _ZN11S16199C4_nt9mf16199c4Ev
};
//SIG(-1 S16199C4_nt) C1{ m Fp Fi FC2{ m}}


void  S16199C4_nt ::mf16199c4(){}

//skip512 S16199C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S16199C1  {
  ::S2264C20_nt s16199c1f0;
  ::S2264C20_nt s16199c1f1;
  char s16199c1f2;
  int s16199c1f3;
  ::S2264C20_nt s16199c1f4;
  ::S2264C20_nt s16199c1f5;
  ::S2264C20_nt s16199c1f6;
  ::S16199C4_nt s16199c1f7;
  int s16199c1f8[3];
  ::S2264C20_nt s16199c1f9;
  int s16199c1f10[2];
  ::S2264C20_nt s16199c1f11;
  int s16199c1f12;
  ::S16199C4_nt s16199c1f13;
  char s16199c1f14;
  void  mf16199c1(); // _ZN8S16199C19mf16199c1Ev
};
//SIG(1 S16199C1) C1{ m FC2{ m Fp Fi FC3{ m}} FC2 Fc Fi FC2 FC2 FC2 FC4{ m Fp Fi FC5{ m}} Fi[3] FC2 Fi[2] FC2 Fi FC4 Fc}


void  S16199C1 ::mf16199c1(){}

static void Test_S16199C1()
{
  {
    init_simple_test("S16199C1");
    S16199C1 lv;
    check2(sizeof(lv), ABISELECT(192,144), "sizeof(S16199C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16199C1)");
    check_field_offset(lv, s16199c1f0, 0, "S16199C1.s16199c1f0");
    check_field_offset(lv, s16199c1f1, ABISELECT(16,12), "S16199C1.s16199c1f1");
    check_field_offset(lv, s16199c1f2, ABISELECT(32,24), "S16199C1.s16199c1f2");
    check_field_offset(lv, s16199c1f3, ABISELECT(36,28), "S16199C1.s16199c1f3");
    check_field_offset(lv, s16199c1f4, ABISELECT(40,32), "S16199C1.s16199c1f4");
    check_field_offset(lv, s16199c1f5, ABISELECT(56,44), "S16199C1.s16199c1f5");
    check_field_offset(lv, s16199c1f6, ABISELECT(72,56), "S16199C1.s16199c1f6");
    check_field_offset(lv, s16199c1f7, ABISELECT(88,68), "S16199C1.s16199c1f7");
    check_field_offset(lv, s16199c1f8, ABISELECT(104,80), "S16199C1.s16199c1f8");
    check_field_offset(lv, s16199c1f9, ABISELECT(120,92), "S16199C1.s16199c1f9");
    check_field_offset(lv, s16199c1f10, ABISELECT(136,104), "S16199C1.s16199c1f10");
    check_field_offset(lv, s16199c1f11, ABISELECT(144,112), "S16199C1.s16199c1f11");
    check_field_offset(lv, s16199c1f12, ABISELECT(160,124), "S16199C1.s16199c1f12");
    check_field_offset(lv, s16199c1f13, ABISELECT(168,128), "S16199C1.s16199c1f13");
    check_field_offset(lv, s16199c1f14, ABISELECT(184,140), "S16199C1.s16199c1f14");
  }
}
static Arrange_To_Call_Me vS16199C1(Test_S16199C1, "S16199C1", ABISELECT(192,144));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9323C2  {
  ::S16199C4_nt s9323c2f0;
  int s9323c2f1[2];
  char s9323c2f2;
  virtual  ~S9323C2(); // _ZN7S9323C2D1Ev
  virtual void  v3(); // _ZN7S9323C22v3Ev
  virtual void  v4(); // _ZN7S9323C22v4Ev
  virtual void  v5(); // _ZN7S9323C22v5Ev
  S9323C2(); // tgen
};
//SIG(-1 S9323C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9323C2 ::~S9323C2(){ note_dtor("S9323C2", this);}
void  S9323C2 ::v3(){vfunc_called(this, "_ZN7S9323C22v3Ev");}
void  S9323C2 ::v4(){vfunc_called(this, "_ZN7S9323C22v4Ev");}
void  S9323C2 ::v5(){vfunc_called(this, "_ZN7S9323C22v5Ev");}
S9323C2 ::S9323C2(){ note_ctor("S9323C2", this);} // tgen

static void Test_S9323C2()
{
  extern Class_Descriptor cd_S9323C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9323C2, buf);
    S9323C2 *dp, &lv = *(dp=new (buf) S9323C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9323C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9323C2)");
    check_field_offset(lv, s9323c2f0, ABISELECT(8,4), "S9323C2.s9323c2f0");
    check_field_offset(lv, s9323c2f1, ABISELECT(24,16), "S9323C2.s9323c2f1");
    check_field_offset(lv, s9323c2f2, ABISELECT(32,24), "S9323C2.s9323c2f2");
    test_class_info(&lv, &cd_S9323C2);
    dp->~S9323C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9323C2(Test_S9323C2, "S9323C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9323C2C1Ev();
extern void _ZN7S9323C2D1Ev();
Name_Map name_map_S9323C2[] = {
  NSPAIR(_ZN7S9323C2C1Ev),
  NSPAIR(_ZN7S9323C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9323C2[];
extern void _ZN7S9323C2D1Ev();
extern void _ZN7S9323C2D0Ev();
extern void _ZN7S9323C22v3Ev();
extern void _ZN7S9323C22v4Ev();
extern void _ZN7S9323C22v5Ev();
static  VTBL_ENTRY vtc_S9323C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9323C2[0]),
  (VTBL_ENTRY)&_ZN7S9323C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9323C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9323C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9323C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9323C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9323C2[];
extern  VTBL_ENTRY _ZTV7S9323C2[];
Class_Descriptor cd_S9323C2 = {  "S9323C2", // class name
  0,0,//no base classes
  &(vtc_S9323C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9323C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9323C2),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  S9323C1  : S9323C2 {
  int s9323c1f0;
  ::S4760C18_nt s9323c1f1;
  ::S8119C7_nt s9323c1f2;
  int s9323c1f3;
  virtual  ~S9323C1(); // _ZN7S9323C1D1Ev
  virtual void  v1(); // _ZN7S9323C12v1Ev
  virtual void  v2(); // _ZN7S9323C12v2Ev
  S9323C1(); // tgen
};
//SIG(1 S9323C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 Fi FC5{ m FL[4]} FC6{ m Fp FC7{ Fi[4]}} Fi}


 S9323C1 ::~S9323C1(){ note_dtor("S9323C1", this);}
void  S9323C1 ::v1(){vfunc_called(this, "_ZN7S9323C12v1Ev");}
void  S9323C1 ::v2(){vfunc_called(this, "_ZN7S9323C12v2Ev");}
S9323C1 ::S9323C1(){ note_ctor("S9323C1", this);} // tgen

static void Test_S9323C1()
{
  extern Class_Descriptor cd_S9323C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(14,23)];
    init_test(&cd_S9323C1, buf);
    S9323C1 *dp, &lv = *(dp=new (buf) S9323C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(104,88), "sizeof(S9323C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9323C1)");
    check_base_class_offset(lv, (S9323C2*), 0, "S9323C1");
    check_field_offset(lv, s9323c1f0, ABISELECT(36,28), "S9323C1.s9323c1f0");
    check_field_offset(lv, s9323c1f1, ABISELECT(40,32), "S9323C1.s9323c1f1");
    check_field_offset(lv, s9323c1f2, ABISELECT(72,64), "S9323C1.s9323c1f2");
    check_field_offset(lv, s9323c1f3, ABISELECT(96,84), "S9323C1.s9323c1f3");
    test_class_info(&lv, &cd_S9323C1);
    dp->~S9323C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9323C1(Test_S9323C1, "S9323C1", ABISELECT(104,88));

#else // __cplusplus

extern void _ZN7S9323C1C1Ev();
extern void _ZN7S9323C1D1Ev();
Name_Map name_map_S9323C1[] = {
  NSPAIR(_ZN7S9323C1C1Ev),
  NSPAIR(_ZN7S9323C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9323C2;
extern VTBL_ENTRY _ZTI7S9323C2[];
extern  VTBL_ENTRY _ZTV7S9323C2[];
static Base_Class bases_S9323C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9323C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S9323C1[];
extern void _ZN7S9323C1D1Ev();
extern void _ZN7S9323C1D0Ev();
extern void _ZN7S9323C22v3Ev();
extern void _ZN7S9323C22v4Ev();
extern void _ZN7S9323C22v5Ev();
extern void _ZN7S9323C12v1Ev();
extern void _ZN7S9323C12v2Ev();
static  VTBL_ENTRY vtc_S9323C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9323C1[0]),
  (VTBL_ENTRY)&_ZN7S9323C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9323C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9323C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9323C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9323C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9323C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9323C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9323C1[];
extern  VTBL_ENTRY _ZTV7S9323C1[];
Class_Descriptor cd_S9323C1 = {  "S9323C1", // class name
  bases_S9323C1, 1,
  &(vtc_S9323C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(104,88), // object size
  NSPAIRA(_ZTI7S9323C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9323C1),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  S21596C5  {
  char s21596c5f0;
  int s21596c5f1;
  ::S2264C25 s21596c5f2;
  void *s21596c5f3[2];
  void  mf21596c5(); // _ZN8S21596C59mf21596c5Ev
  virtual  ~S21596C5(); // _ZN8S21596C5D1Ev
  S21596C5(); // tgen
};
//SIG(1 S21596C5) C1{ vd m Fc Fi FC2{ BC3{ m Fp Fi FC4{ m} FC5{ m}}} Fp[2]}


void  S21596C5 ::mf21596c5(){}
 S21596C5 ::~S21596C5(){ note_dtor("S21596C5", this);}
S21596C5 ::S21596C5(){ note_ctor("S21596C5", this);} // tgen

static void Test_S21596C5()
{
  extern Class_Descriptor cd_S21596C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S21596C5, buf);
    S21596C5 *dp, &lv = *(dp=new (buf) S21596C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S21596C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21596C5)");
    check_field_offset(lv, s21596c5f0, ABISELECT(8,4), "S21596C5.s21596c5f0");
    check_field_offset(lv, s21596c5f1, ABISELECT(12,8), "S21596C5.s21596c5f1");
    check_field_offset(lv, s21596c5f2, ABISELECT(16,12), "S21596C5.s21596c5f2");
    check_field_offset(lv, s21596c5f3, ABISELECT(32,24), "S21596C5.s21596c5f3");
    test_class_info(&lv, &cd_S21596C5);
    dp->~S21596C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21596C5(Test_S21596C5, "S21596C5", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN8S21596C5C1Ev();
extern void _ZN8S21596C5D1Ev();
Name_Map name_map_S21596C5[] = {
  NSPAIR(_ZN8S21596C5C1Ev),
  NSPAIR(_ZN8S21596C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21596C5[];
extern void _ZN8S21596C5D1Ev();
extern void _ZN8S21596C5D0Ev();
static  VTBL_ENTRY vtc_S21596C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21596C5[0]),
  (VTBL_ENTRY)&_ZN8S21596C5D1Ev,
  (VTBL_ENTRY)&_ZN8S21596C5D0Ev,
};
extern VTBL_ENTRY _ZTI8S21596C5[];
extern  VTBL_ENTRY _ZTV8S21596C5[];
Class_Descriptor cd_S21596C5 = {  "S21596C5", // class name
  0,0,//no base classes
  &(vtc_S21596C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI8S21596C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21596C5),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  S21596C1  {
  int s21596c1f0;
  ::S2264C26 s21596c1f1;
  ::S21596C5 s21596c1f2[11];
  void  mf21596c1(); // _ZN8S21596C19mf21596c1Ev
  virtual  ~S21596C1(); // _ZN8S21596C1D1Ev
  S21596C1(); // tgen
};
//SIG(1 S21596C1) C1{ vd m Fi FC2{ m Fp Fi FC3{ m} FC4{ m}} FC5{ vd m Fc Fi FC6{ BC2} Fp[2]}[11]}


void  S21596C1 ::mf21596c1(){}
 S21596C1 ::~S21596C1(){ note_dtor("S21596C1", this);}
S21596C1 ::S21596C1(){ note_ctor("S21596C1", this);} // tgen

static void Test_S21596C1()
{
  extern Class_Descriptor cd_S21596C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(71,94)];
    init_test(&cd_S21596C1, buf);
    S21596C1 *dp, &lv = *(dp=new (buf) S21596C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(560,372), "sizeof(S21596C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21596C1)");
    check_field_offset(lv, s21596c1f0, ABISELECT(8,4), "S21596C1.s21596c1f0");
    check_field_offset(lv, s21596c1f1, ABISELECT(16,8), "S21596C1.s21596c1f1");
    check_field_offset(lv, s21596c1f2, ABISELECT(32,20), "S21596C1.s21596c1f2");
    test_class_info(&lv, &cd_S21596C1);
    dp->~S21596C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21596C1(Test_S21596C1, "S21596C1", ABISELECT(560,372));

#else // __cplusplus

extern void _ZN8S21596C1C1Ev();
extern void _ZN8S21596C1D1Ev();
Name_Map name_map_S21596C1[] = {
  NSPAIR(_ZN8S21596C1C1Ev),
  NSPAIR(_ZN8S21596C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21596C1[];
extern void _ZN8S21596C1D1Ev();
extern void _ZN8S21596C1D0Ev();
static  VTBL_ENTRY vtc_S21596C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21596C1[0]),
  (VTBL_ENTRY)&_ZN8S21596C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21596C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21596C1[];
extern  VTBL_ENTRY _ZTV8S21596C1[];
Class_Descriptor cd_S21596C1 = {  "S21596C1", // class name
  0,0,//no base classes
  &(vtc_S21596C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(560,372), // object size
  NSPAIRA(_ZTI8S21596C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21596C1),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  S7072C2_nt  {
  virtual  ~S7072C2_nt(); // _ZN10S7072C2_ntD1Ev
  virtual void  v6(); // _ZN10S7072C2_nt2v6Ev
  virtual void  v7(); // _ZN10S7072C2_nt2v7Ev
  virtual void  v8(); // _ZN10S7072C2_nt2v8Ev
  virtual void  v9(); // _ZN10S7072C2_nt2v9Ev
  virtual void  v10(); // _ZN10S7072C2_nt3v10Ev
  virtual void  v11(); // _ZN10S7072C2_nt3v11Ev
  S7072C2_nt(); // tgen
};
//SIG(-1 S7072C2_nt) C1{ vd v1 v2 v3 v4 v5 v6}


 S7072C2_nt ::~S7072C2_nt(){ note_dtor("S7072C2_nt", this);}
void  S7072C2_nt ::v6(){vfunc_called(this, "_ZN10S7072C2_nt2v6Ev");}
void  S7072C2_nt ::v7(){vfunc_called(this, "_ZN10S7072C2_nt2v7Ev");}
void  S7072C2_nt ::v8(){vfunc_called(this, "_ZN10S7072C2_nt2v8Ev");}
void  S7072C2_nt ::v9(){vfunc_called(this, "_ZN10S7072C2_nt2v9Ev");}
void  S7072C2_nt ::v10(){vfunc_called(this, "_ZN10S7072C2_nt3v10Ev");}
void  S7072C2_nt ::v11(){vfunc_called(this, "_ZN10S7072C2_nt3v11Ev");}
S7072C2_nt ::S7072C2_nt(){ note_ctor("S7072C2_nt", this);} // tgen

//skip512 S7072C2_nt

#else // __cplusplus

extern void _ZN10S7072C2_ntC1Ev();
extern void _ZN10S7072C2_ntD1Ev();
Name_Map name_map_S7072C2_nt[] = {
  NSPAIR(_ZN10S7072C2_ntC1Ev),
  NSPAIR(_ZN10S7072C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7072C2_nt[];
extern void _ZN10S7072C2_ntD1Ev();
extern void _ZN10S7072C2_ntD0Ev();
extern void _ZN10S7072C2_nt2v6Ev();
extern void _ZN10S7072C2_nt2v7Ev();
extern void _ZN10S7072C2_nt2v8Ev();
extern void _ZN10S7072C2_nt2v9Ev();
extern void _ZN10S7072C2_nt3v10Ev();
extern void _ZN10S7072C2_nt3v11Ev();
static  VTBL_ENTRY vtc_S7072C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7072C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7072C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S7072C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S7072C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7072C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7072C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7072C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7072C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7072C2_nt3v11Ev,
};
extern VTBL_ENTRY _ZTI10S7072C2_nt[];
VTBL_ENTRY *P__ZTI10S7072C2_nt = _ZTI10S7072C2_nt; 
extern  VTBL_ENTRY _ZTV10S7072C2_nt[];
Class_Descriptor cd_S7072C2_nt = {  "S7072C2_nt", // class name
  0,0,//no base classes
  &(vtc_S7072C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7072C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7072C2_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  S7072C1  : S7072C2_nt {
  ::S4760C18_nt s7072c1f0;
  ::S2264C26 s7072c1f1;
  char s7072c1f2[2];
  virtual  ~S7072C1(); // _ZN7S7072C1D1Ev
  virtual void  v1(); // _ZN7S7072C12v1Ev
  virtual void  v2(); // _ZN7S7072C12v2Ev
  virtual void  v3(); // _ZN7S7072C12v3Ev
  virtual void  v4(); // _ZN7S7072C12v4Ev
  virtual void  v5(); // _ZN7S7072C12v5Ev
  S7072C1(); // tgen
};
//SIG(1 S7072C1) C1{ BC2{ vd v6 v7 v8 v9 v10 v11} vd v1 v2 v3 v4 v5 FC3{ m FL[4]} FC4{ m Fp Fi FC5{ m} FC6{ m}} Fc[2]}


 S7072C1 ::~S7072C1(){ note_dtor("S7072C1", this);}
void  S7072C1 ::v1(){vfunc_called(this, "_ZN7S7072C12v1Ev");}
void  S7072C1 ::v2(){vfunc_called(this, "_ZN7S7072C12v2Ev");}
void  S7072C1 ::v3(){vfunc_called(this, "_ZN7S7072C12v3Ev");}
void  S7072C1 ::v4(){vfunc_called(this, "_ZN7S7072C12v4Ev");}
void  S7072C1 ::v5(){vfunc_called(this, "_ZN7S7072C12v5Ev");}
S7072C1 ::S7072C1(){ note_ctor("S7072C1", this);} // tgen

static void Test_S7072C1()
{
  extern Class_Descriptor cd_S7072C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(9,14)];
    init_test(&cd_S7072C1, buf);
    S7072C1 *dp, &lv = *(dp=new (buf) S7072C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,52), "sizeof(S7072C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7072C1)");
    check_base_class_offset(lv, (S7072C2_nt*), 0, "S7072C1");
    check_field_offset(lv, s7072c1f0, ABISELECT(8,4), "S7072C1.s7072c1f0");
    check_field_offset(lv, s7072c1f1, ABISELECT(40,36), "S7072C1.s7072c1f1");
    check_field_offset(lv, s7072c1f2, ABISELECT(56,48), "S7072C1.s7072c1f2");
    test_class_info(&lv, &cd_S7072C1);
    dp->~S7072C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7072C1(Test_S7072C1, "S7072C1", ABISELECT(64,52));

#else // __cplusplus

extern void _ZN7S7072C1C1Ev();
extern void _ZN7S7072C1D1Ev();
Name_Map name_map_S7072C1[] = {
  NSPAIR(_ZN7S7072C1C1Ev),
  NSPAIR(_ZN7S7072C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7072C2_nt;
extern VTBL_ENTRY _ZTI10S7072C2_nt[];
extern  VTBL_ENTRY _ZTV10S7072C2_nt[];
static Base_Class bases_S7072C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7072C2_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 _ZTI7S7072C1[];
extern void _ZN7S7072C1D1Ev();
extern void _ZN7S7072C1D0Ev();
extern void _ZN10S7072C2_nt2v6Ev();
extern void _ZN10S7072C2_nt2v7Ev();
extern void _ZN10S7072C2_nt2v8Ev();
extern void _ZN10S7072C2_nt2v9Ev();
extern void _ZN10S7072C2_nt3v10Ev();
extern void _ZN10S7072C2_nt3v11Ev();
extern void _ZN7S7072C12v1Ev();
extern void _ZN7S7072C12v2Ev();
extern void _ZN7S7072C12v3Ev();
extern void _ZN7S7072C12v4Ev();
extern void _ZN7S7072C12v5Ev();
static  VTBL_ENTRY vtc_S7072C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7072C1[0]),
  (VTBL_ENTRY)&_ZN7S7072C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7072C1D0Ev,
  (VTBL_ENTRY)&_ZN10S7072C2_nt2v6Ev,
  (VTBL_ENTRY)&_ZN10S7072C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7072C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7072C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7072C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN10S7072C2_nt3v11Ev,
  (VTBL_ENTRY)&_ZN7S7072C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7072C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7072C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7072C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7072C12v5Ev,
};
extern VTBL_ENTRY _ZTI7S7072C1[];
extern  VTBL_ENTRY _ZTV7S7072C1[];
Class_Descriptor cd_S7072C1 = {  "S7072C1", // class name
  bases_S7072C1, 1,
  &(vtc_S7072C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,52), // object size
  NSPAIRA(_ZTI7S7072C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7072C1),15, //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  S21426C1  {
  ::S3351C4_nt s21426c1f0;
  ::S2264C25 s21426c1f1;
  ::S2264C26 s21426c1f2;
  ::S4760C18_nt s21426c1f3;
  void  mf21426c1(); // _ZN8S21426C19mf21426c1Ev
  virtual  ~S21426C1(); // _ZN8S21426C1D1Ev
  S21426C1(); // tgen
};
//SIG(1 S21426C1) C1{ vd m FC2{ m Fi[2]} FC3{ BC4{ m Fp Fi FC5{ m} FC6{ m}}} FC4 FC7{ m FL[4]}}


void  S21426C1 ::mf21426c1(){}
 S21426C1 ::~S21426C1(){ note_dtor("S21426C1", this);}
S21426C1 ::S21426C1(){ note_ctor("S21426C1", this);} // tgen

static void Test_S21426C1()
{
  extern Class_Descriptor cd_S21426C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,18)];
    init_test(&cd_S21426C1, buf);
    S21426C1 *dp, &lv = *(dp=new (buf) S21426C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,68), "sizeof(S21426C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21426C1)");
    check_field_offset(lv, s21426c1f0, ABISELECT(8,4), "S21426C1.s21426c1f0");
    check_field_offset(lv, s21426c1f1, ABISELECT(16,12), "S21426C1.s21426c1f1");
    check_field_offset(lv, s21426c1f2, ABISELECT(32,24), "S21426C1.s21426c1f2");
    check_field_offset(lv, s21426c1f3, ABISELECT(48,36), "S21426C1.s21426c1f3");
    test_class_info(&lv, &cd_S21426C1);
    dp->~S21426C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21426C1(Test_S21426C1, "S21426C1", ABISELECT(80,68));

#else // __cplusplus

extern void _ZN8S21426C1C1Ev();
extern void _ZN8S21426C1D1Ev();
Name_Map name_map_S21426C1[] = {
  NSPAIR(_ZN8S21426C1C1Ev),
  NSPAIR(_ZN8S21426C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21426C1[];
extern void _ZN8S21426C1D1Ev();
extern void _ZN8S21426C1D0Ev();
static  VTBL_ENTRY vtc_S21426C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21426C1[0]),
  (VTBL_ENTRY)&_ZN8S21426C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21426C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21426C1[];
extern  VTBL_ENTRY _ZTV8S21426C1[];
Class_Descriptor cd_S21426C1 = {  "S21426C1", // class name
  0,0,//no base classes
  &(vtc_S21426C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,68), // object size
  NSPAIRA(_ZTI8S21426C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21426C1),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  S10674C1  {
  char s10674c1f0[2];
  void *s10674c1f1;
  int s10674c1f2[2];
  void *s10674c1f3[2];
  int s10674c1f4;
  void *s10674c1f5[2];
  int s10674c1f6[2];
  __tsi64 s10674c1f7[18];
  ::S5635C32 s10674c1f8;
  ::S5635C32 s10674c1f9;
  int s10674c1f10;
  __tsi64 s10674c1f11;
  void *s10674c1f12[13];
  int s10674c1f13;
  void *s10674c1f14[8];
  int s10674c1f15[5];
};
//SIG(1 S10674C1) C1{ Fc[2] Fp Fi[2] Fp[2] Fi Fp[2] Fi[2] FL[18] FC2{ m Fp} FC2 Fi FL Fp[13] Fi Fp[8] Fi[5]}



static void Test_S10674C1()
{
  {
    init_simple_test("S10674C1");
    S10674C1 lv;
    check2(sizeof(lv), ABISELECT(448,316), "sizeof(S10674C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10674C1)");
    check_field_offset(lv, s10674c1f0, 0, "S10674C1.s10674c1f0");
    check_field_offset(lv, s10674c1f1, ABISELECT(8,4), "S10674C1.s10674c1f1");
    check_field_offset(lv, s10674c1f2, ABISELECT(16,8), "S10674C1.s10674c1f2");
    check_field_offset(lv, s10674c1f3, ABISELECT(24,16), "S10674C1.s10674c1f3");
    check_field_offset(lv, s10674c1f4, ABISELECT(40,24), "S10674C1.s10674c1f4");
    check_field_offset(lv, s10674c1f5, ABISELECT(48,28), "S10674C1.s10674c1f5");
    check_field_offset(lv, s10674c1f6, ABISELECT(64,36), "S10674C1.s10674c1f6");
    check_field_offset(lv, s10674c1f7, ABISELECT(72,44), "S10674C1.s10674c1f7");
    check_field_offset(lv, s10674c1f8, ABISELECT(216,188), "S10674C1.s10674c1f8");
    check_field_offset(lv, s10674c1f9, ABISELECT(224,192), "S10674C1.s10674c1f9");
    check_field_offset(lv, s10674c1f10, ABISELECT(232,196), "S10674C1.s10674c1f10");
    check_field_offset(lv, s10674c1f11, ABISELECT(240,200), "S10674C1.s10674c1f11");
    check_field_offset(lv, s10674c1f12, ABISELECT(248,208), "S10674C1.s10674c1f12");
    check_field_offset(lv, s10674c1f13, ABISELECT(352,260), "S10674C1.s10674c1f13");
    check_field_offset(lv, s10674c1f14, ABISELECT(360,264), "S10674C1.s10674c1f14");
    check_field_offset(lv, s10674c1f15, ABISELECT(424,296), "S10674C1.s10674c1f15");
  }
}
static Arrange_To_Call_Me vS10674C1(Test_S10674C1, "S10674C1", ABISELECT(448,316));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7112C2_nt  {
  virtual void  v7(); // _ZN10S7112C2_nt2v7Ev
  virtual void  v8(); // _ZN10S7112C2_nt2v8Ev
  virtual void  v9(); // _ZN10S7112C2_nt2v9Ev
  virtual void  v10(); // _ZN10S7112C2_nt3v10Ev
  ~S7112C2_nt(); // tgen
  S7112C2_nt(); // tgen
};
//SIG(-1 S7112C2_nt) C1{ v1 v2 v3 v4}


void  S7112C2_nt ::v7(){vfunc_called(this, "_ZN10S7112C2_nt2v7Ev");}
void  S7112C2_nt ::v8(){vfunc_called(this, "_ZN10S7112C2_nt2v8Ev");}
void  S7112C2_nt ::v9(){vfunc_called(this, "_ZN10S7112C2_nt2v9Ev");}
void  S7112C2_nt ::v10(){vfunc_called(this, "_ZN10S7112C2_nt3v10Ev");}
S7112C2_nt ::~S7112C2_nt(){ note_dtor("S7112C2_nt", this);} // tgen
S7112C2_nt ::S7112C2_nt(){ note_ctor("S7112C2_nt", this);} // tgen

//skip512 S7112C2_nt

#else // __cplusplus

extern void _ZN10S7112C2_ntC1Ev();
extern void _ZN10S7112C2_ntD1Ev();
Name_Map name_map_S7112C2_nt[] = {
  NSPAIR(_ZN10S7112C2_ntC1Ev),
  NSPAIR(_ZN10S7112C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7112C2_nt[];
extern void _ZN10S7112C2_nt2v7Ev();
extern void _ZN10S7112C2_nt2v8Ev();
extern void _ZN10S7112C2_nt2v9Ev();
extern void _ZN10S7112C2_nt3v10Ev();
static  VTBL_ENTRY vtc_S7112C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7112C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S7112C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7112C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7112C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7112C2_nt3v10Ev,
};
extern VTBL_ENTRY _ZTI10S7112C2_nt[];
VTBL_ENTRY *P__ZTI10S7112C2_nt = _ZTI10S7112C2_nt; 
extern  VTBL_ENTRY _ZTV10S7112C2_nt[];
Class_Descriptor cd_S7112C2_nt = {  "S7112C2_nt", // class name
  0,0,//no base classes
  &(vtc_S7112C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7112C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7112C2_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  S7112C3_nt  {
  virtual void  v11(); // _ZN10S7112C3_nt3v11Ev
  ~S7112C3_nt(); // tgen
  S7112C3_nt(); // tgen
};
//SIG(-1 S7112C3_nt) C1{ v1}


void  S7112C3_nt ::v11(){vfunc_called(this, "_ZN10S7112C3_nt3v11Ev");}
S7112C3_nt ::~S7112C3_nt(){ note_dtor("S7112C3_nt", this);} // tgen
S7112C3_nt ::S7112C3_nt(){ note_ctor("S7112C3_nt", this);} // tgen

//skip512 S7112C3_nt

#else // __cplusplus

extern void _ZN10S7112C3_ntC1Ev();
extern void _ZN10S7112C3_ntD1Ev();
Name_Map name_map_S7112C3_nt[] = {
  NSPAIR(_ZN10S7112C3_ntC1Ev),
  NSPAIR(_ZN10S7112C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S7112C3_nt[];
extern void _ZN10S7112C3_nt3v11Ev();
static  VTBL_ENTRY vtc_S7112C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S7112C3_nt[0]),
  (VTBL_ENTRY)&_ZN10S7112C3_nt3v11Ev,
};
extern VTBL_ENTRY _ZTI10S7112C3_nt[];
VTBL_ENTRY *P__ZTI10S7112C3_nt = _ZTI10S7112C3_nt; 
extern  VTBL_ENTRY _ZTV10S7112C3_nt[];
Class_Descriptor cd_S7112C3_nt = {  "S7112C3_nt", // class name
  0,0,//no base classes
  &(vtc_S7112C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI10S7112C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S7112C3_nt),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  S7112C1  : S7112C2_nt , S7112C3_nt {
  ::S21073C4 s7112c1f0;
  __tsi64 s7112c1f1[4];
  void *s7112c1f2;
  virtual void  v1(); // _ZN7S7112C12v1Ev
  virtual void  v2(); // _ZN7S7112C12v2Ev
  virtual void  v3(); // _ZN7S7112C12v3Ev
  virtual void  v4(); // _ZN7S7112C12v4Ev
  virtual void  v5(); // _ZN7S7112C12v5Ev
  virtual void  v6(); // _ZN7S7112C12v6Ev
  ~S7112C1(); // tgen
  S7112C1(); // tgen
};
//SIG(1 S7112C1) C1{ BC2{ v7 v8 v9 v10} BC3{ v11} v1 v2 v3 v4 v5 v6 FC4{ v12 v13 v14 v15 v16 v17 Fi} FL[4] Fp}


void  S7112C1 ::v1(){vfunc_called(this, "_ZN7S7112C12v1Ev");}
void  S7112C1 ::v2(){vfunc_called(this, "_ZN7S7112C12v2Ev");}
void  S7112C1 ::v3(){vfunc_called(this, "_ZN7S7112C12v3Ev");}
void  S7112C1 ::v4(){vfunc_called(this, "_ZN7S7112C12v4Ev");}
void  S7112C1 ::v5(){vfunc_called(this, "_ZN7S7112C12v5Ev");}
void  S7112C1 ::v6(){vfunc_called(this, "_ZN7S7112C12v6Ev");}
S7112C1 ::~S7112C1(){ note_dtor("S7112C1", this);} // tgen
S7112C1 ::S7112C1(){ note_ctor("S7112C1", this);} // tgen

static void Test_S7112C1()
{
  extern Class_Descriptor cd_S7112C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S7112C1, buf);
    S7112C1 *dp, &lv = *(dp=new (buf) S7112C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S7112C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7112C1)");
    check_base_class_offset(lv, (S7112C2_nt*), 0, "S7112C1");
    check_base_class_offset(lv, (S7112C3_nt*), ABISELECT(8,4), "S7112C1");
    check_field_offset(lv, s7112c1f0, ABISELECT(16,8), "S7112C1.s7112c1f0");
    check_field_offset(lv, s7112c1f1, ABISELECT(32,16), "S7112C1.s7112c1f1");
    check_field_offset(lv, s7112c1f2, ABISELECT(64,48), "S7112C1.s7112c1f2");
    test_class_info(&lv, &cd_S7112C1);
    dp->~S7112C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7112C1(Test_S7112C1, "S7112C1", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S7112C1C1Ev();
extern void _ZN7S7112C1D1Ev();
Name_Map name_map_S7112C1[] = {
  NSPAIR(_ZN7S7112C1C1Ev),
  NSPAIR(_ZN7S7112C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7112C2_nt;
extern VTBL_ENTRY _ZTI10S7112C2_nt[];
extern  VTBL_ENTRY _ZTV10S7112C2_nt[];
extern Class_Descriptor cd_S7112C3_nt;
extern VTBL_ENTRY _ZTI10S7112C3_nt[];
extern  VTBL_ENTRY _ZTV10S7112C3_nt[];
static Base_Class bases_S7112C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7112C2_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_S7112C3_nt,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7112C1[];
extern void _ZN10S7112C2_nt2v7Ev();
extern void _ZN10S7112C2_nt2v8Ev();
extern void _ZN10S7112C2_nt2v9Ev();
extern void _ZN10S7112C2_nt3v10Ev();
extern void _ZN7S7112C12v1Ev();
extern void _ZN7S7112C12v2Ev();
extern void _ZN7S7112C12v3Ev();
extern void _ZN7S7112C12v4Ev();
extern void _ZN7S7112C12v5Ev();
extern void _ZN7S7112C12v6Ev();
extern void _ZN10S7112C3_nt3v11Ev();
static  VTBL_ENTRY vtc_S7112C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7112C1[0]),
  (VTBL_ENTRY)&_ZN10S7112C2_nt2v7Ev,
  (VTBL_ENTRY)&_ZN10S7112C2_nt2v8Ev,
  (VTBL_ENTRY)&_ZN10S7112C2_nt2v9Ev,
  (VTBL_ENTRY)&_ZN10S7112C2_nt3v10Ev,
  (VTBL_ENTRY)&_ZN7S7112C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7112C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7112C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7112C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7112C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7112C12v6Ev,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7112C1[0]),
  (VTBL_ENTRY)&_ZN10S7112C3_nt3v11Ev,
};
extern VTBL_ENTRY _ZTI7S7112C1[];
extern  VTBL_ENTRY _ZTV7S7112C1[];
Class_Descriptor cd_S7112C1 = {  "S7112C1", // class name
  bases_S7112C1, 2,
  &(vtc_S7112C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S7112C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7112C1),15, //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  S15864C4  {
  ::S5634C23 s15864c4f0;
  void  mf15864c4(); // _ZN8S15864C49mf15864c4Ev
};
//SIG(-1 S15864C4) C1{ m FC2{ m Fp[2]}}


void  S15864C4 ::mf15864c4(){}

static void Test_S15864C4()
{
  {
    init_simple_test("S15864C4");
    S15864C4 lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S15864C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15864C4)");
    check_field_offset(lv, s15864c4f0, 0, "S15864C4.s15864c4f0");
  }
}
static Arrange_To_Call_Me vS15864C4(Test_S15864C4, "S15864C4", ABISELECT(16,8));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15864C1  {
  ::S9902C3_nt s15864c1f0;
  ::S15864C4 s15864c1f1;
  ::S15864C4 s15864c1f2;
  ::S15864C4 s15864c1f3;
  ::S5635C32 s15864c1f4;
  int s15864c1f5[2];
  char s15864c1f6;
  ::S3351C4_nt s15864c1f7;
  char s15864c1f8;
  void  mf15864c1(); // _ZN8S15864C19mf15864c1Ev
};
//SIG(1 S15864C1) C1{ m FC2{ m FC3{ m Fp[2]}} FC4{ m FC3} FC4 FC4 FC5{ m Fp} Fi[2] Fc FC6{ m Fi[2]} Fc}


void  S15864C1 ::mf15864c1(){}

static void Test_S15864C1()
{
  {
    init_simple_test("S15864C1");
    S15864C1 lv;
    check2(sizeof(lv), ABISELECT(96,60), "sizeof(S15864C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15864C1)");
    check_field_offset(lv, s15864c1f0, 0, "S15864C1.s15864c1f0");
    check_field_offset(lv, s15864c1f1, ABISELECT(16,8), "S15864C1.s15864c1f1");
    check_field_offset(lv, s15864c1f2, ABISELECT(32,16), "S15864C1.s15864c1f2");
    check_field_offset(lv, s15864c1f3, ABISELECT(48,24), "S15864C1.s15864c1f3");
    check_field_offset(lv, s15864c1f4, ABISELECT(64,32), "S15864C1.s15864c1f4");
    check_field_offset(lv, s15864c1f5, ABISELECT(72,36), "S15864C1.s15864c1f5");
    check_field_offset(lv, s15864c1f6, ABISELECT(80,44), "S15864C1.s15864c1f6");
    check_field_offset(lv, s15864c1f7, ABISELECT(84,48), "S15864C1.s15864c1f7");
    check_field_offset(lv, s15864c1f8, ABISELECT(92,56), "S15864C1.s15864c1f8");
  }
}
static Arrange_To_Call_Me vS15864C1(Test_S15864C1, "S15864C1", ABISELECT(96,60));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S13929C1  {
  __tsi64 s13929c1f0[2];
  int s13929c1f1[2];
  __tsi64 s13929c1f2;
  int s13929c1f3[2];
  __tsi64 s13929c1f4;
  int s13929c1f5[14];
  __tsi64 s13929c1f6[2];
  int s13929c1f7[2];
  __tsi64 s13929c1f8[2];
  int s13929c1f9[2];
  __tsi64 s13929c1f10[2];
  int s13929c1f11[2];
  __tsi64 s13929c1f12[2];
  int s13929c1f13[14];
};
//SIG(1 S13929C1) C1{ FL[2] Fi[2] FL Fi[2] FL Fi[14] FL[2] Fi[2] FL[2] Fi[2] FL[2] Fi[2] FL[2] Fi[14]}



static void Test_S13929C1()
{
  {
    init_simple_test("S13929C1");
    S13929C1 lv;
    check2(sizeof(lv), 248, "sizeof(S13929C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13929C1)");
    check_field_offset(lv, s13929c1f0, 0, "S13929C1.s13929c1f0");
    check_field_offset(lv, s13929c1f1, 16, "S13929C1.s13929c1f1");
    check_field_offset(lv, s13929c1f2, 24, "S13929C1.s13929c1f2");
    check_field_offset(lv, s13929c1f3, 32, "S13929C1.s13929c1f3");
    check_field_offset(lv, s13929c1f4, 40, "S13929C1.s13929c1f4");
    check_field_offset(lv, s13929c1f5, 48, "S13929C1.s13929c1f5");
    check_field_offset(lv, s13929c1f6, 104, "S13929C1.s13929c1f6");
    check_field_offset(lv, s13929c1f7, 120, "S13929C1.s13929c1f7");
    check_field_offset(lv, s13929c1f8, 128, "S13929C1.s13929c1f8");
    check_field_offset(lv, s13929c1f9, 144, "S13929C1.s13929c1f9");
    check_field_offset(lv, s13929c1f10, 152, "S13929C1.s13929c1f10");
    check_field_offset(lv, s13929c1f11, 168, "S13929C1.s13929c1f11");
    check_field_offset(lv, s13929c1f12, 176, "S13929C1.s13929c1f12");
    check_field_offset(lv, s13929c1f13, 192, "S13929C1.s13929c1f13");
  }
}
static Arrange_To_Call_Me vS13929C1(Test_S13929C1, "S13929C1", 248);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9220C2  {
  ::S16199C4_nt s9220c2f0;
  int s9220c2f1[2];
  char s9220c2f2;
  virtual  ~S9220C2(); // _ZN7S9220C2D1Ev
  virtual void  v3(); // _ZN7S9220C22v3Ev
  virtual void  v4(); // _ZN7S9220C22v4Ev
  virtual void  v5(); // _ZN7S9220C22v5Ev
  S9220C2(); // tgen
};
//SIG(-1 S9220C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9220C2 ::~S9220C2(){ note_dtor("S9220C2", this);}
void  S9220C2 ::v3(){vfunc_called(this, "_ZN7S9220C22v3Ev");}
void  S9220C2 ::v4(){vfunc_called(this, "_ZN7S9220C22v4Ev");}
void  S9220C2 ::v5(){vfunc_called(this, "_ZN7S9220C22v5Ev");}
S9220C2 ::S9220C2(){ note_ctor("S9220C2", this);} // tgen

static void Test_S9220C2()
{
  extern Class_Descriptor cd_S9220C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9220C2, buf);
    S9220C2 *dp, &lv = *(dp=new (buf) S9220C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9220C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9220C2)");
    check_field_offset(lv, s9220c2f0, ABISELECT(8,4), "S9220C2.s9220c2f0");
    check_field_offset(lv, s9220c2f1, ABISELECT(24,16), "S9220C2.s9220c2f1");
    check_field_offset(lv, s9220c2f2, ABISELECT(32,24), "S9220C2.s9220c2f2");
    test_class_info(&lv, &cd_S9220C2);
    dp->~S9220C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9220C2(Test_S9220C2, "S9220C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9220C2C1Ev();
extern void _ZN7S9220C2D1Ev();
Name_Map name_map_S9220C2[] = {
  NSPAIR(_ZN7S9220C2C1Ev),
  NSPAIR(_ZN7S9220C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9220C2[];
extern void _ZN7S9220C2D1Ev();
extern void _ZN7S9220C2D0Ev();
extern void _ZN7S9220C22v3Ev();
extern void _ZN7S9220C22v4Ev();
extern void _ZN7S9220C22v5Ev();
static  VTBL_ENTRY vtc_S9220C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9220C2[0]),
  (VTBL_ENTRY)&_ZN7S9220C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9220C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9220C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9220C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9220C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9220C2[];
extern  VTBL_ENTRY _ZTV7S9220C2[];
Class_Descriptor cd_S9220C2 = {  "S9220C2", // class name
  0,0,//no base classes
  &(vtc_S9220C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9220C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9220C2),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  S9220C1  : S9220C2 {
  int s9220c1f0;
  ::S2264C37 s9220c1f1;
  void *s9220c1f2;
  virtual void  v1(); // _ZN7S9220C12v1Ev
  virtual void  v2(); // _ZN7S9220C12v2Ev
  ~S9220C1(); // tgen
  S9220C1(); // tgen
};
//SIG(1 S9220C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fi FC5{ m Fp Fi[2] FC4} Fp}


void  S9220C1 ::v1(){vfunc_called(this, "_ZN7S9220C12v1Ev");}
void  S9220C1 ::v2(){vfunc_called(this, "_ZN7S9220C12v2Ev");}
S9220C1 ::~S9220C1(){ note_dtor("S9220C1", this);} // tgen
S9220C1 ::S9220C1(){ note_ctor("S9220C1", this);} // tgen

static void Test_S9220C1()
{
  extern Class_Descriptor cd_S9220C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,14)];
    init_test(&cd_S9220C1, buf);
    S9220C1 *dp, &lv = *(dp=new (buf) S9220C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S9220C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9220C1)");
    check_base_class_offset(lv, (S9220C2*), 0, "S9220C1");
    check_field_offset(lv, s9220c1f0, ABISELECT(36,28), "S9220C1.s9220c1f0");
    check_field_offset(lv, s9220c1f1, ABISELECT(40,32), "S9220C1.s9220c1f1");
    check_field_offset(lv, s9220c1f2, ABISELECT(64,48), "S9220C1.s9220c1f2");
    test_class_info(&lv, &cd_S9220C1);
    dp->~S9220C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9220C1(Test_S9220C1, "S9220C1", ABISELECT(72,52));

#else // __cplusplus

extern void _ZN7S9220C1C1Ev();
extern void _ZN7S9220C1D1Ev();
Name_Map name_map_S9220C1[] = {
  NSPAIR(_ZN7S9220C1C1Ev),
  NSPAIR(_ZN7S9220C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9220C2;
extern VTBL_ENTRY _ZTI7S9220C2[];
extern  VTBL_ENTRY _ZTV7S9220C2[];
static Base_Class bases_S9220C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9220C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S9220C1[];
extern void _ZN7S9220C1D1Ev();
extern void _ZN7S9220C1D0Ev();
extern void _ZN7S9220C22v3Ev();
extern void _ZN7S9220C22v4Ev();
extern void _ZN7S9220C22v5Ev();
extern void _ZN7S9220C12v1Ev();
extern void _ZN7S9220C12v2Ev();
static  VTBL_ENTRY vtc_S9220C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9220C1[0]),
  (VTBL_ENTRY)&_ZN7S9220C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9220C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9220C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9220C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9220C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9220C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9220C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9220C1[];
extern  VTBL_ENTRY _ZTV7S9220C1[];
Class_Descriptor cd_S9220C1 = {  "S9220C1", // class name
  bases_S9220C1, 1,
  &(vtc_S9220C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,52), // object size
  NSPAIRA(_ZTI7S9220C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9220C1),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  S4398C3  {
  ::S16199C4_nt s4398c3f0;
  int s4398c3f1[2];
  char s4398c3f2;
  virtual  ~S4398C3(); // _ZN7S4398C3D1Ev
  virtual void  v2(); // _ZN7S4398C32v2Ev
  virtual void  v3(); // _ZN7S4398C32v3Ev
  virtual void  v4(); // _ZN7S4398C32v4Ev
  S4398C3(); // tgen
};
//SIG(-1 S4398C3) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S4398C3 ::~S4398C3(){ note_dtor("S4398C3", this);}
void  S4398C3 ::v2(){vfunc_called(this, "_ZN7S4398C32v2Ev");}
void  S4398C3 ::v3(){vfunc_called(this, "_ZN7S4398C32v3Ev");}
void  S4398C3 ::v4(){vfunc_called(this, "_ZN7S4398C32v4Ev");}
S4398C3 ::S4398C3(){ note_ctor("S4398C3", this);} // tgen

static void Test_S4398C3()
{
  extern Class_Descriptor cd_S4398C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S4398C3, buf);
    S4398C3 *dp, &lv = *(dp=new (buf) S4398C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S4398C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4398C3)");
    check_field_offset(lv, s4398c3f0, ABISELECT(8,4), "S4398C3.s4398c3f0");
    check_field_offset(lv, s4398c3f1, ABISELECT(24,16), "S4398C3.s4398c3f1");
    check_field_offset(lv, s4398c3f2, ABISELECT(32,24), "S4398C3.s4398c3f2");
    test_class_info(&lv, &cd_S4398C3);
    dp->~S4398C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4398C3(Test_S4398C3, "S4398C3", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S4398C3C1Ev();
extern void _ZN7S4398C3D1Ev();
Name_Map name_map_S4398C3[] = {
  NSPAIR(_ZN7S4398C3C1Ev),
  NSPAIR(_ZN7S4398C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S4398C3[];
extern void _ZN7S4398C3D1Ev();
extern void _ZN7S4398C3D0Ev();
extern void _ZN7S4398C32v2Ev();
extern void _ZN7S4398C32v3Ev();
extern void _ZN7S4398C32v4Ev();
static  VTBL_ENTRY vtc_S4398C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4398C3[0]),
  (VTBL_ENTRY)&_ZN7S4398C3D1Ev,
  (VTBL_ENTRY)&_ZN7S4398C3D0Ev,
  (VTBL_ENTRY)&_ZN7S4398C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4398C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4398C32v4Ev,
};
extern VTBL_ENTRY _ZTI7S4398C3[];
extern  VTBL_ENTRY _ZTV7S4398C3[];
Class_Descriptor cd_S4398C3 = {  "S4398C3", // class name
  0,0,//no base classes
  &(vtc_S4398C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S4398C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S4398C3),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  S4398C2  : S4398C3 {
  void *s4398c2f0;
  virtual void  v5(); // _ZN7S4398C22v5Ev
  virtual void  v6(); // _ZN7S4398C22v6Ev
  ~S4398C2(); // tgen
  S4398C2(); // tgen
};
//SIG(-1 S4398C2) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} v1 v2 Fp}


void  S4398C2 ::v5(){vfunc_called(this, "_ZN7S4398C22v5Ev");}
void  S4398C2 ::v6(){vfunc_called(this, "_ZN7S4398C22v6Ev");}
S4398C2 ::~S4398C2(){ note_dtor("S4398C2", this);} // tgen
S4398C2 ::S4398C2(){ note_ctor("S4398C2", this);} // tgen

static void Test_S4398C2()
{
  extern Class_Descriptor cd_S4398C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,9)];
    init_test(&cd_S4398C2, buf);
    S4398C2 *dp, &lv = *(dp=new (buf) S4398C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S4398C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4398C2)");
    check_base_class_offset(lv, (S4398C3*), 0, "S4398C2");
    check_field_offset(lv, s4398c2f0, ABISELECT(40,28), "S4398C2.s4398c2f0");
    test_class_info(&lv, &cd_S4398C2);
    dp->~S4398C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4398C2(Test_S4398C2, "S4398C2", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN7S4398C2C1Ev();
extern void _ZN7S4398C2D1Ev();
Name_Map name_map_S4398C2[] = {
  NSPAIR(_ZN7S4398C2C1Ev),
  NSPAIR(_ZN7S4398C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4398C3;
extern VTBL_ENTRY _ZTI7S4398C3[];
extern  VTBL_ENTRY _ZTV7S4398C3[];
static Base_Class bases_S4398C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4398C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S4398C2[];
extern void _ZN7S4398C2D1Ev();
extern void _ZN7S4398C2D0Ev();
extern void _ZN7S4398C32v2Ev();
extern void _ZN7S4398C32v3Ev();
extern void _ZN7S4398C32v4Ev();
extern void _ZN7S4398C22v5Ev();
extern void _ZN7S4398C22v6Ev();
static  VTBL_ENTRY vtc_S4398C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4398C2[0]),
  (VTBL_ENTRY)&_ZN7S4398C2D1Ev,
  (VTBL_ENTRY)&_ZN7S4398C2D0Ev,
  (VTBL_ENTRY)&_ZN7S4398C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4398C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4398C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4398C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4398C22v6Ev,
};
extern VTBL_ENTRY _ZTI7S4398C2[];
extern  VTBL_ENTRY _ZTV7S4398C2[];
Class_Descriptor cd_S4398C2 = {  "S4398C2", // class name
  bases_S4398C2, 1,
  &(vtc_S4398C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI7S4398C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4398C2),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  S4398C1  : S4398C2 {
  int s4398c1f0;
  ::S16199C4_nt s4398c1f1;
  void *s4398c1f2[2];
  virtual  ~S4398C1(); // _ZN7S4398C1D1Ev
  virtual void  v1(); // _ZN7S4398C12v1Ev
  S4398C1(); // tgen
};
//SIG(1 S4398C1) C1{ BC2{ BC3{ vd v2 v3 v4 FC4{ m Fp Fi FC5{ m}} Fi[2] Fc} v5 v6 Fp} vd v1 Fi FC4 Fp[2]}


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

static void Test_S4398C1()
{
  extern Class_Descriptor cd_S4398C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(12,15)];
    init_test(&cd_S4398C1, buf);
    S4398C1 *dp, &lv = *(dp=new (buf) S4398C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(88,56), "sizeof(S4398C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S4398C1)");
    check_base_class_offset(lv, (S4398C3*)(S4398C2*), 0, "S4398C1");
    check_base_class_offset(lv, (S4398C2*), 0, "S4398C1");
    check_field_offset(lv, s4398c1f0, ABISELECT(48,32), "S4398C1.s4398c1f0");
    check_field_offset(lv, s4398c1f1, ABISELECT(56,36), "S4398C1.s4398c1f1");
    check_field_offset(lv, s4398c1f2, ABISELECT(72,48), "S4398C1.s4398c1f2");
    test_class_info(&lv, &cd_S4398C1);
    dp->~S4398C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS4398C1(Test_S4398C1, "S4398C1", ABISELECT(88,56));

#else // __cplusplus

extern void _ZN7S4398C1C1Ev();
extern void _ZN7S4398C1D1Ev();
Name_Map name_map_S4398C1[] = {
  NSPAIR(_ZN7S4398C1C1Ev),
  NSPAIR(_ZN7S4398C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S4398C3;
extern VTBL_ENTRY _ZTI7S4398C3[];
extern  VTBL_ENTRY _ZTV7S4398C3[];
extern Class_Descriptor cd_S4398C2;
extern VTBL_ENTRY _ZTI7S4398C2[];
extern  VTBL_ENTRY _ZTV7S4398C2[];
static Base_Class bases_S4398C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S4398C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S4398C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S4398C1[];
extern void _ZN7S4398C1D1Ev();
extern void _ZN7S4398C1D0Ev();
extern void _ZN7S4398C32v2Ev();
extern void _ZN7S4398C32v3Ev();
extern void _ZN7S4398C32v4Ev();
extern void _ZN7S4398C22v5Ev();
extern void _ZN7S4398C22v6Ev();
extern void _ZN7S4398C12v1Ev();
static  VTBL_ENTRY vtc_S4398C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S4398C1[0]),
  (VTBL_ENTRY)&_ZN7S4398C1D1Ev,
  (VTBL_ENTRY)&_ZN7S4398C1D0Ev,
  (VTBL_ENTRY)&_ZN7S4398C32v2Ev,
  (VTBL_ENTRY)&_ZN7S4398C32v3Ev,
  (VTBL_ENTRY)&_ZN7S4398C32v4Ev,
  (VTBL_ENTRY)&_ZN7S4398C22v5Ev,
  (VTBL_ENTRY)&_ZN7S4398C22v6Ev,
  (VTBL_ENTRY)&_ZN7S4398C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S4398C1[];
extern  VTBL_ENTRY _ZTV7S4398C1[];
Class_Descriptor cd_S4398C1 = {  "S4398C1", // class name
  bases_S4398C1, 2,
  &(vtc_S4398C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(88,56), // object size
  NSPAIRA(_ZTI7S4398C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S4398C1),10, //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  S17465C4_nt  {
  ::S13557C4_nt s17465c4f0;
  void  mf17465c4(); // _ZN11S17465C4_nt9mf17465c4Ev
};
//SIG(-1 S17465C4_nt) C1{ m FC2{ FL[4]}}


void  S17465C4_nt ::mf17465c4(){}

//skip512 S17465C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S17465C1  {
  void *s17465c1f0;
  char s17465c1f1[2];
  int s17465c1f2[3];
  ::S16199C4_nt s17465c1f3;
  char s17465c1f4;
  int s17465c1f5;
  void *s17465c1f6;
  char s17465c1f7[2];
  void *s17465c1f8;
  char s17465c1f9;
  ::S17465C4_nt s17465c1f10;
  void  mf17465c1(); // _ZN8S17465C19mf17465c1Ev
};
//SIG(1 S17465C1) C1{ m Fp Fc[2] Fi[3] FC2{ m Fp Fi FC3{ m}} Fc Fi Fp Fc[2] Fp Fc FC4{ m FC5{ FL[4]}}}


void  S17465C1 ::mf17465c1(){}

static void Test_S17465C1()
{
  {
    init_simple_test("S17465C1");
    S17465C1 lv;
    check2(sizeof(lv), ABISELECT(112,88), "sizeof(S17465C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17465C1)");
    check_field_offset(lv, s17465c1f0, 0, "S17465C1.s17465c1f0");
    check_field_offset(lv, s17465c1f1, ABISELECT(8,4), "S17465C1.s17465c1f1");
    check_field_offset(lv, s17465c1f2, ABISELECT(12,8), "S17465C1.s17465c1f2");
    check_field_offset(lv, s17465c1f3, ABISELECT(24,20), "S17465C1.s17465c1f3");
    check_field_offset(lv, s17465c1f4, ABISELECT(40,32), "S17465C1.s17465c1f4");
    check_field_offset(lv, s17465c1f5, ABISELECT(44,36), "S17465C1.s17465c1f5");
    check_field_offset(lv, s17465c1f6, ABISELECT(48,40), "S17465C1.s17465c1f6");
    check_field_offset(lv, s17465c1f7, ABISELECT(56,44), "S17465C1.s17465c1f7");
    check_field_offset(lv, s17465c1f8, ABISELECT(64,48), "S17465C1.s17465c1f8");
    check_field_offset(lv, s17465c1f9, ABISELECT(72,52), "S17465C1.s17465c1f9");
    check_field_offset(lv, s17465c1f10, ABISELECT(80,56), "S17465C1.s17465c1f10");
  }
}
static Arrange_To_Call_Me vS17465C1(Test_S17465C1, "S17465C1", ABISELECT(112,88));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8324C4_nt  {
  char s8324c4f0[12];
};
//SIG(-1 S8324C4_nt) C1{ Fc[12]}



//skip512 S8324C4_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8324C3_nt  {
  ::S8324C4_nt s8324c3f0;
  void  mf8324c3(); // _ZN10S8324C3_nt8mf8324c3Ev
};
//SIG(-1 S8324C3_nt) C1{ m FC2{ Fc[12]}}


void  S8324C3_nt ::mf8324c3(){}

//skip512 S8324C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8324C5_nt  {
  ::S8119C8_nt s8324c5f0;
  ::S8119C8_nt s8324c5f1;
  ::S8119C8_nt s8324c5f2;
  ::S8119C8_nt s8324c5f3;
};
//SIG(-1 S8324C5_nt) C1{ FC2{ Fi[4]} FC2 FC2 FC2}



//skip512 S8324C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8324C1  : S6099C14_nt {
  int s8324c1f0;
  ::S8324C3_nt s8324c1f1;
  void *s8324c1f2[4];
  int s8324c1f3[2];
  ::S8324C5_nt s8324c1f4;
  long s8324c1f5;
  virtual  ~S8324C1(); // _ZN7S8324C1D1Ev
  S8324C1(); // tgen
};
//SIG(1 S8324C1) C1{ BC2{ vd m} vd Fi FC3{ m FC4{ Fc[12]}} Fp[4] Fi[2] FC5{ FC6{ Fi[4]} FC6 FC6 FC6} Fl}


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

static void Test_S8324C1()
{
  extern Class_Descriptor cd_S8324C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,29)];
    init_test(&cd_S8324C1, buf);
    S8324C1 *dp, &lv = *(dp=new (buf) S8324C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,112), "sizeof(S8324C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8324C1)");
    check_base_class_offset(lv, (S6099C14_nt*), 0, "S8324C1");
    check_field_offset(lv, s8324c1f0, ABISELECT(8,4), "S8324C1.s8324c1f0");
    check_field_offset(lv, s8324c1f1, ABISELECT(12,8), "S8324C1.s8324c1f1");
    check_field_offset(lv, s8324c1f2, ABISELECT(24,20), "S8324C1.s8324c1f2");
    check_field_offset(lv, s8324c1f3, ABISELECT(56,36), "S8324C1.s8324c1f3");
    check_field_offset(lv, s8324c1f4, ABISELECT(64,44), "S8324C1.s8324c1f4");
    check_field_offset(lv, s8324c1f5, ABISELECT(128,108), "S8324C1.s8324c1f5");
    test_class_info(&lv, &cd_S8324C1);
    dp->~S8324C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8324C1(Test_S8324C1, "S8324C1", ABISELECT(136,112));

#else // __cplusplus

extern void _ZN7S8324C1C1Ev();
extern void _ZN7S8324C1D1Ev();
Name_Map name_map_S8324C1[] = {
  NSPAIR(_ZN7S8324C1C1Ev),
  NSPAIR(_ZN7S8324C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6099C14_nt;
extern VTBL_ENTRY _ZTI11S6099C14_nt[];
extern  VTBL_ENTRY _ZTV11S6099C14_nt[];
static Base_Class bases_S8324C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6099C14_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 _ZTI7S8324C1[];
extern void _ZN7S8324C1D1Ev();
extern void _ZN7S8324C1D0Ev();
static  VTBL_ENTRY vtc_S8324C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8324C1[0]),
  (VTBL_ENTRY)&_ZN7S8324C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8324C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8324C1[];
extern  VTBL_ENTRY _ZTV7S8324C1[];
Class_Descriptor cd_S8324C1 = {  "S8324C1", // class name
  bases_S8324C1, 1,
  &(vtc_S8324C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(136,112), // object size
  NSPAIRA(_ZTI7S8324C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8324C1),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  S11285C3_nt  {
  int s11285c3f0;
  char s11285c3f1[248];
};
//SIG(-1 S11285C3_nt) C1{ Fi Fc[248]}



//skip512 S11285C3_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11285C2  {
  ::S11285C3_nt s11285c2f0;
  int s11285c2f1[2];
};
//SIG(-1 S11285C2) C1{ FC2{ Fi Fc[248]} Fi[2]}



static void Test_S11285C2()
{
  {
    init_simple_test("S11285C2");
    S11285C2 lv;
    check2(sizeof(lv), 260, "sizeof(S11285C2)");
    check2(__alignof__(lv), 4, "__alignof__(S11285C2)");
    check_field_offset(lv, s11285c2f0, 0, "S11285C2.s11285c2f0");
    check_field_offset(lv, s11285c2f1, 252, "S11285C2.s11285c2f1");
  }
}
static Arrange_To_Call_Me vS11285C2(Test_S11285C2, "S11285C2", 260);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11285C5_nt  {
  int s11285c5f0[2];
  char s11285c5f1[4];
  short s11285c5f2;
  char s11285c5f3[258];
};
//SIG(-1 S11285C5_nt) C1{ Fi[2] Fc[4] Fs Fc[258]}



//skip512 S11285C5_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11285C6_nt  {
  int s11285c6f0;
  char s11285c6f1[4];
};
//SIG(-1 S11285C6_nt) C1{ Fi Fc[4]}



//skip512 S11285C6_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11285C4  {
  ::S11285C5_nt s11285c4f0;
  ::S11285C6_nt s11285c4f1;
  int s11285c4f2;
};
//SIG(-1 S11285C4) C1{ FC2{ Fi[2] Fc[4] Fs Fc[258]} FC3{ Fi Fc[4]} Fi}



static void Test_S11285C4()
{
  {
    init_simple_test("S11285C4");
    S11285C4 lv;
    check2(sizeof(lv), 284, "sizeof(S11285C4)");
    check2(__alignof__(lv), 4, "__alignof__(S11285C4)");
    check_field_offset(lv, s11285c4f0, 0, "S11285C4.s11285c4f0");
    check_field_offset(lv, s11285c4f1, 272, "S11285C4.s11285c4f1");
    check_field_offset(lv, s11285c4f2, 280, "S11285C4.s11285c4f2");
  }
}
static Arrange_To_Call_Me vS11285C4(Test_S11285C4, "S11285C4", 284);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S11285C1  {
  ::S11285C2 s11285c1f0;
  ::S11285C4 s11285c1f1;
};
//SIG(1 S11285C1) C1{ FC2{ FC3{ Fi Fc[248]} Fi[2]} FC4{ FC5{ Fi[2] Fc[4] Fs Fc[258]} FC6{ Fi Fc[4]} Fi}}



static void Test_S11285C1()
{
  {
    init_simple_test("S11285C1");
    S11285C1 lv;
    check2(sizeof(lv), 544, "sizeof(S11285C1)");
    check2(__alignof__(lv), 4, "__alignof__(S11285C1)");
    check_field_offset(lv, s11285c1f0, 0, "S11285C1.s11285c1f0");
    check_field_offset(lv, s11285c1f1, 260, "S11285C1.s11285c1f1");
  }
}
static Arrange_To_Call_Me vS11285C1(Test_S11285C1, "S11285C1", 544);

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S15640C2_nt  {
  char s15640c2f0[8];
  void  mf15640c2(); // _ZN11S15640C2_nt9mf15640c2Ev
};
//SIG(-1 S15640C2_nt) C1{ m Fc[8]}


void  S15640C2_nt ::mf15640c2(){}

//skip512 S15640C2_nt

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

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



static void Test_S15640C5()
{
  extern Class_Descriptor cd_S15640C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S15640C5, buf);
    S15640C5 &lv = *(new (buf) S15640C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S15640C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15640C5)");
    check_base_class_offset(lv, (S3351C7_nt*), 0, "S15640C5");
    test_class_info(&lv, &cd_S15640C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15640C5(Test_S15640C5, "S15640C5", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3351C7_nt;
static Base_Class bases_S15640C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3351C7_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_S15640C5 = {  "S15640C5", // class name
  bases_S15640C5, 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  S15640C4  : S15640C5 {
};
//SIG(-1 S15640C4) C1{ BC2{ BC3{ m Fp Fi[2]}}}



static void Test_S15640C4()
{
  extern Class_Descriptor cd_S15640C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S15640C4, buf);
    S15640C4 &lv = *(new (buf) S15640C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S15640C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15640C4)");
    check_base_class_offset(lv, (S3351C7_nt*)(S15640C5*), 0, "S15640C4");
    check_base_class_offset(lv, (S15640C5*), 0, "S15640C4");
    test_class_info(&lv, &cd_S15640C4);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS15640C4(Test_S15640C4, "S15640C4", ABISELECT(16,12));

#else // __cplusplus

extern Class_Descriptor cd_S3351C7_nt;
extern Class_Descriptor cd_S15640C5;
static Base_Class bases_S15640C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3351C7_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_S15640C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S15640C4 = {  "S15640C4", // class name
  bases_S15640C4, 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  S15640C3_nt  : S15640C4 {
};
//SIG(-1 S15640C3_nt) C1{ BC2{ BC3{ BC4{ m Fp Fi[2]}}}}



//skip512 S15640C3_nt

#else // __cplusplus

extern Class_Descriptor cd_S3351C7_nt;
extern Class_Descriptor cd_S15640C5;
extern Class_Descriptor cd_S15640C4;
static Base_Class bases_S15640C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3351C7_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_S15640C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S15640C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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  S15640C1  {
  ::S15640C2_nt s15640c1f0;
  ::S15640C3_nt s15640c1f1;
  unsigned int s15640c1f2:1;
  unsigned int s15640c1f3:1;
  unsigned int s15640c1f4:1;
  unsigned int s15640c1f5:1;
  ::S15640C3_nt s15640c1f6;
  ::S15640C3_nt s15640c1f7;
  void  mf15640c1(); // _ZN8S15640C19mf15640c1Ev
};
//SIG(1 S15640C1) C1{ m FC2{ m Fc[8]} FC3{ BC4{ BC5{ BC6{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1 Fi:1 FC3 FC3}


void  S15640C1 ::mf15640c1(){}

static void Test_S15640C1()
{
  {
    init_simple_test("S15640C1");
    static S15640C1 lv;
    check2(sizeof(lv), ABISELECT(64,48), "sizeof(S15640C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15640C1)");
    check_field_offset(lv, s15640c1f0, 0, "S15640C1.s15640c1f0");
    check_field_offset(lv, s15640c1f1, 8, "S15640C1.s15640c1f1");
    set_bf_and_test(lv, s15640c1f2, ABISELECT(24,20), 0, 1, 1, "S15640C1");
    set_bf_and_test(lv, s15640c1f3, ABISELECT(24,20), 1, 1, 1, "S15640C1");
    set_bf_and_test(lv, s15640c1f4, ABISELECT(24,20), 2, 1, 1, "S15640C1");
    set_bf_and_test(lv, s15640c1f5, ABISELECT(24,20), 3, 1, 1, "S15640C1");
    check_field_offset(lv, s15640c1f6, ABISELECT(32,24), "S15640C1.s15640c1f6");
    check_field_offset(lv, s15640c1f7, ABISELECT(48,36), "S15640C1.s15640c1f7");
  }
}
static Arrange_To_Call_Me vS15640C1(Test_S15640C1, "S15640C1", ABISELECT(64,48));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7591C3  {
  virtual void  v3(); // _ZN7S7591C32v3Ev
  ~S7591C3(); // tgen
  S7591C3(); // tgen
};
//SIG(-1 S7591C3) C1{ v1}


void  S7591C3 ::v3(){vfunc_called(this, "_ZN7S7591C32v3Ev");}
S7591C3 ::~S7591C3(){ note_dtor("S7591C3", this);} // tgen
S7591C3 ::S7591C3(){ note_ctor("S7591C3", this);} // tgen

static void Test_S7591C3()
{
  extern Class_Descriptor cd_S7591C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7591C3, buf);
    S7591C3 *dp, &lv = *(dp=new (buf) S7591C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7591C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7591C3)");
    test_class_info(&lv, &cd_S7591C3);
    dp->~S7591C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7591C3(Test_S7591C3, "S7591C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7591C3C1Ev();
extern void _ZN7S7591C3D1Ev();
Name_Map name_map_S7591C3[] = {
  NSPAIR(_ZN7S7591C3C1Ev),
  NSPAIR(_ZN7S7591C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7591C3[];
extern void _ZN7S7591C32v3Ev();
static  VTBL_ENTRY vtc_S7591C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7591C3[0]),
  (VTBL_ENTRY)&_ZN7S7591C32v3Ev,
};
extern VTBL_ENTRY _ZTI7S7591C3[];
extern  VTBL_ENTRY _ZTV7S7591C3[];
Class_Descriptor cd_S7591C3 = {  "S7591C3", // class name
  0,0,//no base classes
  &(vtc_S7591C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7591C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7591C3),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  S7591C4  {
  int s7591c4f0;
  virtual void  v4(); // _ZN7S7591C42v4Ev
  virtual void  v5(); // _ZN7S7591C42v5Ev
  virtual void  v6(); // _ZN7S7591C42v6Ev
  virtual void  v7(); // _ZN7S7591C42v7Ev
  virtual void  v8(); // _ZN7S7591C42v8Ev
  virtual void  v9(); // _ZN7S7591C42v9Ev
  ~S7591C4(); // tgen
  S7591C4(); // tgen
};
//SIG(-1 S7591C4) C1{ v1 v2 v3 v4 v5 v6 Fi}


void  S7591C4 ::v4(){vfunc_called(this, "_ZN7S7591C42v4Ev");}
void  S7591C4 ::v5(){vfunc_called(this, "_ZN7S7591C42v5Ev");}
void  S7591C4 ::v6(){vfunc_called(this, "_ZN7S7591C42v6Ev");}
void  S7591C4 ::v7(){vfunc_called(this, "_ZN7S7591C42v7Ev");}
void  S7591C4 ::v8(){vfunc_called(this, "_ZN7S7591C42v8Ev");}
void  S7591C4 ::v9(){vfunc_called(this, "_ZN7S7591C42v9Ev");}
S7591C4 ::~S7591C4(){ note_dtor("S7591C4", this);} // tgen
S7591C4 ::S7591C4(){ note_ctor("S7591C4", this);} // tgen

static void Test_S7591C4()
{
  extern Class_Descriptor cd_S7591C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7591C4, buf);
    S7591C4 *dp, &lv = *(dp=new (buf) S7591C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7591C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7591C4)");
    check_field_offset(lv, s7591c4f0, ABISELECT(8,4), "S7591C4.s7591c4f0");
    test_class_info(&lv, &cd_S7591C4);
    dp->~S7591C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7591C4(Test_S7591C4, "S7591C4", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7591C4C1Ev();
extern void _ZN7S7591C4D1Ev();
Name_Map name_map_S7591C4[] = {
  NSPAIR(_ZN7S7591C4C1Ev),
  NSPAIR(_ZN7S7591C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7591C4[];
extern void _ZN7S7591C42v4Ev();
extern void _ZN7S7591C42v5Ev();
extern void _ZN7S7591C42v6Ev();
extern void _ZN7S7591C42v7Ev();
extern void _ZN7S7591C42v8Ev();
extern void _ZN7S7591C42v9Ev();
static  VTBL_ENTRY vtc_S7591C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7591C4[0]),
  (VTBL_ENTRY)&_ZN7S7591C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7591C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7591C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7591C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7591C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7591C42v9Ev,
};
extern VTBL_ENTRY _ZTI7S7591C4[];
extern  VTBL_ENTRY _ZTV7S7591C4[];
Class_Descriptor cd_S7591C4 = {  "S7591C4", // class name
  0,0,//no base classes
  &(vtc_S7591C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7591C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7591C4),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  S7591C2  : virtual S7591C3 , S7591C4 {
  virtual void  v10(); // _ZN7S7591C23v10Ev
  virtual void  v11(); // _ZN7S7591C23v11Ev
  virtual void  v12(); // _ZN7S7591C23v12Ev
  virtual void  v13(); // _ZN7S7591C23v13Ev
  virtual void  v14(); // _ZN7S7591C23v14Ev
  ~S7591C2(); // tgen
  S7591C2(); // tgen
};
//SIG(-1 S7591C2) C1{ VBC2{ v6} BC3{ v7 v8 v9 v10 v11 v12 Fi} v1 v2 v3 v4 v5}


void  S7591C2 ::v10(){vfunc_called(this, "_ZN7S7591C23v10Ev");}
void  S7591C2 ::v11(){vfunc_called(this, "_ZN7S7591C23v11Ev");}
void  S7591C2 ::v12(){vfunc_called(this, "_ZN7S7591C23v12Ev");}
void  S7591C2 ::v13(){vfunc_called(this, "_ZN7S7591C23v13Ev");}
void  S7591C2 ::v14(){vfunc_called(this, "_ZN7S7591C23v14Ev");}
S7591C2 ::~S7591C2(){ note_dtor("S7591C2", this);} // tgen
S7591C2 ::S7591C2(){ note_ctor("S7591C2", this);} // tgen

static void Test_S7591C2()
{
  extern Class_Descriptor cd_S7591C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S7591C2, buf);
    S7591C2 *dp, &lv = *(dp=new (buf) S7591C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S7591C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7591C2)");
    check_base_class_offset(lv, (S7591C3*), ABISELECT(16,8), "S7591C2");
    check_base_class_offset(lv, (S7591C4*), 0, "S7591C2");
    test_class_info(&lv, &cd_S7591C2);
    dp->~S7591C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7591C2(Test_S7591C2, "S7591C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S7591C2C1Ev();
extern void _ZN7S7591C2D1Ev();
Name_Map name_map_S7591C2[] = {
  NSPAIR(_ZN7S7591C2C1Ev),
  NSPAIR(_ZN7S7591C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7591C3;
extern VTBL_ENTRY _ZTI7S7591C3[];
extern  VTBL_ENTRY _ZTV7S7591C3[];
extern Class_Descriptor cd_S7591C4;
extern VTBL_ENTRY _ZTI7S7591C4[];
extern  VTBL_ENTRY _ZTV7S7591C4[];
static Base_Class bases_S7591C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7591C3,    ABISELECT(16,8), //bcp->offset
    14, //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_S7591C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S7591C2[];
extern void _ZN7S7591C42v4Ev();
extern void _ZN7S7591C42v5Ev();
extern void _ZN7S7591C42v6Ev();
extern void _ZN7S7591C42v7Ev();
extern void _ZN7S7591C42v8Ev();
extern void _ZN7S7591C42v9Ev();
extern void _ZN7S7591C23v10Ev();
extern void _ZN7S7591C23v11Ev();
extern void _ZN7S7591C23v12Ev();
extern void _ZN7S7591C23v13Ev();
extern void _ZN7S7591C23v14Ev();
extern void _ZN7S7591C32v3Ev();
static  VTBL_ENTRY vtc_S7591C2[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7591C2[0]),
  (VTBL_ENTRY)&_ZN7S7591C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7591C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7591C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7591C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7591C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7591C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7591C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7591C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7591C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7591C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7591C23v14Ev,
  0,
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S7591C2[0]),
  (VTBL_ENTRY)&_ZN7S7591C32v3Ev,
};
extern VTBL_ENTRY _ZTV7S7591C2[];
static  VTT_ENTRY vtt_S7591C2[] = {
  {&(_ZTV7S7591C2[3]),  3,18},
  {&(_ZTV7S7591C2[17]),  17,18},
};
extern VTBL_ENTRY _ZTI7S7591C2[];
extern  VTBL_ENTRY _ZTV7S7591C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7591C2[];
Class_Descriptor cd_S7591C2 = {  "S7591C2", // class name
  bases_S7591C2, 2,
  &(vtc_S7591C2[0]), // expected_vtbl_contents
  &(vtt_S7591C2[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S7591C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7591C2),18, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7591C2),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  S7591C1  : S7591C2 {
  ::S7591C4 s7591c1f0;
  void *s7591c1f1;
  virtual void  v1(); // _ZN7S7591C12v1Ev
  virtual void  v2(); // _ZN7S7591C12v2Ev
  ~S7591C1(); // tgen
  S7591C1(); // tgen
};
//SIG(1 S7591C1) C1{ BC2{ VBC3{ v3} BC4{ v4 v5 v6 v7 v8 v9 Fi} v10 v11 v12 v13 v14} v1 v2 FC4 Fp}


void  S7591C1 ::v1(){vfunc_called(this, "_ZN7S7591C12v1Ev");}
void  S7591C1 ::v2(){vfunc_called(this, "_ZN7S7591C12v2Ev");}
S7591C1 ::~S7591C1(){ note_dtor("S7591C1", this);} // tgen
S7591C1 ::S7591C1(){ note_ctor("S7591C1", this);} // tgen

static void Test_S7591C1()
{
  extern Class_Descriptor cd_S7591C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S7591C1, buf);
    S7591C1 *dp, &lv = *(dp=new (buf) S7591C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7591C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7591C1)");
    check_base_class_offset(lv, (S7591C3*)(S7591C2*), ABISELECT(40,20), "S7591C1");
    check_base_class_offset(lv, (S7591C4*)(S7591C2*), 0, "S7591C1");
    check_base_class_offset(lv, (S7591C2*), 0, "S7591C1");
    check_field_offset(lv, s7591c1f0, ABISELECT(16,8), "S7591C1.s7591c1f0");
    check_field_offset(lv, s7591c1f1, ABISELECT(32,16), "S7591C1.s7591c1f1");
    test_class_info(&lv, &cd_S7591C1);
    dp->~S7591C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7591C1(Test_S7591C1, "S7591C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S7591C1C1Ev();
extern void _ZN7S7591C1D1Ev();
Name_Map name_map_S7591C1[] = {
  NSPAIR(_ZN7S7591C1C1Ev),
  NSPAIR(_ZN7S7591C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7591C3;
extern VTBL_ENTRY _ZTI7S7591C3[];
extern  VTBL_ENTRY _ZTV7S7591C3[];
extern Class_Descriptor cd_S7591C4;
extern VTBL_ENTRY _ZTI7S7591C4[];
extern  VTBL_ENTRY _ZTV7S7591C4[];
extern Class_Descriptor cd_S7591C2;
extern VTBL_ENTRY _ZTI7S7591C2[];
extern  VTBL_ENTRY _ZTV7S7591C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7591C2[];
static Base_Class bases_S7591C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7591C3,    ABISELECT(40,20), //bcp->offset
    16, //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
    2, //immediately_derived
  0, 1},
  {&cd_S7591C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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_S7591C2,    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 _ZTI7S7591C1[];
extern void _ZN7S7591C42v4Ev();
extern void _ZN7S7591C42v5Ev();
extern void _ZN7S7591C42v6Ev();
extern void _ZN7S7591C42v7Ev();
extern void _ZN7S7591C42v8Ev();
extern void _ZN7S7591C42v9Ev();
extern void _ZN7S7591C23v10Ev();
extern void _ZN7S7591C23v11Ev();
extern void _ZN7S7591C23v12Ev();
extern void _ZN7S7591C23v13Ev();
extern void _ZN7S7591C23v14Ev();
extern void _ZN7S7591C12v1Ev();
extern void _ZN7S7591C12v2Ev();
extern void _ZN7S7591C32v3Ev();
static  VTBL_ENTRY vtc_S7591C1[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7591C1[0]),
  (VTBL_ENTRY)&_ZN7S7591C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7591C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7591C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7591C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7591C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7591C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7591C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7591C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7591C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7591C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7591C23v14Ev,
  (VTBL_ENTRY)&_ZN7S7591C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7591C12v2Ev,
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7591C1[0]),
  (VTBL_ENTRY)&_ZN7S7591C32v3Ev,
};
extern VTBL_ENTRY _ZTV7S7591C1[];
extern void _ZN7S7591C42v4Ev();
extern void _ZN7S7591C42v5Ev();
extern void _ZN7S7591C42v6Ev();
extern void _ZN7S7591C42v7Ev();
extern void _ZN7S7591C42v8Ev();
extern void _ZN7S7591C42v9Ev();
extern void _ZN7S7591C23v10Ev();
extern void _ZN7S7591C23v11Ev();
extern void _ZN7S7591C23v12Ev();
extern void _ZN7S7591C23v13Ev();
extern void _ZN7S7591C23v14Ev();
static  VTBL_ENTRY _tg__ZTV7S7591C2__7S7591C1[] = {
  ABISELECT(40,20),
  0,
  (VTBL_ENTRY)&(_ZTI7S7591C2[0]),
  (VTBL_ENTRY)&_ZN7S7591C42v4Ev,
  (VTBL_ENTRY)&_ZN7S7591C42v5Ev,
  (VTBL_ENTRY)&_ZN7S7591C42v6Ev,
  (VTBL_ENTRY)&_ZN7S7591C42v7Ev,
  (VTBL_ENTRY)&_ZN7S7591C42v8Ev,
  (VTBL_ENTRY)&_ZN7S7591C42v9Ev,
  (VTBL_ENTRY)&_ZN7S7591C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7591C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7591C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7591C23v13Ev,
  (VTBL_ENTRY)&_ZN7S7591C23v14Ev,
};
extern void _ZN7S7591C32v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7591C3__7S7591C2__7S7591C1[] = {
  0,
  ABISELECT(-40,-20),
  (VTBL_ENTRY)&(_ZTI7S7591C2[0]),
  (VTBL_ENTRY)&_ZN7S7591C32v3Ev,
};
static  VTT_ENTRY vtt_S7591C1[] = {
  {&(_ZTV7S7591C1[3]),  3,20},
  {&(_tg__ZTV7S7591C2__7S7591C1[3]),  3,14},
  {&(_tg__ZTV7S7591C3__7S7591C2__7S7591C1[3]),  3,4},
  {&(_ZTV7S7591C1[19]),  19,20},
};
extern VTBL_ENTRY _ZTI7S7591C1[];
extern  VTBL_ENTRY _ZTV7S7591C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7591C1[];
Class_Descriptor cd_S7591C1 = {  "S7591C1", // class name
  bases_S7591C1, 3,
  &(vtc_S7591C1[0]), // expected_vtbl_contents
  &(vtt_S7591C1[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S7591C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7591C1),20, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7591C1),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  S9281C2  {
  ::S16199C4_nt s9281c2f0;
  int s9281c2f1[2];
  char s9281c2f2;
  virtual  ~S9281C2(); // _ZN7S9281C2D1Ev
  virtual void  v3(); // _ZN7S9281C22v3Ev
  virtual void  v4(); // _ZN7S9281C22v4Ev
  virtual void  v5(); // _ZN7S9281C22v5Ev
  S9281C2(); // tgen
};
//SIG(-1 S9281C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9281C2 ::~S9281C2(){ note_dtor("S9281C2", this);}
void  S9281C2 ::v3(){vfunc_called(this, "_ZN7S9281C22v3Ev");}
void  S9281C2 ::v4(){vfunc_called(this, "_ZN7S9281C22v4Ev");}
void  S9281C2 ::v5(){vfunc_called(this, "_ZN7S9281C22v5Ev");}
S9281C2 ::S9281C2(){ note_ctor("S9281C2", this);} // tgen

static void Test_S9281C2()
{
  extern Class_Descriptor cd_S9281C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9281C2, buf);
    S9281C2 *dp, &lv = *(dp=new (buf) S9281C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9281C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9281C2)");
    check_field_offset(lv, s9281c2f0, ABISELECT(8,4), "S9281C2.s9281c2f0");
    check_field_offset(lv, s9281c2f1, ABISELECT(24,16), "S9281C2.s9281c2f1");
    check_field_offset(lv, s9281c2f2, ABISELECT(32,24), "S9281C2.s9281c2f2");
    test_class_info(&lv, &cd_S9281C2);
    dp->~S9281C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9281C2(Test_S9281C2, "S9281C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9281C2C1Ev();
extern void _ZN7S9281C2D1Ev();
Name_Map name_map_S9281C2[] = {
  NSPAIR(_ZN7S9281C2C1Ev),
  NSPAIR(_ZN7S9281C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9281C2[];
extern void _ZN7S9281C2D1Ev();
extern void _ZN7S9281C2D0Ev();
extern void _ZN7S9281C22v3Ev();
extern void _ZN7S9281C22v4Ev();
extern void _ZN7S9281C22v5Ev();
static  VTBL_ENTRY vtc_S9281C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9281C2[0]),
  (VTBL_ENTRY)&_ZN7S9281C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9281C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9281C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9281C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9281C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9281C2[];
extern  VTBL_ENTRY _ZTV7S9281C2[];
Class_Descriptor cd_S9281C2 = {  "S9281C2", // class name
  0,0,//no base classes
  &(vtc_S9281C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9281C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9281C2),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  S9281C1  : S9281C2 {
  ::S16199C4_nt s9281c1f0;
  int s9281c1f1[5];
  char s9281c1f2[2];
  virtual  ~S9281C1(); // _ZN7S9281C1D1Ev
  virtual void  v1(); // _ZN7S9281C12v1Ev
  virtual void  v2(); // _ZN7S9281C12v2Ev
  S9281C1(); // tgen
};
//SIG(1 S9281C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 FC3 Fi[5] Fc[2]}


 S9281C1 ::~S9281C1(){ note_dtor("S9281C1", this);}
void  S9281C1 ::v1(){vfunc_called(this, "_ZN7S9281C12v1Ev");}
void  S9281C1 ::v2(){vfunc_called(this, "_ZN7S9281C12v2Ev");}
S9281C1 ::S9281C1(){ note_ctor("S9281C1", this);} // tgen

static void Test_S9281C1()
{
  extern Class_Descriptor cd_S9281C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,17)];
    init_test(&cd_S9281C1, buf);
    S9281C1 *dp, &lv = *(dp=new (buf) S9281C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,64), "sizeof(S9281C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9281C1)");
    check_base_class_offset(lv, (S9281C2*), 0, "S9281C1");
    check_field_offset(lv, s9281c1f0, ABISELECT(40,28), "S9281C1.s9281c1f0");
    check_field_offset(lv, s9281c1f1, ABISELECT(56,40), "S9281C1.s9281c1f1");
    check_field_offset(lv, s9281c1f2, ABISELECT(76,60), "S9281C1.s9281c1f2");
    test_class_info(&lv, &cd_S9281C1);
    dp->~S9281C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9281C1(Test_S9281C1, "S9281C1", ABISELECT(80,64));

#else // __cplusplus

extern void _ZN7S9281C1C1Ev();
extern void _ZN7S9281C1D1Ev();
Name_Map name_map_S9281C1[] = {
  NSPAIR(_ZN7S9281C1C1Ev),
  NSPAIR(_ZN7S9281C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9281C2;
extern VTBL_ENTRY _ZTI7S9281C2[];
extern  VTBL_ENTRY _ZTV7S9281C2[];
static Base_Class bases_S9281C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9281C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S9281C1[];
extern void _ZN7S9281C1D1Ev();
extern void _ZN7S9281C1D0Ev();
extern void _ZN7S9281C22v3Ev();
extern void _ZN7S9281C22v4Ev();
extern void _ZN7S9281C22v5Ev();
extern void _ZN7S9281C12v1Ev();
extern void _ZN7S9281C12v2Ev();
static  VTBL_ENTRY vtc_S9281C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9281C1[0]),
  (VTBL_ENTRY)&_ZN7S9281C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9281C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9281C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9281C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9281C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9281C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9281C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9281C1[];
extern  VTBL_ENTRY _ZTV7S9281C1[];
Class_Descriptor cd_S9281C1 = {  "S9281C1", // class name
  bases_S9281C1, 1,
  &(vtc_S9281C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,64), // object size
  NSPAIRA(_ZTI7S9281C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9281C1),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  S9294C2  {
  ::S16199C4_nt s9294c2f0;
  int s9294c2f1[2];
  char s9294c2f2;
  virtual  ~S9294C2(); // _ZN7S9294C2D1Ev
  virtual void  v3(); // _ZN7S9294C22v3Ev
  virtual void  v4(); // _ZN7S9294C22v4Ev
  virtual void  v5(); // _ZN7S9294C22v5Ev
  S9294C2(); // tgen
};
//SIG(-1 S9294C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9294C2 ::~S9294C2(){ note_dtor("S9294C2", this);}
void  S9294C2 ::v3(){vfunc_called(this, "_ZN7S9294C22v3Ev");}
void  S9294C2 ::v4(){vfunc_called(this, "_ZN7S9294C22v4Ev");}
void  S9294C2 ::v5(){vfunc_called(this, "_ZN7S9294C22v5Ev");}
S9294C2 ::S9294C2(){ note_ctor("S9294C2", this);} // tgen

static void Test_S9294C2()
{
  extern Class_Descriptor cd_S9294C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9294C2, buf);
    S9294C2 *dp, &lv = *(dp=new (buf) S9294C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9294C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9294C2)");
    check_field_offset(lv, s9294c2f0, ABISELECT(8,4), "S9294C2.s9294c2f0");
    check_field_offset(lv, s9294c2f1, ABISELECT(24,16), "S9294C2.s9294c2f1");
    check_field_offset(lv, s9294c2f2, ABISELECT(32,24), "S9294C2.s9294c2f2");
    test_class_info(&lv, &cd_S9294C2);
    dp->~S9294C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9294C2(Test_S9294C2, "S9294C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9294C2C1Ev();
extern void _ZN7S9294C2D1Ev();
Name_Map name_map_S9294C2[] = {
  NSPAIR(_ZN7S9294C2C1Ev),
  NSPAIR(_ZN7S9294C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9294C2[];
extern void _ZN7S9294C2D1Ev();
extern void _ZN7S9294C2D0Ev();
extern void _ZN7S9294C22v3Ev();
extern void _ZN7S9294C22v4Ev();
extern void _ZN7S9294C22v5Ev();
static  VTBL_ENTRY vtc_S9294C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9294C2[0]),
  (VTBL_ENTRY)&_ZN7S9294C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9294C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9294C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9294C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9294C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9294C2[];
extern  VTBL_ENTRY _ZTV7S9294C2[];
Class_Descriptor cd_S9294C2 = {  "S9294C2", // class name
  0,0,//no base classes
  &(vtc_S9294C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9294C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9294C2),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  S9294C1  : S9294C2 {
  ::S1299C12_nt s9294c1f0;
  int s9294c1f1;
  virtual  ~S9294C1(); // _ZN7S9294C1D1Ev
  virtual void  v1(); // _ZN7S9294C12v1Ev
  virtual void  v2(); // _ZN7S9294C12v2Ev
  S9294C1(); // tgen
};
//SIG(1 S9294C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 FC5{ m Fi[4]} Fi}


 S9294C1 ::~S9294C1(){ note_dtor("S9294C1", this);}
void  S9294C1 ::v1(){vfunc_called(this, "_ZN7S9294C12v1Ev");}
void  S9294C1 ::v2(){vfunc_called(this, "_ZN7S9294C12v2Ev");}
S9294C1 ::S9294C1(){ note_ctor("S9294C1", this);} // tgen

static void Test_S9294C1()
{
  extern Class_Descriptor cd_S9294C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,13)];
    init_test(&cd_S9294C1, buf);
    S9294C1 *dp, &lv = *(dp=new (buf) S9294C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,48), "sizeof(S9294C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9294C1)");
    check_base_class_offset(lv, (S9294C2*), 0, "S9294C1");
    check_field_offset(lv, s9294c1f0, ABISELECT(36,28), "S9294C1.s9294c1f0");
    check_field_offset(lv, s9294c1f1, ABISELECT(52,44), "S9294C1.s9294c1f1");
    test_class_info(&lv, &cd_S9294C1);
    dp->~S9294C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9294C1(Test_S9294C1, "S9294C1", ABISELECT(56,48));

#else // __cplusplus

extern void _ZN7S9294C1C1Ev();
extern void _ZN7S9294C1D1Ev();
Name_Map name_map_S9294C1[] = {
  NSPAIR(_ZN7S9294C1C1Ev),
  NSPAIR(_ZN7S9294C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9294C2;
extern VTBL_ENTRY _ZTI7S9294C2[];
extern  VTBL_ENTRY _ZTV7S9294C2[];
static Base_Class bases_S9294C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9294C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S9294C1[];
extern void _ZN7S9294C1D1Ev();
extern void _ZN7S9294C1D0Ev();
extern void _ZN7S9294C22v3Ev();
extern void _ZN7S9294C22v4Ev();
extern void _ZN7S9294C22v5Ev();
extern void _ZN7S9294C12v1Ev();
extern void _ZN7S9294C12v2Ev();
static  VTBL_ENTRY vtc_S9294C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9294C1[0]),
  (VTBL_ENTRY)&_ZN7S9294C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9294C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9294C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9294C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9294C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9294C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9294C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9294C1[];
extern  VTBL_ENTRY _ZTV7S9294C1[];
Class_Descriptor cd_S9294C1 = {  "S9294C1", // class name
  bases_S9294C1, 1,
  &(vtc_S9294C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,48), // object size
  NSPAIRA(_ZTI7S9294C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9294C1),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  S3196C3  {
  char s3196c3f0;
  virtual  ~S3196C3(); // _ZN7S3196C3D1Ev
  virtual void  v4(); // _ZN7S3196C32v4Ev
  virtual void  v5(); // _ZN7S3196C32v5Ev
  virtual void  v6(); // _ZN7S3196C32v6Ev
  virtual void  v7(); // _ZN7S3196C32v7Ev
  virtual void  v8(); // _ZN7S3196C32v8Ev
  S3196C3(); // tgen
};
//SIG(-1 S3196C3) C1{ vd v1 v2 v3 v4 v5 Fc}


 S3196C3 ::~S3196C3(){ note_dtor("S3196C3", this);}
void  S3196C3 ::v4(){vfunc_called(this, "_ZN7S3196C32v4Ev");}
void  S3196C3 ::v5(){vfunc_called(this, "_ZN7S3196C32v5Ev");}
void  S3196C3 ::v6(){vfunc_called(this, "_ZN7S3196C32v6Ev");}
void  S3196C3 ::v7(){vfunc_called(this, "_ZN7S3196C32v7Ev");}
void  S3196C3 ::v8(){vfunc_called(this, "_ZN7S3196C32v8Ev");}
S3196C3 ::S3196C3(){ note_ctor("S3196C3", this);} // tgen

static void Test_S3196C3()
{
  extern Class_Descriptor cd_S3196C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3196C3, buf);
    S3196C3 *dp, &lv = *(dp=new (buf) S3196C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3196C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3196C3)");
    check_field_offset(lv, s3196c3f0, ABISELECT(8,4), "S3196C3.s3196c3f0");
    test_class_info(&lv, &cd_S3196C3);
    dp->~S3196C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3196C3(Test_S3196C3, "S3196C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3196C3C1Ev();
extern void _ZN7S3196C3D1Ev();
Name_Map name_map_S3196C3[] = {
  NSPAIR(_ZN7S3196C3C1Ev),
  NSPAIR(_ZN7S3196C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S3196C3[];
extern void _ZN7S3196C3D1Ev();
extern void _ZN7S3196C3D0Ev();
extern void _ZN7S3196C32v4Ev();
extern void _ZN7S3196C32v5Ev();
extern void _ZN7S3196C32v6Ev();
extern void _ZN7S3196C32v7Ev();
extern void _ZN7S3196C32v8Ev();
static  VTBL_ENTRY vtc_S3196C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3196C3[0]),
  (VTBL_ENTRY)&_ZN7S3196C3D1Ev,
  (VTBL_ENTRY)&_ZN7S3196C3D0Ev,
  (VTBL_ENTRY)&_ZN7S3196C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3196C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3196C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3196C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3196C32v8Ev,
};
extern VTBL_ENTRY _ZTI7S3196C3[];
extern  VTBL_ENTRY _ZTV7S3196C3[];
Class_Descriptor cd_S3196C3 = {  "S3196C3", // class name
  0,0,//no base classes
  &(vtc_S3196C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3196C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S3196C3),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  S3196C2  : S3196C3 {
  virtual  ~S3196C2(); // _ZN7S3196C2D1Ev
  virtual void  v9(); // _ZN7S3196C22v9Ev
  virtual void  v10(); // _ZN7S3196C23v10Ev
  virtual void  v11(); // _ZN7S3196C23v11Ev
  virtual void  v12(); // _ZN7S3196C23v12Ev
  virtual void  v13(); // _ZN7S3196C23v13Ev
  virtual void  v14(); // _ZN7S3196C23v14Ev
  S3196C2(); // tgen
};
//SIG(-1 S3196C2) C1{ BC2{ vd v7 v8 v9 v10 v11 Fc} vd v1 v2 v3 v4 v5 v6}


 S3196C2 ::~S3196C2(){ note_dtor("S3196C2", this);}
void  S3196C2 ::v9(){vfunc_called(this, "_ZN7S3196C22v9Ev");}
void  S3196C2 ::v10(){vfunc_called(this, "_ZN7S3196C23v10Ev");}
void  S3196C2 ::v11(){vfunc_called(this, "_ZN7S3196C23v11Ev");}
void  S3196C2 ::v12(){vfunc_called(this, "_ZN7S3196C23v12Ev");}
void  S3196C2 ::v13(){vfunc_called(this, "_ZN7S3196C23v13Ev");}
void  S3196C2 ::v14(){vfunc_called(this, "_ZN7S3196C23v14Ev");}
S3196C2 ::S3196C2(){ note_ctor("S3196C2", this);} // tgen

static void Test_S3196C2()
{
  extern Class_Descriptor cd_S3196C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3196C2, buf);
    S3196C2 *dp, &lv = *(dp=new (buf) S3196C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3196C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3196C2)");
    check_base_class_offset(lv, (S3196C3*), 0, "S3196C2");
    test_class_info(&lv, &cd_S3196C2);
    dp->~S3196C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3196C2(Test_S3196C2, "S3196C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3196C2C1Ev();
extern void _ZN7S3196C2D1Ev();
Name_Map name_map_S3196C2[] = {
  NSPAIR(_ZN7S3196C2C1Ev),
  NSPAIR(_ZN7S3196C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3196C3;
extern VTBL_ENTRY _ZTI7S3196C3[];
extern  VTBL_ENTRY _ZTV7S3196C3[];
static Base_Class bases_S3196C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3196C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S3196C2[];
extern void _ZN7S3196C2D1Ev();
extern void _ZN7S3196C2D0Ev();
extern void _ZN7S3196C32v4Ev();
extern void _ZN7S3196C32v5Ev();
extern void _ZN7S3196C32v6Ev();
extern void _ZN7S3196C32v7Ev();
extern void _ZN7S3196C32v8Ev();
extern void _ZN7S3196C22v9Ev();
extern void _ZN7S3196C23v10Ev();
extern void _ZN7S3196C23v11Ev();
extern void _ZN7S3196C23v12Ev();
extern void _ZN7S3196C23v13Ev();
extern void _ZN7S3196C23v14Ev();
static  VTBL_ENTRY vtc_S3196C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3196C2[0]),
  (VTBL_ENTRY)&_ZN7S3196C2D1Ev,
  (VTBL_ENTRY)&_ZN7S3196C2D0Ev,
  (VTBL_ENTRY)&_ZN7S3196C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3196C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3196C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3196C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3196C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3196C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3196C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3196C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3196C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3196C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3196C23v14Ev,
};
extern VTBL_ENTRY _ZTI7S3196C2[];
extern  VTBL_ENTRY _ZTV7S3196C2[];
Class_Descriptor cd_S3196C2 = {  "S3196C2", // class name
  bases_S3196C2, 1,
  &(vtc_S3196C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3196C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3196C2),15, //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  S3196C1  : S3196C2 {
  virtual  ~S3196C1(); // _ZN7S3196C1D1Ev
  virtual void  v1(); // _ZN7S3196C12v1Ev
  virtual void  v2(); // _ZN7S3196C12v2Ev
  virtual void  v3(); // _ZN7S3196C12v3Ev
  S3196C1(); // tgen
};
//SIG(1 S3196C1) C1{ BC2{ BC3{ vd v4 v5 v6 v7 v8 Fc} vd v9 v10 v11 v12 v13 v14} vd v1 v2 v3}


 S3196C1 ::~S3196C1(){ note_dtor("S3196C1", this);}
void  S3196C1 ::v1(){vfunc_called(this, "_ZN7S3196C12v1Ev");}
void  S3196C1 ::v2(){vfunc_called(this, "_ZN7S3196C12v2Ev");}
void  S3196C1 ::v3(){vfunc_called(this, "_ZN7S3196C12v3Ev");}
S3196C1 ::S3196C1(){ note_ctor("S3196C1", this);} // tgen

static void Test_S3196C1()
{
  extern Class_Descriptor cd_S3196C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S3196C1, buf);
    S3196C1 *dp, &lv = *(dp=new (buf) S3196C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S3196C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S3196C1)");
    check_base_class_offset(lv, (S3196C3*)(S3196C2*), 0, "S3196C1");
    check_base_class_offset(lv, (S3196C2*), 0, "S3196C1");
    test_class_info(&lv, &cd_S3196C1);
    dp->~S3196C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS3196C1(Test_S3196C1, "S3196C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S3196C1C1Ev();
extern void _ZN7S3196C1D1Ev();
Name_Map name_map_S3196C1[] = {
  NSPAIR(_ZN7S3196C1C1Ev),
  NSPAIR(_ZN7S3196C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S3196C3;
extern VTBL_ENTRY _ZTI7S3196C3[];
extern  VTBL_ENTRY _ZTV7S3196C3[];
extern Class_Descriptor cd_S3196C2;
extern VTBL_ENTRY _ZTI7S3196C2[];
extern  VTBL_ENTRY _ZTV7S3196C2[];
static Base_Class bases_S3196C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3196C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S3196C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S3196C1[];
extern void _ZN7S3196C1D1Ev();
extern void _ZN7S3196C1D0Ev();
extern void _ZN7S3196C32v4Ev();
extern void _ZN7S3196C32v5Ev();
extern void _ZN7S3196C32v6Ev();
extern void _ZN7S3196C32v7Ev();
extern void _ZN7S3196C32v8Ev();
extern void _ZN7S3196C22v9Ev();
extern void _ZN7S3196C23v10Ev();
extern void _ZN7S3196C23v11Ev();
extern void _ZN7S3196C23v12Ev();
extern void _ZN7S3196C23v13Ev();
extern void _ZN7S3196C23v14Ev();
extern void _ZN7S3196C12v1Ev();
extern void _ZN7S3196C12v2Ev();
extern void _ZN7S3196C12v3Ev();
static  VTBL_ENTRY vtc_S3196C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S3196C1[0]),
  (VTBL_ENTRY)&_ZN7S3196C1D1Ev,
  (VTBL_ENTRY)&_ZN7S3196C1D0Ev,
  (VTBL_ENTRY)&_ZN7S3196C32v4Ev,
  (VTBL_ENTRY)&_ZN7S3196C32v5Ev,
  (VTBL_ENTRY)&_ZN7S3196C32v6Ev,
  (VTBL_ENTRY)&_ZN7S3196C32v7Ev,
  (VTBL_ENTRY)&_ZN7S3196C32v8Ev,
  (VTBL_ENTRY)&_ZN7S3196C22v9Ev,
  (VTBL_ENTRY)&_ZN7S3196C23v10Ev,
  (VTBL_ENTRY)&_ZN7S3196C23v11Ev,
  (VTBL_ENTRY)&_ZN7S3196C23v12Ev,
  (VTBL_ENTRY)&_ZN7S3196C23v13Ev,
  (VTBL_ENTRY)&_ZN7S3196C23v14Ev,
  (VTBL_ENTRY)&_ZN7S3196C12v1Ev,
  (VTBL_ENTRY)&_ZN7S3196C12v2Ev,
  (VTBL_ENTRY)&_ZN7S3196C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S3196C1[];
extern  VTBL_ENTRY _ZTV7S3196C1[];
Class_Descriptor cd_S3196C1 = {  "S3196C1", // class name
  bases_S3196C1, 2,
  &(vtc_S3196C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S3196C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S3196C1),18, //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  S16072C1  {
  ::S1299C12_nt s16072c1f0;
  ::S3351C13_nt s16072c1f1;
  ::S3351C4_nt s16072c1f2;
  ::S15640C5 s16072c1f3;
  ::S15640C5 s16072c1f4;
  ::S15640C5 s16072c1f5;
  void  mf16072c1(); // _ZN8S16072C19mf16072c1Ev
};
//SIG(1 S16072C1) C1{ m FC2{ m Fi[4]} FC3{ m Fi[3]} FC4{ m Fi[2]} FC5{ BC6{ m Fp Fi[2]}} FC5 FC5}


void  S16072C1 ::mf16072c1(){}

static void Test_S16072C1()
{
  {
    init_simple_test("S16072C1");
    S16072C1 lv;
    check2(sizeof(lv), ABISELECT(88,72), "sizeof(S16072C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16072C1)");
    check_field_offset(lv, s16072c1f0, 0, "S16072C1.s16072c1f0");
    check_field_offset(lv, s16072c1f1, 16, "S16072C1.s16072c1f1");
    check_field_offset(lv, s16072c1f2, 28, "S16072C1.s16072c1f2");
    check_field_offset(lv, s16072c1f3, ABISELECT(40,36), "S16072C1.s16072c1f3");
    check_field_offset(lv, s16072c1f4, ABISELECT(56,48), "S16072C1.s16072c1f4");
    check_field_offset(lv, s16072c1f5, ABISELECT(72,60), "S16072C1.s16072c1f5");
  }
}
static Arrange_To_Call_Me vS16072C1(Test_S16072C1, "S16072C1", ABISELECT(88,72));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19498C3_nt  : virtual S2264C38 {
  ~S19498C3_nt(); // tgen
  S19498C3_nt(); // tgen
};
//SIG(-1 S19498C3_nt) C1{ VBC2{ m}}


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

//skip512 S19498C3_nt

#else // __cplusplus

extern void _ZN11S19498C3_ntC1Ev();
extern void _ZN11S19498C3_ntD1Ev();
Name_Map name_map_S19498C3_nt[] = {
  NSPAIR(_ZN11S19498C3_ntC1Ev),
  NSPAIR(_ZN11S19498C3_ntD1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
static Base_Class bases_S19498C3_nt[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI11S19498C3_nt[];
static  VTBL_ENTRY vtc_S19498C3_nt[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19498C3_nt[0]),
};
extern VTBL_ENTRY _ZTV11S19498C3_nt[];
static  VTT_ENTRY vtt_S19498C3_nt[] = {
  {&(_ZTV11S19498C3_nt[3]),  3,3},
};
extern VTBL_ENTRY _ZTI11S19498C3_nt[];
VTBL_ENTRY *P__ZTI11S19498C3_nt = _ZTI11S19498C3_nt; 
extern  VTBL_ENTRY _ZTV11S19498C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19498C3_nt[];
Class_Descriptor cd_S19498C3_nt = {  "S19498C3_nt", // class name
  bases_S19498C3_nt, 1,
  &(vtc_S19498C3_nt[0]), // expected_vtbl_contents
  &(vtt_S19498C3_nt[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S19498C3_nt),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV11S19498C3_nt),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT11S19498C3_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  S19498C6  : S2264C28 , virtual S2264C24 {
  ~S19498C6(); // tgen
  S19498C6(); // tgen
};
//SIG(-1 S19498C6) C1{ BC2{ m} VBC3{ m}}


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

static void Test_S19498C6()
{
  extern Class_Descriptor cd_S19498C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19498C6, buf);
    S19498C6 *dp, &lv = *(dp=new (buf) S19498C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19498C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19498C6)");
    check_base_class_offset(lv, (S2264C28*), 0, "S19498C6");
    check_base_class_offset(lv, (S2264C24*), 0, "S19498C6");
    test_class_info(&lv, &cd_S19498C6);
    dp->~S19498C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19498C6(Test_S19498C6, "S19498C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19498C6C1Ev();
extern void _ZN8S19498C6D1Ev();
Name_Map name_map_S19498C6[] = {
  NSPAIR(_ZN8S19498C6C1Ev),
  NSPAIR(_ZN8S19498C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
static Base_Class bases_S19498C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19498C6[];
static  VTBL_ENTRY vtc_S19498C6[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19498C6[0]),
};
extern VTBL_ENTRY _ZTV8S19498C6[];
static  VTT_ENTRY vtt_S19498C6[] = {
  {&(_ZTV8S19498C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19498C6[];
extern  VTBL_ENTRY _ZTV8S19498C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19498C6[];
Class_Descriptor cd_S19498C6 = {  "S19498C6", // class name
  bases_S19498C6, 2,
  &(vtc_S19498C6[0]), // expected_vtbl_contents
  &(vtt_S19498C6[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19498C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19498C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19498C6),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  S19498C5  : virtual S2264C38 , S19498C6 , virtual S2264C21 {
  ~S19498C5(); // tgen
  S19498C5(); // tgen
};
//SIG(-1 S19498C5) C1{ VBC2{ m} BC3{ BC4{ m} VBC5{ m}} VBC6{ m}}


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

static void Test_S19498C5()
{
  extern Class_Descriptor cd_S19498C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19498C5, buf);
    S19498C5 *dp, &lv = *(dp=new (buf) S19498C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19498C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19498C5)");
    check_base_class_offset(lv, (S2264C38*), 0, "S19498C5");
    check_base_class_offset(lv, (S2264C28*)(S19498C6*), 0, "S19498C5");
    check_base_class_offset(lv, (S2264C24*)(S19498C6*), 0, "S19498C5");
    check_base_class_offset(lv, (S19498C6*), 0, "S19498C5");
    check_base_class_offset(lv, (S2264C21*), 0, "S19498C5");
    test_class_info(&lv, &cd_S19498C5);
    dp->~S19498C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19498C5(Test_S19498C5, "S19498C5", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19498C5C1Ev();
extern void _ZN8S19498C5D1Ev();
Name_Map name_map_S19498C5[] = {
  NSPAIR(_ZN8S19498C5C1Ev),
  NSPAIR(_ZN8S19498C5D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19498C6;
extern VTBL_ENTRY _ZTI8S19498C6[];
extern  VTBL_ENTRY _ZTV8S19498C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19498C6[];
extern Class_Descriptor cd_S2264C21;
extern VTBL_ENTRY _ZTI8S2264C21[];
static Base_Class bases_S19498C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19498C6,    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_S2264C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI8S19498C5[];
static  VTBL_ENTRY vtc_S19498C5[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19498C5[0]),
};
extern VTBL_ENTRY _ZTV8S19498C5[];
static  VTBL_ENTRY _tg__ZTV8S19498C6__8S19498C5[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19498C6[0]),
};
static  VTT_ENTRY vtt_S19498C5[] = {
  {&(_ZTV8S19498C5[5]),  5,5},
  {&(_tg__ZTV8S19498C6__8S19498C5[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19498C5[];
extern  VTBL_ENTRY _ZTV8S19498C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19498C5[];
Class_Descriptor cd_S19498C5 = {  "S19498C5", // class name
  bases_S19498C5, 5,
  &(vtc_S19498C5[0]), // expected_vtbl_contents
  &(vtt_S19498C5[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19498C5),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19498C5),5, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19498C5),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  S19498C2  : S19498C3_nt , virtual S19498C5 {
  ~S19498C2(); // tgen
  S19498C2(); // tgen
};
//SIG(-1 S19498C2) C1{ BC2{ VBC3{ m}} VBC4{ VBC3 BC5{ BC6{ m} VBC7{ m}} VBC8{ m}}}


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

static void Test_S19498C2()
{
  extern Class_Descriptor cd_S19498C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19498C2, buf);
    S19498C2 *dp, &lv = *(dp=new (buf) S19498C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19498C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19498C2)");
    check_base_class_offset(lv, (S2264C38*)(S19498C3_nt*), 0, "S19498C2");
    check_base_class_offset(lv, (S2264C38*)(S19498C5*), 0, "S19498C2");
    check_base_class_offset(lv, (S19498C3_nt*), 0, "S19498C2");
    check_base_class_offset(lv, (S2264C28*)(S19498C6*)(S19498C5*), ABISELECT(8,4), "S19498C2");
    check_base_class_offset(lv, (S2264C24*)(S19498C6*)(S19498C5*), 0, "S19498C2");
    check_base_class_offset(lv, (S19498C6*)(S19498C5*), ABISELECT(8,4), "S19498C2");
    check_base_class_offset(lv, (S2264C21*)(S19498C5*), 0, "S19498C2");
    check_base_class_offset(lv, (S19498C5*), ABISELECT(8,4), "S19498C2");
    test_class_info(&lv, &cd_S19498C2);
    dp->~S19498C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19498C2(Test_S19498C2, "S19498C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19498C2C1Ev();
extern void _ZN8S19498C2D1Ev();
Name_Map name_map_S19498C2[] = {
  NSPAIR(_ZN8S19498C2C1Ev),
  NSPAIR(_ZN8S19498C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S19498C3_nt;
extern VTBL_ENTRY _ZTI11S19498C3_nt[];
extern  VTBL_ENTRY _ZTV11S19498C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19498C3_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19498C6;
extern VTBL_ENTRY _ZTI8S19498C6[];
extern  VTBL_ENTRY _ZTV8S19498C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19498C6[];
extern Class_Descriptor cd_S2264C21;
extern VTBL_ENTRY _ZTI8S2264C21[];
extern Class_Descriptor cd_S19498C5;
extern VTBL_ENTRY _ZTI8S19498C5[];
extern  VTBL_ENTRY _ZTV8S19498C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19498C5[];
static Base_Class bases_S19498C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19498C3_nt,    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_S2264C28,    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
    4, //immediately_derived
  0, 0},
  {&cd_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19498C6,    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
    1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2264C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19498C5,    ABISELECT(8,4), //bcp->offset
    6, //bcp->virtual_function_table_offset
    5, //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 _ZTI8S19498C2[];
static  VTBL_ENTRY vtc_S19498C2[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19498C2[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19498C2[0]),
};
extern VTBL_ENTRY _ZTV8S19498C2[];
static  VTBL_ENTRY _tg__ZTV11S19498C3_nt__8S19498C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI11S19498C3_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19498C5__8S19498C2[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19498C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19498C68S19498C5__8S19498C2[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19498C6[0]),
};
static  VTT_ENTRY vtt_S19498C2[] = {
  {&(_ZTV8S19498C2[6]),  6,11},
  {&(_tg__ZTV11S19498C3_nt__8S19498C2[3]),  3,3},
  {&(_ZTV8S19498C2[11]),  11,11},
  {&(_tg__ZTV8S19498C5__8S19498C2[5]),  5,5},
  {&(_tg__ZTV8S19498C68S19498C5__8S19498C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19498C2[];
extern  VTBL_ENTRY _ZTV8S19498C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19498C2[];
Class_Descriptor cd_S19498C2 = {  "S19498C2", // class name
  bases_S19498C2, 7,
  &(vtc_S19498C2[0]), // expected_vtbl_contents
  &(vtt_S19498C2[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19498C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19498C2),11, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19498C2),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S19498C10  : virtual S19498C5 {
  ~S19498C10(); // tgen
  S19498C10(); // tgen
};
//SIG(-1 S19498C10) C1{ VBC2{ VBC3{ m} BC4{ BC5{ m} VBC6{ m}} VBC7{ m}}}


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

static void Test_S19498C10()
{
  extern Class_Descriptor cd_S19498C10;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19498C10, buf);
    S19498C10 *dp, &lv = *(dp=new (buf) S19498C10());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19498C10)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19498C10)");
    check_base_class_offset(lv, (S2264C38*)(S19498C5*), 0, "S19498C10");
    check_base_class_offset(lv, (S2264C28*)(S19498C6*)(S19498C5*), 0, "S19498C10");
    check_base_class_offset(lv, (S2264C24*)(S19498C6*)(S19498C5*), 0, "S19498C10");
    check_base_class_offset(lv, (S19498C6*)(S19498C5*), 0, "S19498C10");
    check_base_class_offset(lv, (S2264C21*)(S19498C5*), 0, "S19498C10");
    check_base_class_offset(lv, (S19498C5*), 0, "S19498C10");
    test_class_info(&lv, &cd_S19498C10);
    dp->~S19498C10();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19498C10(Test_S19498C10, "S19498C10", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN9S19498C10C1Ev();
extern void _ZN9S19498C10D1Ev();
Name_Map name_map_S19498C10[] = {
  NSPAIR(_ZN9S19498C10C1Ev),
  NSPAIR(_ZN9S19498C10D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19498C6;
extern VTBL_ENTRY _ZTI8S19498C6[];
extern  VTBL_ENTRY _ZTV8S19498C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19498C6[];
extern Class_Descriptor cd_S2264C21;
extern VTBL_ENTRY _ZTI8S2264C21[];
extern Class_Descriptor cd_S19498C5;
extern VTBL_ENTRY _ZTI8S19498C5[];
extern  VTBL_ENTRY _ZTV8S19498C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19498C5[];
static Base_Class bases_S19498C10[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19498C6,    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
    1, //init_seq
    5, //immediately_derived
  0, 0},
  {&cd_S2264C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19498C5,    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
    2, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI9S19498C10[];
static  VTBL_ENTRY vtc_S19498C10[] = {
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19498C10[0]),
};
extern VTBL_ENTRY _ZTV9S19498C10[];
static  VTBL_ENTRY _tg__ZTV8S19498C5__9S19498C10[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19498C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19498C68S19498C5__9S19498C10[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19498C6[0]),
};
static  VTT_ENTRY vtt_S19498C10[] = {
  {&(_ZTV9S19498C10[6]),  6,6},
  {&(_ZTV9S19498C10[6]),  6,6},
  {&(_tg__ZTV8S19498C5__9S19498C10[5]),  5,5},
  {&(_tg__ZTV8S19498C68S19498C5__9S19498C10[3]),  3,3},
};
extern VTBL_ENTRY _ZTI9S19498C10[];
extern  VTBL_ENTRY _ZTV9S19498C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19498C10[];
Class_Descriptor cd_S19498C10 = {  "S19498C10", // class name
  bases_S19498C10, 6,
  &(vtc_S19498C10[0]), // expected_vtbl_contents
  &(vtt_S19498C10[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI9S19498C10),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV9S19498C10),6, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT9S19498C10),4, //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  S19498C1  : virtual S19498C2 , S19498C10 {
  ~S19498C1(); // tgen
  S19498C1(); // tgen
};
//SIG(1 S19498C1) C1{ VBC2{ BC3{ VBC4{ m}} VBC5{ VBC4 BC6{ BC7{ m} VBC8{ m}} VBC9{ m}}} BC10{ VBC5}}


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

static void Test_S19498C1()
{
  extern Class_Descriptor cd_S19498C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19498C1, buf);
    S19498C1 *dp, &lv = *(dp=new (buf) S19498C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19498C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19498C1)");
    check_base_class_offset(lv, (S2264C38*)(S19498C3_nt*)(S19498C2*), 0, "S19498C1");
    check_base_class_offset(lv, (S2264C38*)(S19498C5*), 0, "S19498C1");
    check_base_class_offset(lv, (S19498C3_nt*)(S19498C2*), ABISELECT(8,4), "S19498C1");
    check_base_class_offset(lv, (S2264C28*)(S19498C6*)(S19498C5*), 0, "S19498C1");
    check_base_class_offset(lv, (S2264C24*)(S19498C6*)(S19498C5*), 0, "S19498C1");
    check_base_class_offset(lv, (S19498C6*)(S19498C5*), 0, "S19498C1");
    check_base_class_offset(lv, (S2264C21*)(S19498C5*), 0, "S19498C1");
    check_base_class_offset(lv, (S19498C5*)(S19498C2*), 0, "S19498C1");
    check_base_class_offset(lv, (S19498C5*)(S19498C10*), 0, "S19498C1");
    check_base_class_offset(lv, (S19498C2*), ABISELECT(8,4), "S19498C1");
    check_base_class_offset(lv, (S19498C10*), 0, "S19498C1");
    test_class_info(&lv, &cd_S19498C1);
    dp->~S19498C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19498C1(Test_S19498C1, "S19498C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19498C1C1Ev();
extern void _ZN8S19498C1D1Ev();
Name_Map name_map_S19498C1[] = {
  NSPAIR(_ZN8S19498C1C1Ev),
  NSPAIR(_ZN8S19498C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S19498C3_nt;
extern VTBL_ENTRY _ZTI11S19498C3_nt[];
extern  VTBL_ENTRY _ZTV11S19498C3_nt[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT11S19498C3_nt[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S19498C6;
extern VTBL_ENTRY _ZTI8S19498C6[];
extern  VTBL_ENTRY _ZTV8S19498C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19498C6[];
extern Class_Descriptor cd_S2264C21;
extern VTBL_ENTRY _ZTI8S2264C21[];
extern Class_Descriptor cd_S19498C5;
extern VTBL_ENTRY _ZTI8S19498C5[];
extern  VTBL_ENTRY _ZTV8S19498C5[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19498C5[];
extern Class_Descriptor cd_S19498C2;
extern VTBL_ENTRY _ZTI8S19498C2[];
extern  VTBL_ENTRY _ZTV8S19498C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19498C2[];
extern Class_Descriptor cd_S19498C10;
extern VTBL_ENTRY _ZTI9S19498C10[];
extern  VTBL_ENTRY _ZTV9S19498C10[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT9S19498C10[];
static Base_Class bases_S19498C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(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_S19498C3_nt,    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
    7, //bcp->base_subarray_index_in_construction_vtbl_array
    3, //init_seq
    7, //immediately_derived
  0, 0},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19498C6,    0, //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
    1, //init_seq
    6, //immediately_derived
  0, 0},
  {&cd_S2264C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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, 1},
  {&cd_S19498C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    5, //bcp->index_in_construction_vtbl_array
    9, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S19498C2,    ABISELECT(8,4), //bcp->offset
    7, //bcp->virtual_function_table_offset
    6, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    6, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {&cd_S19498C10,    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
    5, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19498C1[];
static  VTBL_ENTRY vtc_S19498C1[] = {
  ABISELECT(8,4),
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19498C1[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19498C1[0]),
};
extern VTBL_ENTRY _ZTV8S19498C1[];
static  VTBL_ENTRY _tg__ZTV9S19498C10__8S19498C1[] = {
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI9S19498C10[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19498C2__8S19498C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19498C2[0]),
};
static  VTBL_ENTRY _tg__ZTV11S19498C3_nt8S19498C2__8S19498C1[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI11S19498C3_nt[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19498C5__8S19498C2__8S19498C1[] = {
  0,
  0,
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19498C2[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19498C5__8S19498C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19498C5[0]),
};
static  VTBL_ENTRY _tg__ZTV8S19498C68S19498C5__8S19498C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19498C6[0]),
};
static  VTT_ENTRY vtt_S19498C1[] = {
  {&(_ZTV8S19498C1[7]),  7,13},
  {&(_tg__ZTV9S19498C10__8S19498C1[6]),  6,6},
  {&(_tg__ZTV9S19498C10__8S19498C1[6]),  6,6},
  {&(_ZTV8S19498C1[13]),  13,13},
  {&(_ZTV8S19498C1[7]),  7,13},
  {&(_tg__ZTV8S19498C2__8S19498C1[6]),  6,6},
  {&(_tg__ZTV11S19498C3_nt8S19498C2__8S19498C1[3]),  3,3},
  {&(_tg__ZTV8S19498C5__8S19498C2__8S19498C1[5]),  5,5},
  {&(_tg__ZTV8S19498C5__8S19498C1[5]),  5,5},
  {&(_tg__ZTV8S19498C68S19498C5__8S19498C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19498C1[];
extern  VTBL_ENTRY _ZTV8S19498C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19498C1[];
Class_Descriptor cd_S19498C1 = {  "S19498C1", // class name
  bases_S19498C1, 9,
  &(vtc_S19498C1[0]), // expected_vtbl_contents
  &(vtt_S19498C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19498C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19498C1),13, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19498C1),10, //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  S9278C2  {
  ::S16199C4_nt s9278c2f0;
  int s9278c2f1[2];
  char s9278c2f2;
  virtual  ~S9278C2(); // _ZN7S9278C2D1Ev
  virtual void  v3(); // _ZN7S9278C22v3Ev
  virtual void  v4(); // _ZN7S9278C22v4Ev
  virtual void  v5(); // _ZN7S9278C22v5Ev
  S9278C2(); // tgen
};
//SIG(-1 S9278C2) C1{ vd v1 v2 v3 FC2{ m Fp Fi FC3{ m}} Fi[2] Fc}


 S9278C2 ::~S9278C2(){ note_dtor("S9278C2", this);}
void  S9278C2 ::v3(){vfunc_called(this, "_ZN7S9278C22v3Ev");}
void  S9278C2 ::v4(){vfunc_called(this, "_ZN7S9278C22v4Ev");}
void  S9278C2 ::v5(){vfunc_called(this, "_ZN7S9278C22v5Ev");}
S9278C2 ::S9278C2(){ note_ctor("S9278C2", this);} // tgen

static void Test_S9278C2()
{
  extern Class_Descriptor cd_S9278C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,8)];
    init_test(&cd_S9278C2, buf);
    S9278C2 *dp, &lv = *(dp=new (buf) S9278C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S9278C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9278C2)");
    check_field_offset(lv, s9278c2f0, ABISELECT(8,4), "S9278C2.s9278c2f0");
    check_field_offset(lv, s9278c2f1, ABISELECT(24,16), "S9278C2.s9278c2f1");
    check_field_offset(lv, s9278c2f2, ABISELECT(32,24), "S9278C2.s9278c2f2");
    test_class_info(&lv, &cd_S9278C2);
    dp->~S9278C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9278C2(Test_S9278C2, "S9278C2", ABISELECT(40,28));

#else // __cplusplus

extern void _ZN7S9278C2C1Ev();
extern void _ZN7S9278C2D1Ev();
Name_Map name_map_S9278C2[] = {
  NSPAIR(_ZN7S9278C2C1Ev),
  NSPAIR(_ZN7S9278C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9278C2[];
extern void _ZN7S9278C2D1Ev();
extern void _ZN7S9278C2D0Ev();
extern void _ZN7S9278C22v3Ev();
extern void _ZN7S9278C22v4Ev();
extern void _ZN7S9278C22v5Ev();
static  VTBL_ENTRY vtc_S9278C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9278C2[0]),
  (VTBL_ENTRY)&_ZN7S9278C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9278C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9278C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9278C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9278C22v5Ev,
};
extern VTBL_ENTRY _ZTI7S9278C2[];
extern  VTBL_ENTRY _ZTV7S9278C2[];
Class_Descriptor cd_S9278C2 = {  "S9278C2", // class name
  0,0,//no base classes
  &(vtc_S9278C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,28), // object size
  NSPAIRA(_ZTI7S9278C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9278C2),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  S9278C1  : S9278C2 {
  ::S16199C4_nt s9278c1f0;
  int s9278c1f1;
  ::S16199C4_nt s9278c1f2;
  virtual  ~S9278C1(); // _ZN7S9278C1D1Ev
  virtual void  v1(); // _ZN7S9278C12v1Ev
  virtual void  v2(); // _ZN7S9278C12v2Ev
  S9278C1(); // tgen
};
//SIG(1 S9278C1) C1{ BC2{ vd v3 v4 v5 FC3{ m Fp Fi FC4{ m}} Fi[2] Fc} vd v1 v2 FC3 Fi FC3}


 S9278C1 ::~S9278C1(){ note_dtor("S9278C1", this);}
void  S9278C1 ::v1(){vfunc_called(this, "_ZN7S9278C12v1Ev");}
void  S9278C1 ::v2(){vfunc_called(this, "_ZN7S9278C12v2Ev");}
S9278C1 ::S9278C1(){ note_ctor("S9278C1", this);} // tgen

static void Test_S9278C1()
{
  extern Class_Descriptor cd_S9278C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(11,15)];
    init_test(&cd_S9278C1, buf);
    S9278C1 *dp, &lv = *(dp=new (buf) S9278C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,56), "sizeof(S9278C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9278C1)");
    check_base_class_offset(lv, (S9278C2*), 0, "S9278C1");
    check_field_offset(lv, s9278c1f0, ABISELECT(40,28), "S9278C1.s9278c1f0");
    check_field_offset(lv, s9278c1f1, ABISELECT(56,40), "S9278C1.s9278c1f1");
    check_field_offset(lv, s9278c1f2, ABISELECT(64,44), "S9278C1.s9278c1f2");
    test_class_info(&lv, &cd_S9278C1);
    dp->~S9278C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9278C1(Test_S9278C1, "S9278C1", ABISELECT(80,56));

#else // __cplusplus

extern void _ZN7S9278C1C1Ev();
extern void _ZN7S9278C1D1Ev();
Name_Map name_map_S9278C1[] = {
  NSPAIR(_ZN7S9278C1C1Ev),
  NSPAIR(_ZN7S9278C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9278C2;
extern VTBL_ENTRY _ZTI7S9278C2[];
extern  VTBL_ENTRY _ZTV7S9278C2[];
static Base_Class bases_S9278C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9278C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S9278C1[];
extern void _ZN7S9278C1D1Ev();
extern void _ZN7S9278C1D0Ev();
extern void _ZN7S9278C22v3Ev();
extern void _ZN7S9278C22v4Ev();
extern void _ZN7S9278C22v5Ev();
extern void _ZN7S9278C12v1Ev();
extern void _ZN7S9278C12v2Ev();
static  VTBL_ENTRY vtc_S9278C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9278C1[0]),
  (VTBL_ENTRY)&_ZN7S9278C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9278C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9278C22v3Ev,
  (VTBL_ENTRY)&_ZN7S9278C22v4Ev,
  (VTBL_ENTRY)&_ZN7S9278C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9278C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9278C12v2Ev,
};
extern VTBL_ENTRY _ZTI7S9278C1[];
extern  VTBL_ENTRY _ZTV7S9278C1[];
Class_Descriptor cd_S9278C1 = {  "S9278C1", // class name
  bases_S9278C1, 1,
  &(vtc_S9278C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,56), // object size
  NSPAIRA(_ZTI7S9278C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9278C1),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  S5898C6  : S2264C28 , virtual S2264C38 {
  ~S5898C6(); // tgen
  S5898C6(); // tgen
};
//SIG(-1 S5898C6) C1{ BC2{ m} VBC3{ m}}


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

static void Test_S5898C6()
{
  extern Class_Descriptor cd_S5898C6;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5898C6, buf);
    S5898C6 *dp, &lv = *(dp=new (buf) S5898C6());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5898C6)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5898C6)");
    check_base_class_offset(lv, (S2264C28*), 0, "S5898C6");
    check_base_class_offset(lv, (S2264C38*), 0, "S5898C6");
    test_class_info(&lv, &cd_S5898C6);
    dp->~S5898C6();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5898C6(Test_S5898C6, "S5898C6", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S5898C6C1Ev();
extern void _ZN7S5898C6D1Ev();
Name_Map name_map_S5898C6[] = {
  NSPAIR(_ZN7S5898C6C1Ev),
  NSPAIR(_ZN7S5898C6D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
static Base_Class bases_S5898C6[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S5898C6[];
static  VTBL_ENTRY vtc_S5898C6[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S5898C6[0]),
};
extern VTBL_ENTRY _ZTV7S5898C6[];
static  VTT_ENTRY vtt_S5898C6[] = {
  {&(_ZTV7S5898C6[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5898C6[];
extern  VTBL_ENTRY _ZTV7S5898C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5898C6[];
Class_Descriptor cd_S5898C6 = {  "S5898C6", // class name
  bases_S5898C6, 2,
  &(vtc_S5898C6[0]), // expected_vtbl_contents
  &(vtt_S5898C6[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5898C6),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S5898C6),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5898C6),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  S5898C7  : S2264C28 {
  virtual  ~S5898C7(); // _ZN7S5898C7D1Ev
  S5898C7(); // tgen
};
//SIG(-1 S5898C7) C1{ BC2{ m} vd}


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

static void Test_S5898C7()
{
  extern Class_Descriptor cd_S5898C7;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S5898C7, buf);
    S5898C7 *dp, &lv = *(dp=new (buf) S5898C7());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S5898C7)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5898C7)");
    check_base_class_offset(lv, (S2264C28*), 0, "S5898C7");
    test_class_info(&lv, &cd_S5898C7);
    dp->~S5898C7();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5898C7(Test_S5898C7, "S5898C7", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S5898C7C1Ev();
extern void _ZN7S5898C7D1Ev();
Name_Map name_map_S5898C7[] = {
  NSPAIR(_ZN7S5898C7C1Ev),
  NSPAIR(_ZN7S5898C7D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S5898C7[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S5898C7[];
extern void _ZN7S5898C7D1Ev();
extern void _ZN7S5898C7D0Ev();
static  VTBL_ENTRY vtc_S5898C7[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S5898C7[0]),
  (VTBL_ENTRY)&_ZN7S5898C7D1Ev,
  (VTBL_ENTRY)&_ZN7S5898C7D0Ev,
};
extern VTBL_ENTRY _ZTI7S5898C7[];
extern  VTBL_ENTRY _ZTV7S5898C7[];
Class_Descriptor cd_S5898C7 = {  "S5898C7", // class name
  bases_S5898C7, 1,
  &(vtc_S5898C7[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S5898C7),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S5898C7),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  S5898C4  : virtual S2264C28 , virtual S2264C38 , virtual S5898C6 , S5898C7 {
  virtual  ~S5898C4(); // _ZN7S5898C4D2Ev
  S5898C4(); // tgen
};
//SIG(-1 S5898C4) C1{ VBC2{ m} VBC3{ m} VBC4{ BC2 VBC3} BC5{ BC2 vd} vd}


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

static void Test_S5898C4()
{
  extern Class_Descriptor cd_S5898C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S5898C4, buf);
    S5898C4 *dp, &lv = *(dp=new (buf) S5898C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S5898C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5898C4)");
    /*is_ambiguous_... S5898C4::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*), ABISELECT(8,4), "S5898C4");
    check_base_class_offset(lv, (S2264C38*), 0, "S5898C4");
    check_base_class_offset(lv, (S2264C38*)(S5898C6*), 0, "S5898C4");
    check_base_class_offset(lv, (S2264C28*)(S5898C6*), ABISELECT(16,8), "S5898C4");
    check_base_class_offset(lv, (S5898C6*), ABISELECT(16,8), "S5898C4");
    check_base_class_offset(lv, (S2264C28*)(S5898C7*), 0, "S5898C4");
    check_base_class_offset(lv, (S5898C7*), 0, "S5898C4");
    test_class_info(&lv, &cd_S5898C4);
    dp->~S5898C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5898C4(Test_S5898C4, "S5898C4", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S5898C4C1Ev();
extern void _ZN7S5898C4D2Ev();
Name_Map name_map_S5898C4[] = {
  NSPAIR(_ZN7S5898C4C1Ev),
  NSPAIR(_ZN7S5898C4D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S5898C6;
extern VTBL_ENTRY _ZTI7S5898C6[];
extern  VTBL_ENTRY _ZTV7S5898C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5898C6[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S5898C7;
extern VTBL_ENTRY _ZTI7S5898C7[];
extern  VTBL_ENTRY _ZTV7S5898C7[];
static Base_Class bases_S5898C4[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C28,    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_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C28,    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_S5898C6,    ABISELECT(16,8), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5898C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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 _ZTI7S5898C4[];
extern void _ZN7S5898C4D1Ev();
extern void _ZN7S5898C4D0Ev();
static  VTBL_ENTRY vtc_S5898C4[] = {
  ABISELECT(16,8),
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI7S5898C4[0]),
  (VTBL_ENTRY)&_ZN7S5898C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5898C4D0Ev,
  ABISELECT(-16,-8),
  ABISELECT(-16,-8),
  (VTBL_ENTRY)&(_ZTI7S5898C4[0]),
};
extern VTBL_ENTRY _ZTV7S5898C4[];
static  VTBL_ENTRY _tg__ZTV7S5898C6__7S5898C4[] = {
  ABISELECT(-16,-8),
  0,
  (VTBL_ENTRY)&(_ZTI7S5898C6[0]),
};
static  VTT_ENTRY vtt_S5898C4[] = {
  {&(_ZTV7S5898C4[5]),  5,10},
  {&(_ZTV7S5898C4[10]),  10,10},
  {&(_tg__ZTV7S5898C6__7S5898C4[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5898C4[];
extern  VTBL_ENTRY _ZTV7S5898C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5898C4[];
Class_Descriptor cd_S5898C4 = {  "S5898C4", // class name
  bases_S5898C4, 6,
  &(vtc_S5898C4[0]), // expected_vtbl_contents
  &(vtt_S5898C4[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S5898C4),ABISELECT(88,48), //typeinfo_var
  NSPAIRA(_ZTV7S5898C4),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5898C4),3, //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  S5898C1  : S3351C8_nt , virtual S2264C38 , S5898C4 {
  virtual  ~S5898C1(); // _ZN7S5898C1D2Ev
  S5898C1(); // tgen
};
//SIG(1 S5898C1) C1{ BC2{ m Fi} VBC3{ m} BC4{ VBC5{ m} VBC3 VBC6{ BC5 VBC3} BC7{ BC5 vd} vd} vd}


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

static void Test_S5898C1()
{
  extern Class_Descriptor cd_S5898C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S5898C1, buf);
    S5898C1 *dp, &lv = *(dp=new (buf) S5898C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S5898C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5898C1)");
    check_base_class_offset(lv, (S3351C8_nt*), ABISELECT(8,4), "S5898C1");
    check_base_class_offset(lv, (S2264C38*), 0, "S5898C1");
    check_base_class_offset(lv, (S2264C38*)(S5898C4*), 0, "S5898C1");
    check_base_class_offset(lv, (S2264C38*)(S5898C6*), 0, "S5898C1");
    /*is_ambiguous_... S5898C4::S2264C28 */ AMB_check_base_class_offset(lv, (S2264C28*)(S5898C4*), ABISELECT(12,8), "S5898C1");
    check_base_class_offset(lv, (S2264C28*)(S5898C6*), ABISELECT(16,12), "S5898C1");
    check_base_class_offset(lv, (S5898C6*)(S5898C4*), ABISELECT(16,12), "S5898C1");
    check_base_class_offset(lv, (S2264C28*)(S5898C7*)(S5898C4*), 0, "S5898C1");
    check_base_class_offset(lv, (S5898C7*)(S5898C4*), 0, "S5898C1");
    check_base_class_offset(lv, (S5898C4*), 0, "S5898C1");
    test_class_info(&lv, &cd_S5898C1);
    dp->~S5898C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5898C1(Test_S5898C1, "S5898C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S5898C1C1Ev();
extern void _ZN7S5898C1D2Ev();
Name_Map name_map_S5898C1[] = {
  NSPAIR(_ZN7S5898C1C1Ev),
  NSPAIR(_ZN7S5898C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S3351C8_nt;
extern VTBL_ENTRY _ZTI10S3351C8_nt[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S5898C6;
extern VTBL_ENTRY _ZTI7S5898C6[];
extern  VTBL_ENTRY _ZTV7S5898C6[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5898C6[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S5898C7;
extern VTBL_ENTRY _ZTI7S5898C7[];
extern  VTBL_ENTRY _ZTV7S5898C7[];
extern Class_Descriptor cd_S5898C4;
extern VTBL_ENTRY _ZTI7S5898C4[];
extern  VTBL_ENTRY _ZTV7S5898C4[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5898C4[];
static Base_Class bases_S5898C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3351C8_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},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C28,    ABISELECT(12,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
    7, //immediately_derived
  0, 1},
  {&cd_S2264C28,    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, 0},
  {&cd_S5898C6,    ABISELECT(16,12), //bcp->offset
    7, //bcp->virtual_function_table_offset
    3, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    1, //init_seq
    7, //immediately_derived
  0, 1},
  {&cd_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S5898C7,    0, //bcp->offset
    -1, //bcp->virtual_function_table_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
    7, //immediately_derived
  0, 0},
  {&cd_S5898C4,    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 _ZTI7S5898C1[];
extern void _ZN7S5898C1D1Ev();
extern void _ZN7S5898C1D0Ev();
static  VTBL_ENTRY vtc_S5898C1[] = {
  ABISELECT(16,12),
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S5898C1[0]),
  (VTBL_ENTRY)&_ZN7S5898C1D1Ev,
  (VTBL_ENTRY)&_ZN7S5898C1D0Ev,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S5898C1[0]),
};
extern VTBL_ENTRY _ZTV7S5898C1[];
extern void _ZN7S5898C4D1Ev();
extern void _ZN7S5898C4D0Ev();
static  VTBL_ENTRY _tg__ZTV7S5898C4__7S5898C1[] = {
  ABISELECT(16,12),
  0,
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S5898C4[0]),
  (VTBL_ENTRY)&_ZN7S5898C4D1Ev,
  (VTBL_ENTRY)&_ZN7S5898C4D0Ev,
};
static  VTBL_ENTRY _tg__ZTV7S5898C6__7S5898C4__7S5898C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI7S5898C4[0]),
};
static  VTBL_ENTRY _tg__ZTV7S5898C6__7S5898C1[] = {
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI7S5898C6[0]),
};
static  VTT_ENTRY vtt_S5898C1[] = {
  {&(_ZTV7S5898C1[5]),  5,10},
  {&(_tg__ZTV7S5898C4__7S5898C1[5]),  5,7},
  {&(_tg__ZTV7S5898C6__7S5898C4__7S5898C1[3]),  3,3},
  {&(_ZTV7S5898C1[10]),  10,10},
  {&(_tg__ZTV7S5898C6__7S5898C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S5898C1[];
extern  VTBL_ENTRY _ZTV7S5898C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S5898C1[];
Class_Descriptor cd_S5898C1 = {  "S5898C1", // class name
  bases_S5898C1, 8,
  &(vtc_S5898C1[0]), // expected_vtbl_contents
  &(vtt_S5898C1[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S5898C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S5898C1),10, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S5898C1),5, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8980C2  {
  virtual  ~S8980C2(); // _ZN7S8980C2D1Ev
  virtual void  v2(); // _ZN7S8980C22v2Ev
  virtual void  v3(); // _ZN7S8980C22v3Ev
  virtual void  v4(); // _ZN7S8980C22v4Ev
  virtual void  v5(); // _ZN7S8980C22v5Ev
  virtual void  v6(); // _ZN7S8980C22v6Ev
  virtual void  v7(); // _ZN7S8980C22v7Ev
  virtual void  v8(); // _ZN7S8980C22v8Ev
  S8980C2(); // tgen
};
//SIG(-1 S8980C2) C1{ vd v1 v2 v3 v4 v5 v6 v7}


 S8980C2 ::~S8980C2(){ note_dtor("S8980C2", this);}
void  S8980C2 ::v2(){vfunc_called(this, "_ZN7S8980C22v2Ev");}
void  S8980C2 ::v3(){vfunc_called(this, "_ZN7S8980C22v3Ev");}
void  S8980C2 ::v4(){vfunc_called(this, "_ZN7S8980C22v4Ev");}
void  S8980C2 ::v5(){vfunc_called(this, "_ZN7S8980C22v5Ev");}
void  S8980C2 ::v6(){vfunc_called(this, "_ZN7S8980C22v6Ev");}
void  S8980C2 ::v7(){vfunc_called(this, "_ZN7S8980C22v7Ev");}
void  S8980C2 ::v8(){vfunc_called(this, "_ZN7S8980C22v8Ev");}
S8980C2 ::S8980C2(){ note_ctor("S8980C2", this);} // tgen

static void Test_S8980C2()
{
  extern Class_Descriptor cd_S8980C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S8980C2, buf);
    S8980C2 *dp, &lv = *(dp=new (buf) S8980C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S8980C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8980C2)");
    test_class_info(&lv, &cd_S8980C2);
    dp->~S8980C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8980C2(Test_S8980C2, "S8980C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S8980C2C1Ev();
extern void _ZN7S8980C2D1Ev();
Name_Map name_map_S8980C2[] = {
  NSPAIR(_ZN7S8980C2C1Ev),
  NSPAIR(_ZN7S8980C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8980C2[];
extern void _ZN7S8980C2D1Ev();
extern void _ZN7S8980C2D0Ev();
extern void _ZN7S8980C22v2Ev();
extern void _ZN7S8980C22v3Ev();
extern void _ZN7S8980C22v4Ev();
extern void _ZN7S8980C22v5Ev();
extern void _ZN7S8980C22v6Ev();
extern void _ZN7S8980C22v7Ev();
extern void _ZN7S8980C22v8Ev();
static  VTBL_ENTRY vtc_S8980C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8980C2[0]),
  (VTBL_ENTRY)&_ZN7S8980C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8980C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8980C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8980C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8980C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8980C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8980C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8980C22v7Ev,
  (VTBL_ENTRY)&_ZN7S8980C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S8980C2[];
extern  VTBL_ENTRY _ZTV7S8980C2[];
Class_Descriptor cd_S8980C2 = {  "S8980C2", // class name
  0,0,//no base classes
  &(vtc_S8980C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S8980C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8980C2),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8980C1  : S8980C2 {
  ::S15640C4 s8980c1f0;
  int s8980c1f1;
  virtual  ~S8980C1(); // _ZN7S8980C1D1Ev
  virtual void  v1(); // _ZN7S8980C12v1Ev
  S8980C1(); // tgen
};
//SIG(1 S8980C1) C1{ BC2{ vd v2 v3 v4 v5 v6 v7 v8} vd v1 FC3{ BC4{ BC5{ m Fp Fi[2]}}} Fi}


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

static void Test_S8980C1()
{
  extern Class_Descriptor cd_S8980C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S8980C1, buf);
    S8980C1 *dp, &lv = *(dp=new (buf) S8980C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S8980C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8980C1)");
    check_base_class_offset(lv, (S8980C2*), 0, "S8980C1");
    check_field_offset(lv, s8980c1f0, ABISELECT(8,4), "S8980C1.s8980c1f0");
    check_field_offset(lv, s8980c1f1, ABISELECT(24,16), "S8980C1.s8980c1f1");
    test_class_info(&lv, &cd_S8980C1);
    dp->~S8980C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8980C1(Test_S8980C1, "S8980C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN7S8980C1C1Ev();
extern void _ZN7S8980C1D1Ev();
Name_Map name_map_S8980C1[] = {
  NSPAIR(_ZN7S8980C1C1Ev),
  NSPAIR(_ZN7S8980C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8980C2;
extern VTBL_ENTRY _ZTI7S8980C2[];
extern  VTBL_ENTRY _ZTV7S8980C2[];
static Base_Class bases_S8980C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8980C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S8980C1[];
extern void _ZN7S8980C1D1Ev();
extern void _ZN7S8980C1D0Ev();
extern void _ZN7S8980C22v2Ev();
extern void _ZN7S8980C22v3Ev();
extern void _ZN7S8980C22v4Ev();
extern void _ZN7S8980C22v5Ev();
extern void _ZN7S8980C22v6Ev();
extern void _ZN7S8980C22v7Ev();
extern void _ZN7S8980C22v8Ev();
extern void _ZN7S8980C12v1Ev();
static  VTBL_ENTRY vtc_S8980C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8980C1[0]),
  (VTBL_ENTRY)&_ZN7S8980C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8980C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8980C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8980C22v3Ev,
  (VTBL_ENTRY)&_ZN7S8980C22v4Ev,
  (VTBL_ENTRY)&_ZN7S8980C22v5Ev,
  (VTBL_ENTRY)&_ZN7S8980C22v6Ev,
  (VTBL_ENTRY)&_ZN7S8980C22v7Ev,
  (VTBL_ENTRY)&_ZN7S8980C22v8Ev,
  (VTBL_ENTRY)&_ZN7S8980C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8980C1[];
extern  VTBL_ENTRY _ZTV7S8980C1[];
Class_Descriptor cd_S8980C1 = {  "S8980C1", // class name
  bases_S8980C1, 1,
  &(vtc_S8980C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI7S8980C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8980C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21498C1  {
  ::S16199C4_nt s21498c1f0;
  void *s21498c1f1;
  int s21498c1f2[2];
  void *s21498c1f3;
  int s21498c1f4;
  void *s21498c1f5[17];
  ::S3351C13_nt s21498c1f6;
  char s21498c1f7;
  void  mf21498c1(); // _ZN8S21498C19mf21498c1Ev
  virtual  ~S21498C1(); // _ZN8S21498C1D1Ev
  S21498C1(); // tgen
};
//SIG(1 S21498C1) C1{ vd m FC2{ m Fp Fi FC3{ m}} Fp Fi[2] Fp Fi Fp[17] FC4{ m Fi[3]} Fc}


void  S21498C1 ::mf21498c1(){}
 S21498C1 ::~S21498C1(){ note_dtor("S21498C1", this);}
S21498C1 ::S21498C1(){ note_ctor("S21498C1", this);} // tgen

static void Test_S21498C1()
{
  extern Class_Descriptor cd_S21498C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(27,31)];
    init_test(&cd_S21498C1, buf);
    S21498C1 *dp, &lv = *(dp=new (buf) S21498C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(208,120), "sizeof(S21498C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21498C1)");
    check_field_offset(lv, s21498c1f0, ABISELECT(8,4), "S21498C1.s21498c1f0");
    check_field_offset(lv, s21498c1f1, ABISELECT(24,16), "S21498C1.s21498c1f1");
    check_field_offset(lv, s21498c1f2, ABISELECT(32,20), "S21498C1.s21498c1f2");
    check_field_offset(lv, s21498c1f3, ABISELECT(40,28), "S21498C1.s21498c1f3");
    check_field_offset(lv, s21498c1f4, ABISELECT(48,32), "S21498C1.s21498c1f4");
    check_field_offset(lv, s21498c1f5, ABISELECT(56,36), "S21498C1.s21498c1f5");
    check_field_offset(lv, s21498c1f6, ABISELECT(192,104), "S21498C1.s21498c1f6");
    check_field_offset(lv, s21498c1f7, ABISELECT(204,116), "S21498C1.s21498c1f7");
    test_class_info(&lv, &cd_S21498C1);
    dp->~S21498C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21498C1(Test_S21498C1, "S21498C1", ABISELECT(208,120));

#else // __cplusplus

extern void _ZN8S21498C1C1Ev();
extern void _ZN8S21498C1D1Ev();
Name_Map name_map_S21498C1[] = {
  NSPAIR(_ZN8S21498C1C1Ev),
  NSPAIR(_ZN8S21498C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21498C1[];
extern void _ZN8S21498C1D1Ev();
extern void _ZN8S21498C1D0Ev();
static  VTBL_ENTRY vtc_S21498C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21498C1[0]),
  (VTBL_ENTRY)&_ZN8S21498C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21498C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21498C1[];
extern  VTBL_ENTRY _ZTV8S21498C1[];
Class_Descriptor cd_S21498C1 = {  "S21498C1", // class name
  0,0,//no base classes
  &(vtc_S21498C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(208,120), // object size
  NSPAIRA(_ZTI8S21498C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21498C1),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  S19503C4  {
  virtual void  v1(); // _ZN8S19503C42v1Ev
  virtual void  v2(); // _ZN8S19503C42v2Ev
  ~S19503C4(); // tgen
  S19503C4(); // tgen
};
//SIG(-1 S19503C4) C1{ v1 v2}


void  S19503C4 ::v1(){vfunc_called(this, "_ZN8S19503C42v1Ev");}
void  S19503C4 ::v2(){vfunc_called(this, "_ZN8S19503C42v2Ev");}
S19503C4 ::~S19503C4(){ note_dtor("S19503C4", this);} // tgen
S19503C4 ::S19503C4(){ note_ctor("S19503C4", this);} // tgen

static void Test_S19503C4()
{
  extern Class_Descriptor cd_S19503C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19503C4, buf);
    S19503C4 *dp, &lv = *(dp=new (buf) S19503C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19503C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19503C4)");
    test_class_info(&lv, &cd_S19503C4);
    dp->~S19503C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19503C4(Test_S19503C4, "S19503C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19503C4C1Ev();
extern void _ZN8S19503C4D1Ev();
Name_Map name_map_S19503C4[] = {
  NSPAIR(_ZN8S19503C4C1Ev),
  NSPAIR(_ZN8S19503C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19503C4[];
extern void _ZN8S19503C42v1Ev();
extern void _ZN8S19503C42v2Ev();
static  VTBL_ENTRY vtc_S19503C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19503C4[0]),
  (VTBL_ENTRY)&_ZN8S19503C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19503C42v2Ev,
};
extern VTBL_ENTRY _ZTI8S19503C4[];
extern  VTBL_ENTRY _ZTV8S19503C4[];
Class_Descriptor cd_S19503C4 = {  "S19503C4", // class name
  0,0,//no base classes
  &(vtc_S19503C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19503C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19503C4),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  S19503C3  : virtual S19503C4 {
  void *s19503c3f0;
  virtual void  v3(); // _ZN8S19503C32v3Ev
  ~S19503C3(); // tgen
  S19503C3(); // tgen
};
//SIG(-1 S19503C3) C1{ VBC2{ v2 v3} v1 Fp}


void  S19503C3 ::v3(){vfunc_called(this, "_ZN8S19503C32v3Ev");}
S19503C3 ::~S19503C3(){ note_dtor("S19503C3", this);} // tgen
S19503C3 ::S19503C3(){ note_ctor("S19503C3", this);} // tgen

static void Test_S19503C3()
{
  extern Class_Descriptor cd_S19503C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19503C3, buf);
    S19503C3 *dp, &lv = *(dp=new (buf) S19503C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19503C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19503C3)");
    check_base_class_offset(lv, (S19503C4*), 0, "S19503C3");
    check_field_offset(lv, s19503c3f0, ABISELECT(8,4), "S19503C3.s19503c3f0");
    test_class_info(&lv, &cd_S19503C3);
    dp->~S19503C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19503C3(Test_S19503C3, "S19503C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19503C3C1Ev();
extern void _ZN8S19503C3D1Ev();
Name_Map name_map_S19503C3[] = {
  NSPAIR(_ZN8S19503C3C1Ev),
  NSPAIR(_ZN8S19503C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19503C4;
extern VTBL_ENTRY _ZTI8S19503C4[];
extern  VTBL_ENTRY _ZTV8S19503C4[];
static Base_Class bases_S19503C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19503C4,    0, //bcp->offset
    -1, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S19503C3[];
extern void _ZN8S19503C42v1Ev();
extern void _ZN8S19503C42v2Ev();
extern void _ZN8S19503C32v3Ev();
static  VTBL_ENTRY vtc_S19503C3[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19503C3[0]),
  (VTBL_ENTRY)&_ZN8S19503C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19503C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19503C32v3Ev,
};
extern VTBL_ENTRY _ZTV8S19503C3[];
static  VTT_ENTRY vtt_S19503C3[] = {
  {&(_ZTV8S19503C3[5]),  5,8},
  {&(_ZTV8S19503C3[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S19503C3[];
extern  VTBL_ENTRY _ZTV8S19503C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19503C3[];
Class_Descriptor cd_S19503C3 = {  "S19503C3", // class name
  bases_S19503C3, 1,
  &(vtc_S19503C3[0]), // expected_vtbl_contents
  &(vtt_S19503C3[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19503C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19503C3),8, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19503C3),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  S19503C2  : S19503C3 {
  virtual void  v4(); // _ZN8S19503C22v4Ev
  ~S19503C2(); // tgen
  S19503C2(); // tgen
};
//SIG(-1 S19503C2) C1{ BC2{ VBC3{ v2 v3} v4 Fp} v1}


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

static void Test_S19503C2()
{
  extern Class_Descriptor cd_S19503C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19503C2, buf);
    S19503C2 *dp, &lv = *(dp=new (buf) S19503C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19503C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19503C2)");
    check_base_class_offset(lv, (S19503C4*)(S19503C3*), 0, "S19503C2");
    check_base_class_offset(lv, (S19503C3*), 0, "S19503C2");
    test_class_info(&lv, &cd_S19503C2);
    dp->~S19503C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19503C2(Test_S19503C2, "S19503C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19503C2C1Ev();
extern void _ZN8S19503C2D1Ev();
Name_Map name_map_S19503C2[] = {
  NSPAIR(_ZN8S19503C2C1Ev),
  NSPAIR(_ZN8S19503C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19503C4;
extern VTBL_ENTRY _ZTI8S19503C4[];
extern  VTBL_ENTRY _ZTV8S19503C4[];
extern Class_Descriptor cd_S19503C3;
extern VTBL_ENTRY _ZTI8S19503C3[];
extern  VTBL_ENTRY _ZTV8S19503C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19503C3[];
static Base_Class bases_S19503C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19503C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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_S19503C3,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19503C2[];
extern void _ZN8S19503C42v1Ev();
extern void _ZN8S19503C42v2Ev();
extern void _ZN8S19503C32v3Ev();
extern void _ZN8S19503C22v4Ev();
static  VTBL_ENTRY vtc_S19503C2[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19503C2[0]),
  (VTBL_ENTRY)&_ZN8S19503C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19503C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19503C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19503C22v4Ev,
};
extern VTBL_ENTRY _ZTV8S19503C2[];
extern void _ZN8S19503C42v1Ev();
extern void _ZN8S19503C42v2Ev();
extern void _ZN8S19503C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19503C3__8S19503C2[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19503C3[0]),
  (VTBL_ENTRY)&_ZN8S19503C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19503C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19503C32v3Ev,
};
static  VTT_ENTRY vtt_S19503C2[] = {
  {&(_ZTV8S19503C2[5]),  5,9},
  {&(_tg__ZTV8S19503C3__8S19503C2[5]),  5,8},
  {&(_tg__ZTV8S19503C3__8S19503C2[5]),  5,8},
  {&(_ZTV8S19503C2[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S19503C2[];
extern  VTBL_ENTRY _ZTV8S19503C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19503C2[];
Class_Descriptor cd_S19503C2 = {  "S19503C2", // class name
  bases_S19503C2, 2,
  &(vtc_S19503C2[0]), // expected_vtbl_contents
  &(vtt_S19503C2[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19503C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19503C2),9, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19503C2),4, //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  S19503C5  {
  long s19503c5f0;
  int s19503c5f1;
  virtual void  v5(); // _ZN8S19503C52v5Ev
  virtual void  v6(); // _ZN8S19503C52v6Ev
  virtual void  v7(); // _ZN8S19503C52v7Ev
  virtual void  v8(); // _ZN8S19503C52v8Ev
  virtual void  v9(); // _ZN8S19503C52v9Ev
  virtual void  v10(); // _ZN8S19503C53v10Ev
  ~S19503C5(); // tgen
  S19503C5(); // tgen
};
//SIG(-1 S19503C5) C1{ v1 v2 v3 v4 v5 v6 Fl Fi}


void  S19503C5 ::v5(){vfunc_called(this, "_ZN8S19503C52v5Ev");}
void  S19503C5 ::v6(){vfunc_called(this, "_ZN8S19503C52v6Ev");}
void  S19503C5 ::v7(){vfunc_called(this, "_ZN8S19503C52v7Ev");}
void  S19503C5 ::v8(){vfunc_called(this, "_ZN8S19503C52v8Ev");}
void  S19503C5 ::v9(){vfunc_called(this, "_ZN8S19503C52v9Ev");}
void  S19503C5 ::v10(){vfunc_called(this, "_ZN8S19503C53v10Ev");}
S19503C5 ::~S19503C5(){ note_dtor("S19503C5", this);} // tgen
S19503C5 ::S19503C5(){ note_ctor("S19503C5", this);} // tgen

static void Test_S19503C5()
{
  extern Class_Descriptor cd_S19503C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S19503C5, buf);
    S19503C5 *dp, &lv = *(dp=new (buf) S19503C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S19503C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19503C5)");
    check_field_offset(lv, s19503c5f0, ABISELECT(8,4), "S19503C5.s19503c5f0");
    check_field_offset(lv, s19503c5f1, ABISELECT(16,8), "S19503C5.s19503c5f1");
    test_class_info(&lv, &cd_S19503C5);
    dp->~S19503C5();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19503C5(Test_S19503C5, "S19503C5", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S19503C5C1Ev();
extern void _ZN8S19503C5D1Ev();
Name_Map name_map_S19503C5[] = {
  NSPAIR(_ZN8S19503C5C1Ev),
  NSPAIR(_ZN8S19503C5D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19503C5[];
extern void _ZN8S19503C52v5Ev();
extern void _ZN8S19503C52v6Ev();
extern void _ZN8S19503C52v7Ev();
extern void _ZN8S19503C52v8Ev();
extern void _ZN8S19503C52v9Ev();
extern void _ZN8S19503C53v10Ev();
static  VTBL_ENTRY vtc_S19503C5[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19503C5[0]),
  (VTBL_ENTRY)&_ZN8S19503C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19503C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19503C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19503C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19503C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19503C53v10Ev,
};
extern VTBL_ENTRY _ZTI8S19503C5[];
extern  VTBL_ENTRY _ZTV8S19503C5[];
Class_Descriptor cd_S19503C5 = {  "S19503C5", // class name
  0,0,//no base classes
  &(vtc_S19503C5[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S19503C5),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19503C5),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  S19503C1  : virtual S19503C2 , virtual S19503C5 {
  ~S19503C1(); // tgen
  S19503C1(); // tgen
};
//SIG(1 S19503C1) C1{ VBC2{ BC3{ VBC4{ v1 v2} v3 Fp} v4} VBC5{ v5 v6 v7 v8 v9 v10 Fl Fi}}


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

static void Test_S19503C1()
{
  extern Class_Descriptor cd_S19503C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S19503C1, buf);
    S19503C1 *dp, &lv = *(dp=new (buf) S19503C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S19503C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19503C1)");
    check_base_class_offset(lv, (S19503C4*)(S19503C3*)(S19503C2*), 0, "S19503C1");
    check_base_class_offset(lv, (S19503C3*)(S19503C2*), ABISELECT(8,4), "S19503C1");
    check_base_class_offset(lv, (S19503C2*), ABISELECT(8,4), "S19503C1");
    check_base_class_offset(lv, (S19503C5*), ABISELECT(24,12), "S19503C1");
    test_class_info(&lv, &cd_S19503C1);
    dp->~S19503C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19503C1(Test_S19503C1, "S19503C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN8S19503C1C1Ev();
extern void _ZN8S19503C1D1Ev();
Name_Map name_map_S19503C1[] = {
  NSPAIR(_ZN8S19503C1C1Ev),
  NSPAIR(_ZN8S19503C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19503C4;
extern VTBL_ENTRY _ZTI8S19503C4[];
extern  VTBL_ENTRY _ZTV8S19503C4[];
extern Class_Descriptor cd_S19503C3;
extern VTBL_ENTRY _ZTI8S19503C3[];
extern  VTBL_ENTRY _ZTV8S19503C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19503C3[];
extern Class_Descriptor cd_S19503C2;
extern VTBL_ENTRY _ZTI8S19503C2[];
extern  VTBL_ENTRY _ZTV8S19503C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19503C2[];
extern Class_Descriptor cd_S19503C5;
extern VTBL_ENTRY _ZTI8S19503C5[];
extern  VTBL_ENTRY _ZTV8S19503C5[];
static Base_Class bases_S19503C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19503C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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_S19503C3,    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
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19503C2,    ABISELECT(8,4), //bcp->offset
    9, //bcp->virtual_function_table_offset
    7, //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},
  {&cd_S19503C5,    ABISELECT(24,12), //bcp->offset
    20, //bcp->virtual_function_table_offset
    8, //num_negative_vtable_entries(t, bcp)
    4, //bcp->index_in_construction_vtbl_array
    0, //bcp->base_subarray_index_in_construction_vtbl_array
    4, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19503C1[];
extern void _ZN8S19503C42v1Ev();
extern void _ZN8S19503C42v2Ev();
extern void _ZN8S19503C42v1Ev();
extern void _ZN8S19503C42v2Ev();
extern void _ZN8S19503C32v3Ev();
extern void _ZN8S19503C22v4Ev();
extern void _ZN8S19503C52v5Ev();
extern void _ZN8S19503C52v6Ev();
extern void _ZN8S19503C52v7Ev();
extern void _ZN8S19503C52v8Ev();
extern void _ZN8S19503C52v9Ev();
extern void _ZN8S19503C53v10Ev();
static  VTBL_ENTRY vtc_S19503C1[] = {
  ABISELECT(24,12),
  0,
  ABISELECT(8,4),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19503C1[0]),
  (VTBL_ENTRY)&_ZN8S19503C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19503C42v2Ev,
  0,
  0,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S19503C1[0]),
  (VTBL_ENTRY)&_ZN8S19503C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19503C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19503C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19503C22v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-24,-12),
  (VTBL_ENTRY)&(_ZTI8S19503C1[0]),
  (VTBL_ENTRY)&_ZN8S19503C52v5Ev,
  (VTBL_ENTRY)&_ZN8S19503C52v6Ev,
  (VTBL_ENTRY)&_ZN8S19503C52v7Ev,
  (VTBL_ENTRY)&_ZN8S19503C52v8Ev,
  (VTBL_ENTRY)&_ZN8S19503C52v9Ev,
  (VTBL_ENTRY)&_ZN8S19503C53v10Ev,
};
extern VTBL_ENTRY _ZTV8S19503C1[];
extern void _ZN8S19503C42v1Ev();
extern void _ZN8S19503C42v2Ev();
extern void _ZN8S19503C32v3Ev();
extern void _ZN8S19503C22v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19503C2__8S19503C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19503C2[0]),
  (VTBL_ENTRY)&_ZN8S19503C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19503C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19503C32v3Ev,
  (VTBL_ENTRY)&_ZN8S19503C22v4Ev,
};
extern void _ZN8S19503C42v1Ev();
extern void _ZN8S19503C42v2Ev();
extern void _ZN8S19503C32v3Ev();
static  VTBL_ENTRY _tg__ZTV8S19503C38S19503C2__8S19503C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19503C3[0]),
  (VTBL_ENTRY)&_ZN8S19503C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19503C42v2Ev,
  (VTBL_ENTRY)&_ZN8S19503C32v3Ev,
};
extern void _ZN8S19503C42v1Ev();
extern void _ZN8S19503C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19503C4__8S19503C38S19503C2__8S19503C1[] = {
  0,
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19503C3[0]),
  (VTBL_ENTRY)&_ZN8S19503C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19503C42v2Ev,
};
extern void _ZN8S19503C42v1Ev();
extern void _ZN8S19503C42v2Ev();
static  VTBL_ENTRY _tg__ZTV8S19503C4__8S19503C2__8S19503C1[] = {
  0,
  0,
  ABISELECT(8,4),
  (VTBL_ENTRY)&(_ZTI8S19503C2[0]),
  (VTBL_ENTRY)&_ZN8S19503C42v1Ev,
  (VTBL_ENTRY)&_ZN8S19503C42v2Ev,
};
static  VTT_ENTRY vtt_S19503C1[] = {
  {&(_ZTV8S19503C1[7]),  7,34},
  {&(_ZTV8S19503C1[16]),  16,34},
  {&(_ZTV8S19503C1[7]),  7,34},
  {&(_ZTV8S19503C1[28]),  28,34},
  {&(_tg__ZTV8S19503C2__8S19503C1[5]),  5,9},
  {&(_tg__ZTV8S19503C38S19503C2__8S19503C1[5]),  5,8},
  {&(_tg__ZTV8S19503C4__8S19503C38S19503C2__8S19503C1[4]),  4,6},
  {&(_tg__ZTV8S19503C4__8S19503C2__8S19503C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19503C1[];
extern  VTBL_ENTRY _ZTV8S19503C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19503C1[];
Class_Descriptor cd_S19503C1 = {  "S19503C1", // class name
  bases_S19503C1, 4,
  &(vtc_S19503C1[0]), // expected_vtbl_contents
  &(vtt_S19503C1[0]), // expected_vtt_contents
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI8S19503C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19503C1),34, //virtual function table var
  7, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19503C1),8, //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  S15986C1  {
  ::S3351C4_nt s15986c1f0;
  ::S15640C3_nt s15986c1f1;
  unsigned int s15986c1f2:1;
  unsigned int s15986c1f3:1;
  unsigned int s15986c1f4:1;
  void  mf15986c1(); // _ZN8S15986C19mf15986c1Ev
};
//SIG(1 S15986C1) C1{ m FC2{ m Fi[2]} FC3{ BC4{ BC5{ BC6{ m Fp Fi[2]}}}} Fi:1 Fi:1 Fi:1}


void  S15986C1 ::mf15986c1(){}

static void Test_S15986C1()
{
  {
    init_simple_test("S15986C1");
    static S15986C1 lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S15986C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15986C1)");
    check_field_offset(lv, s15986c1f0, 0, "S15986C1.s15986c1f0");
    check_field_offset(lv, s15986c1f1, 8, "S15986C1.s15986c1f1");
    set_bf_and_test(lv, s15986c1f2, ABISELECT(24,20), 0, 1, 1, "S15986C1");
    set_bf_and_test(lv, s15986c1f3, ABISELECT(24,20), 1, 1, 1, "S15986C1");
    set_bf_and_test(lv, s15986c1f4, ABISELECT(24,20), 2, 1, 1, "S15986C1");
  }
}
static Arrange_To_Call_Me vS15986C1(Test_S15986C1, "S15986C1", ABISELECT(32,24));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S6968C2_nt  {
  int s6968c2f0;
  virtual  ~S6968C2_nt(); // _ZN10S6968C2_ntD1Ev
  virtual void  v5(); // _ZN10S6968C2_nt2v5Ev
  S6968C2_nt(); // tgen
};
//SIG(-1 S6968C2_nt) C1{ vd v1 Fi}


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

//skip512 S6968C2_nt

#else // __cplusplus

extern void _ZN10S6968C2_ntC1Ev();
extern void _ZN10S6968C2_ntD1Ev();
Name_Map name_map_S6968C2_nt[] = {
  NSPAIR(_ZN10S6968C2_ntC1Ev),
  NSPAIR(_ZN10S6968C2_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI10S6968C2_nt[];
extern void _ZN10S6968C2_ntD1Ev();
extern void _ZN10S6968C2_ntD0Ev();
extern void _ZN10S6968C2_nt2v5Ev();
static  VTBL_ENTRY vtc_S6968C2_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI10S6968C2_nt[0]),
  (VTBL_ENTRY)&_ZN10S6968C2_ntD1Ev,
  (VTBL_ENTRY)&_ZN10S6968C2_ntD0Ev,
  (VTBL_ENTRY)&_ZN10S6968C2_nt2v5Ev,
};
extern VTBL_ENTRY _ZTI10S6968C2_nt[];
VTBL_ENTRY *P__ZTI10S6968C2_nt = _ZTI10S6968C2_nt; 
extern  VTBL_ENTRY _ZTV10S6968C2_nt[];
Class_Descriptor cd_S6968C2_nt = {  "S6968C2_nt", // class name
  0,0,//no base classes
  &(vtc_S6968C2_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI10S6968C2_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV10S6968C2_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  S6968C1  : S6968C2_nt {
  ::S21073C4 s6968c1f0;
  int s6968c1f1;
  virtual  ~S6968C1(); // _ZN7S6968C1D1Ev
  virtual void  v1(); // _ZN7S6968C12v1Ev
  virtual void  v2(); // _ZN7S6968C12v2Ev
  virtual void  v3(); // _ZN7S6968C12v3Ev
  virtual void  v4(); // _ZN7S6968C12v4Ev
  S6968C1(); // tgen
};
//SIG(1 S6968C1) C1{ BC2{ vd v5 Fi} vd v1 v2 v3 v4 FC3{ v6 v7 v8 v9 v10 v11 Fi} Fi}


 S6968C1 ::~S6968C1(){ note_dtor("S6968C1", this);}
void  S6968C1 ::v1(){vfunc_called(this, "_ZN7S6968C12v1Ev");}
void  S6968C1 ::v2(){vfunc_called(this, "_ZN7S6968C12v2Ev");}
void  S6968C1 ::v3(){vfunc_called(this, "_ZN7S6968C12v3Ev");}
void  S6968C1 ::v4(){vfunc_called(this, "_ZN7S6968C12v4Ev");}
S6968C1 ::S6968C1(){ note_ctor("S6968C1", this);} // tgen

static void Test_S6968C1()
{
  extern Class_Descriptor cd_S6968C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S6968C1, buf);
    S6968C1 *dp, &lv = *(dp=new (buf) S6968C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S6968C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6968C1)");
    check_base_class_offset(lv, (S6968C2_nt*), 0, "S6968C1");
    check_field_offset(lv, s6968c1f0, ABISELECT(16,8), "S6968C1.s6968c1f0");
    check_field_offset(lv, s6968c1f1, ABISELECT(32,16), "S6968C1.s6968c1f1");
    test_class_info(&lv, &cd_S6968C1);
    dp->~S6968C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6968C1(Test_S6968C1, "S6968C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S6968C1C1Ev();
extern void _ZN7S6968C1D1Ev();
Name_Map name_map_S6968C1[] = {
  NSPAIR(_ZN7S6968C1C1Ev),
  NSPAIR(_ZN7S6968C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6968C2_nt;
extern VTBL_ENTRY _ZTI10S6968C2_nt[];
extern  VTBL_ENTRY _ZTV10S6968C2_nt[];
static Base_Class bases_S6968C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6968C2_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 _ZTI7S6968C1[];
extern void _ZN7S6968C1D1Ev();
extern void _ZN7S6968C1D0Ev();
extern void _ZN10S6968C2_nt2v5Ev();
extern void _ZN7S6968C12v1Ev();
extern void _ZN7S6968C12v2Ev();
extern void _ZN7S6968C12v3Ev();
extern void _ZN7S6968C12v4Ev();
static  VTBL_ENTRY vtc_S6968C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6968C1[0]),
  (VTBL_ENTRY)&_ZN7S6968C1D1Ev,
  (VTBL_ENTRY)&_ZN7S6968C1D0Ev,
  (VTBL_ENTRY)&_ZN10S6968C2_nt2v5Ev,
  (VTBL_ENTRY)&_ZN7S6968C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6968C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6968C12v3Ev,
  (VTBL_ENTRY)&_ZN7S6968C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S6968C1[];
extern  VTBL_ENTRY _ZTV7S6968C1[];
Class_Descriptor cd_S6968C1 = {  "S6968C1", // class name
  bases_S6968C1, 1,
  &(vtc_S6968C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S6968C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6968C1),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  S7291C3  : S2264C38 , virtual S2264C28 {
  ~S7291C3(); // tgen
  S7291C3(); // tgen
};
//SIG(-1 S7291C3) C1{ BC2{ m} VBC3{ m}}


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

static void Test_S7291C3()
{
  extern Class_Descriptor cd_S7291C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7291C3, buf);
    S7291C3 *dp, &lv = *(dp=new (buf) S7291C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7291C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7291C3)");
    check_base_class_offset(lv, (S2264C38*), 0, "S7291C3");
    check_base_class_offset(lv, (S2264C28*), 0, "S7291C3");
    test_class_info(&lv, &cd_S7291C3);
    dp->~S7291C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7291C3(Test_S7291C3, "S7291C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7291C3C1Ev();
extern void _ZN7S7291C3D1Ev();
Name_Map name_map_S7291C3[] = {
  NSPAIR(_ZN7S7291C3C1Ev),
  NSPAIR(_ZN7S7291C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
static Base_Class bases_S7291C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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 _ZTI7S7291C3[];
static  VTBL_ENTRY vtc_S7291C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7291C3[0]),
};
extern VTBL_ENTRY _ZTV7S7291C3[];
static  VTT_ENTRY vtt_S7291C3[] = {
  {&(_ZTV7S7291C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7291C3[];
extern  VTBL_ENTRY _ZTV7S7291C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7291C3[];
Class_Descriptor cd_S7291C3 = {  "S7291C3", // class name
  bases_S7291C3, 2,
  &(vtc_S7291C3[0]), // expected_vtbl_contents
  &(vtt_S7291C3[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7291C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7291C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7291C3),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  S7291C2  : virtual S7291C3 , S2264C24 {
  ~S7291C2(); // tgen
  S7291C2(); // tgen
};
//SIG(-1 S7291C2) C1{ VBC2{ BC3{ m} VBC4{ m}} BC5{ m}}


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

static void Test_S7291C2()
{
  extern Class_Descriptor cd_S7291C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7291C2, buf);
    S7291C2 *dp, &lv = *(dp=new (buf) S7291C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7291C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7291C2)");
    check_base_class_offset(lv, (S2264C38*)(S7291C3*), 0, "S7291C2");
    check_base_class_offset(lv, (S2264C28*)(S7291C3*), 0, "S7291C2");
    check_base_class_offset(lv, (S7291C3*), 0, "S7291C2");
    check_base_class_offset(lv, (S2264C24*), 0, "S7291C2");
    test_class_info(&lv, &cd_S7291C2);
    dp->~S7291C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7291C2(Test_S7291C2, "S7291C2", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7291C2C1Ev();
extern void _ZN7S7291C2D1Ev();
Name_Map name_map_S7291C2[] = {
  NSPAIR(_ZN7S7291C2C1Ev),
  NSPAIR(_ZN7S7291C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S7291C3;
extern VTBL_ENTRY _ZTI7S7291C3[];
extern  VTBL_ENTRY _ZTV7S7291C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7291C3[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
static Base_Class bases_S7291C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7291C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    3, //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_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S7291C2[];
static  VTBL_ENTRY vtc_S7291C2[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7291C2[0]),
};
extern VTBL_ENTRY _ZTV7S7291C2[];
static  VTBL_ENTRY _tg__ZTV7S7291C3__7S7291C2[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7291C3[0]),
};
static  VTT_ENTRY vtt_S7291C2[] = {
  {&(_ZTV7S7291C2[4]),  4,4},
  {&(_ZTV7S7291C2[4]),  4,4},
  {&(_tg__ZTV7S7291C3__7S7291C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7291C2[];
extern  VTBL_ENTRY _ZTV7S7291C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7291C2[];
Class_Descriptor cd_S7291C2 = {  "S7291C2", // class name
  bases_S7291C2, 4,
  &(vtc_S7291C2[0]), // expected_vtbl_contents
  &(vtt_S7291C2[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7291C2),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7291C2),4, //virtual function table var
  4, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7291C2),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  S7291C10_nt  {
  void  mf7291c10(); // _ZN11S7291C10_nt9mf7291c10Ev
};
//SIG(-1 S7291C10_nt) C1{ m}


void  S7291C10_nt ::mf7291c10(){}

//skip512 S7291C10_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI11S7291C10_nt[];
VTBL_ENTRY *P__ZTI11S7291C10_nt = _ZTI11S7291C10_nt; 
Class_Descriptor cd_S7291C10_nt = {  "S7291C10_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI11S7291C10_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  S7291C8  : S2264C7_nt , virtual S7291C10_nt {
  ~S7291C8(); // tgen
  S7291C8(); // tgen
};
//SIG(-1 S7291C8) C1{ BC2{ m} VBC3{ m}}


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

static void Test_S7291C8()
{
  extern Class_Descriptor cd_S7291C8;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7291C8, buf);
    S7291C8 *dp, &lv = *(dp=new (buf) S7291C8());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7291C8)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7291C8)");
    check_base_class_offset(lv, (S2264C7_nt*), 0, "S7291C8");
    check_base_class_offset(lv, (S7291C10_nt*), 0, "S7291C8");
    test_class_info(&lv, &cd_S7291C8);
    dp->~S7291C8();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7291C8(Test_S7291C8, "S7291C8", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7291C8C1Ev();
extern void _ZN7S7291C8D1Ev();
Name_Map name_map_S7291C8[] = {
  NSPAIR(_ZN7S7291C8C1Ev),
  NSPAIR(_ZN7S7291C8D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C7_nt;
extern VTBL_ENTRY _ZTI10S2264C7_nt[];
extern Class_Descriptor cd_S7291C10_nt;
extern VTBL_ENTRY _ZTI11S7291C10_nt[];
static Base_Class bases_S7291C8[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C7_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_S7291C10_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI7S7291C8[];
static  VTBL_ENTRY vtc_S7291C8[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7291C8[0]),
};
extern VTBL_ENTRY _ZTV7S7291C8[];
static  VTT_ENTRY vtt_S7291C8[] = {
  {&(_ZTV7S7291C8[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7291C8[];
extern  VTBL_ENTRY _ZTV7S7291C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7291C8[];
Class_Descriptor cd_S7291C8 = {  "S7291C8", // class name
  bases_S7291C8, 2,
  &(vtc_S7291C8[0]), // expected_vtbl_contents
  &(vtt_S7291C8[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7291C8),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV7S7291C8),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7291C8),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  S7291C1  : S7291C2 , virtual S2264C21 , S7291C8 {
  ~S7291C1(); // tgen
  S7291C1(); // tgen
};
//SIG(1 S7291C1) C1{ BC2{ VBC3{ BC4{ m} VBC5{ m}} BC6{ m}} VBC7{ m} BC8{ BC9{ m} VBC10{ m}}}


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

static void Test_S7291C1()
{
  extern Class_Descriptor cd_S7291C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7291C1, buf);
    S7291C1 *dp, &lv = *(dp=new (buf) S7291C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7291C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7291C1)");
    check_base_class_offset(lv, (S2264C38*)(S7291C3*), 0, "S7291C1");
    check_base_class_offset(lv, (S2264C28*)(S7291C3*), 0, "S7291C1");
    check_base_class_offset(lv, (S7291C3*)(S7291C2*), 0, "S7291C1");
    check_base_class_offset(lv, (S2264C24*)(S7291C2*), 0, "S7291C1");
    check_base_class_offset(lv, (S7291C2*), 0, "S7291C1");
    check_base_class_offset(lv, (S2264C21*), 0, "S7291C1");
    check_base_class_offset(lv, (S2264C7_nt*)(S7291C8*), ABISELECT(8,4), "S7291C1");
    check_base_class_offset(lv, (S7291C10_nt*)(S7291C8*), 0, "S7291C1");
    check_base_class_offset(lv, (S7291C8*), ABISELECT(8,4), "S7291C1");
    test_class_info(&lv, &cd_S7291C1);
    dp->~S7291C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7291C1(Test_S7291C1, "S7291C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7291C1C1Ev();
extern void _ZN7S7291C1D1Ev();
Name_Map name_map_S7291C1[] = {
  NSPAIR(_ZN7S7291C1C1Ev),
  NSPAIR(_ZN7S7291C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S2264C28;
extern VTBL_ENTRY _ZTI8S2264C28[];
extern Class_Descriptor cd_S7291C3;
extern VTBL_ENTRY _ZTI7S7291C3[];
extern  VTBL_ENTRY _ZTV7S7291C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7291C3[];
extern Class_Descriptor cd_S2264C24;
extern VTBL_ENTRY _ZTI8S2264C24[];
extern Class_Descriptor cd_S7291C2;
extern VTBL_ENTRY _ZTI7S7291C2[];
extern  VTBL_ENTRY _ZTV7S7291C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7291C2[];
extern Class_Descriptor cd_S2264C21;
extern VTBL_ENTRY _ZTI8S2264C21[];
extern Class_Descriptor cd_S2264C7_nt;
extern VTBL_ENTRY _ZTI10S2264C7_nt[];
extern Class_Descriptor cd_S7291C10_nt;
extern VTBL_ENTRY _ZTI11S7291C10_nt[];
extern Class_Descriptor cd_S7291C8;
extern VTBL_ENTRY _ZTI7S7291C8[];
extern  VTBL_ENTRY _ZTV7S7291C8[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7291C8[];
static Base_Class bases_S7291C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S2264C28,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7291C3,    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_S2264C24,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S7291C2,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {&cd_S2264C21,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, 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_S2264C7_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
    8, //immediately_derived
  0, 0},
  {&cd_S7291C10_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
    8, //immediately_derived
  0, 1},
  {&cd_S7291C8,    ABISELECT(8,4), //bcp->offset
    6, //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
    3, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7291C1[];
static  VTBL_ENTRY vtc_S7291C1[] = {
  0,
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7291C1[0]),
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI7S7291C1[0]),
};
extern VTBL_ENTRY _ZTV7S7291C1[];
static  VTBL_ENTRY _tg__ZTV7S7291C2__7S7291C1[] = {
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7291C2[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7291C8__7S7291C1[] = {
  ABISELECT(-8,-4),
  0,
  (VTBL_ENTRY)&(_ZTI7S7291C8[0]),
};
static  VTBL_ENTRY _tg__ZTV7S7291C3__7S7291C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7291C3[0]),
};
static  VTT_ENTRY vtt_S7291C1[] = {
  {&(_ZTV7S7291C1[6]),  6,9},
  {&(_tg__ZTV7S7291C2__7S7291C1[4]),  4,4},
  {&(_tg__ZTV7S7291C2__7S7291C1[4]),  4,4},
  {&(_tg__ZTV7S7291C8__7S7291C1[3]),  3,3},
  {&(_ZTV7S7291C1[6]),  6,9},
  {&(_ZTV7S7291C1[9]),  9,9},
  {&(_tg__ZTV7S7291C3__7S7291C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7291C1[];
extern  VTBL_ENTRY _ZTV7S7291C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7291C1[];
Class_Descriptor cd_S7291C1 = {  "S7291C1", // class name
  bases_S7291C1, 9,
  &(vtc_S7291C1[0]), // expected_vtbl_contents
  &(vtt_S7291C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7291C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7291C1),9, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7291C1),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S18478C1  {
  ::S3196C2 s18478c1f0;
  virtual void  v1(); // _ZN8S18478C12v1Ev
  ~S18478C1(); // tgen
  S18478C1(); // tgen
};
//SIG(1 S18478C1) C1{ v1 FC2{ BC3{ vd v8 v9 v10 v11 v12 Fc} vd v2 v3 v4 v5 v6 v7}}


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

static void Test_S18478C1()
{
  extern Class_Descriptor cd_S18478C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S18478C1, buf);
    S18478C1 *dp, &lv = *(dp=new (buf) S18478C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S18478C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18478C1)");
    check_field_offset(lv, s18478c1f0, ABISELECT(8,4), "S18478C1.s18478c1f0");
    test_class_info(&lv, &cd_S18478C1);
    dp->~S18478C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18478C1(Test_S18478C1, "S18478C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S18478C1C1Ev();
extern void _ZN8S18478C1D1Ev();
Name_Map name_map_S18478C1[] = {
  NSPAIR(_ZN8S18478C1C1Ev),
  NSPAIR(_ZN8S18478C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18478C1[];
extern void _ZN8S18478C12v1Ev();
static  VTBL_ENTRY vtc_S18478C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18478C1[0]),
  (VTBL_ENTRY)&_ZN8S18478C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S18478C1[];
extern  VTBL_ENTRY _ZTV8S18478C1[];
Class_Descriptor cd_S18478C1 = {  "S18478C1", // class name
  0,0,//no base classes
  &(vtc_S18478C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S18478C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18478C1),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7092C2  {
  int s7092c2f0;
  virtual void  v7(); // _ZN7S7092C22v7Ev
  virtual void  v8(); // _ZN7S7092C22v8Ev
  virtual void  v9(); // _ZN7S7092C22v9Ev
  virtual void  v10(); // _ZN7S7092C23v10Ev
  virtual void  v11(); // _ZN7S7092C23v11Ev
  virtual void  v12(); // _ZN7S7092C23v12Ev
  ~S7092C2(); // tgen
  S7092C2(); // tgen
};
//SIG(-1 S7092C2) C1{ v1 v2 v3 v4 v5 v6 Fi}


void  S7092C2 ::v7(){vfunc_called(this, "_ZN7S7092C22v7Ev");}
void  S7092C2 ::v8(){vfunc_called(this, "_ZN7S7092C22v8Ev");}
void  S7092C2 ::v9(){vfunc_called(this, "_ZN7S7092C22v9Ev");}
void  S7092C2 ::v10(){vfunc_called(this, "_ZN7S7092C23v10Ev");}
void  S7092C2 ::v11(){vfunc_called(this, "_ZN7S7092C23v11Ev");}
void  S7092C2 ::v12(){vfunc_called(this, "_ZN7S7092C23v12Ev");}
S7092C2 ::~S7092C2(){ note_dtor("S7092C2", this);} // tgen
S7092C2 ::S7092C2(){ note_ctor("S7092C2", this);} // tgen

static void Test_S7092C2()
{
  extern Class_Descriptor cd_S7092C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7092C2, buf);
    S7092C2 *dp, &lv = *(dp=new (buf) S7092C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7092C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7092C2)");
    check_field_offset(lv, s7092c2f0, ABISELECT(8,4), "S7092C2.s7092c2f0");
    test_class_info(&lv, &cd_S7092C2);
    dp->~S7092C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7092C2(Test_S7092C2, "S7092C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7092C2C1Ev();
extern void _ZN7S7092C2D1Ev();
Name_Map name_map_S7092C2[] = {
  NSPAIR(_ZN7S7092C2C1Ev),
  NSPAIR(_ZN7S7092C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7092C2[];
extern void _ZN7S7092C22v7Ev();
extern void _ZN7S7092C22v8Ev();
extern void _ZN7S7092C22v9Ev();
extern void _ZN7S7092C23v10Ev();
extern void _ZN7S7092C23v11Ev();
extern void _ZN7S7092C23v12Ev();
static  VTBL_ENTRY vtc_S7092C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7092C2[0]),
  (VTBL_ENTRY)&_ZN7S7092C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7092C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7092C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7092C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7092C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7092C23v12Ev,
};
extern VTBL_ENTRY _ZTI7S7092C2[];
extern  VTBL_ENTRY _ZTV7S7092C2[];
Class_Descriptor cd_S7092C2 = {  "S7092C2", // class name
  0,0,//no base classes
  &(vtc_S7092C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7092C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7092C2),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  S7092C1  : S7092C2 {
  void *s7092c1f0[3];
  int s7092c1f1;
  virtual void  v1(); // _ZN7S7092C12v1Ev
  virtual void  v2(); // _ZN7S7092C12v2Ev
  virtual void  v3(); // _ZN7S7092C12v3Ev
  virtual void  v4(); // _ZN7S7092C12v4Ev
  virtual void  v5(); // _ZN7S7092C12v5Ev
  virtual void  v6(); // _ZN7S7092C12v6Ev
  ~S7092C1(); // tgen
  S7092C1(); // tgen
};
//SIG(1 S7092C1) C1{ BC2{ v7 v8 v9 v10 v11 v12 Fi} v1 v2 v3 v4 v5 v6 Fp[3] Fi}


void  S7092C1 ::v1(){vfunc_called(this, "_ZN7S7092C12v1Ev");}
void  S7092C1 ::v2(){vfunc_called(this, "_ZN7S7092C12v2Ev");}
void  S7092C1 ::v3(){vfunc_called(this, "_ZN7S7092C12v3Ev");}
void  S7092C1 ::v4(){vfunc_called(this, "_ZN7S7092C12v4Ev");}
void  S7092C1 ::v5(){vfunc_called(this, "_ZN7S7092C12v5Ev");}
void  S7092C1 ::v6(){vfunc_called(this, "_ZN7S7092C12v6Ev");}
S7092C1 ::~S7092C1(){ note_dtor("S7092C1", this);} // tgen
S7092C1 ::S7092C1(){ note_ctor("S7092C1", this);} // tgen

static void Test_S7092C1()
{
  extern Class_Descriptor cd_S7092C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S7092C1, buf);
    S7092C1 *dp, &lv = *(dp=new (buf) S7092C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S7092C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7092C1)");
    check_base_class_offset(lv, (S7092C2*), 0, "S7092C1");
    check_field_offset(lv, s7092c1f0, ABISELECT(16,8), "S7092C1.s7092c1f0");
    check_field_offset(lv, s7092c1f1, ABISELECT(40,20), "S7092C1.s7092c1f1");
    test_class_info(&lv, &cd_S7092C1);
    dp->~S7092C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7092C1(Test_S7092C1, "S7092C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S7092C1C1Ev();
extern void _ZN7S7092C1D1Ev();
Name_Map name_map_S7092C1[] = {
  NSPAIR(_ZN7S7092C1C1Ev),
  NSPAIR(_ZN7S7092C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7092C2;
extern VTBL_ENTRY _ZTI7S7092C2[];
extern  VTBL_ENTRY _ZTV7S7092C2[];
static Base_Class bases_S7092C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7092C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S7092C1[];
extern void _ZN7S7092C22v7Ev();
extern void _ZN7S7092C22v8Ev();
extern void _ZN7S7092C22v9Ev();
extern void _ZN7S7092C23v10Ev();
extern void _ZN7S7092C23v11Ev();
extern void _ZN7S7092C23v12Ev();
extern void _ZN7S7092C12v1Ev();
extern void _ZN7S7092C12v2Ev();
extern void _ZN7S7092C12v3Ev();
extern void _ZN7S7092C12v4Ev();
extern void _ZN7S7092C12v5Ev();
extern void _ZN7S7092C12v6Ev();
static  VTBL_ENTRY vtc_S7092C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7092C1[0]),
  (VTBL_ENTRY)&_ZN7S7092C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7092C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7092C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7092C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7092C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7092C23v12Ev,
  (VTBL_ENTRY)&_ZN7S7092C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7092C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7092C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7092C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7092C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7092C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S7092C1[];
extern  VTBL_ENTRY _ZTV7S7092C1[];
Class_Descriptor cd_S7092C1 = {  "S7092C1", // class name
  bases_S7092C1, 1,
  &(vtc_S7092C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S7092C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7092C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7104C2  {
  char s7104c2f0;
  virtual  ~S7104C2(); // _ZN7S7104C2D1Ev
  virtual void  v7(); // _ZN7S7104C22v7Ev
  virtual void  v8(); // _ZN7S7104C22v8Ev
  virtual void  v9(); // _ZN7S7104C22v9Ev
  virtual void  v10(); // _ZN7S7104C23v10Ev
  virtual void  v11(); // _ZN7S7104C23v11Ev
  S7104C2(); // tgen
};
//SIG(-1 S7104C2) C1{ vd v1 v2 v3 v4 v5 Fc}


 S7104C2 ::~S7104C2(){ note_dtor("S7104C2", this);}
void  S7104C2 ::v7(){vfunc_called(this, "_ZN7S7104C22v7Ev");}
void  S7104C2 ::v8(){vfunc_called(this, "_ZN7S7104C22v8Ev");}
void  S7104C2 ::v9(){vfunc_called(this, "_ZN7S7104C22v9Ev");}
void  S7104C2 ::v10(){vfunc_called(this, "_ZN7S7104C23v10Ev");}
void  S7104C2 ::v11(){vfunc_called(this, "_ZN7S7104C23v11Ev");}
S7104C2 ::S7104C2(){ note_ctor("S7104C2", this);} // tgen

static void Test_S7104C2()
{
  extern Class_Descriptor cd_S7104C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7104C2, buf);
    S7104C2 *dp, &lv = *(dp=new (buf) S7104C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7104C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7104C2)");
    check_field_offset(lv, s7104c2f0, ABISELECT(8,4), "S7104C2.s7104c2f0");
    test_class_info(&lv, &cd_S7104C2);
    dp->~S7104C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7104C2(Test_S7104C2, "S7104C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7104C2C1Ev();
extern void _ZN7S7104C2D1Ev();
Name_Map name_map_S7104C2[] = {
  NSPAIR(_ZN7S7104C2C1Ev),
  NSPAIR(_ZN7S7104C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7104C2[];
extern void _ZN7S7104C2D1Ev();
extern void _ZN7S7104C2D0Ev();
extern void _ZN7S7104C22v7Ev();
extern void _ZN7S7104C22v8Ev();
extern void _ZN7S7104C22v9Ev();
extern void _ZN7S7104C23v10Ev();
extern void _ZN7S7104C23v11Ev();
static  VTBL_ENTRY vtc_S7104C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7104C2[0]),
  (VTBL_ENTRY)&_ZN7S7104C2D1Ev,
  (VTBL_ENTRY)&_ZN7S7104C2D0Ev,
  (VTBL_ENTRY)&_ZN7S7104C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7104C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7104C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7104C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7104C23v11Ev,
};
extern VTBL_ENTRY _ZTI7S7104C2[];
extern  VTBL_ENTRY _ZTV7S7104C2[];
Class_Descriptor cd_S7104C2 = {  "S7104C2", // class name
  0,0,//no base classes
  &(vtc_S7104C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7104C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7104C2),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  S7104C1  : S7104C2 {
  char s7104c1f0[9];
  virtual  ~S7104C1(); // _ZN7S7104C1D1Ev
  virtual void  v1(); // _ZN7S7104C12v1Ev
  virtual void  v2(); // _ZN7S7104C12v2Ev
  virtual void  v3(); // _ZN7S7104C12v3Ev
  virtual void  v4(); // _ZN7S7104C12v4Ev
  virtual void  v5(); // _ZN7S7104C12v5Ev
  virtual void  v6(); // _ZN7S7104C12v6Ev
  S7104C1(); // tgen
};
//SIG(1 S7104C1) C1{ BC2{ vd v7 v8 v9 v10 v11 Fc} vd v1 v2 v3 v4 v5 v6 Fc[9]}


 S7104C1 ::~S7104C1(){ note_dtor("S7104C1", this);}
void  S7104C1 ::v1(){vfunc_called(this, "_ZN7S7104C12v1Ev");}
void  S7104C1 ::v2(){vfunc_called(this, "_ZN7S7104C12v2Ev");}
void  S7104C1 ::v3(){vfunc_called(this, "_ZN7S7104C12v3Ev");}
void  S7104C1 ::v4(){vfunc_called(this, "_ZN7S7104C12v4Ev");}
void  S7104C1 ::v5(){vfunc_called(this, "_ZN7S7104C12v5Ev");}
void  S7104C1 ::v6(){vfunc_called(this, "_ZN7S7104C12v6Ev");}
S7104C1 ::S7104C1(){ note_ctor("S7104C1", this);} // tgen

static void Test_S7104C1()
{
  extern Class_Descriptor cd_S7104C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S7104C1, buf);
    S7104C1 *dp, &lv = *(dp=new (buf) S7104C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7104C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7104C1)");
    check_base_class_offset(lv, (S7104C2*), 0, "S7104C1");
    check_field_offset(lv, s7104c1f0, ABISELECT(9,5), "S7104C1.s7104c1f0");
    test_class_info(&lv, &cd_S7104C1);
    dp->~S7104C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7104C1(Test_S7104C1, "S7104C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S7104C1C1Ev();
extern void _ZN7S7104C1D1Ev();
Name_Map name_map_S7104C1[] = {
  NSPAIR(_ZN7S7104C1C1Ev),
  NSPAIR(_ZN7S7104C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7104C2;
extern VTBL_ENTRY _ZTI7S7104C2[];
extern  VTBL_ENTRY _ZTV7S7104C2[];
static Base_Class bases_S7104C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7104C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S7104C1[];
extern void _ZN7S7104C1D1Ev();
extern void _ZN7S7104C1D0Ev();
extern void _ZN7S7104C22v7Ev();
extern void _ZN7S7104C22v8Ev();
extern void _ZN7S7104C22v9Ev();
extern void _ZN7S7104C23v10Ev();
extern void _ZN7S7104C23v11Ev();
extern void _ZN7S7104C12v1Ev();
extern void _ZN7S7104C12v2Ev();
extern void _ZN7S7104C12v3Ev();
extern void _ZN7S7104C12v4Ev();
extern void _ZN7S7104C12v5Ev();
extern void _ZN7S7104C12v6Ev();
static  VTBL_ENTRY vtc_S7104C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7104C1[0]),
  (VTBL_ENTRY)&_ZN7S7104C1D1Ev,
  (VTBL_ENTRY)&_ZN7S7104C1D0Ev,
  (VTBL_ENTRY)&_ZN7S7104C22v7Ev,
  (VTBL_ENTRY)&_ZN7S7104C22v8Ev,
  (VTBL_ENTRY)&_ZN7S7104C22v9Ev,
  (VTBL_ENTRY)&_ZN7S7104C23v10Ev,
  (VTBL_ENTRY)&_ZN7S7104C23v11Ev,
  (VTBL_ENTRY)&_ZN7S7104C12v1Ev,
  (VTBL_ENTRY)&_ZN7S7104C12v2Ev,
  (VTBL_ENTRY)&_ZN7S7104C12v3Ev,
  (VTBL_ENTRY)&_ZN7S7104C12v4Ev,
  (VTBL_ENTRY)&_ZN7S7104C12v5Ev,
  (VTBL_ENTRY)&_ZN7S7104C12v6Ev,
};
extern VTBL_ENTRY _ZTI7S7104C1[];
extern  VTBL_ENTRY _ZTV7S7104C1[];
Class_Descriptor cd_S7104C1 = {  "S7104C1", // class name
  bases_S7104C1, 1,
  &(vtc_S7104C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S7104C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7104C1),15, //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  S20490C5  : S20955C5 , S7291C10_nt {
};
//SIG(-1 S20490C5) C1{ BC2{ m FL Fc:0} BC3{ m}}



static void Test_S20490C5()
{
  extern Class_Descriptor cd_S20490C5;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(2,3)];
    init_test(&cd_S20490C5, buf);
    S20490C5 &lv = *(new (buf) S20490C5());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8, "sizeof(S20490C5)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20490C5)");
    check_base_class_offset(lv, (S20955C5*), 0, "S20490C5");
    check_base_class_offset(lv, (S7291C10_nt*), 0, "S20490C5");
    test_class_info(&lv, &cd_S20490C5);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20490C5(Test_S20490C5, "S20490C5", 8);

#else // __cplusplus

extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S7291C10_nt;
extern VTBL_ENTRY _ZTI11S7291C10_nt[];
static Base_Class bases_S20490C5[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20955C5,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7291C10_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 _ZTI8S20490C5[];
Class_Descriptor cd_S20490C5 = {  "S20490C5", // class name
  bases_S20490C5, 2,
  0, // no vftv
  0, //no vtt
  8, // object size
  NSPAIRA(_ZTI8S20490C5),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  S20490C3  : S7291C10_nt , S20490C5 {
  ::S3052C22_nt s20490c3f0;
  virtual  ~S20490C3(); // _ZN8S20490C3D1Ev
  S20490C3(); // tgen
};
//SIG(-1 S20490C3) C1{ BC2{ m} BC3{ BC4{ m FL Fc:0} BC2} vd FC5{}}


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

static void Test_S20490C3()
{
  extern Class_Descriptor cd_S20490C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S20490C3, buf);
    S20490C3 *dp, &lv = *(dp=new (buf) S20490C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S20490C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20490C3)");
    /*is_ambiguous_... S20490C3::S7291C10_nt */ AMB_check_base_class_offset(lv, (S7291C10_nt*), 0, "S20490C3");
    check_base_class_offset(lv, (S20955C5*)(S20490C5*), ABISELECT(8,4), "S20490C3");
    check_base_class_offset(lv, (S7291C10_nt*)(S20490C5*), ABISELECT(8,4), "S20490C3");
    check_base_class_offset(lv, (S20490C5*), ABISELECT(8,4), "S20490C3");
    check_field_offset(lv, s20490c3f0, ABISELECT(16,12), "S20490C3.s20490c3f0");
    test_class_info(&lv, &cd_S20490C3);
    dp->~S20490C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20490C3(Test_S20490C3, "S20490C3", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S20490C3C1Ev();
extern void _ZN8S20490C3D1Ev();
Name_Map name_map_S20490C3[] = {
  NSPAIR(_ZN8S20490C3C1Ev),
  NSPAIR(_ZN8S20490C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7291C10_nt;
extern VTBL_ENTRY _ZTI11S7291C10_nt[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S7291C10_nt;
extern VTBL_ENTRY _ZTI11S7291C10_nt[];
extern Class_Descriptor cd_S20490C5;
extern VTBL_ENTRY _ZTI8S20490C5[];
static Base_Class bases_S20490C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7291C10_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_S20955C5,    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_S7291C10_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_S20490C5,    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 _ZTI8S20490C3[];
extern void _ZN8S20490C3D1Ev();
extern void _ZN8S20490C3D0Ev();
static  VTBL_ENTRY vtc_S20490C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20490C3[0]),
  (VTBL_ENTRY)&_ZN8S20490C3D1Ev,
  (VTBL_ENTRY)&_ZN8S20490C3D0Ev,
};
extern VTBL_ENTRY _ZTI8S20490C3[];
extern  VTBL_ENTRY _ZTV8S20490C3[];
Class_Descriptor cd_S20490C3 = {  "S20490C3", // class name
  bases_S20490C3, 4,
  &(vtc_S20490C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S20490C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20490C3),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  S20490C2  : virtual S20490C3 {
  virtual  ~S20490C2(); // _ZN8S20490C2D2Ev
  S20490C2(); // tgen
};
//SIG(-1 S20490C2) C1{ VBC2{ BC3{ m} BC4{ BC5{ m FL Fc:0} BC3} vd FC6{}} vd}


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

static void Test_S20490C2()
{
  extern Class_Descriptor cd_S20490C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S20490C2, buf);
    S20490C2 *dp, &lv = *(dp=new (buf) S20490C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S20490C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20490C2)");
    /*is_ambiguous_... S20490C3::S7291C10_nt */ AMB_check_base_class_offset(lv, (S7291C10_nt*)(S20490C3*), ABISELECT(8,4), "S20490C2");
    check_base_class_offset(lv, (S20955C5*)(S20490C5*)(S20490C3*), ABISELECT(16,8), "S20490C2");
    check_base_class_offset(lv, (S7291C10_nt*)(S20490C5*)(S20490C3*), ABISELECT(16,8), "S20490C2");
    check_base_class_offset(lv, (S20490C5*)(S20490C3*), ABISELECT(16,8), "S20490C2");
    check_base_class_offset(lv, (S20490C3*), ABISELECT(8,4), "S20490C2");
    test_class_info(&lv, &cd_S20490C2);
    dp->~S20490C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20490C2(Test_S20490C2, "S20490C2", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S20490C2C1Ev();
extern void _ZN8S20490C2D2Ev();
Name_Map name_map_S20490C2[] = {
  NSPAIR(_ZN8S20490C2C1Ev),
  NSPAIR(_ZN8S20490C2D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7291C10_nt;
extern VTBL_ENTRY _ZTI11S7291C10_nt[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S7291C10_nt;
extern VTBL_ENTRY _ZTI11S7291C10_nt[];
extern Class_Descriptor cd_S20490C5;
extern VTBL_ENTRY _ZTI8S20490C5[];
extern Class_Descriptor cd_S20490C3;
extern VTBL_ENTRY _ZTI8S20490C3[];
extern  VTBL_ENTRY _ZTV8S20490C3[];
static Base_Class bases_S20490C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7291C10_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
    4, //immediately_derived
  0, 0},
  {&cd_S20955C5,    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_S7291C10_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
    3, //immediately_derived
  0, 0},
  {&cd_S20490C5,    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, 0},
  {&cd_S20490C3,    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 _ZTI8S20490C2[];
extern void _ZN8S20490C2D1Ev();
extern void _ZN8S20490C2D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20490C2D1Ev,_ZTv0_n12_N8S20490C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S20490C2D1Ev,_ZThn4_N8S20490C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20490C2D0Ev,_ZTv0_n12_N8S20490C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S20490C2D0Ev,_ZThn4_N8S20490C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20490C2[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20490C2[0]),
  (VTBL_ENTRY)&_ZN8S20490C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20490C2D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20490C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20490C2D1Ev,_ZTv0_n12_N8S20490C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20490C2D0Ev,_ZTv0_n12_N8S20490C2D0Ev),
};
extern VTBL_ENTRY _ZTV8S20490C2[];
static  VTT_ENTRY vtt_S20490C2[] = {
  {&(_ZTV8S20490C2[3]),  3,10},
  {&(_ZTV8S20490C2[8]),  8,10},
};
extern VTBL_ENTRY _ZTI8S20490C2[];
extern  VTBL_ENTRY _ZTV8S20490C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20490C2[];
static VTBL_ENTRY alt_thunk_names231[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20490C2D0Ev,_ZTv0_n12_N8S20490C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20490C2D0Ev,_ZThn4_N8S20490C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20490C2D1Ev,_ZTv0_n12_N8S20490C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20490C2D1Ev,_ZThn4_N8S20490C2D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20490C2 = {  "S20490C2", // class name
  bases_S20490C2, 5,
  &(vtc_S20490C2[0]), // expected_vtbl_contents
  &(vtt_S20490C2[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S20490C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20490C2),10, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20490C2),2, //virtual table table var
  1, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names231,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20490C1  : virtual S20490C2 {
  virtual  ~S20490C1(); // _ZN8S20490C1D2Ev
  S20490C1(); // tgen
};
//SIG(1 S20490C1) C1{ VBC2{ VBC3{ BC4{ m} BC5{ BC6{ m FL Fc:0} BC4} vd FC7{}} vd} vd}


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

static void Test_S20490C1()
{
  extern Class_Descriptor cd_S20490C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S20490C1, buf);
    S20490C1 *dp, &lv = *(dp=new (buf) S20490C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S20490C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20490C1)");
    /*is_ambiguous_... S20490C3::S7291C10_nt */ AMB_check_base_class_offset(lv, (S7291C10_nt*)(S20490C3*), ABISELECT(8,4), "S20490C1");
    check_base_class_offset(lv, (S20955C5*)(S20490C5*)(S20490C3*), ABISELECT(16,8), "S20490C1");
    check_base_class_offset(lv, (S7291C10_nt*)(S20490C5*)(S20490C3*), ABISELECT(16,8), "S20490C1");
    check_base_class_offset(lv, (S20490C5*)(S20490C3*), ABISELECT(16,8), "S20490C1");
    check_base_class_offset(lv, (S20490C3*)(S20490C2*), ABISELECT(8,4), "S20490C1");
    check_base_class_offset(lv, (S20490C2*), 0, "S20490C1");
    test_class_info(&lv, &cd_S20490C1);
    dp->~S20490C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20490C1(Test_S20490C1, "S20490C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S20490C1C1Ev();
extern void _ZN8S20490C1D2Ev();
Name_Map name_map_S20490C1[] = {
  NSPAIR(_ZN8S20490C1C1Ev),
  NSPAIR(_ZN8S20490C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S7291C10_nt;
extern VTBL_ENTRY _ZTI11S7291C10_nt[];
extern Class_Descriptor cd_S20955C5;
extern VTBL_ENTRY _ZTI8S20955C5[];
extern Class_Descriptor cd_S7291C10_nt;
extern VTBL_ENTRY _ZTI11S7291C10_nt[];
extern Class_Descriptor cd_S20490C5;
extern VTBL_ENTRY _ZTI8S20490C5[];
extern Class_Descriptor cd_S20490C3;
extern VTBL_ENTRY _ZTI8S20490C3[];
extern  VTBL_ENTRY _ZTV8S20490C3[];
extern Class_Descriptor cd_S20490C2;
extern VTBL_ENTRY _ZTI8S20490C2[];
extern  VTBL_ENTRY _ZTV8S20490C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20490C2[];
static Base_Class bases_S20490C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7291C10_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
    4, //immediately_derived
  0, 0},
  {&cd_S20955C5,    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_S7291C10_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
    3, //immediately_derived
  0, 0},
  {&cd_S20490C5,    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, 0},
  {&cd_S20490C3,    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
    5, //immediately_derived
  0, 1},
  {&cd_S20490C2,    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 _ZTI8S20490C1[];
extern void _ZN8S20490C1D1Ev();
extern void _ZN8S20490C1D0Ev();
extern void ABISELECT(_ZTv0_n24_N8S20490C1D1Ev,_ZTv0_n12_N8S20490C1D1Ev)();
extern void ABISELECT(_ZThn8_N8S20490C1D1Ev,_ZThn4_N8S20490C1D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20490C1D0Ev,_ZTv0_n12_N8S20490C1D0Ev)();
extern void ABISELECT(_ZThn8_N8S20490C1D0Ev,_ZThn4_N8S20490C1D0Ev)() __attribute__((weak));
static  VTBL_ENTRY vtc_S20490C1[] = {
  0,
  0,
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20490C1[0]),
  (VTBL_ENTRY)&_ZN8S20490C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20490C1D0Ev,
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20490C1[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20490C1D1Ev,_ZTv0_n12_N8S20490C1D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20490C1D0Ev,_ZTv0_n12_N8S20490C1D0Ev),
};
extern VTBL_ENTRY _ZTV8S20490C1[];
extern void _ZN8S20490C2D1Ev();
extern void _ZN8S20490C2D0Ev();
static  VTBL_ENTRY _tg__ZTV8S20490C2__8S20490C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20490C2[0]),
  (VTBL_ENTRY)&_ZN8S20490C2D1Ev,
  (VTBL_ENTRY)&_ZN8S20490C2D0Ev,
};
extern void ABISELECT(_ZTv0_n24_N8S20490C2D1Ev,_ZTv0_n12_N8S20490C2D1Ev)();
extern void ABISELECT(_ZThn8_N8S20490C2D1Ev,_ZThn4_N8S20490C2D1Ev)() __attribute__((weak));
extern void ABISELECT(_ZTv0_n24_N8S20490C2D0Ev,_ZTv0_n12_N8S20490C2D0Ev)();
extern void ABISELECT(_ZThn8_N8S20490C2D0Ev,_ZThn4_N8S20490C2D0Ev)() __attribute__((weak));
static  VTBL_ENTRY _tg__ZTV8S20490C3__8S20490C2__8S20490C1[] = {
  ABISELECT(-8,-4),
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20490C2[0]),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20490C2D1Ev,_ZTv0_n12_N8S20490C2D1Ev),
  (VTBL_ENTRY)&ABISELECT(_ZTv0_n24_N8S20490C2D0Ev,_ZTv0_n12_N8S20490C2D0Ev),
};
static  VTT_ENTRY vtt_S20490C1[] = {
  {&(_ZTV8S20490C1[5]),  5,12},
  {&(_ZTV8S20490C1[5]),  5,12},
  {&(_ZTV8S20490C1[10]),  10,12},
  {&(_tg__ZTV8S20490C2__8S20490C1[3]),  3,5},
  {&(_tg__ZTV8S20490C3__8S20490C2__8S20490C1[3]),  3,5},
};
extern VTBL_ENTRY _ZTI8S20490C1[];
extern  VTBL_ENTRY _ZTV8S20490C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20490C1[];
static VTBL_ENTRY alt_thunk_names232[] = {
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20490C2D0Ev,_ZTv0_n12_N8S20490C2D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20490C2D0Ev,_ZThn4_N8S20490C2D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20490C2D1Ev,_ZTv0_n12_N8S20490C2D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20490C2D1Ev,_ZThn4_N8S20490C2D1Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20490C1D0Ev,_ZTv0_n12_N8S20490C1D0Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20490C1D0Ev,_ZThn4_N8S20490C1D0Ev),
  ALT_NAMES_TERMINATOR,
  (VTBL_ENTRY)ABISELECT(_ZTv0_n24_N8S20490C1D1Ev,_ZTv0_n12_N8S20490C1D1Ev), // 
  (VTBL_ENTRY)ABISELECT(_ZThn8_N8S20490C1D1Ev,_ZThn4_N8S20490C1D1Ev),
  ALT_NAMES_TERMINATOR,
ALT_NAMES_TERMINATOR};
Class_Descriptor cd_S20490C1 = {  "S20490C1", // class name
  bases_S20490C1, 6,
  &(vtc_S20490C1[0]), // expected_vtbl_contents
  &(vtt_S20490C1[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S20490C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20490C1),12, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20490C1),5, //virtual table table var
  2, // n_initialized_bases
  1, // has_virtual_bases
  1, // has_class_type_fields
  alt_thunk_names232,
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S20261C2  {
  int s20261c2f0;
  virtual void  v5(); // _ZN8S20261C22v5Ev
  virtual void  v6(); // _ZN8S20261C22v6Ev
  virtual void  v7(); // _ZN8S20261C22v7Ev
  virtual void  v8(); // _ZN8S20261C22v8Ev
  virtual void  v9(); // _ZN8S20261C22v9Ev
  virtual void  v10(); // _ZN8S20261C23v10Ev
  ~S20261C2(); // tgen
  S20261C2(); // tgen
};
//SIG(-1 S20261C2) C1{ v1 v2 v3 v4 v5 v6 Fi}


void  S20261C2 ::v5(){vfunc_called(this, "_ZN8S20261C22v5Ev");}
void  S20261C2 ::v6(){vfunc_called(this, "_ZN8S20261C22v6Ev");}
void  S20261C2 ::v7(){vfunc_called(this, "_ZN8S20261C22v7Ev");}
void  S20261C2 ::v8(){vfunc_called(this, "_ZN8S20261C22v8Ev");}
void  S20261C2 ::v9(){vfunc_called(this, "_ZN8S20261C22v9Ev");}
void  S20261C2 ::v10(){vfunc_called(this, "_ZN8S20261C23v10Ev");}
S20261C2 ::~S20261C2(){ note_dtor("S20261C2", this);} // tgen
S20261C2 ::S20261C2(){ note_ctor("S20261C2", this);} // tgen

static void Test_S20261C2()
{
  extern Class_Descriptor cd_S20261C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20261C2, buf);
    S20261C2 *dp, &lv = *(dp=new (buf) S20261C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20261C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20261C2)");
    check_field_offset(lv, s20261c2f0, ABISELECT(8,4), "S20261C2.s20261c2f0");
    test_class_info(&lv, &cd_S20261C2);
    dp->~S20261C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20261C2(Test_S20261C2, "S20261C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20261C2C1Ev();
extern void _ZN8S20261C2D1Ev();
Name_Map name_map_S20261C2[] = {
  NSPAIR(_ZN8S20261C2C1Ev),
  NSPAIR(_ZN8S20261C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20261C2[];
extern void _ZN8S20261C22v5Ev();
extern void _ZN8S20261C22v6Ev();
extern void _ZN8S20261C22v7Ev();
extern void _ZN8S20261C22v8Ev();
extern void _ZN8S20261C22v9Ev();
extern void _ZN8S20261C23v10Ev();
static  VTBL_ENTRY vtc_S20261C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20261C2[0]),
  (VTBL_ENTRY)&_ZN8S20261C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20261C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20261C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20261C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20261C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20261C23v10Ev,
};
extern VTBL_ENTRY _ZTI8S20261C2[];
extern  VTBL_ENTRY _ZTV8S20261C2[];
Class_Descriptor cd_S20261C2 = {  "S20261C2", // class name
  0,0,//no base classes
  &(vtc_S20261C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20261C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20261C2),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  S20261C3_nt  {
  virtual  ~S20261C3_nt(); // _ZN11S20261C3_ntD1Ev
  virtual void  v11(); // _ZN11S20261C3_nt3v11Ev
  S20261C3_nt(); // tgen
};
//SIG(-1 S20261C3_nt) C1{ vd v1}


 S20261C3_nt ::~S20261C3_nt(){ note_dtor("S20261C3_nt", this);}
void  S20261C3_nt ::v11(){vfunc_called(this, "_ZN11S20261C3_nt3v11Ev");}
S20261C3_nt ::S20261C3_nt(){ note_ctor("S20261C3_nt", this);} // tgen

//skip512 S20261C3_nt

#else // __cplusplus

extern void _ZN11S20261C3_ntC1Ev();
extern void _ZN11S20261C3_ntD1Ev();
Name_Map name_map_S20261C3_nt[] = {
  NSPAIR(_ZN11S20261C3_ntC1Ev),
  NSPAIR(_ZN11S20261C3_ntD1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI11S20261C3_nt[];
extern void _ZN11S20261C3_ntD1Ev();
extern void _ZN11S20261C3_ntD0Ev();
extern void _ZN11S20261C3_nt3v11Ev();
static  VTBL_ENTRY vtc_S20261C3_nt[] = {
  0,
  (VTBL_ENTRY)&(_ZTI11S20261C3_nt[0]),
  (VTBL_ENTRY)&_ZN11S20261C3_ntD1Ev,
  (VTBL_ENTRY)&_ZN11S20261C3_ntD0Ev,
  (VTBL_ENTRY)&_ZN11S20261C3_nt3v11Ev,
};
extern VTBL_ENTRY _ZTI11S20261C3_nt[];
VTBL_ENTRY *P__ZTI11S20261C3_nt = _ZTI11S20261C3_nt; 
extern  VTBL_ENTRY _ZTV11S20261C3_nt[];
Class_Descriptor cd_S20261C3_nt = {  "S20261C3_nt", // class name
  0,0,//no base classes
  &(vtc_S20261C3_nt[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI11S20261C3_nt),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV11S20261C3_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  S20261C1  : virtual S20261C2 , S20261C3_nt {
  virtual  ~S20261C1(); // _ZN8S20261C1D2Ev
  virtual void  v1(); // _ZN8S20261C12v1Ev
  virtual void  v2(); // _ZN8S20261C12v2Ev
  virtual void  v3(); // _ZN8S20261C12v3Ev
  virtual void  v4(); // _ZN8S20261C12v4Ev
  S20261C1(); // tgen
};
//SIG(1 S20261C1) C1{ VBC2{ v5 v6 v7 v8 v9 v10 Fi} BC3{ vd v11} vd v1 v2 v3 v4}


 S20261C1 ::~S20261C1(){ note_dtor("S20261C1", this);}
void  S20261C1 ::v1(){vfunc_called(this, "_ZN8S20261C12v1Ev");}
void  S20261C1 ::v2(){vfunc_called(this, "_ZN8S20261C12v2Ev");}
void  S20261C1 ::v3(){vfunc_called(this, "_ZN8S20261C12v3Ev");}
void  S20261C1 ::v4(){vfunc_called(this, "_ZN8S20261C12v4Ev");}
S20261C1 ::S20261C1(){ note_ctor("S20261C1", this);} // tgen

static void Test_S20261C1()
{
  extern Class_Descriptor cd_S20261C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20261C1, buf);
    S20261C1 *dp, &lv = *(dp=new (buf) S20261C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20261C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20261C1)");
    check_base_class_offset(lv, (S20261C2*), ABISELECT(8,4), "S20261C1");
    check_base_class_offset(lv, (S20261C3_nt*), 0, "S20261C1");
    test_class_info(&lv, &cd_S20261C1);
    dp->~S20261C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20261C1(Test_S20261C1, "S20261C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20261C1C1Ev();
extern void _ZN8S20261C1D2Ev();
Name_Map name_map_S20261C1[] = {
  NSPAIR(_ZN8S20261C1C1Ev),
  NSPAIR(_ZN8S20261C1D2Ev),
  {0,0}
};
extern Class_Descriptor cd_S20261C2;
extern VTBL_ENTRY _ZTI8S20261C2[];
extern  VTBL_ENTRY _ZTV8S20261C2[];
extern Class_Descriptor cd_S20261C3_nt;
extern VTBL_ENTRY _ZTI11S20261C3_nt[];
extern  VTBL_ENTRY _ZTV11S20261C3_nt[];
static Base_Class bases_S20261C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20261C2,    ABISELECT(8,4), //bcp->offset
    10, //bcp->virtual_function_table_offset
    8, //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_S20261C3_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 _ZTI8S20261C1[];
extern void _ZN8S20261C1D1Ev();
extern void _ZN8S20261C1D0Ev();
extern void _ZN11S20261C3_nt3v11Ev();
extern void _ZN8S20261C12v1Ev();
extern void _ZN8S20261C12v2Ev();
extern void _ZN8S20261C12v3Ev();
extern void _ZN8S20261C12v4Ev();
extern void _ZN8S20261C22v5Ev();
extern void _ZN8S20261C22v6Ev();
extern void _ZN8S20261C22v7Ev();
extern void _ZN8S20261C22v8Ev();
extern void _ZN8S20261C22v9Ev();
extern void _ZN8S20261C23v10Ev();
static  VTBL_ENTRY vtc_S20261C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20261C1[0]),
  (VTBL_ENTRY)&_ZN8S20261C1D1Ev,
  (VTBL_ENTRY)&_ZN8S20261C1D0Ev,
  (VTBL_ENTRY)&_ZN11S20261C3_nt3v11Ev,
  (VTBL_ENTRY)&_ZN8S20261C12v1Ev,
  (VTBL_ENTRY)&_ZN8S20261C12v2Ev,
  (VTBL_ENTRY)&_ZN8S20261C12v3Ev,
  (VTBL_ENTRY)&_ZN8S20261C12v4Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20261C1[0]),
  (VTBL_ENTRY)&_ZN8S20261C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20261C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20261C22v7Ev,
  (VTBL_ENTRY)&_ZN8S20261C22v8Ev,
  (VTBL_ENTRY)&_ZN8S20261C22v9Ev,
  (VTBL_ENTRY)&_ZN8S20261C23v10Ev,
};
extern VTBL_ENTRY _ZTV8S20261C1[];
static  VTT_ENTRY vtt_S20261C1[] = {
  {&(_ZTV8S20261C1[3]),  3,24},
  {&(_ZTV8S20261C1[18]),  18,24},
};
extern VTBL_ENTRY _ZTI8S20261C1[];
extern  VTBL_ENTRY _ZTV8S20261C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20261C1[];
Class_Descriptor cd_S20261C1 = {  "S20261C1", // class name
  bases_S20261C1, 2,
  &(vtc_S20261C1[0]), // expected_vtbl_contents
  &(vtt_S20261C1[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20261C1),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S20261C1),24, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20261C1),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  S14863C1  {
  short s14863c1f0[2];
  char s14863c1f1[4];
  short s14863c1f2[2];
  char s14863c1f3;
  short s14863c1f4[2];
  char s14863c1f5[14];
  short s14863c1f6;
  char s14863c1f7[258];
  __tsi64 s14863c1f8[2];
};
//SIG(1 S14863C1) C1{ Fs[2] Fc[4] Fs[2] Fc Fs[2] Fc[14] Fs Fc[258] FL[2]}



static void Test_S14863C1()
{
  {
    init_simple_test("S14863C1");
    S14863C1 lv;
    check2(sizeof(lv), ABISELECT(312,308), "sizeof(S14863C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14863C1)");
    check_field_offset(lv, s14863c1f0, 0, "S14863C1.s14863c1f0");
    check_field_offset(lv, s14863c1f1, 4, "S14863C1.s14863c1f1");
    check_field_offset(lv, s14863c1f2, 8, "S14863C1.s14863c1f2");
    check_field_offset(lv, s14863c1f3, 12, "S14863C1.s14863c1f3");
    check_field_offset(lv, s14863c1f4, 14, "S14863C1.s14863c1f4");
    check_field_offset(lv, s14863c1f5, 18, "S14863C1.s14863c1f5");
    check_field_offset(lv, s14863c1f6, 32, "S14863C1.s14863c1f6");
    check_field_offset(lv, s14863c1f7, 34, "S14863C1.s14863c1f7");
    check_field_offset(lv, s14863c1f8, ABISELECT(296,292), "S14863C1.s14863c1f8");
  }
}
static Arrange_To_Call_Me vS14863C1(Test_S14863C1, "S14863C1", ABISELECT(312,308));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S5532C2_nt  {
  int s5532c2f0[3];
};
//SIG(-1 S5532C2_nt) C1{ Fi[3]}



//skip512 S5532C2_nt

#else // __cplusplus

Class_Descriptor cd_S5532C2_nt = {  "S5532C2_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  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  S5532C1  : S5532C2_nt {
  int s5532c1f0;
  ::S4259C12 s5532c1f1[16];
};
//SIG(1 S5532C1) C1{ BC2{ Fi[3]} Fi FC3{ Fi Fc[438] Fi Fc[257] Fi[2]}[16]}



static void Test_S5532C1()
{
  extern Class_Descriptor cd_S5532C1;
  void *lvp;
  {
    int buf[2869];
    init_test(&cd_S5532C1, buf);
    S5532C1 &lv = *(new (buf) S5532C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 11472, "sizeof(S5532C1)");
    check2(__alignof__(lv), 4, "__alignof__(S5532C1)");
    check_base_class_offset(lv, (S5532C2_nt*), 0, "S5532C1");
    check_field_offset(lv, s5532c1f0, 12, "S5532C1.s5532c1f0");
    check_field_offset(lv, s5532c1f1, 16, "S5532C1.s5532c1f1");
    test_class_info(&lv, &cd_S5532C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5532C1(Test_S5532C1, "S5532C1", 11472);

#else // __cplusplus

extern Class_Descriptor cd_S5532C2_nt;
static Base_Class bases_S5532C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5532C2_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_S5532C1 = {  "S5532C1", // class name
  bases_S5532C1, 1,
  0, // no vftv
  0, //no vtt
  11472, // 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  S7384C3  {
  ::S3351C4_nt s7384c3f0;
};
//SIG(-1 S7384C3) C1{ FC2{ m Fi[2]}}



static void Test_S7384C3()
{
  {
    init_simple_test("S7384C3");
    S7384C3 lv;
    check2(sizeof(lv), 8, "sizeof(S7384C3)");
    check2(__alignof__(lv), 4, "__alignof__(S7384C3)");
    check_field_offset(lv, s7384c3f0, 0, "S7384C3.s7384c3f0");
  }
}
static Arrange_To_Call_Me vS7384C3(Test_S7384C3, "S7384C3", 8);

#else // __cplusplus

extern VTBL_ENTRY _ZTI7S7384C3[];
VTBL_ENTRY *P__ZTI7S7384C3 = _ZTI7S7384C3; 
Class_Descriptor cd_S7384C3 = {  "S7384C3", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  8, // object size
  NSPAIRA(_ZTI7S7384C3),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
  1, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

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

#ifdef __cplusplus

struct  S7384C2  : virtual S7384C3 {
  int s7384c2f0;
  ~S7384C2(); // tgen
  S7384C2(); // tgen
};
//SIG(-1 S7384C2) C1{ VBC2{ FC3{ m Fi[2]}} Fi}


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

static void Test_S7384C2()
{
  extern Class_Descriptor cd_S7384C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S7384C2, buf);
    S7384C2 *dp, &lv = *(dp=new (buf) S7384C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S7384C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7384C2)");
    check_base_class_offset(lv, (S7384C3*), ABISELECT(12,8), "S7384C2");
    check_field_offset(lv, s7384c2f0, ABISELECT(8,4), "S7384C2.s7384c2f0");
    test_class_info(&lv, &cd_S7384C2);
    dp->~S7384C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7384C2(Test_S7384C2, "S7384C2", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN7S7384C2C1Ev();
extern void _ZN7S7384C2D1Ev();
Name_Map name_map_S7384C2[] = {
  NSPAIR(_ZN7S7384C2C1Ev),
  NSPAIR(_ZN7S7384C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7384C3;
extern VTBL_ENTRY _ZTI7S7384C3[];
static Base_Class bases_S7384C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7384C3,    ABISELECT(12,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 _ZTI7S7384C2[];
static  VTBL_ENTRY vtc_S7384C2[] = {
  ABISELECT(12,8),
  0,
  (VTBL_ENTRY)&(_ZTI7S7384C2[0]),
};
extern VTBL_ENTRY _ZTV7S7384C2[];
static  VTT_ENTRY vtt_S7384C2[] = {
  {&(_ZTV7S7384C2[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7384C2[];
extern  VTBL_ENTRY _ZTV7S7384C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7384C2[];
Class_Descriptor cd_S7384C2 = {  "S7384C2", // class name
  bases_S7384C2, 1,
  &(vtc_S7384C2[0]), // expected_vtbl_contents
  &(vtt_S7384C2[0]), // expected_vtt_contents
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI7S7384C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7384C2),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7384C2),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  S7384C5_nt  {
  char s7384c5f0;
  void  mf7384c5(); // _ZN10S7384C5_nt8mf7384c5Ev
};
//SIG(-1 S7384C5_nt) C1{ m Fc}


void  S7384C5_nt ::mf7384c5(){}

//skip512 S7384C5_nt

#else // __cplusplus

extern VTBL_ENTRY _ZTI10S7384C5_nt[];
VTBL_ENTRY *P__ZTI10S7384C5_nt = _ZTI10S7384C5_nt; 
Class_Descriptor cd_S7384C5_nt = {  "S7384C5_nt", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  1, // object size
  NSPAIRA(_ZTI10S7384C5_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  S7384C1  : S7384C2 , S7384C5_nt , S5635C37_nt {
  long s7384c1f0;
  int s7384c1f1;
  ~S7384C1(); // tgen
  S7384C1(); // tgen
};
//SIG(1 S7384C1) C1{ BC2{ VBC3{ FC4{ m Fi[2]}} Fi} BC5{ m Fc} BC6{ m FL} Fl Fi}


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

static void Test_S7384C1()
{
  extern Class_Descriptor cd_S7384C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S7384C1, buf);
    S7384C1 *dp, &lv = *(dp=new (buf) S7384C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S7384C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7384C1)");
    check_base_class_offset(lv, (S7384C3*)(S7384C2*), ABISELECT(36,28), "S7384C1");
    check_base_class_offset(lv, (S7384C2*), 0, "S7384C1");
    check_base_class_offset(lv, (S7384C5_nt*), ABISELECT(12,8), "S7384C1");
    check_base_class_offset(lv, (S5635C37_nt*), ABISELECT(16,12), "S7384C1");
    check_field_offset(lv, s7384c1f0, ABISELECT(24,20), "S7384C1.s7384c1f0");
    check_field_offset(lv, s7384c1f1, ABISELECT(32,24), "S7384C1.s7384c1f1");
    test_class_info(&lv, &cd_S7384C1);
    dp->~S7384C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7384C1(Test_S7384C1, "S7384C1", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN7S7384C1C1Ev();
extern void _ZN7S7384C1D1Ev();
Name_Map name_map_S7384C1[] = {
  NSPAIR(_ZN7S7384C1C1Ev),
  NSPAIR(_ZN7S7384C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7384C3;
extern VTBL_ENTRY _ZTI7S7384C3[];
extern Class_Descriptor cd_S7384C2;
extern VTBL_ENTRY _ZTI7S7384C2[];
extern  VTBL_ENTRY _ZTV7S7384C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7384C2[];
extern Class_Descriptor cd_S7384C5_nt;
extern VTBL_ENTRY _ZTI10S7384C5_nt[];
extern Class_Descriptor cd_S5635C37_nt;
extern VTBL_ENTRY _ZTI11S5635C37_nt[];
static Base_Class bases_S7384C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7384C3,    ABISELECT(36,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
  0, 1},
  {&cd_S7384C2,    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_S7384C5_nt,    ABISELECT(12,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},
  {&cd_S5635C37_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
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7384C1[];
static  VTBL_ENTRY vtc_S7384C1[] = {
  ABISELECT(36,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7384C1[0]),
};
extern VTBL_ENTRY _ZTV7S7384C1[];
static  VTBL_ENTRY _tg__ZTV7S7384C2__7S7384C1[] = {
  ABISELECT(36,28),
  0,
  (VTBL_ENTRY)&(_ZTI7S7384C2[0]),
};
static  VTT_ENTRY vtt_S7384C1[] = {
  {&(_ZTV7S7384C1[3]),  3,3},
  {&(_tg__ZTV7S7384C2__7S7384C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI7S7384C1[];
extern  VTBL_ENTRY _ZTV7S7384C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7384C1[];
Class_Descriptor cd_S7384C1 = {  "S7384C1", // class name
  bases_S7384C1, 4,
  &(vtc_S7384C1[0]), // expected_vtbl_contents
  &(vtt_S7384C1[0]), // expected_vtt_contents
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI7S7384C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV7S7384C1),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7384C1),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  S17624C1  {
  void *s17624c1f0;
  ::S2264C26 s17624c1f1;
  ::S4760C18_nt s17624c1f2;
  int s17624c1f3;
  char s17624c1f4;
  void  mf17624c1(); // _ZN8S17624C19mf17624c1Ev
};
//SIG(1 S17624C1) C1{ m Fp FC2{ m Fp Fi FC3{ m} FC4{ m}} FC5{ m FL[4]} Fi Fc}


void  S17624C1 ::mf17624c1(){}

static void Test_S17624C1()
{
  {
    init_simple_test("S17624C1");
    S17624C1 lv;
    check2(sizeof(lv), ABISELECT(64,56), "sizeof(S17624C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17624C1)");
    check_field_offset(lv, s17624c1f0, 0, "S17624C1.s17624c1f0");
    check_field_offset(lv, s17624c1f1, ABISELECT(8,4), "S17624C1.s17624c1f1");
    check_field_offset(lv, s17624c1f2, ABISELECT(24,16), "S17624C1.s17624c1f2");
    check_field_offset(lv, s17624c1f3, ABISELECT(56,48), "S17624C1.s17624c1f3");
    check_field_offset(lv, s17624c1f4, ABISELECT(60,52), "S17624C1.s17624c1f4");
  }
}
static Arrange_To_Call_Me vS17624C1(Test_S17624C1, "S17624C1", ABISELECT(64,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S21571C1  {
  int s21571c1f0;
  char s21571c1f1[2];
  int s21571c1f2;
  void *s21571c1f3[2];
  char s21571c1f4;
  __tsi64 s21571c1f5;
  void *s21571c1f6;
  int s21571c1f7;
  void *s21571c1f8[2];
  char s21571c1f9[2];
  void  mf21571c1(); // _ZN8S21571C19mf21571c1Ev
  virtual  ~S21571C1(); // _ZN8S21571C1D1Ev
  S21571C1(); // tgen
};
//SIG(1 S21571C1) C1{ vd m Fi Fc[2] Fi Fp[2] Fc FL Fp Fi Fp[2] Fc[2]}


void  S21571C1 ::mf21571c1(){}
 S21571C1 ::~S21571C1(){ note_dtor("S21571C1", this);}
S21571C1 ::S21571C1(){ note_ctor("S21571C1", this);} // tgen

static void Test_S21571C1()
{
  extern Class_Descriptor cd_S21571C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(13,15)];
    init_test(&cd_S21571C1, buf);
    S21571C1 *dp, &lv = *(dp=new (buf) S21571C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(96,56), "sizeof(S21571C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21571C1)");
    check_field_offset(lv, s21571c1f0, ABISELECT(8,4), "S21571C1.s21571c1f0");
    check_field_offset(lv, s21571c1f1, ABISELECT(12,8), "S21571C1.s21571c1f1");
    check_field_offset(lv, s21571c1f2, ABISELECT(16,12), "S21571C1.s21571c1f2");
    check_field_offset(lv, s21571c1f3, ABISELECT(24,16), "S21571C1.s21571c1f3");
    check_field_offset(lv, s21571c1f4, ABISELECT(40,24), "S21571C1.s21571c1f4");
    check_field_offset(lv, s21571c1f5, ABISELECT(48,28), "S21571C1.s21571c1f5");
    check_field_offset(lv, s21571c1f6, ABISELECT(56,36), "S21571C1.s21571c1f6");
    check_field_offset(lv, s21571c1f7, ABISELECT(64,40), "S21571C1.s21571c1f7");
    check_field_offset(lv, s21571c1f8, ABISELECT(72,44), "S21571C1.s21571c1f8");
    check_field_offset(lv, s21571c1f9, ABISELECT(88,52), "S21571C1.s21571c1f9");
    test_class_info(&lv, &cd_S21571C1);
    dp->~S21571C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21571C1(Test_S21571C1, "S21571C1", ABISELECT(96,56));

#else // __cplusplus

extern void _ZN8S21571C1C1Ev();
extern void _ZN8S21571C1D1Ev();
Name_Map name_map_S21571C1[] = {
  NSPAIR(_ZN8S21571C1C1Ev),
  NSPAIR(_ZN8S21571C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21571C1[];
extern void _ZN8S21571C1D1Ev();
extern void _ZN8S21571C1D0Ev();
static  VTBL_ENTRY vtc_S21571C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21571C1[0]),
  (VTBL_ENTRY)&_ZN8S21571C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21571C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21571C1[];
extern  VTBL_ENTRY _ZTV8S21571C1[];
Class_Descriptor cd_S21571C1 = {  "S21571C1", // class name
  0,0,//no base classes
  &(vtc_S21571C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(96,56), // object size
  NSPAIRA(_ZTI8S21571C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21571C1),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  S16314C1  {
  ::S2264C37 s16314c1f0;
  ::S17465C4_nt s16314c1f1;
  int s16314c1f2;
  void *s16314c1f3;
  void  mf16314c1(); // _ZN8S16314C19mf16314c1Ev
};
//SIG(1 S16314C1) C1{ m FC2{ m Fp Fi[2] FC3{ m}} FC4{ m FC5{ FL[4]}} Fi Fp}


void  S16314C1 ::mf16314c1(){}

static void Test_S16314C1()
{
  {
    init_simple_test("S16314C1");
    S16314C1 lv;
    check2(sizeof(lv), ABISELECT(72,56), "sizeof(S16314C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16314C1)");
    check_field_offset(lv, s16314c1f0, 0, "S16314C1.s16314c1f0");
    check_field_offset(lv, s16314c1f1, ABISELECT(24,16), "S16314C1.s16314c1f1");
    check_field_offset(lv, s16314c1f2, ABISELECT(56,48), "S16314C1.s16314c1f2");
    check_field_offset(lv, s16314c1f3, ABISELECT(64,52), "S16314C1.s16314c1f3");
  }
}
static Arrange_To_Call_Me vS16314C1(Test_S16314C1, "S16314C1", ABISELECT(72,56));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S9875C2  {
  int s9875c2f0;
  void *s9875c2f1[2];
  int s9875c2f2;
  virtual  ~S9875C2(); // _ZN7S9875C2D1Ev
  virtual void  v5(); // _ZN7S9875C22v5Ev
  virtual void  v6(); // _ZN7S9875C22v6Ev
  virtual void  v7(); // _ZN7S9875C22v7Ev
  virtual void  v8(); // _ZN7S9875C22v8Ev
  S9875C2(); // tgen
};
//SIG(-1 S9875C2) C1{ vd v1 v2 v3 v4 Fi Fp[2] Fi}


 S9875C2 ::~S9875C2(){ note_dtor("S9875C2", this);}
void  S9875C2 ::v5(){vfunc_called(this, "_ZN7S9875C22v5Ev");}
void  S9875C2 ::v6(){vfunc_called(this, "_ZN7S9875C22v6Ev");}
void  S9875C2 ::v7(){vfunc_called(this, "_ZN7S9875C22v7Ev");}
void  S9875C2 ::v8(){vfunc_called(this, "_ZN7S9875C22v8Ev");}
S9875C2 ::S9875C2(){ note_ctor("S9875C2", this);} // tgen

static void Test_S9875C2()
{
  extern Class_Descriptor cd_S9875C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S9875C2, buf);
    S9875C2 *dp, &lv = *(dp=new (buf) S9875C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S9875C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9875C2)");
    check_field_offset(lv, s9875c2f0, ABISELECT(8,4), "S9875C2.s9875c2f0");
    check_field_offset(lv, s9875c2f1, ABISELECT(16,8), "S9875C2.s9875c2f1");
    check_field_offset(lv, s9875c2f2, ABISELECT(32,16), "S9875C2.s9875c2f2");
    test_class_info(&lv, &cd_S9875C2);
    dp->~S9875C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9875C2(Test_S9875C2, "S9875C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S9875C2C1Ev();
extern void _ZN7S9875C2D1Ev();
Name_Map name_map_S9875C2[] = {
  NSPAIR(_ZN7S9875C2C1Ev),
  NSPAIR(_ZN7S9875C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9875C2[];
extern void _ZN7S9875C2D1Ev();
extern void _ZN7S9875C2D0Ev();
extern void _ZN7S9875C22v5Ev();
extern void _ZN7S9875C22v6Ev();
extern void _ZN7S9875C22v7Ev();
extern void _ZN7S9875C22v8Ev();
static  VTBL_ENTRY vtc_S9875C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9875C2[0]),
  (VTBL_ENTRY)&_ZN7S9875C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9875C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9875C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9875C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9875C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9875C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S9875C2[];
extern  VTBL_ENTRY _ZTV7S9875C2[];
Class_Descriptor cd_S9875C2 = {  "S9875C2", // class name
  0,0,//no base classes
  &(vtc_S9875C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S9875C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9875C2),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  S9875C1  : S9875C2 {
  __tsi64 s9875c1f0;
  virtual void  v1(); // _ZN7S9875C12v1Ev
  virtual void  v2(); // _ZN7S9875C12v2Ev
  virtual void  v3(); // _ZN7S9875C12v3Ev
  virtual void  v4(); // _ZN7S9875C12v4Ev
  ~S9875C1(); // tgen
  S9875C1(); // tgen
};
//SIG(1 S9875C1) C1{ BC2{ vd v5 v6 v7 v8 Fi Fp[2] Fi} v1 v2 v3 v4 FL}


void  S9875C1 ::v1(){vfunc_called(this, "_ZN7S9875C12v1Ev");}
void  S9875C1 ::v2(){vfunc_called(this, "_ZN7S9875C12v2Ev");}
void  S9875C1 ::v3(){vfunc_called(this, "_ZN7S9875C12v3Ev");}
void  S9875C1 ::v4(){vfunc_called(this, "_ZN7S9875C12v4Ev");}
S9875C1 ::~S9875C1(){ note_dtor("S9875C1", this);} // tgen
S9875C1 ::S9875C1(){ note_ctor("S9875C1", this);} // tgen

static void Test_S9875C1()
{
  extern Class_Descriptor cd_S9875C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,8)];
    init_test(&cd_S9875C1, buf);
    S9875C1 *dp, &lv = *(dp=new (buf) S9875C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,28), "sizeof(S9875C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9875C1)");
    check_base_class_offset(lv, (S9875C2*), 0, "S9875C1");
    check_field_offset(lv, s9875c1f0, ABISELECT(40,20), "S9875C1.s9875c1f0");
    test_class_info(&lv, &cd_S9875C1);
    dp->~S9875C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9875C1(Test_S9875C1, "S9875C1", ABISELECT(48,28));

#else // __cplusplus

extern void _ZN7S9875C1C1Ev();
extern void _ZN7S9875C1D1Ev();
Name_Map name_map_S9875C1[] = {
  NSPAIR(_ZN7S9875C1C1Ev),
  NSPAIR(_ZN7S9875C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9875C2;
extern VTBL_ENTRY _ZTI7S9875C2[];
extern  VTBL_ENTRY _ZTV7S9875C2[];
static Base_Class bases_S9875C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9875C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S9875C1[];
extern void _ZN7S9875C1D1Ev();
extern void _ZN7S9875C1D0Ev();
extern void _ZN7S9875C22v5Ev();
extern void _ZN7S9875C22v6Ev();
extern void _ZN7S9875C22v7Ev();
extern void _ZN7S9875C22v8Ev();
extern void _ZN7S9875C12v1Ev();
extern void _ZN7S9875C12v2Ev();
extern void _ZN7S9875C12v3Ev();
extern void _ZN7S9875C12v4Ev();
static  VTBL_ENTRY vtc_S9875C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9875C1[0]),
  (VTBL_ENTRY)&_ZN7S9875C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9875C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9875C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9875C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9875C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9875C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9875C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9875C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9875C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9875C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9875C1[];
extern  VTBL_ENTRY _ZTV7S9875C1[];
Class_Descriptor cd_S9875C1 = {  "S9875C1", // class name
  bases_S9875C1, 1,
  &(vtc_S9875C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,28), // object size
  NSPAIRA(_ZTI7S9875C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9875C1),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  S9874C2  {
  int s9874c2f0;
  void *s9874c2f1[2];
  int s9874c2f2;
  virtual  ~S9874C2(); // _ZN7S9874C2D1Ev
  virtual void  v5(); // _ZN7S9874C22v5Ev
  virtual void  v6(); // _ZN7S9874C22v6Ev
  virtual void  v7(); // _ZN7S9874C22v7Ev
  virtual void  v8(); // _ZN7S9874C22v8Ev
  S9874C2(); // tgen
};
//SIG(-1 S9874C2) C1{ vd v1 v2 v3 v4 Fi Fp[2] Fi}


 S9874C2 ::~S9874C2(){ note_dtor("S9874C2", this);}
void  S9874C2 ::v5(){vfunc_called(this, "_ZN7S9874C22v5Ev");}
void  S9874C2 ::v6(){vfunc_called(this, "_ZN7S9874C22v6Ev");}
void  S9874C2 ::v7(){vfunc_called(this, "_ZN7S9874C22v7Ev");}
void  S9874C2 ::v8(){vfunc_called(this, "_ZN7S9874C22v8Ev");}
S9874C2 ::S9874C2(){ note_ctor("S9874C2", this);} // tgen

static void Test_S9874C2()
{
  extern Class_Descriptor cd_S9874C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S9874C2, buf);
    S9874C2 *dp, &lv = *(dp=new (buf) S9874C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S9874C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9874C2)");
    check_field_offset(lv, s9874c2f0, ABISELECT(8,4), "S9874C2.s9874c2f0");
    check_field_offset(lv, s9874c2f1, ABISELECT(16,8), "S9874C2.s9874c2f1");
    check_field_offset(lv, s9874c2f2, ABISELECT(32,16), "S9874C2.s9874c2f2");
    test_class_info(&lv, &cd_S9874C2);
    dp->~S9874C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9874C2(Test_S9874C2, "S9874C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S9874C2C1Ev();
extern void _ZN7S9874C2D1Ev();
Name_Map name_map_S9874C2[] = {
  NSPAIR(_ZN7S9874C2C1Ev),
  NSPAIR(_ZN7S9874C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9874C2[];
extern void _ZN7S9874C2D1Ev();
extern void _ZN7S9874C2D0Ev();
extern void _ZN7S9874C22v5Ev();
extern void _ZN7S9874C22v6Ev();
extern void _ZN7S9874C22v7Ev();
extern void _ZN7S9874C22v8Ev();
static  VTBL_ENTRY vtc_S9874C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9874C2[0]),
  (VTBL_ENTRY)&_ZN7S9874C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9874C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9874C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9874C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9874C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9874C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S9874C2[];
extern  VTBL_ENTRY _ZTV7S9874C2[];
Class_Descriptor cd_S9874C2 = {  "S9874C2", // class name
  0,0,//no base classes
  &(vtc_S9874C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S9874C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9874C2),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  S9874C1  : S9874C2 {
  long s9874c1f0;
  virtual void  v1(); // _ZN7S9874C12v1Ev
  virtual void  v2(); // _ZN7S9874C12v2Ev
  virtual void  v3(); // _ZN7S9874C12v3Ev
  virtual void  v4(); // _ZN7S9874C12v4Ev
  ~S9874C1(); // tgen
  S9874C1(); // tgen
};
//SIG(1 S9874C1) C1{ BC2{ vd v5 v6 v7 v8 Fi Fp[2] Fi} v1 v2 v3 v4 Fl}


void  S9874C1 ::v1(){vfunc_called(this, "_ZN7S9874C12v1Ev");}
void  S9874C1 ::v2(){vfunc_called(this, "_ZN7S9874C12v2Ev");}
void  S9874C1 ::v3(){vfunc_called(this, "_ZN7S9874C12v3Ev");}
void  S9874C1 ::v4(){vfunc_called(this, "_ZN7S9874C12v4Ev");}
S9874C1 ::~S9874C1(){ note_dtor("S9874C1", this);} // tgen
S9874C1 ::S9874C1(){ note_ctor("S9874C1", this);} // tgen

static void Test_S9874C1()
{
  extern Class_Descriptor cd_S9874C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[7];
    init_test(&cd_S9874C1, buf);
    S9874C1 *dp, &lv = *(dp=new (buf) S9874C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S9874C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9874C1)");
    check_base_class_offset(lv, (S9874C2*), 0, "S9874C1");
    check_field_offset(lv, s9874c1f0, ABISELECT(40,20), "S9874C1.s9874c1f0");
    test_class_info(&lv, &cd_S9874C1);
    dp->~S9874C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9874C1(Test_S9874C1, "S9874C1", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S9874C1C1Ev();
extern void _ZN7S9874C1D1Ev();
Name_Map name_map_S9874C1[] = {
  NSPAIR(_ZN7S9874C1C1Ev),
  NSPAIR(_ZN7S9874C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9874C2;
extern VTBL_ENTRY _ZTI7S9874C2[];
extern  VTBL_ENTRY _ZTV7S9874C2[];
static Base_Class bases_S9874C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9874C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S9874C1[];
extern void _ZN7S9874C1D1Ev();
extern void _ZN7S9874C1D0Ev();
extern void _ZN7S9874C22v5Ev();
extern void _ZN7S9874C22v6Ev();
extern void _ZN7S9874C22v7Ev();
extern void _ZN7S9874C22v8Ev();
extern void _ZN7S9874C12v1Ev();
extern void _ZN7S9874C12v2Ev();
extern void _ZN7S9874C12v3Ev();
extern void _ZN7S9874C12v4Ev();
static  VTBL_ENTRY vtc_S9874C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9874C1[0]),
  (VTBL_ENTRY)&_ZN7S9874C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9874C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9874C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9874C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9874C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9874C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9874C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9874C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9874C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9874C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9874C1[];
extern  VTBL_ENTRY _ZTV7S9874C1[];
Class_Descriptor cd_S9874C1 = {  "S9874C1", // class name
  bases_S9874C1, 1,
  &(vtc_S9874C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S9874C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9874C1),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  S16290C1  {
  ::S16199C4_nt s16290c1f0;
  void *s16290c1f1;
  ::S17465C4_nt s16290c1f2;
  void *s16290c1f3;
  void  mf16290c1(); // _ZN8S16290C19mf16290c1Ev
};
//SIG(1 S16290C1) C1{ m FC2{ m Fp Fi FC3{ m}} Fp FC4{ m FC5{ FL[4]}} Fp}


void  S16290C1 ::mf16290c1(){}

static void Test_S16290C1()
{
  {
    init_simple_test("S16290C1");
    S16290C1 lv;
    check2(sizeof(lv), ABISELECT(64,52), "sizeof(S16290C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16290C1)");
    check_field_offset(lv, s16290c1f0, 0, "S16290C1.s16290c1f0");
    check_field_offset(lv, s16290c1f1, ABISELECT(16,12), "S16290C1.s16290c1f1");
    check_field_offset(lv, s16290c1f2, ABISELECT(24,16), "S16290C1.s16290c1f2");
    check_field_offset(lv, s16290c1f3, ABISELECT(56,48), "S16290C1.s16290c1f3");
  }
}
static Arrange_To_Call_Me vS16290C1(Test_S16290C1, "S16290C1", ABISELECT(64,52));

#else // __cplusplus

#endif // __cplusplus

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

#ifdef __cplusplus

struct  S8123C1  : S8119C2_nt {
  int s8123c1f0;
  ::S16199C4_nt s8123c1f1;
  ::S16199C4_nt s8123c1f2;
  short s8123c1f3;
  virtual  ~S8123C1(); // _ZN7S8123C1D1Ev
  S8123C1(); // tgen
};
//SIG(1 S8123C1) C1{ BC2{ vd m Fi} vd Fi FC3{ m Fp Fi FC4{ m}} FC3 Fs}


 S8123C1 ::~S8123C1(){ note_dtor("S8123C1", this);}
S8123C1 ::S8123C1(){ note_ctor("S8123C1", this);} // tgen

static void Test_S8123C1()
{
  extern Class_Descriptor cd_S8123C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(8,11)];
    init_test(&cd_S8123C1, buf);
    S8123C1 *dp, &lv = *(dp=new (buf) S8123C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,40), "sizeof(S8123C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8123C1)");
    check_base_class_offset(lv, (S8119C2_nt*), 0, "S8123C1");
    check_field_offset(lv, s8123c1f0, ABISELECT(12,8), "S8123C1.s8123c1f0");
    check_field_offset(lv, s8123c1f1, ABISELECT(16,12), "S8123C1.s8123c1f1");
    check_field_offset(lv, s8123c1f2, ABISELECT(32,24), "S8123C1.s8123c1f2");
    check_field_offset(lv, s8123c1f3, ABISELECT(48,36), "S8123C1.s8123c1f3");
    test_class_info(&lv, &cd_S8123C1);
    dp->~S8123C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8123C1(Test_S8123C1, "S8123C1", ABISELECT(56,40));

#else // __cplusplus

extern void _ZN7S8123C1C1Ev();
extern void _ZN7S8123C1D1Ev();
Name_Map name_map_S8123C1[] = {
  NSPAIR(_ZN7S8123C1C1Ev),
  NSPAIR(_ZN7S8123C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8119C2_nt;
extern VTBL_ENTRY _ZTI10S8119C2_nt[];
extern  VTBL_ENTRY _ZTV10S8119C2_nt[];
static Base_Class bases_S8123C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8119C2_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 _ZTI7S8123C1[];
extern void _ZN7S8123C1D1Ev();
extern void _ZN7S8123C1D0Ev();
static  VTBL_ENTRY vtc_S8123C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8123C1[0]),
  (VTBL_ENTRY)&_ZN7S8123C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8123C1D0Ev,
};
extern VTBL_ENTRY _ZTI7S8123C1[];
extern  VTBL_ENTRY _ZTV7S8123C1[];
Class_Descriptor cd_S8123C1 = {  "S8123C1", // class name
  bases_S8123C1, 1,
  &(vtc_S8123C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,40), // object size
  NSPAIRA(_ZTI7S8123C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8123C1),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  S9876C2  {
  int s9876c2f0;
  void *s9876c2f1[2];
  int s9876c2f2;
  virtual  ~S9876C2(); // _ZN7S9876C2D1Ev
  virtual void  v5(); // _ZN7S9876C22v5Ev
  virtual void  v6(); // _ZN7S9876C22v6Ev
  virtual void  v7(); // _ZN7S9876C22v7Ev
  virtual void  v8(); // _ZN7S9876C22v8Ev
  S9876C2(); // tgen
};
//SIG(-1 S9876C2) C1{ vd v1 v2 v3 v4 Fi Fp[2] Fi}


 S9876C2 ::~S9876C2(){ note_dtor("S9876C2", this);}
void  S9876C2 ::v5(){vfunc_called(this, "_ZN7S9876C22v5Ev");}
void  S9876C2 ::v6(){vfunc_called(this, "_ZN7S9876C22v6Ev");}
void  S9876C2 ::v7(){vfunc_called(this, "_ZN7S9876C22v7Ev");}
void  S9876C2 ::v8(){vfunc_called(this, "_ZN7S9876C22v8Ev");}
S9876C2 ::S9876C2(){ note_ctor("S9876C2", this);} // tgen

static void Test_S9876C2()
{
  extern Class_Descriptor cd_S9876C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S9876C2, buf);
    S9876C2 *dp, &lv = *(dp=new (buf) S9876C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S9876C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9876C2)");
    check_field_offset(lv, s9876c2f0, ABISELECT(8,4), "S9876C2.s9876c2f0");
    check_field_offset(lv, s9876c2f1, ABISELECT(16,8), "S9876C2.s9876c2f1");
    check_field_offset(lv, s9876c2f2, ABISELECT(32,16), "S9876C2.s9876c2f2");
    test_class_info(&lv, &cd_S9876C2);
    dp->~S9876C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9876C2(Test_S9876C2, "S9876C2", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S9876C2C1Ev();
extern void _ZN7S9876C2D1Ev();
Name_Map name_map_S9876C2[] = {
  NSPAIR(_ZN7S9876C2C1Ev),
  NSPAIR(_ZN7S9876C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S9876C2[];
extern void _ZN7S9876C2D1Ev();
extern void _ZN7S9876C2D0Ev();
extern void _ZN7S9876C22v5Ev();
extern void _ZN7S9876C22v6Ev();
extern void _ZN7S9876C22v7Ev();
extern void _ZN7S9876C22v8Ev();
static  VTBL_ENTRY vtc_S9876C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9876C2[0]),
  (VTBL_ENTRY)&_ZN7S9876C2D1Ev,
  (VTBL_ENTRY)&_ZN7S9876C2D0Ev,
  (VTBL_ENTRY)&_ZN7S9876C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9876C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9876C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9876C22v8Ev,
};
extern VTBL_ENTRY _ZTI7S9876C2[];
extern  VTBL_ENTRY _ZTV7S9876C2[];
Class_Descriptor cd_S9876C2 = {  "S9876C2", // class name
  0,0,//no base classes
  &(vtc_S9876C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S9876C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S9876C2),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  S9876C1  : S9876C2 {
  virtual void  v1(); // _ZN7S9876C12v1Ev
  virtual void  v2(); // _ZN7S9876C12v2Ev
  virtual void  v3(); // _ZN7S9876C12v3Ev
  virtual void  v4(); // _ZN7S9876C12v4Ev
  ~S9876C1(); // tgen
  S9876C1(); // tgen
};
//SIG(1 S9876C1) C1{ BC2{ vd v5 v6 v7 v8 Fi Fp[2] Fi} v1 v2 v3 v4}


void  S9876C1 ::v1(){vfunc_called(this, "_ZN7S9876C12v1Ev");}
void  S9876C1 ::v2(){vfunc_called(this, "_ZN7S9876C12v2Ev");}
void  S9876C1 ::v3(){vfunc_called(this, "_ZN7S9876C12v3Ev");}
void  S9876C1 ::v4(){vfunc_called(this, "_ZN7S9876C12v4Ev");}
S9876C1 ::~S9876C1(){ note_dtor("S9876C1", this);} // tgen
S9876C1 ::S9876C1(){ note_ctor("S9876C1", this);} // tgen

static void Test_S9876C1()
{
  extern Class_Descriptor cd_S9876C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[6];
    init_test(&cd_S9876C1, buf);
    S9876C1 *dp, &lv = *(dp=new (buf) S9876C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S9876C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S9876C1)");
    check_base_class_offset(lv, (S9876C2*), 0, "S9876C1");
    test_class_info(&lv, &cd_S9876C1);
    dp->~S9876C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS9876C1(Test_S9876C1, "S9876C1", ABISELECT(40,20));

#else // __cplusplus

extern void _ZN7S9876C1C1Ev();
extern void _ZN7S9876C1D1Ev();
Name_Map name_map_S9876C1[] = {
  NSPAIR(_ZN7S9876C1C1Ev),
  NSPAIR(_ZN7S9876C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S9876C2;
extern VTBL_ENTRY _ZTI7S9876C2[];
extern  VTBL_ENTRY _ZTV7S9876C2[];
static Base_Class bases_S9876C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S9876C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S9876C1[];
extern void _ZN7S9876C1D1Ev();
extern void _ZN7S9876C1D0Ev();
extern void _ZN7S9876C22v5Ev();
extern void _ZN7S9876C22v6Ev();
extern void _ZN7S9876C22v7Ev();
extern void _ZN7S9876C22v8Ev();
extern void _ZN7S9876C12v1Ev();
extern void _ZN7S9876C12v2Ev();
extern void _ZN7S9876C12v3Ev();
extern void _ZN7S9876C12v4Ev();
static  VTBL_ENTRY vtc_S9876C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S9876C1[0]),
  (VTBL_ENTRY)&_ZN7S9876C1D1Ev,
  (VTBL_ENTRY)&_ZN7S9876C1D0Ev,
  (VTBL_ENTRY)&_ZN7S9876C22v5Ev,
  (VTBL_ENTRY)&_ZN7S9876C22v6Ev,
  (VTBL_ENTRY)&_ZN7S9876C22v7Ev,
  (VTBL_ENTRY)&_ZN7S9876C22v8Ev,
  (VTBL_ENTRY)&_ZN7S9876C12v1Ev,
  (VTBL_ENTRY)&_ZN7S9876C12v2Ev,
  (VTBL_ENTRY)&_ZN7S9876C12v3Ev,
  (VTBL_ENTRY)&_ZN7S9876C12v4Ev,
};
extern VTBL_ENTRY _ZTI7S9876C1[];
extern  VTBL_ENTRY _ZTV7S9876C1[];
Class_Descriptor cd_S9876C1 = {  "S9876C1", // class name
  bases_S9876C1, 1,
  &(vtc_S9876C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,20), // object size
  NSPAIRA(_ZTI7S9876C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S9876C1),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  S16684C2  {
  ::S15640C5 s16684c2f0;
  ::S15640C5 s16684c2f1;
  int s16684c2f2;
  void  mf16684c2(); // _ZN8S16684C29mf16684c2Ev
};
//SIG(1 S16684C2) C1{ m FC2{ BC3{ m Fp Fi[2]}} FC2 Fi}


void  S16684C2 ::mf16684c2(){}

static void Test_S16684C2()
{
  {
    init_simple_test("S16684C2");
    S16684C2 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S16684C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16684C2)");
    check_field_offset(lv, s16684c2f0, 0, "S16684C2.s16684c2f0");
    check_field_offset(lv, s16684c2f1, ABISELECT(16,12), "S16684C2.s16684c2f1");
    check_field_offset(lv, s16684c2f2, ABISELECT(32,24), "S16684C2.s16684c2f2");
  }
}
static Arrange_To_Call_Me vS16684C2(Test_S16684C2, "S16684C2", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16684C1  {
  int s16684c1f0;
  ::S16684C2 s16684c1f1[4];
  void  mf16684c1(); // _ZN8S16684C19mf16684c1Ev
};
//SIG(1 S16684C1) C1{ m Fi FC2{ m FC3{ BC4{ m Fp Fi[2]}} FC3 Fi}[4]}


void  S16684C1 ::mf16684c1(){}

static void Test_S16684C1()
{
  {
    init_simple_test("S16684C1");
    S16684C1 lv;
    check2(sizeof(lv), ABISELECT(168,116), "sizeof(S16684C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16684C1)");
    check_field_offset(lv, s16684c1f0, 0, "S16684C1.s16684c1f0");
    check_field_offset(lv, s16684c1f1, ABISELECT(8,4), "S16684C1.s16684c1f1");
  }
}
static Arrange_To_Call_Me vS16684C1(Test_S16684C1, "S16684C1", ABISELECT(168,116));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14216C1  {
  void *s14216c1f0;
  int s14216c1f1;
  void *s14216c1f2;
  int s14216c1f3;
  void *s14216c1f4;
  int s14216c1f5;
  void *s14216c1f6;
  short s14216c1f7;
  void *s14216c1f8;
  int s14216c1f9[2];
  __tsi64 s14216c1f10;
  int s14216c1f11;
  void *s14216c1f12;
};
//SIG(1 S14216C1) C1{ Fp Fi Fp Fi Fp Fi Fp Fs Fp Fi[2] FL Fi Fp}



static void Test_S14216C1()
{
  {
    init_simple_test("S14216C1");
    S14216C1 lv;
    check2(sizeof(lv), ABISELECT(104,60), "sizeof(S14216C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14216C1)");
    check_field_offset(lv, s14216c1f0, 0, "S14216C1.s14216c1f0");
    check_field_offset(lv, s14216c1f1, ABISELECT(8,4), "S14216C1.s14216c1f1");
    check_field_offset(lv, s14216c1f2, ABISELECT(16,8), "S14216C1.s14216c1f2");
    check_field_offset(lv, s14216c1f3, ABISELECT(24,12), "S14216C1.s14216c1f3");
    check_field_offset(lv, s14216c1f4, ABISELECT(32,16), "S14216C1.s14216c1f4");
    check_field_offset(lv, s14216c1f5, ABISELECT(40,20), "S14216C1.s14216c1f5");
    check_field_offset(lv, s14216c1f6, ABISELECT(48,24), "S14216C1.s14216c1f6");
    check_field_offset(lv, s14216c1f7, ABISELECT(56,28), "S14216C1.s14216c1f7");
    check_field_offset(lv, s14216c1f8, ABISELECT(64,32), "S14216C1.s14216c1f8");
    check_field_offset(lv, s14216c1f9, ABISELECT(72,36), "S14216C1.s14216c1f9");
    check_field_offset(lv, s14216c1f10, ABISELECT(80,44), "S14216C1.s14216c1f10");
    check_field_offset(lv, s14216c1f11, ABISELECT(88,52), "S14216C1.s14216c1f11");
    check_field_offset(lv, s14216c1f12, ABISELECT(96,56), "S14216C1.s14216c1f12");
  }
}
static Arrange_To_Call_Me vS14216C1(Test_S14216C1, "S14216C1", ABISELECT(104,60));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S5579C2  {
  char s5579c2f0[32];
  short s5579c2f1[8];
  char s5579c2f2[2];
  int s5579c2f3[641];
  void  mf5579c2(); // _ZN7S5579C28mf5579c2Ev
};
//SIG(-1 S5579C2) C1{ m Fc[32] Fs[8] Fc[2] Fi[641]}


void  S5579C2 ::mf5579c2(){}

static void Test_S5579C2()
{
  {
    init_simple_test("S5579C2");
    S5579C2 lv;
    check2(sizeof(lv), 2616, "sizeof(S5579C2)");
    check2(__alignof__(lv), 4, "__alignof__(S5579C2)");
    check_field_offset(lv, s5579c2f0, 0, "S5579C2.s5579c2f0");
    check_field_offset(lv, s5579c2f1, 32, "S5579C2.s5579c2f1");
    check_field_offset(lv, s5579c2f2, 48, "S5579C2.s5579c2f2");
    check_field_offset(lv, s5579c2f3, 52, "S5579C2.s5579c2f3");
  }
}
static Arrange_To_Call_Me vS5579C2(Test_S5579C2, "S5579C2", 2616);

#else // __cplusplus

Class_Descriptor cd_S5579C2 = {  "S5579C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  2616, // 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  S5579C1  : S5579C2 {
  char s5579c1f0[992];
};
//SIG(1 S5579C1) C1{ BC2{ m Fc[32] Fs[8] Fc[2] Fi[641]} Fc[992]}



static void Test_S5579C1()
{
  extern Class_Descriptor cd_S5579C1;
  void *lvp;
  {
    int buf[903];
    init_test(&cd_S5579C1, buf);
    S5579C1 &lv = *(new (buf) S5579C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 3608, "sizeof(S5579C1)");
    check2(__alignof__(lv), 4, "__alignof__(S5579C1)");
    check_base_class_offset(lv, (S5579C2*), 0, "S5579C1");
    check_field_offset(lv, s5579c1f0, 2616, "S5579C1.s5579c1f0");
    test_class_info(&lv, &cd_S5579C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5579C1(Test_S5579C1, "S5579C1", 3608);

#else // __cplusplus

extern Class_Descriptor cd_S5579C2;
static Base_Class bases_S5579C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5579C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5579C1 = {  "S5579C1", // class name
  bases_S5579C1, 1,
  0, // no vftv
  0, //no vtt
  3608, // 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  S8774C2  {
  void *s8774c2f0;
  char s8774c2f1[3];
  virtual  ~S8774C2(); // _ZN7S8774C2D1Ev
  virtual void  v2(); // _ZN7S8774C22v2Ev
  S8774C2(); // tgen
};
//SIG(-1 S8774C2) C1{ vd v1 Fp Fc[3]}


 S8774C2 ::~S8774C2(){ note_dtor("S8774C2", this);}
void  S8774C2 ::v2(){vfunc_called(this, "_ZN7S8774C22v2Ev");}
S8774C2 ::S8774C2(){ note_ctor("S8774C2", this);} // tgen

static void Test_S8774C2()
{
  extern Class_Descriptor cd_S8774C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S8774C2, buf);
    S8774C2 *dp, &lv = *(dp=new (buf) S8774C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S8774C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8774C2)");
    check_field_offset(lv, s8774c2f0, ABISELECT(8,4), "S8774C2.s8774c2f0");
    check_field_offset(lv, s8774c2f1, ABISELECT(16,8), "S8774C2.s8774c2f1");
    test_class_info(&lv, &cd_S8774C2);
    dp->~S8774C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8774C2(Test_S8774C2, "S8774C2", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN7S8774C2C1Ev();
extern void _ZN7S8774C2D1Ev();
Name_Map name_map_S8774C2[] = {
  NSPAIR(_ZN7S8774C2C1Ev),
  NSPAIR(_ZN7S8774C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S8774C2[];
extern void _ZN7S8774C2D1Ev();
extern void _ZN7S8774C2D0Ev();
extern void _ZN7S8774C22v2Ev();
static  VTBL_ENTRY vtc_S8774C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8774C2[0]),
  (VTBL_ENTRY)&_ZN7S8774C2D1Ev,
  (VTBL_ENTRY)&_ZN7S8774C2D0Ev,
  (VTBL_ENTRY)&_ZN7S8774C22v2Ev,
};
extern VTBL_ENTRY _ZTI7S8774C2[];
extern  VTBL_ENTRY _ZTV7S8774C2[];
Class_Descriptor cd_S8774C2 = {  "S8774C2", // class name
  0,0,//no base classes
  &(vtc_S8774C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI7S8774C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S8774C2),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  S8774C1  : S8774C2 {
  void *s8774c1f0;
  int s8774c1f1;
  void *s8774c1f2[3];
  char s8774c1f3;
  virtual  ~S8774C1(); // _ZN7S8774C1D1Ev
  virtual void  v1(); // _ZN7S8774C12v1Ev
  S8774C1(); // tgen
};
//SIG(1 S8774C1) C1{ BC2{ vd v2 Fp Fc[3]} vd v1 Fp Fi Fp[3] Fc}


 S8774C1 ::~S8774C1(){ note_dtor("S8774C1", this);}
void  S8774C1 ::v1(){vfunc_called(this, "_ZN7S8774C12v1Ev");}
S8774C1 ::S8774C1(){ note_ctor("S8774C1", this);} // tgen

static void Test_S8774C1()
{
  extern Class_Descriptor cd_S8774C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[10];
    init_test(&cd_S8774C1, buf);
    S8774C1 *dp, &lv = *(dp=new (buf) S8774C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,36), "sizeof(S8774C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S8774C1)");
    check_base_class_offset(lv, (S8774C2*), 0, "S8774C1");
    check_field_offset(lv, s8774c1f0, ABISELECT(24,12), "S8774C1.s8774c1f0");
    check_field_offset(lv, s8774c1f1, ABISELECT(32,16), "S8774C1.s8774c1f1");
    check_field_offset(lv, s8774c1f2, ABISELECT(40,20), "S8774C1.s8774c1f2");
    check_field_offset(lv, s8774c1f3, ABISELECT(64,32), "S8774C1.s8774c1f3");
    test_class_info(&lv, &cd_S8774C1);
    dp->~S8774C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS8774C1(Test_S8774C1, "S8774C1", ABISELECT(72,36));

#else // __cplusplus

extern void _ZN7S8774C1C1Ev();
extern void _ZN7S8774C1D1Ev();
Name_Map name_map_S8774C1[] = {
  NSPAIR(_ZN7S8774C1C1Ev),
  NSPAIR(_ZN7S8774C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S8774C2;
extern VTBL_ENTRY _ZTI7S8774C2[];
extern  VTBL_ENTRY _ZTV7S8774C2[];
static Base_Class bases_S8774C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S8774C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S8774C1[];
extern void _ZN7S8774C1D1Ev();
extern void _ZN7S8774C1D0Ev();
extern void _ZN7S8774C22v2Ev();
extern void _ZN7S8774C12v1Ev();
static  VTBL_ENTRY vtc_S8774C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S8774C1[0]),
  (VTBL_ENTRY)&_ZN7S8774C1D1Ev,
  (VTBL_ENTRY)&_ZN7S8774C1D0Ev,
  (VTBL_ENTRY)&_ZN7S8774C22v2Ev,
  (VTBL_ENTRY)&_ZN7S8774C12v1Ev,
};
extern VTBL_ENTRY _ZTI7S8774C1[];
extern  VTBL_ENTRY _ZTV7S8774C1[];
Class_Descriptor cd_S8774C1 = {  "S8774C1", // class name
  bases_S8774C1, 1,
  &(vtc_S8774C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(72,36), // object size
  NSPAIRA(_ZTI7S8774C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S8774C1),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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18013C1  {
  void *s18013c1f0[2];
  ::S5634C37_nt s18013c1f1[16];
  ::S8119C5_nt s18013c1f2;
  void  mf18013c1(); // _ZN8S18013C19mf18013c1Ev
};
//SIG(1 S18013C1) C1{ m Fp[2] FC2{ m Fl}[16] FC3{ m FC4{ Fl[4]}}}


void  S18013C1 ::mf18013c1(){}

static void Test_S18013C1()
{
  {
    init_simple_test("S18013C1");
    S18013C1 lv;
    check2(sizeof(lv), ABISELECT(176,88), "sizeof(S18013C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18013C1)");
    check_field_offset(lv, s18013c1f0, 0, "S18013C1.s18013c1f0");
    check_field_offset(lv, s18013c1f1, ABISELECT(16,8), "S18013C1.s18013c1f1");
    check_field_offset(lv, s18013c1f2, ABISELECT(144,72), "S18013C1.s18013c1f2");
  }
}
static Arrange_To_Call_Me vS18013C1(Test_S18013C1, "S18013C1", ABISELECT(176,88));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16361C1  {
  ::S5634C23 s16361c1f0;
  unsigned char s16361c1f1:1;
  unsigned char s16361c1f2:1;
  unsigned char s16361c1f3:1;
  int s16361c1f4:8;
  int s16361c1f5:4;
  void  mf16361c1(); // _ZN8S16361C19mf16361c1Ev
};
//SIG(1 S16361C1) C1{ m FC2{ m Fp[2]} Fc:1 Fc:1 Fc:1 Fi:8 Fi:4}


void  S16361C1 ::mf16361c1(){}

static void Test_S16361C1()
{
  {
    init_simple_test("S16361C1");
    static S16361C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S16361C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16361C1)");
    check_field_offset(lv, s16361c1f0, 0, "S16361C1.s16361c1f0");
    set_bf_and_test(lv, s16361c1f1, ABISELECT(16,8), 0, 1, 1, "S16361C1");
    set_bf_and_test(lv, s16361c1f2, ABISELECT(16,8), 1, 1, 1, "S16361C1");
    set_bf_and_test(lv, s16361c1f3, ABISELECT(16,8), 2, 1, 1, "S16361C1");
    set_bf_and_test(lv, s16361c1f4, ABISELECT(16,8), 3, 8, 1, "S16361C1");
    set_bf_and_test(lv, s16361c1f4, ABISELECT(16,8), 3, 8, hide_sll(1LL<<7), "S16361C1");
    set_bf_and_test(lv, s16361c1f5, ABISELECT(17,9), 3, 4, 1, "S16361C1");
    set_bf_and_test(lv, s16361c1f5, ABISELECT(17,9), 3, 4, hide_sll(1LL<<3), "S16361C1");
  }
}
static Arrange_To_Call_Me vS16361C1(Test_S16361C1, "S16361C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11085C1  {
  ::S15640C5 s11085c1f0;
  ::S3351C29 s11085c1f1;
  ::S5635C32 s11085c1f2;
};
//SIG(1 S11085C1) C1{ FC2{ BC3{ m Fp Fi[2]}} FC4{ BC3} FC5{ m Fp}}



static void Test_S11085C1()
{
  {
    init_simple_test("S11085C1");
    S11085C1 lv;
    check2(sizeof(lv), ABISELECT(40,28), "sizeof(S11085C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11085C1)");
    check_field_offset(lv, s11085c1f0, 0, "S11085C1.s11085c1f0");
    check_field_offset(lv, s11085c1f1, ABISELECT(16,12), "S11085C1.s11085c1f1");
    check_field_offset(lv, s11085c1f2, ABISELECT(32,24), "S11085C1.s11085c1f2");
  }
}
static Arrange_To_Call_Me vS11085C1(Test_S11085C1, "S11085C1", ABISELECT(40,28));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19529C4  {
  virtual void  v3(); // _ZN8S19529C42v3Ev
  virtual void  v4(); // _ZN8S19529C42v4Ev
  ~S19529C4(); // tgen
  S19529C4(); // tgen
};
//SIG(-1 S19529C4) C1{ v1 v2}


void  S19529C4 ::v3(){vfunc_called(this, "_ZN8S19529C42v3Ev");}
void  S19529C4 ::v4(){vfunc_called(this, "_ZN8S19529C42v4Ev");}
S19529C4 ::~S19529C4(){ note_dtor("S19529C4", this);} // tgen
S19529C4 ::S19529C4(){ note_ctor("S19529C4", this);} // tgen

static void Test_S19529C4()
{
  extern Class_Descriptor cd_S19529C4;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19529C4, buf);
    S19529C4 *dp, &lv = *(dp=new (buf) S19529C4());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19529C4)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19529C4)");
    test_class_info(&lv, &cd_S19529C4);
    dp->~S19529C4();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19529C4(Test_S19529C4, "S19529C4", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19529C4C1Ev();
extern void _ZN8S19529C4D1Ev();
Name_Map name_map_S19529C4[] = {
  NSPAIR(_ZN8S19529C4C1Ev),
  NSPAIR(_ZN8S19529C4D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S19529C4[];
extern void _ZN8S19529C42v3Ev();
extern void _ZN8S19529C42v4Ev();
static  VTBL_ENTRY vtc_S19529C4[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S19529C4[0]),
  (VTBL_ENTRY)&_ZN8S19529C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19529C42v4Ev,
};
extern VTBL_ENTRY _ZTI8S19529C4[];
extern  VTBL_ENTRY _ZTV8S19529C4[];
Class_Descriptor cd_S19529C4 = {  "S19529C4", // class name
  0,0,//no base classes
  &(vtc_S19529C4[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19529C4),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S19529C4),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  S19529C3  : virtual S19529C4 {
  void *s19529c3f0;
  virtual void  v5(); // _ZN8S19529C32v5Ev
  ~S19529C3(); // tgen
  S19529C3(); // tgen
};
//SIG(-1 S19529C3) C1{ VBC2{ v2 v3} v1 Fp}


void  S19529C3 ::v5(){vfunc_called(this, "_ZN8S19529C32v5Ev");}
S19529C3 ::~S19529C3(){ note_dtor("S19529C3", this);} // tgen
S19529C3 ::S19529C3(){ note_ctor("S19529C3", this);} // tgen

static void Test_S19529C3()
{
  extern Class_Descriptor cd_S19529C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19529C3, buf);
    S19529C3 *dp, &lv = *(dp=new (buf) S19529C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19529C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19529C3)");
    check_base_class_offset(lv, (S19529C4*), 0, "S19529C3");
    check_field_offset(lv, s19529c3f0, ABISELECT(8,4), "S19529C3.s19529c3f0");
    test_class_info(&lv, &cd_S19529C3);
    dp->~S19529C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19529C3(Test_S19529C3, "S19529C3", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19529C3C1Ev();
extern void _ZN8S19529C3D1Ev();
Name_Map name_map_S19529C3[] = {
  NSPAIR(_ZN8S19529C3C1Ev),
  NSPAIR(_ZN8S19529C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19529C4;
extern VTBL_ENTRY _ZTI8S19529C4[];
extern  VTBL_ENTRY _ZTV8S19529C4[];
static Base_Class bases_S19529C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19529C4,    0, //bcp->offset
    -1, //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},
  {0}};
extern VTBL_ENTRY _ZTI8S19529C3[];
extern void _ZN8S19529C42v3Ev();
extern void _ZN8S19529C42v4Ev();
extern void _ZN8S19529C32v5Ev();
static  VTBL_ENTRY vtc_S19529C3[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19529C3[0]),
  (VTBL_ENTRY)&_ZN8S19529C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19529C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19529C32v5Ev,
};
extern VTBL_ENTRY _ZTV8S19529C3[];
static  VTT_ENTRY vtt_S19529C3[] = {
  {&(_ZTV8S19529C3[5]),  5,8},
  {&(_ZTV8S19529C3[5]),  5,8},
};
extern VTBL_ENTRY _ZTI8S19529C3[];
extern  VTBL_ENTRY _ZTV8S19529C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19529C3[];
Class_Descriptor cd_S19529C3 = {  "S19529C3", // class name
  bases_S19529C3, 1,
  &(vtc_S19529C3[0]), // expected_vtbl_contents
  &(vtt_S19529C3[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19529C3),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19529C3),8, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19529C3),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  S19529C2  : S19529C3 {
  virtual void  v6(); // _ZN8S19529C22v6Ev
  ~S19529C2(); // tgen
  S19529C2(); // tgen
};
//SIG(-1 S19529C2) C1{ BC2{ VBC3{ v2 v3} v4 Fp} v1}


void  S19529C2 ::v6(){vfunc_called(this, "_ZN8S19529C22v6Ev");}
S19529C2 ::~S19529C2(){ note_dtor("S19529C2", this);} // tgen
S19529C2 ::S19529C2(){ note_ctor("S19529C2", this);} // tgen

static void Test_S19529C2()
{
  extern Class_Descriptor cd_S19529C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19529C2, buf);
    S19529C2 *dp, &lv = *(dp=new (buf) S19529C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19529C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19529C2)");
    check_base_class_offset(lv, (S19529C4*)(S19529C3*), 0, "S19529C2");
    check_base_class_offset(lv, (S19529C3*), 0, "S19529C2");
    test_class_info(&lv, &cd_S19529C2);
    dp->~S19529C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19529C2(Test_S19529C2, "S19529C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19529C2C1Ev();
extern void _ZN8S19529C2D1Ev();
Name_Map name_map_S19529C2[] = {
  NSPAIR(_ZN8S19529C2C1Ev),
  NSPAIR(_ZN8S19529C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19529C4;
extern VTBL_ENTRY _ZTI8S19529C4[];
extern  VTBL_ENTRY _ZTV8S19529C4[];
extern Class_Descriptor cd_S19529C3;
extern VTBL_ENTRY _ZTI8S19529C3[];
extern  VTBL_ENTRY _ZTV8S19529C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19529C3[];
static Base_Class bases_S19529C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19529C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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_S19529C3,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI8S19529C2[];
extern void _ZN8S19529C42v3Ev();
extern void _ZN8S19529C42v4Ev();
extern void _ZN8S19529C32v5Ev();
extern void _ZN8S19529C22v6Ev();
static  VTBL_ENTRY vtc_S19529C2[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19529C2[0]),
  (VTBL_ENTRY)&_ZN8S19529C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19529C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19529C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19529C22v6Ev,
};
extern VTBL_ENTRY _ZTV8S19529C2[];
extern void _ZN8S19529C42v3Ev();
extern void _ZN8S19529C42v4Ev();
extern void _ZN8S19529C32v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19529C3__8S19529C2[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19529C3[0]),
  (VTBL_ENTRY)&_ZN8S19529C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19529C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19529C32v5Ev,
};
static  VTT_ENTRY vtt_S19529C2[] = {
  {&(_ZTV8S19529C2[5]),  5,9},
  {&(_tg__ZTV8S19529C3__8S19529C2[5]),  5,8},
  {&(_tg__ZTV8S19529C3__8S19529C2[5]),  5,8},
  {&(_ZTV8S19529C2[5]),  5,9},
};
extern VTBL_ENTRY _ZTI8S19529C2[];
extern  VTBL_ENTRY _ZTV8S19529C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19529C2[];
Class_Descriptor cd_S19529C2 = {  "S19529C2", // class name
  bases_S19529C2, 2,
  &(vtc_S19529C2[0]), // expected_vtbl_contents
  &(vtt_S19529C2[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19529C2),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV8S19529C2),9, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19529C2),4, //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  S19529C1  : virtual S19529C2 {
  __tsi64 s19529c1f0;
  virtual void  v1(); // _ZN8S19529C12v1Ev
  virtual void  v2(); // _ZN8S19529C12v2Ev
  ~S19529C1(); // tgen
  S19529C1(); // tgen
};
//SIG(1 S19529C1) C1{ VBC2{ BC3{ VBC4{ v3 v4} v5 Fp} v6} v1 v2 FL}


void  S19529C1 ::v1(){vfunc_called(this, "_ZN8S19529C12v1Ev");}
void  S19529C1 ::v2(){vfunc_called(this, "_ZN8S19529C12v2Ev");}
S19529C1 ::~S19529C1(){ note_dtor("S19529C1", this);} // tgen
S19529C1 ::S19529C1(){ note_ctor("S19529C1", this);} // tgen

static void Test_S19529C1()
{
  extern Class_Descriptor cd_S19529C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S19529C1, buf);
    S19529C1 *dp, &lv = *(dp=new (buf) S19529C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S19529C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19529C1)");
    check_base_class_offset(lv, (S19529C4*)(S19529C3*)(S19529C2*), 0, "S19529C1");
    check_base_class_offset(lv, (S19529C3*)(S19529C2*), ABISELECT(16,12), "S19529C1");
    check_base_class_offset(lv, (S19529C2*), ABISELECT(16,12), "S19529C1");
    check_field_offset(lv, s19529c1f0, ABISELECT(8,4), "S19529C1.s19529c1f0");
    test_class_info(&lv, &cd_S19529C1);
    dp->~S19529C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19529C1(Test_S19529C1, "S19529C1", ABISELECT(32,20));

#else // __cplusplus

extern void _ZN8S19529C1C1Ev();
extern void _ZN8S19529C1D1Ev();
Name_Map name_map_S19529C1[] = {
  NSPAIR(_ZN8S19529C1C1Ev),
  NSPAIR(_ZN8S19529C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19529C4;
extern VTBL_ENTRY _ZTI8S19529C4[];
extern  VTBL_ENTRY _ZTV8S19529C4[];
extern Class_Descriptor cd_S19529C3;
extern VTBL_ENTRY _ZTI8S19529C3[];
extern  VTBL_ENTRY _ZTV8S19529C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19529C3[];
extern Class_Descriptor cd_S19529C2;
extern VTBL_ENTRY _ZTI8S19529C2[];
extern  VTBL_ENTRY _ZTV8S19529C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19529C2[];
static Base_Class bases_S19529C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19529C4,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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_S19529C3,    ABISELECT(16,12), //bcp->offset
    -1, //bcp->virtual_function_table_offset
    5, //num_negative_vtable_entries(t, bcp)
    0, //bcp->index_in_construction_vtbl_array
    5, //bcp->base_subarray_index_in_construction_vtbl_array
    2, //init_seq
    2, //immediately_derived
  0, 0},
  {&cd_S19529C2,    ABISELECT(16,12), //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
    3, //init_seq
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19529C1[];
extern void _ZN8S19529C42v3Ev();
extern void _ZN8S19529C42v4Ev();
extern void _ZN8S19529C12v1Ev();
extern void _ZN8S19529C12v2Ev();
extern void _ZN8S19529C42v3Ev();
extern void _ZN8S19529C42v4Ev();
extern void _ZN8S19529C32v5Ev();
extern void _ZN8S19529C22v6Ev();
static  VTBL_ENTRY vtc_S19529C1[] = {
  0,
  ABISELECT(16,12),
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19529C1[0]),
  (VTBL_ENTRY)&_ZN8S19529C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19529C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19529C12v1Ev,
  (VTBL_ENTRY)&_ZN8S19529C12v2Ev,
  0,
  0,
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  (VTBL_ENTRY)&(_ZTI8S19529C1[0]),
  (VTBL_ENTRY)&_ZN8S19529C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19529C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19529C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19529C22v6Ev,
};
extern VTBL_ENTRY _ZTV8S19529C1[];
extern void _ZN8S19529C42v3Ev();
extern void _ZN8S19529C42v4Ev();
extern void _ZN8S19529C32v5Ev();
extern void _ZN8S19529C22v6Ev();
static  VTBL_ENTRY _tg__ZTV8S19529C2__8S19529C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19529C2[0]),
  (VTBL_ENTRY)&_ZN8S19529C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19529C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19529C32v5Ev,
  (VTBL_ENTRY)&_ZN8S19529C22v6Ev,
};
extern void _ZN8S19529C42v3Ev();
extern void _ZN8S19529C42v4Ev();
extern void _ZN8S19529C32v5Ev();
static  VTBL_ENTRY _tg__ZTV8S19529C38S19529C2__8S19529C1[] = {
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  ABISELECT(-16,-12),
  0,
  (VTBL_ENTRY)&(_ZTI8S19529C3[0]),
  (VTBL_ENTRY)&_ZN8S19529C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19529C42v4Ev,
  (VTBL_ENTRY)&_ZN8S19529C32v5Ev,
};
extern void _ZN8S19529C42v3Ev();
extern void _ZN8S19529C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19529C4__8S19529C38S19529C2__8S19529C1[] = {
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S19529C3[0]),
  (VTBL_ENTRY)&_ZN8S19529C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19529C42v4Ev,
};
extern void _ZN8S19529C42v3Ev();
extern void _ZN8S19529C42v4Ev();
static  VTBL_ENTRY _tg__ZTV8S19529C4__8S19529C2__8S19529C1[] = {
  0,
  0,
  ABISELECT(16,12),
  (VTBL_ENTRY)&(_ZTI8S19529C2[0]),
  (VTBL_ENTRY)&_ZN8S19529C42v3Ev,
  (VTBL_ENTRY)&_ZN8S19529C42v4Ev,
};
static  VTT_ENTRY vtt_S19529C1[] = {
  {&(_ZTV8S19529C1[6]),  6,21},
  {&(_ZTV8S19529C1[17]),  17,21},
  {&(_ZTV8S19529C1[6]),  6,21},
  {&(_tg__ZTV8S19529C2__8S19529C1[5]),  5,9},
  {&(_tg__ZTV8S19529C38S19529C2__8S19529C1[5]),  5,8},
  {&(_tg__ZTV8S19529C4__8S19529C38S19529C2__8S19529C1[4]),  4,6},
  {&(_tg__ZTV8S19529C4__8S19529C2__8S19529C1[4]),  4,6},
};
extern VTBL_ENTRY _ZTI8S19529C1[];
extern  VTBL_ENTRY _ZTV8S19529C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19529C1[];
Class_Descriptor cd_S19529C1 = {  "S19529C1", // class name
  bases_S19529C1, 3,
  &(vtc_S19529C1[0]), // expected_vtbl_contents
  &(vtt_S19529C1[0]), // expected_vtt_contents
  ABISELECT(32,20), // object size
  NSPAIRA(_ZTI8S19529C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19529C1),21, //virtual function table var
  6, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19529C1),7, //virtual table table var
  3, // n_initialized_bases
  1, // has_virtual_bases
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10523C1  {
  unsigned char s10523c1f0:1;
  char s10523c1f1:2;
  unsigned char s10523c1f2:1;
  unsigned char s10523c1f3:1;
  unsigned char s10523c1f4:1;
  short s10523c1f5;
  int s10523c1f6[2];
  char s10523c1f7;
};
//SIG(1 S10523C1) C1{ Fc:1 Fc:2 Fc:1 Fc:1 Fc:1 Fs Fi[2] Fc}



static void Test_S10523C1()
{
  {
    init_simple_test("S10523C1");
    static S10523C1 lv;
    check2(sizeof(lv), 16, "sizeof(S10523C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10523C1)");
    set_bf_and_test(lv, s10523c1f0, 0, 0, 1, 1, "S10523C1");
    set_bf_and_test(lv, s10523c1f1, 0, 1, 2, 1, "S10523C1");
    set_bf_and_test(lv, s10523c1f1, 0, 1, 2, hide_sll(1LL<<1), "S10523C1");
    set_bf_and_test(lv, s10523c1f2, 0, 3, 1, 1, "S10523C1");
    set_bf_and_test(lv, s10523c1f3, 0, 4, 1, 1, "S10523C1");
    set_bf_and_test(lv, s10523c1f4, 0, 5, 1, 1, "S10523C1");
    check_field_offset(lv, s10523c1f5, 2, "S10523C1.s10523c1f5");
    check_field_offset(lv, s10523c1f6, 4, "S10523C1.s10523c1f6");
    check_field_offset(lv, s10523c1f7, 12, "S10523C1.s10523c1f7");
  }
}
static Arrange_To_Call_Me vS10523C1(Test_S10523C1, "S10523C1", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18551C1  {
  char s18551c1f0;
  ::S21073C4 s18551c1f1;
  __tsi64 s18551c1f2;
  virtual void  v1(); // _ZN8S18551C12v1Ev
  virtual void  v2(); // _ZN8S18551C12v2Ev
  ~S18551C1(); // tgen
  S18551C1(); // tgen
};
//SIG(1 S18551C1) C1{ v1 v2 Fc FC2{ v3 v4 v5 v6 v7 v8 Fi} FL}


void  S18551C1 ::v1(){vfunc_called(this, "_ZN8S18551C12v1Ev");}
void  S18551C1 ::v2(){vfunc_called(this, "_ZN8S18551C12v2Ev");}
S18551C1 ::~S18551C1(){ note_dtor("S18551C1", this);} // tgen
S18551C1 ::S18551C1(){ note_ctor("S18551C1", this);} // tgen

static void Test_S18551C1()
{
  extern Class_Descriptor cd_S18551C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(6,7)];
    init_test(&cd_S18551C1, buf);
    S18551C1 *dp, &lv = *(dp=new (buf) S18551C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S18551C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18551C1)");
    check_field_offset(lv, s18551c1f0, ABISELECT(8,4), "S18551C1.s18551c1f0");
    check_field_offset(lv, s18551c1f1, ABISELECT(16,8), "S18551C1.s18551c1f1");
    check_field_offset(lv, s18551c1f2, ABISELECT(32,16), "S18551C1.s18551c1f2");
    test_class_info(&lv, &cd_S18551C1);
    dp->~S18551C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18551C1(Test_S18551C1, "S18551C1", ABISELECT(40,24));

#else // __cplusplus

extern void _ZN8S18551C1C1Ev();
extern void _ZN8S18551C1D1Ev();
Name_Map name_map_S18551C1[] = {
  NSPAIR(_ZN8S18551C1C1Ev),
  NSPAIR(_ZN8S18551C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18551C1[];
extern void _ZN8S18551C12v1Ev();
extern void _ZN8S18551C12v2Ev();
static  VTBL_ENTRY vtc_S18551C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18551C1[0]),
  (VTBL_ENTRY)&_ZN8S18551C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18551C12v2Ev,
};
extern VTBL_ENTRY _ZTI8S18551C1[];
extern  VTBL_ENTRY _ZTV8S18551C1[];
Class_Descriptor cd_S18551C1 = {  "S18551C1", // class name
  0,0,//no base classes
  &(vtc_S18551C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(40,24), // object size
  NSPAIRA(_ZTI8S18551C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18551C1),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  S11176C4_nt  {
  __tsi64 s11176c4f0;
};
//SIG(-1 S11176C4_nt) C1{ FL}



//skip512 S11176C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11176C1  {
  ::S2007C11 s11176c1f0;
  ::S8324C4_nt s11176c1f1;
  char s11176c1f2[4];
  ::S11176C4_nt s11176c1f3;
};
//SIG(1 S11176C1) C1{ FC2{ Fc[256]} FC3{ Fc[12]} Fc[4] FC4{ FL}}



static void Test_S11176C1()
{
  {
    init_simple_test("S11176C1");
    S11176C1 lv;
    check2(sizeof(lv), 280, "sizeof(S11176C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11176C1)");
    check_field_offset(lv, s11176c1f0, 0, "S11176C1.s11176c1f0");
    check_field_offset(lv, s11176c1f1, 256, "S11176C1.s11176c1f1");
    check_field_offset(lv, s11176c1f2, 268, "S11176C1.s11176c1f2");
    check_field_offset(lv, s11176c1f3, 272, "S11176C1.s11176c1f3");
  }
}
static Arrange_To_Call_Me vS11176C1(Test_S11176C1, "S11176C1", 280);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11175C4_nt  {
  long s11175c4f0;
};
//SIG(-1 S11175C4_nt) C1{ Fl}



//skip512 S11175C4_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11175C1  {
  ::S2007C11 s11175c1f0;
  ::S8324C4_nt s11175c1f1;
  char s11175c1f2[4];
  ::S11175C4_nt s11175c1f3;
};
//SIG(1 S11175C1) C1{ FC2{ Fc[256]} FC3{ Fc[12]} Fc[4] FC4{ Fl}}



static void Test_S11175C1()
{
  {
    init_simple_test("S11175C1");
    S11175C1 lv;
    check2(sizeof(lv), ABISELECT(280,276), "sizeof(S11175C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11175C1)");
    check_field_offset(lv, s11175c1f0, 0, "S11175C1.s11175c1f0");
    check_field_offset(lv, s11175c1f1, 256, "S11175C1.s11175c1f1");
    check_field_offset(lv, s11175c1f2, 268, "S11175C1.s11175c1f2");
    check_field_offset(lv, s11175c1f3, 272, "S11175C1.s11175c1f3");
  }
}
static Arrange_To_Call_Me vS11175C1(Test_S11175C1, "S11175C1", ABISELECT(280,276));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6815C2  {
  int s6815c2f0;
  virtual void  v4(); // _ZN7S6815C22v4Ev
  virtual void  v5(); // _ZN7S6815C22v5Ev
  virtual void  v6(); // _ZN7S6815C22v6Ev
  virtual void  v7(); // _ZN7S6815C22v7Ev
  virtual void  v8(); // _ZN7S6815C22v8Ev
  virtual void  v9(); // _ZN7S6815C22v9Ev
  ~S6815C2(); // tgen
  S6815C2(); // tgen
};
//SIG(-1 S6815C2) C1{ v1 v2 v3 v4 v5 v6 Fi}


void  S6815C2 ::v4(){vfunc_called(this, "_ZN7S6815C22v4Ev");}
void  S6815C2 ::v5(){vfunc_called(this, "_ZN7S6815C22v5Ev");}
void  S6815C2 ::v6(){vfunc_called(this, "_ZN7S6815C22v6Ev");}
void  S6815C2 ::v7(){vfunc_called(this, "_ZN7S6815C22v7Ev");}
void  S6815C2 ::v8(){vfunc_called(this, "_ZN7S6815C22v8Ev");}
void  S6815C2 ::v9(){vfunc_called(this, "_ZN7S6815C22v9Ev");}
S6815C2 ::~S6815C2(){ note_dtor("S6815C2", this);} // tgen
S6815C2 ::S6815C2(){ note_ctor("S6815C2", this);} // tgen

static void Test_S6815C2()
{
  extern Class_Descriptor cd_S6815C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6815C2, buf);
    S6815C2 *dp, &lv = *(dp=new (buf) S6815C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6815C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6815C2)");
    check_field_offset(lv, s6815c2f0, ABISELECT(8,4), "S6815C2.s6815c2f0");
    test_class_info(&lv, &cd_S6815C2);
    dp->~S6815C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6815C2(Test_S6815C2, "S6815C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S6815C2C1Ev();
extern void _ZN7S6815C2D1Ev();
Name_Map name_map_S6815C2[] = {
  NSPAIR(_ZN7S6815C2C1Ev),
  NSPAIR(_ZN7S6815C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6815C2[];
extern void _ZN7S6815C22v4Ev();
extern void _ZN7S6815C22v5Ev();
extern void _ZN7S6815C22v6Ev();
extern void _ZN7S6815C22v7Ev();
extern void _ZN7S6815C22v8Ev();
extern void _ZN7S6815C22v9Ev();
static  VTBL_ENTRY vtc_S6815C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6815C2[0]),
  (VTBL_ENTRY)&_ZN7S6815C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6815C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6815C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6815C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6815C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6815C22v9Ev,
};
extern VTBL_ENTRY _ZTI7S6815C2[];
extern  VTBL_ENTRY _ZTV7S6815C2[];
Class_Descriptor cd_S6815C2 = {  "S6815C2", // class name
  0,0,//no base classes
  &(vtc_S6815C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S6815C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6815C2),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  S6815C1  : S6815C2 {
  int s6815c1f0;
  virtual void  v1(); // _ZN7S6815C12v1Ev
  virtual void  v2(); // _ZN7S6815C12v2Ev
  virtual void  v3(); // _ZN7S6815C12v3Ev
  ~S6815C1(); // tgen
  S6815C1(); // tgen
};
//SIG(1 S6815C1) C1{ BC2{ v4 v5 v6 v7 v8 v9 Fi} v1 v2 v3 Fi}


void  S6815C1 ::v1(){vfunc_called(this, "_ZN7S6815C12v1Ev");}
void  S6815C1 ::v2(){vfunc_called(this, "_ZN7S6815C12v2Ev");}
void  S6815C1 ::v3(){vfunc_called(this, "_ZN7S6815C12v3Ev");}
S6815C1 ::~S6815C1(){ note_dtor("S6815C1", this);} // tgen
S6815C1 ::S6815C1(){ note_ctor("S6815C1", this);} // tgen

static void Test_S6815C1()
{
  extern Class_Descriptor cd_S6815C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S6815C1, buf);
    S6815C1 *dp, &lv = *(dp=new (buf) S6815C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S6815C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6815C1)");
    check_base_class_offset(lv, (S6815C2*), 0, "S6815C1");
    check_field_offset(lv, s6815c1f0, ABISELECT(12,8), "S6815C1.s6815c1f0");
    test_class_info(&lv, &cd_S6815C1);
    dp->~S6815C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6815C1(Test_S6815C1, "S6815C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN7S6815C1C1Ev();
extern void _ZN7S6815C1D1Ev();
Name_Map name_map_S6815C1[] = {
  NSPAIR(_ZN7S6815C1C1Ev),
  NSPAIR(_ZN7S6815C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6815C2;
extern VTBL_ENTRY _ZTI7S6815C2[];
extern  VTBL_ENTRY _ZTV7S6815C2[];
static Base_Class bases_S6815C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6815C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S6815C1[];
extern void _ZN7S6815C22v4Ev();
extern void _ZN7S6815C22v5Ev();
extern void _ZN7S6815C22v6Ev();
extern void _ZN7S6815C22v7Ev();
extern void _ZN7S6815C22v8Ev();
extern void _ZN7S6815C22v9Ev();
extern void _ZN7S6815C12v1Ev();
extern void _ZN7S6815C12v2Ev();
extern void _ZN7S6815C12v3Ev();
static  VTBL_ENTRY vtc_S6815C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6815C1[0]),
  (VTBL_ENTRY)&_ZN7S6815C22v4Ev,
  (VTBL_ENTRY)&_ZN7S6815C22v5Ev,
  (VTBL_ENTRY)&_ZN7S6815C22v6Ev,
  (VTBL_ENTRY)&_ZN7S6815C22v7Ev,
  (VTBL_ENTRY)&_ZN7S6815C22v8Ev,
  (VTBL_ENTRY)&_ZN7S6815C22v9Ev,
  (VTBL_ENTRY)&_ZN7S6815C12v1Ev,
  (VTBL_ENTRY)&_ZN7S6815C12v2Ev,
  (VTBL_ENTRY)&_ZN7S6815C12v3Ev,
};
extern VTBL_ENTRY _ZTI7S6815C1[];
extern  VTBL_ENTRY _ZTV7S6815C1[];
Class_Descriptor cd_S6815C1 = {  "S6815C1", // class name
  bases_S6815C1, 1,
  &(vtc_S6815C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI7S6815C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6815C1),11, //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  S5533C1  : S5532C2_nt {
  int s5533c1f0;
  ::S4259C13 s5533c1f1[16];
};
//SIG(1 S5533C1) C1{ BC2{ Fi[3]} Fi FC3{ Fi Fc[514] Fi}[16]}



static void Test_S5533C1()
{
  extern Class_Descriptor cd_S5533C1;
  void *lvp;
  {
    int buf[2101];
    init_test(&cd_S5533C1, buf);
    S5533C1 &lv = *(new (buf) S5533C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 8400, "sizeof(S5533C1)");
    check2(__alignof__(lv), 4, "__alignof__(S5533C1)");
    check_base_class_offset(lv, (S5532C2_nt*), 0, "S5533C1");
    check_field_offset(lv, s5533c1f0, 12, "S5533C1.s5533c1f0");
    check_field_offset(lv, s5533c1f1, 16, "S5533C1.s5533c1f1");
    test_class_info(&lv, &cd_S5533C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5533C1(Test_S5533C1, "S5533C1", 8400);

#else // __cplusplus

extern Class_Descriptor cd_S5532C2_nt;
static Base_Class bases_S5533C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5532C2_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_S5533C1 = {  "S5533C1", // class name
  bases_S5533C1, 1,
  0, // no vftv
  0, //no vtt
  8400, // 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  S17090C1  {
  int s17090c1f0[2];
  ::S5634C14 s17090c1f1;
  void *s17090c1f2[2];
  void  mf17090c1(); // _ZN8S17090C19mf17090c1Ev
};
//SIG(1 S17090C1) C1{ m Fi[2] FC2{ m FC3{ m Fi[2]} FC3} Fp[2]}


void  S17090C1 ::mf17090c1(){}

static void Test_S17090C1()
{
  {
    init_simple_test("S17090C1");
    S17090C1 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S17090C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17090C1)");
    check_field_offset(lv, s17090c1f0, 0, "S17090C1.s17090c1f0");
    check_field_offset(lv, s17090c1f1, 8, "S17090C1.s17090c1f1");
    check_field_offset(lv, s17090c1f2, 24, "S17090C1.s17090c1f2");
  }
}
static Arrange_To_Call_Me vS17090C1(Test_S17090C1, "S17090C1", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16647C2  : S2640C6_nt {
  ::S2007C11 s16647c2f0;
};
//SIG(-1 S16647C2) C1{ BC2{ m Fp Fi} FC3{ Fc[256]}}



static void Test_S16647C2()
{
  extern Class_Descriptor cd_S16647C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(35,67)];
    init_test(&cd_S16647C2, buf);
    S16647C2 &lv = *(new (buf) S16647C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(272,264), "sizeof(S16647C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16647C2)");
    check_base_class_offset(lv, (S2640C6_nt*), 0, "S16647C2");
    check_field_offset(lv, s16647c2f0, ABISELECT(16,8), "S16647C2.s16647c2f0");
    test_class_info(&lv, &cd_S16647C2);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS16647C2(Test_S16647C2, "S16647C2", ABISELECT(272,264));

#else // __cplusplus

extern Class_Descriptor cd_S2640C6_nt;
static Base_Class bases_S16647C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2640C6_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_S16647C2 = {  "S16647C2", // class name
  bases_S16647C2, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(272,264), // 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  S16647C1  {
  int s16647c1f0;
  ::S16647C2 s16647c1f1;
  void  mf16647c1(); // _ZN8S16647C19mf16647c1Ev
};
//SIG(1 S16647C1) C1{ m Fi FC2{ BC3{ m Fp Fi} FC4{ Fc[256]}}}


void  S16647C1 ::mf16647c1(){}

static void Test_S16647C1()
{
  {
    init_simple_test("S16647C1");
    S16647C1 lv;
    check2(sizeof(lv), ABISELECT(280,268), "sizeof(S16647C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16647C1)");
    check_field_offset(lv, s16647c1f0, 0, "S16647C1.s16647c1f0");
    check_field_offset(lv, s16647c1f1, ABISELECT(8,4), "S16647C1.s16647c1f1");
  }
}
static Arrange_To_Call_Me vS16647C1(Test_S16647C1, "S16647C1", ABISELECT(280,268));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18586C1  {
  long s18586c1f0;
  ::S21073C4 s18586c1f1;
  virtual void  v1(); // _ZN8S18586C12v1Ev
  virtual void  v2(); // _ZN8S18586C12v2Ev
  ~S18586C1(); // tgen
  S18586C1(); // tgen
};
//SIG(1 S18586C1) C1{ v1 v2 Fl FC2{ v3 v4 v5 v6 v7 v8 Fi}}


void  S18586C1 ::v1(){vfunc_called(this, "_ZN8S18586C12v1Ev");}
void  S18586C1 ::v2(){vfunc_called(this, "_ZN8S18586C12v2Ev");}
S18586C1 ::~S18586C1(){ note_dtor("S18586C1", this);} // tgen
S18586C1 ::S18586C1(){ note_ctor("S18586C1", this);} // tgen

static void Test_S18586C1()
{
  extern Class_Descriptor cd_S18586C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S18586C1, buf);
    S18586C1 *dp, &lv = *(dp=new (buf) S18586C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S18586C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18586C1)");
    check_field_offset(lv, s18586c1f0, ABISELECT(8,4), "S18586C1.s18586c1f0");
    check_field_offset(lv, s18586c1f1, ABISELECT(16,8), "S18586C1.s18586c1f1");
    test_class_info(&lv, &cd_S18586C1);
    dp->~S18586C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18586C1(Test_S18586C1, "S18586C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S18586C1C1Ev();
extern void _ZN8S18586C1D1Ev();
Name_Map name_map_S18586C1[] = {
  NSPAIR(_ZN8S18586C1C1Ev),
  NSPAIR(_ZN8S18586C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18586C1[];
extern void _ZN8S18586C12v1Ev();
extern void _ZN8S18586C12v2Ev();
static  VTBL_ENTRY vtc_S18586C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18586C1[0]),
  (VTBL_ENTRY)&_ZN8S18586C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18586C12v2Ev,
};
extern VTBL_ENTRY _ZTI8S18586C1[];
extern  VTBL_ENTRY _ZTV8S18586C1[];
Class_Descriptor cd_S18586C1 = {  "S18586C1", // class name
  0,0,//no base classes
  &(vtc_S18586C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S18586C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18586C1),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  S11923C2_nt  {
  short s11923c2f0;
  char s11923c2f1[2];
};
//SIG(-1 S11923C2_nt) C1{ Fs Fc[2]}



//skip512 S11923C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11923C3  {
  short s11923c3f0[2];
  char s11923c3f1[16];
};
//SIG(-1 S11923C3) C1{ Fs[2] Fc[16]}



static void Test_S11923C3()
{
  {
    init_simple_test("S11923C3");
    S11923C3 lv;
    check2(sizeof(lv), 20, "sizeof(S11923C3)");
    check2(__alignof__(lv), 2, "__alignof__(S11923C3)");
    check_field_offset(lv, s11923c3f0, 0, "S11923C3.s11923c3f0");
    check_field_offset(lv, s11923c3f1, 4, "S11923C3.s11923c3f1");
  }
}
static Arrange_To_Call_Me vS11923C3(Test_S11923C3, "S11923C3", 20);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11923C1  {
  ::S11923C2_nt s11923c1f0;
  ::S11923C3 s11923c1f1;
};
//SIG(1 S11923C1) C1{ FC2{ Fs Fc[2]} FC3{ Fs[2] Fc[16]}}



static void Test_S11923C1()
{
  {
    init_simple_test("S11923C1");
    S11923C1 lv;
    check2(sizeof(lv), 24, "sizeof(S11923C1)");
    check2(__alignof__(lv), 2, "__alignof__(S11923C1)");
    check_field_offset(lv, s11923c1f0, 0, "S11923C1.s11923c1f0");
    check_field_offset(lv, s11923c1f1, 4, "S11923C1.s11923c1f1");
  }
}
static Arrange_To_Call_Me vS11923C1(Test_S11923C1, "S11923C1", 24);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12320C1  {
  int s12320c1f0;
  char s12320c1f1[64];
  int s12320c1f2[4];
  char s12320c1f3;
  int s12320c1f4;
  char s12320c1f5;
  int s12320c1f6[6];
};
//SIG(1 S12320C1) C1{ Fi Fc[64] Fi[4] Fc Fi Fc Fi[6]}



static void Test_S12320C1()
{
  {
    init_simple_test("S12320C1");
    S12320C1 lv;
    check2(sizeof(lv), 120, "sizeof(S12320C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12320C1)");
    check_field_offset(lv, s12320c1f0, 0, "S12320C1.s12320c1f0");
    check_field_offset(lv, s12320c1f1, 4, "S12320C1.s12320c1f1");
    check_field_offset(lv, s12320c1f2, 68, "S12320C1.s12320c1f2");
    check_field_offset(lv, s12320c1f3, 84, "S12320C1.s12320c1f3");
    check_field_offset(lv, s12320c1f4, 88, "S12320C1.s12320c1f4");
    check_field_offset(lv, s12320c1f5, 92, "S12320C1.s12320c1f5");
    check_field_offset(lv, s12320c1f6, 96, "S12320C1.s12320c1f6");
  }
}
static Arrange_To_Call_Me vS12320C1(Test_S12320C1, "S12320C1", 120);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10708C1  {
  char s10708c1f0[2];
  short s10708c1f1[4];
  void *s10708c1f2[4];
  long s10708c1f3[3];
  void *s10708c1f4[2];
};
//SIG(1 S10708C1) C1{ Fc[2] Fs[4] Fp[4] Fl[3] Fp[2]}



static void Test_S10708C1()
{
  {
    init_simple_test("S10708C1");
    S10708C1 lv;
    check2(sizeof(lv), ABISELECT(88,48), "sizeof(S10708C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10708C1)");
    check_field_offset(lv, s10708c1f0, 0, "S10708C1.s10708c1f0");
    check_field_offset(lv, s10708c1f1, 2, "S10708C1.s10708c1f1");
    check_field_offset(lv, s10708c1f2, ABISELECT(16,12), "S10708C1.s10708c1f2");
    check_field_offset(lv, s10708c1f3, ABISELECT(48,28), "S10708C1.s10708c1f3");
    check_field_offset(lv, s10708c1f4, ABISELECT(72,40), "S10708C1.s10708c1f4");
  }
}
static Arrange_To_Call_Me vS10708C1(Test_S10708C1, "S10708C1", ABISELECT(88,48));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6217C3  : S7291C10_nt {
  __tsi64 s6217c3f0[2];
};
//SIG(-1 S6217C3) C1{ BC2{ m} FL[2]}



static void Test_S6217C3()
{
  extern Class_Descriptor cd_S6217C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,5)];
    init_test(&cd_S6217C3, buf);
    S6217C3 &lv = *(new (buf) S6217C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), 16, "sizeof(S6217C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6217C3)");
    check_base_class_offset(lv, (S7291C10_nt*), 0, "S6217C3");
    check_field_offset(lv, s6217c3f0, 0, "S6217C3.s6217c3f0");
    test_class_info(&lv, &cd_S6217C3);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6217C3(Test_S6217C3, "S6217C3", 16);

#else // __cplusplus

extern Class_Descriptor cd_S7291C10_nt;
extern VTBL_ENTRY _ZTI11S7291C10_nt[];
static Base_Class bases_S6217C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7291C10_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_S6217C3 = {  "S6217C3", // class name
  bases_S6217C3, 1,
  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  S6217C1  : S7291C10_nt {
  __tsi64 s6217c1f0[14];
  ::S6217C3 s6217c1f1;
  char s6217c1f2;
};
//SIG(1 S6217C1) C1{ BC2{ m} FL[14] FC3{ BC2 FL[2]} Fc}



static void Test_S6217C1()
{
  extern Class_Descriptor cd_S6217C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(18,34)];
    init_test(&cd_S6217C1, buf);
    S6217C1 &lv = *(new (buf) S6217C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(136,132), "sizeof(S6217C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6217C1)");
    check_base_class_offset(lv, (S7291C10_nt*), 0, "S6217C1");
    check_field_offset(lv, s6217c1f0, 0, "S6217C1.s6217c1f0");
    check_field_offset(lv, s6217c1f1, 112, "S6217C1.s6217c1f1");
    check_field_offset(lv, s6217c1f2, 128, "S6217C1.s6217c1f2");
    test_class_info(&lv, &cd_S6217C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6217C1(Test_S6217C1, "S6217C1", ABISELECT(136,132));

#else // __cplusplus

extern Class_Descriptor cd_S7291C10_nt;
extern VTBL_ENTRY _ZTI11S7291C10_nt[];
static Base_Class bases_S6217C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7291C10_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_S6217C1 = {  "S6217C1", // class name
  bases_S6217C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(136,132), // 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  S11590C1  {
  ::S2640C7_nt s11590c1f0;
  void *s11590c1f1;
  int s11590c1f2;
  ::S5532C2_nt s11590c1f3;
  void *s11590c1f4;
};
//SIG(1 S11590C1) C1{ FC2{ Fi[2]} Fp Fi FC3{ Fi[3]} Fp}



static void Test_S11590C1()
{
  {
    init_simple_test("S11590C1");
    S11590C1 lv;
    check2(sizeof(lv), ABISELECT(40,32), "sizeof(S11590C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11590C1)");
    check_field_offset(lv, s11590c1f0, 0, "S11590C1.s11590c1f0");
    check_field_offset(lv, s11590c1f1, 8, "S11590C1.s11590c1f1");
    check_field_offset(lv, s11590c1f2, ABISELECT(16,12), "S11590C1.s11590c1f2");
    check_field_offset(lv, s11590c1f3, ABISELECT(20,16), "S11590C1.s11590c1f3");
    check_field_offset(lv, s11590c1f4, ABISELECT(32,28), "S11590C1.s11590c1f4");
  }
}
static Arrange_To_Call_Me vS11590C1(Test_S11590C1, "S11590C1", ABISELECT(40,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S20054C2  {
  int s20054c2f0;
  virtual void  v2(); // _ZN8S20054C22v2Ev
  virtual void  v3(); // _ZN8S20054C22v3Ev
  virtual void  v4(); // _ZN8S20054C22v4Ev
  virtual void  v5(); // _ZN8S20054C22v5Ev
  virtual void  v6(); // _ZN8S20054C22v6Ev
  virtual void  v7(); // _ZN8S20054C22v7Ev
  ~S20054C2(); // tgen
  S20054C2(); // tgen
};
//SIG(-1 S20054C2) C1{ v1 v2 v3 v4 v5 v6 Fi}


void  S20054C2 ::v2(){vfunc_called(this, "_ZN8S20054C22v2Ev");}
void  S20054C2 ::v3(){vfunc_called(this, "_ZN8S20054C22v3Ev");}
void  S20054C2 ::v4(){vfunc_called(this, "_ZN8S20054C22v4Ev");}
void  S20054C2 ::v5(){vfunc_called(this, "_ZN8S20054C22v5Ev");}
void  S20054C2 ::v6(){vfunc_called(this, "_ZN8S20054C22v6Ev");}
void  S20054C2 ::v7(){vfunc_called(this, "_ZN8S20054C22v7Ev");}
S20054C2 ::~S20054C2(){ note_dtor("S20054C2", this);} // tgen
S20054C2 ::S20054C2(){ note_ctor("S20054C2", this);} // tgen

static void Test_S20054C2()
{
  extern Class_Descriptor cd_S20054C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S20054C2, buf);
    S20054C2 *dp, &lv = *(dp=new (buf) S20054C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S20054C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20054C2)");
    check_field_offset(lv, s20054c2f0, ABISELECT(8,4), "S20054C2.s20054c2f0");
    test_class_info(&lv, &cd_S20054C2);
    dp->~S20054C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20054C2(Test_S20054C2, "S20054C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S20054C2C1Ev();
extern void _ZN8S20054C2D1Ev();
Name_Map name_map_S20054C2[] = {
  NSPAIR(_ZN8S20054C2C1Ev),
  NSPAIR(_ZN8S20054C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S20054C2[];
extern void _ZN8S20054C22v2Ev();
extern void _ZN8S20054C22v3Ev();
extern void _ZN8S20054C22v4Ev();
extern void _ZN8S20054C22v5Ev();
extern void _ZN8S20054C22v6Ev();
extern void _ZN8S20054C22v7Ev();
static  VTBL_ENTRY vtc_S20054C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S20054C2[0]),
  (VTBL_ENTRY)&_ZN8S20054C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20054C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20054C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20054C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20054C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20054C22v7Ev,
};
extern VTBL_ENTRY _ZTI8S20054C2[];
extern  VTBL_ENTRY _ZTV8S20054C2[];
Class_Descriptor cd_S20054C2 = {  "S20054C2", // class name
  0,0,//no base classes
  &(vtc_S20054C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S20054C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S20054C2),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  S20054C1  : virtual S20054C2 {
  virtual void  v1(); // _ZN8S20054C12v1Ev
  ~S20054C1(); // tgen
  S20054C1(); // tgen
};
//SIG(1 S20054C1) C1{ VBC2{ v2 v3 v4 v5 v6 v7 Fi} v1}


void  S20054C1 ::v1(){vfunc_called(this, "_ZN8S20054C12v1Ev");}
S20054C1 ::~S20054C1(){ note_dtor("S20054C1", this);} // tgen
S20054C1 ::S20054C1(){ note_ctor("S20054C1", this);} // tgen

static void Test_S20054C1()
{
  extern Class_Descriptor cd_S20054C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[4];
    init_test(&cd_S20054C1, buf);
    S20054C1 *dp, &lv = *(dp=new (buf) S20054C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S20054C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S20054C1)");
    check_base_class_offset(lv, (S20054C2*), ABISELECT(8,4), "S20054C1");
    test_class_info(&lv, &cd_S20054C1);
    dp->~S20054C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS20054C1(Test_S20054C1, "S20054C1", ABISELECT(24,12));

#else // __cplusplus

extern void _ZN8S20054C1C1Ev();
extern void _ZN8S20054C1D1Ev();
Name_Map name_map_S20054C1[] = {
  NSPAIR(_ZN8S20054C1C1Ev),
  NSPAIR(_ZN8S20054C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S20054C2;
extern VTBL_ENTRY _ZTI8S20054C2[];
extern  VTBL_ENTRY _ZTV8S20054C2[];
static Base_Class bases_S20054C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S20054C2,    ABISELECT(8,4), //bcp->offset
    4, //bcp->virtual_function_table_offset
    8, //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 _ZTI8S20054C1[];
extern void _ZN8S20054C12v1Ev();
extern void _ZN8S20054C22v2Ev();
extern void _ZN8S20054C22v3Ev();
extern void _ZN8S20054C22v4Ev();
extern void _ZN8S20054C22v5Ev();
extern void _ZN8S20054C22v6Ev();
extern void _ZN8S20054C22v7Ev();
static  VTBL_ENTRY vtc_S20054C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S20054C1[0]),
  (VTBL_ENTRY)&_ZN8S20054C12v1Ev,
  0,
  0,
  0,
  0,
  0,
  0,
  ABISELECT(-8,-4),
  (VTBL_ENTRY)&(_ZTI8S20054C1[0]),
  (VTBL_ENTRY)&_ZN8S20054C22v2Ev,
  (VTBL_ENTRY)&_ZN8S20054C22v3Ev,
  (VTBL_ENTRY)&_ZN8S20054C22v4Ev,
  (VTBL_ENTRY)&_ZN8S20054C22v5Ev,
  (VTBL_ENTRY)&_ZN8S20054C22v6Ev,
  (VTBL_ENTRY)&_ZN8S20054C22v7Ev,
};
extern VTBL_ENTRY _ZTV8S20054C1[];
static  VTT_ENTRY vtt_S20054C1[] = {
  {&(_ZTV8S20054C1[3]),  3,18},
  {&(_ZTV8S20054C1[12]),  12,18},
};
extern VTBL_ENTRY _ZTI8S20054C1[];
extern  VTBL_ENTRY _ZTV8S20054C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S20054C1[];
Class_Descriptor cd_S20054C1 = {  "S20054C1", // class name
  bases_S20054C1, 1,
  &(vtc_S20054C1[0]), // expected_vtbl_contents
  &(vtt_S20054C1[0]), // expected_vtt_contents
  ABISELECT(24,12), // object size
  NSPAIRA(_ZTI8S20054C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S20054C1),18, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S20054C1),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  S6386C2  {
  short s6386c2f0;
  long double s6386c2f1;
  long s6386c2f2;
  virtual void  v1(); // _ZN7S6386C22v1Ev
  ~S6386C2(); // tgen
  S6386C2(); // tgen
};
//SIG(-1 S6386C2) C1{ v1 Fs FD Fl}


void  S6386C2 ::v1(){vfunc_called(this, "_ZN7S6386C22v1Ev");}
S6386C2 ::~S6386C2(){ note_dtor("S6386C2", this);} // tgen
S6386C2 ::S6386C2(){ note_ctor("S6386C2", this);} // tgen

static void Test_S6386C2()
{
  extern Class_Descriptor cd_S6386C2;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,7)];
    init_test(&cd_S6386C2, buf);
    S6386C2 *dp, &lv = *(dp=new (buf) S6386C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S6386C2)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6386C2)");
    check_field_offset(lv, s6386c2f0, ABISELECT(8,4), "S6386C2.s6386c2f0");
    check_field_offset(lv, s6386c2f1, ABISELECT(16,8), "S6386C2.s6386c2f1");
    check_field_offset(lv, s6386c2f2, ABISELECT(32,20), "S6386C2.s6386c2f2");
    test_class_info(&lv, &cd_S6386C2);
    dp->~S6386C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6386C2(Test_S6386C2, "S6386C2", ABISELECT(48,24));

#else // __cplusplus

extern void _ZN7S6386C2C1Ev();
extern void _ZN7S6386C2D1Ev();
Name_Map name_map_S6386C2[] = {
  NSPAIR(_ZN7S6386C2C1Ev),
  NSPAIR(_ZN7S6386C2D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S6386C2[];
extern void _ZN7S6386C22v1Ev();
static  VTBL_ENTRY vtc_S6386C2[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6386C2[0]),
  (VTBL_ENTRY)&_ZN7S6386C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S6386C2[];
extern  VTBL_ENTRY _ZTV7S6386C2[];
Class_Descriptor cd_S6386C2 = {  "S6386C2", // class name
  0,0,//no base classes
  &(vtc_S6386C2[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,24), // object size
  NSPAIRA(_ZTI7S6386C2),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S6386C2),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  S6386C1  : S6386C2 {
  long double s6386c1f0;
  char s6386c1f1[7];
  __tsi64 s6386c1f2;
  ~S6386C1(); // tgen
  S6386C1(); // tgen
};
//SIG(1 S6386C1) C1{ BC2{ v1 Fs FD Fl} FD Fc[7] FL}


S6386C1 ::~S6386C1(){ note_dtor("S6386C1", this);} // tgen
S6386C1 ::S6386C1(){ note_ctor("S6386C1", this);} // tgen

static void Test_S6386C1()
{
  extern Class_Descriptor cd_S6386C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(6,14)];
    init_test(&cd_S6386C1, buf);
    S6386C1 *dp, &lv = *(dp=new (buf) S6386C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(80,52), "sizeof(S6386C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S6386C1)");
    check_base_class_offset(lv, (S6386C2*), 0, "S6386C1");
    check_field_offset(lv, s6386c1f0, ABISELECT(48,24), "S6386C1.s6386c1f0");
    check_field_offset(lv, s6386c1f1, ABISELECT(64,36), "S6386C1.s6386c1f1");
    check_field_offset(lv, s6386c1f2, ABISELECT(72,44), "S6386C1.s6386c1f2");
    test_class_info(&lv, &cd_S6386C1);
    dp->~S6386C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6386C1(Test_S6386C1, "S6386C1", ABISELECT(80,52));

#else // __cplusplus

extern void _ZN7S6386C1C1Ev();
extern void _ZN7S6386C1D1Ev();
Name_Map name_map_S6386C1[] = {
  NSPAIR(_ZN7S6386C1C1Ev),
  NSPAIR(_ZN7S6386C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S6386C2;
extern VTBL_ENTRY _ZTI7S6386C2[];
extern  VTBL_ENTRY _ZTV7S6386C2[];
static Base_Class bases_S6386C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S6386C2,    0, //bcp->offset
    0, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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 _ZTI7S6386C1[];
extern void _ZN7S6386C22v1Ev();
static  VTBL_ENTRY vtc_S6386C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S6386C1[0]),
  (VTBL_ENTRY)&_ZN7S6386C22v1Ev,
};
extern VTBL_ENTRY _ZTI7S6386C1[];
extern  VTBL_ENTRY _ZTV7S6386C1[];
Class_Descriptor cd_S6386C1 = {  "S6386C1", // class name
  bases_S6386C1, 1,
  &(vtc_S6386C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(80,52), // object size
  NSPAIRA(_ZTI7S6386C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S6386C1),3, //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  S13220C1  {
  int s13220c1f0[2];
  void *s13220c1f1[2];
  ::S11176C4_nt s13220c1f2;
  void *s13220c1f3[4];
  int s13220c1f4;
};
//SIG(1 S13220C1) C1{ Fi[2] Fp[2] FC2{ FL} Fp[4] Fi}



static void Test_S13220C1()
{
  {
    init_simple_test("S13220C1");
    S13220C1 lv;
    check2(sizeof(lv), ABISELECT(72,44), "sizeof(S13220C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13220C1)");
    check_field_offset(lv, s13220c1f0, 0, "S13220C1.s13220c1f0");
    check_field_offset(lv, s13220c1f1, 8, "S13220C1.s13220c1f1");
    check_field_offset(lv, s13220c1f2, ABISELECT(24,16), "S13220C1.s13220c1f2");
    check_field_offset(lv, s13220c1f3, ABISELECT(32,24), "S13220C1.s13220c1f3");
    check_field_offset(lv, s13220c1f4, ABISELECT(64,40), "S13220C1.s13220c1f4");
  }
}
static Arrange_To_Call_Me vS13220C1(Test_S13220C1, "S13220C1", ABISELECT(72,44));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15812C1  {
  ::S2264C13_nt s15812c1f0;
  int s15812c1f1[2];
  void  mf15812c1(); // _ZN8S15812C19mf15812c1Ev
};
//SIG(1 S15812C1) C1{ m FC2{ m FC3{ m FL[2]}} Fi[2]}


void  S15812C1 ::mf15812c1(){}

static void Test_S15812C1()
{
  {
    init_simple_test("S15812C1");
    S15812C1 lv;
    check2(sizeof(lv), 24, "sizeof(S15812C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15812C1)");
    check_field_offset(lv, s15812c1f0, 0, "S15812C1.s15812c1f0");
    check_field_offset(lv, s15812c1f1, 16, "S15812C1.s15812c1f1");
  }
}
static Arrange_To_Call_Me vS15812C1(Test_S15812C1, "S15812C1", 24);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16459C2  {
  short s16459c2f0[256];
  void  mf16459c2(); // _ZN8S16459C29mf16459c2Ev
};
//SIG(1 S16459C2) C1{ m Fs[256]}


void  S16459C2 ::mf16459c2(){}

static void Test_S16459C2()
{
  {
    init_simple_test("S16459C2");
    S16459C2 lv;
    check2(sizeof(lv), 512, "sizeof(S16459C2)");
    check2(__alignof__(lv), 2, "__alignof__(S16459C2)");
    check_field_offset(lv, s16459c2f0, 0, "S16459C2.s16459c2f0");
  }
}
static Arrange_To_Call_Me vS16459C2(Test_S16459C2, "S16459C2", 512);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16459C1  {
  ::S16459C2 s16459c1f0[20];
  int s16459c1f1[2];
  void  mf16459c1(); // _ZN8S16459C19mf16459c1Ev
};
//SIG(1 S16459C1) C1{ m FC2{ m Fs[256]}[20] Fi[2]}


void  S16459C1 ::mf16459c1(){}

static void Test_S16459C1()
{
  {
    init_simple_test("S16459C1");
    S16459C1 lv;
    check2(sizeof(lv), 10248, "sizeof(S16459C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16459C1)");
    check_field_offset(lv, s16459c1f0, 0, "S16459C1.s16459c1f0");
    check_field_offset(lv, s16459c1f1, 10240, "S16459C1.s16459c1f1");
  }
}
static Arrange_To_Call_Me vS16459C1(Test_S16459C1, "S16459C1", 10248);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17711C1  {
  void *s17711c1f0;
  int s17711c1f1;
  ::S3351C4_nt s17711c1f2;
  void *s17711c1f3;
  int s17711c1f4;
  void  mf17711c1(); // _ZN8S17711C19mf17711c1Ev
};
//SIG(1 S17711C1) C1{ m Fp Fi FC2{ m Fi[2]} Fp Fi}


void  S17711C1 ::mf17711c1(){}

static void Test_S17711C1()
{
  {
    init_simple_test("S17711C1");
    S17711C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S17711C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17711C1)");
    check_field_offset(lv, s17711c1f0, 0, "S17711C1.s17711c1f0");
    check_field_offset(lv, s17711c1f1, ABISELECT(8,4), "S17711C1.s17711c1f1");
    check_field_offset(lv, s17711c1f2, ABISELECT(12,8), "S17711C1.s17711c1f2");
    check_field_offset(lv, s17711c1f3, ABISELECT(24,16), "S17711C1.s17711c1f3");
    check_field_offset(lv, s17711c1f4, ABISELECT(32,20), "S17711C1.s17711c1f4");
  }
}
static Arrange_To_Call_Me vS17711C1(Test_S17711C1, "S17711C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19814C3  : S2264C38 , virtual S7291C10_nt {
  ~S19814C3(); // tgen
  S19814C3(); // tgen
};
//SIG(-1 S19814C3) C1{ BC2{ m} VBC3{ m}}


S19814C3 ::~S19814C3(){ note_dtor("S19814C3", this);} // tgen
S19814C3 ::S19814C3(){ note_ctor("S19814C3", this);} // tgen

static void Test_S19814C3()
{
  extern Class_Descriptor cd_S19814C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S19814C3, buf);
    S19814C3 *dp, &lv = *(dp=new (buf) S19814C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S19814C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19814C3)");
    check_base_class_offset(lv, (S2264C38*), 0, "S19814C3");
    check_base_class_offset(lv, (S7291C10_nt*), 0, "S19814C3");
    test_class_info(&lv, &cd_S19814C3);
    dp->~S19814C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19814C3(Test_S19814C3, "S19814C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN8S19814C3C1Ev();
extern void _ZN8S19814C3D1Ev();
Name_Map name_map_S19814C3[] = {
  NSPAIR(_ZN8S19814C3C1Ev),
  NSPAIR(_ZN8S19814C3D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S7291C10_nt;
extern VTBL_ENTRY _ZTI11S7291C10_nt[];
static Base_Class bases_S19814C3[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S7291C10_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, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19814C3[];
static  VTBL_ENTRY vtc_S19814C3[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19814C3[0]),
};
extern VTBL_ENTRY _ZTV8S19814C3[];
static  VTT_ENTRY vtt_S19814C3[] = {
  {&(_ZTV8S19814C3[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19814C3[];
extern  VTBL_ENTRY _ZTV8S19814C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19814C3[];
Class_Descriptor cd_S19814C3 = {  "S19814C3", // class name
  bases_S19814C3, 2,
  &(vtc_S19814C3[0]), // expected_vtbl_contents
  &(vtt_S19814C3[0]), // expected_vtt_contents
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI8S19814C3),ABISELECT(56,32), //typeinfo_var
  NSPAIRA(_ZTV8S19814C3),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19814C3),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  S19814C1  : virtual S7291C10_nt , S19814C3 , S2264C38 {
  ~S19814C1(); // tgen
  S19814C1(); // tgen
};
//SIG(1 S19814C1) C1{ VBC2{ m} BC3{ BC4{ m} VBC2} BC4}


S19814C1 ::~S19814C1(){ note_dtor("S19814C1", this);} // tgen
S19814C1 ::S19814C1(){ note_ctor("S19814C1", this);} // tgen

static void Test_S19814C1()
{
  extern Class_Descriptor cd_S19814C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S19814C1, buf);
    S19814C1 *dp, &lv = *(dp=new (buf) S19814C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S19814C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19814C1)");
    check_base_class_offset(lv, (S7291C10_nt*), 0, "S19814C1");
    check_base_class_offset(lv, (S7291C10_nt*)(S19814C3*), 0, "S19814C1");
    check_base_class_offset(lv, (S2264C38*)(S19814C3*), 0, "S19814C1");
    check_base_class_offset(lv, (S19814C3*), 0, "S19814C1");
    /*is_ambiguous_... S19814C1::S2264C38 */ AMB_check_base_class_offset(lv, (S2264C38*), ABISELECT(8,4), "S19814C1");
    test_class_info(&lv, &cd_S19814C1);
    dp->~S19814C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19814C1(Test_S19814C1, "S19814C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN8S19814C1C1Ev();
extern void _ZN8S19814C1D1Ev();
Name_Map name_map_S19814C1[] = {
  NSPAIR(_ZN8S19814C1C1Ev),
  NSPAIR(_ZN8S19814C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7291C10_nt;
extern VTBL_ENTRY _ZTI11S7291C10_nt[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
extern Class_Descriptor cd_S19814C3;
extern VTBL_ENTRY _ZTI8S19814C3[];
extern  VTBL_ENTRY _ZTV8S19814C3[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19814C3[];
extern Class_Descriptor cd_S2264C38;
extern VTBL_ENTRY _ZTI8S2264C38[];
static Base_Class bases_S19814C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7291C10_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, 1},
  {&cd_S2264C38,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_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_S19814C3,    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_S2264C38,    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 _ZTI8S19814C1[];
static  VTBL_ENTRY vtc_S19814C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19814C1[0]),
};
extern VTBL_ENTRY _ZTV8S19814C1[];
static  VTBL_ENTRY _tg__ZTV8S19814C3__8S19814C1[] = {
  0,
  0,
  (VTBL_ENTRY)&(_ZTI8S19814C3[0]),
};
static  VTT_ENTRY vtt_S19814C1[] = {
  {&(_ZTV8S19814C1[3]),  3,3},
  {&(_tg__ZTV8S19814C3__8S19814C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19814C1[];
extern  VTBL_ENTRY _ZTV8S19814C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19814C1[];
Class_Descriptor cd_S19814C1 = {  "S19814C1", // class name
  bases_S19814C1, 4,
  &(vtc_S19814C1[0]), // expected_vtbl_contents
  &(vtt_S19814C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI8S19814C1),ABISELECT(72,40), //typeinfo_var
  NSPAIRA(_ZTV8S19814C1),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19814C1),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  S12732C1  {
  int s12732c1f0;
  void *s12732c1f1[10];
  int s12732c1f2[2];
  void *s12732c1f3;
  int s12732c1f4;
  void *s12732c1f5;
};
//SIG(1 S12732C1) C1{ Fi Fp[10] Fi[2] Fp Fi Fp}



static void Test_S12732C1()
{
  {
    init_simple_test("S12732C1");
    S12732C1 lv;
    check2(sizeof(lv), ABISELECT(120,64), "sizeof(S12732C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12732C1)");
    check_field_offset(lv, s12732c1f0, 0, "S12732C1.s12732c1f0");
    check_field_offset(lv, s12732c1f1, ABISELECT(8,4), "S12732C1.s12732c1f1");
    check_field_offset(lv, s12732c1f2, ABISELECT(88,44), "S12732C1.s12732c1f2");
    check_field_offset(lv, s12732c1f3, ABISELECT(96,52), "S12732C1.s12732c1f3");
    check_field_offset(lv, s12732c1f4, ABISELECT(104,56), "S12732C1.s12732c1f4");
    check_field_offset(lv, s12732c1f5, ABISELECT(112,60), "S12732C1.s12732c1f5");
  }
}
static Arrange_To_Call_Me vS12732C1(Test_S12732C1, "S12732C1", ABISELECT(120,64));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S12256C1  {
  int s12256c1f0;
  char s12256c1f1[258];
  int s12256c1f2[3];
  char s12256c1f3[193];
};
//SIG(1 S12256C1) C1{ Fi Fc[258] Fi[3] Fc[193]}



static void Test_S12256C1()
{
  {
    init_simple_test("S12256C1");
    S12256C1 lv;
    check2(sizeof(lv), 472, "sizeof(S12256C1)");
    check2(__alignof__(lv), 4, "__alignof__(S12256C1)");
    check_field_offset(lv, s12256c1f0, 0, "S12256C1.s12256c1f0");
    check_field_offset(lv, s12256c1f1, 4, "S12256C1.s12256c1f1");
    check_field_offset(lv, s12256c1f2, 264, "S12256C1.s12256c1f2");
    check_field_offset(lv, s12256c1f3, 276, "S12256C1.s12256c1f3");
  }
}
static Arrange_To_Call_Me vS12256C1(Test_S12256C1, "S12256C1", 472);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15825C2_nt  {
  ::S5635C37_nt s15825c2f0;
  void  mf15825c2(); // _ZN11S15825C2_nt9mf15825c2Ev
};
//SIG(-1 S15825C2_nt) C1{ m FC2{ m FL}}


void  S15825C2_nt ::mf15825c2(){}

//skip512 S15825C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15825C1  {
  ::S15825C2_nt s15825c1f0;
  __tsi64 s15825c1f1;
  int s15825c1f2;
  void  mf15825c1(); // _ZN8S15825C19mf15825c1Ev
};
//SIG(1 S15825C1) C1{ m FC2{ m FC3{ m FL}} FL Fi}


void  S15825C1 ::mf15825c1(){}

static void Test_S15825C1()
{
  {
    init_simple_test("S15825C1");
    S15825C1 lv;
    check2(sizeof(lv), ABISELECT(24,20), "sizeof(S15825C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15825C1)");
    check_field_offset(lv, s15825c1f0, 0, "S15825C1.s15825c1f0");
    check_field_offset(lv, s15825c1f1, 8, "S15825C1.s15825c1f1");
    check_field_offset(lv, s15825c1f2, 16, "S15825C1.s15825c1f2");
  }
}
static Arrange_To_Call_Me vS15825C1(Test_S15825C1, "S15825C1", ABISELECT(24,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16471C1  {
  ::S7291C10_nt s16471c1f0;
  ::S7291C10_nt s16471c1f1;
  ::S7291C10_nt s16471c1f2;
  int s16471c1f3;
  unsigned int s16471c1f4:1;
  void  mf16471c1(); // _ZN8S16471C19mf16471c1Ev
};
//SIG(1 S16471C1) C1{ m FC2{ m} FC2 FC2 Fi Fi:1}


void  S16471C1 ::mf16471c1(){}

static void Test_S16471C1()
{
  {
    init_simple_test("S16471C1");
    static S16471C1 lv;
    check2(sizeof(lv), 12, "sizeof(S16471C1)");
    check2(__alignof__(lv), 4, "__alignof__(S16471C1)");
    check_field_offset(lv, s16471c1f0, 0, "S16471C1.s16471c1f0");
    check_field_offset(lv, s16471c1f1, 1, "S16471C1.s16471c1f1");
    check_field_offset(lv, s16471c1f2, 2, "S16471C1.s16471c1f2");
    check_field_offset(lv, s16471c1f3, 4, "S16471C1.s16471c1f3");
    set_bf_and_test(lv, s16471c1f4, 8, 0, 1, 1, "S16471C1");
  }
}
static Arrange_To_Call_Me vS16471C1(Test_S16471C1, "S16471C1", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10521C1  {
  unsigned char s10521c1f0:1;
  char s10521c1f1:2;
  unsigned char s10521c1f2:1;
  char s10521c1f3;
  void *s10521c1f4[2];
};
//SIG(1 S10521C1) C1{ Fc:1 Fc:2 Fc:1 Fc Fp[2]}



static void Test_S10521C1()
{
  {
    init_simple_test("S10521C1");
    static S10521C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S10521C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10521C1)");
    set_bf_and_test(lv, s10521c1f0, 0, 0, 1, 1, "S10521C1");
    set_bf_and_test(lv, s10521c1f1, 0, 1, 2, 1, "S10521C1");
    set_bf_and_test(lv, s10521c1f1, 0, 1, 2, hide_sll(1LL<<1), "S10521C1");
    set_bf_and_test(lv, s10521c1f2, 0, 3, 1, 1, "S10521C1");
    check_field_offset(lv, s10521c1f3, 1, "S10521C1.s10521c1f3");
    check_field_offset(lv, s10521c1f4, ABISELECT(8,4), "S10521C1.s10521c1f4");
  }
}
static Arrange_To_Call_Me vS10521C1(Test_S10521C1, "S10521C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19641C2  {
  char s19641c2f0;
  int s19641c2f1[11];
  void *s19641c2f2;
  void  mf19641c2(); // _ZN8S19641C29mf19641c2Ev
};
//SIG(-1 S19641C2) C1{ m Fc Fi[11] Fp}


void  S19641C2 ::mf19641c2(){}

static void Test_S19641C2()
{
  {
    init_simple_test("S19641C2");
    S19641C2 lv;
    check2(sizeof(lv), ABISELECT(56,52), "sizeof(S19641C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19641C2)");
    check_field_offset(lv, s19641c2f0, 0, "S19641C2.s19641c2f0");
    check_field_offset(lv, s19641c2f1, 4, "S19641C2.s19641c2f1");
    check_field_offset(lv, s19641c2f2, 48, "S19641C2.s19641c2f2");
  }
}
static Arrange_To_Call_Me vS19641C2(Test_S19641C2, "S19641C2", ABISELECT(56,52));

#else // __cplusplus

extern VTBL_ENTRY _ZTI8S19641C2[];
VTBL_ENTRY *P__ZTI8S19641C2 = _ZTI8S19641C2; 
Class_Descriptor cd_S19641C2 = {  "S19641C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(56,52), // object size
  NSPAIRA(_ZTI8S19641C2),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  S19641C1  : virtual S19641C2 {
  void *s19641c1f0;
  ~S19641C1(); // tgen
  S19641C1(); // tgen
};
//SIG(1 S19641C1) C1{ VBC2{ m Fc Fi[11] Fp} Fp}


S19641C1 ::~S19641C1(){ note_dtor("S19641C1", this);} // tgen
S19641C1 ::S19641C1(){ note_ctor("S19641C1", this);} // tgen

static void Test_S19641C1()
{
  extern Class_Descriptor cd_S19641C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(10,16)];
    init_test(&cd_S19641C1, buf);
    S19641C1 *dp, &lv = *(dp=new (buf) S19641C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(72,60), "sizeof(S19641C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19641C1)");
    check_base_class_offset(lv, (S19641C2*), ABISELECT(16,8), "S19641C1");
    check_field_offset(lv, s19641c1f0, ABISELECT(8,4), "S19641C1.s19641c1f0");
    test_class_info(&lv, &cd_S19641C1);
    dp->~S19641C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19641C1(Test_S19641C1, "S19641C1", ABISELECT(72,60));

#else // __cplusplus

extern void _ZN8S19641C1C1Ev();
extern void _ZN8S19641C1D1Ev();
Name_Map name_map_S19641C1[] = {
  NSPAIR(_ZN8S19641C1C1Ev),
  NSPAIR(_ZN8S19641C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S19641C2;
extern VTBL_ENTRY _ZTI8S19641C2[];
static Base_Class bases_S19641C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S19641C2,    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 _ZTI8S19641C1[];
static  VTBL_ENTRY vtc_S19641C1[] = {
  ABISELECT(16,8),
  0,
  (VTBL_ENTRY)&(_ZTI8S19641C1[0]),
};
extern VTBL_ENTRY _ZTV8S19641C1[];
static  VTT_ENTRY vtt_S19641C1[] = {
  {&(_ZTV8S19641C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19641C1[];
extern  VTBL_ENTRY _ZTV8S19641C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19641C1[];
Class_Descriptor cd_S19641C1 = {  "S19641C1", // class name
  bases_S19641C1, 1,
  &(vtc_S19641C1[0]), // expected_vtbl_contents
  &(vtt_S19641C1[0]), // expected_vtt_contents
  ABISELECT(72,60), // object size
  NSPAIRA(_ZTI8S19641C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19641C1),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19641C1),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  S11738C2_nt  {
  __tsi64 s11738c2f0[2];
};
//SIG(-1 S11738C2_nt) C1{ FL[2]}



//skip512 S11738C2_nt

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S11738C1  {
  ::S11738C2_nt s11738c1f0;
  long s11738c1f1[4];
  ::S11738C2_nt s11738c1f2;
  void *s11738c1f3;
};
//SIG(1 S11738C1) C1{ FC2{ FL[2]} Fl[4] FC2 Fp}



static void Test_S11738C1()
{
  {
    init_simple_test("S11738C1");
    S11738C1 lv;
    check2(sizeof(lv), ABISELECT(72,52), "sizeof(S11738C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S11738C1)");
    check_field_offset(lv, s11738c1f0, 0, "S11738C1.s11738c1f0");
    check_field_offset(lv, s11738c1f1, 16, "S11738C1.s11738c1f1");
    check_field_offset(lv, s11738c1f2, ABISELECT(48,32), "S11738C1.s11738c1f2");
    check_field_offset(lv, s11738c1f3, ABISELECT(64,48), "S11738C1.s11738c1f3");
  }
}
static Arrange_To_Call_Me vS11738C1(Test_S11738C1, "S11738C1", ABISELECT(72,52));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S7519C3  {
  virtual void  v1(); // _ZN7S7519C32v1Ev
  virtual void  v2(); // _ZN7S7519C32v2Ev
  ~S7519C3(); // tgen
  S7519C3(); // tgen
};
//SIG(-1 S7519C3) C1{ v1 v2}


void  S7519C3 ::v1(){vfunc_called(this, "_ZN7S7519C32v1Ev");}
void  S7519C3 ::v2(){vfunc_called(this, "_ZN7S7519C32v2Ev");}
S7519C3 ::~S7519C3(){ note_dtor("S7519C3", this);} // tgen
S7519C3 ::S7519C3(){ note_ctor("S7519C3", this);} // tgen

static void Test_S7519C3()
{
  extern Class_Descriptor cd_S7519C3;
  void *lvp;
  {
    ABISELECT(double,int) buf[2];
    init_test(&cd_S7519C3, buf);
    S7519C3 *dp, &lv = *(dp=new (buf) S7519C3());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(8,4), "sizeof(S7519C3)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7519C3)");
    test_class_info(&lv, &cd_S7519C3);
    dp->~S7519C3();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7519C3(Test_S7519C3, "S7519C3", ABISELECT(8,4));

#else // __cplusplus

extern void _ZN7S7519C3C1Ev();
extern void _ZN7S7519C3D1Ev();
Name_Map name_map_S7519C3[] = {
  NSPAIR(_ZN7S7519C3C1Ev),
  NSPAIR(_ZN7S7519C3D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI7S7519C3[];
extern void _ZN7S7519C32v1Ev();
extern void _ZN7S7519C32v2Ev();
static  VTBL_ENTRY vtc_S7519C3[] = {
  0,
  (VTBL_ENTRY)&(_ZTI7S7519C3[0]),
  (VTBL_ENTRY)&_ZN7S7519C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7519C32v2Ev,
};
extern VTBL_ENTRY _ZTI7S7519C3[];
extern  VTBL_ENTRY _ZTV7S7519C3[];
Class_Descriptor cd_S7519C3 = {  "S7519C3", // class name
  0,0,//no base classes
  &(vtc_S7519C3[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(8,4), // object size
  NSPAIRA(_ZTI7S7519C3),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV7S7519C3),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  S7519C2  : virtual S7519C3 {
  void *s7519c2f0;
  virtual void  v3(); // _ZN7S7519C22v3Ev
  ~S7519C2(); // tgen
  S7519C2(); // tgen
};
//SIG(-1 S7519C2) C1{ VBC2{ v2 v3} v1 Fp}


void  S7519C2 ::v3(){vfunc_called(this, "_ZN7S7519C22v3Ev");}
S7519C2 ::~S7519C2(){ note_dtor("S7519C2", this);} // tgen
S7519C2 ::S7519C2(){ note_ctor("S7519C2", this);} // tgen

static void Test_S7519C2()
{
  extern Class_Descriptor cd_S7519C2;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7519C2, buf);
    S7519C2 *dp, &lv = *(dp=new (buf) S7519C2());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7519C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7519C2)");
    check_base_class_offset(lv, (S7519C3*), 0, "S7519C2");
    check_field_offset(lv, s7519c2f0, ABISELECT(8,4), "S7519C2.s7519c2f0");
    test_class_info(&lv, &cd_S7519C2);
    dp->~S7519C2();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7519C2(Test_S7519C2, "S7519C2", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7519C2C1Ev();
extern void _ZN7S7519C2D1Ev();
Name_Map name_map_S7519C2[] = {
  NSPAIR(_ZN7S7519C2C1Ev),
  NSPAIR(_ZN7S7519C2D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7519C3;
extern VTBL_ENTRY _ZTI7S7519C3[];
extern  VTBL_ENTRY _ZTV7S7519C3[];
static Base_Class bases_S7519C2[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7519C3,    0, //bcp->offset
    -1, //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},
  {0}};
extern VTBL_ENTRY _ZTI7S7519C2[];
extern void _ZN7S7519C32v1Ev();
extern void _ZN7S7519C32v2Ev();
extern void _ZN7S7519C22v3Ev();
static  VTBL_ENTRY vtc_S7519C2[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7519C2[0]),
  (VTBL_ENTRY)&_ZN7S7519C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7519C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7519C22v3Ev,
};
extern VTBL_ENTRY _ZTV7S7519C2[];
static  VTT_ENTRY vtt_S7519C2[] = {
  {&(_ZTV7S7519C2[5]),  5,8},
  {&(_ZTV7S7519C2[5]),  5,8},
};
extern VTBL_ENTRY _ZTI7S7519C2[];
extern  VTBL_ENTRY _ZTV7S7519C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7519C2[];
Class_Descriptor cd_S7519C2 = {  "S7519C2", // class name
  bases_S7519C2, 1,
  &(vtc_S7519C2[0]), // expected_vtbl_contents
  &(vtt_S7519C2[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7519C2),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV7S7519C2),8, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7519C2),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  S7519C1  : S7519C2 {
  ~S7519C1(); // tgen
  S7519C1(); // tgen
};
//SIG(1 S7519C1) C1{ BC2{ VBC3{ v1 v2} v3 Fp}}


S7519C1 ::~S7519C1(){ note_dtor("S7519C1", this);} // tgen
S7519C1 ::S7519C1(){ note_ctor("S7519C1", this);} // tgen

static void Test_S7519C1()
{
  extern Class_Descriptor cd_S7519C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S7519C1, buf);
    S7519C1 *dp, &lv = *(dp=new (buf) S7519C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S7519C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S7519C1)");
    check_base_class_offset(lv, (S7519C3*)(S7519C2*), 0, "S7519C1");
    check_base_class_offset(lv, (S7519C2*), 0, "S7519C1");
    test_class_info(&lv, &cd_S7519C1);
    dp->~S7519C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS7519C1(Test_S7519C1, "S7519C1", ABISELECT(16,8));

#else // __cplusplus

extern void _ZN7S7519C1C1Ev();
extern void _ZN7S7519C1D1Ev();
Name_Map name_map_S7519C1[] = {
  NSPAIR(_ZN7S7519C1C1Ev),
  NSPAIR(_ZN7S7519C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S7519C3;
extern VTBL_ENTRY _ZTI7S7519C3[];
extern  VTBL_ENTRY _ZTV7S7519C3[];
extern Class_Descriptor cd_S7519C2;
extern VTBL_ENTRY _ZTI7S7519C2[];
extern  VTBL_ENTRY _ZTV7S7519C2[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7519C2[];
static Base_Class bases_S7519C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7519C3,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    4, //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_S7519C2,    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
    2, //init_seq
    -1, //immediately_derived
  1, 0},
  {0}};
extern VTBL_ENTRY _ZTI7S7519C1[];
extern void _ZN7S7519C32v1Ev();
extern void _ZN7S7519C32v2Ev();
extern void _ZN7S7519C22v3Ev();
static  VTBL_ENTRY vtc_S7519C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7519C1[0]),
  (VTBL_ENTRY)&_ZN7S7519C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7519C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7519C22v3Ev,
};
extern VTBL_ENTRY _ZTV7S7519C1[];
extern void _ZN7S7519C32v1Ev();
extern void _ZN7S7519C32v2Ev();
extern void _ZN7S7519C22v3Ev();
static  VTBL_ENTRY _tg__ZTV7S7519C2__7S7519C1[] = {
  0,
  0,
  0,
  0,
  (VTBL_ENTRY)&(_ZTI7S7519C2[0]),
  (VTBL_ENTRY)&_ZN7S7519C32v1Ev,
  (VTBL_ENTRY)&_ZN7S7519C32v2Ev,
  (VTBL_ENTRY)&_ZN7S7519C22v3Ev,
};
static  VTT_ENTRY vtt_S7519C1[] = {
  {&(_ZTV7S7519C1[5]),  5,8},
  {&(_tg__ZTV7S7519C2__7S7519C1[5]),  5,8},
  {&(_tg__ZTV7S7519C2__7S7519C1[5]),  5,8},
  {&(_ZTV7S7519C1[5]),  5,8},
};
extern VTBL_ENTRY _ZTI7S7519C1[];
extern  VTBL_ENTRY _ZTV7S7519C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT7S7519C1[];
Class_Descriptor cd_S7519C1 = {  "S7519C1", // class name
  bases_S7519C1, 2,
  &(vtc_S7519C1[0]), // expected_vtbl_contents
  &(vtt_S7519C1[0]), // expected_vtt_contents
  ABISELECT(16,8), // object size
  NSPAIRA(_ZTI7S7519C1),ABISELECT(24,12), //typeinfo_var
  NSPAIRA(_ZTV7S7519C1),8, //virtual function table var
  5, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT7S7519C1),4, //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  S10739C1  {
  char s10739c1f0[21];
  int s10739c1f1[2];
  char s10739c1f2[201];
};
//SIG(1 S10739C1) C1{ Fc[21] Fi[2] Fc[201]}



static void Test_S10739C1()
{
  {
    init_simple_test("S10739C1");
    S10739C1 lv;
    check2(sizeof(lv), 236, "sizeof(S10739C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10739C1)");
    check_field_offset(lv, s10739c1f0, 0, "S10739C1.s10739c1f0");
    check_field_offset(lv, s10739c1f1, 24, "S10739C1.s10739c1f1");
    check_field_offset(lv, s10739c1f2, 32, "S10739C1.s10739c1f2");
  }
}
static Arrange_To_Call_Me vS10739C1(Test_S10739C1, "S10739C1", 236);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18654C1  {
  char s18654c1f0;
  void *s18654c1f1;
  long s18654c1f2;
  virtual void  v1(); // _ZN8S18654C12v1Ev
  virtual void  v2(); // _ZN8S18654C12v2Ev
  virtual void  v3(); // _ZN8S18654C12v3Ev
  virtual void  v4(); // _ZN8S18654C12v4Ev
  ~S18654C1(); // tgen
  S18654C1(); // tgen
};
//SIG(1 S18654C1) C1{ v1 v2 v3 v4 Fc Fp Fl}


void  S18654C1 ::v1(){vfunc_called(this, "_ZN8S18654C12v1Ev");}
void  S18654C1 ::v2(){vfunc_called(this, "_ZN8S18654C12v2Ev");}
void  S18654C1 ::v3(){vfunc_called(this, "_ZN8S18654C12v3Ev");}
void  S18654C1 ::v4(){vfunc_called(this, "_ZN8S18654C12v4Ev");}
S18654C1 ::~S18654C1(){ note_dtor("S18654C1", this);} // tgen
S18654C1 ::S18654C1(){ note_ctor("S18654C1", this);} // tgen

static void Test_S18654C1()
{
  extern Class_Descriptor cd_S18654C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[5];
    init_test(&cd_S18654C1, buf);
    S18654C1 *dp, &lv = *(dp=new (buf) S18654C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,16), "sizeof(S18654C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18654C1)");
    check_field_offset(lv, s18654c1f0, ABISELECT(8,4), "S18654C1.s18654c1f0");
    check_field_offset(lv, s18654c1f1, ABISELECT(16,8), "S18654C1.s18654c1f1");
    check_field_offset(lv, s18654c1f2, ABISELECT(24,12), "S18654C1.s18654c1f2");
    test_class_info(&lv, &cd_S18654C1);
    dp->~S18654C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18654C1(Test_S18654C1, "S18654C1", ABISELECT(32,16));

#else // __cplusplus

extern void _ZN8S18654C1C1Ev();
extern void _ZN8S18654C1D1Ev();
Name_Map name_map_S18654C1[] = {
  NSPAIR(_ZN8S18654C1C1Ev),
  NSPAIR(_ZN8S18654C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18654C1[];
extern void _ZN8S18654C12v1Ev();
extern void _ZN8S18654C12v2Ev();
extern void _ZN8S18654C12v3Ev();
extern void _ZN8S18654C12v4Ev();
static  VTBL_ENTRY vtc_S18654C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18654C1[0]),
  (VTBL_ENTRY)&_ZN8S18654C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18654C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18654C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18654C12v4Ev,
};
extern VTBL_ENTRY _ZTI8S18654C1[];
extern  VTBL_ENTRY _ZTV8S18654C1[];
Class_Descriptor cd_S18654C1 = {  "S18654C1", // class name
  0,0,//no base classes
  &(vtc_S18654C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(32,16), // object size
  NSPAIRA(_ZTI8S18654C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18654C1),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  S15123C1  {
  char s15123c1f0;
  void *s15123c1f1;
  char s15123c1f2[32];
  int s15123c1f3[3];
  void  mf15123c1(); // _ZN8S15123C19mf15123c1Ev
};
//SIG(1 S15123C1) C1{ m Fc Fp Fc[32] Fi[3]}


void  S15123C1 ::mf15123c1(){}

static void Test_S15123C1()
{
  {
    init_simple_test("S15123C1");
    S15123C1 lv;
    check2(sizeof(lv), ABISELECT(64,52), "sizeof(S15123C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S15123C1)");
    check_field_offset(lv, s15123c1f0, 0, "S15123C1.s15123c1f0");
    check_field_offset(lv, s15123c1f1, ABISELECT(8,4), "S15123C1.s15123c1f1");
    check_field_offset(lv, s15123c1f2, ABISELECT(16,8), "S15123C1.s15123c1f2");
    check_field_offset(lv, s15123c1f3, ABISELECT(48,40), "S15123C1.s15123c1f3");
  }
}
static Arrange_To_Call_Me vS15123C1(Test_S15123C1, "S15123C1", ABISELECT(64,52));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10861C1  {
  char s10861c1f0[38];
  int s10861c1f1[2];
  char s10861c1f2[64];
};
//SIG(1 S10861C1) C1{ Fc[38] Fi[2] Fc[64]}



static void Test_S10861C1()
{
  {
    init_simple_test("S10861C1");
    S10861C1 lv;
    check2(sizeof(lv), 112, "sizeof(S10861C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10861C1)");
    check_field_offset(lv, s10861c1f0, 0, "S10861C1.s10861c1f0");
    check_field_offset(lv, s10861c1f1, 40, "S10861C1.s10861c1f1");
    check_field_offset(lv, s10861c1f2, 48, "S10861C1.s10861c1f2");
  }
}
static Arrange_To_Call_Me vS10861C1(Test_S10861C1, "S10861C1", 112);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S21256C1  {
  char s21256c1f0;
  int s21256c1f1[5];
  void *s21256c1f2;
  int s21256c1f3;
  void  mf21256c1(); // _ZN8S21256C19mf21256c1Ev
  virtual  ~S21256C1(); // _ZN8S21256C1D1Ev
  S21256C1(); // tgen
};
//SIG(1 S21256C1) C1{ vd m Fc Fi[5] Fp Fi}


void  S21256C1 ::mf21256c1(){}
 S21256C1 ::~S21256C1(){ note_dtor("S21256C1", this);}
S21256C1 ::S21256C1(){ note_ctor("S21256C1", this);} // tgen

static void Test_S21256C1()
{
  extern Class_Descriptor cd_S21256C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(7,10)];
    init_test(&cd_S21256C1, buf);
    S21256C1 *dp, &lv = *(dp=new (buf) S21256C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,36), "sizeof(S21256C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S21256C1)");
    check_field_offset(lv, s21256c1f0, ABISELECT(8,4), "S21256C1.s21256c1f0");
    check_field_offset(lv, s21256c1f1, ABISELECT(12,8), "S21256C1.s21256c1f1");
    check_field_offset(lv, s21256c1f2, ABISELECT(32,28), "S21256C1.s21256c1f2");
    check_field_offset(lv, s21256c1f3, ABISELECT(40,32), "S21256C1.s21256c1f3");
    test_class_info(&lv, &cd_S21256C1);
    dp->~S21256C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS21256C1(Test_S21256C1, "S21256C1", ABISELECT(48,36));

#else // __cplusplus

extern void _ZN8S21256C1C1Ev();
extern void _ZN8S21256C1D1Ev();
Name_Map name_map_S21256C1[] = {
  NSPAIR(_ZN8S21256C1C1Ev),
  NSPAIR(_ZN8S21256C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S21256C1[];
extern void _ZN8S21256C1D1Ev();
extern void _ZN8S21256C1D0Ev();
static  VTBL_ENTRY vtc_S21256C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S21256C1[0]),
  (VTBL_ENTRY)&_ZN8S21256C1D1Ev,
  (VTBL_ENTRY)&_ZN8S21256C1D0Ev,
};
extern VTBL_ENTRY _ZTI8S21256C1[];
extern  VTBL_ENTRY _ZTV8S21256C1[];
Class_Descriptor cd_S21256C1 = {  "S21256C1", // class name
  0,0,//no base classes
  &(vtc_S21256C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,36), // object size
  NSPAIRA(_ZTI8S21256C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S21256C1),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  S19649C1  : virtual S2398C24_nt {
  ::S2398C24_nt s19649c1f0;
  void *s19649c1f1;
  ~S19649C1(); // tgen
  S19649C1(); // tgen
};
//SIG(1 S19649C1) C1{ VBC2{ m Fc[5]} FC2 Fp}


S19649C1 ::~S19649C1(){ note_dtor("S19649C1", this);} // tgen
S19649C1 ::S19649C1(){ note_ctor("S19649C1", this);} // tgen

static void Test_S19649C1()
{
  extern Class_Descriptor cd_S19649C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,7)];
    init_test(&cd_S19649C1, buf);
    S19649C1 *dp, &lv = *(dp=new (buf) S19649C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,24), "sizeof(S19649C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19649C1)");
    check_base_class_offset(lv, (S2398C24_nt*), ABISELECT(24,16), "S19649C1");
    check_field_offset(lv, s19649c1f0, ABISELECT(8,4), "S19649C1.s19649c1f0");
    check_field_offset(lv, s19649c1f1, ABISELECT(16,12), "S19649C1.s19649c1f1");
    test_class_info(&lv, &cd_S19649C1);
    dp->~S19649C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19649C1(Test_S19649C1, "S19649C1", ABISELECT(32,24));

#else // __cplusplus

extern void _ZN8S19649C1C1Ev();
extern void _ZN8S19649C1D1Ev();
Name_Map name_map_S19649C1[] = {
  NSPAIR(_ZN8S19649C1C1Ev),
  NSPAIR(_ZN8S19649C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C24_nt;
extern VTBL_ENTRY _ZTI11S2398C24_nt[];
static Base_Class bases_S19649C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C24_nt,    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
    -1, //immediately_derived
  1, 1},
  {0}};
extern VTBL_ENTRY _ZTI8S19649C1[];
static  VTBL_ENTRY vtc_S19649C1[] = {
  ABISELECT(24,16),
  0,
  (VTBL_ENTRY)&(_ZTI8S19649C1[0]),
};
extern VTBL_ENTRY _ZTV8S19649C1[];
static  VTT_ENTRY vtt_S19649C1[] = {
  {&(_ZTV8S19649C1[3]),  3,3},
};
extern VTBL_ENTRY _ZTI8S19649C1[];
extern  VTBL_ENTRY _ZTV8S19649C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19649C1[];
Class_Descriptor cd_S19649C1 = {  "S19649C1", // class name
  bases_S19649C1, 1,
  &(vtc_S19649C1[0]), // expected_vtbl_contents
  &(vtt_S19649C1[0]), // expected_vtt_contents
  ABISELECT(32,24), // object size
  NSPAIRA(_ZTI8S19649C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19649C1),3, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19649C1),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  S5831C3_nt  {
  int s5831c3f0;
};
//SIG(-1 S5831C3_nt) C1{ Fi}



//skip512 S5831C3_nt

#else // __cplusplus

Class_Descriptor cd_S5831C3_nt = {  "S5831C3_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  S5831C1  : S3351C8_nt , S5831C3_nt {
  int s5831c1f0;
};
//SIG(1 S5831C1) C1{ BC2{ m Fi} BC3{ Fi} Fi}



static void Test_S5831C1()
{
  extern Class_Descriptor cd_S5831C1;
  void *lvp;
  {
    int buf[4];
    init_test(&cd_S5831C1, buf);
    S5831C1 &lv = *(new (buf) S5831C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), 12, "sizeof(S5831C1)");
    check2(__alignof__(lv), 4, "__alignof__(S5831C1)");
    check_base_class_offset(lv, (S3351C8_nt*), 0, "S5831C1");
    check_base_class_offset(lv, (S5831C3_nt*), 4, "S5831C1");
    check_field_offset(lv, s5831c1f0, 8, "S5831C1.s5831c1f0");
    test_class_info(&lv, &cd_S5831C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5831C1(Test_S5831C1, "S5831C1", 12);

#else // __cplusplus

extern Class_Descriptor cd_S3351C8_nt;
extern VTBL_ENTRY _ZTI10S3351C8_nt[];
extern Class_Descriptor cd_S5831C3_nt;
static Base_Class bases_S5831C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S3351C8_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_S5831C3_nt,    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}};
Class_Descriptor cd_S5831C1 = {  "S5831C1", // class name
  bases_S5831C1, 2,
  0, // no vftv
  0, //no vtt
  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  S18696C1  {
  void *s18696c1f0[6];
  virtual void  v1(); // _ZN8S18696C12v1Ev
  virtual void  v2(); // _ZN8S18696C12v2Ev
  virtual void  v3(); // _ZN8S18696C12v3Ev
  virtual void  v4(); // _ZN8S18696C12v4Ev
  ~S18696C1(); // tgen
  S18696C1(); // tgen
};
//SIG(1 S18696C1) C1{ v1 v2 v3 v4 Fp[6]}


void  S18696C1 ::v1(){vfunc_called(this, "_ZN8S18696C12v1Ev");}
void  S18696C1 ::v2(){vfunc_called(this, "_ZN8S18696C12v2Ev");}
void  S18696C1 ::v3(){vfunc_called(this, "_ZN8S18696C12v3Ev");}
void  S18696C1 ::v4(){vfunc_called(this, "_ZN8S18696C12v4Ev");}
S18696C1 ::~S18696C1(){ note_dtor("S18696C1", this);} // tgen
S18696C1 ::S18696C1(){ note_ctor("S18696C1", this);} // tgen

static void Test_S18696C1()
{
  extern Class_Descriptor cd_S18696C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[8];
    init_test(&cd_S18696C1, buf);
    S18696C1 *dp, &lv = *(dp=new (buf) S18696C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(56,28), "sizeof(S18696C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18696C1)");
    check_field_offset(lv, s18696c1f0, ABISELECT(8,4), "S18696C1.s18696c1f0");
    test_class_info(&lv, &cd_S18696C1);
    dp->~S18696C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18696C1(Test_S18696C1, "S18696C1", ABISELECT(56,28));

#else // __cplusplus

extern void _ZN8S18696C1C1Ev();
extern void _ZN8S18696C1D1Ev();
Name_Map name_map_S18696C1[] = {
  NSPAIR(_ZN8S18696C1C1Ev),
  NSPAIR(_ZN8S18696C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18696C1[];
extern void _ZN8S18696C12v1Ev();
extern void _ZN8S18696C12v2Ev();
extern void _ZN8S18696C12v3Ev();
extern void _ZN8S18696C12v4Ev();
static  VTBL_ENTRY vtc_S18696C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18696C1[0]),
  (VTBL_ENTRY)&_ZN8S18696C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18696C12v2Ev,
  (VTBL_ENTRY)&_ZN8S18696C12v3Ev,
  (VTBL_ENTRY)&_ZN8S18696C12v4Ev,
};
extern VTBL_ENTRY _ZTI8S18696C1[];
extern  VTBL_ENTRY _ZTV8S18696C1[];
Class_Descriptor cd_S18696C1 = {  "S18696C1", // class name
  0,0,//no base classes
  &(vtc_S18696C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(56,28), // object size
  NSPAIRA(_ZTI8S18696C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18696C1),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  S14198C1  {
  void *s14198c1f0;
  int s14198c1f1;
  long s14198c1f2;
  int s14198c1f3[4];
  void *s14198c1f4;
};
//SIG(1 S14198C1) C1{ Fp Fi Fl Fi[4] Fp}



static void Test_S14198C1()
{
  {
    init_simple_test("S14198C1");
    S14198C1 lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S14198C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14198C1)");
    check_field_offset(lv, s14198c1f0, 0, "S14198C1.s14198c1f0");
    check_field_offset(lv, s14198c1f1, ABISELECT(8,4), "S14198C1.s14198c1f1");
    check_field_offset(lv, s14198c1f2, ABISELECT(16,8), "S14198C1.s14198c1f2");
    check_field_offset(lv, s14198c1f3, ABISELECT(24,12), "S14198C1.s14198c1f3");
    check_field_offset(lv, s14198c1f4, ABISELECT(40,28), "S14198C1.s14198c1f4");
  }
}
static Arrange_To_Call_Me vS14198C1(Test_S14198C1, "S14198C1", ABISELECT(48,32));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18593C1  {
  void *s18593c1f0;
  long double s18593c1f1;
  char s18593c1f2[9];
  virtual void  v1(); // _ZN8S18593C12v1Ev
  virtual void  v2(); // _ZN8S18593C12v2Ev
  ~S18593C1(); // tgen
  S18593C1(); // tgen
};
//SIG(1 S18593C1) C1{ v1 v2 Fp FD Fc[9]}


void  S18593C1 ::v1(){vfunc_called(this, "_ZN8S18593C12v1Ev");}
void  S18593C1 ::v2(){vfunc_called(this, "_ZN8S18593C12v2Ev");}
S18593C1 ::~S18593C1(){ note_dtor("S18593C1", this);} // tgen
S18593C1 ::S18593C1(){ note_ctor("S18593C1", this);} // tgen

static void Test_S18593C1()
{
  extern Class_Descriptor cd_S18593C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(4,9)];
    init_test(&cd_S18593C1, buf);
    S18593C1 *dp, &lv = *(dp=new (buf) S18593C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(48,32), "sizeof(S18593C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18593C1)");
    check_field_offset(lv, s18593c1f0, ABISELECT(8,4), "S18593C1.s18593c1f0");
    check_field_offset(lv, s18593c1f1, ABISELECT(16,8), "S18593C1.s18593c1f1");
    check_field_offset(lv, s18593c1f2, ABISELECT(32,20), "S18593C1.s18593c1f2");
    test_class_info(&lv, &cd_S18593C1);
    dp->~S18593C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18593C1(Test_S18593C1, "S18593C1", ABISELECT(48,32));

#else // __cplusplus

extern void _ZN8S18593C1C1Ev();
extern void _ZN8S18593C1D1Ev();
Name_Map name_map_S18593C1[] = {
  NSPAIR(_ZN8S18593C1C1Ev),
  NSPAIR(_ZN8S18593C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18593C1[];
extern void _ZN8S18593C12v1Ev();
extern void _ZN8S18593C12v2Ev();
static  VTBL_ENTRY vtc_S18593C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18593C1[0]),
  (VTBL_ENTRY)&_ZN8S18593C12v1Ev,
  (VTBL_ENTRY)&_ZN8S18593C12v2Ev,
};
extern VTBL_ENTRY _ZTI8S18593C1[];
extern  VTBL_ENTRY _ZTV8S18593C1[];
Class_Descriptor cd_S18593C1 = {  "S18593C1", // class name
  0,0,//no base classes
  &(vtc_S18593C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(48,32), // object size
  NSPAIRA(_ZTI8S18593C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18593C1),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  S5750C2  {
  int s5750c2f0;
  __tsi64 s5750c2f1;
  char s5750c2f2;
  void  mf5750c2(); // _ZN7S5750C28mf5750c2Ev
};
//SIG(-1 S5750C2) C1{ m Fi FL Fc}


void  S5750C2 ::mf5750c2(){}

static void Test_S5750C2()
{
  {
    init_simple_test("S5750C2");
    S5750C2 lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S5750C2)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5750C2)");
    check_field_offset(lv, s5750c2f0, 0, "S5750C2.s5750c2f0");
    check_field_offset(lv, s5750c2f1, ABISELECT(8,4), "S5750C2.s5750c2f1");
    check_field_offset(lv, s5750c2f2, ABISELECT(16,12), "S5750C2.s5750c2f2");
  }
}
static Arrange_To_Call_Me vS5750C2(Test_S5750C2, "S5750C2", ABISELECT(24,16));

#else // __cplusplus

Class_Descriptor cd_S5750C2 = {  "S5750C2", // class name
  0,0,//no base classes
  0, // no vftv
  0, //no vtt
  ABISELECT(24,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  S5750C1  : S5750C2 {
  int s5750c1f0;
};
//SIG(1 S5750C1) C1{ BC2{ m Fi FL Fc} Fi}



static void Test_S5750C1()
{
  extern Class_Descriptor cd_S5750C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(5,6)];
    init_test(&cd_S5750C1, buf);
    S5750C1 &lv = *(new (buf) S5750C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S5750C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S5750C1)");
    check_base_class_offset(lv, (S5750C2*), 0, "S5750C1");
    check_field_offset(lv, s5750c1f0, ABISELECT(24,16), "S5750C1.s5750c1f0");
    test_class_info(&lv, &cd_S5750C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS5750C1(Test_S5750C1, "S5750C1", ABISELECT(32,20));

#else // __cplusplus

extern Class_Descriptor cd_S5750C2;
static Base_Class bases_S5750C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S5750C2,    0, //bcp->offset
    -1, //bcp->virtual_function_table_offset
    2, //num_negative_vtable_entries(t, bcp)
    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_S5750C1 = {  "S5750C1", // class name
  bases_S5750C1, 1,
  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
  0, // has_class_type_fields
  0, // alt-thunk-names
};
#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S15635C1  {
  ::S2398C24_nt s15635c1f0;
  int s15635c1f1;
  void  mf15635c1(); // _ZN8S15635C19mf15635c1Ev
};
//SIG(1 S15635C1) C1{ m FC2{ m Fc[5]} Fi}


void  S15635C1 ::mf15635c1(){}

static void Test_S15635C1()
{
  {
    init_simple_test("S15635C1");
    S15635C1 lv;
    check2(sizeof(lv), 12, "sizeof(S15635C1)");
    check2(__alignof__(lv), 4, "__alignof__(S15635C1)");
    check_field_offset(lv, s15635c1f0, 0, "S15635C1.s15635c1f0");
    check_field_offset(lv, s15635c1f1, 8, "S15635C1.s15635c1f1");
  }
}
static Arrange_To_Call_Me vS15635C1(Test_S15635C1, "S15635C1", 12);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17318C1  {
  long s17318c1f0;
  char s17318c1f1;
  long s17318c1f2;
  __tsi64 s17318c1f3;
  void *s17318c1f4;
  void  mf17318c1(); // _ZN8S17318C19mf17318c1Ev
};
//SIG(1 S17318C1) C1{ m Fl Fc Fl FL Fp}


void  S17318C1 ::mf17318c1(){}

static void Test_S17318C1()
{
  {
    init_simple_test("S17318C1");
    S17318C1 lv;
    check2(sizeof(lv), ABISELECT(40,24), "sizeof(S17318C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17318C1)");
    check_field_offset(lv, s17318c1f0, 0, "S17318C1.s17318c1f0");
    check_field_offset(lv, s17318c1f1, ABISELECT(8,4), "S17318C1.s17318c1f1");
    check_field_offset(lv, s17318c1f2, ABISELECT(16,8), "S17318C1.s17318c1f2");
    check_field_offset(lv, s17318c1f3, ABISELECT(24,12), "S17318C1.s17318c1f3");
    check_field_offset(lv, s17318c1f4, ABISELECT(32,20), "S17318C1.s17318c1f4");
  }
}
static Arrange_To_Call_Me vS17318C1(Test_S17318C1, "S17318C1", ABISELECT(40,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18336C1  {
  void *s18336c1f0[32];
  int s18336c1f1[33];
  void  mf18336c1(); // _ZN8S18336C19mf18336c1Ev
};
//SIG(1 S18336C1) C1{ m Fp[32] Fi[33]}


void  S18336C1 ::mf18336c1(){}

static void Test_S18336C1()
{
  {
    init_simple_test("S18336C1");
    S18336C1 lv;
    check2(sizeof(lv), ABISELECT(392,260), "sizeof(S18336C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18336C1)");
    check_field_offset(lv, s18336c1f0, 0, "S18336C1.s18336c1f0");
    check_field_offset(lv, s18336c1f1, ABISELECT(256,128), "S18336C1.s18336c1f1");
  }
}
static Arrange_To_Call_Me vS18336C1(Test_S18336C1, "S18336C1", ABISELECT(392,260));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S19650C1  : virtual S2398C24_nt {
  virtual void  v1(); // _ZN8S19650C12v1Ev
  ~S19650C1(); // tgen
  S19650C1(); // tgen
};
//SIG(1 S19650C1) C1{ VBC2{ m Fc[5]} v1}


void  S19650C1 ::v1(){vfunc_called(this, "_ZN8S19650C12v1Ev");}
S19650C1 ::~S19650C1(){ note_dtor("S19650C1", this);} // tgen
S19650C1 ::S19650C1(){ note_ctor("S19650C1", this);} // tgen

static void Test_S19650C1()
{
  extern Class_Descriptor cd_S19650C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(3,4)];
    init_test(&cd_S19650C1, buf);
    S19650C1 *dp, &lv = *(dp=new (buf) S19650C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,12), "sizeof(S19650C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S19650C1)");
    check_base_class_offset(lv, (S2398C24_nt*), ABISELECT(8,4), "S19650C1");
    test_class_info(&lv, &cd_S19650C1);
    dp->~S19650C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS19650C1(Test_S19650C1, "S19650C1", ABISELECT(16,12));

#else // __cplusplus

extern void _ZN8S19650C1C1Ev();
extern void _ZN8S19650C1D1Ev();
Name_Map name_map_S19650C1[] = {
  NSPAIR(_ZN8S19650C1C1Ev),
  NSPAIR(_ZN8S19650C1D1Ev),
  {0,0}
};
extern Class_Descriptor cd_S2398C24_nt;
extern VTBL_ENTRY _ZTI11S2398C24_nt[];
static Base_Class bases_S19650C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S2398C24_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},
  {0}};
extern VTBL_ENTRY _ZTI8S19650C1[];
extern void _ZN8S19650C12v1Ev();
static  VTBL_ENTRY vtc_S19650C1[] = {
  ABISELECT(8,4),
  0,
  (VTBL_ENTRY)&(_ZTI8S19650C1[0]),
  (VTBL_ENTRY)&_ZN8S19650C12v1Ev,
};
extern VTBL_ENTRY _ZTV8S19650C1[];
static  VTT_ENTRY vtt_S19650C1[] = {
  {&(_ZTV8S19650C1[3]),  3,4},
};
extern VTBL_ENTRY _ZTI8S19650C1[];
extern  VTBL_ENTRY _ZTV8S19650C1[];
extern  VTBL_ENTRY * __attribute__((weak))_ZTT8S19650C1[];
Class_Descriptor cd_S19650C1 = {  "S19650C1", // class name
  bases_S19650C1, 1,
  &(vtc_S19650C1[0]), // expected_vtbl_contents
  &(vtt_S19650C1[0]), // expected_vtt_contents
  ABISELECT(16,12), // object size
  NSPAIRA(_ZTI8S19650C1),ABISELECT(40,24), //typeinfo_var
  NSPAIRA(_ZTV8S19650C1),4, //virtual function table var
  3, // offset into main vftv pointed to by object[0]
  NSPAIRA(_ZTT8S19650C1),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  S13195C1  {
  int s13195c1f0[2];
  void *s13195c1f1;
  int s13195c1f2;
  void *s13195c1f3;
};
//SIG(1 S13195C1) C1{ Fi[2] Fp Fi Fp}



static void Test_S13195C1()
{
  {
    init_simple_test("S13195C1");
    S13195C1 lv;
    check2(sizeof(lv), ABISELECT(32,20), "sizeof(S13195C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13195C1)");
    check_field_offset(lv, s13195c1f0, 0, "S13195C1.s13195c1f0");
    check_field_offset(lv, s13195c1f1, 8, "S13195C1.s13195c1f1");
    check_field_offset(lv, s13195c1f2, ABISELECT(16,12), "S13195C1.s13195c1f2");
    check_field_offset(lv, s13195c1f3, ABISELECT(24,16), "S13195C1.s13195c1f3");
  }
}
static Arrange_To_Call_Me vS13195C1(Test_S13195C1, "S13195C1", ABISELECT(32,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18550C1  {
  short s18550c1f0;
  long double s18550c1f1;
  int s18550c1f2;
  long double s18550c1f3;
  virtual void  v1(); // _ZN8S18550C12v1Ev
  ~S18550C1(); // tgen
  S18550C1(); // tgen
};
//SIG(1 S18550C1) C1{ v1 Fs FD Fi FD}


void  S18550C1 ::v1(){vfunc_called(this, "_ZN8S18550C12v1Ev");}
S18550C1 ::~S18550C1(){ note_dtor("S18550C1", this);} // tgen
S18550C1 ::S18550C1(){ note_ctor("S18550C1", this);} // tgen

static void Test_S18550C1()
{
  extern Class_Descriptor cd_S18550C1;
  void *lvp;
  {
    ABISELECT(sal_16,int) buf[ABISELECT(5,10)];
    init_test(&cd_S18550C1, buf);
    S18550C1 *dp, &lv = *(dp=new (buf) S18550C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(64,36), "sizeof(S18550C1)");
    check2(__alignof__(lv), ABISELECT(16,4), "__alignof__(S18550C1)");
    check_field_offset(lv, s18550c1f0, ABISELECT(8,4), "S18550C1.s18550c1f0");
    check_field_offset(lv, s18550c1f1, ABISELECT(16,8), "S18550C1.s18550c1f1");
    check_field_offset(lv, s18550c1f2, ABISELECT(32,20), "S18550C1.s18550c1f2");
    check_field_offset(lv, s18550c1f3, ABISELECT(48,24), "S18550C1.s18550c1f3");
    test_class_info(&lv, &cd_S18550C1);
    dp->~S18550C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18550C1(Test_S18550C1, "S18550C1", ABISELECT(64,36));

#else // __cplusplus

extern void _ZN8S18550C1C1Ev();
extern void _ZN8S18550C1D1Ev();
Name_Map name_map_S18550C1[] = {
  NSPAIR(_ZN8S18550C1C1Ev),
  NSPAIR(_ZN8S18550C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18550C1[];
extern void _ZN8S18550C12v1Ev();
static  VTBL_ENTRY vtc_S18550C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18550C1[0]),
  (VTBL_ENTRY)&_ZN8S18550C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S18550C1[];
extern  VTBL_ENTRY _ZTV8S18550C1[];
Class_Descriptor cd_S18550C1 = {  "S18550C1", // class name
  0,0,//no base classes
  &(vtc_S18550C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(64,36), // object size
  NSPAIRA(_ZTI8S18550C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18550C1),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  S10737C1  {
  char s10737c1f0[21];
  int s10737c1f1[102];
};
//SIG(1 S10737C1) C1{ Fc[21] Fi[102]}



static void Test_S10737C1()
{
  {
    init_simple_test("S10737C1");
    S10737C1 lv;
    check2(sizeof(lv), 432, "sizeof(S10737C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10737C1)");
    check_field_offset(lv, s10737c1f0, 0, "S10737C1.s10737c1f0");
    check_field_offset(lv, s10737c1f1, 24, "S10737C1.s10737c1f1");
  }
}
static Arrange_To_Call_Me vS10737C1(Test_S10737C1, "S10737C1", 432);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S16479C1  {
  ::S7291C10_nt s16479c1f0;
  void *s16479c1f1;
  int s16479c1f2;
  void  mf16479c1(); // _ZN8S16479C19mf16479c1Ev
};
//SIG(1 S16479C1) C1{ m FC2{ m} Fp Fi}


void  S16479C1 ::mf16479c1(){}

static void Test_S16479C1()
{
  {
    init_simple_test("S16479C1");
    S16479C1 lv;
    check2(sizeof(lv), ABISELECT(24,12), "sizeof(S16479C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S16479C1)");
    check_field_offset(lv, s16479c1f0, 0, "S16479C1.s16479c1f0");
    check_field_offset(lv, s16479c1f1, ABISELECT(8,4), "S16479C1.s16479c1f1");
    check_field_offset(lv, s16479c1f2, ABISELECT(16,8), "S16479C1.s16479c1f2");
  }
}
static Arrange_To_Call_Me vS16479C1(Test_S16479C1, "S16479C1", ABISELECT(24,12));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S17725C1  {
  void *s17725c1f0;
  int s17725c1f1;
  long s17725c1f2[3];
  void  mf17725c1(); // _ZN8S17725C19mf17725c1Ev
};
//SIG(1 S17725C1) C1{ m Fp Fi Fl[3]}


void  S17725C1 ::mf17725c1(){}

static void Test_S17725C1()
{
  {
    init_simple_test("S17725C1");
    S17725C1 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S17725C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S17725C1)");
    check_field_offset(lv, s17725c1f0, 0, "S17725C1.s17725c1f0");
    check_field_offset(lv, s17725c1f1, ABISELECT(8,4), "S17725C1.s17725c1f1");
    check_field_offset(lv, s17725c1f2, ABISELECT(16,8), "S17725C1.s17725c1f2");
  }
}
static Arrange_To_Call_Me vS17725C1(Test_S17725C1, "S17725C1", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14682C1  {
  void *s14682c1f0[4];
  int s14682c1f1[35];
};
//SIG(1 S14682C1) C1{ Fp[4] Fi[35]}



static void Test_S14682C1()
{
  {
    init_simple_test("S14682C1");
    S14682C1 lv;
    check2(sizeof(lv), ABISELECT(176,156), "sizeof(S14682C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14682C1)");
    check_field_offset(lv, s14682c1f0, 0, "S14682C1.s14682c1f0");
    check_field_offset(lv, s14682c1f1, ABISELECT(32,16), "S14682C1.s14682c1f1");
  }
}
static Arrange_To_Call_Me vS14682C1(Test_S14682C1, "S14682C1", ABISELECT(176,156));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S6220C1  : S7291C10_nt {
  void *s6220c1f0;
  char s6220c1f1;
};
//SIG(1 S6220C1) C1{ BC2{ m} Fp Fc}



static void Test_S6220C1()
{
  extern Class_Descriptor cd_S6220C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[3];
    init_test(&cd_S6220C1, buf);
    S6220C1 &lv = *(new (buf) S6220C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(16,8), "sizeof(S6220C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S6220C1)");
    check_base_class_offset(lv, (S7291C10_nt*), 0, "S6220C1");
    check_field_offset(lv, s6220c1f0, 0, "S6220C1.s6220c1f0");
    check_field_offset(lv, s6220c1f1, ABISELECT(8,4), "S6220C1.s6220c1f1");
    test_class_info(&lv, &cd_S6220C1);
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS6220C1(Test_S6220C1, "S6220C1", ABISELECT(16,8));

#else // __cplusplus

extern Class_Descriptor cd_S7291C10_nt;
extern VTBL_ENTRY _ZTI11S7291C10_nt[];
static Base_Class bases_S6220C1[] = {
  // ofst, vfto, nneg, vtt_idx, base_vtt_idx, init_seq, direct, virtual
  {&cd_S7291C10_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_S6220C1 = {  "S6220C1", // class name
  bases_S6220C1, 1,
  0, // no vftv
  0, //no vtt
  ABISELECT(16,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  S18469C1  {
  char s18469c1f0;
  int s18469c1f1;
  void *s18469c1f2;
  virtual void  v1(); // _ZN8S18469C12v1Ev
  ~S18469C1(); // tgen
  S18469C1(); // tgen
};
//SIG(1 S18469C1) C1{ v1 Fc Fi Fp}


void  S18469C1 ::v1(){vfunc_called(this, "_ZN8S18469C12v1Ev");}
S18469C1 ::~S18469C1(){ note_dtor("S18469C1", this);} // tgen
S18469C1 ::S18469C1(){ note_ctor("S18469C1", this);} // tgen

static void Test_S18469C1()
{
  extern Class_Descriptor cd_S18469C1;
  void *lvp;
  {
    ABISELECT(double,int) buf[ABISELECT(4,5)];
    init_test(&cd_S18469C1, buf);
    S18469C1 *dp, &lv = *(dp=new (buf) S18469C1());
    lvp = (void*)&lv;
    check2(sizeof(lv), ABISELECT(24,16), "sizeof(S18469C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S18469C1)");
    check_field_offset(lv, s18469c1f0, ABISELECT(8,4), "S18469C1.s18469c1f0");
    check_field_offset(lv, s18469c1f1, ABISELECT(12,8), "S18469C1.s18469c1f1");
    check_field_offset(lv, s18469c1f2, ABISELECT(16,12), "S18469C1.s18469c1f2");
    test_class_info(&lv, &cd_S18469C1);
    dp->~S18469C1();
  }
  Check_Ctor_Dtor_Calls(lvp);
}
static Arrange_To_Call_Me vS18469C1(Test_S18469C1, "S18469C1", ABISELECT(24,16));

#else // __cplusplus

extern void _ZN8S18469C1C1Ev();
extern void _ZN8S18469C1D1Ev();
Name_Map name_map_S18469C1[] = {
  NSPAIR(_ZN8S18469C1C1Ev),
  NSPAIR(_ZN8S18469C1D1Ev),
  {0,0}
};
extern VTBL_ENTRY _ZTI8S18469C1[];
extern void _ZN8S18469C12v1Ev();
static  VTBL_ENTRY vtc_S18469C1[] = {
  0,
  (VTBL_ENTRY)&(_ZTI8S18469C1[0]),
  (VTBL_ENTRY)&_ZN8S18469C12v1Ev,
};
extern VTBL_ENTRY _ZTI8S18469C1[];
extern  VTBL_ENTRY _ZTV8S18469C1[];
Class_Descriptor cd_S18469C1 = {  "S18469C1", // class name
  0,0,//no base classes
  &(vtc_S18469C1[0]), // expected_vtbl_contents
  0, //no vtt
  ABISELECT(24,16), // object size
  NSPAIRA(_ZTI8S18469C1),ABISELECT(16,8), //typeinfo_var
  NSPAIRA(_ZTV8S18469C1),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  S12644C1  {
  int s12644c1f0;
  long s12644c1f1[4];
  void *s12644c1f2;
};
//SIG(1 S12644C1) C1{ Fi Fl[4] Fp}



static void Test_S12644C1()
{
  {
    init_simple_test("S12644C1");
    S12644C1 lv;
    check2(sizeof(lv), ABISELECT(48,24), "sizeof(S12644C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S12644C1)");
    check_field_offset(lv, s12644c1f0, 0, "S12644C1.s12644c1f0");
    check_field_offset(lv, s12644c1f1, ABISELECT(8,4), "S12644C1.s12644c1f1");
    check_field_offset(lv, s12644c1f2, ABISELECT(40,20), "S12644C1.s12644c1f2");
  }
}
static Arrange_To_Call_Me vS12644C1(Test_S12644C1, "S12644C1", ABISELECT(48,24));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S14663C1  {
  void *s14663c1f0[4];
  char s14663c1f1[4];
};
//SIG(1 S14663C1) C1{ Fp[4] Fc[4]}



static void Test_S14663C1()
{
  {
    init_simple_test("S14663C1");
    S14663C1 lv;
    check2(sizeof(lv), ABISELECT(40,20), "sizeof(S14663C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S14663C1)");
    check_field_offset(lv, s14663c1f0, 0, "S14663C1.s14663c1f0");
    check_field_offset(lv, s14663c1f1, ABISELECT(32,16), "S14663C1.s14663c1f1");
  }
}
static Arrange_To_Call_Me vS14663C1(Test_S14663C1, "S14663C1", ABISELECT(40,20));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10785C1  {
  char s10785c1f0[256];
  void *s10785c1f1;
};
//SIG(1 S10785C1) C1{ Fc[256] Fp}



static void Test_S10785C1()
{
  {
    init_simple_test("S10785C1");
    S10785C1 lv;
    check2(sizeof(lv), ABISELECT(264,260), "sizeof(S10785C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S10785C1)");
    check_field_offset(lv, s10785c1f0, 0, "S10785C1.s10785c1f0");
    check_field_offset(lv, s10785c1f1, 256, "S10785C1.s10785c1f1");
  }
}
static Arrange_To_Call_Me vS10785C1(Test_S10785C1, "S10785C1", ABISELECT(264,260));

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10480C1  {
  char s10480c1f0;
  int s10480c1f1[3];
};
//SIG(1 S10480C1) C1{ Fc Fi[3]}



static void Test_S10480C1()
{
  {
    init_simple_test("S10480C1");
    S10480C1 lv;
    check2(sizeof(lv), 16, "sizeof(S10480C1)");
    check2(__alignof__(lv), 4, "__alignof__(S10480C1)");
    check_field_offset(lv, s10480c1f0, 0, "S10480C1.s10480c1f0");
    check_field_offset(lv, s10480c1f1, 4, "S10480C1.s10480c1f1");
  }
}
static Arrange_To_Call_Me vS10480C1(Test_S10480C1, "S10480C1", 16);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S13788C1  {
  __tsi64 s13788c1f0;
  int s13788c1f1[4];
};
//SIG(1 S13788C1) C1{ FL Fi[4]}



static void Test_S13788C1()
{
  {
    init_simple_test("S13788C1");
    S13788C1 lv;
    check2(sizeof(lv), 24, "sizeof(S13788C1)");
    check2(__alignof__(lv), ABISELECT(8,4), "__alignof__(S13788C1)");
    check_field_offset(lv, s13788c1f0, 0, "S13788C1.s13788c1f0");
    check_field_offset(lv, s13788c1f1, 8, "S13788C1.s13788c1f1");
  }
}
static Arrange_To_Call_Me vS13788C1(Test_S13788C1, "S13788C1", 24);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S10936C1  {
  char s10936c1f0[461];
};
//SIG(1 S10936C1) C1{ Fc[461]}



static void Test_S10936C1()
{
  {
    init_simple_test("S10936C1");
    S10936C1 lv;
    check2(sizeof(lv), 461, "sizeof(S10936C1)");
    check2(__alignof__(lv), 1, "__alignof__(S10936C1)");
    check_field_offset(lv, s10936c1f0, 0, "S10936C1.s10936c1f0");
  }
}
static Arrange_To_Call_Me vS10936C1(Test_S10936C1, "S10936C1", 461);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

#ifdef __cplusplus

struct  S18429C1  {
  short s18429c1f0:5;
  void  mf18429c1(); // _ZN8S18429C19mf18429c1Ev
};
//SIG(1 S18429C1) C1{ m Fs:5}


void  S18429C1 ::mf18429c1(){}

static void Test_S18429C1()
{
  {
    init_simple_test("S18429C1");
    static S18429C1 lv;
    check2(sizeof(lv), 2, "sizeof(S18429C1)");
    check2(__alignof__(lv), 2, "__alignof__(S18429C1)");
    set_bf_and_test(lv, s18429c1f0, 0, 0, 5, 1, "S18429C1");
    set_bf_and_test(lv, s18429c1f0, 0, 0, 5, hide_sll(1LL<<4), "S18429C1");
  }
}
static Arrange_To_Call_Me vS18429C1(Test_S18429C1, "S18429C1", 2);

#else // __cplusplus

#endif // __cplusplus

//============================================================================

